Найти тему
Gerpea

Учим компьютер писать числа буквами с помощью JavaScript

Оглавление

Сегодня мы попробуем научить компьютер переводить числа записанные с помощью цифр в слова

Первые шаги

Давайте используем словарь пар число-слово

А дальше?

Напишем функцию которая будет возвращать значение если оно есть в словаре, и false если слово для числа не задано

Напишем код для вывода результатов работы

Первый результат

> node index.js 5
пять

Отлично!

Двигаемся дальше

> node index.js 101
false

Неплохо!

Мы научились преобразовывать простые числа в слова, но что если мы хотим работать с числами которых нет в нашем словаре? Можно было бы определить все числа в словаре. Но

  • Это утомительно
  • Занимает много памяти

Учимся составлять слова

Для того чтобы целыми днями не заниматься составление словарей и оставить комьютеру немного больше памяти на более важные задачи. А они у него есть, поверьте!

Модернезируем нашу программу, так чтобы она складывала результат перевода цифр числа, в результирующую строку

> node index.js 101
одиннольодин

Хорошо!

Добавляем разряды

Определим словарь для разрядов, ключом в котором будем количестве нулей в числе

По аналогии с функцией получения словесного значения, напишем функцию получения слова для разряда

Изменим программу так, чтобы она добавляла разряд числа

> node index.js 101
стоодин

Но у текущего решения есть проблемы, во-первых оно перестало работать с прошлым прошлым числом, во-вторых оно умеет работать только с одним разрядом

Попробуем это решение с числом, разряд которого не определен в словаре

> node index.js 10000001
false1

Что то не так?

Составляем слова

Для преобразования разрядов числа, разобьем число на два, добавив между ними название разряда. Так же не забудем проверить наличие разрядных чисел таких как "десять" в словаре, и использовать их вместо дальнейшего разбиения числа

-2

Во втором числе мы можем получить лишние нули в начале. Разобьем число 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

Подписывайтесь на канал, ставьте лайк, пишите что бы вы изменили и улучшили в этой программе
Наука
7 млн интересуются