Задать вопрос
@alexsteadfast
I am noob

Как сгенерировать случайное число, содержащее две единицы?

Задача: Сформировать массив из случайных чисел, в которых ровно две еденицы, стоящие на случайных позициях
Необходимо написать на нативном js.
  • Вопрос задан
  • 302 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно сыграть с девятиричной системой. Раз тут цифра "1" особенная, а остальные девять обычные. Берём случайное число, записываем его в девятиричной системе n.toString(9) – используются цифры от 0 до 8 и точно нет ни одной девятки. Единицы меняем на девятки. Остаётся добавить две единицы на случайных позициях.

function tworandom() {
  const arr = Math.floor(Math.random() * 9e8).toString(9).replace(/1/g,9).split('');
  for (let i = 2; i > 0; i--) arr.splice(Math.floor(Math.random() * arr.length), 0, 1);
  return +arr.join('');
}

[...Array(5)].map(tworandom)
// 6401715726, 950818173966, 915469690179, 4191464422, 223063891715
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const createArr = (len, digit, count) => {
  const d = [...Array(9)].map((n, i) => i + (i >= digit));

  return [...Array(len)].map(() => {
    const number = [...Array(Math.random() * 10 | 0)].map(() => d[Math.random() * d.length | 0]);

    for (let i = 0; i < count; i++) {
      number.splice(Math.random() * number.length | 0, 0, digit);
    }

    return +number.join('');
  });
};


const arr = createArr(5, 1, 2);
Ответ написан
Комментировать
@freelion93
Мне не ясно с задания это в массиве должны быть единицы или единицы должны быть в числах данного массива.
Данное решение для случая где в массиве случайным образом единички, решение не элегантное но простое и понятное
function create(length, range) {
	//создаем массив
	let arr = [];
	//заполняем массив случайными числами из заданного диапазона
	for (const i = 0; i < length; i++) {
		if (i = pos1 || i=pos2)
			continue;
		arr[i].push(Math.random(range));
	}
	//выбираем 2 случайные позиции в массиве
	let pos1 = Math.random(length);
	let pos2 = Math.random(length);
	//если позиции совпадают меняем одну из них на новую случайную
	while (pos1 == pos2){
		pos2 = Math.random(length);
	}
	//добавляем единицы в выбранные случайные позиции
	arr[pos1] = 1;
	arr[pos2] = 1;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimovich85
@dimovich85 Куратор тега JavaScript
https://u-academy.net/
Александр, Вы подписались, что PHP разработчик, напишите функцию на php, а мы поможем на js перевести. Тут уже написали 100500 вариантов, но все же, вопрос и бесплатный заказ разные вещи. Функция ну просто простая... неужели совсем нет идей как сделать? Напишите в вопросе алгоритм, как Вы его видите, тогда есть смысл помогать с кодом, где Вам не достает знаний js.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы