Zainspirowany github.com/JackToaster/Reassuring-Parable-Generator , z kolei zainspirowany xkcd.com/1263 . Możliwe słowa pochodzą z pliku reassuring.cfg tego repozytorium.
Spójrz na plik reassuring.cfg (użyj 12-go zatwierdzenia) , aby zobaczyć gramatykę, z którą odpowiada wyjście (wyjście jest listą wszystkich ciągów pasujących do gramatyki).
Zadanie: Twój program musi wypisać wszystkie 7968 rozróżniające wielkość liter wiersze dokładnego tekstu zawartego w pastebin pastebin.com/2SNAJ1VH . Kopia pastebinu jest zapisywana w Wayback Machine
Oto próbka 33 linii motywujących z pastebin:
Computers can't enjoy a salad.
Computers can't enjoy a cake.
Computers can't enjoy a ice cream cone.
Computers can't enjoy a meal.
Computers can't enjoy a drink.
Computers can't enjoy a steak.
Computers can't enjoy a chicken dinner.
Computers can't enjoy a piece of cake.
Computers can't enjoy a piece of pie.
Computers can't enjoy a cookie.
Computers can't enjoy a sandwich.
Computers can't taste a salad.
Computers can't taste a cake.
Computers can't taste a ice cream cone.
Computers can't taste a meal.
Computers can't taste a drink.
Computers can't taste a steak.
Computers can't taste a chicken dinner.
Computers can't taste a piece of cake.
Computers can't taste a piece of pie.
Computers can't taste a cookie.
Computers can't taste a sandwich.
Computers can't experience eating a salad.
Computers can't experience eating a cake.
Computers can't experience eating a ice cream cone.
Computers can't experience eating a meal.
Computers can't experience eating a drink.
Computers can't experience eating a steak.
Computers can't experience eating a chicken dinner.
Computers can't experience eating a piece of cake.
Computers can't experience eating a piece of pie.
Computers can't experience eating a cookie.
Computers can't experience eating a sandwich.
Zasady konkursu:
- Dane wyjściowe wierszy można zamówić w dowolny sposób, ale wszystkie 7968 z nich muszą zostać uwzględnione.
- Dane wyjściowe powinny być jako pojedynczy ciąg płaski, a nie jako lista ciągów.
- Twój program nie powinien przyjmować żadnych danych wejściowych ani pustych nieużywanych danych wejściowych.
- Twój program nie może pobierać danych z żadnego źródła online.
- Pojedyncza nowa linia jest opcjonalna.
To jest golf golfowy , więc wygrywa najkrótszy kod.
code-golf
string
kolmogorov-complexity
grammars
fireflame241
źródło
źródło
No computer {can} {action}.
powtarza się dwukrotnie iComputers {cannot_present}
tworzy frazy typu „Komputery nie są zdolne do”. Zamierzony?Odpowiedzi:
Zsh , 765 bajtów
To może być pierwsza rzecz, jaką kiedykolwiek napisałem w Zsh, ale ma niewiarygodnie wygodną funkcję konwertowania tablic na rozszerzenia nawiasów klamrowych (choć nie jest to tak wygodne, jak powinno być ... ). Uruchom z
zsh -P
(liczony jako +1 bajt), który się włączaRC_EXPAND_PARAM
.Wypróbuj online!
źródło
JavaScript (ES6),
12341091 bajtówTo niezła liczba bajtów na początek! Czas na golfa po tym ogromnym sznurku.
Mniej golfa:
W jaki sposób?
(To zdecydowanie jeden z moich ulubionych golfów wszechczasów!)
Gramatyka jest przechowywana w tablicy
G
, co daje wynik :F
jest funkcją, która dzieli ciąg przez separator|
i iteruje przez niego. Na razie w porządku.Co się dzieje z tą funkcją wewnętrzną?
Najpierw inicjalizujemy tablicę
A
. Następnie znajdujemy wszystkie cyfry w przekazanym ciągus
i budujemy podprogram: Za pomocą każdej cyfryn
generujemy pętlęfor
-of
, która iteruje wpisyG[n]
(zapisane jako właściwościF
, ponieważ funkcje w JavaScript są również obiektami). Pętle są następnie dodawane jeden po drugim.Na przykład wygenerowany podprogram dla uruchomień
s="1 2 3"
wygląda następująco:Przy każdej iteracji podprogram zastępuje każdą cyfrę
s
odpowiednią zmianą, zapisaną w pamięciF[n]
, a wynik jest przekazywany doA
. Podprogram jesteval
edytowany iA
domyślnie zwracany.Używając
F
, reszta programu po prostu buduje resztę gramatyki na podstawie reguł produkcji, które już istnieją; zamienniki są po prostu zdefiniowane za pomocą jednocyfrowego indeksu wG
.źródło
f
. Tak więcf=
należy dodać do liczby bajtów.F
zamiastf
.)PHP, 877 bajtów
Ach, było fajnie!
Jeśli możesz, możesz spróbować wykopać jeszcze jeden bajt.
bez golfa
wyjaśnienie
Wyjście można podzielić na 48 porcji po 166 linii każda. W każdej porcji każda linia zaczyna się od jednej z
Computers|A computer|No computer
następującą po niej jedną z 14 negatywnych (dlaComputers
iA computer
) lub 9 pozytywnych (dlaNo computer
) zdolności.Te fragmenty zakodowałem po 6 bitów każdy (3 różne podmioty -> dolne 2 bity; klawisze dodatnie i ujemne dzielą klucze -> górne 4 bity) i (prawdopodobnie oczywiste) dodałem 65, aby użyć wartości jako kodów ASCII.
W tych częściach jest 8 kombinacji czasowników / przymiotników dla 11 różnych potraw i 13 różnych kombinacji dla 6 różnych sztuk, zawsze w tej samej kolejności; więc można je po prostu zapętlić, używając klucza czasownika / przymiotnika do ustalenia, czy muszę wymienić listę potraw lub napojów w następnej pętli.
Pozostała jedna trudna część: niektóre czapki wymagają formy czasownika gerund; a niektóre czasowniki tracą
e
w transformacji. Indeks czapki informuje, czy konieczne jest czy nie.(a dzięki kolejności bitów w kodowaniu mogę po prostu użyć znaku ASCII do porównania).
Ale jak? Po pewnym czasie żonglowania wyrażeniami regularnymi, po prostu stawiam miejsce, w
1
któryme
należy go zastąpić,ing
i miejsce, w0
któryming
należy go dołączyć i pozwolić nastrtr
wykonanie zadania.Oto historia powyższej wersji bez golfisty. (Pakowane 1199 bajtów)
Gra w golfa składała się głównie z 3 kroków:
strtr
został rozszerzony na wszystko oprócz tematu w celu przeniesienia zmiennych dostrtr
.strtr
.19. słowo
tast
zastąpiono wielką literą, aby pozbyć się kilku znaków cudzysłowu.Zastanawiam się, co by się stało, gdybym również zakodował kombinacje czasownika / przymiotnika.
Może mógłbym pokonać Zsh; ale nie jestem pewien, czy zastanawiam się wystarczająco, by spróbować.
źródło
Siatkówka,
12491192 bajtówWyjście przekracza ograniczenia TIO. Chciałem użyć
%`
etapów, aby uniknąć wszystkich,$%'¶$%`
ale z jakiegoś powodu, który nie robi tego, co chcę. Edycja: Zapisano 57 bajtów dzięki @ fireflame241.źródło
ing
i „Ito” są używane kilkakrotnie. Każde wezwanie do1
,2
i5
poprzedzone jest spacją, po której następuje wstawienie. Podobnie6
i7
zawsze następuje kropka.3
wydaje się być używany tylko raz.Bubblegum , 23353 bajtów
Tak. Większość z nich nie zmieści się w odpowiedzi, więc ... Zarówno kod, jak i link TIO są w pastach.
Kod (zrzut heksowy kodu)
Łącze TIO (wyjście przekracza ograniczenia TIO)
źródło