Relacionado con: Hacer un; # intérprete y Generar; # código
;#
- Una guía de torbellino
Este es un lenguaje simple con dos comandos. Su única estructura de datos es un acumulador, que se inicializa a 0.
;
Incrementar el acumulador#
Calcule el valor del acumulador módulo 127 e imprima el carácter ASCII correspondiente. Luego, restablezca el acumulador a 0.
El código fuente puede contener caracteres adicionales (ASCII imprimible + espacio en blanco), pero estos se tratan como comentarios y no tienen efecto en la ejecución del programa.
Reto
Como la mayoría de las computadoras no vienen ;#
preinstaladas, sería muy útil tener una herramienta que pueda convertir el ;#
código a un idioma diferente. En este desafío, escribirás un programa para lograrlo.
Entrada
Algún ;#
código fuente, tomado por argumento o STDIN. Este código fuente puede contener (comentar) caracteres distintos de ;
o #
.
Salida
Código, en el mismo idioma que su envío, que, cuando se ejecuta, imprime / devuelve la misma cadena que el ;#
código original . Este código resultante puede generar una nueva línea final después de la cadena de destino, si eso es más conveniente para su idioma.
Notas
Una cosa a tener en cuenta son las secuencias de escape, como el código que imprime barras invertidas o comillas. También busque ;#
código que pueda contener elementos que parecen palabras clave o comandos en su idioma.
Restricciones adicionales
Todos los programas deben finalizar (normalmente considero que esto es un valor predeterminado, pero alguien me preguntó al respecto, así que lo digo aquí)
Ejemplos
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (python): print(";#")
input: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
output (element): \'`
;#
preinstalado ...;
o#
?Respuestas:
Python 2 ,
7669 bytesCódigo
La entrada está rodeada de comillas.
Pruébalo en línea!
Explicación
La primera parte de la salida se realiza esencialmente mediante la entrada, usando
input('print')
. Dividimos la entrada en los hashtags y descartamos el último elemento. Imprimimos la representación de ord (y% 127) , donde y es el número de ocurrencias del punto y coma. Anexamos,
al final de la impresión para asegurarnos de que esto no imprima una nueva línea.Esto daría el siguiente código de Python para el
Hello, World!
programa:Que se puede probar en línea .
fuente
brainfuck , 126 bytes
Pruébalo en línea!
El programa de salida fallará en la implementación de TIO si la
;#
salida supera los 65536 caracteres. También hice una versión de 130 bytes que sale en[+]
lugar de<
evitar este problema:Explicación
fuente
Espacio en blanco, 291 bytes
Reemplace S por espacio, T por tabulación y N por una nueva línea.
Generar espacios en blanco en espacios en blanco no es lo más eficiente del mundo. La generación de cualquier tipo de código dinámico requiere un importante giro de bits que, en un lenguaje sin operaciones bit a bit, provocaría la explosión del tamaño del código. Por lo tanto, este programa no intenta hacer algo inteligente, sino que solo opta por traducir el programa fuente de uno a uno. Se desmonta a lo siguiente:
El código generado por el programa se ve así:
fuente
V ,
192028 bytesBugfix, se rompió si no había
#
al finalBugfix, implementado
mod 127
Pruébalo en línea!
Probar código generado
Explicación:
En V, en modo de inserción, cualquier carácter ASCII puede insertarse mediante código mediante el uso
<C-v><Code>
. El código V reemplaza todo#
con<C-v>0
, donde el cero es un pseudoacumulador por#
. Cada uno#
restablece el acumulador a 0, por lo que tener uno por cada funciona bien. Luego, el código hace un incremento para cada punto y coma encontrado, lo que simplemente incrementa el siguiente número que encuentra, que sería el próximo acumulador. El0
se agrega al final para que la instrucción no falle para;
s sin un seguimiento#
.Hexdump:
fuente
05AB1E ,
20 19 1816 bytes-1 gracias a Adnan
-2 gracias a carusocomputing
-2 gracias a Kevin Cruijssen
Pruébalo en línea! (incluye salida del código 05AB1E ejecutado)
fuente
';¢
puede serg
,žy
empuja 128, puede funcionar de alguna manera y ¿por qué no simplemente deletrear la palabra completa y rodearla con comillas?';¢
caso de que haya otros caracteres que no sean;
.žy<
es el mismo que127
. La impresión de la palabra entre comillas se romperá si uno de los caracteres es una cita.ƵQ
es una versión comprimida de 127 .Python 2 , 75 bytes
Pruébalo en línea! (incluye salida de la ejecución del código Python transpilado)
Gracias a ovs por muchos muchos bytes!
Explicación
Este programa transpila el #; código dividiendo en #s (
s.split('#')[:-1]
), contando la cantidad de punto y coma en cada fragmento 127 (x.count(';')%127for x in ...
), y convirtiéndolo en el carácter ASCII respectivo (chr(...)
). Esa lista se concatena (''.join(...)
), se convierte en una representación de Python de la cadena (los backticks) y se inserta en un programa esqueleto de Python para imprimir cadenas ("print"+...
).fuente
Jalea ,
25 2416 bytesUn programa completo que imprime el código Jelly equivalente (como enlace monádico, devuelve una lista de listas de tipos mixtos).
El primer ejemplo está en ¡ Pruébelo en línea! que produce este programa .
¿Cómo?
Cuenta la
;
s en cada ejecución entre#
s toma cada módulo 127 y agrega un reparto a la instrucción ordinal, elỌ
átomo monádico , después de cada uno.Jelly canaliza implícitamente cada valor a STDOUT a medida que se ejecuta a través de un programa como ese, es decir,
72Ọ101Ọ108Ọ108Ọ111Ọ44Ọ32Ọ119Ọ111Ọ114Ọ108Ọ100Ọ33Ọ
se imprimiríaHello, world!
.Una nota con respecto a la entrada: Jelly toma la entrada de cadena en formato Python. El programa de vacío podría ser entrada como
""
, y los programas de hash sólo como"#"
,"##"
, etc. Otro manipulación puede ser necesaria para las barras invertidas que contienen de entrada y citas.fuente
Cúbicamente ,
138137 bytesPruébalo en línea!
Nota: Es posible que tenga que sustituir
&6
con?6&
para que funcione en TIO.&6
Sin embargo, está en la especificación del idioma.Cómo funciona
Programa de salida:
fuente
@6
,%6
y-6
. Los comandos que anteriormente no hacían nada cuando se llamaban implícitamente ahora usan el bloc de notas. Entonces@
es lo mismo@6
,%
es lo mismo%6
, etc.JavaScript (ES6), 101 bytes
Dada una cadena de entrada, elimina todos los caracteres innecesarios, luego devuelve el origen de la siguiente función:
Donde
...
representa la;#
fuente limpia .fuente
C,
9896999897 bytes+3 bytes porque olvidé que C no se interpreta :(
Corriendo con:
Imprimirá:
fuente
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#
producef(){puts(""");}
, que no es válido. El desafío específicamente dice: "Una cosa a tener en cuenta son las secuencias de escape, como el código que imprime barras diagonales invertidas o comillas".Jalea , 26 bytes
Pruébalo en línea!
¡Y prueba ese código Jelly aquí!
La salida Jelly se convierte en código
Ọø‘‘‘‘‘‘‘‘‘‘‘‘‘Ọø‘‘‘‘‘‘‘‘‘‘Ọø
, que imprime chr (13) + chr (10)fuente
PHP, 72 bytes
fuente
> <>,
1068177 bytes¡Este es mi primer golf en> <> (pez)! Un lenguaje bastante interesante que tengo que decir. ¡Mucha diversión!
fuente
i:1+?!
eni:0(?
, y también siento que podría ahorrar unos pocos bytes si se construyó el resultado en la pila y esperó a que el final de la entrada a la salida ella. Quiero decir, eso es un montón deo
s;)C # 169 bytes
Golfizado:
Versión legible para humanos:
fuente
Haskell ,
106102 bytesPruébalo en línea!
Sin golf
fuente
Brachylog , 33 bytes
Pruébalo en línea!
Sintiéndome demasiado cansado para explicar esto en este momento, si alguien ve esto y se pregunta cómo funciona, deje un comentario para recordarme.
fuente
MathGolf , 17 bytes
Pruébalo en línea!
Explicación
Dado que cualquier carácter se puede poner en la pila (y, por lo tanto, la salida) usando
'<char>
, esto generará una secuencia de tales bloques de código.fuente
Þ
.Þ
. ( Los documentos que uso todavía indican el valor anterior ) .MATL ,
3228 bytesPruébalo en línea!
Enfoque completamente diferente basado en
strsplit
un programa de tipo autómata.fuente
En realidad , 25 bytes
Pruébalo en línea! (incluye salida de la ejecución del código Transpiled Actually)
Explicación:
fuente
shortC , 48 bytes
fuente
Fourier, 32 bytes
Pruébalo en FourIDE!
Este fue un desafío bastante fácil ya que Fourier es básicamente un superconjunto de; #:
fuente
CJam, 14 bytes
Explicación:
fuente
APL, 31 bytes
Salida:
Explicación:
⌽
: invertir la entrada{
...}
: pásalo a esta función:⍵⊂⍨'#'=⍵
: partición en cada uno#
de la cadena (desde el principio, por lo que tuvo que invertirse primero)+/¨';'=
: cuenta los;
s en cada partición127|
: módulo 127⌽
: invertirlo de nuevo'⎕UCS',
: anteponer la cadena⎕UCS
, que es la función Unicode.⍕
: representación de cadenafuente
⍕
como la salida real a STDOUT es la misma.Ruby , 47 + 1 = 48 bytes
+1 byte para
-p
.Pruébalo en línea!
-30 bytes gracias a @manatwork !
fuente
;
o#
"./;+#/
→/.*?#/
y el bloque de códigos.length-1
→s.count(?;)
. Por cierto, su matemática también está mal, ya que%
tiene mayor prioridad que-
, por lo que debería ser(s.length-1)%127
. Y en.gsub
bloque de código 's se puede acceder a los grupos capturados con$&
,$1
, ... por lo que el|s|
parámetro de bloque de código por lo general no es factible. Y los stringifies interpolación de cadenas:{"$><<#{$&.count(?;)%127}.chr;"}
. Pruébalo en línea!gsub
se modifica$_
directamente, lo que significa que no necesita reasignarlo. SIN EMBARGO, tiene problemas si tiene caracteres de comentarios después de su último#
... vea aquíPyth,
252324 bytes+1 bytes gracias a @FryAmTheEggman
¡Intentalo!
maneja los caracteres a los que se debe escapar utilizando solo 1-char-strings.
Resultados de muestra:
Utiliza mi; # intérprete .
fuente
#
en la entrada, ya que se imprimirá0
. Puedes arreglar esto con enjk
lugar des
.C, 150 bytes
Expandido:
Es un programa completo que (debería) terminar, ignorar los comentarios y producir un código de salida siempre correcto. Supongo EOF = -1
Probado en SystemResque-Cd 4.9.6, compilado con gcc 4.9.4
fuente
braingasm , 40 bytes
Debo decir que eso es sorprendentemente corto.
El código generado para
;
es un+
, que incrementa la celda actual.El código generado para
#
contiene una operación de módulo manual incómodafuente
Braingolf , 55 bytes
Pruébalo en línea!
Básicamente reemplaza
;
con1+
,#
con#~1+%@
y antepone todo el asunto con un0
porque el+
operador monádico está roto en este momento.1+
agrega 1 al último elemento en la pila.#~1+%@
empuja el valor de char de~
(126), agrega 1 para hacer 127, módulo con otro elemento en la pila, luego aparece e imprime como char.Explicación
fuente
q / kdb +, 42 bytes
Solución:
Ejemplos:
Tenga en cuenta que
,
se usa para significar una lista (frente a un átomo), ya que"\""
es una lista de un elemento, en lugar de ser un átomo.Explicación:
Tome la cadena de entrada, elimine todo lo que no sea a
#
o a;
, divida en listas#
, cuente el número de elementos en cada lista, realice el mod 127 en el resultado y eche a una cadena:Notas:
#
, de lo contrario, el último fragmento se caerá por error-1_
.;#
.fuente
Perl 5 , 78 bytes
Pruébalo en línea!
fuente