Meus dois filhos gostam de brincar com o seguinte brinquedo:
As áreas coloridas com as formas internas podem ser tocadas e a tartaruga ilumina a área e emite um som ou diz o nome da cor ou da forma interna. O botão do meio altera o modo. Há um modo no qual as áreas tocam notas musicais diferentes quando tocadas, com um toque: se a criança tocar três áreas consecutivas no sentido horário, uma melodia especial 1 é tocada. Se as três áreas consecutivas tocadas forem colocadas no sentido anti-horário, uma melodia especial 2 será tocada.
O desafio
Vamos simular a lógica interna do brinquedo. Dada uma sequência com três pressionamentos do garoto, retorne dois valores distintos e coerentes se os três pressionamentos forem para áreas consecutivas (sentido horário ou anti-horário) e um terceiro valor distinto, se não estiverem.
Detalhes
- As áreas de entrada serão nomeadas com um caractere cada, que pode ser sua cor:
ROYGB
para vermelho, laranja, amarelo, verde e azul; ou sua forma:HSRTC
para coração, quadrado, estrela (R
), triângulo e círculo. Caso não importa, você pode optar por trabalhar com entrada e saída apenas em maiúsculas ou minúsculas. - O programa receberá uma string (ou array de caracteres ou qualquer outra coisa equivalente) com três pressionamentos. Exemplos (usando as cores):
RBO
,GYO
,BBR
,YRG
,YGB
,ORB
... - O programa produzirá três valores coerentes e distintos para representar os três resultados possíveis: um primeiro valor se a combinação não acionar uma melodia especial, um segundo valor se a combinação acionar a melodia especial no sentido horário e um terceiro valor se a combinação acionar o melodia especial no sentido anti-horário. Exemplo:
0
para nenhuma combinação especial,1
para a melodia desencadeada por uma combinação no sentido horário e-1
para a melodia desencadeada por uma combinação no sentido anti-horário. - Você não precisa se preocupar em lidar com entradas incorretas.
Casos de teste
Input Output // Input based on colors
--------------
RBO 0 // No special combination
GYO -1 // Counterclockwise melody triggered
BBR 0 // No special combination
YRG 0 // No special combination
YGB 1 // Clockwise melody triggered
ORB -1 // Counterclockwise melody triggered
OOO 0 // No special combination
BRO 1 // Clockwise melody triggered
Este é o código-golfe , portanto, pode ganhar o código mais curto para cada idioma!
fonte
[0,0]
,[1,0]
,[0,1]
permitido como saída? Vejo a resposta do Mathematica fazendo isso e economizaria 3 bytes na resposta 05AB1E.Respostas:
Java 8,
483933 bytes-6 bytes graças a @RickHitchcock , por isso não deixe de votar também !
Toma cor maiúscula como String de entrada. Saídas
-1
para none,7
no sentido horário e15
no sentido anti-horário.Experimente online.
Explicação:
Resposta antiga de 39 bytes:
Toma cor maiúscula como String de entrada. Saídas
9362
para none,0
no sentido horário e1
no sentido anti-horário.Experimente online.
Explicação:
fonte
10922
(divisão inteira por/6
) ou8191
(divisão inteira por/8
), mas eu escolho/7
porque é o índice do espaço na String. :)JavaScript (ES6), 41 bytes
Toma as iniciais coloridas como entrada. Retorna
2
para none,true
no sentido horário oufalse
no sentido anti-horário.Experimente online!
fonte
s=>('ROYGBRO_ORBGYOR'.search(s)+8)/8|0
Python 2 , 36 bytes
-1
- Nenhuma0
- No sentido horário1
- No sentido anti-horárioExperimente online!
fonte
Excel, 29 bytes
Cores maiúsculas como entrada.
Retorna
#VALUE!
para nenhum padrão,TRUE
no sentido horário, no sentidoFALSE
anti-horário.Pode quebrar
IFERROR( ,0)
para+11 bytes
lidar com exceção e retornar '0' para casos sem padrão.fonte
05AB1E ,
1511 bytesEconomizou 4 bytes graças a Kevin Cruijssen e Magic Octopus Urn .
Usa formas.
Saída
[0, 0]
para nenhuma ,[1, 0]
para a direita e[0, 1]
para a esquerdaExperimente online! ou como um conjunto de testes
Explicação
fonte
.•1´₃éC•Â‚εXå}¥
resultando em[0]
,[1]
ou[-1]
, então um de mim. Btw, eu acho que (não tenho certeza), você pode salvar três bytes, removendo os últimos três, saída[0, 0]
,[1, 0]
e[0, 1]
como valores distintos. Vejo que a resposta do Mathematica faz o mesmo. Solicitará à OP a verificação.‚.•ÌöJη•så
é de 11 bytes se[1,0], [0,1] and [0,0]
for considerado único (a menos que eu esteja perdendo algo óbvio aqui, a adiçãoƶO
ao final desse 11 byter ainda é 13 para a mesma resposta 0, 1, 2 que você tem agora). Casos de teste . Casos de teste 2 . A inversão de pedidos elimina a necessidade do loop.JavaScript (ES6), 32 bytes
Retorna -1 se não houver combinação, 15 se for no sentido anti-horário, 7 se for no sentido horário.
Mostrar snippet de código
fonte
Wolfram Language (Mathematica) ,
4236 bytesExperimente online!
Conta o número de vezes que a entrada aparece em ambos
"ROYGBRO"
e"ORBGYOR"
. Retorna{1,0}
no sentido horário,{0,1}
no sentido anti-horário e{0,0}
sem combinação especial.Com o custo de apenas mais um byte, podemos obter resultados de
0
graça,1
no sentido horário e2
no sentido anti-horário"ROYGBRO.ORBGYORBGYOR"~StringCount~#&
.fonte
código de máquina x86,
3936 bytesMontagem:
Experimente online!
A saída é
23
para none,7
no sentido horário e15
no sentido anti-horário. Com base na resposta de @RickHitchcock.Salva 3 bytes usando uma instrução de comparação de cadeias SSE em vez de usar libc.
fonte
strstr
sempre será um endereço de 32 bits (4 bytes). O código da máquina na minha postagem está desvinculado.Perl 5
-p
, 30 bytesExperimente online!
fonte
APL (Dyalog),
2218 bytes-4 bytes graças a @ngn
Toma uma sequência de iniciais de cores. Saídas 0 para nenhum padrão especial, -1 no sentido anti-horário, 1 no sentido horário.
Experimente online!
fonte
Python 2 ,
4543 bytesExperimente online!
Com idéias e crédito sério para @DeadPossum
-2 com agradecimentos a @JoKing. Agora gera -1 = no sentido anti-horário, 0 = nenhum, 1 = no sentido horário.
Meu esforço original está abaixo para fins históricos.
Python 2 ,
5251 bytesExperimente online!
0 = nenhum, 1 = no sentido anti-horário, 2 = no sentido horário
fonte
Python 2 ,
3536 bytes+1 - por algum motivo, pensei que todos os botões fossem distintos> _ <
Desenvolvido independentemente do que eu acabei de ver (e agora votado) por Dead Possum
Experimente online!
fonte
Stax ,
1413 bytesExecute e depure
A saída é
fonte
Pip , 19 bytes
Saídas
10
para sentido horário, sentido01
anti-horário,00
para nenhum dos dois. Experimente online!Explicação
fonte
J , 21 bytes
Experimente online!
Como funciona
Atinge a quantidade máxima de reutilização de função.
fonte
Gelatina , 12 bytes
Experimente online!
-4 graças a Jonathan Allan .
No sentido horário: No sentido
[1, 0]
anti-horário:
[0, 1]
Outro:
[0, 0]
fonte
R , 38 bytes
Experimente online!
Devoluções:
integer(0)
2
1
fonte
Carvão , 18 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Lisp comum , 68 bytes
Experimente online!
fonte
Limpo , 63 bytes
Experimente online!
[True, True]
sem ruídos especiais,[True, False]
no sentido anti-horário,[False, True]
no sentido horário.fonte
Japonês,
1714 bytesPega as cores como entrada, em minúsculas. Retorna
0
no sentido horário,1
no sentido anti-horário ou-1
se não houver combinação.Tente
Expanação
fonte
Ruby ,
5336 bytesExperimente online!
Entrada: um número inteiro de 3 dígitos, em que os dígitos representam cores:
Saída: 0 no sentido horário, 1 no sentido anti-horário,
nil
caso contrário.fonte
C (gcc) , 55 bytes
Retorna 0 para nenhum, -1 para CCW e 1 para CW.
Experimente online!
fonte