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 encadenamiento de respuestas 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:
- "¡Hola Mundo!" - Salida de la cadena
Hello, World!
- 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 porBuzz
y múltiplos de ambos porFizzBuzz
- 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
0123456789
del código fuente, sin acceder a variables externas o semillas aleatorias - 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
,eor01
y27
(mayúsculas y minúsculas) 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
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"
- Mostrar el signo : dado un número, imprima -1 si es negativo, 0 si es 0 o 1 si es positivo
- 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.
- 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
- ¿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
- ¿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
- 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
- Suma los números en entrada estándar : toma una serie de números de STDIN y genera su suma.
- Encontrar el factorial : dado un número entero
n
, genera el producto de todos los enteros entre1
en
inclusive. - 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.
- Hornee un trozo de Pi - Imprima este texto exacto:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
\::\433832|
\::\79502|
\::\8841|
\::\971|
\::\69|
\::\3|
\__\|
- 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.
- ¿Es esto par o impar? - Dado un entero N, genera su paridad como valores de verdad / falsedad.
- 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.
- ¡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:
- Crea un auto intérprete
- Crear una quine capaz de carga útil
- Cofectar una cadena
- Hiperprogramación: N + N, N × N, N ^ N, todo en uno
- "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!
fuente
Hello, World!
, entonces son 19 bytes. Pero si el comportamiento del programa vacío cambia, dependiendo de la entrada, puede reducirsefor
bucles) están permitidas y se recomienda agregarlasRespuestas:
3. Puntuación:
293825832532 (-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)
5. Cante feliz cumpleaños a su lenguaje de programación favorito - 95 bytes (-3)
6. No somos ajenos al código de golf, conoces las reglas, y yo también - 1884 bytes (-3)
16. Hornea una porción de Pi - 149 bytes (-3)
20. ¡ Golf un quine por un gran bien! - 23 bytes (-39)
Funciones de idioma agregadas
a
#"Hello, World!"a
imprima todo el modelo como texto, por ejemplo, impresionesHello, World!
d
fuente
2. Puntuación:
29382583El intérprete modificado está aquí en TIO .
La secuencia literal es la adición más obvia al lenguaje, principalmente para combatir los desafíos de complejidad kolmogorov .
Soluciones
1. "¡Hola, mundo!" - 20 bytes (-28)
Cualquier desafío de complejidad kolmogorov 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 -
41964 bytes (-1332)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)
Utiliza los dos caracteres 20 y 14 en los puntos de código de Bugle.
4. Ofuscado Hello World - 19 bytes (-153)
Cumple con las reglas # 1 (no
HLWDhlwd
) y # 3 (no27
).5. Cante feliz cumpleaños a su lenguaje de programación favorito - 98 bytes (-230)
6. No somos ajenos al código de golf, conoces las reglas, y yo también - 1887 bytes (-5006)
16. Hornee una porción de Pi - 149 bytes (-290)
20. ¡ Golf un quine por un gran bien! - 62 bytes (-12)
Característica de idioma agregada
"..."
: Cadena literal.\n
se maneja igual que otros caracteres."
(34) en la memoria con este comando. No es un gran problema, al menos por ahora, ya que todos los desafíos de complejidad kolmogorov 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.
fuente
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
-u
indicador 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
Simplemente presione y luego muestre el código de cada carácter en la cadena.
2. 1, 2, Fizz, 4, Buzz - 1396 bytes
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
#
usa la cinta,+
incrementa la celda,O
sale como un número entero y-
disminuye4. Ofuscado Hello World - 172 bytes
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
Todos los desafíos de complejidad kolmogorov 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
7. Salida de la señal - 18 bytes
Comprueba si la entrada es mayor que cero, menor que cero (cambiado a rendimiento en
-1
lugar de1
) e igual a cero, antes de tomar su suma.8. Conjetura de Collatz (OEIS A006577) - 36 bytes
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
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
Todo el crédito va a Emigna por hacer esto
11. ¿Es este número un primo? - 31 bytes
Utiliza el teorema de Wilson y calcula
(n-1)!² % n
12. Soy un palíndromo. ¿Eres tú? - 13 bytes
La primera mitad del programa, hasta
O
, configura la pila como[x, x]
dondex
estáTrue
oFalse
.O
muestra 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
Esto se puede dividir en dos partes:
?:[?:];
yL0s[+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
Esto tiene una estructura similar al programa de suma, pero en lugar de presionar múltiples entradas,
[:1s-:];
empuja el rango desde1 .. n
la pila y[×L1s-]
toma el producto.15. Código más corto para producir una salida infinita : 5 bytes
Use un bucle while, con el
1
continuo debajo del puntero. Salidas1
para siempre.16. Hornea una rebanada de Pi - 439 bytes
17. Encuentra el número más pequeño que no divide N
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
Módulo simple por 2
19. Salida con la misma longitud que el código - 16 bytes
Muestra los primeros 16 caracteres ASCII imprimibles en reversa:
0/.-,+*)('&%$#"!
20. ¡ Golf un quine por un gran bien!
El crédito va al usuario202729 por hacer esto
Especificación de idioma
Vocación
bugle.py
actualmente 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
/--file
especifica que el código debe leerse desde un archivo-c
/--cmd
/--cmdline
Especifica que el código se suministra a través de la línea de comandos.-c
y-f
no se puede usar en la misma llamada-u
/--unicode
le 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
/--length
emite la longitud del archivo, en bytes, a STDERR después de la ejecuciónLa siguiente llamada se usó para probar los envíos anteriores
Página de código
Bugle usa 512 caracteres en su página de códigos. El
0xFF
cará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:O verlo en formato de tabla . Tenga en cuenta que
\t
y\n
representan 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:
$
): una pila estándar, que admite valores empujados, reventados, etc.#
): una cinta, a la brainfuck, que inicialmente solo es0
s.G
): una cuadrícula 2d, infinita en ambas direcciones, que contiene solo0
sD
): una deque , tal como la implementa elcollections
módulo.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:
À
): toma dos valores: tamaño (int
) y envoltura (bool
)Á
): toma un valor: tamaño (int
). Envolturas al final de la cintaÂ
): toma un valor: tamaño (int
). No se envuelve al finalǴ
): 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 aln
tipo 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ógicaFunciones 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:
+
-
%
:
;
<
=
>
?
L
O
R
Z
^
h
o
r
n
tiempos de deque , donden
es el valor superiors
…
×
÷
fuente