Napisz funkcję lub program, który pobiera dwa słowa jako warianty wejściowe i wyjściowe popularnej angielskiej łamigłówki „Ile drewna wyrzuciłby uchwyt, gdyby ten mógł wyrzucić drewno?”.
Wyjście użyje pierwszego słowa cztery razy
- Ile
wood
byłbywood
uchwyt, gdybywood
uchwyt mógł się zacinaćwood
?
a drugie słowo cztery razy
- Ile drewna byłoby drewno,
chuck
chuck
gdyby drewnochuck
mogłochuck
drewno?
reszta danych wyjściowych jest taka sama dla wszystkich danych wejściowych.
How much
drewnowould a
w tartakuuchwyt
if a
tartakucould
uchwytdrewna
?
Dane wejściowe i wyjściowe mogą być w dowolnym formacie, który Twój język racjonalnie rozpoznaje jako zajmujący się ciągami tekstu. Dane wyjściowe muszą mieć dokładnie wskazany format, w tym wielkie litery, spacje i ich brak oraz końcowy znak zapytania. Opcjonalny znak nowej linii jest dopuszczalny.
Idealnie twój kod będzie obsługiwał dane wejściowe zawierające dowolne drukowalne znaki ASCII. Dozwolone jest jednak ograniczenie danych wejściowych do uzasadnionych podzbiorów drukowalnego ASCII; po prostu zaznacz to w swojej odpowiedzi. Obsługa większych zestawów znaków jest oczywiście w porządku.
Przykładowe pary przepływów międzygałęziowych:
"wood", "chuck"
"How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
"ground", "hog"
"How much ground would a groundhog hog if a groundhog could hog ground?"
"bar", "keep"
"How much bar would a barkeep keep if a barkeep could keep bar?"
"money", "belt"
"How much money would a moneybelt belt if a moneybelt could belt money?"
"rain", "fall"
"How much rain would a rainfall fall if a rainfall could fall rain?"
"hair", "cut"
"How much hair would a haircut cut if a haircut could cut hair?"
"green", "house"
"How much green would a greenhouse house if a greenhouse could house green?"
"jabber", "wock"
"How much jabber would a jabberwock wock if a jabberwock could wock jabber?"
"pine", "apple"
"How much pine would a pineapple apple if a pineapple could apple pine?"
"Rob", "Lowe"
"How much Rob would a RobLowe Lowe if a RobLowe could Lowe Rob?"
"code", "golf"
"How much code would a codegolf golf if a codegolf could golf code?"
"fish", ""
"How much fish would a fish if a fish could fish?"
"", "fish"
"How much would a fish fish if a fish could fish ?"
"", ""
"How much would a if a could ?"
" ", " "
"How much would a if a could ?"
"would a", "how much"
"How much would a would a would ahow much how much if a would ahow much could how much would a?"
To jest golf golfowy , więc wygrywa najmniej bajtów. Odpowiedzi są mile widziane we wszystkich językach, nawet jeśli jakiś inny język może to zrobić w mniejszej liczbie bajtów.
(Zainspirowany tym memem , który używa jednej pary danych wejściowych lepiej niż ten sztywny wzór…)
"", ""
znaczy nie: pOdpowiedzi:
Python 3 ,
7067 bajtówWypróbuj online!
To znaczy, jeśli but pasuje ...
Dzięki manatwork za złapanie literówki
Dzięki Remco Haszing za doskonały pomysł na 3 bajty
Uciekam od założenia, że nadal byłoby to prawidłowe oświadczenie (ponieważ człowieku, to zbyt fajne, żeby nie próbować). Gdyby OP mógł wyjaśnić, czy jest to dopuszczalne (ponieważ nie napisałem funkcji jako takiej), byłoby to mile widziane.
Aktualizacja: Otrzymano błogosławieństwo, wszystko jest dobrze :)
Poprzednia wersja:
źródło
"How much {0} would a {0}{1} {1} if a {1}{0} could {1} {0}?".format
. Zwraca to funkcję związaną z niesformatowanym ciągiem.print("How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?".format("wood","chuck"))
generuje pożądany wynik, nie widzę powodu, aby go nie akceptować :)T-SQL, 82 bajty
Dane wejściowe są pobierane z wcześniej istniejącej tabeli z kolumnami i , zgodnie z naszymi zasadami IO .t w do
Jeden bajt dłużej, ale z jakiegoś powodu nieco bardziej przyjemny:
Ta wersja działa na podzbiorze danych wejściowych, które nie zawierają cyfryw
2
w pierwszym słowie .Ponieważ korzystam z SQL, mogę wstępnie załadować wszystkie przykłady do tabeli i uruchomić je wszystkie na raz:
źródło
select'How much &1 would a &1&2 &2 if a &1&2 could &2 &1?'from dual
Bash , 50 bajtów
Wypróbuj online!
-5 bajtów dzięki pomocy z poniższych komentarzy.
źródło
Stax ,
33313029 bajtów-1 dzięki rekurencyjnemu !
Uruchom i debuguj na staxlang.xyz!
Wciśnij każdy komponent do stosu w odwrotnej kolejności, a następnie połącz wszystkie spacjami.
Rozpakowane (35 bajtów) i objaśnienie:
Wszystko pomiędzy `` jest skompresowanym dosłownym ciągiem. Ten przecinek jest niezbędny. Ostatnim razem, gdy czytam ze stosu wejściowego, muszę wyskoczyć, a nie zajrzeć, aby uniknąć dodatkowego „chuck” na końcu mojego wyjścia.
Zauważysz, że umieściłem oba wejścia w tym samym wierszu dla kilku przypadków testowych i że są w odwrotnej kolejności. Jest to konieczne, aby przyjmować puste ciągi lub ciągi znaków jako dane wejściowe.
2726 bajtów z ograniczeniami na wejściuUruchom i debuguj na staxlang.xyz!
Podobnie jak SOGL @ dzaima , to się nie powiedzie, jeśli pierwsze wejście zawiera małą literę „y”. Przesuwa ciąg „Ile b by by y, gdyby by by yb?”, A następnie wykonuje parę zamienników.
źródło
,
rozwiązanie z 31 bajtów może zostać usunięte. Następujące dane+
domyślnie wyskakują ze stosu wejściowego, więc zachowanie jest identyczne.JavaScript, 70 bajtów
Nudny!
Wypróbuj online!
Nieco nudniej!
Wypróbuj online!
źródło
f(a)(b)
), jak można zobaczyć w Tio. Ale tak, nasze konsensuzy pozwalające na korzystanie z funkcji curry i myślę, że jesteśmy bliscy konsensusu w sprawie umożliwienia rzeczywistego zwrócenia funkcji.SOGL ,
3230 bajtówWypróbuj tutaj!
Pierwsze wejście nie może zawierać litery
y
, która wydaje się pozostawić rozsądny podzbiór ASCII (i Unicode).½ouiīZģ9Ο|ΧyΚ⅞ō÷Jeq(‚7‘
to skompresowany ciąg znaków"how much b would a by y if a by could y b?"
(wybrane znaki, aby wszystkie wymagane słowa znajdowały się w 512 pierwszych słowach słownika, które lepiej się kompresują), a następnieb
są zastępowane pierwszym wejściem iy
drugim.źródło
y -> wood
in -> chuck
. Jedna dziesiąta punktu godności mówi, że tak też jest w tym przypadku.b
nie jest dozwolone na pierwszym wejściu, alee
jest poprawne na drugim wejściu?e
, ponieważ w przeciwnym razie zostanie zastąpione 2. wejściem w 2. zamianieR ,
907776 bajtów-13 dzięki Sumner18
-1 dzięki Giuseppe
Wypróbuj online!
źródło
gsub
Zamiast tego można zrobić podwójny dla -13 bajtów. tio.run/…gsub
zdecydowanie ma to większy sens.pryr
, możesz obniżyć do 73 .x
nie zawierają znaku2
; w tym przypadku zawodzi ( TIO ).PHP , 72 bajty
Wypróbuj online!
Lub:
PHP , 72 bajty
Wypróbuj online!
Wejście z wiersza poleceń, wyjście do
STDOUT
.źródło
JavaScript (V8) , 72 bajty
Wypróbuj online!
Przypisanie zmiennej w rzeczywistości pozwala zaoszczędzić 0 bajtów, ale pomyślałem, że zatrzymam to, aby uczynić to nieco wyjątkowym.
źródło
ZX Spectrum Basic, 87 bajtów
Tylko dla kompletności, prosta implementacja:
Użycie
IF
słowa kluczowego (1 bajt) powoduje zmniejszenie o 3 bajty, ale łamie warunek „ta sama wielkość liter”:źródło
Rdza , 75 bajtów
Wypróbuj online!
Za pomocą tej sztuczki , która pozwala pominąć indeks formatowania raz na element do sformatowania.
Również używanie
print!()
, ponieważ jest o jeden bajt krótszy niż budowanie łańcuchaformat!()
i zwracanie go.źródło
05AB1E ,
37353130 bajtów-5 bajtów dzięki @Grimy .
Pobiera listę dwóch elementów:
wood
jako pierwszej wartości ichuck
jako drugiej.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego tak
“Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“
jest"How much1 would a ÿ0 if a ÿ could01?"
.źródło
$ù
ten sposób, aby zaoszczędzić dodatkowy bajt.Applesoft BASIC,
7776 bajtówPowyższe może nie wyglądać jak BASIC, ale Applesoft pozwala na kilka skrótów podczas korzystania z
PRINT
instrukcji:?
zamiastPRINT
przy wprowadzaniu wyciągu;
lub+
) można pominąćNumer linii jest wymagany, w przeciwnym razie
INPUT
instrukcja spowoduje?ILLEGAL DIRECT ERROR
źródło
33 , 78 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako argumenty wiersza polecenia.
Bonus: 91 bajtów
Wypróbuj online!
Daje wyjście przypominające się, gdy dane wejściowe
1bztp
i2bztp
źródło
Kotlin , 59 bajtów
Wypróbuj online!
źródło
PowerShell , 65 bajtów
Wypróbuj online!
Jedyną rzeczą wartą uwagi jest to, że musisz uciec od znaku zapytania, ponieważ mogą to być prawidłowe części identyfikatora PowerShell
źródło
VBA, 107 bajtów
Powinien również działać jako VBScript, użyłem dwóch skrótów: „ould” powtarza się, a „chuck” nigdy nie pojawia się bez dodatkowej spacji.
źródło
a=[A1]:b=[B1&" "]:o="ould ":?"How much "a" w"o"a "a b b"if a "a b"c"o b a"?
. Pobiera dane wejściowe z[A1]
i[B1]
. Mamy wskazówki dotyczące gry w golfa w VBA, które możesz wziąć pod uwagę.[A]
a[B]
jako dane wejściowe zmniejszające go do 73. Nie do końca rozumiem, jak przebiega twój, możesz dodać własną odpowiedź.C # ,
165148133 bajtówPodziękowania dla Andrew Baumhera za opowiedzenie mi o interpolowanych ciągach !!
EDYCJA: Dodano teraz pełną klasę
EDYCJA: Podziękowania dla Kennetha K. za udzielenie mi kilku wskazówek, jak ją
skrócić EDYCJA: Jeszcze raz dziękuję Andrew za informację, że użycie interpolowanego ciągu znaków jest w rzeczywistości dłuższe w tym scenariuszu.
źródło
a=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?")
void M(string[]a){System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?");}
System.Func<string>M=a=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?");
System.Action<string>M=a=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?");
Haskell , 76 bajtów
Wypróbuj online!
Pierwsza próba, więc mam nadzieję, że nie złamałem żadnych zasad.
źródło
Galaretka , 39 bajtów
Pełny program akceptujący listę dwóch ciągów.
Wypróbuj online!
... Lub (także pełny program akceptujący listę dwóch ciągów)
Wypróbuj online!
źródło
Python 3 , 80 bajtów
Wypróbuj online!
w Rzymie użyj formatu str.
Edytowane przy użyciu sztuczki kałamarnicy.
źródło
lambda n:
przed i może upuścićprint()
.How much ...
zamiasthow much ...
.'how much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format
.C # (interaktywny kompilator Visual C #) ,
6665 bajtówWypróbuj online!
tak samo jak wszyscy inni, z wyjątkiem C #. -1 bajt przy użyciu strategii curry a => b => c zamiast (a, b) => c
źródło
Func<string,string,string>
naFunc<string,Func<string,string>>
i zmień(x,y)
nax=>y=>
R , 95 bajtów
Wypróbuj online!
źródło
a
ib
, co jest niedozwolone zgodnie z naszymi domyślnymi regułami wejścia / wyjściastringr
oszczędza ci kilka.APL (Dyalog Unicode) ,
5659 bajtówWypróbuj online!
Dość proste dfn. Zapisuje bajt, wycinając,
∊
jeśli wolno nam zwrócić tablicę ciągów zamiast jednego ciągu.Dodano 3 bajty, ponieważ zapomniałem dodać znak zapytania.
źródło
Wolfram Language (Mathematica) , 68 bajtów
Wypróbuj online!
źródło
Galaretka ,
4137 bajtówWypróbuj online!
Pełny program przyjmujący parę argumentów jako argument i drukujący przetworzony ciąg. Link monadyczny można utworzyć, dodając
F
na końcu znak „(dzięki @JonathanAllan za zwrócenie na to uwagi).Teraz zacząłem używać „b” i „e” jako symboli zastępczych, zainspirowanych odpowiedzią SOGL @ dzaima, więc pamiętajcie o tym również! Oznacza to, że pierwsze słowo nie może zawierać litery e.
źródło
Japt
-S
,4439 bajtówSpróbuj
źródło
Dalej (gforth) , 116 bajtów
Wypróbuj online!
Objaśnienie kodu
źródło
Lua , 82 bajty
Wypróbuj online!
Pełny program, weź dane jako argumenty.
Nic specjalnego. Mam nadzieję, że istnieje krótsza wersja, ale nie ma oczywistych sposobów na skrócenie tego na pierwszy rzut oka.
źródło
Bash , 58 bajtów
Pobiera dane wejściowe jako argumenty wiersza poleceń. Wypróbuj online!
źródło