Напишите функцию или программу, которая принимает два слова в качестве входных данных и выводит варианты популярного английского скороговорки «Сколько бы дерева сгрызло сурок, если сурок мог бы соскоблить дерево?».
Выход будет использовать первое слово четыре раза
- Сколько
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?"
Это код-гольф , поэтому побеждает меньше байтов. Ответы приветствуются на всех языках, даже если какой-либо другой язык может сделать это за меньшее количество байтов.
(Вдохновлен этим мемом , который использует одну входную пару лучше, чем этот жесткий шаблон ....)
"", ""
означает нет: рОтветы:
Python 3 ,
7067 байтПопробуйте онлайн!
Я имею в виду, если обувь подходит ..
Спасибо manatwork за ловлю опечатки
Спасибо Remco Haszing за отличную идею - 3 байта
Я убегаю от предположения, что это все еще будет действительным представлением (потому что, мужик, это слишком круто, чтобы не пытаться). Если бы OP мог уточнить, является ли это приемлемым (потому что я не написал функцию как таковую), это будет оценено.
Обновление: благословение получено, все хорошо :)
Предыдущая версия:
источник
"How much {0} would a {0}{1} {1} if a {1}{0} could {1} {0}?".format
. Это возвращает функцию, привязанную к неформатированной строке.print("How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?".format("wood","chuck"))
генерирует желаемый результат, я не вижу причин не принимать его :)T-SQL, 82 байта
Входные данные берутся из уже существующей таблицы с колоннами и , в соответствии с нашими правилами ввода - вывода .T вес с
Один байт длиннее, но почему-то чуть приятнее:
Эта версия работает с подмножеством входных данных, которые не включают цифрывес
2
в первом слове .Поскольку я в SQL, я могу предварительно загрузить все примеры в таблицу и запустить их все сразу:
источник
select'How much &1 would a &1&2 &2 if a &1&2 could &2 &1?'from dual
Баш , 50 байт
Попробуйте онлайн!
-5 байтов из-за помощи из комментариев ниже.
источник
Stax ,
33313029 байт-1 спасибо за рекурсив !
Запустите и отладьте его на staxlang.xyz!
Вставьте каждый компонент в стек в обратном порядке, затем объедините все с пробелами.
Распаковано (35 байт) и объяснение:
Все между `` является сжатым строковым литералом. Эта запятая имеет жизненно важное значение. В последний раз, когда я читаю из входного стека, я должен выскочить, а не заглянуть, чтобы избежать дополнительного «броска» на конец моего вывода.
Вы заметите, что я поместил оба входа в одну строку для нескольких тестовых случаев, и что они в обратном порядке. Это необходимо для того, чтобы в качестве входных данных принимались пустые строки или строки пробелов.
2726 байт с ограничениями на вводЗапустите и отладьте его на staxlang.xyz!
Как и в случае с SOGL @ dzaima , произойдет сбой, если первый вход содержит строчную букву 'y'. Выдвигает строку «Сколько b будет a by y, если a by может yb?», Затем делает пару замен.
источник
,
в вашем 31-байтовом решении может быть удалено. Следующее+
неявно выскакивает из стека ввода, поэтому поведение идентично.JavaScript, 70 байт
Скучно!
Попробуйте онлайн!
Мягко менее скучно!
Попробуйте онлайн!
источник
f(a)(b)
) , как вы можете видеть в TIO. Но да, наше согласие разрешить каррирование функций, и я думаю, что мы близки к консенсусу о том, что функция действительно может быть возвращена.СОГЛ ,
3230 байтПопробуй это здесь!
Первый ввод не может содержать букву
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-м входом иy
2-м.источник
y -> wood
иn -> chuck
. Десятая часть Очка Достоинства говорит, что и здесь тоже так.b
не допускается в первом входе, ноe
нормально во втором входе?e
, так как в противном случае он будет заменен на 2-й вход во 2-й заменеR ,
907776 байт-13 благодаря Sumner18
-1 благодаря Джузеппе
Попробуйте онлайн!
источник
gsub
Вместо этого можно сделать дубль для -13 байтов. tio.run/…gsub
определенно имеет больше смысла.pryr
, вы можете уменьшить его до 73 .x
не включает символ2
; это терпит неудачу в этом случае ( TIO ).PHP , 72 байта
Попробуйте онлайн!
Или же:
PHP , 72 байта
Попробуйте онлайн!
Ввод из командной строки, вывод в
STDOUT
.источник
JavaScript (V8) , 72 байта
Попробуйте онлайн!
Присвоение переменной на самом деле экономит 0 байт, но я решил, что оставлю это просто, чтобы сделать это немного уникальным.
источник
ZX Spectrum Basic, 87 байт
Просто для полноты, простой реализации:
Использование
IF
ключевого слова (1 байт) сокращает его на 3 байта, но нарушает условие «одинаковой капитализации»:источник
Ржавчина , 75 байт
Попробуйте онлайн!
Используя этот трюк , который позволяет пропустить индекс форматирования один раз для каждого элемента для форматирования.
Также используется
print!()
, потому что он на один байт короче, чем построение строкиformat!()
и ее возврат.источник
05AB1E ,
37353130 байт-5 байтов благодаря @Grimy .
Принимает список из двух элементов: в
wood
качестве первого значения и вchuck
качестве второго.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как пользоваться словарем? ), Чтобы понять, почему
“Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“
это так"How much1 would a ÿ0 if a ÿ could01?"
.источник
$ù
подобное для сохранения дополнительного байта, спасибо.Applesoft BASIC,
7776 байтВышеприведенное может не выглядеть как правильный BASIC, но Applesoft допускает несколько сочетаний клавиш при использовании этого
PRINT
оператора:?
вместоPRINT
при вводе заявления;
или+
) могут быть опущеныТребуется номер строки, иначе
INPUT
оператор вызовет?ILLEGAL DIRECT ERROR
источник
33 , 78 байт
Попробуйте онлайн!
Принимает входные данные в качестве аргументов командной строки.
Бонус: 91 байт
Попробуйте онлайн!
Дает вывод, похожий на себя, когда данные
1bztp
и2bztp
источник
Котлин , 59 байт
Попробуйте онлайн!
источник
PowerShell , 65 байт
Попробуйте онлайн!
Единственное, что следует отметить, это то, что вы должны экранировать знак вопроса, потому что они могут быть действительными частями идентификатора PowerShell.
источник
VBA, 107 байт
Должен также работать как VBScript, я использовал два ярлыка: «ould» повторяется и «chuck» никогда не появляется без дополнительного пробела.
источник
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. Я не совсем понимаю, как проходит ваш, хотя, не стесняйтесь добавлять свой собственный ответ.C # ,
165148133 байтаСпасибо Эндрю Баумеру за рассказ о интерполированных строках!
РЕДАКТИРОВАТЬ: теперь добавлен полный класс.
РЕДАКТИРОВАТЬ: Спасибо Кеннету К. за несколько советов по его сокращению.
РЕДАКТИРОВАТЬ: Еще раз спасибо Эндрю за то, что сказал мне, что использование интерполированной строки на самом деле дольше в этом сценарии.
источник
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 байт
Попробуйте онлайн!
Сначала попробуйте, поэтому я надеюсь, что не нарушил никаких правил.
источник
Желе , 39 байт
Полная программа, принимающая список из двух строк.
Попробуйте онлайн!
... Или (также полная программа, принимающая список из двух строк)
Попробуйте онлайн!
источник
Python 3 , 80 байт
Попробуйте онлайн!
в Риме используйте формат str.
Отредактировано с помощью трюка Squid.
источник
lambda n:
перед ним, и может уронитьprint()
.How much ...
вместоhow much ...
.'how much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format
.C # (интерактивный компилятор Visual C #) ,
6665 байтПопробуйте онлайн!
так же, как и все, кроме C #. -1 байт, используя слой каррирования a => b => c вместо (a, b) => c
источник
Func<string,string,string>
наFunc<string,Func<string,string>>
и изменить(x,y)
наx=>y=>
R , 95 байт
Попробуйте онлайн!
источник
a
иb
, что запрещено в соответствии с нашими правилами ввода / выводаstringr
экономит вам немного.APL (Dyalog Unicode) ,
5659 байтПопробуйте онлайн!
Довольно простой DFN. Сохраняет байт, обрезая,
∊
если нам разрешено возвращать массив строк вместо одной строки.Добавлено 3 байта, потому что я забыл добавить знак вопроса.
источник
Wolfram Language (Mathematica) , 68 байт
Попробуйте онлайн!
источник
Желе ,
4137 байтПопробуйте онлайн!
Полная программа, принимающая пару строк в качестве аргумента и печатающая обработанную строку. Монадная ссылка может быть сформирована путем добавления
F
в конец (спасибо @JonathanAllan за указание на это).Теперь я переключился на использование «b» и «e» в качестве заполнителей, вдохновленных ответом @ dzaima на SOGL, поэтому обязательно добавьте этот комментарий! Это означает, что первое слово не может включать букву е.
источник
Japt
-S
,4439 байтПопробуй
источник
Forth (gforth) , 116 байтов
Попробуйте онлайн!
Код Объяснение
источник
Луа , 82 байта
Попробуйте онлайн!
Полная программа, принять входные данные в качестве аргументов.
Здесь нет ничего особенного. Надеюсь, что есть более короткая версия, но нет очевидных способов сократить это на первый взгляд.
источник
Баш , 58 байт
Принимает ввод в качестве аргументов командной строки. Попробуйте онлайн!
источник