Tarea:
Su tarea es crear un programa que, cuando se le da un número de hilos y el número de iteraciones de una trenza, dirá a dónde va cada hilo. Las reglas son las siguientes:
- El número de hilos siempre será impar, y entre 3 y 6000 (inclusive)
- Cuando comience, los hilos se dividirán en 2 (casi) grupos iguales, el
left
y elright
. Elleft
tendrá una hebra más cuando se inicia.
Para una entrada de 7:
/ / / / \ \ \
1 2 3 4 5 6 7
- Cada iteración, el filamento más externo del lado con más filamentos se colocará en el centro mirando hacia la dirección opuesta. El centro se define como entre las hebras que enfrenta opuestos:
////middle\\\
.
1 iteración de la entrada 7 (el filamento 1 se movió al centro):
/ / / \ \ \ \
2 3 4 1 5 6 7
Ejemplo:
Entrada:
3 4
Computaciones:
1 2 3
\
2 1 3
/
2 3 1
\
3 2 1
/
3 1 2
Salida:
3 1 2
Reglas:
- No necesita mostrar las barras para la dirección del filamento, solo los números.
- Solo necesita mostrar los números después de la última iteración.
- Su salida será identificadores delimitados por espacios de los hilos
- La entrada tendrá la forma:
strands [space] iterations
- El número de hilos siempre será impar, y 3 <= x <= 6000
- Este es el código de golf , por lo que gana el código más corto.
11 2
sería2345611178910
?123 -> 213 -> 231 -> 321 -> 312
.Respuestas:
GolfScript, 33 caracteres
La entrada se debe proporcionar en stdin.
Ejemplos (puede probar en línea ):
fuente
Python: 179
240, 152 caracteresPrimero, el 179
Para
N
hilos ei
iteraciones, esta respuesta usaO(1)
espacio yO(N)
tiempo. Simplemente calculo la posición final de cada capítulo, ¡nunca iterando sobre las posiciones intermedias!gran edición: jugó esta respuesta cambiando los condicionales a álgebra booleana. También escribí una larga explicación de cómo funciona. TL; DR: patrones formulados, división de módulo.
Ahora el 152
Esta es una pitón más razonablemente golfizada. (editar: gracias a Alex Thornton por editar de 165 a 152)
fuente
l
yv
las variables y cambiando lainsert
de una asignación rebanada.Python 2 (109) / Python 3 (121)
Python 2
Python 3
El código debe haber sido sobornado por Python 2 para mostrar sus ventajas de golf sobre Python 3: los rangos son listas, el redondeo de división a int, la impresión no comienza una nueva línea. Lo extraño
0-i%2
es porque se-i%2
evalúa como(-i)%2
.Probablemente haya un enfoque más eficiente que iterar, es decir, calcular cada resultado final directamente. La operación de trenzado tiene un período de 2 * s, por lo que no puede ser tan complicado.
fuente
Ruby, 105
Solo mucha manipulación de sets. ¡Empuje, haga estallar, retroceda y cambie! Intenté no convertir entradas a enteros, pero agregó unos 20 caracteres.
l
yr
(left
yright
) son las colas de "hilo".right
se invierte, así que comenzamos a tirar desde afuera.t
yf
(to
yfrom
) comienzan comoright
yleft
, respectivamente, pero a medida que avanzamos seguimos intercambiándolos para que siempre podamos cambiar el último "hilo"from
y empujarlo ato
(f,t=t<<f.shift,f
). Esto ahorra MUCHO espacio.Luego, revertimos
right
al final.Registro de cambios:
2.2 105 oh sí, el mapa puede tomar un proceso
2.1 108 Y en realidad, simplemente voltear las cosas como parte de la manipulación.
2.0 116 no usan esa matriz temporal. En su lugar, use dos variables de puntero que podamos manipular y seguir apuntando. Entonces solo muestra el final
1.0 123 idea inicial
fuente
Java, 270 caracteres
golfizado:
sin golf:
Correr en línea
fuente