Написать функцию, которая принимает двузначное число и возвращает его в текстовом виде.
Например: 35 – тридцать пять, 89 – восемьдесят девять, 12 – двенадцать.
Я сделал это так, но мне кажется, что есть решение и короче.
Потом я вспомнил про регулярные выражения, которые я никогда не учил. Хотел спросить, как, к примеру, эта задача решалась бы с помощью регулярных выражений?
function textNumber(number) {
let first = ['Один', 'Два', 'Три', 'Четыре', 'Пять', 'Шесть', 'Семь', 'Восемь', 'Девять'];
let second = ['Десять', 'Одинадцать', 'Двенадцать', 'Тринадцать', 'Четырнадцать', 'Пятнадцать', 'Шестнадцать', 'Семьнадцать', 'Восемьнадцать', 'Девяднадцать', 'Двадвать'];
let third = ['Двадцать', 'Тридцать', 'Сорок', 'Пятьдесят', 'Шестьдесят', 'Семьдесят', 'Восемьдесят', 'Девяносто'];
if (number > 0 && number <= 9) {
return first[number - 1];
}
if (number >= 10 && number <= 20) {
return second[number - 10];
}
if (number > 20 && number <= 99) {
let str = `${number}`;
str = str.split('');
let firstNumber = str[0];
let secondNumber = str[1];
//return [ third[firstNumber - 2], first[secondNumber - 1] ];
return `${third[firstNumber - 2]} ${first[secondNumber - 1]}`;
}
}
alert(textNumber(7));
alert(textNumber(20));
alert(textNumber(55));
Хотел спросить, как, к примеру, эта задача решалась бы с помощью регулярных выражений?
Регулярные выражения применяются для проверки соответствия строки шаблону, и/или для извлечения подстрок. То есть, они для обработки строковых входных данных.
А у данной задачи, входные данные - это числа, и суть заключается в их обработке... Так что, регулярки в этой задаче неприменимы (они могли бы применяться при обратном преобразовании: слов в числа).
мне кажется, что есть решение и короче
Код не сократился, зато символьный объем словарика меньше))
console.log(Array.from({ length: 100 },
(v, i) => i + ': ' + textNumber(i)
).join('\n'));
function textNumber(number) {
const dict = [
['ноль', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', '', 'две', '', 'четыр', 'пят', 'шест', 'сем', 'восем', 'девят'],
['', '', 'двадцать', 'тридцать', 'сорок', '', '', '', '', 'девяносто']
];
if (number >= 0 && number <= 10)
return dict[0][number];
if (number > 10 && number <= 19)
return (dict[0][number] || dict[0][number - 10]) + 'надцать';
if (number >= 20 && number <= 99) {
const [units=0, tens] = [...('' + number)].reverse().map(Number);
return [
tens ? dict[1][tens] || (dict[0][tens] + 'десят') : '',
units ? dict[0][units] : ''
].join(' ');
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть произвольных адрес в input1 (Россия, Московская область, Пушкино)
У меня есть функция по авторизации пользователя в моём приложении на Flask