Construye un lenguaje de golf conmigo

30

Muchos usuarios de PPCG ayudaron con la creación de este desafío, tanto en el chat como en el Sandbox, específicamente Martin Ender , AdmBorkBork , Emigna y user202729

Nuestra comunidad ha encontrado necesario crear un conjunto de idiomas diseñados específicamente para el golf, "idiomas de golf" como los llamamos. Tales lenguajes han evolucionado desde el alguna vez brillante, ahora torpe GolfScript a los elegantes y concisos lenguajes como Jelly y Husk . Como podemos ver, estos lenguajes se hacen cada vez más cortos para un conjunto de tareas. Entonces, como los expertos obvios de los idiomas de golf, debemos diseñar un idioma juntos para vencer a cualquier otro idioma que se atreva a competir. ¡Presentamos Bugle!

Corneta: Desde el acrónimo BuGoL: Bu ILT Ir lfing L anguage.

Cómo funcionará este desafío

En caso de que no haya entendido lo que estoy aludiendo en la introducción, este desafío es un desafío de en el que cada uno de nosotros aporta algo al intérprete de un nuevo lenguaje de golf, mejorando su capacidad de competir en PPCG con cada respuesta.

Publicaré la primera respuesta que consiste en la base de la especificación / intérprete de lenguaje, y todas las demás respuestas continuarán a partir de eso. Las nuevas presentaciones proporcionarán lo siguiente:

  • Un cambio en las especificaciones del idioma.
  • Un intérprete actualizado que cumple exactamente lo que se establece en los cambios.
  • La puntuación actualizada del idioma (más detalles en un momento)

Puede cambiar la especificación de una de tres maneras:

  • Puedes agregar un solo comando
  • Puedes agregar dos nuevos comandos
  • Puede editar el comportamiento de un comando existente

Con respecto al nuevo intérprete, debe usar la última versión, escrita en Python. No tiene que ser golfizado. Cada comando agregado previamente debe ser comprobable con el último intérprete, así como con los comandos más nuevos (el que agregue). Tampoco debe usar lenguaje ofensivo en ningún momento al actualizar el intérprete, como en comentarios o literales de cadena, etc.

Los comandos agregados pueden hacer lo que desee . Los únicos requisitos son:

  • No produce resultados ofensivos.
  • No es lo mismo que otro comando
  • No evita que se complete uno de los desafíos de muestra

Aparte de estos, puede ser tan específico o tan general como desee. También puede ser cualquier personaje que quieras. Si no está seguro de si su incorporación constituye un 'nuevo comando', no dude en preguntar en los comentarios.

La puntuación del idioma

Es posible que haya notado que tiene que incluir el puntaje del idioma en todas las presentaciones nuevas. Su puntaje es lo que evita que este desafío sea para siempre, y se define de la siguiente manera:

La puntuación actual es la suma de los recuentos de bytes necesarios para que el idioma complete las 20 tareas siguientes.

Para cada una de las tareas, se aplican las reglas estándar de E / S , al igual que las lagunas estándar .

Las 20 tareas:

  1. "¡Hola Mundo!" - Salida de la cadenaHello, World!
  2. 1, 2, Fizz, 4, Zumbido : emite cada número entero de 1 a 100 (inclusive) en una línea separada, con múltiplos de 3 reemplazados por Fizz, múltiplos de 5 reemplazados por Buzzy múltiplos de ambos porFizzBuzz
  3. Produzca el número 2014 sin ningún número en su código fuente : envíe el número 2014 sin usar ninguno de los caracteres 0123456789del código fuente, sin acceder a variables externas o semillas aleatorias
  4. Ofuscado Hello World - Salida de la cadena Hello, World!, sin necesidad de utilizar cualquiera de los personajes de al menos dos de los siguientes conjuntos: hlwd, eor01y 27(mayúsculas y minúsculas)
  5. Cante feliz cumpleaños a su lenguaje de programación favorito : en el idioma que elija, envíe lo siguiente:

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. No somos ajenos al código de golf, conoces las reglas, y yo también - Saco la letra completa de "Never Gonna Give You Up"

  7. Mostrar el signo : dado un número, imprima -1 si es negativo, 0 si es 0 o 1 si es positivo
  8. Conjetura de Collatz (OEIS A006577) : a partir de un número entero, divídalo por 2 si es par, o multiplíquelo por 3 y agregue 1 si es impar, y repita el proceso hasta llegar a 1. La salida debe ser el número de iteraciones. te lleva a llegar a 1.
  9. Una matriz de desafíos # 1: matrices alternativas : dada una matriz de enteros, verifique si todos los elementos indexados pares son iguales, y todos los elementos indexados impares son iguales, y genera un valor verdadero o falso en consecuencia
  10. ¿Soy un conjunto insignificante? - Dado un conjunto de enteros, verifique si las diferencias absolutas entre elementos consecutivos son todas menores o iguales a 1, y genera un valor verdadero o falso en consecuencia
  11. ¿Es este número un primo? - Dado un número entero positivo, escriba un programa completo para verificar si es primo y generar un valor verdadero o falso en consecuencia
  12. Soy un palindrome. ¿Eres tú? - Dada una cadena, verifique si es palíndromo, mientras que su programa / función también es palíndromo, y emite dos valores distintos y consistentes en consecuencia
  13. Suma los números en entrada estándar : toma una serie de números de STDIN y genera su suma.
  14. Encontrar el factorial : dado un número entero n, genera el producto de todos los enteros entre 1e ninclusive.
  15. El código más corto para producir una salida infinita : sin ninguna entrada, produzca una salida infinita que, en teoría, nunca dejará de salir.
  16. Hornee un trozo de Pi - Imprima este texto exacto:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Encuentre el número más pequeño que no divide N : dado un entero positivo N, emite el entero positivo más pequeño que no divide N.
  2. ¿Es esto par o impar? - Dado un entero N, genera su paridad como valores de verdad / falsedad.
  3. Salida con la misma longitud que el código : escriba el código más corto cuya salida tiene la misma longitud que el código, donde la salida no es la misma que el código.
  4. ¡Golf un quine por un gran bien! - Escribe la quine más corta en tu idioma.

Para ser válido, una nueva presentación debe tener presentaciones de golf para al menos 2 de los problemas, al menos 1 byte para cada uno. Puede aumentar la duración de otras presentaciones, pero la puntuación total debe disminuir en al menos 2 por respuesta. Además, considere incluir un enlace a los programas actualizados. Las soluciones actualizadas no deben funcionar cuando se ejecutan con una versión anterior del intérprete.

Como obtener cookies

Tengo una lista de 5 desafíos, que no es obligatorio intentar, y no influyen en su puntaje, pero son simplemente desafíos adicionales para probar si Bugle es lo suficientemente capaz. Siéntase libre de incluir una solución a cualquier número de estos en su respuesta:

  1. Crea un auto intérprete
  2. Crear una quine capaz de carga útil
  3. Cofectar una cadena
  4. Hiperprogramación: N + N, N × N, N ^ N, todo en uno
  5. "NUDO" o "NO"?

No se incluyen descripciones, ya que no son necesarias para que todos puedan competir en el desafío.

Cómo ganar

Una vez que se ha alcanzado el puntaje mínimo ( creemos que es 16, aunque cualquier intento de jugar golf que sea muy bueno) ha sido alcanzado, obviamente la cadena ha terminado porque las soluciones no pueden obtener un mejor puntaje. Una vez que se han alcanzado los 16, el desafío se mantiene vivo durante 1 mes después, para dar a cualquiera la oportunidad de jugar al golf con las soluciones. Después de que este mes haya pasado, el desafío ha terminado.

Una vez que termine el desafío, migraré el intérprete a un repositorio de GitHub y pasaré por las maquinaciones habituales de liberar un lenguaje estable. También puede comenzar a publicar soluciones a los desafíos en PPCG en este momento, utilizando dicho lenguaje, pero intente no inundar la página principal con respuestas. En cambio, extiéndalos durante un período de tiempo.

Formateo

Para que la información sea más fácil de encontrar en su respuesta, formateela de la siguiente manera:

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

¿Dónde [N]está su número de respuesta (1 para el primero, 2 para el segundo, etc.)

Reglas

  • Debes esperar 3 horas entre publicar respuestas
  • No puede publicar dos veces seguidas, a menos que no se haya publicado ninguna respuesta durante 10 días (exactamente 240 horas)
  • No puede eliminar comandos anteriores.
  • Su intérprete no tiene que jugar golf, y su recuento de bytes es completamente irrelevante aquí.
  • Si alguien sugiere un golf a los programas mientras su respuesta es la más reciente, debe editar en los campos y actualizar su puntaje.
    • También puede hacer esto cuando su respuesta esté en el medio de la cadena, siempre que su puntaje no sea más bajo que las respuestas posteriores.
  • Abstenerse de responder a cualquier desafío PPCG existente usando este lenguaje, al menos hasta que el desafío haya terminado
  • El intérprete está escrito en Python 3, y debería continuar así durante toda la cadena. Está prohibido cambiar el idioma.
  • Nuevamente, para que sea válida, una nueva presentación debe tener presentaciones de golf para al menos 2 de los problemas, al menos 1 byte para cada uno.

¡Empecemos!

caird coinheringaahing
fuente
1
Sandbox
caird coinheringaahing
1
También podría preguntar: ¿A alguien le gustaría explicar el voto negativo? Valoro todos y cada uno de los comentarios que le gustaría dar.
caird coinheringaahing
2
@Kaldo No estamos muy seguros. La cantidad debe ser de dos bytes como mínimo, pero si sale el programa vacío Hello, World!, entonces son 19 bytes. Pero si el comportamiento del programa vacío cambia, dependiendo de la entrada, puede reducirse
caird coinheringaahing
1
@WeijunZhou "Por favor, abstenerse de responder a cualquier desafío PPCG existente utilizando este lenguaje, al menos hasta que el desafío termine"
caird coinheringaahing
1
@LyricLy Las construcciones de sintaxis (como los forbucles) están permitidas y se recomienda agregarlas
caird coinheringaahing

Respuestas:

3

3. Puntuación: 2938 2583 2532 (-51)

El nuevo intérprete está aquí .

Principalmente con el fin de jugar al golf y hacer que la salida sea más fácil, he agregado la capacidad de duplicar la pila / deque y también dar salida a todo el modelo en forma de texto renderizado en lugar de como enteros.

Soluciones

1. "¡Hola, mundo!" - 17 bytes (-3)

#"Hello, World!"a

5. Cante feliz cumpleaños a su lenguaje de programación favorito - 95 bytes (-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. No somos ajenos al código de golf, conoces las reglas, y yo también - 1884 bytes (-3)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. Hornea una porción de Pi - 149 bytes (-3)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. ¡ Golf un quine por un gran bien! - 23 bytes (-39)

$"R34RdR36Ra"R34RdR36Ra

Funciones de idioma agregadas

  • a

    • Todos: #"Hello, World!"aimprima todo el modelo como texto, por ejemplo, impresionesHello, World!
  • d

    • Pila / Deque: Empuje la pila sobre sí misma.
LyricLy
fuente
8

2. Puntuación: 2938 2583

El intérprete modificado está aquí en TIO .

La secuencia literal es la adición más obvia al lenguaje, principalmente para combatir los .

Soluciones

1. "¡Hola, mundo!" - 20 bytes (-28)

#"Hello, World!"[o>]

Cualquier puede completarse utilizando la estructura #"<string>"[o>]que genera la cadena dada hasta el 0 después de alcanzar la cadena.

2. 1, 2, Fizz, 4, Buzz - 419 64 bytes (-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

Gracias a @ user202729 por jugar al golf increíble en esto.

3. Produzca el número 2014 sin ningún número en su código fuente - 9 bytes (-4)

#"ĒĎ"[O>]

Utiliza los dos caracteres 20 y 14 en los puntos de código de Bugle.

4. Ofuscado Hello World - 19 bytes (-153)

#"Ifmmp!Xpsme"[-o>]

Cumple con las reglas # 1 (no HLWDhlwd) y # 3 (no 27).

5. Cante feliz cumpleaños a su lenguaje de programación favorito - 98 bytes (-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. No somos ajenos al código de golf, conoces las reglas, y yo también - 1887 bytes (-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. Hornee una porción de Pi - 149 bytes (-290)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. ¡ Golf un quine por un gran bien! - 62 bytes (-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

Característica de idioma agregada

  • "...": Cadena literal.
    • Stack / Deque: empuja los puntos de código de Bugle de cada personaje a la parte superior / frontal de la pila / deque.
    • Cinta / Cuadrícula: escriba los puntos de código de Bugle de cada carácter en la cinta / cuadrícula a la derecha, comenzando desde la celda actual. No mueve el cursor.
    • \n se maneja igual que otros caracteres.
    • No hay caracteres de escape por ahora, por lo que no puede escribir "(34) en la memoria con este comando. No es un gran problema, al menos por ahora, ya que todos los enumerados aquí no tienen "en la salida.

Cualquier golf adicional siempre es bienvenido, especialmente por "Nunca te voy a rendir" y el quine. Específicamente, la quine anterior es la primera quine no trivial que hice, por lo que creo firmemente que alguien puede llegar a una más corta.

Bubbler
fuente
Existen los tipos de adiciones que espero que todos los demás hagan, en lugar de solo agregar incorporados para los desafíos específicos. +1
caird coinheringaahing
@ user202729 Probablemente fui yo quien introdujo el error; gracias por arreglarlo y la solución FizzBuzz.
Bubbler
3

1. Puntuación: 9638

El intérprete base se puede encontrar aquí , y las presentaciones aquí . Es bastante largo, así que lo he incluido en GitHub, en lugar de ocupar la mayor parte de la publicación.

Soluciones

Todas estas soluciones son los programas Unicode, se ejecutan con el -uindicador de línea de comando, pero las puntuaciones se cuentan como codificadas con la página de códigos de Bugle.

1. "¡Hola, mundo!" - 48 bytes

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Simplemente presione y luego muestre el código de cada carácter en la cadena.

2. 1, 2, Fizz, 4, Buzz - 1396 bytes

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

La misma técnica que Hello, World! ejemplo

3. Produzca el número 2014 sin ningún número en su código fuente - 13 bytes

#++O--O+O+++O

#usa la cinta, +incrementa la celda, Osale como un número entero y -disminuye

4. Ofuscado Hello World - 172 bytes

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

Utiliza su similitud inherente al brainfuck. Cumple con las reglas n. ° 1 y n. ° 3

5. Canta Happy Birthday a tu lenguaje de programación favorito - 328 bytes

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Todos los tienen este tipo de estructura, por el momento.

6. No somos ajenos al código de golf, conoces las reglas, y yo también - 6893 bytes

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Salida de la señal - 18 bytes

$?:Zs0=0s-s:1s-++O

Comprueba si la entrada es mayor que cero, menor que cero (cambiado a rendimiento en -1lugar de 1) e igual a cero, antes de tomar su suma.

8. Conjetura de Collatz (OEIS A006577) - 36 bytes

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

Esto realiza el bucle en la pila, pero cambia a la cinta para incrementar el recuento en cada iteración.

9. Una matriz de desafíos # 1: matrices alternativas - 35 bytes

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

Esta es una ligera modificación de la respuesta de Mitch Schwartz al desafío existente. ¡Vota eso!

10. ¿Soy un conjunto insignificante? - 46 bytes

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

Todo el crédito va a Emigna por hacer esto

11. ¿Es este número un primo? - 31 bytes

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

Utiliza el teorema de Wilson y calcula (n-1)!² % n

12. Soy un palíndromo. ¿Eres tú? - 13 bytes

$?:R=:O:=R:?$

La primera mitad del programa, hasta O, configura la pila como [x, x]donde xestá Trueo False. Omuestra el valor superior y lo genera. El resto del programa solo se asegura de que no se produzcan errores. Afortunadamente, cuando ?encuentra el final del archivo, simplemente empuja ''(la cadena vacía).

13. Suma los números en estándar en - 19 bytes

$?:[?:];L0s[+L1s-]O

Esto se puede dividir en dos partes: ?:[?:];y L0s[+L1s-]. La primera parte recoge toda la entrada a la pila. La segunda parte empuja la suma de los dos elementos superiores, mientras que la longitud es mayor que 1.

14. Encuentra el factorial - 25 bytes

$?:[:1s-:];L1s-Z[×L1s-]O

Esto tiene una estructura similar al programa de suma, pero en lugar de presionar múltiples entradas, [:1s-:];empuja el rango desde 1 .. nla pila y [×L1s-]toma el producto.

15. Código más corto para producir una salida infinita : 5 bytes

#+[O]

Use un bucle while, con el 1continuo debajo del puntero. Salidas 1para siempre.

16. Hornea una rebanada de Pi - 439 bytes

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Encuentra el número más pequeño que no divide N

$?:1:[:rs%0=s1+srr:Rs]1s-O

Utiliza la división de prueba, que termina cuando el resultado del módulo no es igual 0.

18. ¿Es esto par o impar? - 5 bytes

$2?%O

Módulo simple por 2

19. Salida con la misma longitud que el código - 16 bytes

$16:[32+:o33s-:]

Muestra los primeros 16 caracteres ASCII imprimibles en reversa: 0/.-,+*)('&%$#"!

20. ¡ Golf un quine por un gran bien!

$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]

El crédito va al usuario202729 por hacer esto


Especificación de idioma

Vocación

bugle.pyactualmente toma una serie de banderas, luego se ejecuta el nombre / código del archivo. Hasta el momento, tiene 4 banderas de línea de comando:

  • -f/ --fileespecifica que el código debe leerse desde un archivo
  • -c/ --cmd/ --cmdlineEspecifica que el código se suministra a través de la línea de comandos.

    -cy -fno se puede usar en la misma llamada

  • -u/ --unicodele dice al intérprete que lea el código con la codificación Unicode. El valor predeterminado es usar la codificación de Bugle a continuación

  • -l/ --lengthemite la longitud del archivo, en bytes, a STDERR después de la ejecución

La siguiente llamada se usó para probar los envíos anteriores

$ python bugle.py -f -u [file]

Página de código

Bugle usa 512 caracteres en su página de códigos. El 0xFFcarácter no se debe usar para un comando , ya que se usa para indicar que el siguiente valor hexadecimal se indexará en la segunda mitad de la página de códigos. Los caracteres utilizados son:

ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎

O verlo en formato de tabla . Tenga en cuenta que \ty \nrepresentan tab y nueva línea respectivamente. También tenga en cuenta que la línea 16 termina con un carácter no imprimible , y puede no mostrarse en todos los navegadores.

Memoria

El intérprete actualmente tiene 5 modelos de memoria integrados. Cada modelo de memoria requiere un personaje para decirle al intérprete que comience a usar ese modelo:

  • Stack ( $): una pila estándar, que admite valores empujados, reventados, etc.
  • Infinite tape ( #): una cinta, a la brainfuck, que inicialmente solo es 0s.
  • Cuadrícula infinita ( G): una cuadrícula 2d, infinita en ambas direcciones, que contiene solo 0s
  • Deque ( D): una deque , tal como la implementa el collectionsmódulo.
  • Register ( S): un valor único, que se puede usar para almacenar un valor.

La cuadrícula también tiene un único valor guardado en su puntero que se puede escribir o escribir en celdas.

Además, los tamaños de cinta y cuadrícula y el comportamiento de ajuste pueden modificarse mediante un comando de invocación diferente. Estos comandos diferentes toman un número dado de valores del modelo de memoria actual como parámetros de personalización:

  • Cinta ( À): toma dos valores: tamaño ( int) y envoltura ( bool)
  • Cinta ( Á): toma un valor: tamaño ( int). Envolturas al final de la cinta
  • Cinta ( Â): toma un valor: tamaño ( int). No se envuelve al final
  • Grid ( Ǵ): toma 4 valores: x size ( int), y size ( int), x wrap ( bool) y y wrap ( bool)

El tipo de memoria que se usa puede cambiar durante un programa mediante el uso de ₀₁₂₃₄₅₆₇₈₉, que accede al ntipo de memoria usado indexado en 0 ( es el primero, es el segundo, etc.), pero, actualmente, los valores no pueden intercambiarse entre diferentes tipos de memoria.

Derivación

Hasta ahora, Bugle tiene dos comandos de ramificación, ambos terminados con un ]carácter:

  • While ( [): bucles de estilo brainfuck. Estos muestran un valor de la pila / deque si se está utilizando, o acceden a la celda debajo del puntero en cinta / cuadrícula.

    Ejemplo: #?[-O]cuenta desde la entrada hasta0

  • If / else ( {y }). Ejecución única mientras bucles. Si el valor reventado es falso, entonces se omite la cláusula if, yendo a la cláusula else, separada por }. Se comportan de la misma manera que los bucles while con respecto al acceso a la memoria.

    Ejemplo: {0}1]es una puerta NO lógica

Funciones integradas

Las ejecuciones de dígitos se interpretan como enteros y simplemente se envían / ​​escriben en el modelo de memoria actual tal cual.

Obviamente, he equipado a Bugle con algunas funciones básicas integradas, tan pocas como pude, para permitir que otros agreguen más a medida que avanza la cadena. Los comandos base son los siguientes:

  • +

    • Stack / Deque: agrega los dos valores principales
    • Cinta / Cuadrícula: Incremente la celda actual
  • -

    • Stack / Deque: resta los dos valores superiores
    • Cinta / Cuadrícula: disminuir la celda actual
  • %

    • Stack / Deque: modula los dos valores principales
  • :

    • Pila / Deque: Duplicar el valor superior
  • ;

    • Stack / Deque: Pop el valor superior
    • Cinta / Cuadrícula: Cero la celda actual
  • <

    • Cinta / Cuadrícula: mover hacia la izquierda una celda
  • =

    • Pila: ¿Son iguales los dos valores superiores?
    • Cuadrícula: mover hacia abajo una celda
  • >

    • Cinta / Cuadrícula: mover hacia la derecha una celda
  • ?

    • Stack / Deque: evalúa una línea de entrada
    • Cinta / Cuadrícula: tome un carácter de entrada
  • L

    • Stack / Deque: empuje la longitud de la pila / deque
  • O

    • Todos: muestra el valor actual
  • R

    • Pila: invierta el elemento superior si es posible, de lo contrario invierta la pila
  • Z

    • Pila: ¿El elemento superior es positivo?
  • ^

    • Cuadrícula: mover una celda hacia arriba
  • h

    • Todos: imprima el modelo de memoria completa
  • o

    • Todos: imprime el valor actual como un carácter
  • r

    • Pila: rotar los 3 valores principales
    • Deque: rotar los ntiempos de deque , donde nes el valor superior
  • s

    • Stack / Deque: intercambia los dos valores superiores
    • Pila: Splat el valor superior
  • ×

    • Pila: Multiplica los dos valores superiores
    • Cuadrícula: escriba el valor del puntero en la celda actual
  • ÷

    • Pila: divide los dos valores principales
    • Cuadrícula: escriba la celda actual en el valor del puntero
caird coinheringaahing
fuente