Si bien> <> no es un lenguaje popular, puede ser bueno para el golf y se ha utilizado en este sitio web. Fue inspirado por Befunge y tiene algunas similitudes en sus instrucciones.
Comandos requeridos:
> < ^ v
Cambia la dirección del puntero de instrucción (derecha, izquierda, arriba, abajo)
/ \ | _ #
Espejos; el puntero cambiará de dirección según la dirección que ya tenga.
x
Dirección aleatoria
+ - * , %
Suma, resta, multiplicación, división y módulo, respectivamente. Aparece A y B de la pila y empuja al operador B de A. La división por 0 genera un error.
0-9 a-f
Empuja el valor correspondiente en la pila. a = 10, ..., f = 15
=
Aparece A y B de la pila, y empuja 1 si B = A, y 0 en caso contrario.
)
Mas grande que. Aparece A y B de la pila, y empuja 1 si B <A
(
Menos que. Aparece A y B de la pila, y empuja 1 si B> A
' "
Habilita el análisis de cadenas. El análisis de cadenas empuja todos los caracteres encontrados a la pila hasta que encuentra una cita de cierre.
!
Omite las siguientes instrucciones.
?
Omite las siguientes instrucciones si la parte superior de la pila es cero o si la pila está vacía. (nota: ¡esto no saca nada de la pila!)
:
Duplica el valor superior en la pila.
~
Elimina el valor superior de la pila.
$
Gira los 2 valores superiores en la pila en sentido horario, respectivamente. (por ejemplo, si su pila es 1,2,3,4, daría como resultado 1,2,4,3)
@
Rota los 3 valores superiores en la pila en sentido horario, respectivamente. (por ejemplo, si su pila es 1,2,3,4, resultaría en 1,4,2,3) Extrae
&
el valor superior de la pila y lo coloca en el registro. Llamar & nuevamente tomará el valor en el registro y lo pondrá de nuevo en la pila.
r
Invierte la pila.
}
Desplaza la pila hacia la derecha / gira toda la pila en el sentido de las agujas del reloj (por ejemplo, 1,2,3,4 se convierte en 4,1,2,3
{
Desplaza la pila hacia la izquierda / gira toda la pila en sentido antihorario (por ejemplo, 1,2,3,4 se convierte en 2,3,4,1 Aparece
g
A y B de la pila, y empuja el valor en B, A en el cuadro de código. Aparece
p
A, B y C de la pila, y cambia el valor en C, B a A.
o
Aparece y sale como un carácter
n
Aparece y sale el valor
i
Toma un carácter como entrada del usuario y empuja su valor ASCII a la pila
;
Finaliza la ejecución
No es necesario implementar subprocesos, aunque puede hacerlo si lo desea.
La respuesta más corta gana, en caso de empate, gana la primera respuesta.
Puede usar cualquier idioma y se permite evaluar.
El archivo se proporcionará a través de argumentos de línea de comando y tendrá una .fish
extensión.
Puede usar el intérprete oficial de Python como referencia si es necesario. El artículo Wiki de Esolangs tiene más información sobre cómo funciona el lenguaje, junto con algunos ejemplos más.
Casos de prueba:
Hola Mundo!
Código:
"Hello World!"r>?o?<;
Salida:
Hello World!
Código de factoriales :
01::nv
:@*:n>84*o$1+
Salida (hasta 5):
1 2 6 24 120
fuente
1 2 6 24 120 720 ...
y debería ser lo que el intérprete de Python también genera .l
para empujar la longitud de la pila. Y hasta donde yo sé,?
resalta el valor.Respuestas:
APL (Dyalog) (750)
Debido a que APL realmente no tiene una línea de comando, cárguela en un espacio de trabajo (es decir, con
)ed F
) y luego ejecútela desde la línea APL de esta manera:No maneja ningún error. No se especifica el comportamiento del código incorrecto. Tampoco puede hacer hilos. Cuando la página de Esolang y la pregunta entran en conflicto, sigue la pregunta.
Editar: una versión un poco más legible con comentarios se puede encontrar aquí: https://gist.github.com/anonymous/6428866
fuente
Delfos, 1144
Se implementan todas menos las instrucciones de encabezado.
El código sangrado y comentado dice:
Editar historial:
(1306 + 18 = 1324): se corrigieron errores en algunas órdenes de operación (Delphi evalúa los argumentos a la inversa). También se corrigió el estallido de la pila (no podía estallar más de una vez por instrucción).
(1324-33 = 1291): se eliminó la protección al escribir contenidos desde una pila vacía
(1291-56 = 1235): función de giro agregada, variables renombradas, dígitos de instrucción disminuidos
(1235-7 = 1228): variables reordenadas, error corregido en '@'
(1228-37 = 1191): compartió más código de implementación al distribuirlo en 3 bloques de casos consecutivos
(1191-12 = 1179): compartió la implementación del ciclo de pila entre las 3 instrucciones ahora.
(1179-20 = 1159): dividir el análisis de cadenas en 3 bloques de casos, eliminar la variable j, compartir otra implementación
(1159-15 = 1144): 'x' simplificado al cambiarlo en una de las 4 instrucciones de dirección
fuente
for k in TFile.ReadAllLines(ParamStr(1))do c:=c+k+StringOfChar(' ',80-Length(k));
. También puede deshacerse def:TextFile
eso, pero debe agregarlouses IOUtils;
al comienzo. Diferencia: lee todas las líneas, y no solo las primeras 25 líneas.Haskell 1428
Casi todos los caracteres en minúscula se usan como nombres de funciones.
PD: ¿Hay algún juego sobre este tipo (2d puntero) de esolangs? ¡Deben ser muy divertidos!
Un ejemplo de programa de pescado
fuente
zip(['0'..'9']++['a'..'f'])[0..15]
debería usarse en lugar dezip['0'..'9'][0..9]++zip['a'..'f'][10..15]
. ¡Qué increíble golf!\q->t$(r q)q
es básicamenter>>=t
Python, 978
980981No admite roscado.
Versiones:
1. 981
2. 980:
p
instrucción fija ; pequeña mejora3. 978:
?
instrucción fija .fuente
p
procedimiento aquí, porque no entendí esto> Pops A, B y C fuera de la pilap
comando toma los últimos tres valores en la pila (los saca)a
b
yc
, y asigna el lugarc
,b
en la cuadrícula aa
. Es por eso que no puede convertir a código nativo.a=pop();b=pop();c=pop()
oc=pop();b=pop();a=pop()
?a=pop();b=pop();c=pop()
Delfos,
18551701Esta versión tiene soporte para subprocesos a un costo bastante alto: la versión sin soporte para subprocesos tiene 1144 caracteres en este momento, por lo que el soporte para subprocesos agrega 557 caracteres (alrededor del 50%).
Tenga en cuenta que esta implementación contiene algunas ideas que reducirán mi otra presentación en unas pocas docenas de caracteres (los aplicaré más adelante).
Este código ejecuta sin problemas la muestra 'Hola multiproceso, mundo' y la mayoría de las otras muestras. (Mi intérprete me da una división por excepción cero cuando ejecuto la muestra 'e', ¿alguien puede confirmar esto con otro intérprete> <>?)
Aquí el código sangrado y comentado:
Editar historial:
(1855-154 = 1701): aplicó todas las ideas de la versión sin subprocesos
fuente
procedure _.U(v: Int16);
->procedure _.U;
yprocedure _.T(A, b: Int16);
->procedure _.T;
TextFile
se puede escribir comoText
, yAssignFile()
comoAssign()
PHP, 2493 bytes
Sé que se ha implementado con un tamaño de compilador más pequeño con otros idiomas, pero sin embargo, con el espíritu de un programador que nunca se muere, se me ocurrió un intérprete CLI de PHP
><> Fish
. El código fuente completo está debajo.2 característica principal del lenguaje de programación Fish no se implementó, a saber:
i
de un personaje. PHP CLI requiere que el usuario presione la<Enter>
tecla para ingresar la entrada en el búfer de entrada.Tenga en cuenta que he escrito y optimizado muchas de las funciones nativas, incluida la creación de una matriz mediante:
en lugar de
Se puede acceder al programa a través de la interfaz de línea de comandos (CLI) utilizando el siguiente comando:
Pasé un total de 6 horas para completar esto con referencia al intérprete original de Python.
Fuente original:
Editar historial
x
sintaxis para seleccionar una de las direcciones en lugar de seleccionarla por sí sola.p
comando donde sechr()
debe usar antes de insertar el valor en el cuadro de código.fuente
Caracteres Lua 1640 (1558 sin hilos)
Versión de enhebrado, golfizada (1640 caracteres):
La versión de subprocesos hace algunos trucos desagradables con setfenv y getfenv para eliminar la necesidad de indexar los diferentes subprocesos.
Versión de subprocesos legible:
Versión sin subprocesos, golfizada (1558 caracteres, pero puede reducirse un poco más si la versión sin subprocesos va a ser el criterio):
Versión legible:
No pongo el siguiente como resultado, ya que usar la compresión directamente no es el objetivo, supongo;). Usando murgaLua (o cualquier versión de Lua con lzlib y luaSocket (para decodificación base64)), en el recuento mágico de 1333:
fuente