Ile kodu mógłby golf golfowy, gdyby golf golfowy mógł kodować golfa?

55

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 woodbyłby wooduchwyt, gdyby wooduchwyt mógł się zacinać wood?

a drugie słowo cztery razy

  • Ile drewna byłoby drewno, chuck chuckgdyby drewno chuckmogło chuckdrewno?

reszta danych wyjściowych jest taka sama dla wszystkich danych wejściowych.

  • How muchdrewno would aw tartaku uchwyt if atartaku coulduchwyt drewna?

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 , 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…)

Greg Martin
źródło
2
Czy możemy założyć, że te dwa słowa będą dwoma odrębnymi słowami?
Jonathan Allan
4
... Chyba "", ""znaczy nie: p
Jonathan Allan
1
@Chronocidal Nie mogę się doczekać, aby Cię rozczarować ....
Greg Martin,
6
Dwa. Grałby w dwa kody.
user2357112,
1
Miałem nadzieję, że będzie to krótki program, który może wykonać proste transformacje w golfa na innym kodzie.
aschepler

Odpowiedzi:

40

Python 3 , 70 67 bajtów

"How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?".format

Wypró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:

lambda a,b:f"How much {a} would a {a+b} {b} if a {a+b} could {b} {a}?"
Przywróć Monikę
źródło
2
Może nie ma znaczenia, ale ciąg formatu automatycznego nie jest łatwo dostępny w wersjach Pythona starszych niż 3.6
M.Herzkamp
3
@ M.Herzkamp So?
ruohola,
16
@ruohola Myślę, że M.Herzkamp próbuje powiedzieć, że tytuł tej odpowiedzi powinien brzmieć „Python 3.6”, a nie „Python 3”.
Pan Lister,
8
Nawet krótszy i Python 2 kompatybilny (67 bajtów) "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.
Remco Haszing
1
Nie jestem ekspertem w Pythonie, ale ponieważ 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ć :)
Greg Martin,
25

T-SQL, 82 bajty

SELECT'How much '+w+' would a '+w+c+' '+c+' if a '+w+c+' could '+c+' '+w+'?'FROM t

Dane wejściowe są pobierane z wcześniej istniejącej tabeli z kolumnami i , zgodnie z naszymi zasadami IO .twc

Jeden bajt dłużej, ale z jakiegoś powodu nieco bardziej przyjemny:

SELECT REPLACE(REPLACE('How much 1 would a 12 2 if a 12 could 2 1?',1,w),2,c)FROM t

Ta wersja działa na podzbiorze danych wejściowych, które nie zawierają cyfry 2w pierwszym słowie .w

Ponieważ korzystam z SQL, mogę wstępnie załadować wszystkie przykłady do tabeli i uruchomić je wszystkie na raz:

wprowadź opis zdjęcia tutaj

BradC
źródło
2
+1000000 wirtualnych pociągów dla megatrainu
Greg Martin
5
Zakładam, że „w” i „c” oznaczają odpowiednio „drewno” i „uchwyt”: P
user253751
Można to zrobić w 67 bajtach w Oracle wywołanych z SQL * Plus (więc bez tabeli):select'How much &1 would a &1&2 &2 if a &1&2 could &2 &1?'from dual
Ben
16

Bash , 50 bajtów

echo How much $2 {would,$1\ if}\ a\ $2$1 could $@?

Wypróbuj online!

-5 bajtów dzięki pomocy z poniższych komentarzy.

spuck
źródło
-3 bajty
Grimmy,
1
-2 bajty więcej
Nahuel Fouilleul
1
Dodałeś niepotrzebny ukośnik podczas dostosowywania golfa Nahuela. Oto 53. (Choć tak naprawdę powinno to być 50, nic nie
stoi na przeszkodzie
2
@Grimy: Widzę komentarz na temat wyzwania z oryginalnego plakatu, który umożliwia odwrócenie parametrów. Aktualizuję odpowiedź na doskonałą odpowiedź 50 bajtów. Dzięki!
spuck
1
@roblogic: Odwrotne ukośniki cytują spacje, aby uniknąć podziału słów na spacje, a nawiasy klamrowe są dwukrotnie rozszerzane, aby utworzyć dwa słowa, jeden z każdym ciągiem znaków w nawiasach klamrowych oraz znakami, które śledzą nawiasy klamrowe (ale część słowa) są dodawane na końcu każdego ciągu. Dodanie nawiasów kwadratowych w celu wizualizacji podziału słowa: „[a {bc, de} f]” staje się dwoma słowami: „[abcf] [adef]”. Więc „[{zrobiłby, 1 $ \ jeśli} \ a \ 2 $ 1]]” staje się „[zrobiłby a 2 $ 1 $] [1 $ \ jeśli \ a \ 2 $ 1]”
spuck
15

Stax , 33 31 30 29 bajtów

-1 dzięki rekurencyjnemu !

¢èO∩sP↑å♥|1╧ì}ò♂xb■δå«█Γ╨╦►Q²

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:

X'?+;`IM'`x;+Y`~^$`,y`75\`x`Q)("`LJ
X                                      Set register X to the first word
                                       "wood"
 '?+                                   Append a question mark, popping from the input stack
                                       "wood?"
    ;                                  Peek from input stack and push to main stack
                                       "chuck" "wood?"
     `IM'`                             Literal "could"
                                       "could" "chuck" "wood?"
          x;+Y                         Peek register x. Peek input. Concatenate. Set register Y.
                                       "woodchuck" "could" "chuck" "wood?"
              et cetera, ad nauseam
                                  LJ   Listify the stack and join with spaces
                                       Implicit print

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.

27 26 bajtów z ograniczeniami na wejściu

å▓Zf╢7)╪♪²p╞8ó╪l▼]<¡REïSèΣ

Uruchom 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.

Khuldraeseth na'Barya
źródło
„Zauważysz, że umieściłem oba dane wejściowe w tym samym wierszu dla kilku przypadków testowych i że są one w odwrotnej kolejności. Jest to konieczne, aby wprowadzić puste ciągi lub ciągi spacji jako dane wejściowe.” Jeśli nie użyjesz separatora danych wejściowych, dane wejściowe będą niezakłócone , puste łańcuchy znaków i wszystkie inne. To sprawia, że ​​niewygodne jest wyświetlanie wielu przypadków testowych.
rekurencyjny
1
Ponadto wydaje się, że wiodące ,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.
rekurencyjny
13

JavaScript, 70 bajtów

Nudny!

a=>b=>`How much ${a} would a ${a+b} ${b} if a ${a+b} could ${b} ${a}?`

Wypróbuj online!

Nieco nudniej!

a=>"How much 0 would a 01 1 if a 01 could 1 0?".replace(/\d/g,x=>a[x])

Wypróbuj online!

Kudłaty
źródło
Czy możesz wypisać funkcję curry jak w pierwszym przykładzie?
Feathercrown
@Feathercrown, nie jestem wyprowadzanie funkcję, jestem nazywając obu (np 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.
Shaggy
Przez dane wyjściowe miałem na myśli, że kod zwraca funkcję podczas oceny; w podanym kodzie liczącym bajty nie ma wywołania. Sprawdzałem tylko, czy curry jest w porządku, ponieważ widziałem tylko funkcje niezwrócone.
Feathercrown
6

SOGL , 32 30 bajtów

^.](9V;⅜‛°@Ε¬tπs%.½Ω‘⁽ b,ŗ y,ŗ

Wypró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ępnie bsą zastępowane pierwszym wejściem i ydrugim.

dzaima
źródło
+2 punkty internetowe za jedno z najbardziej losowych ograniczeń, jakie pamiętam (w twoim krótszym rozwiązaniu)
Greg Martin
@GregMartin Nie tak losowo. Nie mówię w SOGL, ale skończyłem z tym samym ograniczeniem na 'n' podczas sekwencjonowania dwóch zamienników y -> woodi n -> chuck. Jedna dziesiąta punktu godności mówi, że tak też jest w tym przypadku.
Khuldraeseth na'Barya
Myślę, że głównym duchem tego pytania jest otwartość na dopuszczanie rozwiązań ... tylko na marginesie mogę się oprzeć, że niedopuszczenie faktycznej litery w danych wejściowych jest nieco szkicowe. W każdym razie: dlaczego bnie jest dozwolone na pierwszym wejściu, ale ejest poprawne na drugim wejściu?
Greg Martin
@GregMartin ups, chciałem powiedzieć, że 1. wejście nie może zawierać e, ponieważ w przeciwnym razie zostanie zastąpione 2. wejściem w 2. zamianie
dzaima
Czy nie jest możliwe, aby cel zastępczy nie był alfa, aby uniknąć konieczności zablokowania alfa na wejściu?
WGroleau,
5

R , 90 77 76 bajtów

-13 dzięki Sumner18
-1 dzięki Giuseppe

function(x,y,`[`=gsub)2[y,1[x,"How much 1 would a 12 2 if a 12 could 2 1?"]]

Wypróbuj online!

Robert S.
źródło
2
gsubZamiast tego można zrobić podwójny dla -13 bajtów. tio.run/…
Sumner18,
@ Sumner18 Thanks. Tak, gsubzdecydowanie ma to większy sens.
Robert S.
Jeśli masz ochotę użyć pryr, możesz obniżyć do 73 .
Khuldraeseth na'Barya
4
Powinieneś określić, że zakładasz, że dane wejściowe xnie zawierają znaku 2; w tym przypadku zawodzi ( TIO ).
Robin Ryder
4

PHP , 72 bajty

[,$a,$b]=$argv;echo"How much $a would a $a$b $b if a $a$b could $b $a?";

Wypróbuj online!

Lub:

PHP , 72 bajty

How much <?=![,$a,$b]=$argv,"$a would a $a$b $b if a $a$b could $b $a?";

Wypróbuj online!

Wejście z wiersza poleceń, wyjście do STDOUT.

640 KB
źródło
4

JavaScript (V8) , 72 bajty

(a,b)=>['How much',a,'would a',c=a+b,b,'if a',c,'could',b,a+'?'].join` `

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.

IronFlare
źródło
Ale jeden duży ciąg szablonów ma 1 znak krótszy: Wypróbuj online! .
manatwork
@manatwork Próbowałem tego, ale przez pomyłkę dodałem dodatkowe miejsce: P Dzięki!
IronFlare
4

ZX Spectrum Basic, 87 bajtów

Tylko dla kompletności, prosta implementacja:

INPUT a$,b$: PRINT "How much ";a$;" would a ";a$;b$;"  ";b$;" if a ";a$;b$;" could ";b$;" ";a$;"?"

Użycie IFsłowa kluczowego (1 bajt) powoduje zmniejszenie o 3 bajty, ale łamie warunek „ta sama wielkość liter”:

INPUT a$,b$: PRINT "How much ";a$;" would a ";a$;b$;"  ";b$;" IF a ";a$;b$;" could ";b$;" ";a$;"?"
Radovan Garabík
źródło
Fajnie jest też pokazywać nieco podstępne wersje :)
Greg Martin
2
Och, Speccy! Być znowu młodym ...
chx
4

Rdza , 75 bajtów

|a,b|print!("How much {} would a {0}{} {1} if a {0}{1} could {1} {0}?",a,b)

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ńcucha format!()i zwracanie go.

ruohola
źródło
4

05AB1E , 37 35 31 30 bajtów

“Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“T$ú‡

-5 bajtów dzięki @Grimy .

Pobiera listę dwóch elementów: woodjako pierwszej wartości i chuckjako drugiej.

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“
      # Push dictionary string "How much1 would a ÿ0 if a ÿ could01?",
      # where the `ÿ` are automatically filled with the (implicit) input-list,
      # implicitly joined together to a single string
      #  i.e. ["wood","chuck"] → "How much1 would a woodchuck0 if a woodchuck could01?"
T     # Push 10
 $    # Push the input-list and 1
  ù   # Pad the strings in the input-list with this 1 amount of leading spaces
      #  ["wood","chuck"] → [" wood"," chuck"]
     # Transliterate the 10 ([1,0]) to these strings in the sentence
      #  → "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
      # (after which the result is output implicitly)

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?".

Kevin Cruijssen
źródło
1
31
Grimmy,
1
30
Grimmy,
1
@Grimy Very nice! Naprawdę lubię oba. Dzięki genialnemu pomysłowi wykorzystania tego w ten sposób, aby zaoszczędzić dodatkowy bajt.
Kevin Cruijssen
1
Alternatywny 30 . Nie znajduję żadnych 29, więc na razie twoje wyjaśnienie jest bezpieczne;)
Grimmy,
4

Applesoft BASIC, 77 76 bajtów

1INPUTA$,B$:?"How much "A$" would a "A$B$" "B$" if a "A$B$" could "B$" "A$"?

Powyższe może nie wyglądać jak BASIC, ale Applesoft pozwala na kilka skrótów podczas korzystania z PRINTinstrukcji:

  • Użycie ?zamiast PRINTprzy wprowadzaniu wyciągu
  • Znaki konkatenacji (albo ;lub +) można pominąć
  • Jeśli instrukcja kończy się cytowanym ciągiem, ostateczny cytat można pominąć Dzięki, Mark !

Numer linii jest wymagany, w przeciwnym razie INPUTinstrukcja spowoduje?ILLEGAL DIRECT ERROR

zawietrzny
źródło
1
Czy możesz pominąć końcowy znak cudzysłowu? Applesoft Basic jest pochodną Microsoft Basic, a wiele wersji Microsoft Basic pozwala pominąć cudzysłów zamykający na łańcuchu, jeśli kończy on linię.
Mark
@ Mark, dzięki za wskazówkę!
Lee
4

33 , 78 bajtów

"How much "p1btpt" would a "ptpz2btp" "ptbtp" if a "ptpbtp" could "ptbtp" "ptp

Wypróbuj online!

Pobiera dane wejściowe jako argumenty wiersza polecenia.

Bonus: 91 bajtów

"How much "p1bztp" would a "p1bztp2bztp" "p2bztp" if a "p1bztp2bztp" could "p2bztp" "p1bztp

Wypróbuj online!

Daje wyjście przypominające się, gdy dane wejściowe 1bztpi2bztp

TheOnlyMrCat
źródło
Powiedziałem to na głos, teraz muszę wyczyścić cały śluz z mojego monitora.
BradC
3

Kotlin , 59 bajtów

{i,j->"How much $i would a $i$j $j if a $i$j could $j $i?"}

Wypróbuj online!

Quinn
źródło
Kotlin to świetna zabawa!
M.Herzkamp
1
@ M.Herzkamp to na pewno jest!
Quinn,
3

PowerShell , 65 bajtów

param($a,$b)"How much $a would a $a$b $b if a $a$b could $b $a`?"

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

Veskah
źródło
3

VBA, 107 bajtów

Function q(a,b)
b=b&" "
c="ould "
q="How much "&a&" w"&c&"a "&a&b&b&"if a "&a&b&"c"&c&b&a&"?"
End Function

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.

użytkownik3819867
źródło
Możesz zmniejszyć to do 75 bajtów, konwertując na funkcję bezpośredniego okna jako 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ę.
Taylor Scott,
Następnie możesz wziąć dane wejściowe o nazwie zakres, [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ź.
user3819867
1
Jest to niestety sprzeczne z definicją STDIN i STDOUT dla Excel VBA - możesz użyć dowolnego nienazwanego zakresu w arkuszu aktywnym, ale społeczność nie może używać nazwanych zakresów podczas wcześniejszej decyzji
Taylor Scott
3

C # , 165 148 133 bajtów

class P{static void Main(string[]a){System.Console.Write("How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?\n",a[0],a[1]);}}

Podzię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.

canttalkjustcode
źródło
Używając współczesnych C # 's' $ '( interpolowane ciągi ), możesz zapisać kilka bajtów, zastępując {0} {a [0]}, lub jeszcze lepiej, biorąc dwie zmienne zamiast tablicy, więc możesz po prostu użyć a i b. Aby nie ukraść pioruna, dodam, że dodam go jako inną wersję c #
Andrew Baumher
Wow nie wiedział o tym! Dzięki za informacje
canttalkjustcode
2
@canttalkjustcode ogólnie, funkcje są akceptowane. Dla C #, obejmuje lambdy: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]}?")
JAD
Jest to prawda, ale tylko w języku C # Interactive można używać takich wyrażeń lambda. W pełnym C # potrzebujesz pełnego oświadczenia lamda. Proste stwierdzenie nieważności byłoby szybsze, jak pokazano w poniższym fragmencie:
canttalkjustcode
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]}?");
canttalkjustcode
3

Haskell , 76 bajtów

a?b=a++" "++b
a!b="How much"?a?"would a"?a++b?b?"if a"?a++b?"could"?b?a++"?"

Wypróbuj online!

Pierwsza próba, więc mam nadzieję, że nie złamałem żadnych zasad.

David
źródło
2

Galaretka , 39 bajtów

ŒPKŒP“µkþ¿µ‘ị“þ>Æƈ)taJṖ;ạʂ\4S%dñl»Ỵ¤ż”?

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)

⁽4ṀDBịs€2ṭ€€⁶“þ>Æƈ)taJṖ;ạʂ\4S%dñl»Ỵ¤ż”?

Wypróbuj online!

Jonathan Allan
źródło
2

Python 3 , 80 bajtów

lambda n:'How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format(*n)

Wypróbuj online!

w Rzymie użyj formatu str.

Edytowane przy użyciu sztuczki kałamarnicy.

Tryer
źródło
3
Czy to nie byłoby nieprawidłowe? To urywek - nie jest funkcją ani programem, prawda?
Przywróć Monikę
Tak; potrzebuje lambda n:przed i może upuścić print().
wizzwizz4,
Należy zmienić swój kod do drukowania How much ...zamiast how much ....
ruohola,
3
Wystarczy zdefiniować funkcję anonimową jako 'how much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format.
xnor
@xnor Nadal całkiem nowy, jak wyglądałoby wtedy TIO? Pomyślałbym, że bez jakiegoś sposobu na przekazanie argumentu można by go uruchomić.
Tryer
2

C # (interaktywny kompilator Visual C #) , 66 65 bajtów

x=>y=>$"How much {x} would a {x+y} {y} if a {x+y} could {y} {x}?"

Wypró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

Andrew Baumher
źródło
Zmień sygnaturę funkcji z Func<string,string,string>na Func<string,Func<string,string>>i zmień (x,y)nax=>y=>
Embodiment of Ignorance
Wydaje się to tanią taktyką, ale meta dyskusja mówi, że to uczciwa gra, więc równie dobrze. Dzięki.
Andrew Baumher,
2

R , 95 bajtów

function(a,b)cat("How much ",a," would a ",a,b," ",b," if a ",a,b," could ",b," ",a,"?",sep='')

Wypróbuj online!

minhsphuc12
źródło
2
Witamy na stronie! Twój link TIO wydaje się prowadzić do niewłaściwego kodu? Ponadto, o ile wiem, założyłeś, że dane wejściowe znajdują się w zmiennych ai b, co jest niedozwolone zgodnie z naszymi domyślnymi regułami wejścia / wyjścia
caird coinheringaahing
Dzięki @cairdcoinheringaahing za komentarz. Przepisałem go w formie funkcjonalnej, mam nadzieję, że teraz jest zgodny z zasadami.
minhsphuc12
1

APL (Dyalog Unicode) , 56 59 bajtów

{∊'How much '' would a '⍺⍵' '' if a '⍺⍵' could '' ''?'}

Wypró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.

J. Sallé
źródło
Czy liczyłeś greckie litery jako jeden bajt?
Tomáš Zato,
@ TomášZato tak. Glify APL Dyalog mogą być reprezentowane w jednym bajcie za pomocą Arkusza znaków jednobajtowych Adáma, który jest tutaj standardem dla odpowiedzi APL.
J. Sallé,
1

Galaretka , 41 37 bajtów

⁾be,y“Ø[gœıJ9°m.OṚuHlh3Ƥ⁾$ɲ0øḲʂṇHẎṆȥ»

Wypró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 Fna 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.

Nick Kennedy
źródło
@JonathanAllan ma rację! Dzięki.
Nick Kennedy,
1

Dalej (gforth) , 116 bajtów

: x 2over type ; : y 2dup type ; : f ." How much "x ."  would a "x y ."  "y ."  if a "x y ."  could "y ."  "x ." ?";

Wypróbuj online!

Objaśnienie kodu

\ x = output the first word
: x               \ start a new word definition
  2over type      \ copy the "first" word to the top of the stack and print it
;                 \ end word definition

\ y = output the second word
: y               \ start a new word definition
  2dup type       \ copy the "second" word to the top of the stack and print it
;                 \ end word definition

: f               \ start a new word definition
  ." How much "x  \ print "How much " followed by the first word   
  ."  would a "x  \ print " would a " followed by the first word
  y ."  if a "x   \ print the second word followed by " if a " and then the first word
  y ."  could "y  \ print the second word, then " could " then the second word again
  ."  "x ." ?"    \ print a space followed by the first word, followed by "?"
;                 \ end word definition
reffu
źródło
1

Lua , 82 bajty

a,b=...print((('How much x would a xy y if a xy could y x?'):gsub('.',{x=a,y=b})))

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.

val
źródło
1

Bash , 58 bajtów

echo "How much $1 could a $1$2 $2 if a $1$2 could $2 $1?"

Pobiera dane wejściowe jako argumenty wiersza poleceń. Wypróbuj online!

gadzooks02
źródło