freeCodeCamp/curriculum/challenges/spanish/08-coding-interview-prep/rosetta-code/sailors-coconuts-and-a-monk...

3.9 KiB

title id localeTitle challengeType
Sailors, coconuts and a monkey problem 59da22823d04c95919d46269 59da22823d04c95919d46269 5

Description

Cinco marineros naufragan en una isla y recogen una gran pila de cocos durante el día.

Esa noche, el primer marinero se despierta y decide tomar su primera parte temprano, así que trata de dividir el montón de cocos igualmente en cinco pilas, pero encuentra que le queda un coco, así que lo arroja a un mono y luego se esconde. "su" uno de los cinco pilas de igual tamaño de cocos y empuja los otros cuatro pilas juntas para formar una única pila visible de cocos otra vez y va a la cama.

Para abreviar una larga historia, cada uno de los marineros en turnos se levanta una vez durante la noche y realiza las mismas acciones de dividir la pila de coco en cinco, encontrando que queda un coco y le da ese resto de coco. el mono.

En la mañana (después de la subrepticia y acción separada de cada uno de los cinco marineros durante la noche), los restantes cocos se dividen en cinco pilas iguales para cada uno de los marineros, después de lo cual se encuentra que la pila de cocos divide Igualmente entre los marineros con sin resto. (Nada para el mono por la mañana.)

La tarea:

Crea una función que devuelva al el tamaño mínimo posible de la pila inicial de cocos recolectada durante el día para los navegantes N .

Nota:

Por supuesto, la historia se cuenta en un mundo donde la recolección de cualquier cantidad de cocos en un día y varias divisiones de la pila, etc., puede ocurrir al tiempo que se ajusta a la línea de la historia, por lo que No afectar a las matemáticas.

Cf:

<a 0 href = "https://www.youtube.com/watch?v=U9qU20VmvaU" title = "enlace: https://www.youtube.com/watch?v=U9qU20VmvaU"> Monkeys and Coconuts - Numberphile (Video ) Solucion analitica.

<a 0 href = "http://oeis.org/A002021" title = "link: http://oeis.org/A002021">A002021 Problema con la pila de cocos La Enciclopedia en línea de secuencias de números enteros. (Aunque algunas de sus referencias pueden usar la forma alternativa del cuento).

Instructions

Tests

tests:
  - text: <code>splitCoconuts</code> es una función.
    testString: 'assert(typeof splitCoconuts === "function", "<code>splitCoconuts</code> is a function.");'
  - text: <code>splitCoconuts(5)</code> debe devolver 3121.
    testString: 'assert(splitCoconuts(5) === 3121, "<code>splitCoconuts(5)</code> should return 3121.");'
  - text: <code>splitCoconuts(6)</code> debe devolver 233275.
    testString: 'assert(splitCoconuts(6) === 233275, "<code>splitCoconuts(6)</code> should return 233275.");'
  - text: <code>splitCoconuts(7)</code> debe devolver 823537.
    testString: 'assert(splitCoconuts(7) === 823537, "<code>splitCoconuts(7)</code> should return 823537.");'

Challenge Seed

// noprotect
function splitCoconuts(intSailors) {
  // Good luck!
  return true;
}

Solution

// noprotect
function splitCoconuts(intSailors) {
  let intNuts = intSailors;
  let result = splitCoconutsHelper(intNuts, intSailors);
  while (!result) {
    intNuts += 1;
    result = splitCoconutsHelper(intNuts, intSailors);
  }

  return intNuts;
}

function splitCoconutsHelper(intNuts, intSailors, intDepth) {
  const nDepth = intDepth !== undefined ? intDepth : intSailors;
  const portion = Math.floor(intNuts / intSailors);
  const remain = intNuts % intSailors;

  if (portion <= 0 || remain !== (nDepth ? 1 : 0)) {
    return null;
  }

  if (nDepth) {
    return splitCoconutsHelper(
      intNuts - portion - remain, intSailors, nDepth - 1
    );
  }

  return intNuts;
}