Twoim celem jest napisanie programu, który wydrukuje następujący wiersz dokładnie tak, jak tutaj:
There was an old lady who swallowed a fly.
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a spider,
That wriggled and iggled and jiggled inside her.
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a bird,
How absurd to swallow a bird.
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a cat,
Imagine that to swallow a cat.
She swallowed the cat to catch the bird,
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a dog,
What a hog to swallow a dog.
She swallowed the dog to catch the cat,
She swallowed the cat to catch the bird,
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a horse,
She died of course.
Tekst musi wyglądać dokładnie tak, jak tutaj, aby wygrać jak najmniej znaków.
Edycja: Twój program może nie mieć dostępu do Internetu.
code-golf
kolmogorov-complexity
Ethan Roseman
źródło
źródło
Odpowiedzi:
Perl 5.10,
392384372235369 (ASCII) / 234 (Unicode)Najkrótsza wersja ASCII ma 369 znaków:
Zaczęło się od tego programu podstawowego:
Podstawową ideą jest utrzymanie końca rymu i początku następnego
$trail
, powiększanie go w miarę postępów. Jest to trywialne z powodu potrzeby specjalnego przypadku pierwszego użycia i próby ponownego użycia zmiennej nazwy zwierzęcia nawet w frazie specyficznej dla zwierząt. Dalsze optymalizacje obejmują:$_
w$buf
celu jeszcze większego skrócenia większości operacji zamiany (użycie@_
jest przyzwyczajeniem i nie wygrywa nic więcej niż jakakolwiek inna postać)$"
zmiennej)' swallow'
i'iggled '
\n
w literałach łańcuchowych zastąpione rzeczywistymi znakami nowej liniiWszystkie oprócz ostatniej optymalizacji dają:
Ponadto ten golf jest ofiarą nieokreślonego problemu z kodowaniem. Ponieważ - jak na razie - zlicza pojedyncze znaki zamiast bajtów w określonym kodowaniu, przed uruchomieniem dekodowanie źródła programu z UCS2 jest duże. Ostateczny wynik nie jest już bardzo czytelny, ale jest w porządku. (234 znaki, liczone jako różnica w porównaniu ze
perl -E''
zwykłymi) (musiałem dołączyć końcowy znak nowej linii z powrotem, aby był prawidłowy UCS2)Dobrze, że przed ucieczką się do Unicode było wiele do golfa, bo inaczej nie byłoby fajnie.
Edycja:
nie mogę znaleźć sposobu na skopiowanie / wklejenie wersji 234-znakowej do tej przeglądarki, więc zostawiam wersję 235-znakową. Naprawię ten wieczór, kiedy dostanę prawdziwy schowek z obsługą UTF8.Znalazł sposób. Quasi-dowód na ideone.źródło
Perl,
12094 znakówLiczba obejmuje połączenie z tłumaczem.
Powiedziałeś, żeby to odtworzyć dokładnie tak , jak tutaj;)
NB
To rozwiązanie spowodowało ograniczenie „bez Internetu”. Niech to będzie lekcja przyszłych specyfikacji pytań do golfa :)
źródło
LWP::Simple
jest częścią rdzenia Perla, przynajmniej w wersji v5.12.3.Python 3.x: 407 znaków
źródło
JavaScript (422)
Działa w wersjach interpretera SpiderMonkey używanych zarówno przez anarchię golfa, jak i ideone .
Nieco ładniej sformatowane:
źródło
0
lewę w celu zainicjowaniai
do0
zaledwie 2 bajtów. Zdobądź +1Vim, 373 naciśnięcia klawiszy
Śmieszne, jak wykładnicze jest to mieszanie.
źródło
C (gcc) ,
429424 bajtów-5 bajtów dzięki ceilingcat
Wypróbuj online!
źródło
Ruby, 436 znaków
źródło
Scala (
706619599550 znaków)Używanie mapy zamiast foreach pozwala wycisnąć więcej znaków ... W codegolf nie dbamy o wydajność, elegancję (niemodyfikowalność) czy logikę ...
źródło
atrament ,
370369354 bajtyWypróbuj online!
Wyjaśnienie
źródło
Haskell,
515498Wynik nie uwzględnia nowych linii i spacji dodanych do prezentacji.
Nie golfowany:
źródło
(++)
z krótszym identyfikatorem może być dobrym pomysłem.#
operatora lub czegoś podobnegoPython, 484
Ok, zrobiłem to, ale było dość nudno ...
Ostatnie zdanie jest zawsze z „fly”, więc niektóre znaki zostały usunięte ...
Wersja mniej golfowa:
źródło
C, dla zabawy (561 znaków)
Wynik nie uwzględnia nowych linii i spacji dodanych do prezentacji.
Dzięki JB za jego ulepszenia!
źródło
&
i[]
?&
s podczas używania wskaźników i to nie działało: P. JB, nie znam metody, która nie wymagałaby indeksowania (i używałaby jeszcze większej liczby znaków).C #, 556 znaków
źródło
Perl, 489 znaków
źródło
PHP , 344 bajty
Wypróbuj online!
PHP , 405 bajtów
Wypróbuj online!
źródło
Bubblegum, 255 bajtów
źródło
Python 2 ,
453 442 427387 bajtów£
był znak dwubajtowy !!swallow
skrótin
i"..."
usuniętyWypróbuj online!
źródło
~
zamiast£
(który ma dwa bajty, ponieważ nie jest ASCII).in
literałem ciągowym.Groovy, 475 bajtów
Nic zbyt interesującego, po prostu dużo interpolacji łańcuchów. Wskazówki dotyczące gry w golfa są mile widziane!
źródło
tcl, 451 bajtów
Dostępne do uruchomienia na: http://rextester.com/live/GXF89639 (10. próba)
źródło
Wolfram Language (Mathematica) , 295 bajtów
Wypróbuj online!
Rozwiązaniem jest 46-bajtowy dekompresor
BinaryDeserialize@ByteArray@ToCharacterCode@"..."
działający na 248-bajtowej tablicy podszywającej się pod ciąg ASCII. Przenoszenie tego ciągu między różnymi programami jest nieco trudne. Na przykład TIO wysadza to rozwiązanie do 416 bajtów przy użyciu kodowania UTF-8 zamiast utrzymywania łańcucha ASCII. Aby uzyskać minimalne rozwiązanie o długości 295 bajtów, zapisz tekst w zmiennejtext
i uruchomnastępnie uruchom wygenerowany plik w wierszu polecenia za pomocą
źródło
Znaki Java 758
Oto mój wysiłek Java (758 znaków)
źródło
Java, 655 bajtów
To jest wersja tej gry w golfa . Na drobiazgi zapisano ponad 100 bajtów.
źródło
public
można je usunąć;class M{public static void main
może byćinterface M{static void main
;String S=...,T=...,e=...;String[]a=...;String[]q=...;
może byćString S=...,T=...,e=...,a[]=...,q[]=...;
;for(int i=0;...)...for(int j=i
może byćfor(int i=0,j;...)...for(j=i
;for(j=i;j>0;j--)...a[j]...a[j-1]
może byćfor(j=i;j>0;)...a[j]...[a--j]
;static void p(String v){...}
może byćstatic<T>void p(T v){...}
( 623 bajtów ) Wypróbuj online.Węgiel drzewny ,
369366 bajtówWypróbuj online!
Link do pełnej wersji kodu.
źródło
PowerShell , 512 bajtów
Wypróbuj online!
Kredyt dla @Chirishman dla swojego postu .
źródło
Stax , 195 bajtów
Uruchom i debuguj
Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
źródło
PowerShell , 349 bajtów = Skrypt: 9 + Archiwum: 340
Wypróbuj online!
Skrypt PowerShell do utworzenia archiwum
t
(patrz TIO):źródło