Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.06.2022, 19:48
Аспирант
Отправить личное сообщение для Volonter Посмотреть профиль Найти все сообщения от Volonter
 
Регистрация: 18.01.2011
Сообщений: 84

Математическая задачка на JS (часть кода внутри)
Привет всем, есть простая математическая задачка, пытаюсь ее написать на javascript. Суть задачи - получить 10-значное число, в котором
первая цифра соответствует количеству единиц в числе;
вторая цифра - количеству двоек;
третья цифра - количеству троек;
...
десятая цифра - количеству нулей.
получается вот такое число 2 1 0 0 0 1 0 0 0 6
как кодом его его получить?
Кроме как написать каркас с рекурсией дальше у меня не идет, нужна помощь гуру))
let a = [];
let b = [];


function number(left, pos) {
    if (pos == 10) {
        if (left == 0) {
            b.splice(0, a.length)
            for (i = 0; i < 10; i++) {
                ++b[a[i]];
            }
            // наверное дальше надо как то сравнить оба массива??
        }
    } else {
        for (i = 0; i <= left; i++) {
            a[pos] = i;
            number(left - i, pos + 1);
        }
    }
}

number(10, 0);

Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2022, 20:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Volonter
получить 10-значное число
??? условие многовариантное, может не получить, а проверить?
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2022, 20:07
Аспирант
Отправить личное сообщение для Volonter Посмотреть профиль Найти все сообщения от Volonter
 
Регистрация: 18.01.2011
Сообщений: 84

рони,
именно получить, сгенерировать как бы. Задача вообще для 5-го класса, число получается вот такое 2 1 0 0 0 1 0 0 0 6
как мне казалось, надо как сдвигать нули в массиве, начиная с 10, записывая кол-во нулей в конец массива, но все пошло не так и уперся))

Последний раз редактировалось Volonter, 15.06.2022 в 20:10.
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2022, 22:12
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

https://otvet.mail.ru/question/16330299
Здесь можно глянуть описание логики решения
Ответить с цитированием
  #5 (permalink)  
Старый 15.06.2022, 22:36
Аспирант
Отправить личное сообщение для Volonter Посмотреть профиль Найти все сообщения от Volonter
 
Регистрация: 18.01.2011
Сообщений: 84

Сообщение от Vlasenko Fedor Посмотреть сообщение
https://otvet.mail.ru/question/16330299
Здесь можно глянуть описание логики решения
Спасибо, так даже интереснее будет подумать)) но код от гуру увидеть всегда полезно))
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2022, 12:09
Аспирант
Отправить личное сообщение для Volonter Посмотреть профиль Найти все сообщения от Volonter
 
Регистрация: 18.01.2011
Сообщений: 84

Vlasenko Fedor,
вот есть вопрос, челове пишет что "очевидно, что сумма цифр в числе равна 10", а откуда он это взял? если не знать ответа, разве как то можно это определить? На мой взгляд, из условия задачи мы понимаем только то, что 1) последняя цифра точно не ноль, так как он есть, 2) первая тоже не ноль, так как число с нуля не начинается. А от суммы 10 строится вся логика проверок.
Ответить с цитированием
  #7 (permalink)  
Старый 16.06.2022, 13:49
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от Volonter
челове пишет что "очевидно, что сумма цифр в числе равна 10", а откуда он это взял?
потому что каждая цифра обозначает некоторое количество цифр. А их всего 10.
Ответить с цитированием
  #8 (permalink)  
Старый 16.06.2022, 13:52
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

решал эту задачу давно, на бумаге.

стартовал от "первого приближения" 0000000009, потом за несколько итераций "улучшал" результат, исправляя косяки - 0000000108, 1000000108, 2100000108, ..., и быстро дошел до итогового. Но вот как это формализовать для программы, чтобы не зациклилось, сходу не очень понятно...
Ответить с цитированием
  #9 (permalink)  
Старый 16.06.2022, 17:16
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,699

Методом проб, ошибок и тыка
(но никак не научных размышлений)
Составил такой алгоритм, который очень быстро получает это число
let res = [0,0,0,0,0,0,0,0,0,0];
const count = (dig) => res.filter(v => v === dig).length;

const test = () => {
	for (let i = 0; i<10; i++) {
		const dig = i < 9? i+1 : 0;
		if (count (dig) != res[i]) return false;
	}
	return true;
}

const change = () => {
	const newa = [];
	for (let i = 0; i<10; i++) {
		const dig = i < 9? i+1 : 0;
		const nd = count (dig)
		if (nd != res[i]) {
			res[i] = nd;
		}
	}
}

let n = 0; 
while (!test()) {
	change ();
	n++;
	console.log(n, [...res]);
}

console.log ('FINISH : ', n, res)


Ничуть не претендую на красоту алгоритма и кода
Но находит результат с любого начального значения (res)

Последний раз редактировалось voraa, 17.06.2022 в 10:59.
Ответить с цитированием
  #10 (permalink)  
Старый 16.06.2022, 18:31
Аспирант
Отправить личное сообщение для Volonter Посмотреть профиль Найти все сообщения от Volonter
 
Регистрация: 18.01.2011
Сообщений: 84

voraa,
Маэстро, снимаю шляпу! Спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно понять, какая часть js кода отвечает за отправку капчи на сайт? DmitryP Общие вопросы Javascript 0 31.03.2021 15:12
Click внутри js DarknesS Общие вопросы Javascript 2 13.06.2016 01:12
Доработка кода JS Adverterio Элементы интерфейса 7 22.07.2015 12:11
скрыть из исходного кода часть javascript кода. javasc Javascript под браузер 10 12.03.2014 09:32
Как с помощью JS "на-лету" менять часть HTML кода greendoc Общие вопросы Javascript 2 18.03.2008 20:43