Files
freeCodeCamp/curriculum/challenges/ukrainian/22-rosetta-code/rosetta-code-challenges/josephus-problem.md
camperbot 7a0d396180 chore(i18n,learn): processed translations (#53415)
Co-authored-by: Naomi Carrigan <nhcarrigan@gmail.com>
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
2024-02-13 18:31:01 +01:00

2.7 KiB
Raw Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5a23c84252665b21eecc7ec5 Задача Йосипа Флавія 1 302294 josephus-problem

--description--

Задача Йосипа Флавія — це математична головоломка зі зловісною умовою: у колі стоять n в’язнів, послідовно пронумерованих від 0 до n-1.

Екзекутор ходить по колу. Він починає з в’язня під номером 0, забирає із собою кожного $k$-го в’язня та вбиває його.

Коло стає все меншим і меншим, поки не залишиться лише один в’язень, якого потім відпускають.

Наприклад, якщо n=5 та k=2, то порядком вбитих в’язнів (назвемо це «послідовністю вбивств») буде 1, 3, 0 та 4, а №2 залишиться живим.

Дізнайтеся, хто з в’язнів виживе за будь-яких n, k > 0.

В одному з таких випадків був 41 в’язень, а кожен 3-ій був вбитий (k=3).

Серед них був розумний хлопець Йосип, який розв’язав цю задачу та обрав виграшну позицію, а згодом постійно розповідав про це.

Який номер він вибрав?

--instructions--

Напишіть функцію, яка приймає початкову кількість в’язнів та k як параметри і повертає номер в’язня, який виживе.

--hints--

josephus має бути функцією.

assert(typeof josephus == 'function');

josephus(30,3) має повернути число.

assert(typeof josephus(30, 3) == 'number');

josephus(30,3) має повернути 28.

assert.equal(josephus(30, 3), 28);

josephus(30,5) має повернути 2.

assert.equal(josephus(30, 5), 2);

josephus(20,2) має повернути 8.

assert.equal(josephus(20, 2), 8);

josephus(17,6) має повернути 1.

assert.equal(josephus(17, 6), 1);

josephus(29,4) має повернути 1.

assert.equal(josephus(29, 4), 1);

--seed--

--seed-contents--

function josephus(init, kill) {

}

--solutions--

function josephus(init, kill) {
  const arr = Array.from(Array(init).keys());
  let curr = -1
  while (arr.length > 1) {
    curr = (curr + kill) % arr.length;
    arr.splice(curr, 1);
    curr--;
  }
  return arr[0];
}