Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2023, 21:02
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Как получить преобразованное в текст число но в стиле Vanilla js?
Как получить преобразованное в текст число но в стиле Vanilla js?

const numb900 = [100, 200, 300, 400, 500, 600, 700, 800, 900];
const numb90 = [10, 20, 30, 40, 50, 60, 70, 80, 90];
const numb9 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const numb19 = [11, 12, 13, 14, 15, 16, 17, 18, 19];

const string900 = ['сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];
const string90 = ['десять', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
const string9 = ['один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'];
const string19 = ['одиннацать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'];

function transformation(number){
    for(i = 0; i < 9; i++){
        if(numb900[i] == number){
            return string900[i];
        } else if(numb90[i] == number){
            return string90[i];
        } else if(numb9[i] == number){
            return string9[i];
        } else if(numb19[i] == number){
            return string19[i];
        }
    }
}
console.log(transformation(200)); // Например 200 = двести, или 448 = четыреста сорок восемь

Последний раз редактировалось WebMachine, 19.05.2023 в 22:35.
Ответить с цитированием
  #2 (permalink)  
Старый 19.05.2023, 21:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,077

WebMachine,
https://javascript.ru/forum/misc/406...tml#post384765
Ответить с цитированием
  #3 (permalink)  
Старый 19.05.2023, 22:30
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Так это же не Vanilla js .. Рони, немного обновил код, но все равно не понимаю как соединить сотню с десяткой и единицей? Подскажешь?
Ответить с цитированием
  #4 (permalink)  
Старый 19.05.2023, 22:31
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Сообщение от рони Посмотреть сообщение
WebMachine,
https://javascript.ru/forum/misc/406...tml#post384765
Мне нужно Ванильное решение Рони. В целом супер но решение должно быть простое..
Ответить с цитированием
  #5 (permalink)  
Старый 19.05.2023, 22:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,077

Сообщение от WebMachine
Так это же не Vanilla js ..
???
Ответить с цитированием
  #6 (permalink)  
Старый 19.05.2023, 23:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,077

WebMachine,
при желании, код можно оптимизировать...
<body>
    <meta charset="utf-8">
    <script>
        const numb900 = [100, 200, 300, 400, 500, 600, 700, 800, 900];
        const numb90 = [10, 20, 30, 40, 50, 60, 70, 80, 90];
        const numb9 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        const numb19 = [11, 12, 13, 14, 15, 16, 17, 18, 19];
        const string900 = ['сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];
        const string90 = ['десять', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
        const string9 = ['один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'];
        const string19 = ['одиннацать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'];

        function transformation(number) {
            if (number > 999) return '&infin;';
            let str = '';
            let num = number % 100;
            let i = numb19.findIndex(a => a == num);
            if (i !== -1) {
                number -= num;
                str = string19[i];
                i = numb900.findIndex(a => a == number);
                return i !== -1 ? `${string900[i]} ${str}` : str;
            } else {
                let num = number % 10;
                let i = numb9.findIndex(a => a == num);
                if (i !== -1) {
                    number -= num;
                    str = string9[i];
                    if (!number) return str;
                    num = number % 100;
                    i = numb90.findIndex(a => a == num);
                    if (i !== -1) {
                        number -= num;
                        str = `${string90[i]} ${str}`;
                        if (!number) return str;
                        i = numb900.findIndex(a => a == number);
                        return `${string900[i]} ${str}`
                    }
                    i = numb900.findIndex(a => a == number);
                    return `${string900[i]} ${str}`
                } else {
                    let num = number % 100;
                    let i = numb90.findIndex(a => a == num);
                    if (i !== -1) str = string90[i];
                    number -= num;
                    if (!number) return str;
                    i = numb900.findIndex(a => a == number);
                    return `${string900[i]} ${str}`;
                }
            }
        }
        for (let i = 1; i < 1000; i++) document.write(`${i} ${transformation(i)} <br>`)
    </script>
</body>
Ответить с цитированием
  #7 (permalink)  
Старый 22.05.2023, 03:26
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Сообщение от рони Посмотреть сообщение
WebMachine,
при желании, код можно оптимизировать...
Вариант бомба Рони. Если бы я искал лучшее решение то на нём бы я и остановился.. Но тут немного другая ситуация.

Задача такая, нужно написать скрипт который сможет преобразовывать любые числа от -999 до 999. Включая 0.

Последний раз редактировалось WebMachine, 26.05.2023 в 05:02.
Ответить с цитированием
  #8 (permalink)  
Старый 22.05.2023, 09:49
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,717

Может так
const oneText = ['','один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'];
const elvText = ['десять', 'одиннацать', 'двенадцать','тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'];
const tanText = ['', '','двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
const hunText = ['', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];
 
function transform(number){
	let neg = false;
	if (number < 0) {
		neg = true;
		number = - number;
	}
	if (number >=1000) return '';
	if (number === 0) return 'ноль';
	const rez = [];
	if (neg) rez.push ('минус')
	
	const h = (number / 100) | 0;
	number = number % 100;
	const d = (number / 10) | 0;
	const n = number % 10;
	if (h > 0) rez.push (hunText[h])
	if (d === 1) {
		rez.push (elvText[n])
	} else {
		if (d > 0) rez.push (tanText[d])
		if (n > 0) rez.push (oneText[n])
		
	}
	return rez.join(' ');
}

console.log (transform(0));
console.log (transform(5));
console.log (transform(10));
console.log (transform(17));
console.log (transform(30));
console.log (transform(42));
console.log (transform(100));
console.log (transform(214));
console.log (transform(473));
console.log (transform(-100));
console.log (transform(-214));
console.log (transform(-473));

Последний раз редактировалось voraa, 22.05.2023 в 10:10.
Ответить с цитированием
  #9 (permalink)  
Старый 22.05.2023, 10:59
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Сообщение от voraa Посмотреть сообщение
Может так
Тоже бомбовый вариант, но мне не отходя от методов надо.

Последний раз редактировалось WebMachine, 26.05.2023 в 05:01.
Ответить с цитированием
  #10 (permalink)  
Старый 22.05.2023, 11:09
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,717

Сори.
Могу решать задачи только своим уровнем.
Даже не знаю, куда тут цикл присобачить.

Последний раз редактировалось voraa, 22.05.2023 в 11:14.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
Отследить клик по дочернему объекту AllanZ jQuery 3 05.09.2012 12:38
Как получить текст с div'а Изучаю_JS Общие вопросы Javascript 21 03.02.2012 19:23
На входе HTML получить на выходе просто текст, как? Dmitry Общие вопросы Javascript 2 25.08.2008 10:42