Основная система представляет собой мнемоническое устройство для преобразования чисел в слова , чтобы они могли быть сохранены более легко.
Он основан на том, как слова звучат фонетически, но чтобы не усложнять задачу, мы будем интересоваться только тем, как пишутся слова. Это означает, что будут некоторые неправильные преобразования, но это нормально.
Чтобы преобразовать число в слово, используя нашу упрощенную основную систему:
- Замените каждый
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 .