Digamos que estou a dez passos do meu destino. Eu ando lá seguindo o velho ditado, "Dois passos à frente e um passo atrás". Dou dois passos à frente, um atrás, até estar exatamente no meu destino. (Isso pode envolver ultrapassar meu destino e retornar a ele). Quantos passos eu andei?
Claro, talvez eu não esteja a 10 passos de distância. Eu posso estar a 11 passos, ou 100. Eu poderia medir dez passos e continuar andando para frente e para trás para resolver o problema, ou ... Eu poderia escrever algum código!
- Escreva uma função para calcular quantos passos são necessários para afastar N passos, na sequência: dois passos adiante, um passo atrás.
- Suponha que você tenha começado na etapa 0. Conte os "dois passos à frente" como dois passos, não um.
- Suponha que todas as etapas tenham um comprimento uniforme.
- Ele deve retornar o número de etapas executadas pela primeira vez quando você alcança esse espaço. (Por exemplo, 10 passos de distância levam 26 passos, mas você o alcançaria novamente no passo 30). Estamos interessados nos 26.
- Use qualquer idioma que você quiser.
- Ele deve aceitar qualquer número inteiro positivo como entrada. Isso representa a etapa de destino.
- Menor número de bytes ganhos.
Exemplo:
Quero dar 5 passos:
| | | | | | <- I'm at step 0, not yet on the grid.
| |X| | | | <- I take two steps forward, I'm on step 2: the count is 2
|X| | | | | <- I take one step back, I'm on step 1: the count is 3
| | |X| | | <- I take two steps forward, I'm on step 3: the count is 5
| |X| | | | <- I take one step back, I'm on step 2 again: the count is 6
| | | |X| | <- I take two steps forward, I'm on step 4: the count is 8
| | |X| | | <- I take one step back, I'm on step 3 again: the count is 9
| | | | |X| <- I take two steps forward, I'm on step 5: the count is 11
Nesse caso, o resultado da função seria 11.
Resultados de exemplo:
1 => 3
5 => 11
9 => 23
10 => 26
11 => 29
100 => 296
1000 => 2996
10000 => 29996
100000 => 299996
Divirta-se, golfistas!
code-golf
math
arithmetic
AJFaraday
fonte
fonte
Respostas:
Oásis ,
54 bytes1 byte salvo graças a @Adnan
Não deve ser confundido com
23+3
Experimente online!
Quão?
fonte
b
.Python 2 , 18 bytes
Experimente online.
Eu peguei esse truque no xnor há alguns dias atrás…!
fonte
Python 2 , 20 bytes
Experimente online!
fonte
Python 2 , 17 bytes
Experimente online!
Encontrei a expressão por busca de força bruta. Ele efetivamente calcula
n+2*abs(n-2)
.fonte
Poliglota: Java 8 / JavaScript / C # .NET,
161412 bytesExperimente online (Java 8).
Experimente online (JavaScript).
Experimente online (C # .NET) .
Porta da resposta Python 2 de @Lynn , portanto, certifique-se de votar em sua resposta.
Resposta antiga:
Poliglota: Java 8 / JavaScript / C # .NET,
1614 bytesExperimente online (Java 8).
Experimente online (JavaScript).
Experimente online (C # .NET) .
Explicação:
fonte
n=>(--n*3||4)-1
também seja possível em JavaScript (também 14 bytes).R , 20 bytes
Experimente online!
Não percebi o padrão até depois de implementar minha solução menos elegante.
fonte
05AB1E ,
87 bytesExperimente online!
-1 byte graças a Emigna!
fonte
3*s≠i4-
salva um byteOásis , 5 bytes
Explicação:
Experimente online!
fonte
Haskell , 15 bytes
Experimente online!
fonte
ML padrão , 16 bytes
Experimente online!
fonte
Dodos , 27 bytes
Experimente online!
fonte
Geléia , 6 bytes
Experimente online!
fonte
Prolog (SWI) , 21 bytes
Experimente online!
fonte
MATL , 7 bytes
Usa a
3*n-4*(n>1)
fórmula. Multiplique a entrada por 3 (3*
), pressione a entrada novamente (G
) e diminua-a (q
). Se o resultado não for zero (?
), subtraia 4 do resultado (4-
).Experimente online!
fonte
2-|EG+
Gelatina , 4 bytes
Experimente online!
Como funciona
fonte
APL (Dyalog) , 9 bytes
Experimente online!
fonte
C (gcc) , 20 bytes
Experimente online!
fonte
f(n){n=n<2?3:n*3-4;}
f(n){n=n*3-4*(n>1);}
MachineCode em x86_64,
343224 bytesRequer o
i
sinalizador para saída inteira; a entrada é obtida através do acréscimo manual ao código.Experimente online!
Passei por essas 4 funções C diferentes para encontrar o programa MachineCode de 24 bytes:
n+2*abs(n-2)
=8d47fe9931d029d08d0447c3
(24 bytes)3*n-4*!!~-n
=8d047f31d2ffcf0f95c2c1e20229d0c3
(32 bytes)n*3-4*(n>1)
=31d283ff028d047f0f9dc2c1e20229d0c3
(34 bytes)n<2?3:n*3-4
=83ff01b8030000007e068d047f83e804c3
(34 bytes)fonte
> <> ,
109 bytesGuardado 1 byte graças a Jo King
Experimente online!
fonte
4 , 54 bytes
Experimente online!
Se você questionar o método de entrada, visite o primeiro a entrada numérica e saída pode ser dado como um código de caracteres pós meta.
fonte
4
possui apenas entrada de caracteres.Japonês, 7 bytes
Uma porta da solução Python de Lynn.
Tente
Alternativo
Essa foi uma alternativa divertida às soluções de fórmula fechada que, infelizmente, são um byte mais longo:
Tente
fonte
TI-Basic, 8 bytes
fonte
05AB1E , 4 bytes
Usa o método abs da resposta de Dennis 'Jelly
Experimente online!
Explicação
fonte
65816 código da máquina, 22 bytes
Eu poderia ter criado esse código de máquina 65C02 facilmente por 3 bytes a menos, mas não o fiz, pois o tamanho do registro no 65C02 é de 8 bits em vez de 16 bits. Funcionaria, mas é chato, porque você só pode usar números realmente baixos ;-)
Despejo xxd:
desmontagem / explicação do código:
Testando-o em um emulador compatível com 65816:
fonte
SHELL , 28 bytes
Testes:
Explicação:
A fórmula é:
seguindo a sequência de 3 etapas "Dois passos à frente e um passo atrás", teremos a série aritmética:
No mínimo, ou primeira coincidência:
em uma fórmula:
fonte
$((…))
) são feitas, provavelmente não.F(){bc<<<$1*3-$(($1>1))*4}
trabalha em zsh embora e remove 2 bytesPython 3 , 48 bytes
Experimente Online!
fonte
J , 9 bytes
Experimente online!
fonte
MATLAB / oitava , 15 bytes
Experimente online!
Meio surpreso que ainda não haja uma resposta do MATLAB. O mesmo algoritmo
3*n-4
se for maior que 1 ou3*n
não.fonte
Flak cerebral , 38 bytes
Experimente online!
A primeira resposta que vejo para calcular a resposta, indo e voltando.
fonte
W
d
, 7 bytesExplicação
Avalia
(a*3)-4*(a>1)
.Outra alternativa possível
Avalia
(a*3)-4*(1%a)
.fonte