| Bytes | Lang | Time | Link |
|---|---|---|---|
| nan | C clang | 240904T131556Z | jdt |
| 485 | JavaScript ES7 | 240903T214854Z | Arnauld |
| nan | 05AB1E | 240904T115701Z | Kevin Cr |
| 160 | Charcoal | 240904T104850Z | Neil |
| 503 | JavaScript Node.js | 240904T062626Z | l4m2 |
| 972 | Funge98 | 240904T052319Z | Alt Shif |
| 610 | Google Sheets | 240903T222006Z | doubleun |
| 156 | Vyxal | 240903T214715Z | emanresu |
C (clang), Score 678 675 669 (312 bytes)
*a[]={">[>]+<[+<]>>>>>>>>>[+]<<<<<<<<<",">,>,>,>,>,>,>,>,<<<<<<<<",">>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>[+]<<<<<<<<<",">;>;>;>;>;>;>;>;<<<<<<<<","<<<<<<<<<",">>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>[+<<<<<<<<[>]+<[+<]",">>>>>>>>>",">>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>]<[+<]"};f(s[]){for(;*s;)printf(a[*s++%43%13]);}
Inspired by @Arnauld's JavaScript answer.
Changed the index calculation to n % 43 % 13 to avoid empty strings in the dictionary thus saving a whopping 3 points from the score =)
JavaScript (ES7), Score: 492 485
The scoring scheme makes most compression attempts counter-productive. So what we really want to do is just use as few expensive characters as possible... ¯\_(ツ)_/¯
Expects an array of ASCII codes.
a=>a.map(c=>[[">>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>"][8>>c**7]]+`[+<<<<<<<<[>]+<[+<]--]<[+<]-->[>]+<[+<]>>>>>>>>>[+]<<<<<<<<<->,>,>,>,>,>,>,>,<<<<<<<<-[+]<<<<<<<<<->;>;>;>;>;>;>;>;<<<<<<<<-<<<<<<<<<-->>>>>>>>>`.split`-`[c%13]).join``
05AB1E, score 292 (166 bytes)
“>-+.+[>+]<[<]>-[+.[>]+<[+<]-->-+.+[>+]<[<]>-]<[+<]-->[>]+<[+<]>-[+].<->,>,>,>,>,>,>,>,.->-+.+[>+]<[<]>-[+].<->;>;>;>;>;>;>;>;.-.<-->-“„>-¬9×:'.“<<<<<<<<“:'-¡IT>>>%èJ
Port of @Arnauld's first JavaScript answer, with some additional score improvements by using replaces.
Input as a list of code-point integers.
Explanation:
“>-+…>-“ # Push this string
„>- # Push ">-"
¬ # Push its first character without popping: ">"
9× # Repeat it 9 times: ">>>>>>>>>"
: # Replace all ">-" with ">>>>>>>>>" in the big string
'. '# Push "."
“<<<<<<<<“ # Push "<<<<<<<<"
: # Replace all "." with "<<<<<<<<" in the big string
'-¡ '# Then split on "-"
I # Push the input-list of codepoint-integers
T # Push 10
>>> # Increase it three times to 13
% # Modulo
è # 0-based index each into the list of strings
J # Join this list to a single string
# (which is output implicitly as result)
Charcoal, 160 bytes, score 265
⭆S§⪪⪫⪪⪫⪪-+.+[>+]<[<]-[+.[>]+<[+<]++++-+.+[>+]<[<]-]<[+<]++++>[>]+<[+<]-[+].<++>,>,>,>,>,>,>,>,.++-+.+[>+]<[<]-[+].<++>;>;>;>;>;>;>;>;.++.<++++-++++¦-×>⁹.×<⁸++℅ι
Attempt This Online! Link is to verbose version of code. Explanation: Port of @Arnauld's JavaScript answer, but modified using @Ausername's compression.
S Input string
⭆ Map over characters and join
... Translation string
⪫⪪ -×>⁹ Replace `-` with nine `>`s
⪫⪪ .×<⁸ Replace `.` with eight `<`s
⪪ ++ Split on literal string `++`
§ Indexed by
ι Current character
℅ Ordinal
Implicitly print
JavaScript (Node.js), 503 score
f=([c,...a])=>c?`;+>[>]+<[+<]>>>>>>>>>[+]<<<<<<<<<;+;->>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>[+]<<<<<<<<<;-;<<<<<<<<<<;<;>>>>>>>>>>;>;,>,>,>,>,>,>,>,>,<<<<<<<<;,;.>.>.>.>.>.>.>.>.<<<<<<<<;.;[>>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>[+<<<<<<<<[>]+<[+<];[;]>>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>]<[+<]`.split(';'+c)[1]+f(a):[]
Each map is surrounded by ;<char><mapped>;<char> to allow low-cost indicing
Funge-98, score 972
~:'+-!#[_>:'--!>#]_>:'<-!>#[_>:'>-!#[_>:',-!#[_>:'.-!>>#]_>:'[-!>>>>>>>#]_']-!#]_>
]].....[$"<<<<<<<<<]+[>>>>>>>>>]<+[<+]>[>";..[$"<<<<<<<<,>,>,>,>,>,>,>,>"#;
[<...............]$"<<<<<<<<<]++-[>>+->>>>>>>]<[<]+>[+<<<<<<<<+>>>>>>>>>">
[<<<<<<<<<<<<<<<;+;<<<<<<<<<:k7<<<<<]...................]$"<<<<<<<<;>;>;>;>;>;>;>;>"
>,:1j2_]<<">>>>>>+->>>+<<<<<<<<+[>+]<[<]>>>>>>>>>[+<<<<<+-<<<[>]+<[+<]"$[
<<<<<<<]<<<<<<<<;+;<<<<<<<<<<<<">>>>>>>>>+<<<<<<<<+[>+]<+-[<]>>>>>>+->>>]<[+<]"<.]
The program never halts, so if you run it using TIO, you have to manually cancel execution in order to view the output.
Google Sheets, score 610
=switch(A1,"+",">[>]+<[+<]>>>>>>>>>[+]<<<<<<<<<","-",">>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>[+]<<<<<<<<<","<","<<<<<<<<<",">",">>>>>>>>>",",",">,>,>,>,>,>,>,>,<<<<<<<<",".",">;>;>;>;>;>;>;>;<<<<<<<<","[",">>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>[+<<<<<<<<[>]+<[+<]","]",">>>>>>>>>+<<<<<<<<+[>+]<[<]>>>>>>>>>]<[+<]")
Dumb solution, compression doesn't seem to pay because of the scoring system.

Vyxal, 156 bytes, score 247
kT`;>+-+[>+]<[<];>[+-[>]+<[+<]++;>+-+[>+]<[<];>]<[+<]++-<++;>++;>+-+[>+]<[<];>[+]-<++>[>]+<[+<];>[+]-<++>.>.>.>.>.>.>.>.-++>,>,>,>,>,>,>,>,-`‛-;‛<>f8*Ŀ‛++/Ŀ
There's not much room for optimisation here, because any trick has to save eight times the cost of the program encoding it. So, all this does is replace long runs of > and < with - and ;, and separate builtins with ++, then replace the corresponding commands.
For a shorter but worse-scoring solution:
Vyxal, 76 bytes, score 601
kT«Wėm¦n½LøsJƒ›WǎQøḢi‹WK⇩f↑¼,uṪ∑¥↳₁ṡ²₈>⊍₌?-₀O∷×Ḟ•ṫ¼i8#S⇧⌐«n8ẎkTĿn∷9Ẏ(n/ṫj)⌈Ŀ
A more compressed approach that doesn't really work with the custom scoring. This uses various regpack-based compression tricks and it's a bit of a mess.