¿Hay algún idioma especialmente bueno en el arte ASCII?

20

Me preguntaba si hay algún lenguaje esotérico o de golf que se dirija específicamente a la salida de texto y al arte ASCII.

Por ejemplo, 05AB1E al menos comenzó apuntando a conversiones base. ¿Hay idiomas de golf dirigidos a la salida de texto y el arte de salida de texto?

Si es así, ¿tienen páginas de consejos aquí, y son de uso común?

Nota: No estoy buscando lenguajes que puedan generar arte ASCII, sino más bien aquellos diseñados intencionalmente para poder completar desafíos de una manera relativamente breve y concisa.

Fénix Socrático
fuente
1
Desde que lo mencionaste, en mi experiencia 05AB1E es muy bueno en los desafíos de arte ascii.
DJMcMayhem
1
Me gustaría ver un lenguaje de arte ASCII llamado "ASC y II recibirán". (En serio, si uno aún no sale, hay bastante potencial allí.)
Hactar
Diseñé un lenguaje llamado Crayon que está hecho específicamente para crear arte ASCII, pero desafortunadamente aún no he tenido tiempo de implementarlo.
ETHproductions
@ Solo ASCII y he estado trabajando en un lenguaje de arte ASCII. Todavía está en la fase de diseño, pero nos encantaría su aporte (o el de cualquiera). Únete a nosotros en el chat si estás interesado.
DLosc
Bueno, aquí estaba pensando que mi idea era única ... Hice esta pregunta porque quería escribir un lenguaje basado en CharMatrix. Sin embargo, nadie mencionó una de las características que quería, por lo que podría seguir adelante y hacerlo de todos modos. Todas las respuestas y comentarios han sido geniales por cierto, gracias a todos
Socratic Phoenix

Respuestas:

15

Bueno, de hecho, lo hay! Uno de los idiomas es uno que he estado trabajando durante un tiempo denominado V .

Debajo del capó, V es solo vim , pero todas las pulsaciones de teclas se ejecutan automáticamente, y el contenido del búfer vim se imprime en STDOUT cuando finaliza el programa. Esto hace que ejecutarlo sea más conveniente.

Un poco de historia sobre el idioma. Cuando comencé a usar el editor de texto vim para code-golf, descubrí que en realidad es bastante bueno, pero tiene algunas características molestas que hacen que sea más difícil competir. Por ejemplo, puede configurar una especie de "bucle while" haciendo

qq<foobar>@qq@q

que se repetirá <foobar>hasta que ocurra un error. Esto tiene 7 bytes de código repetitivo. En V, esto se acorta a ò<foobar>ò.

Algunas de las cosas que hacen que V sea genial para el arte ASCII:

  • Es 2d por naturaleza. Una característica es que tiene una posición de "cursor", donde la mayoría de los comandos hacen algo según la ubicación del cursor en el texto. Los otros comandos mueven la ubicación del cursor. Por ejemplo, x elimina un solo carácter, pero Wx avanza una palabra y luego elimina un carácter. Dado que la mayoría de los otros lenguajes no son intencionalmente bidimensionales, esto ofrece una buena ventaja cuando el desafío es colocar el texto en un espacio 2D

  • Está completamente basado en cadenas. Usted puede utilizar algunas operaciones Mathy, pero estos son generalmente la manera más tiempo para lograr cosas.

  • Utiliza compresión regex para cambiar rápidamente el texto.

  • Toda su memoria interna, que es solo una matriz de caracteres 2D, se imprime implícitamente cuando finaliza el programa. Además, todas las entradas se agregan implícitamente a su memoria interna , lo cual es bueno cuando la mayor parte del desafío consiste en cambiar la entrada de cierta manera.

Así que realmente disfruto usando este lenguaje, y si está buscando un lenguaje específicamente , lo recomiendo encarecidamente. Sin embargo , también daría algunas advertencias.

  • Es muy confuso aprender. También es muy poderoso, pero debido a que se basa en un editor de texto muy popular que tiene 30 años, hay muchas características oscuras que podrían confundir fácilmente a los nuevos usuarios.

  • Aunque es mejor para manejar números que vim, su soporte numérico aún no es excelente. Personalmente, creo que esto hace que sea más divertido trabajar en él (algo así como usar retina para tareas que regex nunca fue pensado). :RE

  • Todavía es un WIP. Hay algunos errores y algunas cosas que aún no he podido agregar.

  • No tiene muchos usuarios. (Número actual de usuarios: 1).

Si está interesado en aprender más, aquí hay algunos buenos recursos:

  • Una sala de chat donde me complacería responder cualquier pregunta que tenga y ayudar a explicarle cómo funciona.

  • Un hilo de consejos para jugar al golf en vim, pero la mayoría de los consejos se transfieren.

  • Una meta publicación que describe V con más detalle.

DJMcMayhem
fuente
8

Recientemente hice un nuevo lenguaje de programación, llamado Turtlèd , que opera en una cuadrícula de caracteres con una tortuga, que se mueve alrededor de la cuadrícula, escribe en la cuadrícula y tiene control de flujo con la cuadrícula. La cuadrícula se imprime implícitamente al final. Por este hecho de que no tiene que escribir espacios, y que puede escribir el texto espacialmente, en lugar de izquierda a derecha, de arriba a abajo, probablemente lo haga cumplir con la definición dada, siendo bueno en el arte ascii.

Actualmente, no hay ningún documento, por lo que probablemente no podrá usarlo, a menos que quiera leer mi intérprete, lo que probablemente no sea algo que quiera hacer. Creo que también puede haber errores en el intérprete, pero la especificación no está lo suficientemente desarrollada como para decir si es un error. Turtlèd probablemente terminará pronto, con documentos y todo, aunque

Limón Destructible
fuente
3

Introducción a ASCII-Golfing para 05AB1E (Conversión de base [Simple])

Si bien 05AB1E no está diseñado para ASCII-Art directamente, he ganado 2 desafíos con él. Lo mejor de 05AB1E es que, incluso con la conversión de base simple, a menudo hay trucos que puede usar para extender e incluso reducir a la mitad su conteo de bytes. A menudo, en los desafíos ASCII hay trucos de repetición que puede utilizar para dibujar solo la mitad del patrón y luego voltear y concatenar. Si se trata de un patrón de cuatro vías, puede hacer cosas como comprimir y bifurcar para dibujar solo una esquina del patrón. Hay muchas técnicas de manipulación de estructura de datos para usar en conjunto con esta idea de compresión de base simple.


Aquí hay un curso rápido en una táctica de conversión de base:

En 05AB1E enumero todos los caracteres utilizados en el arte ASCII, por ejemplo:

--===___===--

Daría como resultado:

-
=
_

Luego les asigno números que comienzan con 1, luego 0 y luego 2:

- is 1.
= is 0.
_ is 2.

Reemplazo los caracteres en la cadena original con los números:

1122200022211

Convierto a decimal usando la base más baja posible (3):

879412

( Cómo hacer esto usando 05AB1E )

Luego lo convierto en base 214:

Jh]

( Cómo hacer esto usando 05AB1E )

Luego lo envuelvo en el siguiente código:

05AB1E , 16 bytes

•Jh]•3B…102…-_=‡

Pruébalo en línea!

O pruébelo con los pasos intermedios que se muestran.

Final explicado:

•Jh]•            # Push the compressed ASCII integer.
     3B          # Convert it to base 3.
       …102      # Push the keys to the conversion.
           …-_=  # Push the values to the conversion.
               ‡ # Transliterate, replace 0, 1 and 2 with the symbols.

Ahora, con este desafío específico, la cadena es tan corta que no tiene sentido hacerlo. Probablemente solo empujaría la mitad de la cadena y Palindromize por 10 bytes "--===__"ûo jugaría golf como lo hizo Adnan en los comentarios usando factorial, hombre inteligente •Jh]•3B5!…-=_‡. También es (uno de?) El creador (es) de 05AB1E.


Ejemplo más complejo:

/codegolf//a/106621/59376


Además, quizás pruebe el lenguaje de complejidad kolmogorov de Dennis: Bubblegum ; No tengo idea de cómo usar esto.

Urna de pulpo mágico
fuente
2
Bubblegum no es realmente un buen lenguaje para el arte ASCII, ya que no puede recibir información (a excepción de los dos ejemplos ), que se requiere para la mayoría de los desafíos del arte ASCII. Cinnamon Gum podría ser una mejor opción, aunque no sé mucho al respecto y que yo sepa no hay documentos
ETHproductions
1
No es realmente importante, pero puedes jugar esto a:•Jh]•3B5!…-=_‡
Adnan
1
@Adnan "--===__"ûpor 10;).
Urna de pulpo mágico
2

Cepillo de pintura

Paintbrush es un lenguaje de programación recreativo creado por mí mismo, Hyper Neutrino, con el propósito de ser bueno en ASCII-Art. No compite bien con el carbón vegetal en muchos casos, pero puede recibir aportes y hacer una variedad de otras cosas. Funciona en una cuadrícula de caracteres en 2D y puede manipular el carácter de fondo, manipular lo que se considera un carácter de fondo en ese momento, desplazar filas y columnas, mover filas y columnas, copiar filas, columnas o toda la cuadrícula, etc.

Algunos ejemplos se pueden encontrar en el repositorio de GitHub.

Hiperneutrino
fuente