Mając dość niezawodności pamięci flash, zdecydowałeś się przechowywać wszystkie swoje programy na jednej ze starych dobrych dyskietek 1440 KiB. Jednak po skopiowaniu nawet 3000 programów dysk był pełny. Jak to w ogóle możliwe? Doświadczony w kodzie golfowym, jak jesteś, większość programów nie ma nawet 100 bajtów długości, więc powinno pozostać dużo miejsca ...
Po zapytaniu o to superużytkownika odkrywasz, że zostałeś skrzywdzony przez rozmiar klastra systemu plików , złą fabułę projektantów FAT12, która pozostawia znaczną część twojej dyskietki nieużywaną i zmusza cię do zakupu więcej, niż faktycznie potrzebujesz.
Kup więcej dyskietek? Nigdy! Rozmiar klastra będzie mniejszy, jeśli po prostu zapiszemy wiele programów w jednym pliku, co jest możliwe, ponieważ różne kompilatory / interpretery będą zachowywać się inaczej dla tego samego kodu źródłowego.
Zadanie
Napisz poliglotę, która mieści się w jednym klastrze (512 bajtów lub mniej) i rozwiązuje jak najwięcej z poniższych zadań.
Przeczytaj wszystkie dane wejściowe i wydrukuj je.
Drukuj Witaj, świecie! .
Przeczytaj wiersz / argument ( nazwę ) jako dane wejściowe i wydrukuj Happy Birthday, [nazwa]! .
Przeczytaj wszystkie dane wejściowe i wydrukuj Uwielbiam zakładki! jeśli zawiera jeden lub więcej tabulatorów (0x09) i nienawidzę spacji! jeśli nie.
Przeczytaj dwa wiersze / argumenty i wypisz prawdziwą wartość, jeśli druga jest podciągiem pierwszej, a fałszem, jeśli nie.
Przeczytaj wiersz / argument i wypisz prawdziwą wartość, jeśli jej znaki są w kolejności rosnącej, a jeśli nie, to wartość fałsz.
Przeczytaj wiersz / argument i znak i wydrukuj indeksy wszystkich wystąpień tego znaku.
Przeczytaj wiersz / argument i wydrukuj dowolny ze znaków o największej liczbie wystąpień.
Przeczytaj dwie liczby całkowite od 0 do 255 i wydrukuj ich sumę.
Przeczytaj jedną liczbę całkowitą od 0 do 255 i wydrukuj iloraz i resztę jego dzielenia przez 7 .
Odczytaj jedną liczbę całkowitą z przedziału od 1 do 255 i wydrukuj prawdziwą wartość, jeśli jest to liczba złożona (ani 1, ani liczba pierwsza) i wartość fałsz, jeśli nie.
Przeczytaj jedną liczbę całkowitą z przedziału od 1 do 255 i wydrukuj prawdziwą wartość, jeśli jest to potęga 2, a wartość fałsz, jeśli nie.
Przeczytaj dwie liczby całkowite od 0 do 255 i wydrukuj większą.
Przeczytaj dziesiętną liczbę całkowitą od 0 do 255, wypisz jej reprezentację szesnastkową.
Odczytaj jedną liczbę całkowitą od 0 do 255 i wydrukuj jej wagę Hamminga (liczba 1-bitów).
Przeczytaj jedną liczbę całkowitą n między 1 a 13 i wydrukuj F n , n- tą liczbę Fibonacciego .
Na przykład dla danych wejściowych
13
wydrukuj233
.
Przeczytaj wiersz / argument wejścia i umieść go w ramce.
Na przykład dla danych wejściowych
Programming Puzzles & Code Golf
wydrukuj to:+---------------------------------+ | Programming Puzzles & Code Golf | +---------------------------------+
Przeczytaj prostokątny blok znaków i obróć go o ćwierć obrotu w prawo.
Na przykład dla danych wejściowych
tye xll epb tma id sa s e i r hsn Tiu
wydrukuj to:
This text is simply unreadable
Przeczytaj liczbę całkowitą od 1 do 40 i wydrukuj diament o tej długości boku.
Na przykład dla danych wejściowych
3
wydrukuj to:/\ / \ / \ \ / \ / \/
Wydrukuj to:
....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@....
Punktacja
Odpowiedź, która udaje się włączyć największą liczbę programów do jednego pliku, który mieści się w pojedynczym 512-bajtowym klastrze, wygrywa. Więzy są dzielone według liczby bajtów (im niższy, tym lepiej).
Dodatkowe zasady
Dla każdego zadania, o które prosi się o wynik, ten sam plik (bajt na bajt) musi stanowić pełny program - w wybranym języku - który rozwiązuje to konkretne zadanie.
Każde zadanie musi zostać rozwiązane w innym języku.
Języki liczą się jako różne, jeśli nie są różnymi wersjami tego samego języka. Na przykład jest tylko jeden JavaScript, jeden Python i jeden TI-BASIC, ale C, C ++, Octave i MATLAB to cztery różne języki.
Wybrany język dla każdego zadania musi spełniać naszą zwykłą definicję języka programowania .
Ponadto język musi zostać opublikowany i wdrożony przed 9 września 2015 r.
Twój kompilator / tłumacz może nie wymagać żadnych niestandardowych flag, aby uzyskać oczekiwane zachowanie.
Wyjątki od tej reguły obejmują flagi wymagane do określenia konkretnego języka, do odczytania programu z (pojedynczego) pliku lub do wyłączenia banera.
Dane wejściowe dla każdego zadania będą składały się z drukowalnych znaków ASCII (0x20 do 0x7E) i kanałów (0x0A) i nie będą przekraczać 255 bajtów.
Wszystkie liczby całkowite można odczytać w postaci dziesiętnej lub jednostkowej, chyba że w zadaniu podano inaczej.
Zachowanie nieprawidłowych danych wejściowych jest niezdefiniowane.
Możesz odczytać dane wejściowe ze STDIN (lub jego najbliższej alternatywy) lub jako argumenty wiersza poleceń.
Jeśli zadanie wymaga odczytania dwóch elementów danych wejściowych, możesz je odczytać - w dowolnej kolejności - oddzielone jednym bajtowym ogranicznikiem według własnego wyboru, jako osobne argumenty wiersza poleceń lub jeden z STDIN, a drugi jako argument wiersza polecenia.
Jeśli jednym z elementów wejściowych jest linia, jedynym możliwym ogranicznikiem jest linia.
Wydrukuj wyjście do STDOUT (lub najbliższej alternatywy). Wszystkie dane wyjściowe do STDERR zostaną zignorowane.
Do każdego zadania obowiązują standardowe zasady gry w golfa .
W szczególności dotyczy to luk, które są domyślnie zabronione , z wyjątkiem twardego kodowania danych wyjściowych , co jest wyraźnie dozwolone w przypadku tego wyzwania.
2>/dev/null
i uzyskujemy prawidłowe wyjście na standardowe wyjście, to jest w porządku? Tak dla pewności.Odpowiedzi:
12 języków, 418 bajtów
To zabawne wyzwanie. Trudno jest zmieścić więcej języków, ale przy tak wielu bajtach prawdopodobnie mógłbym zrobić jeszcze jeden.
Korzysta bezpłatnie z języków 2D. Zauważ, że znak na między
[ ]
na@-[ ]e<
linii jest zakładka. Wymaga to również\n
zakończenia linii dla TRANSCRIPT do działania.Preludium (Zadanie 1 / Kot)
?(!?)
to tylko bezpośrednie tłumaczenie,[.,]
w BF.()
Pętle Preludium działają jak[]
pętle BF , więc wszystko, od(
lewej kolumny do)
poprzedzającej niewykonywanie programu głównego.Reguły składniowe Prelude oznaczają, że nawiasy muszą być dopasowane (czytanie od lewej do prawej kolumny), i może być tylko jeden nawias na kolumnę. Poza tym jest to dość łatwy do dopasowania język.
Upewnij się, że
NUMERIC_OUTPUT
jest ustawiony na,False
jeśli używasz interpretera Python.TRANSCRIPT (Zadanie 2 / Witaj świecie)
TRANSCRIPT to esolang tematyczny oparty na interaktywnej fikcji. Linie nierozpoznane przez TRANSCRIPT są ignorowane, co ułatwia dopasowanie.
Tr is here.
deklarujeTr
zmienną łańcuchową, a drugi wiersz ustawia zawartość zmiennej naHello, World!
.X Tr
(X
do sprawdzenia) następnie wyprowadza ciąg.Mimo że TRANSCRIPT jest bardzo łatwy do dopasowania, jest to dość pełny język, więc podjąłem najłatwiejsze wyzwanie.
Rozszczepienie (zadanie 3 / wiadomość urodzinowa)
który drukuje pierwszą część, umieszcza dane wejściowe za pomocą małej pętli 2D, a następnie generuje końcowy wykrzyknik. Te
R
oznacza, że atom zaczyna się tutaj przesuwając w prawo, co jest przydatne, ponieważ program ten może być przesuwane w dowolnym miejscu.Szyna (zadanie 4 / karty)
Podobnie jak Fission, Rail jest językiem 2D, który ma tę zaletę, że można go przenosić w dowolnym miejscu. Rozpoczyna wykonawcze z
$
tegomain
funkcji, kierując się na południowy wschód.Najpierw kierujemy się w dół
\
, skręcamy w lewo o-
, uderzając,[<tab>]
co popycha kartę.e<
następnie gałęzie oparte na EOF - jeśli EOF, idziemy w dół i drukujemy"I hate spaces!"
przed zatrzymaniem, w przeciwnym razie podnosimy się. Jeśli ruszyliśmy w górę, czytamy następny znak i porównujemy go z tabulatorem, ponownie rozgałęziając się - jeśli tab, skieruj w górę i wydrukuj"I love tabs!"
przed zatrzymaniem, w przeciwnym razie skieruj w dół i kontynuuj pętlę wejściową.Ten program jest dość drogi, ale odkąd TRANSCRIPT zajął Hello World, trudno było wybrać i wykonać odpowiednie zadanie dla Rail.
> <> (Zadanie 6 / Wejście rosnące)
Drukuje,
1
jeśli ściśle rosnące, w0
przeciwnym razie.> <> to inny język 2D, a wykonywanie rozpoczyna się od lewego górnego rogu.
"..."
jest trybem strunowym, przesuwając znaki wewnętrzne jeden po drugim. Po pierwszym łańcuchu uderzamy#
, co odbija IP w lewo, popychając więcej łańcuchów i owijając się (> <> jest toroidalne) przed uderzeniem\
, lustro, które odbija nas w górę.Na dole programu znajduje się
.91<
teleportujący nas(9, 1)
tam, gdzie znajduje się program podstawowy. Po tym0[
usuwa wszystkie śmieci z ciągów,0
wypycha zero, aby reprezentować ostatni odczyt znaku, a następnie po prostu odczytuje znaki jeden po drugim, upewniając się, że wciąż rośniemy.Prawdopodobnie lepiej jest przenieść program podstawowy niż teleportować się, ale w razie potrzeby zajmę się tym później.
Befunge (Zadanie 9 / Dodawanie)
Testowany z tłumaczem znalezionym tutaj . Jest to dość prosty program, z początkiem pchania niepotrzebnego sznurka i
#
przeskakiwania przestrzeni. Potem jest to tylko program podstawowy&&+.@
.Labirynt (Zadanie 10 / Divmod przez 7)
Dogodnie,
'
i"
są NOP w Labiryncie, które działają jak ścieżka w labiryncie. Pominąłem niechlujną nawigację, ale w zasadzie dużo się kręci i wędruje, zanim dotrzemy do?
, co jest początkiem podstawowego programu.Program nie jest całkiem opróżniony, aby uwzględnić Preludium (np.
?
Czyta wejście w Preludium).Python 2 (Zadanie 14 / Szesnastkowy)
Do
xxx
s reprezentować nieistotnych części wykomentowane przez ciągi multilinii lub komentarze.print hex(input())
Pośrodku jest podstawowy program. Daje to wynik wiodący0x
, ale zakładam, że jest w porządku (jeśli nie, to i tak jest to łatwa naprawa).Pierwszy wiersz to ciąg znaków,
"1\"# &&+.@\""
po którym następują dwa" "
s. Te trzy ciągi są łączone przez parser i pozostawione nieużywane (ta pierwsza linia działa podobnie dla Ruby i Julii później).GolfScript (Zadanie 15 / Ciężar Hamminga)
Pierwszy wiersz przesuwa trzy ciągi, a drugi wiersz jest komentarzem.
''''
wypycha dwa kolejne ciągi, a następnie<<
wykonuje dwa porównania (s
jest ignorowane). Wreszcie""'("'
popycha kolejne dwa ciągi.Wszystko to polega na tym, że śmieci są następnie usuwane przez zawinięcie ich w tablicę i uzyskanie pierwszego elementu (
]0=
), który jest początkowo danymi wejściowymi na stosie. Następnie oceniamy dane wejściowe za pomocą~
, zamieniamy na binarne, a2base
następnie sumujemy bity za pomocą{+}*
. Następny}
nie ma sobie równych i super-komentuje resztę programu.Julia (Zadanie 16, Fibonacci)
#=
rozpoczyna komentarz wielowierszowy i=#
kończy komentarz wielowierszowy. Program podstawowy wykorzystuje potęgowanie macierzowe do obliczania liczb Fibonacciego (wzięte z Rosetty ).Ruby (ramka Zadanie 17 / ASCII)
Ten program zakłada, że wejście nie kończy się końcowym znakiem nowej linii.
Mamy niepotrzebny ciąg, komentarz, kolejny niepotrzebny ciąg, a następnie heredoc, który komentuje większość programu. Potem jest program podstawowy, po którym następuje
#
komentarz w jednym wierszu .CJam (Zadanie 19 / Diament)
Dwa ciągi spacji na końcu pierwszego wiersza mają zaspokoić CJam, ponieważ
#=
są to dwa operatory binarne. Nie będę wchodził w szczegóły w ten temat, ale w zasadzie jest to bałagan, a program podstawowy jest zwykłypomiędzy.
Kluczowym czynnikiem odróżniającym GolfScript od CJam jest to, że w CJam pojedynczy cytat
'
nie zaczyna i nie kończy ciągów, a zamiast tego wypycha następny znak na stos. Oznacza to, że w CJamwypycha a
(
następnie rozpoczyna ciąg od"
(którego pierwszym charakterem jest'
), podczas gdy powyższy jest tylko prostym pojedynczym ciągiem w GolfScript.Wypróbuj online .
1>
jest używany zamiast(
konta Preludium.Oto 12 języków, 373 bajtów . Niektóre zadania zostały przeniesione, TRANSCRIPT został usunięty (co spowodowało, że Rail był zbyt drogi) i dodano Schemat (kurczak). To tylko moje pole golfowe dla przyszłych aktualizacji, ponieważ aktualizacja głównego postu trwa wiecznie.
Mógłbym zaoszczędzić kilka bajtów dla Julii, ponieważ niezakończone komentarze wielowierszowe zgłaszają błąd do STDERR.
źródło
;)
że zwlekam, zmieniając cokolwiek w mojej odpowiedzi, z powodu długiego opisu. lol78910 języków,398431447507 bajtówTo chyba najbardziej pasuję do obecnego rozwiązania.
Ostatni wiersz zawiera kod Białej spacji, tak aby SE go nie zjadł. Aby uruchomić kod, zamień wszystko
S
spacjami,T
tabulatorami iN
znakami nowej linii.C89, zadanie 16
Oto, co widzi kompilator:
Cała reszta jest usuwana jako komentarze lub wewnątrz
#if 0
.C ++, zadanie 14
Użyłem sztuczki skradzionej stąd, aby odróżnić C89 od C ++.
Lua, zadanie 2
Oto podstawowa struktura.
Brainfuck, zadanie 1
Musiałem tylko upewnić się, że nie
.,
zostaną znalezione nieskończone pętle lub zbłąkane . Komentarze wieloliniowe Lui również podwojają się z komentarzami BF. Wszystko oprócz pierwszych 2 znaków to duża pętla NOP.Python, zadanie 6
Ponownie używam funkcji specyficznych dla języka, aby NOP lub skomentować inny kod.
Pyth, zadanie 17
Pyth jest do tego miły. Pobiera pierwszą
#
jakowhile True:
pętlę, która cicho wychodzi po błędzie . Tak więc po prostu robię większość kodu jako ciąg znaków (aby uniknąć wcześniejszego;
zakończenia pętli), a następnie po prostu kończę pętlę, wychodzę z innego utworzonego przez komentarz Pythona i wykonuję zadanie. Oto wszystkie zastąpione niepustymi ciągami" string "
, wciąż funkcjonalnie równoważne:> <>, zadanie 3
Ten jest bardzo interesujący. Wykonanie odbija się w kodzie, używając skoków, aby ominąć przeszkody. Odpowiednie części:
Gwiaździsta , zadanie 9
Tutaj zacząłem wchodzić w języki „odrzucaj wszystkie postacie oprócz”. Cokolwiek innego się rozebra, wygląda to tak:
Kod przeskakuje większość interpunkcji za pomocą skoku, aby uniknąć trudności, wystarczy użyć początku i końca kodu. Kod jest funkcjonalnie równoważny z
Befunge-98, zadanie 10
Działa podobnie do>>. Na szczęście
#
jest lustrem w> <> i pominięciem w Befunge, więc możemy zastosować inne zachowanie. Również0/0 == 0
.Biała spacja , zadanie 13
To była ostatnia rzecz, do której pasowałem. Pierwsze kilka linii po prostu wypycha zera na stos, ponieważ zawierają tylko spacje i znaki nowej linii z „normalnego” kodu. Kod jest zakodowany; zamień wszystko
S
spacją,T
tabulatorami iN
znakami nowej linii.źródło
17 różnych wersji Pipa, 383 bajtów (nieprawidłowy)
Podczas gdy to pytanie było piaskownicą, przeczesałem wszystkie wersje mojego języka Pip i wymyśliłem poliglota, używając 17 z nich. Niestety, wersje tego samego języka są obecnie niedozwolone w regułach wyzwania, ale i tak za zgodą Dennisa i zrzeczeniem się zamieszczam swoją pracę.
Surowy kod
Strategia
W Pip małe litery są zmiennymi. Wielkie litery są bardziej skomplikowane: są podzielone na ciągi najwyżej dwóch znaków, którymi mogą być operatory lub zmienne. Jeśli token wielkich liter nie jest specjalnie zdefiniowany jako zmienna lub operator, zakłada się, że jest to niezdefiniowana zmienna, której wartość wynosi zero.
Tak więc, aby rozróżnić dwie wersje Pipa, muszę tylko znaleźć operator zmiennej lub alfabetyczny, który został dodany w nowszej z nich. W starszym będzie to zero. Kod
v:uIN[...]
zestawia dużą listę zawierającą jeden z tych sprawdzeń dla każdej wersji, którą chcę przetestować, dowiaduje się, ile nilów znajduje się na tej liście (u
zmienna jest wyraźnie inicjowana na zero), i przechowuje liczbę wv
(dla „wersji”) .Po kilku innych obliczeniach pojawia się kolejna duża lista, która oblicza wyniki 17 zadań z wyzwania i używa jej
v
do wyboru w zależności od wersji.Wersje i zadania
0.15.09.04
Diagnostyka:
(oTM0,0i)
(naprawiono błąd z operatoremT
riM
, w którym przycinanie 0 znaków z każdego końca łańcucha dawało zamiast tego pusty ciąg; indeksowanie w pusty ciąg daje zero)Zadanie 18:
Iv<2W##YqlPBy
(konfiguracja: odczytaj wszystkie linie ze standardowego wejścia, jeśliv
jest mniejsza niż 2), a następnie((J_M ZRVl)|0)Jn
(odwróć listę linii, transponuj i ponownie połącz w łańcuch)0.15.08.06
Diagnostyka:
EN1
(dodanoEN
operator umerate)Zadanie 1:
Iv<2W##YqlPBy
(taki sam kod instalacyjny jak powyżej), a następniel?lJnl
(dołącz do nowych linii)0.15.08.03
Diagnostyka:
1N1
(dodanaN
jako krótka wersjaIN
operatora)Zadanie 20:
c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0
(konfiguracja: wygeneruj listę zawierającą górną i dolną połowę szachownicy i zapiszc
), a następniecJn
(dołącz do nowej linii)0.15.08.01
Diagnostyka:
Y1
(dodanoY
operator ank)Zadanie 19:
Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}
(ustawienie: jeśliv
jest 3, zbuduj górną połowę diamentud
), a następnied.n.RVd
(odwróć na dolną połowę i dołącz do nowej linii)0.15.06.19
Diagnostyka:
RCk
(dodano operatorR
andom hoiceC
)Zadanie 17:
m:'+.'-X#a+2.'+.n."| "
(setup: build+----+\n|
string inm
), a następniem.a.RVm
(zawijanie danych wejściowychm
i odwracaniem
)0.15.06.12
Diagnostyka:
k
(k
zmienna wstępnie zainicjalizowana na", "
; wcześniej była niezdefiniowana, a zatem zerowa)Zadanie 16:
Iv=5La{i+:oSio}
(jeśliv
jest to 5, wygeneruj liczbę Fibonacciegoi
), a następniei
0.15.06.08 (uwaga: numer wersji nie został zmieniony do czasu następnego zatwierdzenia)
Diagnostyka:
w
(w
zmienna wstępnie zainicjalizowana do`\s+`
)Zadanie 15:
h:$+TBa
(przekonwertuj dane wejściowe na cyfry binarne i sumy; zapisz wynikh
dla zadania 12 później)0.15.05.29
Diagnostyczny:
(hR`1.+0``&2o`)@>3@AB0
Ta wersja została dodana
&
jako wzór zastępczy dla całego dopasowanego łańcucha w zamianie wyrażenia regularnego (zainspirowany przez sed). Powyższy kod przyjmujeh
(100
) i zastępuje go`&2o`
(tj."1002o"
W nowszych wersjach, ale po prostu"&2o"
w starszych wersjach). Następnie wycina wszystkie znaki po trzeciej ("2o"
w nowszych wersjach,""
w starszych wersjach) i próbuje zaindeksować ten ciąg. Indeksowanie w pusty ciąg daje zero.Zadanie 7:
j:ak:b
(Setup: kopie lokalne Varsa
,b
do globalnych Varsj
,k
więc będą one dostępne wewnątrz funkcji), a następnie({j@aEQk}FI0,#a).s
(filtr dla indeksów wa
którym odpowiedni znak równa sięb
i dołącz na przestrzeni)0.15.05.26
Diagnostyka:
`u`
(dodano typ wzorca; we wcześniejszych wersjach znaki wsteczne są ignorowane jako nierozpoznane znaki, a wyrażenie ocenia nau
, co jest zerowe)Zadanie 14:
aTB16
(konwersjaT
OB
azę 16)0.15.05.24
Diagnostyka:
rZ4
(utworzonor
specjalną zmienną, która zwraca losową wartość od 0 do 1 za każdym razem, gdy się do niej odwołuje; poprzednio była niezdefiniowana, a zatem wyrażenie było oceniane na zero)Zadanie 13:
a>b?ab
(wyrażenie trójkowe)0.15.05.12
Diagnostyka:
rZ4
(dodanoZ
operator ip)Zadanie 12:
h=1
(suma bitów z zadania 15 musi wynosić 1)0.15.05.11
Diagnostyka:
AB6
(AB
operator dodanej wartości rozpuszczonej)Zadanie 11:
Pv=11?a>1&0INa%(2,a)[...]@v
(jeśliv
jest to 11, dane1
wyjściowe są większe niż 1, a mniejsza liczba dokładnie je dzieli, w0
przeciwnym razie; jeśliv
jest coś innego, użyjv
jako indeksu na liście, aby zdecydować, co wydrukować)0.15.05.02
Diagnostyka:
({a}V7)
(dodanyV
operator; gdy nieV
został zdefiniowany, wysłał argumenty zero i 7 do funkcji,{a}
która zwraca swój pierwszy argument)Zadanie 10:
a//7.s.a%7
(dane wejściowe podzielone przez 7 i mod 7, rozdzielone spacjami)0.15.04.26
Diagnostyka:
BN8
(dodano operatoraB
egationN
itwise)Zadanie 9:
a+b
0.15.04.23
Diagnostyka:
AZ
(AZ
zmienna wstępnie zainicjowana na wielkie litery)Zadanie 5:
bINa
(IN
podaje liczbę wystąpień)0.15.04.20
Diagnostyka:
m@0:0
następnie9@m
m
Zmiennej preinitialized do 1000. W tym COMMIT@
operator został rozwiązany powrotu lwartościami; poprzednio przypisanie dom@0
ostrzeżenia i nic nie zrobiło. Zatem po usunięciu błędu pierwsza instrukcja ustawia sięm
na0000
, która jest legalnym indeksem dla9
; przed poprawką,m
pozostaje1000
, co nie jest prawnym indeksem. (Wskaźniki nie były jeszcze cykliczne).Zadanie 3:
"Happy Birthday, ".a.'!
0.15.04.18
Wszystkie poprzednie diagnostyki powodują, że zero jest dodawane do listy diagnostycznej.
Zadanie 2:
"Hello, World!"
Większość innych kodów to poprawki, które musiałem wprowadzić, aby uniknąć błędów w różnych wersjach. Ten post jest już zdecydowanie za długi, więc jeśli chcesz wiedzieć o czymś, czego nie wyjaśniłem, przejdźmy do dyskusji na czacie w językach ezoterycznych .
źródło
6 języków, 226 bajtów (229 w zależności od sposobu
\x1b
akceptacji!)Więc nie sądzę, że dokonałem najlepszego wyboru języków i wyobrażam sobie, że nie jest to szczególnie konkurencyjne, ale mimo to uważałem to za interesujące wyzwanie! Ogólnie rzecz biorąc, nie ukończono wielu wyzwań, ale prawdopodobnie mógłbym zdobyć wyzwanie w spacji lub coś podobnego, ale do tej pory mam to:
1. Brainfuck
Testowane na http://copy.sh/brainfuck/ i http://brainfuck.tk/ .
Po usunięciu wszystkich ignorowanych znaków, powyższy program jest wszystkim, co nam pozostało, jest to tylko przykładowy program cat z dodatkowymi pustymi pętlami, aby ominąć użycie symboli w innych językach.
2. Ruby
Stosowanie:
Powyższy kod jest po usunięciu wszystkich komentarzy. Pierwsza linia jest całkowicie bezużyteczne w Ruby jak możemy zdefiniować kilka wyrażeń regularnych zawiera kod befunge-93 i brainfuck, następnie tworzymy tablicę, aby zawierał
Hello
iWorld
i wydrukować go za pomocąprintf
(aby dodać,
a!
).3. Perl
Stosowanie:
Bardzo podobny do Ruby, z tą różnicą, że ponieważ przechowujemy odwołanie do tablicy
$a
, kiedy próbujemy uzyskać do$a[0]
niego dostęp , jest ono puste, więc możemy zastąpić go tekstem dla wyzwania 3Happy Birthday
ipop
(który pokazuje ostatni argument programu wiersza poleceń ).4. JavaScript
Sposób użycia: wklej do konsoli przeglądarki i uruchom.
Podobnie jak Ruby i Perl, pierwszy wiersz zasadniczo tworzy bezużyteczne
RegExp
obiekty, następnie przechowujemy bezużyteczną tablicę$a
i tworzymy instancję dwóch bezużytecznych ciągów, z których jeden zawiera kod Ruby / Perl, a drugi zawiera znak nowej linii#
, a następnie mamyprompt()
dane wejściowe ialert()
oczekiwany wynik przez większość ludzi na wyzwanie 4. Kończymy kolejnym bezużytecznymRegExp
przedmiotem, który zamyka pętlę pieprzenia mózgu.9. Befunge-93
Testowany na http://www.quirkster.com/iano/js/befunge.html .
Jak rozumiem,
/
dzieli stos i wypycha wynik, który nie ma negatywnych skutków poza wypychaniemNaN
na powyższą stronę,&
prosi o wprowadzenie liczby całkowitej, więc odczytujemy na stosie obie liczby wymagane przez wyzwanie 9 na stosie,#
zapewnia to pominięcie[
który jest do wykonania, aby przelecieć mózg,+
a następnie dodaje dwie górne liczby ze stosu,.
wysyła je,#]
by znów przelecieć mózg i@
wychodzi.13. PHP (działający w Bash)
Stosowanie:
W PHP wszystko, co nie jest zawarte w
<?
tagach, jest wypisywane dosłownie, więc wypisuje kod Befunge-93 i kod typu „brainfuck”, więcdie()
natychmiast w kodzie wypisujemy screen clear (\x1bc
), a następniemax()
dwa pierwsze argumenty.źródło
the first character in the first string literal is the byte ASCII 27
); twój wynik to 226..match'\x09'
(tam gdzie są) być może zobaczę, czy w pewnym momencie mogę dodać więcej!6 języków,
450404 bajtówbash, brainfuck, C, gawk4, JavaScript i Minimal-2D
Aktualizacja: trochę golfa. Nadal nie jestem pewien, co jeszcze dodać, i nie jestem pewien, jak konkurujący członkowie pomyśleliby o mnie, używając ich języków do różnych zadań. Próba wyjaśnienia algorytmu pieprzenia mózgu.
To było moje pierwsze doświadczenie z poliglotą, więc musiałem nauczyć się wszystkiego od zera. Rozpoczęcie od awk nie było najmądrzejszym pomysłem, ponieważ wydaje mi się, że jest względnie bezlitosny. Ponieważ liczba wykonanych zadań jest istotna, najpierw zacząłem od najłatwiejszych zadań. Nie jestem pewien, czy to był mądry ruch. Nie jest to zbytnio grało w golfa, ponieważ miałem wystarczająco dużo problemów ze współpracą tych sześciu, ale zrobiłem, co mogłem, żeby to krótko potrwać.
Oto języki i ich czynności w kolejności alfabetycznej. Pokażę prosty sposób przetestowania ich wszystkich w dalszej części. Ponieważ niektóre z nich mogą być specyficzne dla wersji, podam numery wersji używanych przeze mnie narzędzi.
uderzenie, zadanie 3
Cóż, to oczywiste, że użyłem sed. Próbowałem w jakiś sposób umieścić skrypt sed, ale nie mogłem go uruchomić, więc poszedłem na bash. Sposób, w jaki to robię, jest w komentarzu C i awk ocenia to
False
.sed --version
dajesed (GNU sed) 4.2.2
bash --version
dajeGNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Więc część sed sprowadza się do
Grupuje dane wejściowe, wkleja je w nowy ciąg i wypisuje wynik. Dość powszechne rzeczy.
pieprzenie mózgu, zadanie 20
Cóż, to chyba zawsze jest dość łatwe do ukrycia. Linia rozpoczynająca się od
#//
jest ignorowana przez C i awk. A przynajmniej mogą żyć za śmieciami.bf
dajebf - a Brainfuck interpreter version 20041219
To jest kod skondensowany. Pierwszy wiersz to tylko śmieci z innych języków.
Spróbuję wyjaśnić, jak to działa
ustawia to taśmę i wskaźnik do tego
komórka zawierająca 8 jest globalnym licznikiem dla następnej pętli
, jest to liczba wydruków 3 takich samych linii
ustawia
C1
na 3, liczbę takich samych liniiustawia
C2
na 4, liczbę „....@@@@
” w wierszu (na początku)wypisuje całkowite zmniejszanie linii
C2
w procesie,gdy
C2
wynosi zero, drukuje nową linię i zmniejszaC1
.jeśli
C1
wynosi zero, magia się dzieje46 przesuwa się za 64
10, a licznik globalny przesuwa się o jeden w prawo
wtedy globalny licznik jest zmniejszany,
jeśli wynosi zero, program kończy pracę
C, zadanie 2
Wyczerpuję każdą ostatnią zdolność C tutaj, drukując „Witaj, świecie!”. Cóż, ktoś musiał wykonać robotę ...
gcc --version
dajegcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
Rzeczywisty kod C.
#define func
Jest, aby awk w porządku z tym. Uważa, że jest to funkcja awk. Skrót od func to cecha gawk.gawk4, zadanie 18
Ponieważ użyłem awk do prawie wszystkiego tutaj, zdecydowałem, że to musi być w tym.
awk --version
dajeGNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
awk to widzi
Wzorce wyszukiwania, w tym
\t
ocena dofalse
. Wybrałem tutaj kartę, ponieważ myślę, że nie może być w danych wejściowych.sed
ocenia nafalse
."the string"&&0
ocenia na fałsz. Funkcja jest w porządku. Program jest wykonywany, jeśli dopasowany jest pusty wzorzec, który jest dla dowolnego wejścia.Robi to
Wkład
Wydajność
Musisz upewnić się, że wszystkie linie wejściowe mają tę samą długość. Wypełnij je spacjami.
JavaScript, zadanie 9
Nie jestem pewien, czy jest to uzasadnione, ponieważ było to zbyt łatwe. Jeśli nadasz plikowi programowemu końcówkę HTML i otworzysz go w przeglądarce (korzystałem z przeglądarki Firefox 40.0.3 i Chrome 45.0.2454.85), pojawi się monit o podanie danych wejściowych. Musisz wprowadzić dwie liczby oddzielone spacją, a alarm wyświetli ich sumę.
Minimal-2D , zadanie 1
Łatwo było to zmieścić w liniach komentarzy. Do przetestowania tego użyłem interpretera działającego w Pythonie. Drukuje dane wejściowe na wyjściu. Program wygląda następująco
RUDL są w prawo, w górę, w dół i w lewo. Więc zaczyna iść w prawo, wczytuje postać ze standardowego wejścia do pamięci i dodaje jedną. Ukośnik pomija następne polecenie, jeśli pamięć ma wartość 0. To ma to zakończyć. Jeśli zostanie odczytany znak o wartości -1, wprowadzanie zakończy się. Więc jeśli -1 zostanie odczytane, pomija D i kończy. Jeśli czytane jest coś innego, idzie w dół w lewo, dodaje to 1 z powrotem do pamięci i drukuje postać na standardowe wyjście. Potem idzie w lewo i w górę i zaczyna od nowa.
Testowanie
Oświadczenie: Nie będę ponosić żadnej odpowiedzialności za jakiekolwiek szkody wyrządzone w tym systemie.
Zakłada się, że masz bash & co, gawk (przynajmniej wersja 4, ponieważ używa to tablic wielowymiarowych), gcc, python, bf jako interpreter pieprzenia mózgów i zainstalowany Firefox.
Aby to ułatwić, skopiuj źródło programu do pliku o nazwie
cluster.html
. Udostępnij ten plik jako wykonywalny dla zadania bash. Skopiuj i wklej interpreter dla Minimal-2d do pliku o nazwieminimal2D.py
w tym samym katalogu. Następnie skopiuj i wklej poniższy skrypt do pliku skryptu i umieść go w tym samym katalogu, spraw, by był wykonywalny i uruchom go ... no cóż, z kim rozmawiam. Jeśli to przeczytasz, prawdopodobnie nie potrzebujesz aż tyle wyjaśnień i i tak sprawisz, żeby jakoś działało.Tam też znajduje się polecenie uruchamiania poszczególnych testów.
Baw się dobrze!
źródło