La tarea es simple. Escribe un intérprete para el idioma * .
Aquí hay un enlace más grande a la wiki.
Solo hay tres programas válidos *:
*
Imprime "Hola mundo"*
Imprime un número aleatorio entre 0 y 2,147,483,647*+*
Corre por siempre.
El tercer caso debe ser un bucle infinito de acuerdo con las especificaciones de esta pregunta.
Entrada:
- La entrada se puede tomar a través de cualquier método de entrada aceptable según nuestras reglas estándar de E / S
- Siempre será uno de los programas anteriores.
Salida:
- El primer caso debe imprimirse exactamente
Hello World
, con o sin un salto de línea final. - Para el segundo caso, si el número entero de su idioma es menor que 2,147,483,647, use el número entero de su idioma
- El primer y el segundo caso pueden imprimirse en cualquier salida aceptable según nuestras reglas de E / S estándar.
- El tercer caso no debe dar ningún resultado.
Puntuación:
Como se trata de código de golf , la respuesta más corta, en bytes, gana.
code-golf
interpreter
code-golf
array-manipulation
sorting
code-golf
halting-problem
code-golf
javascript
code-golf
algorithm
code-golf
arithmetic
code-golf
math
counting
code-golf
math
code-golf
decision-problem
radiation-hardening
code-golf
conversion
bitwise
code-golf
number
decision-problem
code-golf
string
decision-problem
code-golf
random
game
code-golf
ascii-art
graphical-output
code-golf
decision-problem
binary-tree
tree-traversal
code-challenge
array-manipulation
code-challenge
graphical-output
path-finding
test-battery
algorithm
code-golf
integer
factorial
code-golf
binary-tree
code-golf
grid
graph-theory
code-golf
regular-expression
quine
code-golf
encoding
code-golf
king-of-the-hill
javascript
TheOnlyMrCat
fuente
fuente
0
y2,147,483,647
', ¿eso es inclusivo o exclusivo? (Por ejemplo, ¿es0
una salida válida?)-1
.Respuestas:
* , 0 bytes
Como * no tiene forma de leer la entrada, las reglas predeterminadas permiten especificar que la entrada se debe dar concatenando en el programa .
(... creo. Hay una condición de "al menos el doble de votos positivos que negativos" que no tengo el representante para verificar).
fuente
R , 69 bytes
Pruébalo en línea!
switch
intenta hacer coincidir los argumentos con nombre y si no hay coincidencia, selecciona el primero sin nombre después del primero, que en este caso es el bucle infinitorepeat{}
.fuente
Jalea ,
2120 bytesUn enlace monádico que acepta una lista de personajes.
Pruébalo en línea!
vL’...
También funciona (ver más abajo).¿Cómo?
Alternativa
fuente
C (gcc) ,
6663 bytesGracias a attinat por los -3 bytes.
Solo tengo que verificar el segundo carácter: si el LSB está configurado, es un
+
(por lo tanto, el programa es "*+*
") y el programa se repite. Después de eso, si es aNUL
, el programa fue "*
" y mostramosHello World
; de lo contrario, muestra un valor aleatorio ("*
", la única otra opción que queda).Pruébalo en línea!
fuente
f(char*s){*++s&1?f(s-1):printf(*s?"%d":"Hello World",rand());}
rand
no se garantiza que devuelva un valor suficientemente grande;RAND_MAX
yINT_MAX
no se garantiza que sean iguales (y no están en compiladores del mundo real, por ejemplo, Visual StudioRAND_MAX
es32767
, mientras queINT_MAX
es [en sistemas modernos derivados de x86] el2147483647
valor especificado en la pregunta del OP).Python 2 ,
103938987 bytesCombiné mi respuesta anterior con Chas Cafés de respuesta y tengo algo unos pocos bytes más corto.
El número aleatorio estará entre 0 y 2 ** 31-1 inclusive.
Pruébalo en línea!
Versión anterior:
103 bytes
93 bytes
fuente
randint(0,2**31-1)
conrandrange(2**31)
.while'*'<i
salva 2randrange(2**31)
agetrandbits(31)
(este último devuelvelong
, noint
, peroprint
imprimirá elstr
formulario, no elrepr
formulario, por lo que el finalL
no estará allí).i=input()
solo funciona si las entradas se citan, si solo ingresa simple*/ * /*+*
, moriría con unSyntaxError
(porqueinput
incluye un implícitoeval
); necesitaría ingresar'*'/' * '/'*+*'
(o equivalente con comillas dobles). No vi nada obvio en las reglas estándar de E / S que permitieran esto, lo que podría significar que necesitaría usarraw_input()
, con un costo de cuatro bytes.input()
toma una cadena como entrada y la evalúa. Realmente no estoy agregando a la entrada, simplemente estoy tomando una cadena como entrada, y las cadenas tienen comillas. Esto es bastante estándar, de la misma manera que puedo tomar una matriz como en[1,2,3]
lugar de una cadena delimitada que luego tengo que dividir y analizar. El objetivo del sitio no es hacer que la entrada sea estricta, es facilitar la E / S para que podamos centrar el código en el desafío en cuestión.Barrilete ,
-lp
,-ir
302625242019 bytes-1 byte usando banderas
Pruébalo en línea!
Historial de respuestas
Pruébalo en línea!
Acortado
Hello World
a cadena de diccionarioPruébalo en línea!
Nunca dejé de sorprenderme con el poder de Keg. Créditos al usuario EdgyNerd por otro byte guardado.
Versiones anteriores
Pruébalo en línea!
Crédito al usuario A__ por el byte adicional guardado.
Versión antigua
Esencialmente, toma el programa de entrada y:
Luego implícitamente imprima la pila.
4 bytes guardados debido a que hello world no necesita puntuación.
Pruébalo en línea! Versión antigua
Pruébalo en línea! Nueva versión
fuente
Befunge-93 , 54 bytes
Pruébalo en línea!
Anotado:
La aleatoriedad no es uniforme. En cada incremento hay un 50% de posibilidades de dejar de incrementar.
fuente
Japt , 22/25 bytes
La primera solución es para la especificación original que tenía
*<space>
como segundo programa y la otra es para la especificación actualizada que lo cambió arbitrariamente<space>*</space>
, gracias a EoI por la "solución" sugerida.Ambos arrojan un error de desbordamiento al ingresar al bucle infinito del tercer programa, pero, teóricamente, con suficiente memoria (que podemos suponer a los efectos del código de golf ), correría para siempre.
Pruebe el programa 1
Pruebe el programa 2
Pruebe el programa 3
Pruebe el programa 1
Pruebe el programa 2
Pruebe el programa 3
fuente
*<space>
. No tengo tiempo para actualizar ahora.UÌ>S
lugar de¢
en el segundo ternarioJavaScript (ES7), 66 bytes
Pruébalo en línea! (Hola Mundo)
Pruébalo en línea! (número aleatorio)
Pruébalo en línea! (Bucle infinito)
fuente
x=(z=>x())&&x()
No funcionaría durante -1byte desde el código de bucle infinito, suponiendo un navegador sin un tamaño máximo de pila de llamadas?Jalea ,
2321 bytesPruébalo en línea!
Un enlace monádico que toma un solo argumento y regresa
Hello World
, un entero aleatorio de 31 bits o que se repite infinitamente según la especificación.Todas las opciones:
*
*
*+*
Explicación
fuente
Java (JDK) , 83 bytes
Pruébalo en línea!
fuente
Python 2 ,
918988 bytesPruébalo en línea!
2 bytes gracias a Jonathan Allan ; 1 byte gracias a ShadowRanger .
fuente
while'*'<p
salva 2getrandbits(31)
guarda un byte encimarandrange(2**31)
.PowerShell,
60, 56 bytesBastante versión muda, la técnica sólo jugar al golf aquí está omitiendo
Get-
enGet-Random
.UPD ¡Despojado a 56 bytes eliminando comillas, gracias a veskah !
fuente
Perl 5
-p
,4339 bytesPruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 71 bytes
Pruébalo en línea!
fuente
Ruby
-n
, 47 bytesPruébalo en línea!
fuente
Wolfram Language (Mathematica) , 65 bytes
Pruébalo en línea!
fuente
Carbón , 30 bytes
Pruébalo en línea!El enlace es a la versión detallada del código. Abusa del formato de entrada predeterminado de Charcoal que se divide en espacios si solo hay una línea, por lo que la entrada de números aleatorios en realidad se parece a tres entradas. Explicación:
Repita mientras la primera entrada contiene un
*
.Si la primera entrada es un
*
solo ...... luego reemplácelo con
Hello World
, haciendo que el ciclo termine.*+*
no se reemplaza, lo que resulta en un bucle infinito.Si la primera entrada no está vacía, expórtela.
Pero si está vacío, genera un número entero aleatorio en el rango deseado.
fuente
Añadir ++ , 78 bytes
Pruébalo en línea!
Explicación
fuente
Brachylog ,
2623 bytesPruébalo en línea!
Toma el programa como una cadena a través de la variable de entrada e ignora la variable de salida. Explota enormemente la garantía de que la entrada es solo uno de los tres programas válidos: cualquier entrada de longitud tres se comportará como
" * "
o"*+*"
dependiendo de si el primer carácter es un espacio, y cualquier otra entrada se comportará como"*"
.fuente
PHP , 51 bytes
Pruébalo en línea! (Hola Mundo)
Pruébalo en línea! (Número aleatorio)
Pruébalo en línea! (Bucle infinito)
Toma el segundo carácter de entrada que puede ser
''
,'*'
o'+'
. En el caso de'+'
la'*'<'+'
será verdad y el bucle será infinito, de lo contrario, después del bucle, se muestra "Hola mundo" o un número aleatorio. Elrand()
emite automáticamente un número entre 0 ygetrandmax()
que utiliza definidasRAND_MAX
en la biblioteca C estándar y por defecto es2147483647
en la mayoría de plataformas / entornos, incluyendo TIO.fuente
05AB1E , 21 bytes
Pruébalo en línea.(NOTA: El buildin aleatorio es bastante lento con grandes listas, por lo que puede pasar un tiempo antes de que se dé el resultado).
Explicación:
Ver este consejo 05AB1E mío (sección Cómo usar el diccionario? ) Para entender por qué
”Ÿ™‚ï
es"Hello World"
.fuente
Pyth , 32 bytes
Pruébalo en línea!
Explicación (Python-ish)
fuente
hC*4\ÿ
es^2 32
, pero para que la solución sea correcta, debe usar^2 31
en su lugar. Además, use enz
lugar deJw
, ahorra 1 byte más. Y tu explicación salta la líneat
justo anteslJ
.+
carácter, guarda 1 byte porque no necesita decrementarlo.APL (Dyalog Unicode) , SBCS de 39 bytes
Prefijo anónimo lambda.
Pruébalo en línea!
{
"dfn";⍵
es el argumento:'+'∊⍵:
si plus es miembro del argumento:∇⍵
cola recurse en argumento' '∊⍵
si el espacio es un miembro del argumento:?0
flotante aleatorio (0-1)2E31×
escala a (0–2³¹)⌊
piso'Hello World'
de lo contrario devolver la cadenafuente
Commodore BASIC (VIC-20, C64, TheC64Mini, etc.) - 170 tokenizar bytes BASIC
Creo que para hacer esto con mayor precisión, tendré que profundizar en el extraño mundo del lenguaje ensamblador 6502, pero este es un primer borrador.
Primer punto, la
INPUT
palabra clave en Commodore BASIC ignora los espacios en blanco, por lo que la subrutina en línea9
es una forma rápida y sucia de aceptar entradas de teclado que incluyen espacios.Segundo punto, los números enteros Commodore BASIC tienen un rango de 16 bits con signo, por lo que -32768 a +32767 fuente , así que he mantenido el número aleatorio generado a 0 - 32767 inclusive
fuente
Reyezuelo ,
143135 bytesNo soy un buen jugador de golf ... El RNG genera el mismo valor cada vez porque es un generador de números pseudoaleatorio.
Pruébalo en línea!
fuente
JavaScript, 63 Bytes, no recursivo infinito
mala red, así que no hay enlace TIO
fuente