Ostrzeżenie: to wyzwanie zawiera łagodne spoilery do gry The Secret of Monkey Island.
Pod koniec gry prowadzony jest przez katakumby magicznie zachowana głowa nawigatora:
Potrzebujesz jego gałki ocznej, ale Głowa niechętnie ci go daje. Jednym ze sposobów na to jest po prostu żebranie:
Guybrush: Czy mogę prosić o ten naszyjnik?
Głowa: Nie, ale dziękuję za tak grzeczne pytanie.
Guybrush: Oh daj spokój, proszę?
Głowa: Możesz błagać, ile chcesz, ale nie możesz tego mieć.
Guybrush: Całkiem proszę?
Głowa: Możesz błagać, ile chcesz, ale nie możesz tego mieć.
Guybrush: Całkiem PROSTY proszę?
Głowa: Możesz błagać, ile chcesz, ale nie możesz tego mieć.
Guybrush: Całkiem proszę z cukrem na wierzchu?
Głowa: Och, w porządku, ty duże dziecko. Możesz to mieć. Hej, co dobrego jest naszyjnikiem, jeśli nie masz ramion?
Wyzwanie
Napisz pełny program, który wydrukuje powyższe okno dialogowe. Problem polega na tym, że za każdym razem, gdy program jest wywoływany, powinien wypisywać tylko dwie linie (jedną prośbę Guybrusha i odpowiedź Głowy). Np. Jeśli twoje zgłoszenie jest napisane w Pythonie, użycie powinno wyglądać następująco:
$> python please.py
Guybrush: May I please have that necklace?
Head: No, but thanks for asking so politely.
$> python please.py
Guybrush: Oh come on, pleeeeease?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty PRETTY please?
Head: You can beg all you want, but you can't have it.
$> python please.py
Guybrush: Pretty please with sugar on top?
Head: Oh, all right, you big baby. You can have it. Hey, what good's a necklace if you don't have shoulders?
Wywołanie programu więcej niż 5 razy może spowodować niezdefiniowane zachowanie, więc możesz albo zapętlić, drukować dwa ostatnie wiersze, albo program może nawet zostać zepsuty po piątym wywołaniu.
Możesz pisać do pliku w katalogu roboczym lub modyfikować kod źródłowy samego programu, aby śledzić wywołania. W tym drugim przypadku program nie może zależeć od własnej nazwy pliku. (W pierwszym przypadku możesz założyć, że nazwa pliku twojego programu nie będzie kolidować z nazwami plików, od których zależy Twój program).
Nie wolno zakładać środowiska podobnego do REPL lub przechowywania danych w pamięci RAM między wywołaniami. Np. Jeśli odpowiadasz w Mathematica, musisz założyć, że opuściłem jądro między wywołaniami.
To jest kod golfowy, wygrywa najkrótsza odpowiedź (w bajtach). Jeśli twój program zależy od dodatkowych plików, które istnieją przed pierwszym wywołaniem , dodaj jego nazwę i zawartość do liczby bajtów.
źródło
node please.js
uzyskując 5 różnych wyników.Odpowiedzi:
Python, 224 + 97 + 1 = 322 znaków
Najprostsze rozwiązanie, które nas wszystkich uruchomi. Dzięki gnibbler za pomoc w goleniu 18 bajtów!
Wymaga, aby plik
z
był obecny w tym samym katalogu (+1 dla nazwy pliku, +224 dla rozmiaru pliku):Możesz wygenerować
z
za pomocą:Wynik:
źródło
line1\nline2|line3\nline4|line5\nline6|line7\nline8|line9\nline10
Teraz możesz podzielić|
i po prostuprint D[n]
Common Lisp (SBCL): 659 znaków
Objaśnienia
format
znil
).To nie będzie najkrótsze zgłoszenie, ale pomyślałem, że to miłe podejście do problemu.
Inwokacja Firt
Kolejne inwokacje
źródło
C # - 593 + 1 + 1 znaków (595)
Edycje: Zaktualizowano z sugestiami Martina i różnymi innymi optymalizacjami
Pierwszy +1 to nazwa pliku. Drugi +1 to zawartość tego pliku. Bez usunięcia wszystkich spacji i podziałów linii, aby można je było przeczytać:
Wyjaśnienie
Polega na pliku tekstowym o nazwie „x” znajdującym się w katalogu. Powinien początkowo zawierać zero i służy do przechowywania postępów.
Program pobiera odpowiedni element z tablicy ciągów zgodnie z postępem i zapisuje postęp na końcu. Niektóre linie zostały ponownie użyte w celu skrócenia długości, stąd logika wyboru indeksu do wyboru
h+b[(a+5)/6*2+1]
odpowiedzi.Wynik
Mój pierwszy golf golfowy, prawdopodobnie nie najkrótszy z możliwych w C #, ale hej - Monkey Island, nie mogłem się oprzeć!
Kod pozbawiony:
źródło
a<1?1:a<8?3:9
jeśli C # obsługuje prawdziwe liczby całkowite, to równieża?a<8?3:9:1
. Ale prawdopodobnie możesz nawet użyć podziału na liczby całkowite i zrobić(a+5)/6*2
i przesunąć ostatni ciąg głowy, aby zastąpić pierwszy pusty (indeks 5). I spróbuj takich rzeczy jakusing s=System.String;
. (Aha, być może uda ci się pominąć przestrzeń nazw, a nawet użyć przestrzeni nazw,System
aby uniknąćSystem
użycia).JS,
488473Odświeżenie 5 razy strony zawierającej ten kod powoduje wyświetlenie 5 różnych okien dialogowych.
Próbny:
http://c99.nl/f/212197.html
źródło
Perl - 356 bajtów
Podejście samomodyfikujące, z podmianami wspólnych ciągów.
Przykładowe użycie:
źródło