Inspiracja . Wysłano za zgodą .
Wydrukuj jeden z możliwych „faktów” kalendarza XKCD:
Możesz pobrać nieprzetworzony tekst i strukturę z mojej referencyjnej implementacji APL lub z transkrypcji wyjaśnienia XKCD (w tym tekst tytułowy tuż pod ilustracją).
Zasady
W każdym węźle decyzyjnym musi istnieć równa (pseudo-) losowa szansa każdego wyboru.
Możesz używać wszystkich wielkich liter.
Musisz wygenerować trzy zdania; pytanie, przyczynę i tekst tytułu.
Trzy zdania powinna być zakończona ?
, .
i .
odpowiednio, i oddzielone od siebie przez jednego miejsca.
Jedyną dodatkową spacją, którą możesz uwzględnić, jest jedna spacja końcowa i / lub podział linii.
Przykłady
Did you know that the Latest Sunset drifts out of sync with the Zodiac because of time zone legislation in Indiana? Apparently it's getting worse and no one knows why. While it may seem like trivia, it has to be corrected for by GPS satellites.
Did you know that Leap Year happens later every year because of precession of the equator? Apparently scientists are really worried. While it may seem like trivia, it is taken advantage of by high-speed traders.
Did you know that Easter drifts out of sync with the atomic clock in Colorado because of a decree by the pope in the 1500s? Apparently scientists are really worried. While it may seem like trivia, it causes huge headaches for software developers.
Did you know that shark week happens at the wrong time every year because of an arbitrary decision by Benjamin Franklin? Apparently it causes a predictable increase in car accidents.
Ja ... mam na myśli ... ja ... Okej.Odpowiedzi:
Befunge-93,
19591930 bajtówWypróbuj online!
Wyjaśnienie
W pierwszych trzech wierszach zaczynamy od zbudowania pewnego rodzaju tabeli stanów na stosie, reprezentującej wykres wszystkich możliwych zdań. Te wpisy stosu są pogrupowane w pary, więc najpierw jest element ciąg, a następnie skok lub gałąź. W razie potrzeby wykres jest wypełniony pustymi łańcuchami i skokami o zerowej długości, aby spełnić to wymaganie.
Nasza główna pętla zaczyna się od wyskakiwania ze stosu liczby reprezentującej element łańcuchowy. Liczba ta jest interpretowana jako przesunięcie w tabeli łańcuchów w dolnej części źródła. Tabela ciągów jest zasadniczo rodzajem listy połączonej, owiniętej wieloma wierszami, aby pasowała do ograniczonej przestrzeni pamięci Befunge.
Po wyprowadzeniu łańcucha następnym elementem na stosie jest skok lub gałąź. Jeśli liczba jest mniejsza niż 32, jest to skok, który interpretujemy, upuszczając tyle par przedmiotów ze stosu. Jeśli liczba wynosi 32 lub więcej, jest to gałąź i używamy wartości (minus 32), aby wyszukać szczegóły gałęzi z tabeli w ostatnim wierszu źródła.
Wpisy w tabeli rozgałęzień składają się z liczby, a następnie z listy przesunięć. Gdy wiemy już, której gałęzi użyć, po prostu generujemy liczbę losową, modulo liczbę gałęzi, aby wyszukać odpowiednie przesunięcie. To przesunięcie jest następnie interpretowane jako skok, upuszczając wymaganą liczbę przedmiotów ze stosu.
Powtarzamy ten proces, wyprowadzając ciąg, a następnie wykonując skok lub rozgałęzienie, aż zabraknie wpisów w stosie. W tym momencie po prostu wypisujemy „”. zaznacz koniec ostatniego zdania, a następnie wyjdź.
źródło
JavaScript (ES6),
1698151015061501 bajtówDzięki 12Me21 za naprawienie błędu w kodzie, który dodał 2 bajty
f=
idocument.write(f())
nie są częścią liczby bajtówźródło
Python 2 , 1297 bajtów
-419 bajtów dzięki ovs.
Wypróbuj online!
Rzeczywisty kod:
To było męczące. Nawet nie grałem w podstawową grę w golfa. Ktoś proszę napisać scenariusz, aby zagrać w golfa.
źródło
Węgiel drzewny , 806 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
R ,
190317511743 bajtówProste rozwiązanie brutalnej siły. To może być jakiś sposób na grę w golfa.
Wypróbuj online!
źródło
JavaScript (ES6), 1275 bajtów
gdzie
...
reprezentuje wynik uruchomionyatob()
na ten ciąg i zastępowanie\
z\\
,`
z\`
, z 0x00\0
i 0x0D z\r
:Wypróbuj tutaj, bez
btoa
:źródło
APL (Dyalog) , 1302 bajtów
Wypróbuj online!
Adám pomógł w tym ... a potem wezwał mnie do ukończenia go. : P
-11 dzięki Adámowi (używając jego nowego narzędzia SBCS mogę nadużywać kodowania bez dodatkowych kosztów).
źródło
Haskell ,
19491938 bajtówWypróbuj online!(Ma dodatkowe 2 bajty dla
f=
)Przeważnie napisałem to tylko po to, abym mógł stworzyć strukturę danych. Można to zdecydowanie poprawić, ale jestem zmęczony i tak i tak muszę wkrótce wyjść. Myślę, że wielkie litery są w większości poprawne, ale przekonwertuję to wszystko na wielkie, jeśli jest źle. To nie zmieni liczby bajtów ani nic, ponieważ nie zrobiłem nic dziwnego z danymi łańcucha.
Podstawową ideą jest połączona lista drzew, w której każdy węzeł jest pusty (
E
), znak interpunkcyjny (P
) lub ciąg znaków z dziećmi. Wszystkie węzły opróczE
węzłów mają za sobą węzeł „śledzący”.EDYCJA: właśnie zauważyłem błąd w pisowni (napisałem „nikt nie wie dlaczego” zamiast „nikt nie wie dlaczego”), więc musiałem dodać bajt, aby to naprawić, ale znalazłem też kod, który można wyciąć
źródło
APL (Dyalog Unicode) , 1593 bajtów
C←?∘≢⊃⊢
S←C'|'∘≠⊆⊢
∊'Did you know that '(C('the '(S'Fall|Spring')' Equinox ')('the '(S'Winter |Summer ')(S'Solstice |Olympics '))('the '(S'Earliest |Latest ')(S'Sunrise |Sunset '))('Leap ',S'Day |Year ')'Easter '('the '(S'Harvest|Super|Blood')' Moon ')'Toyota Truck Month '('Daylight Savings Time '~C's∘')'Shark Week ')(C('happens '(S'earlier|later|at the wrong time')' every year ')('drifts out of sync with the '(S'Sun |Moon |Zodiac |atomic clock in Colorado|',' Calendar ',⍨S'Gregorian|Mayan|Lunar|iPhone'))('might '(S'not happen|happen twice')' this year '))'because of '(C('time zone legislation in ',S'Indiana|Arizona|Russia')'a decree by the pope in the 1500s'((S'precession|libration|nutation|libation|eccentricity|obliquity')' of the '(S'Moon|Sun|Earth''s axis|equator|prime meridian|',' line',⍨S'international date|mason-dixon'))'magnetic field reversal'('an arbitrary decision by ',S'Benjamin Franklin|Isaac Newton|FDR'))'? Apparently '(C'it causes a predictable increase in car accidents'('it was even more extreme during the ',S'Bronze Age|Ice Age|Cretaceous|1990s')'that''s why we have leap seconds'('there''s a proposal to fix it, but it ',S'will never happen|actually makes things worse|is stalled in congress|might be unconstitutional')'scientists are really worried' 'it''s getting worse and no one knows why')'. While it may seem like trivia, it '(S'causes huge headaches for software developers|is taken advantage of by high-speed traders|triggered the 2003 Northeast Blackout|has to be corrected for by GPS satellites|is now recognized as a major cause of World War I')'.'
Wypróbuj online!
Definiuje dwie funkcje pomocnicze, a następnie używa ich w jednym gigantycznym wyrażeniu:
C←
C ( C Hoose) jest?∘≢
liczbą losową do liczby elementów w argumencie⊃
wybiera⊢
z argumentówS←
S (dla S plit i S elect) toC
wybierany spośród argumentów partycjonowanych'|'∘≠
gdzie nie ma potoku⊆
⊢
∊
ε nlist (spłaszczyć)C
wybiera z listy łańcuchów iS
wybiera z tych podciągów o|
ograniczonym ciągiem, a te są po prostu wykorzystywane w połączeniu skonstruować „fakt”.źródło