Você e alguns amigos vão jogar boliche. Há um total de N jogadores. No entanto, existem apenas cadeiras N -1 para sentar. A solução é simples: quem quer que seja a vez atualmente não recebe uma cadeira. Então, quando termina sua vez, eles se sentam na cadeira da pessoa que segue em seguida.
Vamos dar um exemplo. Digamos que você é chamado A , e seus quatro amigos são nomeados B , C , D , e E . Todo jogador se move em ordem alfabética, então você começa primeiro. Uma vez que existem 5 jogadores, existem apenas 4 lugares. Seus amigos estão sentados nos quatro assentos nesta ordem:
CEBD
Você vai, e sim você recebe uma greve! É a vez de B a seguir, então você se senta na cadeira dele. Agora fica assim:
CEAD
B vai. Gutterball! Então ele se senta no lugar de C , e C vai no próximo turno.
BEAD
então C se senta na cadeira de D.
BEAC
e D senta na cadeira de E
BDAC
e por último, E senta na sua cadeira.
BDEC
Você notará que agora o assento de todo mundo está (pseudo) embaralhado. Você deve descobrir, depois de X rodar, quem estará sentado onde?
Entrada
Seu programa deve receber duas entradas do usuário, uma sequência e um número. Não são necessários avisos. A sequência terá de 1 a 51 caracteres alfabéticos (BZ e az) sem repetições. Isso representa a ordem em que seus amigos escolheram sentar. Não haverá A maiúsculo porque esse é você, e você sempre vai primeiro. O número será o número total de rodadas (não jogos) que você e seus amigos jogam. Esse número será positivo e de tamanho razoável (menor que 1000).
Saída
Seu programa deve imprimir a ordem em que seus amigos estão depois de X turnos e de quem é a vez. Por exemplo, se depois de X girar a ordem for BEDGCAHF e a vez de Z , seu programa deverá imprimir exatamente isso:
BEDGCAHF
It is Z's turn.
Aqui estão algumas amostras de entradas e saídas.
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.
Regras
Todo mundo vai em ordem alfabética, com letras maiúsculas tendo precedência sobre letras minúsculas.
Isso é código-golfe, então as brechas padrão se aplicam e as submissões são pontuadas em bytes .
{({}[()])({}<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}
Respostas:
Pitão, 37 bytes
Demonstração Online: Pyth Compiler / Executor
O algoritmo é baseado na solução do @ isaacg. Como ele, começo com a ordem de assento inicial e uso repetidamente a funcionalidade de
X
substituição de para substituir o próximo jogador pelo atual.Mas, diferentemente de sua implementação, que substitui o caractere do próximo jogador pelo atual na ordem de classificação, eu o uso de uma maneira mais ampla. Substituo cada caractere do jogador atual pelo próximo jogador e cada caractere do próximo jogador pelo atual. Isso é feito passando os dois jogadores como segundo argumento e omitindo o terceiro argumento (em
XG"ab")
vez deXG"a""b"
). Como o jogador atual não faz parte da corda (ele está tocando), a primeira substituição não tem efeito algum. Mas isso me permite gerar os dois jogadores ao mesmo tempo, enquanto o @isaacg precisa gerá-los individualmente.Outro recurso novo e louco que eu uso é o operador de atribuição. Até recentemente,
=N1
foi traduzido paraN = 1
, que foi executado com Python. Mas hoje em dia ele compilaassign('N',1)
. Esta função atribuiN
com 1 e retorna o valor (mas não o imprime). Isso permite salvar resultados intermediários, que ocorrem, por exemplo, em uma operação de redução. Com isso, pude armazenar o par de jogadores, que trocaram de posição por último, e imprimir o segundo jogador.Explicação detalhada
fonte
Pitão,
3938 bytesIsso se baseia em aplicações repetidas da operação de localização e substituição
X
. O primeiro bit define uma função de pesquisay
, que encontra ob
th player na ordem do player. Em seguida, executamos repetidamente substituições para encontrar a ordem de assentamento final e, finalmente, imprimimos de quem é a vez.Divertidamente, o código para encontrar a ordem de assentamento final é mais curto (18 bytes) do que o código para imprimir de quem é a vez (21 bytes).
O código pega a sequência de assentos na primeira linha do STDIN e o número de voltas na segunda.
Demonstração.
Explicação:
fonte
%
, se você inserir apenas uma coisa. Mesmo++
iria salvar um byte, mas a melhor maneira (2 bytes) é usarp
:pyQ"It is ""'s turn
++
possui a mesma contagem de bytes que%
ep
salva apenas 1 byte.CJam,
494543 bytesEu acho que isso funciona. Apenas executa o algoritmo como está.
Experimente online.
Explicação
fonte
Python 3, 110
Uma versão otimizada da solução do Sp3000 usando
replace
. A listaS
circula pelas letras presentes em ordem. Realizamos substituições repetidas na sequência especificada de cada caractereS
pelo anterior.fonte
Clipe 10 ,
5956 bytesExemplo
Explicação
A primeira entrada é a lista de jogadores, atribuídos à variável
x
.A segunda entrada é o número de voltas que o programa obtém
ny
.Agradecemos ao Sp3000 pela ideia de usar "substituir".
fonte
Python 3, 128 bytes
Toma duas linhas de entrada via STDIN - ordem de assentos inicial e número de voltas.
Essa é basicamente a mesma ideia de pesquisar e substituir que minha solução CJam . A única parte complicada é que ficamos
A
na parte de trás da ordem do boliche e tornamos nosso índicei
o índice do próximo jogador, aproveitando a indexação por -1 e evitandoIndexError
s.Estes são alguns bytes mais curtos no Python 2, mas estou postando o Python 3 para comparação com a solução do OP.
fonte
int(input())
na linha 4 se torna a entrada (-4), para que seja cancelada. Em seguida, remova os parênteses da impressão e adicione um espaço para um total de 127. Estou faltando alguma coisa?exec
JavaScript (ES6) 116
116 bytes como programa com E / S via janela pop-up. 114 como uma função testável.
Execute o snippet de código no Firefox para testar.
fonte
PowerShell, 168 bytes
Decidi que todas as minhas respostas neste site estarão no PowerShell. Um dia terei uma resposta que pode competir ...
chame a função assim:
x Bb 2
fonte
Essa resposta não vai ganhar, mas eu a jogo de qualquer maneira.
Python 3, 167 bytes
fonte
Pip , 54 bytes
Não é muito competitivo, mas pelo menos eu consigo mostrar as cordas mutáveis de Pip e o comando Swap. Toma a ordem dos assentos e o número de rodadas como argumentos da linha de comando (que são atribuídos a
a
eb
, respectivamente).Explicação:
Teria sido 49 se eu me desse ao trabalho de implementar
SS
(classificar como strings) ao mesmo tempo que o fizSN
(classificar numérico) ... Ah, bem, os perigos de ter uma linguagem em desenvolvimento.fonte
Python 2 , 105 bytes
Experimente online!
Golfe de:
fonte
Perl 5 , 102 + 1 (-n) = 103 bytes
Experimente online!
Entrada
Ordem de lugares, seguida do número de voltas sem espaços:
fonte