Основна система являє собою мнемонічне пристрій для перетворення чисел в слова , щоб вони могли бути збережені легше.
Він ґрунтується на тому, як слова звучать фонетично, але для того, щоб все було просто для завдання, ми будемо мати справу лише з тим, як написані слова. Це означає, що будуть деякі неправильні перетворення, але це нормально.
Для перетворення числа в слово за допомогою нашої спрощеної основної системи:
- Замініть кожен
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 і знайде всі слова, які можна було б перетворити за допомогою спрощеної основної мнемонізованої системи.
У вашій програмі є доступ до текстового файлу зі списку слів, який визначає, які всі "справжні" англійські слова. У кожному рядку цього файлу є одне маленьке слово az, і ви можете припустити, що воно містить новий рядок. Ось список реальних слів, які ви можете використовувати для тестування. Ви можете припустити, що цей список списку слів називається f
(або щось довше) і лежить у будь-якій зручній директорії.
Для штрафу в 35 байт (додайте 35 до своєї оцінки) ви можете припустити, що список слів уже завантажений у змінну як список рядків. Це в основному для мов, які не можуть читати файли, але будь-яке подання може скористатися ним.
Ваша програма повинна вивести всі слова зі списку слів, до яких можна ввести номер введення. Вони повинні бути надруковані в stdout (або подібний), по одному на рядок (з необов'язковим останнім рядком), або вони можуть бути повернені як список рядків, якщо ви вирішили написати функцію. Список слів не обов'язково буквений, а вихідний також не повинен бути.
Якщо немає можливих слів, то вихід (або список) буде порожнім. Вихід також порожній, якщо вводиться порожній рядок.
Візьміть вхід через 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 переходить до подання, розміщеного першим.
Сайт, пов’язаний з Nifty: numzi.com .