Digamos que estoy a diez pasos de mi destino. Camino allí siguiendo el viejo dicho: "Dos pasos adelante y uno atrás". Doy dos pasos hacia adelante, uno hacia atrás, hasta que estoy exactamente en mi destino. (Esto podría implicar pasar mi destino y volver a él). ¿Cuántos pasos caminé?
Por supuesto, podría no estar a 10 pasos de distancia. Podría estar a 11 pasos de distancia, o 100. Podría medir diez pasos y seguir caminando de un lado a otro para resolver el problema, o ... ¡podría escribir un código!
- Escriba una función para calcular cuántos pasos se necesitan para alejar N pasos, en la secuencia: dos pasos hacia adelante, uno hacia atrás.
- Suponga que ha comenzado en el paso 0. Cuente los "dos pasos adelante" como dos pasos, no uno.
- Suponga que todos los pasos tienen una longitud uniforme.
- Debería devolver el número de pasos que se dieron por primera vez cuando llegas a ese espacio. (Por ejemplo, a 10 pasos de distancia se necesitan 26 pasos, pero volvería a golpearlo en el paso 30). Estamos interesados en los 26.
- Usa el idioma que quieras.
- Debe aceptar cualquier entero positivo como entrada. Esto representa el paso objetivo.
- El menor número de bytes gana.
Ejemplo:
Quiero alejarme a 5 pasos:
| | | | | | <- 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
En este caso, el resultado de la función sería 11.
Resultados de ejemplo:
1 => 3
5 => 11
9 => 23
10 => 26
11 => 29
100 => 296
1000 => 2996
10000 => 29996
100000 => 299996
¡Diviértanse, golfistas!
code-golf
math
arithmetic
AJFaraday
fuente
fuente
Respuestas:
Oasis ,
54 bytes1 byte guardado gracias a @Adnan
No debe confundirse con
23+3
Pruébalo en línea!
¿Cómo?
fuente
b
.Python 2 , 18 bytes
Pruébalo en línea.
¡Tomé este truco de xnor hace solo unos días ...!
fuente
Python 2 , 20 bytes
Pruébalo en línea!
fuente
Python 2 , 17 bytes
Pruébalo en línea!
Encontré la expresión por búsqueda de fuerza bruta. Efectivamente computa
n+2*abs(n-2)
.fuente
Polyglot: Java 8 / JavaScript / C # .NET,
161412 bytesPruébelo en línea (Java 8).
Pruébelo en línea (JavaScript).
Pruébelo en línea (C # .NET) .
Puerto de la respuesta Python 2 de @Lynn , así que asegúrese de votar su respuesta.
Vieja respuesta:
Polyglot: Java 8 / JavaScript / C # .NET,
1614 bytesPruébelo en línea (Java 8).
Pruébelo en línea (JavaScript).
Pruébelo en línea (C # .NET) .
Explicación:
fuente
n=>(--n*3||4)-1
también es posible en JavaScript (también 14 bytes).R , 20 bytes
Pruébalo en línea!
No noté el patrón hasta después de haber implementado mi solución menos elegante.
fuente
05AB1E ,
87 bytesPruébalo en línea!
-1 byte gracias a Emigna!
fuente
3*s≠i4-
guarda un byteOasis , 5 bytes
Explicación:
Pruébalo en línea!
fuente
Haskell , 15 bytes
Pruébalo en línea!
fuente
ML estándar , 16 bytes
Pruébalo en línea!
fuente
Dodos , 27 bytes
Pruébalo en línea!
fuente
Jalea , 6 bytes
Pruébalo en línea!
fuente
Prólogo (SWI) , 21 bytes
Pruébalo en línea!
fuente
MATL , 7 bytes
Utiliza la
3*n-4*(n>1)
fórmula Multiplique la entrada por 3 (3*
), presione la entrada nuevamente (G
) y disminuya (q
). Si el resultado no es cero (?
), reste 4 del resultado (4-
).Pruébalo en línea!
fuente
2-|EG+
Jalea , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
APL (Dyalog) , 9 bytes
Pruébalo en línea!
fuente
C (gcc) , 20 bytes
Pruébalo en línea!
fuente
f(n){n=n<2?3:n*3-4;}
f(n){n=n*3-4*(n>1);}
MachineCode en x86_64,
343224 bytesRequiere la
i
bandera para la salida entera; la entrada se toma agregando manualmente al código.Pruébalo en línea!
Revisé estas 4 funciones C diferentes para encontrar el 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)fuente
> <> ,
109 bytesGuardado 1 byte gracias a Jo King
Pruébalo en línea!
fuente
4 , 54 bytes
Pruébalo en línea!
Si cuestiona el método de entrada, visite primero la entrada numérica y la salida se puede dar como una meta publicación de código de caracteres .
fuente
4
solo tiene entrada de caracteres.Japt, 7 bytes
Un puerto de la solución Python de Lynn.
Intentalo
Alternativa
Esta fue una alternativa divertida a las soluciones de fórmula cerrada que, desafortunadamente, es un byte más largo:
Intentalo
fuente
TI-Basic, 8 bytes
fuente
05AB1E , 4 bytes
Utiliza el método abs de la respuesta de Dennis 'Jelly
Pruébalo en línea!
Explicación
fuente
Código de máquina 65816, 22 bytes
Podría haber hecho este código de máquina 65C02 fácilmente por 3 bytes menos, pero no lo hice, ya que el tamaño del registro en 65C02 es de 8 bits en lugar de 16 bits. Funcionaría, pero es aburrido porque solo puedes usar números realmente bajos ;-)
volcado xxd:
Desmontaje / explicación del código:
Probándolo en un emulador compatible con 65816:
fuente
SHELL , 28 Bytes
Pruebas:
Explicación
La formula es:
Siguiendo la secuencia de 3 pasos "Dos pasos adelante y uno atrás", tendremos la serie aritmética:
Como mínimo, o primera coincidencia:
en una fórmula:
fuente
$((…))
) , se hace, probablemente no.F(){bc<<<$1*3-$(($1>1))*4}
funciona en zsh y elimina 2 bytesPython 3 , 48 bytes
¡Pruébelo en línea!
fuente
J , 9 bytes
Pruébalo en línea!
fuente
MATLAB / Octave , 15 bytes
Pruébalo en línea!
Algo sorprendido de que no haya una respuesta MATLAB. Mismo algoritmo de
3*n-4
si es mayor que 1, o de lo3*n
contrario.fuente
Brain-Flak , 38 bytes
Pruébalo en línea!
La primera respuesta que veo para calcular la respuesta va y viene.
fuente
W
d
, 7 bytesExplicación
Evalúa
(a*3)-4*(a>1)
.Otra alternativa posible
Evalúa
(a*3)-4*(1%a)
.fuente