Tú y algunos amigos van a jugar bolos. Hay un total de N jugadores de bolos. Sin embargo, solo hay sillas N -1 para sentarse. La solución es simple: quienquiera que sea el turno actual no obtiene una silla. Luego, cuando termina su turno, se sientan en la silla de la persona que sigue.
Tomemos un ejemplo. Digamos que usted es nombrado A , y sus cuatro amigos nombre figura B , C , D , y E . Cada jugador se mueve en orden alfabético, por lo que debes ir primero. Como hay 5 jugadores, solo hay 4 asientos. Tus amigos se sientan en los cuatro asientos en este orden:
CEBD
¡Ve, y sí, tienes una huelga! Es el turno de B a continuación, así que te sientas en su silla. Ahora se ve así:
CEAD
B va. Gutterball! Luego se sienta en el lugar de C , y C va al siguiente turno.
TALÓN
entonces C se sienta en la silla de D.
BEAC
y D se sienta en la silla de E
BDAC
y por último, E se sienta en tu silla.
BDEC
Notarás que ahora el asiento de todos está (pseudo) barajado. Debes descubrir, después de X turnos, ¿quién estará sentado dónde?
Entrada
Su programa debe tomar dos entradas del usuario, una cadena y un número. No se necesitan indicaciones. La cadena tendrá 1-51 caracteres alfabéticos (BZ y az) sin repeticiones. Esto representa el orden en que tus amigos eligieron sentarse. No habrá A mayúscula porque ese eres tú, y tú siempre vas primero. El número será el número total de rondas (no juegos) que jueguen usted y sus amigos. Este número será positivo y de tamaño razonable (menos de 1000).
Salida
Su programa debe imprimir el orden en el que están sentados sus amigos después de X turnos, y de quién es el turno. Entonces, por ejemplo, si después de que X gira el pedido era BEDGCAHF y era el turno de Z , su programa debe imprimir exactamente esto:
BEDGCAHF
It is Z's turn.
Aquí hay algunas entradas y salidas de muestra.
input: E, 4
E
It is A's turn.
input: E, 5
A
It is E's turn.
input: Bb, 2
AB
It is b's turn.
input: dgOPZXKDQYioHflFhpqzUsSaeILwckVNEtGTCJBvnruRyWMmjxb, 999
JNuvFDqjwEPVnMSlOWXgAZyGKordIRBtkamziphcUYbxfCsTQeH
It is L's turn.
Reglas
Todos van en orden alfabético, con mayúsculas que tienen prioridad sobre las minúsculas.
Este es el código de golf, por lo que se aplican las lagunas estándar y las presentaciones se puntúan en bytes .
{({}[()])({}<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}
Respuestas:
Pyth, 37 bytes
Demostración en línea: Pyth Compiler / Executor
El algoritmo se basa en la solución de @ isaacg. Al igual que él, comienzo con el orden inicial de los asientos y uso repetidamente la funcionalidad de
X
reemplazo para reemplazar al siguiente jugador con el jugador actual.Pero a diferencia de su implementación, que reemplaza el carácter del próximo jugador por el jugador actual en el orden de asientos, lo uso de una manera más amplia. Reemplazo cada personaje del jugador actual por el siguiente jugador y cada personaje del siguiente jugador por el jugador actual. Esto se logra pasando a ambos jugadores como segundo argumento y omite el tercer argumento (en
XG"ab")
lugar deXG"a""b"
). Como el jugador actual no forma parte de la cadena (está jugando), el primer reemplazo no tiene ningún efecto. Pero me permite generar ambos jugadores al mismo tiempo, mientras que @isaacg tiene que generarlos individualmente.Otra nueva característica loca que uso es el operador de asignación. Hasta hace poco
=N1
se tradujo aN = 1
, que se ejecutó con Python. Pero hoy en día se compilaassign('N',1)
. Esta función se asignaN
con 1 y devuelve el valor (pero no lo imprime). Esto permite guardar resultados intermedios, que ocurren por ejemplo en una operación de reducción. Usando esto pude almacenar el par de jugadores, que cambiaron las posiciones al final, e imprimir el segundo jugador.Explicación detallada
fuente
Pyth,
3938 bytesEsto se basa en la aplicación repetida de la operación de búsqueda y reemplazo,
X
. El primer bit define una función de búsqueday
, que encuentra alb
jugador en el orden del jugador. Luego, repetidamente realizamos sustituciones para encontrar el orden final de asientos, y finalmente imprimimos de quién es el turno.Divertidamente, el código para encontrar el orden de asiento final es más corto (18 bytes) que el código para imprimir de quién es el turno (21 bytes).
El código toma la cadena de asiento en la primera línea de STDIN y el número de vueltas en la segunda.
Demostración.
Explicación:
fuente
%
, si solo inserta una cosa. Incluso++
ahorraría un byte, pero la mejor manera (2 bytes) es usarp
:pyQ"It is ""'s turn
++
tiene el mismo recuento de bytes%
yp
solo guarda 1 byte.CJam,
494543 bytesCreo que esto funciona. Simplemente ejecuta el algoritmo tal como está.
Pruébalo en línea.
Explicación
fuente
Pitón 3, 110
Una versión optimizada de la solución
replace
de Sp3000 usando . La lista seS
desplaza por las letras presentes en orden. Realizamos reemplazos repetidos en la cadena dada de cada carácter deS
por el anterior.fuente
Clip 10 ,
5956 bytesEjemplo
Explicación
La primera entrada es la lista de jugadores, asignada a la variable
x
.La segunda entrada es el número de turnos con los que obtiene el programa
ny
.Gracias a Sp3000 por la idea de usar "reemplazar".
fuente
Python 3, 128 bytes
Toma dos líneas de entrada a través de STDIN: orden de asiento inicial y luego número de vueltas.
Esta es básicamente la misma idea de buscar y reemplazar que mi solución CJam . La única parte difícil es que nos quedamos
A
en la parte posterior del orden de bolos y hacemos de nuestro índicei
el índice del próximo jugador de bolos, aprovechando así la indexación por -1 y evitandoIndexError
s.Esto es unos bytes más cortos en Python 2, pero estoy publicando Python 3 para compararlo con la solución de OP.
fuente
int(input())
en la línea 4 se convierte en input (-4) para que se cancele. Luego quite los paréntesis de la impresión y agregue un espacio para un total de 127. ¿Me estoy perdiendo algo?exec
JavaScript (ES6) 116
116 bytes como programa con E / S a través de una ventana emergente. 114 como una función comprobable.
Ejecute el fragmento de código en Firefox para probar.
fuente
PowerShell, 168 bytes
He decidido que todas mis respuestas en este sitio estarán en PowerShell. Algún día tendré una respuesta que pueda competir ...
llama a la función así:
x Bb 2
fuente
Esta respuesta no va a ganar, pero la arrojaré de todos modos.
Python 3, 167 bytes
fuente
Pip , 54 bytes
No es muy competitivo, pero al menos puedo mostrar las cadenas mutables de Pip y el comando Intercambiar. Toma el orden de asiento y el número de rondas como argumentos de línea de comandos (que se asignan a
a
yb
, respectivamente).Explicación:
Hubiera sido 49 si me hubiera molestado en implementar
SS
(ordenar como cadenas) al mismo tiempo que lo hiceSN
(ordenar numérico) ... Ah, bueno, los peligros de tener un lenguaje en desarrollo.fuente
Python 2 , 105 bytes
Pruébalo en línea!
Golf de:
fuente
Perl 5 , 102 + 1 (-n) = 103 bytes
Pruébalo en línea!
Entrada
Orden de asientos, seguido por número de vueltas sin espacios:
fuente