Основная система представляет собой мнемоническое устройство для преобразования чисел в слова , чтобы они могли быть сохранены более легко.
Он основан на том, как слова звучат фонетически, но чтобы не усложнять задачу, мы будем интересоваться только тем, как пишутся слова. Это означает, что будут некоторые неправильные преобразования, но это нормально.
Чтобы преобразовать число в слово, используя нашу упрощенную основную систему:
- Замените каждый
0
наs
илиz
. (Некоторые могут быть,s
а некоторые могут бытьz
. То же самое ниже.)- Замените каждый
1
наt
илиd
илиth
.- Заменить каждый
2
наn
.- Заменить каждый
3
наm
.- Заменить каждый
4
наr
.- Заменить каждый
5
наl
.- Замените каждый
6
наj
илиsh
илиch
.- Замените каждый
7
наk
илиc
илиg
или илиq
.- Замените каждый
8
наf
илиv
.- Замените каждый
9
наp
илиb
.- Добавляйте буквы
aehiouwxy
где угодно в любых количествах, чтобы сделать реальное английское слово, если это возможно .
Единственным исключением является то, чтоh
не может быть вставлен послеs
илиc
.Число может фактически быть любой строкой цифр 0-9 (без десятичных знаков, запятых или знаков).
Слово может содержать только строчные буквы az.
Примеры
Число 32
должно быть преобразовано как ?m?n?
, где ?
представляет любую конечную строку, составленную из букв aehiouwxy
(строку из свободного моноида, если вы предпочитаете). Есть много способов , которыми это может быть сделано в режиме реального английского слова: mane
, moon
, yeoman
и т.д.
Число 05
может быть преобразовано в ?s?l?
или ?z?l?
. Некоторые возможности easily
, hassle
и hazel
. Слово shawl
не допускается, потому что h
не может быть помещено после s
; это было бы неправильно прочитано как 65
.
Вызов
Напишите программу или функцию, которая принимает строку цифр 0-9 и находит все слова, в которые она может быть преобразована, используя упрощенную системную мнемонику.
Ваша программа имеет доступ к текстовому файлу со списком слов, который определяет, каковы все "настоящие" английские слова. В каждой строке этого файла есть одно строчное z-слово, и вы можете при желании предположить, что в нем есть завершающий символ новой строки. Вот список реальных слов, которые вы можете использовать для тестирования. Вы можете предположить, что этот файл списка слов называется f
(или что-то более длинное) и находится в любом удобном каталоге.
Для штрафа в 35 байт (прибавьте 35 к вашему счету) вы можете предположить, что список слов уже загружен в переменную в виде списка строк. Это в основном для языков, которые не могут читать файлы, но любая отправка может воспользоваться этим.
Ваша программа должна вывести все слова в списке слов, в которые можно преобразовать введенное число. Они должны быть напечатаны в стандартный вывод (или аналогичный), по одному на строку (с необязательным завершающим символом новой строки), или они могут быть возвращены в виде списка строк, если вы решили написать функцию. Список слов не обязательно находится в алфавитном порядке, и вывод не должен быть либо.
Если нет возможных слов, то вывод (или список) будет пустым. Вывод также пуст, если вводится пустая строка.
Возьмите ввод через stdin, командную строку или как строковый аргумент функции. Список слов или имя его файла не должны быть частью ввода, только цифра.
Вы соответствуете только отдельным словам в списке слов, а не последовательности слов. Слово noon
, вероятно, будет одним из результатов для 22
, но последовательность слов no one
не будет.
Тестовые случаи
Предположим, это список слов:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
zdnmrlshchvb
sthnmrlchgvb
shthnmrlchgvb
bob
pop
bop
bopy
boppy
Вход 0123456789
должен дать все длинные слова , кроме zdnmrlshchvb
и shthnmrlchgvb
:
stnmrljkfp
zthnmrlshqfb
asatanamaralajakafapa
aizxydwwwnhimouooraleshhhcavabe
zdnmrlshcvb
sthnmrlchgvb
Вход 99
должен дать:
bob
pop
bop
bopy
(Выходные слова могут быть в любом порядке.)
счет
Самая короткая подача в байтах побеждает. Tiebreaker переходит к представлению, опубликованному первым.
Отличный связанный сайт: numzi.com .