El juego de Sevens se juega de la siguiente manera: los n
jugadores se sientan en círculo y comienzan a contar desde 1, pasando a la izquierda (o de jugador A
a jugador B
).
Cuando se alcanza un número p
que tiene un 7
OR dentro del cual es divisible 7
, entonces el jugador que pronunció el número p-1
, después del siguiente jugador dice p
, debe decir p+1
y el orden de las personas que hablan se invierte. Por ejemplo, si el jugador B
habla 6
, el jugador C
dice 7
, B
dice 8
y el jugador A
dice 9
.
Nota: Para aquellos que quieren jugar en la vida real, si una persona olvida un número (o en la versión donde sevens
no se dice, accidentalmente dice a seven
), se elimina del círculo, pero omitiremos este detalle de este desafío.
El desafío en sí mismo es imprimir qué números debe decir cada jugador en un juego perfecto de Sevens hasta una entrada m
para un n
jugador de entrada .
A modo de ejemplo, donde cinco personas, A
, B
, C
, D
, y E
, son para jugar hasta que lleguen 30
. Ellos juegan de esta manera
A: 1 6 8 13 15 19 23 30
B: 2 7* 12 16 18 24
C: 3 11 17* 25
D: 4 10 21* 26 28*
E: 5 9 14* 20 22 27*29
donde sevens
están marcados con *
. Tenga en cuenta que en 27
y 28
, estamos retrocediendo dos veces, y el juego continúa "normalmente" de D
a E
.
Tenga en cuenta que la salida no tiene que estar en el formato anterior. Simplemente lo imprimí de esa manera para mayor claridad.
Reglas
La entrada es de dos enteros en cualquier orden,
m
representando el último número para decir,n
representando el número de jugadores.La salida puede ser varias matrices o varias cadenas, una para cada jugador. Si usa cadenas, no tiene que usar separadores (sin embargo, si pudiera agregar algunos en sus pruebas de código, agradeceríamos la legibilidad). Si realmente puede imprimirlos en un círculo de alguna manera, eso también es aceptable, y también sería genial.
La salida no tiene que designar qué jugadores son cuáles (es bastante obvio que el primer jugador es el que dice
1
), aunque si la salida no está ordenada por alguna razón, debe dejar en claro qué jugador está hablando qué conjunto de números . Omitir jugadores que no dicen nada también está permitido si dejas en claro qué jugadores están hablando. Agregaré algunos ejemplos más de posibles resultados a continuación.Este es el código de golf, por lo que gana el menor número de bytes.
Como siempre, si el problema no está claro, hágamelo saber. ¡Buena suerte y buen golf!
Ejemplos
>>> sevens_string(30, 5, " ")
'1 6 8 13 15 19 23 30'
'2 7 12 16 18 24'
'3 11 17 25'
'4 10 21 26 28'
'5 9 14 20 22 27 29'
>>> sevens_string(42, 5)
'16813151923303539'
'27121618243140'
'31117253241'
'410212628333742'
'591420222729343638'
>>> sevens_array(20, 3)
[1, 4, 7, 10, 13, 15, 19]
[2, 5, 9, 12, 16, 18]
[3, 6, 8, 11, 14, 17, 20]
>>> sevens_array(18, 10)
[1, 13, 15]
[2, 12, 16, 18]
[3, 11, 17]
[4, 10]
[5, 9]
[6, 8]
[7]
[]
[]
[14]
1 2 3 4 1 2 3 2 1 4 3 2 1 4 1
). No estoy diciendo que sea mejor o peor en términos de desafío: solo que sería más útil en el mundo real.Respuestas:
Pyth, 38 bytes
Pruébalo en línea. Banco de pruebas.
Básicamente un puerto de mi respuesta Python; Probablemente hay una mejor manera. Toma como entrada el número para contar
n
y el número de jugadoresp
en líneas separadas, emite el resultado como una matriz bidimensional.fuente
Haskell, 151 bytes
fuente
mod n 7<1
lugar demod n 7==0
y ens<$>[1..]
lugar demap s[1..]
? Además, ¿por qué no enprint[]
lugar demapM_ print[]
?Python 3, 155 bytes
Utiliza gráficos de tortuga para imprimir en un círculo, de modo que los números pronunciados por el mismo jugador estén en el mismo radio. El radio del círculo aumenta cuando se invierte la dirección, o cuando la secuencia se envuelve alrededor del círculo, por lo que los números anteriores no se sobrescriben.
Salida de muestra para
f(22,6)
fuente
Python 2,
103102101 bytesDefine una función
S(n,p)
que toma el número para contarn
y el número de jugadoresp
e imprime el resultado como un conjunto de cadenas.fuente
Python 2,
919087 bytesImprime una lista de tuplas. Pruébelo en Ideone .
fuente
Jalea ,
2725 bytes (no competitiva)Pruébalo en línea! o verificar todos los casos de prueba .
fuente
Dyalog APL,
504735 bytesEsto muestra los números que cada jugador dijo como una tabla, donde la primera columna enumera a los jugadores. Las filas se rellenan con 0 s de la misma longitud y se omiten las filas sin números.
Verificación
Tenga en cuenta que, en el último ejemplo, se omiten 7 y 8 ya que esos jugadores aún no han dicho nada.
fuente
Rubí, 81
Implementación bastante sencilla. Devuelve una cadena engominada fea (puede agregar un espacio para que sea
"#{k+=1} "
... bueno, una cadena espaciada). Me pregunto si hay un algoritmo más matemático por ahí.fuente
Factor 172
¡Logré hacerlo más tiempo que Haskell, y tan legible como APL! ¿Me dan una galleta?
Es una cita (función anónima) que genera una secuencia circular de vectores. Cada vector comienza con el número de jugador y luego los números que corresponden a ese jugador.
Empecé con esto:
lo cual no es un buen código factorial, pero mucho más claro (sí, estoy usando números como nombres de variables allí, ¡no me mires así!).
fuente
SYMBOL:
mucho mejor el problema de la longitud : ¡nombres de una letra, y deshacerse deset
yget
!JavaScript (ES6) 100
Devuelve el resultado como una matriz de cadenas, sin separadores
O más legible, por 3 bytes más, devolviendo el resultado como una matriz de matrices
Prueba con la nueva y maravillosa función de consola de los fragmentos de pila
fuente
J,
6360595856 bytesVerificación
fuente