Сколько кода будет играть в гольф кодегольф, если код гольф может кодировать гольф?


55

Напишите функцию или программу, которая принимает два слова в качестве входных данных и выводит варианты популярного английского скороговорки «Сколько бы дерева сгрызло сурок, если сурок мог бы соскоблить дерево?».

Выход будет использовать первое слово четыре раза

  • Сколько woodбы woodзабил патрон, если бы woodпатрон мог забить wood?

а второе слово четыре раза

  • Сколько дерева будет дерево, chuck chuckесли дерево chuckможет chuckдерево?

с остальными выходными данными одинаковыми для любых входов.

  • How muchдерево would aсурка Патрон if aсурка couldПатрон дерево?

Ввод и вывод могут быть в любом формате, который ваш язык разумно распознает как имеющий дело со строками текста. Выходные данные должны быть точно в указанном формате, включая заглавные буквы, пробелы и их отсутствие, а также заключительный знак вопроса. Дополнительный трейлинг-перевод строки является приемлемым.

В идеале ваш код будет обрабатывать ввод, содержащий любые печатные символы ASCII. Тем не менее, разрешено ограничивать ввод разумными подмножествами печатного ASCII; просто укажите это в своем ответе. Обработка больших наборов символов, конечно, хорошо.

Пример пар ввода-вывода:

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

Это , поэтому побеждает меньше байтов. Ответы приветствуются на всех языках, даже если какой-либо другой язык может сделать это за меньшее количество байтов.

(Вдохновлен этим мемом , который использует одну входную пару лучше, чем этот жесткий шаблон ....)


2
Можем ли мы предположить, что два слова будут двумя разными словами?
Джонатан Аллан

4
... Я думаю, что "", ""означает нет: р
Джонатан Аллан

1
@ Chronocidal Я не могу видеть тебя разочарованным ....
Грег Мартин

6
Два. Было бы в гольф два кода.
user2357112

1
О, я надеялся, что речь пойдет о короткой программе, которая может выполнить несколько простых преобразований в другом коде.
Ашеплер

Ответы:


40

Python 3 , 70 67 байт

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

Попробуйте онлайн!

Я имею в виду, если обувь подходит ..

Спасибо manatwork за ловлю опечатки

Спасибо Remco Haszing за отличную идею - 3 байта

Я убегаю от предположения, что это все еще будет действительным представлением (потому что, мужик, это слишком круто, чтобы не пытаться). Если бы OP мог уточнить, является ли это приемлемым (потому что я не написал функцию как таковую), это будет оценено.

Обновление: благословение получено, все хорошо :)


Предыдущая версия:

lambda a,b:f"How much {a} would a {a+b} {b} if a {a+b} could {b} {a}?"

2
Возможно, не имеет значения, но строка автоматического форматирования недоступна в версиях Python до 3.6
M.Herzkamp

3
@ M.Herzkamp Так?
Руохола

16
@ruohola Я думаю, что M.Herzkamp пытается сказать, что заголовок этого ответа должен быть "Python 3.6", а не "Python 3".
мистер Листер

8
Даже короче и Python 2 совместимы (67 байт): "How much {0} would a {0}{1} {1} if a {1}{0} could {1} {0}?".format. Это возвращает функцию, привязанную к неформатированной строке.
Ремко Хасинг

1
Я не эксперт по Python, но, поскольку print("How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?".format("wood","chuck"))генерирует желаемый результат, я не вижу причин не принимать его :)
Грег Мартин

25

T-SQL, 82 байта

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

Входные данные берутся из уже существующей таблицы с колоннами и , в соответствии с нашими правилами ввода - вывода .twc

Один байт длиннее, но почему-то чуть приятнее:

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

Эта версия работает с подмножеством входных данных, которые не включают цифры 2в первом слове .w

Поскольку я в SQL, я могу предварительно загрузить все примеры в таблицу и запустить их все сразу:

введите описание изображения здесь


2
+1000000 виртуальных поездов для мегатренажа
Грег Мартин

5
Я предполагаю, что «w» и «c» означают «wood» и «chuck» соответственно: P
user253751

Это может быть сделано в 67 байтов в Oracle, как вызывается из SQL * Plus (поэтому нет таблицы):select'How much &1 would a &1&2 &2 if a &1&2 could &2 &1?'from dual
Бен

16

Баш , 50 байт

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

Попробуйте онлайн!

-5 байтов из-за помощи из комментариев ниже.




1
Вы добавили ненужную обратную косую черту при адаптации гольфа Науэля. Вот 53. (Хотя на самом деле это должно быть 50, ничто не мешает вам принять первое слово за 2 доллара, а второе слово за 1 доллар.)
Grimmy

2
@Grimy: я вижу комментарий на вызов от оригинального плаката, позволяющий изменить параметры. Я обновляю ответ на отличный ответ 50 байтов. Спасибо!
Спак

1
@roblogic: обратные косые черты заключают в кавычки пробелы, чтобы избежать разбиения слов по пробелам, а фигурные скобки расширяются в два раза, образуя два слова, по одному с каждой строкой внутри фигурных скобок и символами, которые следуют за фигурными скобками (но являются частью слова) добавляются в конец каждой строки. Добавление квадратных скобок для визуализации разбиения слова: «[a {bc, de} f]» становится двумя словами: «[abcf] [adef]». Таким образом, «[{бы, $ 1 \ if} \ a \ $ 2 $ 1]» становится «[будет \ a \ $ 2 $ 1] [$ 1 \ if \ a \ $ 2 $ 1]»
спак

15

Stax , 33 31 30 29 байт

-1 спасибо за рекурсив !

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

Запустите и отладьте его на staxlang.xyz!

Вставьте каждый компонент в стек в обратном порядке, затем объедините все с пробелами.

Распаковано (35 байт) и объяснение:

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

Все между `` является сжатым строковым литералом. Эта запятая имеет жизненно важное значение. В последний раз, когда я читаю из входного стека, я должен выскочить, а не заглянуть, чтобы избежать дополнительного «броска» на конец моего вывода.

Вы заметите, что я поместил оба входа в одну строку для нескольких тестовых случаев, и что они в обратном порядке. Это необходимо для того, чтобы в качестве входных данных принимались пустые строки или строки пробелов.

27 26 байт с ограничениями на ввод

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

Запустите и отладьте его на staxlang.xyz!

Как и в случае с SOGL @ dzaima , произойдет сбой, если первый вход содержит строчную букву 'y'. Выдвигает строку «Сколько b будет a by y, если a by может yb?», Затем делает пару замен.


«Вы заметите, что я поместил оба входа в одну строку для нескольких тестовых случаев, и что они в обратном порядке. Это необходимо для того, чтобы в качестве входных данных принимались пустые строки или строки пробелов». Если вы не используете входной разделитель, вход будет бесперебойным , пустые строки и все. Просто несколько неудобно показывать несколько тестов.
рекурсивный

1
Кроме того, кажется, что ведущее ,в вашем 31-байтовом решении может быть удалено. Следующее +неявно выскакивает из стека ввода, поэтому поведение идентично.
рекурсивный

13

JavaScript, 70 байт

Скучно!

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

Попробуйте онлайн!

Мягко менее скучно!

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

Попробуйте онлайн!


Разрешено ли выводить функцию карри, как в первом примере?
Feathercrown

@Feathercrown, я не выводя функцию, я вызов как (например, f(a)(b)) , как вы можете видеть в TIO. Но да, наше согласие разрешить каррирование функций, и я думаю, что мы близки к консенсусу о том, что функция действительно может быть возвращена.
лохматый

Под выводом я имел в виду, что код возвращает функцию при оценке; в данном коде нет вызова, который считается байтами. Я просто проверял, чтобы с карри было все в порядке, так как я только когда-либо видел возвращенные функции без кеширования.
Feathercrown

6

СОГЛ , 32 30 байт

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

Попробуй это здесь!

Первый ввод не может содержать букву y, которая оставляет разумное подмножество ASCII (и unicode) оставленным.

½ouiīZģ9Ο|ΧyΚ⅞ō÷Jeq(‚7‘представляет собой сжатую строку "how much b would a by y if a by could y b?"(символы, выбранные таким образом, что все необходимые слова находятся в верхних 512 словах словаря, которые сжимаются лучше), затем bзаменяется 1-м входом и y2-м.


+2 интернет-балла за одно из самых случайных ограничений, которые я могу вспомнить (в вашем кратком решении)
Грег Мартин

@GregMartin Не , что случайным образом . Я не говорю на SOGL, но в итоге у меня появилось такое же ограничение на 'n' при определении последовательности двух замен y -> woodи n -> chuck. Десятая часть Очка Достоинства говорит, что и здесь тоже так.
Халдрасет на'Барья

Я думаю, что основной дух этого вопроса заключается в том, чтобы открыто говорить о разрешении решений ... только в качестве отступления я могу предположить, что недопущение фактической буквы на входе немного отрывочно. Во всяком случае: почему bне допускается в первом входе, но eнормально во втором входе?
Грег Мартин

@GregMartin Ой, я хотел сказать, что 1-й вход не может содержать e, так как в противном случае он будет заменен на 2-й вход во 2-й замене
dzaima

Не возможно ли, чтобы цель замещения была не альфа, чтобы избежать запрета альфы на входе?
WGroleau

5

R , 90 77 76 байт

-13 благодаря Sumner18
-1 благодаря Джузеппе

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

Попробуйте онлайн!


2
gsubВместо этого можно сделать дубль для -13 байтов. tio.run/…
Sumner18

@ Sumner18 Спасибо. Да, gsubопределенно имеет больше смысла.
Роберт С.

Если вы хотите использовать pryr, вы можете уменьшить его до 73 .
Хулдрасет на'Барья

4
Вы должны указать, что вы предполагаете, что ввод xне включает символ 2; это терпит неудачу в этом случае ( TIO ).
Робин Райдер



4

JavaScript (V8) , 72 байта

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

Попробуйте онлайн!

Присвоение переменной на самом деле экономит 0 байт, но я решил, что оставлю это просто, чтобы сделать это немного уникальным.


Но одна большая строка шаблона на 1 символ короче: попробуйте онлайн! ,
Манатворк

@manatwork Я попробовал это, но по ошибке добавил лишний пробел: P Спасибо!
IronFlare

4

ZX Spectrum Basic, 87 байт

Просто для полноты, простой реализации:

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

Использование IFключевого слова (1 байт) сокращает его на 3 байта, но нарушает условие «одинаковой капитализации»:

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

Приятно показывать и слегка обманывающие версии :)
Грег Мартин

2
О, Спекки! Чтобы снова быть молодым ...
CHX

4

Ржавчина , 75 байт

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

Попробуйте онлайн!

Используя этот трюк , который позволяет пропустить индекс форматирования один раз для каждого элемента для форматирования.

Также используется print!(), потому что он на один байт короче, чем построение строки format!()и ее возврат.


4

05AB1E , 37 35 31 30 байт

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

-5 байтов благодаря @Grimy .

Принимает список из двух элементов: в woodкачестве первого значения и в chuckкачестве второго.

Попробуйте онлайн или проверьте все контрольные примеры .

Объяснение:

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)

Посмотрите эту подсказку 05AB1E (раздел Как пользоваться словарем? ), Чтобы понять, почему “Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“это так "How much1 would a ÿ0 if a ÿ could01?".




1
@ Грими Очень мило! Мне действительно нравятся оба из них. Гениальная идея использовать подобное для сохранения дополнительного байта, спасибо.
Кевин Круйссен

1
Альтернатива 30 . Я не нахожу ни одного 29, поэтому ваше объяснение пока безопасно;)
Grimmy

4

Applesoft BASIC, 77 76 байт

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

Вышеприведенное может не выглядеть как правильный BASIC, но Applesoft допускает несколько сочетаний клавиш при использовании этого PRINTоператора:

  • Использование ?вместо PRINTпри вводе заявления
  • Символы конкатенации (или ;или +) могут быть опущены
  • Если оператор заканчивается строкой в ​​кавычках, окончательная цитата может быть опущена Спасибо, Марк !

Требуется номер строки, иначе INPUTоператор вызовет?ILLEGAL DIRECT ERROR


1
Можете ли вы опустить конечную кавычку? Applesoft Basic является производной от Microsoft Basic, и многие версии Microsoft Basic позволяют опускать закрывающую кавычку в строке, если она заканчивается строкой.
Марк

@ Марк, спасибо за совет!
Ли

4

33 , 78 байт

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

Попробуйте онлайн!

Принимает входные данные в качестве аргументов командной строки.

Бонус: 91 байт

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

Попробуйте онлайн!

Дает вывод, похожий на себя, когда данные 1bztpи2bztp


Сказал это вслух, теперь мне нужно убрать все плевки с моего монитора.
BradC


3

PowerShell , 65 байт

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

Попробуйте онлайн!

Единственное, что следует отметить, это то, что вы должны экранировать знак вопроса, потому что они могут быть действительными частями идентификатора PowerShell.


3

VBA, 107 байт

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

Должен также работать как VBScript, я использовал два ярлыка: «ould» повторяется и «chuck» никогда не появляется без дополнительного пробела.


Вы можете уменьшить это до 75 байтов, преобразовав непосредственную оконную функцию как a=[A1]:b=[B1&" "]:o="ould ":?"How much "a" w"o"a "a b b"if a "a b"c"o b a"?. Принимает данные от [A1]и [B1]. У нас есть советы по игре в гольф в VBA, которые вы можете рассмотреть.
Тейлор Скотт

Тогда вы можете взять входные данные именованного диапазона [A]и в [B]качестве входных данных довести его до 73. Я не совсем понимаю, как проходит ваш, хотя, не стесняйтесь добавлять свой собственный ответ.
user3819867

1
К сожалению, это противоречит определению STDIN и STDOUT для Excel VBA - вы можете использовать любой неназванный диапазон в активном листе, но запрещено использовать именованные диапазоны в соответствии с более ранним решением сообщества
Тейлор Скотт

3

C # , 165 148 133 байта

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]);}}

Спасибо Эндрю Баумеру за рассказ о интерполированных строках!
РЕДАКТИРОВАТЬ: теперь добавлен полный класс.
РЕДАКТИРОВАТЬ: Спасибо Кеннету К. за несколько советов по его сокращению.
РЕДАКТИРОВАТЬ: Еще раз спасибо Эндрю за то, что сказал мне, что использование интерполированной строки на самом деле дольше в этом сценарии.


Используя современные C # '$' ( интерполированные строки ), вы можете сохранить несколько байтов, заменив {0} на {a [0]}, или еще лучше, взяв две переменные вместо массива, чтобы вы могли просто использовать a и b. Чтобы не украсть твой гром, так сказать, я добавлю его как другую версию c #
Эндрю Баумер

Вау, не знал об этом! Спасибо за информацию
canttalkjustcode

2
@canttalkjustcode в общем, функции принимаются. Для C # это включает в себя лямбды: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

Это правда, но только в C # Interactive вы можете использовать лямбда-выражения, подобные этому. В полном C # вам нужно полное лямда-утверждение. Простой оператор void будет быстрее, как показано в следующем фрагменте:
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


2

Желе , 39 байт

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

Полная программа, принимающая список из двух строк.

Попробуйте онлайн!

... Или (также полная программа, принимающая список из двух строк)

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

Попробуйте онлайн!


2

Python 3 , 80 байт

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

Попробуйте онлайн!

в Риме используйте формат str.

Отредактировано с помощью трюка Squid.


3
Разве это не будет недействительным? Это фрагмент - не функция или программа, верно?
Восстановить Монику

Да уж; нужна lambda n:перед ним, и может уронить print().
wizzwizz4

Вы должны изменить свой код для печати How much ...вместо how much ....
Руохола

3
Достаточно просто определить анонимную функцию как 'how much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format.
xnor

@xnor Все еще довольно новый, как будет выглядеть TIO для этого? Я думаю, что без какого-либо способа передать в arg это будет работать.
Tryer

2

C # (интерактивный компилятор Visual C #) , 66 65 байт

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

Попробуйте онлайн!

так же, как и все, кроме C #. -1 байт, используя слой каррирования a => b => c вместо (a, b) => c


Изменить подпись функции с Func<string,string,string>на Func<string,Func<string,string>>и изменить (x,y)наx=>y=>
Воплощение невежества

Похоже на дешевую тактику, но мета-обсуждение говорит, что это честная игра, так же может быть. Благодарю.
Эндрю Баумер

2

R , 95 байт

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

Попробуйте онлайн!


2
Добро пожаловать на сайт! Ваша ссылка TIO, кажется, ссылается на неправильный код? Кроме того, насколько я могу судить, вы предполагали, что входные данные находятся в переменных aи b, что запрещено в соответствии с нашими правилами ввода / вывода
caird coinheringaahing

Спасибо @cairdcoinheringaahing за комментарий. Я переписал его в функциональной форме, надеюсь, что теперь он соответствует правилам.
minhsphuc12


1

APL (Dyalog Unicode) , 56 59 байт

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

Попробуйте онлайн!

Довольно простой DFN. Сохраняет байт, обрезая, если нам разрешено возвращать массив строк вместо одной строки.

Добавлено 3 байта, потому что я забыл добавить знак вопроса.


Вы считали греческие буквы как один байт?
Томаш Зато

@ TomášZato да. Глифы Dyalog APL могут быть представлены в одном байте с помощью таблицы однобайтовых символов Adám, которая является стандартной для ответов APL здесь.
Ж. Салле


1

Желе , 41 37 байт

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

Попробуйте онлайн!

Полная программа, принимающая пару строк в качестве аргумента и печатающая обработанную строку. Монадная ссылка может быть сформирована путем добавления Fв конец (спасибо @JonathanAllan за указание на это).

Теперь я переключился на использование «b» и «e» в качестве заполнителей, вдохновленных ответом @ dzaima на SOGL, поэтому обязательно добавьте этот комментарий! Это означает, что первое слово не может включать букву е.


@JonathanAllan совершенно верно! Благодарю.
Ник Кеннеди


1

Forth (gforth) , 116 байтов

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

Попробуйте онлайн!

Код Объяснение

\ 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

1

Луа , 82 байта

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

Попробуйте онлайн!

Полная программа, принять входные данные в качестве аргументов.

Здесь нет ничего особенного. Надеюсь, что есть более короткая версия, но нет очевидных способов сократить это на первый взгляд.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.