Pangrams
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
Это пример панграммы - предложения, которое содержит каждую букву алфавита хотя бы один раз.
Самостоятельной перечислении панграмма является предложением , который удовлетворяет критериям , чтобы быть панграмма, производя анализ его собственного подсчета букв.
Примером достижения этого является предложение
Эта панграмма содержит четыре As, один B, два C, один D, тридцать Es, шесть F, пять G, семь H, одиннадцать Is, один J, один K, два Ls, два M, восемнадцать N, пятнадцать Os, два P , один Q, пять рупий, двадцать семь Ss, восемнадцать Ts, два Us, семь V, восемь W, два X, три Y и один Z.
Соревнование
Создайте функцию, в которой вводом будет строка, ведущая в список букв. В этом примере вводом будет «Эта панграмма содержит». Количество каждой буквы должно быть в письменной форме и вносить вклад в отображаемое количество букв.
правила
- Оксфордская запятая необязательна
- Используйте амперсанд перед Z (или, для жесткого режима, включите возможность переключения между «&» и «и» в функции)
- Каждая буква учитывается в общем количестве букв
- Нет неписанных чисел
- Это код-гольф, поэтому выигрывает самый короткий код в байтах
- В HONO у г о супружеской пары в эти выходные, цифры должны быть написаны на Королевы английском языке. например,
nine hundred and ninety-nine Gs
для 999 вхождений буквы G иnine hundred and nine Gs
для 909. - Порядки должны быть записаны в стандартном соглашении по сокращенному именованию
Краевые случаи
- В некоторых случаях код застревает в цикле - например, если есть две ОС, код увеличивает счет до трех ОС, что заставляет код снова считать две ОС. Если вычисление любого другого письма , прежде чем возвращаться к этому не может решить эту проблему, рассмотрит ввод ложный стартер и выход
false
,null
или пустая строка. - Если в письме более 999 вхождений, ввод следует считать фальстартером.
Тестовые случаи
- «Эта панграмма содержит» должно выводить пример предложения
источник
o
s без слова для счетчика, то, когда вы записываете его с помощьюtwo
, вся строка теперь имеет три-o
s, что означает, что слово теперь неверно, переключение делает его снова неправильным и т.д.Rob enjoys any sentence with two As, two Bs, two Cs, one D, thirty five Es, four Fs, three Gs, nine Hs, eight Is, two Js, one K, two Ls, one M, twenty two Ns, eighteen Os, one P, one Q, nine Rs, twenty three Ss, twenty three Ts, three Us, four Vs, eleven Ws, one X, seven Ys, & one Z.
Ответы:
Python 2 , 615 байт
Попробуйте онлайн!
Функция
f
принимаетp
в качестве префикса строки; и возвращает кортеж целого числа, представляющего количество сделанных шагов, и автограмму.Функция
g
кодирует число1<=n<=999
в свою английскую строку; он занимает 291 байт, примерно половину общего количества байтов. Кодкодирует строку
s
в (потенциально автограмма) панграммуt
.Мы зацикливаемся на процессе, надеясь на ситуацию, когда находим
t
такой, которыйt
является автограммой (то есть гдеt==s
).ЕслиКогда мы попадаем в цикл, мы случайным образом увеличиваем количество букв.Для большинства значений
p
этот процесс будет задержан на TIO. Как правило, миллионы возможностей проверяются, прежде чем найти «выигрышную» комбинацию.У меня нет никаких доказательств, но я предполагаю, что: (а) кроме исчерпывающего поиска методом грубой силы, подобного тому, что описал автор оригинала Ли Саллоус и реализующий аппаратно (!), Этот тип случайной эвристики примерно таков: хорошо, как вы можете получить; и (б) не будет решений для многих (большинства?) исходных фраз
p
.источник
map(chr,range(65,91))
сохраняет несколько байтов.