Alguns de vocês podem estar familiarizados com a maneira como uma motocicleta muda. Mas para aqueles que não, parece que isso
6
5
4
3
2
N
1
Agora, quero saber em que equipamento estou depois de realizar alguns turnos para cima e para baixo. O programa deve funcionar em ponto morto.
Entrada de amostra:
V^^
Saída de amostra:
2
Como você pode ver, reduzi a marcha uma vez de N para 1 e reduzi a marcha duas vezes para a segunda marcha.
Este é um código de golfe. A resposta mais curta em bytes vence.
Nota: A entrada pode ter 2 caracteres. Pode ser U e D para cima e para baixo ou o que você quiser , tem que ser uma string . Você não pode passar da 1ª ou 6ª marcha. Se você estiver na 6ª e aumentar a marcha novamente, ela permanecerá na 6ª. Boa sorte!
Respostas:
JavaScript (ES6),
49484746 bytesEspera:
1
para baixo7
para cimaFormatado e comentado
As engrenagens são mapeadas da seguinte maneira:
O que nos permite verificar facilmente a validade da engrenagem atual com:
Demo
Mostrar snippet de código
fonte
05AB1E ,
2220 bytesExperimente online!
Explicação
fonte
MATL,
322823 bytes5 bytes salvos graças a @Luis
Esta solução utiliza
'2'
para a troca de marchas para cima e'0'
para marchas para baixo.Experimente no MATL Online
Explicação
fonte
V ,
20, 15 bytesExperimente online!
Entrada é uma sequência de caracteres
h
(para cima) el
(para baixo).Obrigado a @nmjcman por salvar 5 bytes e me ensinar sobre um recurso do vim que eu nunca soube!
Se pudéssemos assumir que a entrada nunca sai dos limites, seria simplesmente 9 bytes:
Mas infelizmente isso não é permitido.
Explicação:
fonte
n
, não1
.Java 7,
106105103 bytesExplicação:
Código do teste:
Experimente aqui.
Saída:
fonte
Haskell,
595351 BytesUsa
0
para baixo e2
para cima. Exemplo de uso:Obrigado a @xnor por descolar 6 bytes! Além disso, acontece que eu não preciso de um nome de função ou parênteses, então isso significa mais 2 bytes.
fonte
read[c]-2
.g=
.g=
porque é mais claraJavaScript (ES6),
4858 bytesUso
Atribua-o a uma função e chame-o. Input é uma sequência que contém a
1
para uma mudança para cima e0
para para uma mudança para baixo.fonte
f("001")
que deve retornar N (engrenagem para baixo a 1, engrenagem para baixo ficar no 1, preparam-se para N)PHP 7.1, 71 bytes
muda
$g
de -1 para 5, usa o deslocamento negativo da corda na primeira marcha.Execute com
-nr
, forneça uma string de deslocamento como argumento de linha de comando.fonte
Geléia ,
1714 bytesUsa
6
para cima e0
para baixo.Experimente online!
Como funciona
fonte
Ruby, 58 bytes
A entrada esperada é 'v' para um downshift e '^' para upshift
fonte
Processando JS (modificado) 121 bytes
Ungolfed
Experimente online!
Eu fui com PJs desde que eu conheço bem. O único problema é o uso versão que é muito estritamente digitado. Não posso deixar de fora parênteses e muitos outros truques. É bem simples. A entrada deve ir para a variável
a
e é minúsculau d
. O programa faz um loop até atingir o final da string e a cada iteração, verifica se é au ou d. Se for e não tentará "mudar" o local onde você pode mudar. No final, imprimo os resultados!fonte
The input should go into the variable a
O uso de entrada codificada não é um método de entrada padrão, veja aqui .void f(String[] a){...}
Isso é quase 100 bytes.k, 25 bytes
Ele recebe a entrada como uma seqüência de caracteres e usa
[
para redução]
de marcha e mudança de marcha, porque estão convenientemente situados.Exemplos:
fonte
GNU sed ,
8987 + 1 (sinalizador r) = 88 bytesComo o sed não possui tipos inteiros ou operações aritméticas, a solução é obtida usando apenas expressões regulares.
Ele funciona deslizando o ponteiro com
x
base em cada turno de entrada, esquerdo (paraU
p) ou direito (D
próprio), ao longo de uma fita não envolvente que contém apenas as células65432N1
. A resposta no final é o valor na célula esquerda do ponteiro.Exemplo de execução: ou Experimente online!
Explicação:
fonte
GNU sed ,
7673 bytesInclui +1 para
-r
A produção é unária, exceto a neutra, que ainda é
N
(consulte este consenso ).Experimente online!
Isso basicamente conta para cima e para baixo em unário e depois converte 1 em N e 0 em 1.
fonte
1
o valor inicial, comoN
, e nada como1
.s/$/1/;:;/1{6}/!s/^U(.*)/\11/;s/^D(.*)1/\1/;t;s/U|D//;t;s/^1$/N/;s/^$/1/
Rebol,
9693 bytesUngolfed:
Exemplo de uso (no console Rebol):
fonte
> <> , 35 bytes
Um pedaço de código entusiasmado que incentiva você a dirigir acima do limite de velocidade.
Aceita quaisquer duas entradas cujo código módulo 3 seja 0 e 2, por exemplo, 0e 2.
Para pesar mais, eu recomendo o uso de <e >.
Explicação:
Você pode tentar aqui !
fonte
EspecificaçõesBAS - 102
Move o índice da sequência dependendo da entrada e imprime o caractere relevante.
fonte
Pitão, 32 bytes
Usa espaço e nova linha para baixo e para cima.
Explicação
Há quase certamente uma maneira melhor de fazer o incremento e a saída.
fonte
CJam ,
2422 bytesUsa
(
para baixo e)
para cima.Experimente online!
Explicação
fonte
Lote, 144 bytes
Aceita STDIN, usando
0
para ir para uma marcha mais baixa e6
para uma marcha mais alta. Esses números foram escolhidos para facilitar a ignição da engrenagem atual. Finalmente, se a transmissão é1
, em seguida,N
é impressa de outra forma0
é convertido para1
e a engrenagem é impresso.fonte
Javascript ES6 não restrito,
136120 caracteres136 caracteres para
V^
120 caracteres para
-+
fonte
Retina , 65 bytes
Usa
u
ed
para cima e para baixo.Experimente online!
Explicação
Este programa funciona mantendo
1N23456
a sequência de instruções. Ele mantém o controle da engrenagem atual, tendo um espaço atrás dela. Depois, são necessárias uma instrução de cada vez até que não haja mais.Comece colocando
1 N23456
antes da entrada. O espaço anteriorN
indica queN
é a marcha atual.Esses são dois estágios de substituição, agrupados e executados até que parem de alterar a sequência:
O primeiro lida com a mudança de marcha. Ele procurará qualquer número de marchas após o espaço, seguido de a e
6
, em seguida, seguido poru
(u
indica a instrução para mudar de marcha). Se houvesse caracteres antes do 6, ele trocaria o espaço pelo caractere imediatamente após, excluí-lou
e deixaria o restante da string intacta. Como o jogo6
é obrigatório na partida, ele só trocará o espaço com qualquer personagem antes do6
. Ele nunca será trocado com o6
.O segundo estágio lida com a mudança de marchas para baixo e funciona da mesma forma. Ele procura opcionalmente um personagem antes do espaço, depois outras artes depois de terminar
6
, seguido pord
. Ele troca o espaço com o personagem antes dele, exclui od
e deixa o resto intacto. Se o espaço estava no início da sequência, não havia correspondência para um caractere antes do espaço, portanto, nenhuma troca ocorre.Depois que nenhuma das substituições acima pode ser realizada, todas as trocas de marchas foram concluídas. A linha é limpa de tudo, exceto a engrenagem imediatamente após o espaço. Esta é a engrenagem final.
fonte
Powershell,
1128785 bytes$i=1;switch([char[]]$args[0]){'^'{if(5-gt$i){$i++}}'v'{if(1-le$i){$i--}}}'1N2345'[$i]
destroçado
economizou 25 bytes lendo as dicas do codegolf do powershell
economizou 2 bytes invertendo os operadores gt / le
fonte
Perl 6, 144 bytes
Funciona como deveria, acredito. Melhorias são bem vindas. Primeira vez que usei Perl para qualquer coisa, mas adorei o pensamento da linguagem, então tive que tentar.
fonte
Clojure, 74 bytes
Dobra a string de deslocamento, mantendo um índice como acumulador. Cada iteração aumenta ou diminui o índice e o prende no intervalo de 0 a 6. Finalmente, uma corda que segura as engrenagens é indexada e retornada.
Retorna um caractere Clojure que representa a engrenagem atual. A engrenagem 1 é retornada como
\1
e a engrenagem 'N' é retornada como\N
.Explicação pré-golfe. Siga os números, pois ele não lê bem de cima para baixo.
fonte
Python 3,
6763 bytesSolução bastante simples.
-4 bytes graças a @ovs!
fonte