Tu propia instrucción "para"
Suponiendo que tiene la siguiente entrada: a, b, c, d
La entrada puede estar en una línea usando cualquier formato "a / b / c / d" o "a, b, c, d", etc.
También puede tener 4 entradas.
Debe codificar el siguiente comportamiento (pseudocódigo aquí):
var i = <a>
while (i <b> <c>)
print i
i = i + <d>
print "\n"
Aquí hay algunos casos de prueba:
input : 1,<,10,1
output :
1
2
3
4
5
6
7
8
9
Uno mas :
input : 20,>,10,1
output :
20
21
22
23
24
25
26
27
...
infinite loop / program crashes
a
es un entero , el valor inicial dei
.b
es una cadena o un carácter , no puede ser otra cosa, el comparador utilizado en la condición final delfor
bucle.b
puede y debe ser una de las siguientes cadenas:- ">" - "<"
c
es un número entero , el número utilizado en la condición final delfor
bucle.d
es un entero que se agrega a i en cada bucle.
Este es el código de golf, ¡la respuesta más corta gana!
print "\n"
, pero estoy usando la alerta de JavaScript para cada línea. ¿Sería eso aceptable o tendría que usar console.log en lugar de hacer que mi respuesta sea más larga?alert("23\n24\n25");
funcionaría mientrasalert("23"); alert("24"); alert(25);
que no lo haríaRespuestas:
JavaScript (ES6),
444356 bytesGuardado 1 byte gracias a ETHproductions
Edit: corregido para cumplir con los requisitos de salida
Prueba
Mostrar fragmento de código
fuente
eval
para guardar un byte:(a,b,c,d)=>{for(;eval(a+b+c);a+=d)alert(a)}
Javascript (ES6),
474248 BytesQuería hacer la versión for pero alguien era más rápido, así que aquí está la versión recursiva.
Necesita agregar
f=
antes y llamarlo comof(b,c,d)(a)
.Muchas gracias a Arnauld por el increíble golf.
alert
cambiado aconsole.log
debido a la especificación de salidafuente
Puro bash, 35
Supongo que está bien solo para conectar los parámetros en el bucle estándar:
Pruébalo en línea .
fuente
Jalea , 12 bytes
Pruébalo en línea!
Jelly tiene muchas maneras de hacer iteraciones, crear rangos, etc. Sin embargo, reflejar exactamente el comportamiento de C ++ es bastante difícil, debido a casos especiales como que el incremento es 0, el ciclo termina antes de que comience (debido a que la desigualdad está al revés) ), y el incremento va en la dirección incorrecta (lo que significa que la condición de salida del bucle no se puede cumplir de forma natural). Como tal, esta solución es básicamente una traducción directa de C ++, aunque eso lo hace bastante más bajo que un programa Jelly normalmente. Afortunadamente, C ++ tiene un comportamiento indefinido en el desbordamiento de enteros con signo (la pregunta usa
int
), lo que significa que un programa puede hacer cualquier cosa en ese caso y, por lo tanto, no hay necesidad de intentar imitar el comportamiento de desbordamiento.Explicación
Bloquear el programa es la mejor manera de desactivar la salida implícita de Jelly (de lo contrario, generaría el valor final del contador); genera un montón de mensajes de error en stderr, pero normalmente consideramos que está permitido.
Por cierto, el contador de bucle se inicializa con el valor actual antes de que comience el bucle. Como el bucle aparece al comienzo del programa, esa será la primera entrada.
fuente
t
aḊ
no tener ningún bloqueo. El resultado final es una lista vacía para la cual la impresión implícita de Jelly no produce nada.Python 2 , 50 bytes
Pruébalo en línea!
fuente
R, 63 bytes
fuente
Java, 58 bytes
fuente
i
? ¿Podría omitir la parte de inicialización y simplemente usara
? Además, el uso del valor ASCII de '>' (62) guarda un byte.b>61
05AB1E ,
2220 bytesPruébalo en línea!
Explicación
fuente
SmileBASIC, 53 bytes
Explicación:
Esto usa el hecho de que
X<Y
es lo mismo que-X>-Y
fuente
READ
declaración, ahorrando 1 byte.Apilado , 34 bytes
Pruébalo en línea! (Pruebas incluidas.) Esta es una función que espera que la pila se vea así:
Por ejemplo:
Explicación
fuente
C ++, 80
Vaya, esto
C++
no esC
. Estaba un poco confundido por la pregunta.fuente
using namespace std
de forma gratuita).i
tiene que empezar pora
,0
¿ no ? Puede usara
y omitir pori
completo y usar el valor ASCII de '>'.for(;b==62?a>c:a<c;a+=d)
f(1,'<'3,1);
for(b-=61;b*a>b*c;a+=d)
funciona para un solo byte; Pero también lo hacefor(;b-62?a<c:a>c;a+=d)
.C,
5251 bytes-1 byte gracias a H Walters
Pruébalo en línea!
fuente
b&2
lugar deb^60
para otro byte.Python 3, 52 bytes
repl.it
fuente
Pip , 14 bytes
Toma cuatro argumentos de línea de comandos. Admite números negativos y de coma flotante y operadores de comparación
< > = <= >= !=
. Pruébalo en línea!fuente
Jalea , 8 bytes
Este es un enlace diádico que toma a, b, c como argumento izquierdo yd como argumento derecho. La salida puede ser infinita y va a STDOUT.
Pruébalo en línea!
Cómo funciona
fuente
F
para aplanar la matriz.Python 2 , 45 bytes
Pruébalo en línea!
Una implementación muy literal de la especificación. Toma la plantilla de código, sustituye las entradas a través del formato de cadena y la ejecuta.
fuente
TeX simple, 88 bytes
El comando
\for
proporciona la función solicitada. Guarde esto comofor.tex
y luego ejecútelo e ingrese los valores variables en la línea de comando:pdftex '\input for \for 1 < 5 1 \bye'
Los valores variables deben estar separados por espacios.fuente
Python 3, 61 bytes
Un trazador de líneas:
fuente
\t
con un espacio.Haskell ,
6664 bytesPruébalo en línea! Uso:
fuente
Bash (+ Herramientas Unix), 29 bytes
Golfed
Prueba
fuente
Ruby,
4341 bytesSi
b
puede tomarse como un símbolo de Ruby en lugar de una cadena, obtendrá 38 bytes :¡Pruebe cualquiera de las soluciones en línea!
fuente
Lisp común,
8280797364 bytesPrueba
-9 bytes gracias a PrzemysławP.
fuente
(defmacro f(a b c d)<insert backqoute here>(do((i,a(+ i,d)))((not(,b i,c)))(print i)))
Uso:(f 1 < 10 1)
PHP,
6965 bytesEjecutar con '-r'; proporcionar argumentos de línea de comando como entrada.
Por
solo un byte más4 bytes más, puedo tomar todos los operadores:Sí, malvado eval. ¿Sabías que puede devolver algo?
La desestructuración abreviada
[,$i,$b,$c,$d]=$argv;
ahorraría 4 bytes más;pero PHP 7.1 es posterior al desafío.
fuente
list
guardar 4 Bytes más 4 Bytes con sintaxis cortalist()
.Perl 6 , 44 bytes
Cómo funciona
Si está bien devolver una secuencia (potencialmente infinita) de números como un valor de tipo
Seq
, en lugar de imprimir los números en stdout, la.say for
parte podría eliminarse, reduciéndola a 35 bytes.fuente
Clojure,
6663 bytes-3 bytes factorizando el
loop
. Estoy "abusando" del parámetro init para actuar como el acumulador en ejecución.Solución recursiva (con TCO). Ver comentarios en código pregolfed. Intenté una solución recursiva no TCO, y terminó siendo 67 bytes.
¡Me encantaría ver este ritmo en Clojure! Creo que esto es lo más pequeño que puedo conseguir.
fuente
#(when(({">">"<"<}%2)% %3)(println %)(recur(+ % %4)%2 %3 %4))
sería de 61 bytes, combinando tuwhen
con mi({">">"<"<}%2)
.Groovy, 51 bytes
Este es un cierre sin nombre. Pruébalo en línea!
Precaución : si desea probar esto
groovy console
, asegúrese de eliminar todo el proceso cuando la entrada provoque un bucle infinito. Me di cuenta de esto después de que consumió ~ 5 gigas de RAM.fuente
QBIC ,
5140 bytesY tres minutos después de publicar, me di cuenta de que podía simplificar la lógica del terminador ...
fuente
Lote, 94 bytes
Si no fuera por el comportamiento del segundo parámetro, podría hacerse en 53 bytes:
Esto simplemente no hace nada si el paso tiene el signo incorrecto. La prueba adicional se debe a que el
for
ciclo de Batch permite que la variable del ciclo sea igual al valor final.fuente
Clojure, 66 bytes
Esto podría haber sido de 55 bytes como
<
y>
son funciones en Clojure:fuente
<
lugar de"<"
, excepto Clojure.TI-Basic,
4134 bytesfuente
Prompt
,Str2
,Str3
,While
,expr(
,Disp
,->
, YEnd
son todos los símbolos de un byte. Cuento 29 bytes.Str2
,Str3
, yexpr(
son todas las fichas de dos bytes. Para ver una lista de tokens de un byte, consulte tibasicdev.wikidot.com/one-byte-tokens