Wyzwanie to jest inspirowane serią książek dla małych dzieci autorstwa Fiony Watt i Rachel Wells, które ostatnio bawię się z córką.
W każdej książce mysz (zilustrowana, ale nie część tekstu) narzeka, że seria 5 rzeczy tego samego typu nie jest jego rzeczą. Następnie tworzy kopię zapasową, deklarując, że jakiś element rzeczy nie ma oczekiwanej właściwości.
Po szóstym pytaniu mysz znajduje swoją rzecz i jest zadowolona, ponieważ ma oczekiwaną właściwość.
Oto tekst typowego przykładu:
That's not my bunny, its tail is too fluffy.
That's not my bunny, its paws are too rough.
That's not my bunny, its tail is too woolly.
That's not my bunny, its eyes are too shiny.
That's not my bunny, its nose is too wrinkled.
That's my bunny! Its ears are so soft.
Teraz większość programistów zdaje sobie sprawę, że jest to bardzo algorytmiczna metoda tworzenia tekstu. Ponieważ jest to tak przejrzysty proces, powinniśmy być w stanie to odtworzyć, pisząc trochę kodu.
Zacznijmy od trzech kolekcji słów:
things = ["dinosaur", "lamb", "princess", "reindeer", "train"]
parts = ["back", "bells", "body", "bows", "crown", "dress", "ears",
"engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
"nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
"tiara", "wheels", "windows"]
properties = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
"hairy", "red", "rough", "rusty", "shiny", "silky", "slippery",
"soft", "sparkly", "squashy", "thick", "velvety", "woolly"]
- Najpierw decydujemy, jakie rzeczy będziemy opisywać.
- Następnie 5 razy wygenerujemy wiersz „To nie jest moja [rzecz], jej [część] też jest [właściwość].
- Na koniec generujemy wiersz „To moja [rzecz]! Jego [część] jest tak [własność]!
Wyzwanie
- Wygeneruj tekst opowiadania „To nie jest moja ...”.
- Nie może konsekwentnie odtwarzać tego samego tekstu.
- To jest golf golfowy, więc spróbuj zrobić to w jak najmniejszej liczbie bajtów.
- Użyj dowolnego języka.
- Białe spacje nie mają znaczenia, ale między wierszami musi znajdować się znak nowej linii.
- Listy słów źródłowych nie są częścią twojej odpowiedzi (w TIO można je dodać do nagłówka).
- Możesz zmienić nazwy list słów źródłowych.
- Dane wyjściowe można wyprowadzić do terminala lub wygenerować tekst w obiekcie.
- Podaj link do tłumacza online.
- Ignoruj liczbę mnogą, „jego rogi są” jest w porządku.
- To nie musi mieć sensu. Jeśli lejek twojej księżniczki jest zbyt puszysty, po prostu to powiedz.
Przykładowe dane wyjściowe:
That's not my train, its engine is too rusty.
That's not my train, its hooves is too thick.
That's not my train, its sash is too fuzzy.
That's not my train, its tail is too velvety.
That's not my train, its horns is too glittery.
That's my train! Its hooves is so hairy.
Miłej gry w golfa!
Odpowiedzi:
05AB1E , 63 bajty
Wypróbuj online.
Wersja 68 bajtów, która nie wyświetla zduplikowanych części ani właściwości:
Wypróbuj online.
Oba programy zakładają, że lista rzeczy jest pierwszym wejściem, a lista zawierająca listę części i listę właściwości to drugie wejście.
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (rozdział Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego
“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“
jest"that's my ÿ! its ÿ is so ÿ."
i“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“
jest"that's not my ÿ, its ÿ is too ÿ."
.źródło
Python 3 , 149 bajtów
Wypróbuj online!
-9 bajtów dzięki movatica
źródło
Węgiel drzewny , 72 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Oczekuje, że tablice rzeczy, części i właściwości znajdą się w zmiennych
θ
,η
iζ
które można najłatwiej uporządkować, podając je w danych wejściowych, a nie w nagłówku. Wyjaśnienie:Wybierz przypadkową rzecz.
Wydrukuj pięć zdań negatywnych.
Wydrukuj zdanie pozytywne.
źródło
Japt v2.0a0
-R
, 73 bajtyTrwa trzy wykazy jak
U
,V
iW
. To i tak są domyślne zmienne wejściowe, więc po prostu umieść trzy listy w sekcji wprowadzania.Spróbuj
źródło
PowerShell , 147 bajtów
Ten program główny nie będzie powtarzał żadnej części ani właściwości w serii i ma rozsądną randomizację.
Wypróbuj online!
Pisanie
get-random
tyle razy kosztuje tyle znaków! Jednak jeśli nie chcesz, aby części i właściwości były powtarzane, nie widzę sposobu, aby zmniejszyć to w PowerShellu. Chyba że przeniesiesz pierwsze 3 rury potoku na koniec 3 linii przypisania w nagłówku. Mieć coś takiegoAle wydaje się, że to oszustwo i wciąż nie bije odpowiedzi Neila.
Edycja: Dzięki za wskazówki Matt i dzięki AdmBorkBork za ich rozwinięcie, usunięcie 3 zestawów
get-
tekstu zmniejszyło go do 159 bajtów, a potem trochę więcej golfa z Adm sprowadziło go do 147. Kod, o którym myślałem, który pozwolił na duplikaty i sprzeczne stwierdzenia składały się z 144 znaków po zastosowaniu tych samych wskazówek golfowych.Wypróbuj online!
Jednak nie tylko ma tendencję do powtarzania tego samego wiele razy, ale prawie wymaga, aby twoje dane wejściowe były tej samej liczby elementów. Uważam, że używany generator pseudolosowych liczb jest silnie zależny od zegara, a szybkie powtarzane wywołania często mogą dać ten sam wynik. Następnie ma warunek, że używa całej listy tylko wtedy, gdy wszystkie listy są tej samej długości. Przy zapisaniu tylko 3 ~ 5 znaków i tak wielu zastrzeżeniach, wolę kod na początku tego postu.
źródło
Get-
zGet-Random
. Jest to domyślny czasownik testowany podczas oceny poleceń.Galaretka , 72 bajty
Wypróbuj online!
źródło
JavaScript, 129
wejście to trzy tablice, zwraca ciąg znaków
źródło
Rubin , 128 bajtów
Wypróbuj online!
źródło
C # ,
204203 bajtówTo moja pierwsza odpowiedź na tej stronie, więc mam nadzieję, że zadziała. Potrzebuje również tych trzech rzeczy, ale według pytania te się nie liczą:
Wypróbuj online!
Jeden bajt mniej dzięki Sok.
źródło
\r
nie jest wymagany, co pozwoli Ci zaoszczędzić 2 bajty.APL (Dyalog Unicode) , 117 bajtów SBCS
Wypróbuj online!
?N
generuje losowy indeks wśród pierwszych N indeksów.M?N
generuje M losowych wskaźników (bez zamiany) wśród pierwszych N wskaźników.,
to konkatenacjat←T⊃⍨
… Wybiera losową rzecz i wzywa jąt
do ponownego użycia w ostatnim wierszu.∘,¨
łączy ciąg po lewej stronie z każdym ciągiem po prawej stronie.,¨
łączy każdy ciąg po lewej stronie z każdym ciągiem po prawej stronie.↑
zmienia listę ciągów znaków na macierz znaków, dzięki czemu drukuje się poprawnie.źródło
Pyth ,
887876 bajtówWypróbuj online!
Powyższy kod wymaga następującego nagłówka:
Jest mały problem z używaniem funkcji „Nagłówek” w TIO z Pyth, ponieważ wygląda na to, że TIO łączy bloki kodu na nowej linii, a nowe linie są znaczące w Pyth. Oto link do tego samego kodu za pomocą bloku „Nagłówek” z niepotrzebną linią na wyjściu.
Edycja: Przepisz do golfa 10 bajtów, poprzednia wersja:
J+" my "ONV5%"That's not%s, its %s is too %s."[JOGOH;%"That's%s! Its %s is so %s."[JOGOH
źródło
Perl 5.10, 127 bajtów
Uruchom z
perl -M5.010 -f filename.pl
.źródło
JavaScript ES6, 149 (+15?) Bajtów
źródło
Plik wsadowy,
434424 + 7 bajtówWykonane przez
cmd/q/c
.Kod nie jest liczony
Kod został policzony
Przejdę przez niektóre wyzwania, z którymi musisz się zmierzyć, i wyjaśnię / uzasadnię to, co zrobiłem, aby inni mogli je ulepszyć.
Wybierz losowy element z tablicy
Zrobiłem to, generując losową liczbę pomiędzy
1
in
gdzien
jest ilość elementów w tej tablicy. Następnie użyłem tej losowej liczby jako tokena do przechwycenia w każdejfor
pętli (tokens=%r%
). Ponieważ zrobiłem to w ten sposób, nie mogłem już zagnieżdżać tychfor
pętli, ponieważtokens=!r!
nie działało to dla mnie (z opóźnionym rozszerzaniem). Pozwoliłoby to zaoszczędzić sporo bajtów, ponieważ wyeliminowałoby to konieczność zapisywania tokenów jako zmiennych (set x=%%x
).Generowanie liczb losowych
m
to moje makro generowania liczb losowych. Robiąc to w ten sposób oszczędzasz 32 bajty, robiąc to jakset/ar=%random%%%n+1
każda linia. Można semi-oszukiwać i podjąć decyzję, że znakiy
iz
mają być ten sam element:To, przy zachowaniu pewnej losowości, wykluczałoby ostatnie 6 elementów
c
. Pozwoliłoby to zaoszczędzić minimum 20 bajtów, ale nie sądzę, że jest to zgodne z wymaganiami operacji.Teoretyczne udoskonalenia
Spędziłem sporo czasu próbując sprawić, by ten „pseudo-kod” działał, jednocześnie oszczędzając bajty:
Niestety konfiguracja tego zajmuje zbyt wiele bajtów, aby była opłacalna (trzeba zaimplementować w <144 bajtach), ale nie mogę się oprzeć wrażeniu, że dodanie 4 ostatnich wierszy kodu jest zbyteczne i zbędne.
źródło
The lists of source words are not part of your answer (in TIO they can be added to the header).
set a=%~1
itp.atrament , 119 bajtów
Z listami zdefiniowanymi jako
Wypróbuj online!
W zależności od tego, co liczy się jako lista, istnieją inne podejścia. Jeśli lista może być funkcją, która losowo zwraca element listy, następujące podejście ma tylko 91 bajtów:
(z „listami” zdefiniowanymi w następujący sposób)
Wypróbuj online!
Istnieje również następujące podejście.
Wypróbuj online!
To rozwiązanie ma 389 bajtów, ale jeśli literały losowe (których w tym scenariuszu tak naprawdę nie można przenieść) liczą się jako definicje list i można je wykluczyć z liczby bajtów, spada to do 80 bajtów.
źródło
Bash + awk, 209 bajtów
Wypróbuj online!
Akceptuje dane wejściowe jako
things parts properties
każdy z nich jest plikiem zawierającym jeden element w wierszu żądanego typu.Jest to podejście skoncentrowane na plikach. Może później wypróbować podejście zorientowane na tablicę, aby sprawdzić, czy można je ulepszyć.
źródło
Python 3, 130 bajtów
Dosłownie biorąc twoje wymagania i przyjmując zwrot karetki każdy:
źródło