El mundo es un conjunto de celdas de cinco por cinco. Se envuelve por todos lados. Se puede visualizar como ...
XXXXX XXXXX XXOXX XXXXX XXXXX
Eres un O. Te encanta viajar por el mundo, y lo haces de acuerdo con las siguientes reglas (deja que C sea el día actual):
- En los primeros días, te sientes nostálgico. Regresa a donde empezaste ayer.
- En días impares , sientes nostalgia. Mueva un paso horizontal más cerca de casa, si es posible, y un paso vertical más cerca de casa, si es posible. Ignora la envoltura mundial con el propósito de determinar la cercanía.
- En incluso días, se siente aventurero. Mueve C / 2 pasos hacia el sur.
- En días cuadrados , te sientes aventurero. Muévete hacia la pared este.
- En los días de Fibonacci , el mundo se expande hacia el sur en una fila.
- En días triangulares , el mundo se expande hacia el este en una columna.
Si se aplican dos o más de las reglas anteriores al mismo tiempo, aplíquelas en el orden indicado. Por ejemplo, en un primer día impar, primero regrese a donde comenzó ayer, y luego muévase un paso más cerca de casa.
Vives en el centro del mundo (inicial), es decir, posición (2,2), indexado a cero desde la esquina noroeste. Comienzas tu viaje allí el primer día.
Entrada
Un solo entero, N.
Salida
Sus coordenadas X e Y en el enésimo día, indexadas a cero desde la esquina noroeste, separadas por un solo espacio.
Caso de prueba con explicación
Dada una entrada de 3
, la salida correcta es:
2 3
Podemos trabajar en esto un día a la vez. A partir del día 1, debemos aplicar los siguientes movimientos:
- Impar, cuadrado, fibonacci y triangular
- Prime, even y Fibonacci
- Prime, impar, Fibonacci y triangular
En forma visual:
Día 1 Día 2 Día 3 XXXXX XXXXXX XXXXXX XXXXXXX XXXXX XXXXXX XXXXXX XXXXXXX XXOXX -> XXXXOX -> XXXXXX -> XXXOXXX XXXXX XXXXXX XXOXXX XXXXXXX XXXXX XXXXXX XXXXXX XXXXXXX XXXXXX XXXXXX XXXXXXX XXXXXX XXXXXXX XXXXXXX
Casos de prueba adicionales
Cortesía de la solución de referencia de Martin Büttner (tenga en cuenta que solo debe generar una sola coordenada, no todas):
Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Output: 4 2 2 3 3 2 6 4 2 2 2 5 2 2 2 6 7 5 7 0 6 4 6 0 5 3 5 10 4 9 9 6 3 8 3 6 2 7 2 6 2 5 2 4 2 4
Este es el código de golf. La presentación más corta gana.
Respuestas:
Pyth,
157156153 bytesPuedes probarlo aquí.
Este fue un problema divertido para el golf! Todavía me estoy acostumbrando a Pyth, pero es un lenguaje realmente genial.
fuente
,
: para eso está.(G%+H/N2b)
,(GH)
,(tZH)
.Haskell, 394 bytes
Definitivamente se puede optimizar y también después de verificar rápidamente la corrección
parece que estoy obteniendo resultados diferentes a los publicados. Volveré y comprobaré más detenidamente mi código cuando tenga más tiempo ^^Buen problema por cierto!
EDITAR: edité mi solución teniendo en cuenta los valiosos consejos dados por Zgarb . ¡Ahora funciona perfectamente!
EDIT2: gracias a nimi , he hecho el código aún más pequeño. Ahora también estoy haciendo las comprobaciones para pares e impares en una función en lugar de dos, lo que en general disminuye el recuento de 446 a 414 bytes.
EDITAR3: mejorado aún más de 414 a 400 bytes. Gracias nimi por otros 2 bytes, ¡estás en llamas! :)
EDIT4: 4 bytes más por nimi :)
fuente
0<1
es más cortootherwise
y0/=mod x y
se puede acortar0<mod x y
. Además,1==mod(d)2
esodd d
y0==mod(d)2
eseven d
.0<1
lugar deotherwise
trabajar?t
), ya queelem d[1..div(d*d-d)2]
es cierto para todosd > 2
.otherwise
es solo otro nombre paraTrue
.C,
425396 bytesHay partes en esto que podrían mejorarse, pero funciona para los casos de prueba .
Explicación
fuente
Perl 5, 284 bytes
283 bytes, más 1 para el
-E
indicador en lugar de-e
Mismo código pero con más espacios en blanco, más paréntesis y nombres de variables más largos:
Estoy seguro de que esto se puede jugar más.
fuente
Javascript,
361359 bytesEl código utiliza la asignación de Destructuring . Solo es compatible con Firefox y Safari en este momento.
Explicación
fuente