Hay N puertas y K monos. Inicialmente, todas las puertas están cerradas.
Ronda 1: El 1er mono visita cada puerta y alterna la puerta (si la puerta está cerrada, se abre; si está abierta, se cierra).
Ronda 2 : El 1er mono visita cada puerta y alterna la puerta. Luego, el 2do mono visita cada 2da puerta y alterna la puerta.
. . .
. . .
Ronda k: el 1er mono visita cada puerta y alterna la puerta. . . . . . . . . . El mono k visita cada puerta kth y alterna la puerta.
Entrada: NK (separados por un solo espacio)
Salida: números de puerta que están abiertos, cada uno separado por un solo espacio.
Ejemplo :
Entrada: 3 3
Salida: 1 2
Restricciones :
0 <N <101
0 <= K <= N
Nota :
Suponga que las puertas N están numeradas del 1 al N y los monos K están numerados del 1 al K
El que tenga el código más corto gana. Además, muestra la salida para N = 23, K = 21
fuente
n=k=3
daría salida1 2
así que estás equivocado ... y 5 salidas1 2 4
hay un patrón pero es mucho menos obvio que eso.Respuestas:
APL,
322826Explicación
{+/0=⍺|⍨⍳⍵}
es una función que devuelve el número de veces que la puerta⍺
(argumento izquierdo) se alterna en round⍵
(argumento derecho), que es igual al número de factores⍺
que es ≤⍵
:⍳⍵
Generar matriz numérica de 1 a⍵
⍺|⍨
Calcular el⍺
módulo de cada elemento de esa matriz0=
Cambie a 1 donde había un 0, y un 0 para todo lo demás.+/
Suma la matriz resultanteLa función externa:
(⍳⍺)
,⍳⍵
Generar matrices de 1 a N y 1 a K∘.{...}
Para cada par de elementos de las dos matrices, aplique la función. Esto proporciona una matriz de número de veces activadas, cada fila representa una puerta y cada columna representa una ronda.+/
Suma las columnas. Esto proporciona un conjunto de la cantidad de veces que cada puerta se alterna en todas las rondas.2|
Módulo 2, así que si una puerta está abierta, es un 1; si está cerrado, es un 0.(...)/⍳⍺
Finalmente, genere una matriz de 1 a N y seleccione solo aquellas en las que haya un 1 en la matriz en el paso anterior./⎕
Finalmente, inserte la función entre los números de entrada.EDITAR
,↑⍳¨⍳⍵
Genere todos los "monos" (si K = 4, entonces esto es1 0 0 0 1 2 0 0 1 2 3 0 1 2 3 4
)⍳⍵
Matriz de 1 a⍵
(K)⍳¨
Para cada uno de ellos, genere una matriz de 1 a ese número,↑
Convierta la matriz anidada en una matriz (↑
) y luego desentrañe en una matriz simple (,
)(,↑⍳¨⍳⍵)∘.|⍳⍺
Para cada número del 1 al⍺
(N), modifíquelo con cada mono.0=
Cambie a 1 donde había un 0, y un 0 para todo lo demás. Esto proporciona una matriz de conmutadores: las filas son cada mono en cada ronda, las columnas son puertas; 1 significa alternar, 0 significa no alternar.+⌿
Suma las filas para obtener una serie de veces que se activa cada puertaOtras partes no cambian
EDITAR
Use XOR reduce (
≠⌿
) en lugar de suma y mod 2 (2|+⌿
)fuente
{}/
lugar de simplemente tomar N y K como argumentos para el dfn?i←⍳⍺
GolfScript, 33 caracteres
Si las puertas estuvieran numeradas comenzando con cero, ahorrarían 3 caracteres.
Ejemplos (en línea ):
fuente
Mathematica, 104 caracteres
Ejemplo:
fuente
{n,k}=%~Read~{Number,Number}
.Ruby, 88
Basado en la respuesta de @ manatwork.
¡Esos glotones poco fiables siempre rompen el resaltado de sintaxis!
fuente
count
bit podría mejorarse aún más, desearía que Ruby tuviera un#sum
método incorporado para cosas como esas:>Python 3,
9784Si un mono aparece en un número par de rondas, eso no cambia en absoluto. Si un mono aparece en un número par de veces, es lo mismo que en una ronda exactamente.
Por lo tanto, algunos monos pueden quedar fuera, y los otros solo tienen que cambiar de puerta una vez.
Salida para
23 21
:fuente
range(2-K%2,K+1,2)
arange(K,0,-2)
.for
bucle con unwhile
bucle:while K>0:r^=set(range(K,N+1,K));K-=2
R - 74
Simulación:
fuente
javascript
148127Aquí hay una versión legible (muy pequeña):
Violín DEMO
Debo tener en cuenta que comienza a contar desde 0 (técnicamente un error off-by-one)
fuente
b=Array(n);
Esto inicializa su matriz como n longitud llena de indefinido. ! undefined es cierto, por lo que el primer pase de mono lo convertirá todo en verdad.+1
JavaScript, 153
Salida para N = 23, K = 21:
Probado en Chrome, pero no utiliza ninguna característica nueva de ECMAScript, por lo que debería funcionar en cualquier navegador.
Sé que nunca ganaré contra las otras entradas y que @tryingToGetProgrammingStrainght ya envió una entrada en JavaScript, pero no estaba obteniendo los mismos resultados para N = 23, K = 21 como todos los demás obtenían eso, así que pensé que probaría mi propia versión.
Editar : fuente anotada (al revisar esto nuevamente, vi lugares para guardar otros 3 caracteres, por lo que probablemente aún se pueda mejorar ...)
fuente
+1
Ruby - 65 caracteres
Aquí está el cálculo, en pseudocódigo:
Si no está convencido de que la expresión para s (d) es correcta, mírela de esta manera:
fuente
n
y de dóndek
vienes? Y la salida parece estar separada por nuevas líneas en lugar de espacios.PowerShell: 132
Código de golf:
Código no comentado y comentado:
fuente
Powershell, 66 bytes
Script de prueba:
Salida:
fuente