Trzymaj unikalne postacie w dół

23

To bardzo proste: Twój program lub funkcja powinna wygenerować następujący tekst:

Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look.

Drobnym drukiem

Możesz napisać program lub funkcję , która zwraca dane wyjściowe jako ciąg znaków lub wypisuje je do STDOUT (lub najbliższej alternatywy). Opcjonalnie możesz dołączyć jeden końcowy znak nowej linii do wyniku.

Punktacja

Liczba bajtów w kodzie pomnożona przez liczbę unikalnych bajtów w kodzie

Najniższy wynik wygrywa.

Na przykład uderzenie mózgu lub odpowiedź na spację miałaby tutaj ogromną przewagę, ponieważ mnożnik byłby bardzo niski (odpowiednio 8 i 3). Generalnie jednak pisanie programów w tych językach tworzy znacznie dłuższy kod, co może zneutralizować tę zaletę.

Standardowe luki, które nie są już śmieszne,zakazane .

durron597
źródło
Zakładam, że obudowa musi być dokładna?
EnragedTanker
@crayzeedude tak, właśnie o to chodzi
durron597
W porządku. Po prostu wyjaśniam. : p
EnragedTanker
1
@CarpetPython Odbyła się debata na ten temat w piaskownicy, i ostatecznie zdecydowałem, że nie ma PRAWDZIWEGO wyrównania pola gry. Zauważ, że białe znaki i bezsenność i tak mają najwyższe wyniki!
durron597
2
Jak już gdzieś napisałem, jeśli założymy, że użycie większej liczby bajtów w celu skompensowania mniej unikalnych znaków zachowuje się podobnie do przekształcania liczb na różne zasady, to w przybliżeniu bytecount~Log(X,unique), przy X pewnej stałej dla tego problemu. W ten sposób unikalna ^ bytecount ~ stała. Obliczenie tego wyniku (log2) daje python2_mbomb007 728, python2_carpetpython 744, ruby 756, Fish 825, Insomnia 1148, cjam 1277, whitespace 1484, brainfuck 3546. Tak więc, z wyjątkiem odpowiedzi na
pieprzenie mózgu

Odpowiedzi:

7

Bezsenność , 575 bajtów * 4 = 2300

dyedd=dyyyye=d=yd=dddde=ded=deey=eyy=de=edd=eydyee=yeyy=yey==ddyee=eydee=y=eyeedd=dde=yddd=eede=yedde=eeyd==yeyy=yyddy=eyy=dy=dddye=dyey=ede=yddd=dde=de=yyye=yyye=ddyyy=dyy=yeyddy=eyyyde=eed=ddd=yd=edyyd=eeydd=yedd=eye=eee=eeyy=yyyedde=d=eyyyedy=d=yddyye==dyyede=ddd=eydd=yd=ddde==eeeeyy=yeyd=deyy=yyy=ydy=dy=dd=e=ey=dddddy=yeey=ey=eed=ddd=eedy=ddddde=ydeyy=edd=ydy=ddy=yeedd=ydde=dde=edyye=ded=yeed=dddddde=eedy=eyde=ydy=ydydd=eyydd=dd=dddd=ddyye=ydeey=ed=eeeye=y=ydydde=eyyd=eyee=dy=edeyed=dyed==eyyddey=dd=yddd=yddd=de=ddedy=eyydd=eeedy==eyyydeee=d=d=eydd=yey=dyy==yyyedy=

Wykorzystuje 4 znaki dye=.

Rozwiązanie 1b (niepublikowane): 783 bajtów * 3 = 2349

eeeeyeeyy=eeyy=yeyye=yyyeeyye=eeeye=yeyey=eyeyyy=eyy=eeyeye=yeyeyyy=yyeeye=yeyy=yey==yyeyeyeye=eyyey=y=yyyyyy=y=eyyeyyyyyyye=eeye=yyeeyye=eyeyeyyy==yeyy=yeyyyeyye=yyyeeyy==eeyyeee==eeyye=yyyyeyyeyyye=yyyyyyy=yeye=eyyyyy=eeye=eeyeeeeey=eyeye=eeee=yeyyye=eyyyyye=y=eeeyyy=eyyeyee=yyy=eyye=yeyeeee=yyeyeyyyy=eeyy=yyyyy=eyyyy=yyeeyye=e=eyyyyy=eyey==eyeyy=yyyyyeyeyeye=ye=yyyyyy==eeeeyy=yeye=yeyyey=yyy=eyyyeeeye==yeeyyeyy=e==yeeeyyyeyy=yeey=ey=eee=eyeyy=yyeeee=yeeyyyyy=yee=yeyyy=yeeeeyy=eyeeeeeye=eeeyy=yyeeeeyyye=yey=yyyyeeyye=yyyyyyy=yeee=eeeeyyeye=eyeeye=eeyyeyyy=eeyee=yyyyyeeyy=eee=eeyyeyyyyy=eeey=eyyeeyy=eyyeyyy=eeeeyeee=eeeye=y=yyyeyy=yyeeee=yyeyey=ey=eyyyyyeyyy=yeye==yeeyyyeyy=yeye=yyyyeeyy=eeeyyeeyyy=yeeyeyyy=eeyye=eee=eyyye==eyeyeyyyyy=e=eeyeeye=yeey=eyeyy=eyeye=ey=eyyeye=

Używa tylko 3 znaków ey=.

Rozwiązanie 1: 826 bajtów * 3 = 2478

yoyoy~oyoyo~oyooyy~ooyyoyy~ooyyyyoy~~yoyyo~ooyoooyooo~yoyyo~oyoyoyyy~yyo~oyyoo~~ooooy~oyyyyy~oyoyoo~~oyyyoooyy~~oyoyooyyy~yyooo~yoyo~yoyyyyo~yooyo~y~yyoyyyooyy~oyyooy~ooyoy~oyyooy~ooyyo~yoyyoo~o~ooyo~yooyyoo~yoyoy~ooyyyyooo~oyoyyo~yyoyyyoo~yyo~yyooyyo~yoyyoooy~~yoyyyooyoyy~oyoyyy~yoooyyoy~yooyy~yooyyo~yyooyyoo~oyoyo~oyyy~oyyo~oyyoyo~oyyyoo~oyoyyoo~yooyo~ooooo~~yoyyoyyoyoo~yoyyooo~y~ooooy~yyyoy~ooooyyoyyoy~oyyoo~oyyoyo~yoyyyooy~oyooo~yoyyoyy~yyyyyo~oyooy~oyoyy~yoyyyoy~ooyoy~yoyyoooy~~oyyyo~ooooooy~yooyoyyoyo~yooyyo~oooyyo~yoyooyyo~oyyy~o~yooooy~oyoyyooooy~~yoyyooyyo~oy~yyyoyyyyy~yoyyyoy~yooo~oooy~oooooyyoyyyo~yoyyo~y~oooyyyoyoo~yyooooyoyy~y~oooyyyoy~~yoy~oyyoyoyyy~yoyyyyy~oyooo~yyyyooo~yooyyoy~yooyo~yoyyyo~yyoyyyo~o~ooooooyoy~oyoyyoy~yyoooo~ooooyy~oyoyoy~ooyyo~yyoooyo~yyyyyo~oyyo~yooyyooyyoy~~ooyyyyoyyy~ooyyo~yyooo~

Używa tylko 3 znaki: yo~. Do wygenerowania tego służy program.

Obecnie wszystkie programy używają tylko instrukcji 0, 1, 2, 6. Innymi słowy, manipulują bitami w jednym bajcie i wypisują wynik.

n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨d̷̰̀ĥ̷̳
źródło
19

CJam, 266 281 456 bajtów * 14 12 7 unikatowych = 3724 3372 3192

Wypróbuj online.

14301201124204202034420112034224204431020210101232301021240204310431312122132100240400222324402030223103420431324402222132223233141443401210314023001122320404112224314302132421403301243334313000011124244441400003310332301330220022110121411122100040310110020040121444302100143202204330334033211334242120304123121024200421121232100303121022431044444423243331440434010014400~~10~~100~~1~43c~c~4~~41c~100~~1~43c~c~123~~100~~1~43c~c~44~~14~~43c~c100~~40c~c43c~~

Wyjaśnienie

Strategia, którą zastosowałem, polega na traktowaniu każdego znaku w łańcuchu jako cyfry podstawowej 123 i kodowania go jako liczby dziesiętnej w programie. Następnie program konwertuje tę liczbę z powrotem na bazę 123 i odwzorowuje każdą cyfrę 123 z powrotem na znak. Ponieważ trudno jest wyjaśnić, dlaczego program jest w obecnym stanie, wyjaśnię każdą jego wersję.

Oto jak wyglądał koniec programu w pierwszej wersji:

...2068438725 123b:c

To wdraża strategię w najprostszy możliwy sposób. Liczba normalnie zakodowana w bazie 10 jest konwertowana z powrotem na bazę 123, a każda cyfra z bazy 123 jest odwzorowywana z powrotem na znak. Ale wykorzystuje 4 unikalne znaki niecyfrowe, a możliwość pozbycia się któregokolwiek z nich byłaby prawdopodobnie warta trafionego rozmiaru ze względu na konieczność użycia mniej prostego kodu.

Po pierwsze, zdałem sobie sprawę, że mogę pozbyć się ba :operatorami, tworząc je w czasie wykonywania jako ich wartości ASCII przekształcany z powrotem do postaci (z już obecnego coperatora) i ocenę ich z ~operatorem. Wykonanie tego z :operatorem okazało się nieco trudne , ponieważ musi zostać przeanalizowane razem z następującym coperatorem. Rozwiązałem to, tworząc znaki, :a cnastępnie tworząc i oceniając znak +, który łączy poprzednie dwa znaki w łańcuch, :cktóry można następnie poprawnie ocenić.

Po drugie, zdałem sobie sprawę, że ~operator, który właśnie wprowadziłem, miał przydatny nowy, przeciążony wariant: po podaniu liczby tworzy bitowe uzupełnienie. Używając tego dwa razy z rzędu po numerze, mogłem wprowadzić przerwanie tokena w źródle bez żadnego wynikowego efektu obliczeniowego, pozwalając mi zastąpić spacje używane do oddzielania liczb ~~.

Ostateczny wynik to 15 bajtów kodu na końcu, ale koszt ten znacznie przewyższa korzyść polegająca na wyeliminowaniu 2 unikalnych znaków z 14. Oto porównanie końca pierwszej wersji z końcem drugiej wersji:

...2068438725  123[ b  ][   :c    ]
...2068438725~~123~~98c~58c99c43c~~

Używanie mniej niż dwóch operatorów, których używałem, byłoby niemożliwe, ale nadal chciałem mniej unikalnych postaci. Kolejnym krokiem było wyeliminowanie cyfr. Zmieniając kodowanie liczby, tak aby każda cyfra dziesiętna była naprawdę cyfrą podstawową 5, mogłabym potencjalnie wyeliminować cyfry 6-9. Przed wyeliminowaniem czegokolwiek z końca prgoramu wyglądało to tak:

...4010014400 10b5b123b:c

Jak wspomniano wcześniej, eliminacja przestrzeni jest łatwa. Ale b, :i cnie będzie tak łatwe, jak ich kody znaków są 98, 58i 99, odpowiednio. Wszystkie zawierały cyfry oznaczone do eliminacji, więc musiałem znaleźć sposób, aby je wszystkie wyprowadzić. Jedynymi przydatnymi operatorami numerycznymi o wartościach znaków niezawierających 5-9 były: zmniejszanie, zwiększanie, mnożenie i dodawanie.

Ponieważ 98początkowo użyłem 100~~40c~40c~, który zmniejsza 100dwukrotnie. Ale potem zdałem sobie sprawę, że mogę jeszcze raz użyć ~operatora, ponieważ bitowe uzupełnienie pozwala mi uzyskać liczby ujemne, które po dodaniu pozwalają emulować odejmowanie. Więc następnie wykorzystane 100~~1~43c~, który dodaje, 100i -2a wynosi 2 bajty mniejsze. Dla 58użyłem 44~~14~~43c~, która dodaje 44i 14. I dla 99, użyłem 100~~40c~, które dekrety 100.

Ostateczny wynik jest dość duży i zaciemniony, ale koszt znacznie większej liczby i kodu przetwarzania nieznacznie przewyższył dużą korzyść polegającą na wyeliminowaniu 5 unikatowych znaków z 12. Oto porównanie końcowego końca programu przed eliminacjami i po eliminacje:

...4010014400  10[      b      ][  5  ][     b     ]123[      b      ][            :c            ]
...4010014400~~10~~100~~1~43c~c~4~~41c~100~~1~43c~c~123~~100~~1~43c~c~44~~14~~43c~c100~~40c~c43c~~
Runer112
źródło
Ok, teraz jestem pod wrażeniem. W jaki sposób podstawa 6 cyfr, podstawa 7 cyfr itp. Wypada w porównaniu do podstawy 5?
durron597
@ durron597 Oni naprawdę nie sprawiają, że obliczenia łatwiejsze, jak kody znaków operatorów muszę ( 98, 58, i 99) są wciąż poza zasięgiem. Zwiększenie bazy tylko zmniejsza całkowity rozmiar programu o 8-10%, co nie wystarcza, aby zrekompensować wynik 10-15% uzyskany dzięki nowej, wyjątkowej postaci. bPodobnie ponowne włączenie operatora nie jest tego warte.
Runer112
Weź liczbę x i przekonwertuj ją na bazę b. Jego długość będzie wynosić floor(log_b(x)+1)i będzie zawierać bróżne symbole. Więc wynik jest b*floor(log_b(x)+1). x jest daną dużą liczbą, a jeśli spiszesz to dla b, przekonasz się, że minimum wynosi b = 3. To znaczy, długość zmniejsza się nieznacznie, gdy używasz wyższych zasad (log), ale rozmiar zestawu znaków rośnie liniowo, więc nie jest tego warte. Utworzono prosty program do białych znaków, ale otrzymuje on jedynie wynik 4134.
blutorange
@blutorange Powinieneś zainstalować program białych znaków. 4134 wystarczy na drugie miejsce
durron597
16

Biała spacja, 1157 937 bajtów * 3 unikalna = 3471 2811

Według popularnego (?) Żądania publikuję moje rozwiązanie białych znaków.

Aby zredukować potrzebny kod, zakodowałem cały ciąg jako jedną liczbę binarną (7 bitów na każdy bajt). Prosta pętla wydobywa znaki i drukuje je.

Kod źródłowy na filebin.ca.

UWAGA: Specyfikacje dopuszczają dowolne duże liczby całkowite , ale interpreter Haskell na oficjalnej stronie jest ograniczony do 20 bitów. Użyj na przykład tego interpretera ruby ​​na github / hostilefork / white spaces.

Skrypt ruby ​​do tworzenia programu białych znaków (l = WHITESPACE, t = TAB, u = NEWLINE, wszystko po // zignorowane, zapisuje do pliku prog.h):

str = 'Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look.'

def b2ws(bin)
    bin.chars.map{|x|x=='0' ? "l" : "t"}.join
end
def d2ws(dec,pad=0)
    b2ws(dec.to_s(2).rjust(pad,'0'))
end

bin = str.reverse.chars.map do |x|
    "  " + d2ws(x.getbyte(0),7) + " // char <#{x=="\n" ? "LF" : x}>"
end
data = "lll // pushes string as one large number\n#{bin.join("\n")}\nu"

File.open('prog.h','w') do |fout|
    fout << data << "\n"
    fout << <<-eos

// output string loop
ulllu // label 0

  // extract, print, and remove the last 7 bits of the data
  lul   // dup
  llltlllllllu // push 128
  tltt // mod
  tull  // print as char
  llltlllllllu // push 128
  tltl // div

  // break loop if EOS
  lul   // dup
  utltu // jump to 1 if top of stack is zero

ululu // jump to 0

ulltu // label 1
uuu
    eos
end

Na przykład program białych znaków w formie czytelnej dla człowieka. Poniżej znajduje się prosty skrypt do przekonwertowania go na rzeczywisty program do białych znaków.

lll // pushes string as one large number
  ltltttl // char <.>
  ttltltt // char <k>
  ttltttt // char <o>
  ttltttt // char <o>
  ttlttll // char <l>
  ltlllll // char < >
  ttllllt // char <a>
  ltlllll // char < >
  ttlltlt // char <e>
  ttlttlt // char <m>
  ltlllll // char < >
  ttllttt // char <g>
  ttltttl // char <n>
  ttltllt // char <i>
  tttlttl // char <v>
  ttltllt // char <i>
  ttllttt // char <g>
  ltlllll // char < >
  ltllltl // char <">
  ltlttll // char <,>
  tlllttt // char <G>
  tlltttt // char <O>
  tllltll // char <D>
  ltlllll // char < >
  tlttllt // char <Y>
  tlttltl // char <Z>
  tlllllt // char <A>
  tllttll // char <L>
  ltlllll // char < >
  tllltlt // char <E>
  tlltlll // char <H>
  tltltll // char <T>
  ltlllll // char < >
  tltlltl // char <R>
  tllltlt // char <E>
  tltlttl // char <V>
  tlltttt // char <O>
  ltlllll // char < >
  tltlltt // char <S>
  tltllll // char <P>
  tllttlt // char <M>
  tltltlt // char <U>
  tlltltl // char <J>
  ltlllll // char < >
  tlttlll // char <X>
  tlltttt // char <O>
  tlllttl // char <F>
  ltlllll // char < >
  tlltttl // char <N>
  tltlttt // char <W>
  tlltttt // char <O>
  tltlltl // char <R>
  tlllltl // char <B>
  ltlllll // char < >
  tlltltt // char <K>
  tlllltt // char <C>
  tlltllt // char <I>
  tltltlt // char <U>
  tltlllt // char <Q>
  ltlllll // char < >
  tllltlt // char <E>
  tlltlll // char <H>
  tltltll // char <T>
  ltllltl // char <">
  ltlllll // char < >
  ltttltl // char <:>
  ltltllt // char <)>
  ttlltlt // char <e>
  ttllltt // char <c>
  ttllllt // char <a>
  ttlltlt // char <e>
  tttllll // char <p>
  ltlllll // char < >
  ttttllt // char <y>
  ttlttlt // char <m>
  ltlllll // char < >
  tttlltl // char <r>
  ttltttt // char <o>
  ttllttl // char <f>
  ltlllll // char < >
  ttttllt // char <y>
  ttlltll // char <d>
  tttlttt // char <w>
  ttltttt // char <o>
  tttlltl // char <r>
  ltlllll // char < >
  ttltttt // char <o>
  ttltttt // char <o>
  tttltll // char <t>
  ltlllll // char < >
  tttltll // char <t>
  tttlltt // char <s>
  tttltlt // char <u>
  ttltltl // char <j>
  ltltlll // char <(>
  ltlllll // char < >
  ttlltll // char <d>
  ttlltlt // char <e>
  tttltll // char <t>
  ttltttt // char <o>
  tttltlt // char <u>
  tttlllt // char <q>
  ltlllll // char < >
  ttttllt // char <y>
  ttlttll // char <l>
  tttlltt // char <s>
  tttltlt // char <u>
  ttltttt // char <o>
  ttltllt // char <i>
  ttttlll // char <x>
  ttltttt // char <o>
  ttltttl // char <n>
  ttllltl // char <b>
  ttltttt // char <o>
  ltlllll // char < >
  ttltlll // char <h>
  tttltll // char <t>
  ttlltlt // char <e>
  ttllltl // char <b>
  ttllllt // char <a>
  ttttltl // char <z>
  ttltllt // char <i>
  ttlttll // char <l>
  tllltlt // char <E>
u

// output string loop
ulllu // label 0

  // extract, print, and remove the last 7 bits of the data
  lul   // dup
  llltlllllllu // push 128
  tltt // mod
  tull  // print as char
  llltlllllllu // push 128
  tltl // div

  // break loop if EOS
  lul   // dup
  utltu // jump to 1 if top of stack is zero

ululu // jump to 0

ulltu // label 1
uuu

Zasadniczo ciąg do wyprowadzenia jest długą liczbą całkowitą i musisz zmniejszyć jego wynik.

Weź liczbę x i przekonwertuj ją na bazę b. Jego długość będzie wynosić floor(log_b(x)+1)i będzie zawierać bróżne symbole. Więc wynik jest b*floor(log_b(x)+1). xjest daną dużą liczbą, a jeśli spiszesz to dla b, przekonasz się, że minimum wynosi prawie b=3(i b=2jest prawie tak samo dobre). To znaczy, długość zmniejsza się nieznacznie, gdy używasz wyższych zasad (log), ale rozmiar zestawu znaków rośnie liniowo, więc nie jest tego warte.

Tak więc szukałem języka zawierającego tylko 0/1, ale go nie znalazłem, a potem przypomniałem sobie, że jest spacja i wypróbowałem go. W białych znakach możesz bezpośrednio wprowadzać liczby binarne za pomocą zer i jedynek.


Stary kod, gorszy wynik, ale bardziej interesujący

Stary kod na bin pliku .

Skrypt ruby, którego użyłem do utworzenia programu (l = WHITESPACE, t = TAB, u = NEWLINE, wszystko po //zignorowaniu zapisuje do pliku prog.h):

str = 'Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look.' + "\n"

def shift(x)
    (x-97)%128
end

EOS = "lttltl" #26
STACK = []

bin = str.reverse.chars.map do |x|
    byte = shift(x.getbyte(0))
    rf = STACK.index(byte)
    STACK.unshift(byte)

    y = byte.to_s(2).chars.map{|y|y=='0' ? 'l' : 't'}.join
    ph = "lll#{y}u" # pushing directly
    if rf
        bn = rf.to_s(2).chars.map{|y|y=='0' ? 'l' : 't'}.join
        cp = "ltll#{bn}u" # copying from stack
    end

    if STACK.size>0 && STACK[0]==STACK[1]
        "lul // dup #{x.inspect}"
    elsif cp && cp.size < ph.size
        "#{cp} // copy <#{x.inspect}> (from #{rf})"
    else
        "#{ph} // push <#{x.inspect}> (#{shift(x.getbyte(0))})"
    end
end

File.open('prog.h','w') do |fout|
    fout << "ll#{EOS}u // push EOS" << "\n"
    fout << bin.join("\n") << "\n"
    fout << <<-eos
// output string
ullu // label 0
  // add 97 (128) before printing
  lllttlllltu // push 97
  tlll // add
  llltlllllllu // push 128
  tltt // mod
  tull  // print top of stack

  // break loop if EOS
  lul   // dup
  ll#{EOS}u // push EOS
  tllt // subtract
  utltu // jump to 1 if top of stack is zero
uluu // jump to 0

ulltu // label 1
uuu
    eos
end

Na przykład program białych znaków w formie czytelnej dla człowieka. Poniżej znajduje się prosty skrypt do przekonwertowania go na rzeczywisty program do białych znaków.

lllttltlu // push EOS
llltltlltu // push <"\n"> (41)
llltllttltu // push <"."> (77)
llltltlu // push <"k"> (10)
llltttlu // push <"o"> (14)
lul // dup "o"
llltlttu // push <"l"> (11)
lllttttttu // push <" "> (63)
llllu // push <"a"> (0)
ltlltu // copy <" "> (from 1)
llltllu // push <"e"> (4)
lllttllu // push <"m"> (12)
ltlltlu // copy <" "> (from 2)
lllttlu // push <"g"> (6)
lllttltu // push <"n"> (13)
llltlllu // push <"i"> (8)
llltltltu // push <"v"> (21)
ltlltu // copy <"i"> (from 1)
lllttlu // push <"g"> (6)
ltllttlu // copy <" "> (from 6)
llltllllltu // push <"\""> (65)
llltlltlttu // push <","> (75)
lllttllttlu // push <"G"> (102)
lllttltttlu // push <"O"> (110)
lllttlllttu // push <"D"> (99)
ltlltltu // copy <" "> (from 5)
lllttttlllu // push <"Y"> (120)
lllttttlltu // push <"Z"> (121)
lllttlllllu // push <"A"> (96)
lllttltlttu // push <"L"> (107)
ltlltllu // copy <" "> (from 4)
lllttlltllu // push <"E"> (100)
lllttlltttu // push <"H"> (103)
llltttllttu // push <"T"> (115)
ltllttu // copy <" "> (from 3)
llltttllltu // push <"R"> (113)
ltlltllu // copy <"E"> (from 4)
llltttltltu // push <"V"> (117)
ltlltttlu // copy <"O"> (from 14)
ltlltllu // copy <" "> (from 4)
llltttlltlu // push <"S"> (114)
lllttlttttu // push <"P"> (111)
lllttlttllu // push <"M"> (108)
llltttltllu // push <"U"> (116)
lllttltlltu // push <"J"> (105)
ltlltltu // copy <" "> (from 5)
llltttltttu // push <"X"> (119)
ltlltlllu // copy <"O"> (from 8)
lllttlltltu // push <"F"> (101)
ltllttu // copy <" "> (from 3)
lllttlttltu // push <"N"> (109)
llltttlttlu // push <"W"> (118)
ltlltllu // copy <"O"> (from 4)
ltlltllltu // copy <"R"> (from 17)
lllttlllltu // push <"B"> (97)
ltlltltu // copy <" "> (from 5)
lllttltltlu // push <"K"> (106)
lllttllltlu // push <"C"> (98)
lllttltlllu // push <"I"> (104)
ltllttttu // copy <"U"> (from 15)
llltttllllu // push <"Q"> (112)
ltlltltu // copy <" "> (from 5)
ltllttlltu // copy <"E"> (from 25)
ltllttttlu // copy <"H"> (from 30)
ltllttttlu // copy <"T"> (from 30)
llltllllltu // push <"\""> (65)
ltlltllu // copy <" "> (from 4)
llltlttlltu // push <":"> (89)
llltlltlllu // push <")"> (72)
llltllu // push <"e"> (4)
llltlu // push <"c"> (2)
llllu // push <"a"> (0)
llltllu // push <"e"> (4)
lllttttu // push <"p"> (15)
ltlltttu // copy <" "> (from 7)
lllttlllu // push <"y"> (24)
lllttllu // push <"m"> (12)
ltlltlu // copy <" "> (from 2)
llltllltu // push <"r"> (17)
llltttlu // push <"o"> (14)
llltltu // push <"f"> (5)
ltllttu // copy <" "> (from 3)
ltllttlu // copy <"y"> (from 6)
lllttu // push <"d"> (3)
llltlttlu // push <"w"> (22)
llltttlu // push <"o"> (14)
ltlltttu // copy <"r"> (from 7)
ltlltltu // copy <" "> (from 5)
ltlltlu // copy <"o"> (from 2)
lul // dup "o"
llltllttu // push <"t"> (19)
ltllttu // copy <" "> (from 3)
ltlltu // copy <"t"> (from 1)
llltlltlu // push <"s"> (18)
llltltllu // push <"u"> (20)
llltlltu // push <"j"> (9)
llltllltttu // push <"("> (71)
ltlltltu // copy <" "> (from 5)
lllttu // push <"d"> (3)
llltllu // push <"e"> (4)
ltlltttu // copy <"t"> (from 7)
llltttlu // push <"o"> (14)
ltlltttu // copy <"u"> (from 7)
llltllllu // push <"q"> (16)
ltllttlu // copy <" "> (from 6)
lllttlllu // push <"y"> (24)
llltlttu // push <"l"> (11)
llltlltlu // push <"s"> (18)
ltlltltu // copy <"u"> (from 5)
llltttlu // push <"o"> (14)
llltlllu // push <"i"> (8)
llltltttu // push <"x"> (23)
ltlltlu // copy <"o"> (from 2)
lllttltu // push <"n"> (13)
llltu // push <"b"> (1)
ltlltlu // copy <"o"> (from 2)
ltlltlttu // copy <" "> (from 11)
llltttu // push <"h"> (7)
llltllttu // push <"t"> (19)
llltllu // push <"e"> (4)
llltu // push <"b"> (1)
llllu // push <"a"> (0)
lllttlltu // push <"z"> (25)
llltlllu // push <"i"> (8)
llltlttu // push <"l"> (11)
lllttlltllu // push <"E"> (100)
// output string
ullu // label 0
  // add 97 (128) before printing
  lllttlllltu // push 97
  tlll // add
  llltlllllllu // push 128
  tltt // mod
  tull  // print top of stack

  // break loop if EOS
  lul   // dup
  lllttltlu // push EOS
  tllt // subtract
  utltu // jump to 1 if top of stack is zero
uluu // jump to 0

ulltu // label 1
uuu

Sam program białych znaków jest dość prosty, ale istnieją trzy optymalizacje gry w golfa:

  • użyj, lulaby sklonować stos, gdy jest zduplikowany znak
  • użyj, ltlaby sklonować n-ty stos stosu, jeśli jest on krótszy niż bezpośrednie pchnięcie znaku
  • przesunięcie wszystkich bajtów w dół o 97 (mod 128), zmniejsza liczby binarne

Prosty skrypt ruby ​​do konwersji mojego czytelnego dla człowieka kodu białych znaków na rzeczywisty program białych znaków (odczyt pliku prog.hi zapis do pliku prog.ws):

WHITESPACE = "l"
NEWLINE = "u"
TAB = "t"

File.open('prog.ws','w') do |fout|
    code = ""
    fin = File.read('prog.h')
    fin.each_line do |line|
        line.gsub!(/\/\/.*/,'')
        line.scan(/#{NEWLINE}|#{WHITESPACE}|#{TAB}/i) do |x|

            code << case x.downcase
            when NEWLINE.downcase
                "\n"
            when WHITESPACE.downcase
                " "
            when TAB.downcase
                "\t"
            else
                ""
            end
        end
    end
    fout << code
end
blutorange
źródło
Końcowy znak nowej linii jest opcjonalny, możesz zapisać kilka znaków, nie drukując go.
durron597
Dzięki, zmieniłem to. Pierwotnie załączyłem go, ponieważ interpreter Haskell dodał trochę danych wyjściowych do debugowania, ale w przypadku ruby ​​wygląda to czysto.
blutorange
7

Rubinowy 144 bajtów * 39 Unikalny = 5616

puts"Elizabeth obnoxiously quoted (just too rowdy for my peace): \"#{'the quick brown fox jumps over the lazy dog,'.upcase}\" giving me a look."

Czasami najprostsze jest najlepsze.

MegaTom
źródło
Nie używasz żadnych uproszczeń w danych. Przykłady cjam i białych znaków uzyskały imponujące wyniki wraz z kilkoma objaśnieniami. Nawet z premią za używanie uporządkowanego kodu w zdrowym języku, to zbyt wiele do zrobienia! Może możesz ponownie wziąć udział w konkursie na długość + unikalne punkty.
Jose_X
6

Brainfuck, 1264 bajtów * 7 unikalnych = 8848

Tak, to okropny wynik.

++++[++++>---<]>++.-[--->+<]>.---.-[--->+<]>++.[->+++++<]>-.+.+++.[--->+<]>---.------------.--[--->+<]>--.+++++[->+++<]>.-------------.++++++++++++.+.+++++++++.[->+++<]>+.++++++.++++++.--.-------.-[--->+<]>.-[---->+<]>++.----[->++++<]>+.++++.------.+++++.+++[->+++<]>.-.-[--->+<]>-.++++++++.-----[->+++<]>+.+++++++++++.--.+.[---->+<]>+++.---[->++++<]>.-----..[--->+<]>-----.---[----->++<]>.---.++++++++.[->+++<]>-.+[--->+<]>++.-[---->+<]>++.++[->+++<]>.+++++++++.+++.[-->+++++<]>+++.+[----->+<]>.--[--->+<]>.-[---->+<]>++.[-->+++++++<]>.-----------.----.++.++.--[->+++<]>.-[-->+++<]>--.[-->+<]>+++.++.>-[--->+<]>-.------------.---.-[-->+<]>--.[-->+++++<]>+.++++.------------.------.++++++++.---[->++++<]>.+[->++<]>.>-[--->+<]>---.---.++++++++.---------.++[----->++<]>.+++[->++<]>.+++++++++.+++++++++.[--->++++<]>.+++++[->++<]>.>-[--->+<]>.--------.+++.+++.+[--->+<]>++++.[-->+++++<]>-.+++++++.--[----->+<]>+.+++++++++++++.--[----->++<]>.>-[--->+<]>-.------------.---.-[-->+<]>--.++++++[->++<]>.-----------.-----[-->+++<]>.-.+[--->+<]>++.++[->++<]>.+++++++++++.--------.--[--->++<]>--.----------.--.++[->+++<]>+.++.[->++++++<]>.[------>+<]>.+++++.-------.-[--->+<]>--.+[----->+<]>.--------.--[--->+<]>-.[->+++<]>+.-[->+++<]>.++[--->++<]>.+++..----.[->++++++++++<]>.
mbomb007
źródło
Odkryłem, że można użyć mniejszej liczby unikalnych znaków, ale długość wynosiłaby 10795 razy 5 = 53975.
mbomb007
możesz to zrobić, ale +.nie jestem pewien, czy będzie mniejszy.
captncraig
Używam tylko +i .otrzymuję 15018 * 2 = 30,036.
captncraig
6

> <> (Ryby) - 578 bajtów * 8 unikalnych = 4624

14121412412431421124321110441421130402401433401430421141143114240333221142303303210321143224241321121343212340321131301320302344221132340304221130322340321313221100323234202311321143224241341121131213110444324310422421114441421142412420421114400443412442421112412413421113403423411403121100410413412423432421114431403423412401404412402434312421140413410434324324401431443243*3*3+3*1+00p44*4+3*2+01p44*3*4+1+11p44*3*4+1+21p43+3*2*31p43+3*2*41p43*3*41+1p44*3*4+1+42+1p43+3*2*43+1p43+3*2*1+44+1p43+3*2*1+33*1p43*3*3*3+33*1+1p43*3*3*33*2+1p43+3*3*43*1p44*2*1+43*1+1p44*3+3*2+43*2+1p

Mój wynik nie jest tak konkurencyjny, jak się spodziewałem, ale myślałem, że to rozwiązanie jest jeszcze wystarczająco interesujące, aby opublikować.

Wyjaśnienie

Pierwsza sekcja kodu to długi ciąg cyfr 0-4, który reprezentuje 3-cyfrową reprezentację podstawy 5 dla każdego znaku w ciągu. Pozostały kod korzysta z poperatora w Fish, który pozwala edytować kod źródłowy programu podczas jego działania. Korzystając z tego operatora, byłem w stanie wygenerować kod Fish niezbędny do konwersji podstawowych 5 znaków z powrotem na bazę 10 i wyprowadzenie ich, a następnie umieścić ten kod z powrotem w kodzie źródłowym na początku pliku, zanim interpreter dotrze do końca linii i owinięty wokół. Gdy interpreter dojdzie do końca linii, kod został zmodyfikowany tak, aby wyglądał następująco:

v4121412412431421124321110441421130402401433401430421141143114240333221142303303210321143224241321121343212340321131301320302344221132340304221130322340321313221100323234202311321143224241341121131213110444324310422421114441421142412420421114400443412442421112412413421113403423411403121100410413412423432421114431403423412401404412402434312421140413410434324324401431443243*3*3+3*1+00p44*4+3*2+01p44*3*4+1+11p44*3*4+1+21p43+3*2*31p43+3*2*41p43*3*41+1p44*3*4+1+42+1p43+3*2*43+1p43+3*2*1+44+1p43+3*2*1+33*1p43*3*3*3+33*1+1p43*3*3*33*2+1p43+3*3*43*1p44*2*1+43*1+1p44*3+3*2+43*2+1p
>55**$5*++ol?!; 

Gdy kod zawija się i uderza voperatora, przechodzi do drugiej linii, uderza >operatora i przechodzi do pętli, za każdym razem konwertując kodowanie podstawy 5 z powrotem na wartość ascii podstawy 10, a następnie wyprowadzając tę ​​wartość. Gdy na stosie nie będzie już więcej wartości, ?operator przejdzie do ;i program się zakończy.

tallestpurpl
źródło
5

7 , 273 bajtów × 7 unikalnych bajtów = 1911, niekonkurencyjne (wyzwanie dla postdate)

501513010250341012432044041204045104011053033043511402401130443235151151105240424404004144031133304214014044433043401032201433022042551243201043511102223044114403120042140450415114434050440500114042432010430032533041340424320250451514210501020420444010403043040402343447403

Wypróbuj online!

Niestety jest to stare wyzwanie, co oznacza, że ​​nie mogę wygrać jednym z moich najnowszych języków. Jednak język został stworzony bez wiedzy o wyzwaniu (po prostu przypadkowo natknąłem się na niego w „powiązanych pytaniach”), ale mimo wszystko okazało się, że idealnie pasuje.

7 programów PPCG jest zwykle przesyłanych w formacie spakowanym, pakując osiem poleceń w trzy bajty (język ma dwanaście poleceń, ale tylko osiem może pojawić się w pliku źródłowym, co oznacza, że ​​wystarczą trzy bity). Jednak język obsługuje również format ósemkowy, w którym każde polecenie jest zapisywane jako cyfra ASCII, i tego właśnie użyłem tutaj, co oznacza, że ​​użyto tylko siedmiu różnych bajtów ( 6polecenie nie jest konieczne w programie, który po prostu drukuje prosty ciąg).

Program jest bardzo prosty; składa się z dwóch elementów stosu, długiego łańcucha, który właśnie jest drukowany dosłownie, a 7do oddzielania elementów (niestety nieuniknionego) i 403który jest prostym sposobem drukowania stałego łańcucha w 7 ( 40ucieka z drugiego elementu stosu, przenosząc go do u góry stosu, a następnie 3drukuje go i odrzuca stary pierwszy element stosu, czyli 403sam).

Więc w jaki sposób otrzymałem ciąg tak krótki jak 269 bajtów? 7 obsługuje wiele formatów I / O, a jednym z nich jest US-TTY , zestaw znaków (konkretnie wariant Baudot), który był szeroko stosowany przed wynalezieniem ASCII. (The 5na początku drugiego elementu stosu, czyli początek programu, określa kodowanie ciąg jest, reszta jest zawartość ciąg sam.) Jest to zestaw znaków pięć-bitowy, a komendy 0do5można bezpiecznie przechowywać w ciągach, jednocześnie zachowując nieskalowanie (tak, że uniknięcie go raz dokładnie odtworzy oryginał), więc język używa par poleceń (36 opcji) do kodowania znaków US-TTY (32 opcje, z 4 używanych dla dyrektywy do samego 7 tłumacza). Oczywiście istnieje ponad 32 unikalnych znaków, które ludzie mogą chcieć wypisać (a więcej niż 32 znaki pojawiają się w ciągu), więc dwa z tych znaków to „kody przesuwne”, które przełączają się między czterema zestawami znaków (wielkie i małe , cyfry i zdefiniowane przez użytkownika „rozszerzenie figur”, które 7 używa dla pozostałych znaków ASCII, których nie ma w innych zestawach znaków, jednak wszystkie znaki w ciągu są „natywnie” w US-TTY, więc szczegóły rozszerzenie nie miało znaczenia). Tutaj'

Ełlizabeth obnoxiously quoted Ø(Łłjust too rowdy for my peaceØ):
"ŁTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOGØ," Łłgiving me a lookØ.

Liczę dziesięć zmian dodanych do 124 znaków wejściowych, dość nieistotny stosunek. Jako taka, możliwość użycia tylko nieco ponad dwóch bajtów danych wejściowych na znak wejściowy, razy 7 unikatowych bajtów, oznacza, że ​​wynik w tym wyzwaniu jest niesamowicie dobry. (Wydaje mi się, że język, który został zaprojektowany specjalnie do tego wyzwania, używałby pewnego rodzaju kompresji łańcuchów, zamiast wcześniej istniejącego zestawu znaków, ale mimo że Baudot i US-TTY nie zostały zaprojektowane do gry w golfa, nadal są dość zwięzłe .)


źródło
Ta luka polega na zapobieganiu pisaniu języka w celu odpowiedzi na wyzwanie, co oczywiście nie jest. Nadal godny pochwały ode mnie, choć nie mogę jej zaakceptować, mimo że do tej pory uzyskałem najniższy wynik.
durron597
2

Python 2, 163 147 145 143 bajtów * 35 36 35 unikalny = 5705 5292 5220 5005

To chyba tak dobre, jak to zamierzam.

Edycje:

  1. Usunięto .capitalize()na korzyść korzystania E.
  2. Zmieniono na użycie 'zamiast odwrotnego cudzysłowu z odwrotnym ukośnikiem.
  3. Usunięto +i niektóre spacje do użycia przecinków w printinstrukcji.
print"Elizabeth obnoxiously quoted (just too rowdy for my peace):",'"the quick brown fox jumps over the lazy dog,"'.upper(),"giving me a look."
mbomb007
źródło
Próbowałem zacząć od binarnego lub szesnastkowego i przekonwertować na ciąg, ale korzyści zostały utracone w procesie konwersji.
mbomb007
2

Python 2, 14508 11700 11088 10164 9486 9746 7860 145 bajtów * 36 unikalny = 5220

Widziałem tytuł i pomyślałem, że jest to interesujące wyzwanie dla dość nieporadnego Pythona. To są moje notatki, gdy rozwiązałem ten problem.

Moja pierwsza próba zredukowała unikalność do 31:

print''.join(chr([69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46][r])for r in range(124))

Myślałem, że dam radę lepiej. Używając map, unikalność spadła do 26:

print''.join(map(chr,(69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46)))

Mniej więcej w tym czasie zauważyłem w tekście pytania, że ​​wynik był uniques * bytesnie tylko wyjątkowy! Oznaczało to, że moje wyniki dla powyższych wyniosły 14508 i 11700. Niezbyt konkurencyjne. Teraz zmniejszam bajty, przechowując tekst jako ciąg szesnastkowy:

# 308*36 = 11088
print''.join(chr(int('456c697a6162657468206f626e6f78696f75736c792071756f74656420286a75737420746f6f20726f77647920666f72206d79207065616365293a202254484520515549434b2042524f574e20464f58204a554d5053204f56455220544845204c415a5920444f472c2220676976696e67206d652061206c6f6f6b2e'[i*2:i*2+2],16)) for i in range(124))

Rozmiar został zmniejszony, ale bardziej unikalne znaki. Ale jeśli użyłem spakowanego dwucyfrowego ciągu dziesiętnego z przesunięciem 32:

# 308*33 = 10164
print''.join(chr(int('37767390656669847200796678798873798583768900818579846968000874858384008479790082798768890070798200778900806965676909260002524037004953413543003450475546003847560042534548510047543750005240370044335857003647391202007173867378710077690065007679797514'[i*2:i*2+2])+32) for i in range(124))

Ma taką samą liczbę bajtów, ale zapisuje 3 unikalne.

Wykluwam nowy plan. Jeśli spakuję długą liczbę całkowitą Pythona z 7-bitowymi znakami, mogę wyodrębnić każdą z nich, przesuwając:

# 306*31 = 9486
h=1073974643401006528619595312441225198653732186368270382545648881135648217524502741093886285232362673460172159947573049818819511630304840724474679255867143965214892747087773876949021986013520804726327302180335979259392708372721217579101211940864406962137554744750
w=''
while h:w=chr(h&127)+w;h>>=7
print w

Cóż, to obniżyło wynik do 9486. Ciekawy eksperyment, ale nigdzie nie wystarczająco dobry. Co teraz, jeśli pozbędę się nazw funkcji i polegam na formatowaniu ciągów?

# 443 * 22 = 9746
print('%c'*124)%(69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46)

Mam teraz tylko 22 unikaty, ale wynik nie poprawia się.

Ok, co jeśli wybrałbym oczywisty sposób i po prostu wydrukowałem napis:

# 131*60 = 7860
print'Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look.'

Wynik 7860. Powinienem był to zrobić pierwszy. Ale nie nauczyłbym się tak wiele.

Myślę, że mógłbym zmniejszyć liczbę uników o 26, jeśli dynamicznie produkowałem duże litery, więc:

# 145*36 = 5220
print'Elizabeth obnoxiously quoted (just too rowdy for my peace): '+'"the quick brown fox jumps over the lazy dog,"'.upper()+' giving me a look.'

Myślę, że Python nie będzie lepszy niż 5220. Zadanie minimalizacji unikalnych znaków w Pythonie z pewnością było pouczające.

Aktualizacja: mbomb007 ma lepsze rozwiązanie Python z wynikiem 5005. Dobra robota.

Logic Knight
źródło
Ładne optymalizacje w twoim rozwiązaniu +1. Zredagowałem tytuł, jak zasugerowałeś.
Logic Knight
1

> <> (Ryby) - 138 bajtów * 65 Unikalne = 8970

Prosta trasa, tj. Hello World:

!v'Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look.'r!
 >l?!;o

Cóż, dla mojego pierwszego wypadu do> <> było to wyzwanie. Myślę, że widzę pewne ulepszenia, ale nauka była fajna :)

Lub zbyt skomplikowane - 1567 bajtów * 27 Unikalne = 42309

!\f8+3*:o2*f2*-:o3-:of+2+:ofa+-:o1+:o3+:of+:oc-:o\7+:od-:oc+:o1+:o9+: of-:o6+:o6+:o2-:o7-: od+:o\8-:o4+:o6-:o5+:of -:o1-:o\\6+:ob+ :o2-:o1+:o\:o5-:o:o\3+ :o3-:o8+:of4+-:oab ++:o\f4+-:o9+ :o3+: o\!
!5:of+a+:o1-:off+2+o:f-6-oa-:o8-:of3*1-:oa-:o2-:!fo3*7+:o2+:o:d+o:o5!f+:o7-:off+2+o6+:o8-!f:off!f+2+o4-:off+2+ob+!f:o3+::\ff    f f          f        f  f                  f    f        f     \!f-
 -                                               f                   f                    f     f                 f       ff    3 f          f        f  f                  f    f        f       f
 :                                               +                   +                    +     +                 +       ++    * +          +        +  +                  +    +        +       +
 o                                               2                   2                    2     2                 2       2a    1 2          2        2  2                  2    2        2       2
 c                                               +                   +                    +     +                 +       ++    + +          +        +  +                  +    +        +       +
 +                                               o                   o                    o     o                 o      \oo4-o \ o;         o        o  o                  o    o        o       o
 \:off+2+o9-:ob-:o4-:o2+:o2+:of4*%:of2++:o2,3+:o2 +:o3*f-3-:oc-:o3-:o\c+:o4+:oc-:o6-:o8+:o\9-:of 1++:o3-:o8+:o9-:o\8-:o9+:  o9+: o\e-:ob+:o8- :o3+:o3+ :o\4-:o7+:o2-f-:od+:o\2+:o c-:o3-:o\7+:ob\
Vlad274
źródło
Jeśli napiszesz ciąg znaków do tyłu, możesz upuścić rstos odwracając :) Możesz także przenieść finał odo pustego miejsca na początku drugiej linii.
Sp3000
@ Sp3000 Dzięki za wskazówki!
Vlad274,
W jakikolwiek sposób uniknąłbyś f f + 2 + otyle razy w skomplikowanym?
mbomb007
Czy w najlepszym przypadku jest łatwy sposób na pisanie dużymi literami ? Pętli przez podprogram, który dodaje 32 do każdego w tej części ciągu, może oszczędzając ci jakieś unikalne znaki, może?
mbomb007
@ mbomb007 Mógłbym to zoptymalizować za pomocą rejestru lub nawet odczytać spację z samego kodu źródłowego. Jestem zupełnie nowy w Fish, więc nie wiem, czy to możliwe
Vlad274,
1

05AB1E , 380 bajtów * 11 znaków = 4180 punktów

Jest to potencjalnie niekonkurencyjne

"234413410442342343401431404112421343420421440410421432430413441112423432421431401400112130411432430431112431421421112424421434400441112402421424112414441112422401342344401131213112114314242234112311320243232300112231312304322303112240304323112244320302310313112304321234312112314242234112301230330324112233304241134114112403410433410420403112414401112342112413421421412141"3ô5öçJ

Wypróbuj online!

Przesuwa podstawową reprezentację 5 znaków ASCII połączonych ze sobą.
Dzieli się na 3 części, konwertuje z powrotem na dziesiętne.
Konwertuje liczbę całkowitą ASCII z powrotem na znak.
Łączy się z powrotem.

Urna Magicznej Ośmiornicy
źródło
0

Perl 6, 139 bajtów * 36 unikalny = 5004

say 'Elizabeth obnoxiously quoted (just too rowdy for my peace): "'~"the quick brown fox jumps over the lazy dog".uc~'," giving me a look.'
bb94
źródło
0

Java 8, 141 bajtów * 64 unikalnych znaków = 9 024

()->{return"Elizabeth obnoxiously quoted (just too rowdy for my peace): \"THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG,\" giving me a look.";}

141 bajtów, 64 unikalnych znaków. Podejścia inne niż zwykłe „zwróć ciąg” zwiększają liczbę bajtów bez znacznego oszczędzania na używanych znakach.


źródło
0

Perl 5 , 137 bajtów * 35 unikalny = 4795

say'Elizabeth obnoxiously quoted (just too rowdy for my peace): "',uc'the quick brown fox jumps over the lazy dog','," giving me a look.'

Wypróbuj online!

Xcali
źródło
0

Tcl , 345 bajtów, 345 x 13 = 4485

\160\165\164\163 [\163\165\142\163\164 [\162\145\147\163\165\142 \55\141\154\154 \50\\\144\\\144\51 "055451724142456450 5742565770515765635471 616557644544 \5052656364 645757 6257674471 465762 5571 6045414345\51\72 \"241005 2125110313 0222172716 061730 1225152023 17260522 241005 14013231 041707\"\54 475166515647 5545 41 54575753" \\\\1\\1]]\56

Wypróbuj online!


Tcl , 337 bajtów, 337 x 15 = 5055

\160\165\164\163 [\163\165\142\163\164 [\162\145\147\163\165\142 \55\141\154\154 (\\\144\\\144) "055451724142456450 5742565770515765635471 616557644544 (52656364 645757 6257674471 465762 5571 6045414345)\72 \"241005 2125110313 0222172716 061730 1225152023 17260522 241005 14013231 041707\"\54 475166515647 5545 41 54575753" \\\\1\\1]]\56

Wypróbuj online!

Tcl , 329 bajtów, 329 x 16 = 5264

\160\165\164\163 [\163\165\142\163\164 [\162\145\147\163\165\142 \55\141\154\154 (\\d\\d) "055451724142456450 5742565770515765635471 6165576445d (52656364 645757 625767d71 465762 5571 6045414345)\72 \"241005 2125110313 0222172716 061730 1225152023 17260522 241005 14013231 041707\"\54 475166515647 5545 41 54575753" \\\\1\\1]]\56

Wypróbuj online!


Tcl , 333 bajty, 333 x 16 = 5328

\160\165\164\163 [\163\165\142\163\164 [\162\145\147\163\165\142 \55\141\154\154 (\\d\\d) "055451724142456450 5742565770515765635471 6165576445d \5052656364 645757 625767d71 465762 5571 6045414345\51\72 \"241005 2125110313 0222172716 061730 1225152023 17260522 241005 14013231 041707\"\54 475166515647 5545 41 54575753" \\\\1\\1]]\56

Wypróbuj online!


Tcl , 148 bajtów, 148 x 37 = 5476

puts "Elizabeth obnoxiously quoted (just too rowdy for my peace): \"[string tou "the quick brown fox jumps over the lazy dog"],\" giving me a look."

Wypróbuj online!

Tcl , 277 bajtów, 277 x 21 = 5817

\160u\164s [subs\164 [\162\145\147sub \55\141\154\154 (\\d\\d) "0554517241b456450 ob56o7051ous5471 61uo6445d(52us64 64oo 62o67d71 46o62 5571 6045414345): 241005 2125110313 0222172716 061730 1225152023 17260522 241005 14013231 041707\" 475166515647 5545 41 54oo53" \\\\1\\1]]\56

Wypróbuj online!

Tcl , 371 bajtów, 371 x 16 = 5936

puts "\105\154\151\172\141\142\145t\150 o\142\156o\170\151ous\154\171 \161uot\145\144 \50\152ust too \162o\167\144\171 \146o\162 \155\171 p\145\141\143\145\51\72 \"\124\110\105 \121\125\111\103\113 \102\122\117\127\116 \106\117\130 \112\125\115\120\123 \117\126\105\122 \124\110\105 \114\101\132\131 \104\117\107\54\" \147\151\166\151\156\147 \155\145 \141 \154oo\153\56"

Wypróbuj online!

Tcl , 401 bajtów, 401 x 16 = 6416

puts "\105\154\151\172\141\142\145\164\150 o\142\156o\170\151o\165\163\154\171 \161\165o\164\145\144 \50\152\165\163\164 \164oo \162o\167\144\171 \146o\162 \155\171 \160\145\141\143\145\51\72 \"\124\110\105 \121\125\111\103\113 \102\122\117\127\116 \106\117\130 \112\125\115\120\123 \117\126\105\122 \124\110\105 \114\101\132\131 \104\117\107\54\" \147\151\166\151\156\147 \155\145 \141 \154oo\153\56"

Wypróbuj online!


Tcl , 403 bajty, 403 x 16 = 6448

puts "\105\154\151\172\141\142\145\164\150 o\142\156o\170\151o\165\163\154\171 \161\165o\164\145\144 \50\152\165\163\164 \164oo \162o\167\144\171 \146o\162 \155\171 \160\145\141\143\145\51\72 \42\124\110\105 \121\125\111\103\113 \102\122\117\127\116 \106\117\130 \112\125\115\120\123 \117\126\105\122 \124\110\105 \114\101\132\131 \104\117\107\54\42 \147\151\166\151\156\147 \155\145 \141 \154oo\153\56"

Wypróbuj online!


Tcl , 433 bajty, 433 x 15 = 6495

puts "\105\154\151\172\141\142\145\164\150 \157\142\156\157\170\151\157\165\163\154\171 \161\165\157\164\145\144 \50\152\165\163\164 \164\157\157 \162\157\167\144\171 \146\157\162 \155\171 \160\145\141\143\145\51\72 \42\124\110\105 \121\125\111\103\113 \102\122\117\127\116 \106\117\130 \112\125\115\120\123 \117\126\105\122 \124\110\105 \114\101\132\131 \104\117\107\54\42 \147\151\166\151\156\147 \155\145 \141 \154\157\157\153\56"

Wypróbuj online!

Tcl , 473 bajtów, 473 x 14 = 6622

puts \105\154\151\172\141\142\145\164\150\40\157\142\156\157\170\151\157\165\163\154\171\40\161\165\157\164\145\144\40\50\152\165\163\164\40\164\157\157\40\162\157\167\144\171\40\146\157\162\40\155\171\40\160\145\141\143\145\51\72\40\42\124\110\105\40\121\125\111\103\113\40\102\122\117\127\116\40\106\117\130\40\112\125\115\120\123\40\117\126\105\122\40\124\110\105\40\114\101\132\131\40\104\117\107\54\42\40\147\151\166\151\156\147\40\155\145\40\141\40\154\157\157\153\56

Wypróbuj online!

Tcl , 133 bajty, 133 x 60 = 7980

puts "Elizabeth obnoxiously quoted (just too rowdy for my peace): \"THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG,\" giving me a look."

Wypróbuj online!

sergiol
źródło
Kolejna
porażka