Sporo osób tutaj jest prawdopodobnie zapalonymi czytelnikami XKCD. Myślę, że rzuciłbym wam wyzwanie, abyście zrobili coś, co Megan może łatwo zrobić: stworzyć skrypt, który generuje tysiące uspokajających przypowieści o tym, czego komputery nigdy nie mogą zrobić.
Twój skrypt
- Można pisać w dowolnym języku
- Musi być golfem
- Należy wziąć pod uwagę (on
stdin
lub odpowiednik w języku użytkownika) liczbę przypowieści, które wypluje (można założyć, że nie przekroczy onaMAX_INT
lub nie jest równoważna). - Wygeneruje szereg losowo generowanych przypowieści.
Przypowieści są następujące
- Zaczynać z
'Computers will never '
- Następnie jeden z 16 unikalnych angielskich czasowników, które możesz dowolnie wybrać, aby zoptymalizować swój program, ale musi on zawierać
code-golf
iunderstand
. - Następnie jeden z 16 unikalnych angielskich rzeczowników, które ponownie możesz swobodnie wybrać, aby zoptymalizować swój program, ale muszą zawierać
a salad
ian octopus
. - Następnie jedna z 16 unikalnych angielskich klauzul, które możesz dowolnie wybrać w celu optymalizacji swojego programu, ale musi ona zawierać
for fun
iafter lunch
. - Kończy się znakiem nowej linii (
\n
lub równoważnym)
Na przykład, jeśli dane wejściowe to 2
, prawidłowe dane wyjściowe to
Computers will never code-golf a salad for lunch
Computers will never hug a tree in vain
Rozmiar programu jest liczony w bajtach, a nie w znakach (więc bez bełkotu w Unicode). Standardowe luki są niedozwolone.
To moje pierwsze wyzwanie, więc jeśli powinienem dokonać pewnych oczywistych zmian, proszę o komentarz.
Edycja: Rozważam odjęcie wielkości słownika od liczby bajtów, aby zachęcić do „kompresji” słownika. Zobaczę na podstawie przyszłych odpowiedzi, czy jest to wykonalne zdalnie; jeśli tak, możesz liczyć na bonus.
Odpowiedzi:
CJam,
238232 (lub 209) bajtówWykorzystuje to wiele czasowników / rzeczowników / klauzul z już opublikowanych odpowiedzi, ale niektóre są również nowe. Mam podstawową konwersję znaków, aby zgolić dodatkowe bajty.
Bazowy ciąg znaków może być golfowany o 24 bajty więcej (aby uzyskać rozwiązanie 209 bajtów ; pamiętaj, że musisz wziąć pod uwagę liczbę znaków zamiast liczby bajtów, ponieważ wszystkie znaki mają kod ASCII mniejszy niż 255, ale strona nadal uważa, że niektóre mają Unicode ), ale chciałem, aby ciąg składał się tylko z drukowalnych znaków ASCII.
Dla porównania, oto wersja 209 bajtów:
Pobiera liczbę wierszy do wydrukowania ze STDIN, takich jak:
Wydajność:
Wypróbuj online tutaj
źródło
Oto nieco inne podejście:
Python,
368 308297 bajtówEDYCJA, tym razem grałem w golfa. Ogolono 60 znaków.
Oto sztuczka golfa, z której jestem najbardziej dumny:
Nawet nie wiedziałem, że Python może to zrobić! Oto prostsze wyjaśnienie:
przypisuje aib do 0 i 1, a następnie do 1 i 2, a następnie do 2 i 3.
Wykorzystuje bibliotekę lingwistyczną NodeBox do generowania listy czasowników / rzeczowników / klauzul, a następnie losowo wybiera z nich.
Ta biblioteka nie jest świetna do generowania losowych słów (stąd 368 bajtów), ale fajną rzeczą w tym podejściu jest to, że masz dość przypadkowe uspokajające przypowieści. Oto co mam na myśli.
Ale hej, nie sądzę, aby ktokolwiek inny program wygenerował powiedzenie: „Komputery nigdy nie oczernią miłośnika zwierząt dla popiołu z ciasta”.
Oto wersja bez golfa (574 bajty):
I na koniec, ale zdecydowanie nie mniej ważne, oto niektóre z moich ulubionych uspokajających przypowieści, które, jak sądzę, staną się bardzo popularne w ciągu następnych 10-15 lat.
i mój osobisty faworyt:
źródło
from random import choice as C
może byćfrom random import*;C=choice
for i in ' '*(something)
dzięki czemu możesz w trywialny sposób zaoszczędzić dwa bajty od usuwania odstępu międzyin
i' '
JavaScript ES6, 331
336bajtówPokaż fragment kodu
Wybrałem słowa, które działają zarówno jako czasowniki, jak i rzeczowniki, aby skrócić listę, ale daj mi znać, jeśli nie jest to dozwolone. Wypróbuj to powyżej, używając fragmentów stosu (tam sformatowany kod do użycia ES5) lub na stronie http://jsfiddle.net/5eq4knp3/2/ . Oto przykładowy wynik:
źródło
s
aby przeskoczyć obok innych części mowy na liście. Te dwa tyldy są bitowymi operatorami NOT i działają po prostu jako krótszy sposóbMath.floor()
.r=s=>12
jest taki sam jakfunction r(s){return 12}
tylko krótszy. Zobacz także dokumenty w MDN .~~
jest swego rodzajuMath.floor
(ale zachowuje się inaczej w przypadku liczb ujemnych) i=>
jest definicją funkcji w stylu ES6 z ograniczeniemthis
.Python -
390 385383Losowy przykładowy wynik:
źródło
Perl - 366
Oto test:
źródło
CJam,
353317301 bajtówUżywam listy słów Falko, dla uczciwości, tak więc jedyną różnicą w grze w golfa są języki, a nie treść (mogę zmienić listę słów, jeśli ludzie również zaczną grać w golfa).
źródło
NetLogo, 396
Użyłem również listy słów Falko, z dwoma wyjątkami (które nie zmieniają długości programu).
W zależności od tego, jak zdefiniujesz „program”, możesz usunąć pierwsze pięć i trzy ostatnie znaki, co daje wynik 388.
źródło