A cena é:
Peter está na academia com seu amigo Brian quando Brian de repente precisa desesperadamente de seu inalador. Brian consegue contar a Peter o código de sua fechadura de combinação antes que ele desmaie no chão.
No momento em que Peter chega ao armário de Brian e vê o que o indicador está apontando, Stewie o embosca e joga uma lata cheia de spray de pimenta em seu rosto, cegando Peter.
Peter agora deve tentar abrir a fechadura sem olhar para ela. Ele começa a girar o dial para a direita, contando os números enquanto passa por eles. Ele então, no número correto, começa a girar o dial para a esquerda, ainda contando, e finalmente o gira para a direita até que a fechadura se abra.
O desafio:
Escreva uma função / programa que aceite duas entradas, a combinação de Brian e a posição do indicador. Saída os números que Peter tem que contar.
Regras:
- A combinação e a posição do indicador devem ser argumentos separados.
- A entrada pode ser no prompt de comando ou como argumentos de função.
- A saída deve ser impressa na tela / exibida de outra forma (não no arquivo)
- Suponha que a posição inicial não seja igual ao primeiro número e que todos os três números da combinação sejam exclusivos
- É o cadeado mostrado na figura abaixo, com números possíveis: 0-39.
Instruções:
Para abrir o bloqueio abaixo, você precisa seguir um conjunto de instruções:
- Você deve conhecer seu código. Suponha que seja (38, 16, 22) por enquanto.
- Gire o dial 3 vezes para a direita (passando o número inicial três vezes) e depois pare quando o primeiro número (38) estiver alinhado com o indicador
- Gire o dial 1 volta completa para a esquerda, passando o primeiro número e pare quando o segundo número (16) estiver alinhado com o indicador.
- Gire o dial para a direita e pare quando o terceiro número (22) estiver alinhado com o indicador
- Puxe a trava para baixo
Exemplo:
Input
38 16 22
33
Output
33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 39 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22
Aplicam-se regras de código padrão de golfe.
As soluções postadas posteriormente ainda podem vencer se forem menores que a resposta de Dennis.
function combination(code){alert("Help! Someone open this locker, the combination is "+code+"!")}
Respostas:
CJam,
5239 bytesExperimente online no intérprete CJam .
Como funciona
fonte
Groovy,
189175 bytesAssume que o indicador é passado como arg0 e a combinação é passada como arg1, arg2 e arg3 na linha de comando ...
fonte
Perl 5 , 129 + 1 (-a) = 130 bytes
Experimente online!
Quão?
fonte
Python 2, 262 bytes
Parece tão longo. Mas também há muita mudança acontecendo.
Experimente online!
Eu acho que posso concatenar algumas partes melhor na minha última linha, mas ainda sou novo no código do golfe e não sei como lidar com essa combinação de lista de uma maneira curta.
Alguma idéia para melhorar isso?
fonte
Haskell ,
135112 bytesExperimente online!
Economizou 23 bytes graças a Laikoni
fonte
l s t=
declarando um operador infixs#t=
. Ele também funciona há mais de dois argumentos:(a%b)c s=
.s+1
.