3
\$\begingroup\$

"nimi ale lon toki pona" is a song by YouTuber jan Misali which lists 137 common words in the constructed language Toki Pona. This challenge is not a duplicate of "How high can you count?" or "Alphabet printing challenge" because instead of numbers or single characters, it outputs random (to many programming languages) strings of 13 different characters.

So here is the challenge:

You have to write as many programs/snippets as you can, each outputting/returning a Toki Pona word listed in the song, in sequential order. For example, the first program/snippet will print mi, the next sina, and so on, up until and including kijetesantakalu.

However, you are not allowed to reuse any character between programs, whitespace included. For example, if your first program is echo mi (Bash), no e, c, h, o, m, i or spaces are allowed in any of your other programs.

The winner of this challenge is the first submission to print all 137 words. However, if no such submission is posted in four weeks, the submission which prints the most words wins, ties go to the earliest submission with the most words.

Rules:

  • You can only use a single language for every word, no polyglots.
  • Leading and trailing spaces (U+0020), tabs (U+0009) and newlines (U+000A and U+000C) are allowed.
  • You can disregard stderr, as long as the correct output is returned to stdout.
  • Words must be in all lowercase, so MI is not allowed.
  • The programs/snippets must be independent, meaning that each must be valid when run individually with nothing else (for example, console.log(a); (JavaScript) is not allowed because var a="mi"; must be prepended to it for the code to work)
  • You can include functions in your program/snippet, but the whole program/snippet should work when run by itself, so a=function(){console.log("mi");}; (also JavaScript) is bad, but a=function(){console.log("mi");};a(); is good.
  • All your programs/snippets must be at least 1 byte long.

To save time, the 137 words are:

mi
sina
ni
ona
olin
musi
suwi
pona
li
e
la
pi
o
anu
en
seme
ijo
kule
lukin
kalama
kute
ala
wan
tu
mute
soweli
akesi
pipi
waso
kala
loje
jelo
laso
supa
linja
insa
selo
ko
kiwen
kon
telo
sewi
anpa
sinpin
monsi
jan
meli
mije
tonsi
supa
poka
nasin
kulupu
poki
sitelen
nimi
lipu
toki
lete
seli
suli
lili
kasi
pan
moku
kili
kama
open
awen
pini
wile
esun
mani
kipisi
pana
jo
lanpan
tenpo
weka
jaki
ale
meso
pilin
uta
unpa
oko
ken
sin
namako
soko
len
taso
walo
pimeja
mu
wawa
a
monsuta
n
kin
misikeke
epiku
kokosila
pu
ku
kijetesantakalu
\$\endgroup\$
16
  • 1
    \$\begingroup\$ To clarify--I think this is what you mean, but I wanted to make sure--we're not allowed to skip words, right? If I write three programs, they must output "mi", "sina", and "ni" and can't output "mi", "e", and "o"? \$\endgroup\$
    – DLosc
    Commented Mar 18 at 18:02
  • 17
    \$\begingroup\$ I seriously doubt this is possible. Before even encoding the data in unique ways you need a language that can output/return/print in 137 ways using unique sets of bytes. Only languages that print by default even have a hope. \$\endgroup\$ Commented Mar 18 at 18:19
  • 1
    \$\begingroup\$ @DLosc Yes, you are not allowed to skip words. \$\endgroup\$ Commented Mar 18 at 19:33
  • 3
    \$\begingroup\$ @noodleman I would assume they are allowed. It's not possible to do this with 256 possible character values unless some programs have only one character value in them. Assuming each program uses 2 characters, you could get to 128 programs max. Either we use a length-encoded language or we expand the character set with something like sclipting, which uses Chinese characters. \$\endgroup\$ Commented Mar 18 at 20:41
  • 3
    \$\begingroup\$ Is ă̅ ('a\u0306\u0305'; a with two combining diacritic marks) one character or three? I guess the latter, but just to point out that "character" can be defined in multiple ways. (If the answer is 1, I'm pretty sure there is at least one language that can achieve score 137 using that.) \$\endgroup\$
    – Bubbler
    Commented Mar 19 at 1:33

9 Answers 9

17
\$\begingroup\$

Aheui (rpaheui), score 18

mi

밟밟따밤밝따다빠맣밤타맣하

Attempt This Online!

sina

벏허멓터벏뻐멓더범뻐멓더벟뻐멓더벏뻐더떠벌벌떠벏

Attempt This Online!

ni

뱗ㅇ뱗ㅇ땨ㅇ뱜ㅇ뱞ㅇ땨ㅇ댜ㅇ뺘ㅇ뱔ㅇ댜ㅇ먛ㅇ먛ㅇ햐

Attempt This Online!

ona

볇혀ㅎ몋ㅎ텨ㅎ볇ㅎ몋ㅎ뎌ㅎ볌ㅎ뼈ㅎ몋ㅎ뎌ㅎ별ㅎ뼈ㅎ뎌ㅎ뗘ㅎ별ㅎ별ㅎ뗘ㅎ볇

Attempt This Online!

olin

아븗븗뜨븜븞뜨드쁘븞드믛쁘븓드믛쁘믛블드믛흐

Attempt This Online!

musi

악밻밻때뱀밹때대빼맿빼밿대맿빼뱂대맿뱀태맿해

Attempt This Online!

suwi

안벫벫떼벨벲떼데뻬벰데멯뻬벲데멯뻬벯데멯벲테멯헤

Attempt This Online!

pona

앋뱳뱳떄뱰뱰떄댸뺴뱺댸먷뺴뱰댸먷뺴뱸댸먷뱳턔먷햬

Attempt This Online!

li

알볣볣뎨볪뗴뼤몧볟톄몧혜

Attempt This Online!

e

암배배밾밾땍밵밲땍댁밲밲낵낵밓

Attempt This Online!

la

압봷봷돼봾뙈뽸뫻봷퇘봭퇘뫻홰

Attempt This Online!

pi

앗뵏뵐뵑뙤뙤뾔뵑되묗묗회

Attempt This Online!

o

앙베베벮벮떽벮벸떽덱벸덱벸벸넥넥믷

Attempt This Online!

anu

앚뷃뷃뛔뷈뷈뛔뒈쀄뮇뷀뒈뷇뒈쀄뮇뷁뒈뮇훼

Attempt This Online!

en

앛뷟뷟뛰뷜뷤뛰뒤쀠뮣뷟뒤뮣휘

Attempt This Online!

seme

앜봛봛똬봠봙똬돠뽜봢돠뫟뽜봟톼뫟뽜뫟봟톼뫟화

Attempt This Online!

ijo

앝붧붧뚸붤붮뚸둬뿨붮퉈뭫뿨붤퉈뭫뭫훠

Attempt This Online!

kule

붋
붋
두
붒
뚜
뿌
붛
두
뭏
뿌
붋
두
뭏
뿌
뭏
붉
투
뭏
후

Attempt This Online!

Aheui is a 2D language using Hangul characters. Its character output command requires the initial consonant and final consonant , but the vowel can be anything out of ㅏㅓㅑㅕㅐㅔㅒㅖㅘㅙㅚㅝㅞㅟㅡㅣㅢㅗㅜㅛㅠ, giving the theoretical maximum score of 21.

Out of these, ㅗㅜㅛㅠ forces vertical movement after printing a character, which leads to an infinite loop in one-line programs. A newline is necessary to avoid that, which means that only one out of the four can be used. vowel is used in the 18th program.

Also, and reflect the cursor horizontally. I couldn't find any way to end the program normally using a (halt) instruction, so I decided to trigger division by zero right after reflection. Fortunately, there are exactly two single-letter words that allow this approach (e and o).

The rest of the vowels are relatively easy. ㅏㅓㅑㅕ force movement of +1, -1, +2, -2 respectively, and ㅡㅐㅔㅒㅖㅘㅙㅚㅝㅞㅟ keep the current movement. For the latter group, a leading is necessary since the default movement goes down; I use dummy final consonants there to meet the different characters restriction. The same vowel was used for all other instructions within a single program.

\$\endgroup\$
2
  • \$\begingroup\$ How do and relate to anything actually visible in the program? \$\endgroup\$
    – Neil
    Commented Mar 19 at 9:58
  • 3
    \$\begingroup\$ If you mean the first paragraph, the printing instruction can be one of 맣멓먛몋맿멯먷 ... 뫃뭏묳뮿, 18 of which appear in exactly one program. The first program uses only , the second only and so on. \$\endgroup\$
    – Bubbler
    Commented Mar 19 at 10:21
7
\$\begingroup\$

uconv -x NFKD: score 48, probably cheating

We can (ab)use unicode equivalence to input "programs" which have different unicode characters but normalise to a standard ASCII character, making sure that each input doesn't reuse a previously used character.

The uconv program is a part of icu4c.

The input is:

mi ˢⁱⁿª ⓝⓘ ona 𝚘𝚕𝚒𝚗 𝖒𝖚𝖘𝖎 𝕤𝕦𝕨𝕚 𝓹𝓸𝓷𝓪 ₗᵢ ₑ ˡᵃ 𝒑𝒊 ⓞ 𝒶𝓃𝑢 ℯ𝑛 𝔰𝕖𝔪𝕖 ⅈⅉ𝕠 ⓚ𝐮ℓⅇ ⓛⓤₖℹ𝐧
kₐlₐₘₐ 𝓴𝒖𝓉𝐞 ⓐⅼⓐ wan  tu ᵐᵘᵗᵉ ⓢo𝐰elⅰ  𝐚𝐤𝒆𝐬𝐢 𝐩𝓲𝐩𝓲 𝒘𝒂𝒔𝒐 k𝑎𝐥𝑎 𝓁𝑜𝒿𝑒 ⓙⓔ𝑙𝐨 𝒍𝔞s𝔬
ſ𝓾ⓟ𝕒  𝓵𝑖𝕟𝐣𝖆 𝒾𝔫s𝖺 ₛ𝓮𝔩ₒ ᵏ𝖔 𝕜iⓦe𝒏 𝑘ºₙ 𝓽𝔢𝕝𝗼 𝑠𝖊𝑤𝔦 𝗮𝖓p𝘢 𝓈𝗂𝗇p𝗂𝗇 𝕞𝗈𝗻𝓼𝗶 𝓳𝙖𝘯 ⅿ𝖾𝖑𝘪 m𝙞𝕛𝗲

which can be run with cat input.txt | uconv -x NFKD

And then I run out of 'i' characters.

(It's possible I've made a few mistakes whilst hand-crafting and copy-pasting the list of names, apologies if that's the case; haven't had time to test it.)

This could be expanded to uconv -x lower -x NFKD, I think, but at that point we're starting to assemble something that looks like a program on the command line (order matters, for example) rather than invoking a single configuration option of uconv.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ uconv -x NFKD < input.txt suffices, no need to uselessly invoke cat. \$\endgroup\$
    – Neil
    Commented Mar 21 at 9:36
6
\$\begingroup\$

Lenguage Score 137 (noncompeting)

Lenguage is an encoding of Brainfuck derived as follows:

  • Replace each symbol +-><.,[] with an octal digit 0..7
  • The program is a string whose length is equal to this number. Characters in the string do not matter, so a unique character can be used for each program.

The only way to achieve a score of 137 using an 8 bit character set is for at least 18 programs to consist of only 1 character. That leaves 256-18=238 characters, allowing exactly 2 characters each for the remaining 119 programs.

The only other theoretically possible way to achieve a score of 137 is to use a larger character set, such as Bubbler's excellent Aheui answer using the Hangul script.

I had already written the first 100 brainfuck programs when Noodleman started to question if Lenguage or similar languages were allowed, but I had to go to bed and then to work. OP has ruled that code that depends only on the program length is not allowed. However given the effort I had already put in, I decided to complete the list and post as noncompeting.

The TIO link is for the Brainfuck object code, since the Lenguage source code is obviously too long. Each program entry has the following:

  • Brainfuck program
  • Lenguage number of characters in Octal
  • Lenguage number of characters in Decimal
  • A brainfuck snippet to print a newline and advance along the tape to a blank area, plus the required output for reference.

The alphanumeric characters (numbers and required output) are ignored by the Brainfuck interpreter.

Each program starts with a loop to put one or two f characters on the tape ASCII 102. 5*102=510 and 510%256=254, so we subtract 2 from the first cell and iterate 102 times until this cell becomes zero. After that a hunt-and-peck approach is used: the f characters are incremented/decremented to the required values and then printed. Using 2 cells enables one to work at the beginning of the alphabet while the other works at the end.

--[----->+>+<<]>+++++++.>+++.
11611111202033720000000420004
23617230429843456228728836
>>>++++++++++.> mi

--[----->+>+<<]>+++++++++++++.>+++.<-----.>--------.
1161111120203372000000000000042000431111142111111114
13941152175012725200624299374329387727318192716
>>>++++++++++.> sina

--[----->+>+<<]>++++++++.>+++.
116111112020337200000000420004
188937843438747649828855812
>>>++++++++++.> ni

--[----->+>+<<]>+++++++++.-.>-----.
11611111202033720000000004142111114
6191115253800882989587946312268
>>>++++++++++.> ona

--[----->+>+<<]>+++++++++.---.>+++.<++.
116111112020337200000000041114200043004
25358808079568416725352201668544004
>>>++++++++++.> olin

--[----->+>+<<]>+++++++.++++++++.--.>+++.
11611111202033720000000400000000411420004
1622963717092378670431402315592638468
>>>++++++++++.> musi

--[----->+>+<<]>+++++++++++++.++.++.>+++.
11611111202033720000000000000400400420004
1622963717092378670422395150695276548
>>>++++++++++.> suwi

--[----->+>+<<]>++++++++++.-.-.>-----.
11611111202033720000000000414142111114
3169851009946052090668776457540172
>>>++++++++++.> pona

--[----->+>+<<]>++++++.>+++.
1161111120203372000000420004
2952153803730432028712964
>>>++++++++++.> li

--[----->+<]>-.
116111112037214
5369936494220
>>>++++++++++.> e

--[----->+>+<<]>++++++.>-----.
116111112020337200000042111114
188937843438747649837666892
>>>++++++++++.> la

--[----->+>+<<]>++++++++++.>+++.
11611111202033720000000000420004
12092021980079849589037998084
>>>++++++++++.> pi

--[----->+<]>+++++++++.
11611111203720000000004
90092584469610364932
>>>++++++++++.> o

--[----->+>+<<]>-----.>++++++++.+++++++.
1161111120203372111114200000000400000004
202870464636548008482555966347280388
>>>++++++++++.> anu

--[----->+>+<<]>-.>++++++++.
1161111120203372142000000004
2952153803730445181911044
>>>++++++++++.> en

--[----->+>+<<]>+++++++++++++.>-.<------.>.
1161111120203372000000000000042143111111424
103869677893912234907033289790939501332
>>>++++++++++.> seme

--[----->+>+<<]>+++.+.+++++.
1161111120203372000404000004
2952153803730432096731140
>>>++++++++++.> ijo

--[----->+>+<<]>+++++.++++++++++.---------.>-.
1161111120203372000004000000000041111111114214
53181275081683064291290509103635468949644
>>>++++++++++.> kule

--[----->+>+<<]>++++++.+++++++++.>+++++.--.+++++.
1161111120203372000000400000000042000004114000004
27228812841821728908678259923789114468466692
>>>++++++++++.> lukin

--[----->+>+<<]>+++++.>-----.<+.>.<+.>.
116111112020337200000421111143042430424
25358808079568416734960287090356500
>>>++++++++++.> kalama

--[----->+>+<<]>+++++.++++++++++.-.>-.
11611111202033720000040000000000414214
3169851009946052091794640368441484
>>>++++++++++.> kute

--[----->+>+<<]>-----.>++++++.<.
11611111202033721111142000000434
12092021980079889803085087004
>>>++++++++++.> ala

--[----->+>+<<]>+++++++++++++++++.>-----.<---------.
1161111120203372000000000000000004211111431111111114
13941152175012725200624299060801729543274795596
>>>++++++++++.> wan

--[----->+<]>++++++++++++++.+.
116111112037200000000000000404
188937843705612316029485316
>>>++++++++++.> tu

--[----->+>+<<]>+++++++.++++++++.-.>-.
11611111202033720000000400000000414214
3169851009946052090686332647643276
>>>++++++++++.> mute

--[----->+>+<<]>+++++++++++++.----.++++++++.>-.+++++++.---.
11611111202033720000000000000411114000000004214000000041114
29236715166132286679939650664886817820992107788124748
>>>++++++++++.> soweli

--[----->+>+<<]>-----.>+++++.<++++.>++++++++.<++++.
116111112020337211111420000043000042000000004300004
1742644021876596445533017246145248461910540292
>>>++++++++++.> akesi

--[----->+>+<<]>++++++++++.>+++.<.>.
116111112020337200000000004200043424
49528922030407063916699640153876
>>>++++++++++.> pipi

--[----->+>+<<]>+++++++++++++++++.>-----.<----.----.
1161111120203372000000000000000004211111431111411114
13941152175012725200624299060801729543274893900
>>>++++++++++.> waso

--[----->+>+<<]>+++++.>-----.<+.>.
1161111120203372000004211111430424
773889406725110373991707980052
>>>++++++++++.> kala

--[----->+>+<<]>++++++.>+++++++++.<--.-----.
11611111202033720000004200000000043114111114
830957423151297879295465630690714882636
>>>++++++++++.> loje

--[----->+>+<<]>++++.>-.<++.+++.
11611111202033720000421430040004
12092021980079849625752715268
>>>++++++++++.> jelo

--[----->+>+<<]>++++++.>-----.<+++++++.----.
11611111202033720000004211111430000000411114
830957423151297879295630347973198746188
>>>++++++++++.> laso

--[----->+>+<<]>+++++++++++++.++.-----.>-----.
1161111120203372000000000000040041111142111114
53181275081683064272401044298056801489484
>>>++++++++++.> supa

--[----->+>+<<]>++++++.---.+++++.----.>-----.
116111112020337200000041114000004111142111114
6647659385210383034355870768022545797708
>>>++++++++++.> linja

--[----->+>+<<]>+++.+++++.+++++.>-----.
116111112020337200040000040000042111114
25358808079568417301812875027321420
>>>++++++++++.> insa

--[----->+>+<<]>+++++++++++++.>-.+++++++.+++.
116111112020337200000000000004214000000040004
6647659385210383034050130546593131151364
>>>++++++++++.> selo

--[----->+>+<<]>+++++.++++.
116111112020337200000400004
369019225466304003702788
>>>++++++++++.> ko

--[----->+>+<<]>+++++.--.++++++++++++++.>-.<---------.
116111112020337200000411400000000000000421431111111114
892233739200814413168628220316658666488159572556
>>>++++++++++.> kiwen

--[----->+>+<<]>+++++.++++.-.
11611111202033720000040000414
23617230429843456236978444
>>>++++++++++.> kon

--[----->+>+<<]>++++++++++++++.>-.+++++++.+++.
1161111120203372000000000000004214000000040004
53181275081683064272401043320237543407620
>>>++++++++++.> telo

--[----->+>+<<]>+++++++++++++.>-.<++++.>++++.
116111112020337200000000000004214300004200004
6647659385210383034050130546618902052868
>>>++++++++++.> sewi

--[----->+>+<<]>-----.>++++++++.++.<.
1161111120203372111114200000000400434
396231376243257829067492121772316
>>>++++++++++.> anpa

--[----->+>+<<]>+++++++++++++.>+++.<-----.++.>.<--.
116111112020337200000000000004200043111114004243114
1742644021876590650078037421791173465879955020
>>>++++++++++.> sinpin

--[----->+>+<<]>+++++++.++.-.+++++.>+++.
1161111120203372000000040041400000420004
202870464636547333803927591542988804
>>>++++++++++.> monsi

--[----->+>+<<]>++++.>-----.<++++.
1161111120203372000042111114300004
773889406725110376044703088644
>>>++++++++++.> jan

--[----->+>+<<]>+++++++.>-.<-.---.
1161111120203372000000042143141114
773889406725110373703012368972
>>>++++++++++.> meli

--[----->+>+<<]>+++++++.>+++.+.-----.
1161111120203372000000042000404111114
396231376243256511335929088086604
>>>++++++++++.> mije

--[----->+>+<<]>++++++++++++++.-----.-.+++++.>+++.
11611111202033720000000000000041111141400000420004
217830502734573831259754673420876038812082180
>>>++++++++++.> tonsi

--[----->+>+<<]>+++++++++++++.++.-----.>-----.
1161111120203372000000000000040041111142111114
53181275081683064272401044298056801489484
>>>++++++++++.> supa

--[----->+>+<<]>++++++++++.-.----.>-----.
11611111202033720000000000414111142111114
1622963717092378670422413542911677004
>>>++++++++++.> poka

--[----->+>+<<]>++++++++.>-----.<+++++.>++++++++.<-----.
11611111202033720000000042111114300000420000000043111114
57102959308852122421799395777905088185599045440076
>>>++++++++++.> nasin

--[----->+>+<<]>+++++.++++++++++.>++++++.<.>++++.<.
116111112020337200000400000000004200000043420000434
1742644021876590650697007402309857165384352028
>>>++++++++++.> kulupu

--[----->+>+<<]>++++++++++.-.----.>+++.
116111112020337200000000004141111420004
25358808079568416725350211607994372
>>>++++++++++.> poki

--[----->+>+<<]>+++++++++++++.>+++.<+.>----.<--------.>.<++.
116111112020337200000000000004200043042111143111111114243004
233893721329058293439517205451788633282076780874778116
>>>++++++++++.> sitelen

--[----->+>+<<]>++++++++.>+++.<-.>.
11611111202033720000000042000431424
6191115253800882989591947260692
>>>++++++++++.> nimi

--[----->+>+<<]>++++++.>+++.<++++.+++++.
1161111120203372000000420004300004000004
202870464636547333812369839390457860
>>>++++++++++.> lipu

--[----->+>+<<]>++++++++++++++.-----.----.>+++.
11611111202033720000000000000041111141111420004
425450200653464514179208346525148465471492
>>>++++++++++.> toki

--[----->+>+<<]>++++++.>-.<++++++++.>.
11611111202033720000004214300000000424
3169851009946052090819124446363924
>>>++++++++++.> lete

--[----->+>+<<]>+++++++++++++.>-.<-------.>++++.
116111112020337200000000000004214311111114200004
3403601605227716113433666839869505573814276
>>>++++++++++.> seli

--[----->+>+<<]>+++++++++++++.++.>++++++.---.
116111112020337200000000000004004200000041114
6647659385210383034050130537264462185036
>>>++++++++++.> suli

--[----->+>+<<]>++++++.>+++.<.>.
11611111202033720000004200043424
12092021980079849589608302356
>>>++++++++++.> lili

--[----->+>+<<]>+++++.>-----.<++++++++.>++++++++.
1161111120203372000004211111430000000042000000004
27228812841821728917788383218238668494864388
>>>++++++++++.> kasi

--[----->+>+<<]>++++++++++.>-----.<--.
11611111202033720000000000421111143114
3169851009946052090668777122088524
>>>++++++++++.> pan

--[----->+<]>+++++++.++.----.++++++++++.
1161111120372000000040041111400000000004
202870464923091087827990609274077188
>>>++++++++++.> moku

--[----->+>+<<]>+++++.>+++.<+.>.
11611111202033720000042000430424
12092021980079849593601405204
>>>++++++++++.> kili

--[----->+>+<<]>+++++.>-----.<++.>.
11611111202033720000042111114300424
6191115253800882991933663838484
>>>++++++++++.> kama

--[----->+>+<<]>+++++++++.+.>-.<--.
11611111202033720000000004042143114
6191115253800882989587929548364
>>>++++++++++.> open

--[----->+>+<<]>-----.>+++++++++++++++++.<++++.>---------.
1161111120203372111114200000000000000000430000421111111114
3654589395766547988942457506787032370855506715382348
>>>++++++++++.> awen

--[----->+>+<<]>++++++++++.>+++.<--.>.
11611111202033720000000000420004311424
3169851009946052090668776969835284
>>>++++++++++.> pini

--[----->+>+<<]>+++++++++++++++++.>+++.+++.-------.
116111112020337200000000000000000420004000411111114
1742644021876590650078037382600176253656142412
>>>++++++++++.> wile

--[----->+>+<<]>-.>+++++++++++++.++.-------.
11611111202033721420000000000000400411111114
830957423151301581591588869365641286220
>>>++++++++++.> esun

--[----->+>+<<]>+++++++.>-----.<+.>++++++++.
11611111202033720000000421111143042000000004
830957423151297879261186805589407170564
>>>++++++++++.> mani

--[----->+>+<<]>+++++.>+++.<+++++.>.<+++.>.
1161111120203372000004200043000004243000424
103869677893912234946233850051406070036
>>>++++++++++.> kipisi

--[----->+>+<<]>++++++++++.>-----.<--.>.
1161111120203372000000000042111114311424
202870464636547333802801735813665556
>>>++++++++++.> pana

--[----->+<]>++++.+++++.
116111112037200004000004
720740675756883968004
>>>++++++++++.> jo

--[----->+>+<<]>++++++.>-----.<++.++.>.<--.
1161111120203372000000421111143004004243114
103869677893912234911953793497187829324
>>>++++++++++.> lanpan

--[----->+>+<<]>++++++++++++++.>-.<------.++.-.
11611111202033720000000000000042143111111400414
425450200653464514179208346562116322722060
>>>++++++++++.> tenpo

--[----->+>+<<]>+++++++++++++++++.>-.<------------.>----.
116111112020337200000000000000000421431111111111114211114
456823674470816979374057031624354819754124800758348
>>>++++++++++.> weka

--[----->+>+<<]>++++.>-----.<+.--.
1161111120203372000042111114304114
773889406725110376044703090764
>>>++++++++++.> jaki

--[----->+>+<<]>-----.>++++++.<++++.
116111112020337211111420000004300004
49528922030407228633436516352004
>>>++++++++++.> ale

--[----->+>+<<]>+++++++.>-.<++++++.----.
1161111120203372000000042143000000411114
202870464636547333804002461412889164
>>>++++++++++.> meso

--[----->+>+<<]>++++++++++.>+++.+++.---.<--.
11611111202033720000000000420004000411143114
830957423151297879256275869953520092748
>>>++++++++++.> pilin

--[----->+>+<<]>+++++++++++++++.-.>-----.
11611111202033720000000000000004142111114
1622963717092378670422395116830888524
>>>++++++++++.> uta

--[----->+>+<<]>+++++++++++++++.-------.++.>-----.
11611111202033720000000000000004111111140042111114
217830502734573831259754672898456811303637580
>>>++++++++++.> unpa

--[----->+>+<<]>+++++++++.>+++++.<.
11611111202033720000000004200000434
6191115253800882989587954139420
>>>++++++++++.> oko

--[----->+>+<<]>+++++.>-.<+++.
116111112020337200000421430004
188937843438747649900425220
>>>++++++++++.> ken

--[----->+>+<<]>+++++++++++++.>+++.<-----.
116111112020337200000000000004200043111114
12983709736739029363379161222213309004
>>>++++++++++.> sin

--[----->+>+<<]>++++++++.>-----.<-.>.<--.++++.
1161111120203372000000004211111431424311400004
53181275081683064272440407218428978790404
>>>++++++++++.> namako

--[----->+>+<<]>+++++++++++++.----.>+++++.<.
11611111202033720000000000000411114200000434
830957423151297879256266317750259941660
>>>++++++++++.> soko

--[----->+>+<<]>++++++.>-.<++.
116111112020337200000042143004
188937843438747649837680132
>>>++++++++++.> len

--[----->+>+<<]>++++++++++++++.>-----.<-.----.
1161111120203372000000000000004211111431411114
53181275081683064272401043320041256653388
>>>++++++++++.> taso

--[----->+>+<<]>+++++++++++++++++.>-----.<-----------.+++.
1161111120203372000000000000000004211111431111111111140004
3654589395766535834992456252994808589392228015980548
>>>++++++++++.> walo

--[----->+>+<<]>++++++++++.>+++.<---.>----.<---.>----.
116111112020337200000000004200043111421111431114211114
892233739200814412839965416079999591821222154828
>>>++++++++++.> pimeja

--[----->+<]>+++++++.++++++++.
116111112037200000004000000004
188937843705612316566355972
>>>++++++++++.> mu

--[----->+>+<<]>+++++++++++++++++.>-----.<.>.
116111112020337200000000000000000421111143424
6647659385210383034050130396271576663828
>>>++++++++++.> wawa

--[----->+<]>-----.
1161111120372111114
21995259880313420
>>>++++++++++.> a

--[----->+>+<<]>+++++++.++.-.+++++.++.-.>-----.
11611111202033720000000400414000004004142111114
425450200653464514181574356459545430626892
>>>++++++++++.> monsuta

--[----->+<]>++++++++.
1161111120372000000004
11261573058701295620
>>>++++++++++.> n

--[----->+>+<<]>+++++.>+++.<+++.
11611111202033720000042000430004
12092021980079849593601404932
>>>++++++++++.> kin

--[----->+>+<<]>+++++++.>+++.<++++++.>.<--------.>----.<.>.
11611111202033720000000420004300000042431111111142111143424
29236715166132286680112055921416263303801171345721108
>>>++++++++++.> misikeke

--[----->+>+<<]>-.>++++++++++.<++++.++.>+++++.
1161111120203372142000000000043000040042000004
53181275081683301221861688868654897692676
>>>++++++++++.> epiku

--[----->+>+<<]>+++++.>+++++++++.<.>.++++.<--.>-------.<--------.
11611111202033720000042000000000434240000431142111111143111111114
7664229460510582162318499735018240767052199370337869402700
>>>++++++++++.> kokosila

--[----->+<]>++++++++++.+++++.
116111112037200000000004000004
188937843705612316030533636
>>>++++++++++.> pu

--[----->+<]>+++++.++++++++++.
116111112037200000400000000004
188937843705612350389223428
>>>++++++++++.> ku

--[----->+>+<<]>+++++.--.+.>-.<++++++++++.>.<-.>----.<-----.++++++.>.<---------.>.<+.+++++++++.
11611111202033720000041140421430000000000424314211114311111400000042431111111114243040000000004
9487856519436638952178288031815123462918203472522203222057694610336685306309792235524
>>>++++++++++.> kijetesantakalu

Try it online!

\$\endgroup\$
4
  • \$\begingroup\$ This is cool. Did you write the brainfuck programs by hand? (If so, why? :P) \$\endgroup\$ Commented Mar 20 at 17:53
  • \$\begingroup\$ @noodleman I wrote them by hand but it was mostly copy-paste. Very quick when you get into a rhythm, and recite the alphabet as you type the + or -. I could have written a program to write naive brainfuck programs (which would be longer) or I could have spent a lot of time coming up with some kind of semi-optimised solver. Handwritten seemed to be the happy medium, and to be in keeping with the spirit of the challenge. \$\endgroup\$ Commented Mar 20 at 18:06
  • \$\begingroup\$ @noodleman I didn't think of using 3rd party code to write the BF program, but I've just run it on copy.sh/brainfuck/text.html By far the most significant for lenguage character count is the last word which is 162 BF characters (approx 8^162 lenguage characters) on their site compared with my 95 characters (approx 8^95 lenguage characters.) My looping strategy is not as good as theirs but I run 2 letter cells instead of 1. Overall our BF code length averages about the same but mine is better for longer words which is good given the fact that the conversion to lenguage is exponential \$\endgroup\$ Commented Mar 20 at 19:07
  • \$\begingroup\$ There’s also bfbrute which I don’t think is documented but gives very short solutions. It was used to find the shortest Hello, World programs known so far. \$\endgroup\$ Commented Mar 20 at 19:56
6
\$\begingroup\$

05AB1E, score 7 8 12 13 14, 102 bytes

  1. mi: “—‰ - Try it online;
  2. sina: ’¯ªï¨ - Try it online;
  3. ni: Ž$₁;₅B - Try it online;
  4. ona: …ona - Try it online;
  5. olin: .•4®Z - Try it online;
  6. musi: 109117115105 3ôçJ - Try it online;
  7. suwi: "suwi - Try it online;
  8. pona: 66226₄·-6<°+žWÅв€? - Try it online;
  9. la: ”ãà”¦ - Try it online;
  10. e: тт*X/á - Try it online;
  11. li: „lIl - Try it online;
  12. pi: A8èATÌÌ>èì - Try it online;
  13. o: ‘OO‘™θ - Try it online;
  14. anu: '¢‚Ù'Ô£« - Try it online.

Try all programs at once.

Verify all programs use unique characters.

Explanation:

“—‰                # Push dictionary string "mi"
                   # (after which it is output implicitly with trailing newline)
’¯ªï¨              # Push dictionary string "sina" (concatenating words "si" and "na")
                   # (after which it is output implicitly with trailing newline)
Ž$₁                # Push compressed integer 25078
   ;               # Halve it to 12539
    ₅B             # Convert that to base-255: "ni"
                   # (after which it is output implicitly with trailing newline)
…ona               # Push 3-char string "ona"
                   # (after which it is output implicitly with trailing newline)
.•4®Z              # Push compressed string "olin"
                   # (after which it is output implicitly with trailing newline)
109117115105       # Push this integer
             3ô    # Split it into parts of size 3: [109,117,115,105]
               ç   # Convert them to ASCII characters with these codepoints:
                   #  ["m","u","s","i"]
                J  # (optionally) Join them together to a string
                   # (after which it is output implicitly with trailing newline)
"suwi             "# Push string "suwi"
                   # (after which it is output implicitly with trailing newline)
66226              # Push this integer
     ₄             # Push 1000
      ·            # Double it to 2000
       -           # Subtract it: 64226
        6          # Push 6
         <         # Decrease it by 1 to 5
          °        # Pop and push 10**5: 100000
           +       # Add them together: 164226
            žW     # Push builtin "qwertyuiopasdfghjklzxcvbnm"
              Åв   # Convert 164226 to custom base-"qwertyuiopasdfghjklzxcvbnm",
                   # basically converting to base 26 and indexing into this string:
                   #  ["p","o","n","a"]
                €? # (optionally) Print each individual character
”ãà”               # Push dictionary string "Ala"
    ¦              # Remove its first character: "la"
                   # (after which it is output implicitly with trailing newline)
тт*                # Push 100*100: 10000
   X/              # Divide it by 1: 1.0e4
     á             # only leave its letters: "e"
                   # (after which it is output implicitly with trailing newline)
„lI                # Push 2-char string "lI"
   l               # Convert it to lowercase: "li"
                   # (after which it is output implicitly with trailing newline)
A                  # Push the lowercase alphabet
 8è                # Pop and leave its 0-based 8'th character: "i"
   A               # Push the lowercase alphabet again
    TÌÌ>           # Push 15 (10 +2 +2 +1)
        è          # Pop both and leave its 0-based 15'th character: "p"
         ì         # Prepend it: "pi"
                   # (after which it is output implicitly with trailing newline)
‘OO‘               # Push string "OO"
    ™              # Titlecase it to "Oo"
     θ             # Pop and leave just the last character: "o"
                   # (after which it is output implicitly with trailing newline)
'¢‚               '# Push dictionary word "aa"
   Ù               # Uniquify its characters: "a"
    'Ô£           '# Push dictionary word "nu"
       «           # Append the two together: "anu"
                   # (after which it is output implicitly with trailing newline)

See this 05AB1E tip of mine (sections How to use the dictionary?, How to compress strings not part of the dictionary?, and How to compress large integers?) to understand why “—‰ is "mi"; ’¯ªï¨ is "sina"; Ž$₁ is 25078; .•4®Z is "olin"; ”ãà” is "Ala"; ‘º¤‘ is "LIE"; '¢‚ is "aa"; and 'Ô£ is "nu".

Some minor notes:

  1. The first (“—‰ / mi); second (’¯ªï¨ / sina); fifth (.•4®Z / olin); and seventh ("suwi / suwi) programs doesn't need their explicit closing ///", since we're not doing anything after it except for printing implicitly, so they're optional in these cases.
  2. The reason we push compressed integer 25078 and halving it in the third (Ž$₁;₅B / ni) program, instead of just pushing compressed integer 12539 directly, is because 12539 would be Žni, containing both an n and i.
  3. The reason we push dictionary word "aa" and uniquify its characters in the fourteenth ('¢‚Ù'Ô£« / anu) program, instead of just pushing dictionary word "a" directly, is because "a" would be €…, and we've already used before.
  4. Most of the letters and 2-char words have separated dictionary words (mi ni la e li pi o = —‰ Æ· …å €Ú ´à ¾î ƒÍ), unfortunately all seven methods to push a dictionary word have already been used: “ ’ ” ‘ ' „ ….
  5. A lot of useful builtins that enable alternative ways of pushing characters are 2-byte builtins, requiring an ., Å, and/or ž, which unfortunately have all three been used already and can't be freed with an alternative.
  6. Bytes can definitely be saved here and there, by switching some of the used methods (e.g. the sixth or eight programs with other shorter ones), but since it won't improve the score anyway, it's not worth it. The many is and os in the required outputs pose too many problems to increase the score any further at this point, I'm afraid.
\$\endgroup\$
0
5
\$\begingroup\$

Zsh, Score: 3

Zsh, 11 bytes

echo m\\x69

Try it online!

Zsh, 10 bytes

print	sina

That's a tab character between print and sina. Try it online!

Zsh, 12 bytes

l=NI;<<<$l:l

Try it online!

I'm currently trying to figure out some way to construct ona=;typeset +ona, but without backslashes or $, I don't see it happening.

\$\endgroup\$
5
\$\begingroup\$

Charcoal, score 7 9 10 11

Charcoal, 6 bytes

m℅Π357

Try it online! Prints an m then the character whose ordinal is the product of the digits 3, 5 and 7.

Charcoal, 5 bytes

↧SINA

Try it online! Lowercases the literal string SINA.

Charcoal, 2 bytes

ni

Try it online! Prints the literal string ni.

Charcoal, 6 bytes

⍘⁹⁸⁰²β

Try it online! Converts the literal integer 9802 to base 26 using the lowercase alphabet.

Charcoal, 5 bytes

“2A↘“

Try it online! Outputs a string that "decompresses" to olin using the "charset" compression method, which uses a different start character (the end character is optional and not shown here; the duplicate is just a random compression coincidence).

Charcoal, 6 bytes

”&⎇⊞W↔

Try it online! Outputs a string that "decompresses" to musi using the "permutations" compression method.

Charcoal, 12 bytes

⭆⁴§…h¦x⁺¹¹⊗κ

Try it online! Outputs the 11th, 13th, 15th and (cyclically) 17th letters of the string hijklmnopqrstuvw.

Charcoal, 22 bytes

≔⁷⁷θ✂γ⊕⊕⊕θθ⊖¬θ✂γ⊖⁶⁶⮌⁶⁶

Try it online! Outputs the 80th to the 78th and the 65th printable ASCII characters.

Charcoal, 14 bytes

FL%c﹪%c׳⁻³⁵±ι

Try it online! Outputs the characters with ordinals 105 and 108 using string formatting.

Charcoal, 1 byte

e

Try it online! Prints the literal string e. (I can't believe I overlooked this before!)

Charcoal, 2 bytes

la

Try it online! Prints the literal string la. (Although I have had to tweak previous methods to avoid duplicate characters, to free up the a I had to switch methods for sina and ni which is not something I've done before to construct new answers.)

\$\endgroup\$
3
\$\begingroup\$

Pip, score 5

DQVW&DQVW&'m.DQVW
`sina`
PA@[78;73]
(z14650<>2)
LC"OLIN"

For imaginary bonus points, each of these is both a full program and a single expression which can be part of a bigger program. (Some of them give lists of characters, but the default for printing a list is to concatenate it together.)

Attempt Them Online!

Verification program

Explanations

                  ; VW is preset to the lowercase vowels, "aeiou"
DQVW              ; Remove a character from the end of VW
    &             ; If the character is truthy (which it is)
     DQVW         ; Do it again
         &        ; If the character is truthy (which it is)
          'm.     ; Concatenate character "m" to
             DQVW ; another character removed from the end of VW ("i")
`sina` ; Regex literal, nothing much to explain here
           ; PA is preset to a string of all printable ASCII
PA@        ; Get the characters at
   [78;73] ; indices 78 and 73 ("n" and "i")
(z14650<>2)
            ; z is preset to the lowercase alphabet
  14650<>2  ; Group this number into two-digit substrings [14;65;0]
(z        ) ; Get the characters at those cyclical indices ("o","n","a")
LC"OLIN" ; Lowercase the string "OLIN"
\$\endgroup\$
3
\$\begingroup\$

Vyxal 3, 3 bytes (mi)

ᶴmi

Try it Online!

Just mi.

Vyxal 3, 7 bytes (sina)

"SINA"N

SINA lowercased.

Try it Online!

Vyxal 3, 13 bytes (ni)

~₳ᵃ½:ꜝꜝꜝꜝꜝ→;O

Try it Online! compressed number 210 halved duplicated and one copy incremented before pairing and converting to char.

Alternatively we could do 'n105O+ which means n plus chr(105)

Vyxal 3 Ws, 8 bytes (ona)

nḃoh\^nh

Try it Online! Thanks to @pacmanboss256.

Uses the fact that on is the start of the second half of the alphabet and a is the start of the alphabet

Vyxal 3, 33 bytes (olin)

77793377379797999937 379 3ʀŀ3F#cȦ

Try it Online!compressing a ternary number --@pacmanboss256

Vyxal 3 s, 34 bytes (musi)

101110100010111101010000Bf1dẆ“⌊kay

Try it Online!

binary number corresponding to indexes in alphabet -- @pacmanboss256

\$\endgroup\$
4
  • \$\begingroup\$ 11 bytes for ona uses the fact that on is the start of the second half of the alphabet and a is the start of the alphabet \$\endgroup\$
    – pacman256
    Commented Mar 18 at 19:16
  • \$\begingroup\$ @pacman256 Wow, nice. \$\endgroup\$ Commented Mar 18 at 19:52
  • \$\begingroup\$ 33 for olin uses ʀŀF#cȦ and 346 \$\endgroup\$
    – pacman256
    Commented Mar 19 at 12:25
  • \$\begingroup\$ reworking all of these to free up the k digraph for later and the n builtin \$\endgroup\$
    – pacman256
    Commented Mar 19 at 12:40
2
\$\begingroup\$

Perl 5 + -p0513, score 6, 3694 bytes

mi, 3571 bytes

Uses $+2BKV^y{}.

${K^V^B}+++${K^V^B}+++y{2}{y}+${K^V^B}++<repeated 320 times>+${K^V^B}+++${K^V^B}++

Try it online!

Explanation

K^V^B evaluates to _ so ${K^V^B} is equivalent to $_. This is incremented twice, and then y{2}{y} is called which transliterates all 2s to ys. Now that $_ is y it's possible to increment the string:

$_="y";
$_++; # $_ is now z
$_++; # $_ is now aa
...
$_++; # $_ is now mi

Due to -p flag, $_ is output implicitly.


sina, 40 bytes

Uses (),-<>~\x86\x88\x8b\x8c\x8d\x91\x96\x9a\x9e\xaa\xab\xac\xad\xb0\xba\xbb\xbc\xc5.

(~<..............>)->(~<......>,~<....>)

Try it online!

Explanation

~ is the "bitwise negation" operator so we can use high byte values as the inverse of the desired string, and use ~ to flip them back to what is needed. The <...> are globs that result in strings. The first part evaluates to CORE::syswrite which is wrapped in parentheses and dereferenced to the function itself with the arrow (->) and the arguments STDOUT and sina are passed in.

I thought it would be possible to call CORE'say in this way, but I had problems getting that working.

See the process.


ni, 9 bytes

Uses 'inprt.

print'ni'

Try it online!

Explanation

prints ni.


ona, 18 bytes

Uses "*14567=\_.

*_=\"\157\156\141"

Try it online!

Explanation

Sets the reference to $_ (and @_ and %_, I think) to a reference to the string ona using C style escapes. Because it's stored in $_, it's output implicitly by -p.

I tried for a while to get this to work with $\ instead (*\=\"\157\156\141") but I couldn't get output to work, anyone that knows why I'd love their insight!


olin, 37 bytes

Uses \x09&`cehlox\xee\xf9.

Link is to a bash script that builds the script from a hexdump.

exec`echo	echo	oloo`&`echo	echo	ol..`

Try it online!

Explanation

Needs to be run on a system with a proper underlying shell (so doesn't work on code-sandbox, which is WASM).

exec executes the arg in a subshell and passes through the output, so this is called with the bitwise AND string operation of echo&#9;echo&#9;oloo and echo&#9;echo&#9;ol\xf9\xee, which are both generated using backticks which run in a sub-shell and return STDOUT as a string. oloo & ol\xf9\xee results in olin


musi, 19 bytes

Uses :CEIORamsuy|.

CORE::say musI|musa

Try it online!

Explanation

Calls CORE::say (which is where say is callable from without -M5.10.0 being specified) with the bitwise OR string operation of masI|masa which results in masi.


Any more?

Probably unlikely. There's !#%./0389;?@ADFGHJLMNPQSTUWXYZ[]bdfgjkqvwz left (as well as newline, control chars and high-bytes). Building strings with v##.##.## is possible, making a match using /../ is too, but I'm not sure of any other output methods using standard functions. If _ wasn't used in ona I think it'd be possible to get 7...

\$\endgroup\$
6
  • 2
    \$\begingroup\$ Could you add some explanations? I really want to know how the sina program works. \$\endgroup\$
    – DLosc
    Commented Mar 20 at 16:08
  • \$\begingroup\$ I'll try and write up on my lunch today, I was hoping I'd get another in there, I've got a lot of chars left, but I don't know how feasible it is! \$\endgroup\$ Commented Mar 21 at 9:07
  • \$\begingroup\$ @DLosc Added explanations and squeaked and extra output in too! \$\endgroup\$ Commented Mar 21 at 19:48
  • \$\begingroup\$ It's musi, not masi. \$\endgroup\$ Commented Mar 28 at 10:54
  • 1
    \$\begingroup\$ @DomHastings You are welcome. \$\endgroup\$ Commented Mar 28 at 17:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.