Сегодня мы попробуем научить компьютер переводить числа записанные с помощью цифр в слова
Первые шаги
Давайте используем словарь пар число-слово
А дальше?
Напишем функцию которая будет возвращать значение если оно есть в словаре, и false если слово для числа не задано
Напишем код для вывода результатов работы
Первый результат
> node index.js 5
пять
Отлично!
Двигаемся дальше
> node index.js 101
false
Неплохо!
Мы научились преобразовывать простые числа в слова, но что если мы хотим работать с числами которых нет в нашем словаре? Можно было бы определить все числа в словаре. Но
- Это утомительно
- Занимает много памяти
Учимся составлять слова
Для того чтобы целыми днями не заниматься составление словарей и оставить комьютеру немного больше памяти на более важные задачи. А они у него есть, поверьте!
Модернезируем нашу программу, так чтобы она складывала результат перевода цифр числа, в результирующую строку
> node index.js 101
одиннольодин
Хорошо!
Добавляем разряды
Определим словарь для разрядов, ключом в котором будем количестве нулей в числе
По аналогии с функцией получения словесного значения, напишем функцию получения слова для разряда
Изменим программу так, чтобы она добавляла разряд числа
> node index.js 101
стоодин
Но у текущего решения есть проблемы, во-первых оно перестало работать с прошлым прошлым числом, во-вторых оно умеет работать только с одним разрядом
Попробуем это решение с числом, разряд которого не определен в словаре
> node index.js 10000001
false1
Что то не так?
Составляем слова
Для преобразования разрядов числа, разобьем число на два, добавив между ними название разряда. Так же не забудем проверить наличие разрядных чисел таких как "десять" в словаре, и использовать их вместо дальнейшего разбиения числа
Во втором числе мы можем получить лишние нули в начале. Разобьем число 10001 не имея в словаре разряд тысячи, получим 100 и 01, на следующей итерации мы не найдем 01 в словаре чисел, и снова оправим его для разбиения для разряды. В итоге вместо правильного вывода "один" получим "десятьодин"
Более того пользователь может сам ввести число начинающееся с нуля
Для избежания таких ситуаций будем удалять начальные нули в числе
Вернем прежний функционал программы добавив к нему возможность работы с разрядами
> node index.js 101
одинстоодин
Финиш!
> node index.js 1000000047
одинтысячамиллиончетыредесятьсемь
Для разделения слов добавим пробел к значениям в словарях, заодно добавив значение "сорок" в словарь чисел
> node index.js 1000000047
один тысяча миллион сорок семь
Немного поработав над кодом можем добавить мультиязычность
> node index.js 1000000047 en
one thousand million forty seven
Полный код программы можно найти на GitHub
Подписывайтесь на канал, ставьте лайк, пишите что бы вы изменили и улучшили в этой программе