O jogo de Sevens é jogado da seguinte forma: os n
jogadores sentam em círculo e começam a contar a partir de 1, passando para a esquerda (ou de jogador A
para jogador B
).
Quando um número p
que tem um 7
OU é divisível por, 7
é atingido, o jogador que falou o número p-1
, depois que o próximo jogador diz p
, deve dizer p+1
e a ordem das pessoas que fala está invertida. Por exemplo, se o jogador B
fala 6
, o jogador C
diz 7
, B
diz 8
e o jogador A
diz 9
.
Nota: Para aqueles que querem jogar na vida real, se uma pessoa esquecer um número (ou na versão em que sevens
não se diz, acidentalmente diz a seven
), eles serão eliminados do círculo, mas omitiremos esse detalhe desse desafio.
O desafio em si é imprimir quais números cada jogador deve dizer em um jogo perfeito de Sevens até uma entrada m
para n
jogadores de entrada .
Como um exemplo, onde cinco pessoas, A
, B
, C
, D
, e E
, se jogar até chegarem 30
. Eles jogam dessa maneira
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
onde sevens
estão marcados com *
. Observe que em 27
e 28
, estamos invertendo duas vezes, e o jogo continua "normalmente" de D
para E
.
Observe que a saída não precisa estar no formato acima. Simplesmente imprimi dessa maneira para ter mais clareza.
Regras
A entrada é dois números inteiros em qualquer ordem,
m
representando o último número a dizer,n
representando o número de jogadores.A saída pode ser de várias matrizes ou várias strings, uma para cada jogador. Se você usa strings, não precisa usar separadores (no entanto, se você puder adicionar alguns em seus testes de código, agradecemos a legibilidade). Se você realmente puder imprimi-los em um círculo de alguma forma, isso também é aceitável e seria muito legal também.
A saída não precisa designar quais jogadores são (é óbvio que o primeiro jogador é quem diz
1
), embora se a saída não for classificada por qualquer motivo, você deve deixar claro qual jogador está falando qual conjunto de números . Omitir jogadores que não dizem nada também é permitido se você deixar claro quais jogadores estão falando. Vou adicionar mais alguns exemplos de possíveis resultados abaixo.Esse é o código golf, portanto o menor número de bytes vence.
Como sempre, se o problema não estiver claro, entre em contato. Boa sorte e bom golfe!
Exemplos
>>> 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
.) Não estou dizendo que isso seja melhor ou pior em termos de desafio: ele apenas seria mais útil no mundo real.Respostas:
Pitão, 38 bytes
Experimente online. Suíte de teste.
Basicamente, uma porta da minha resposta Python; provavelmente há uma maneira melhor. Toma como entrada o número a contar
n
e o número de jogadoresp
em linhas separadas, produz o resultado como uma matriz bidimensional.fonte
Haskell, 151 bytes
fonte
mod n 7<1
vez demod n 7==0
e ems<$>[1..]
vez demap s[1..]
? Além disso, por que não emprint[]
vez demapM_ print[]
?Python 3, 155 bytes
Utiliza gráficos de tartaruga para imprimir em círculo, de modo que os números falados pelo mesmo reprodutor estejam no mesmo raio. O raio do círculo aumenta quando a direção é invertida ou quando a sequência envolve o círculo, para que os números anteriores não sejam substituídos.
Saída de amostra para
f(22,6)
fonte
Python 2,
103102101 bytesDefine uma função
S(n,p)
que leva o número para contarn
e o número de jogadoresp
e imprime o resultado como uma matriz de seqüências de caracteres.fonte
Python 2,
919087 bytesImprime uma lista de tuplas. Teste em Ideone .
fonte
Gelatina ,
2725 bytes (não concorrente)Experimente online! ou verifique todos os casos de teste .
fonte
Dyalog APL,
504735 bytesIsso exibe os números que cada jogador disse como uma tabela, onde a primeira coluna enumera os jogadores. As linhas são preenchidas com 0 s no mesmo comprimento e as linhas sem números são omitidas.
Verificação
Observe que, no último exemplo, 7 e 8 são omitidos, pois esses jogadores ainda não disseram nada.
fonte
Ruby, 81
Implementação bastante direta. Retorna uma seqüência feia de glommed (você pode adicionar um espaço para torná-la
"#{k+=1} "
... bem, uma sequência espaçada). Gostaria de saber se existe algum algoritmo matemático por aí.fonte
Fator 172
Consegui fazer isso por mais tempo que Haskell e tão legível quanto a APL! Eu recebo um biscoito?
É uma cotação (função anônima) que gera uma sequência circular de vetores. Cada vetor começa com o número de jogador e, em seguida, os números que correspondem a esse jogador.
Comecei com isso:
que não é um bom código de fator, mas muito mais claro (sim, estou usando números como nomes de variáveis lá, não me olhe assim!).
fonte
SYMBOL:
muito melhor a questão do comprimento : nomes de uma letra e livrar-se deset
eget
!JavaScript (ES6) 100
Retornando resultado como uma matriz de strings, sem separadores
Ou mais legível, por mais 3 bytes, retornando resultado como uma matriz de matrizes
Teste usando o novo recurso maravilhoso de console dos Snippets de pilha
fonte
J,
6360595856 bytesVerificação
fonte