Esistono lingue particolarmente abili nell'arte ASCII?


20

Mi chiedevo se ci sono lingue esoteriche o da golf che mirano specificamente all'output di testo e all'arte ASCII?

Ad esempio, 05AB1E è iniziato almeno indirizzando le conversioni di base. Esistono linguaggi golfistici mirati all'output di testo e all'arte di output del testo?

In tal caso, hanno pagine di suggerimenti qui e sono di uso comune?

Nota: non sto cercando linguaggi in grado di produrre arte ASCII, ma piuttosto intenzionalmente progettati per essere in grado di completare le sfide di in un modo relativamente breve e conciso.


1
Da quando l'hai menzionato, nella mia esperienza 05AB1E è molto bravo nelle sfide di arte ascii.
DJMcMayhem

1
Mi piacerebbe vedere un linguaggio di arte ASCII chiamato "ASC e II devono ricevere". (Scherzi a parte, se non si esce già, c'è un bel po 'di potenziale lì.)
Hactar

Ho progettato un linguaggio chiamato Crayon che è stato creato appositamente per creare arte ASCII, ma sfortunatamente non ho ancora avuto il tempo di implementarlo.
ETHproductions

@ Solo ASCII e ho lavorato su un linguaggio di arte ASCII. È ancora in fase di progettazione, ma ci piacerebbe il tuo contributo (o quello di chiunque). Unisciti a noi in chat se sei interessato.
DLosc,

Bene qui stavo pensando che la mia idea fosse unica ... Ho fatto questa domanda perché volevo scrivere un linguaggio basato su CharMatrix. Nessuno ha menzionato una delle caratteristiche che volevo, quindi potrei andare avanti e farlo comunque. Tutte le risposte e i commenti sono stati fantastici, grazie a tutti
Socratic Phoenix,

Risposte:


15

Bene, in effetti c'è! Una tale lingua è quella che ho lavorato su per un po 'chiamato V .

Sotto il cofano, V è solo VIM , ma tutti i tasti vengono eseguiti automaticamente e il contenuto del buffer VIM viene stampato su STDOUT al termine del programma. Questo rende l'esecuzione più conveniente.

Un po 'di storia sulla lingua. Quando ho iniziato a utilizzare l'editor di testo vim per code-golf, ho scoperto che in realtà è abbastanza bravo in questo, ma ha alcune caratteristiche fastidiose che rendono più difficile competere con esso. Ad esempio, puoi impostare una sorta di "ciclo continuo" facendo

qq<foobar>@qq@q

che si ripeterà <foobar>fino a quando si verifica un errore. Questo ha 7 byte di codice boilerplate. In V, questo è abbreviato in ò<foobar>ò.

Alcune delle cose che rendono grande V per l'arte ASCII:

  • È 2d per natura. Una caratteristica è che ha una posizione "cursore", in cui la maggior parte dei comandi fa qualcosa in base alla posizione del cursore nel testo. Gli altri comandi spostano la posizione del cursore. Ad esempio, x cancella un singolo carattere, ma Wx avanza di una parola e quindi cancella un carattere. Poiché la maggior parte delle altre lingue non è intenzionalmente bidimensionale, ciò offre un vantaggio quando si tratta di posizionare il testo nello spazio 2D

  • È interamente basato su stringhe. È possibile utilizzare alcune operazioni Mathy, ma questi sono di solito il modo più tempo per realizzare le cose.

  • Usa la compressione regex per cambiare rapidamente il testo.

  • Tutta la sua memoria interna, che è solo un array di caratteri 2D, viene implicitamente stampata al termine del programma. Inoltre, tutti gli input vengono aggiunti implicitamente nella sua memoria interna , il che è utile quando la maggior parte della sfida riguarda la modifica dell'input in un certo modo.

Quindi mi piace molto usare questo linguaggio, e se stai cercando un linguaggio specificamente , lo consiglio vivamente. Tuttavia , darei anche alcune dichiarazioni di non responsabilità.

  • È molto confuso da imparare. È anche molto potente, ma poiché si basa su un editor di testo molto popolare che ha 30 anni, ci sono molte funzionalità oscure che potrebbero facilmente confondere i nuovi utenti.

  • Anche se è meglio gestire i numeri che vim, il suo supporto ai numeri non è ancora eccezionale. Personalmente, penso che questo renda più divertente il lavoro (un po 'come usare la retina per compiti a cui regex non è mai stato pensato). : D

  • È ancora un WIP. Ci sono alcuni bug e alcune cose che non sono ancora riuscito ad aggiungere.

  • Non ha molti utenti. (Numero attuale di utenti: 1).

Se sei interessato a saperne di più, ecco alcune buone risorse:

  • Una chat room in cui sarei felice di rispondere a tutte le tue domande e di aiutarti a spiegarti come funziona.

  • Un thread di suggerimenti per giocare a golf in vim, ma la maggior parte dei suggerimenti riporto.

  • Un meta post che descrive V in modo più dettagliato.


8

Di recente ho creato un nuovo linguaggio di programmazione, chiamato Turtlèd , che opera su una griglia di caratteri con una tartaruga, che si muove attorno alla griglia, scrive sulla griglia e ha un flusso di controllo con la griglia. La griglia viene stampata implicitamente alla fine. Con questo fatto che non deve scrivere spazi, e che può scrivere il testo nello spazio, piuttosto che da sinistra a destra, dall'alto verso il basso, probabilmente lo fa incontrare la definizione data, essendo bravo nell'arte ascii.

Attualmente non ci sono documenti, quindi probabilmente non sarai in grado di usarlo, a meno che tu non voglia leggere il mio interprete, che probabilmente non è qualcosa che vuoi fare. Penso che ci possano essere anche dei bug nell'interprete, ma le specifiche non sono abbastanza sviluppate per dire se si tratta di un bug. Turtlèd probabilmente finirà presto, con documenti e tutto il resto


3

Introduzione a ASCII-Golfing per 05AB1E (conversione di base [semplice])

Mentre 05AB1E non è destinato direttamente all'arte ASCII, ho vinto 2 sfide con esso. La cosa migliore di 05AB1E è che, anche con la semplice conversione di base, ci sono spesso trucchi che puoi usare per estendere e persino dimezzare il conteggio dei byte. Spesso nelle sfide ASCII ci sono trucchi di ripetizione che è possibile utilizzare per disegnare solo metà del modello, quindi capovolgere e concatenare. Se è un modello a quattro vie puoi fare cose come zip e biforcate per disegnare solo un angolo del modello. Esistono molte tecniche di manipolazione della struttura dei dati da utilizzare insieme a questa semplice idea di compressione di base.


Ecco un rapido corso accelerato su una tattica di conversione di base:

In 05AB1E elenco tutti i caratteri usati nell'arte ASCII, ad esempio:

--===___===--

Si tradurrebbe in:

-
=
_

Quindi assegno loro i numeri che iniziano con 1, poi con 0 e poi con 2:

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

Sostituisco i caratteri nella stringa originale con i numeri:

1122200022211

Converto in decimale usando la base più bassa possibile (3):

879412

( Come fare questo usando 05AB1E )

Quindi lo converto in base 214:

Jh]

( Come fare questo usando 05AB1E )

Lo avvolgo quindi nel seguente codice:

05AB1E , 16 byte

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

Provalo online!

Oppure provalo con i passaggi intermedi visualizzati.

Spiegazione finale:

•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.

Ora, con questa sfida specifica, la stringa è così corta che non ha senso farlo. Probabilmente spingerei solo metà della stringa e Palindromize per 10 byte "--===__"ûo la golferei come ha fatto Adnan nei commenti usando fattoriale, uomo intelligente •Jh]•3B5!…-=_‡. È anche (uno di?) Il creatore (i?) Di 05AB1E.


Esempio più complesso:

/codegolf//a/106621/59376


Inoltre, forse prova il linguaggio di complessità kolmogorov di Dennis: Bubblegum ; non ho idea di come usarlo.


2
Bubblegum non è davvero una buona lingua per l'arte ASCII, dal momento che non può assolutamente ricevere input (tranne per i due esempi ), che è richiesto per la maggior parte delle sfide di arte ASCII. Cinnamon Gum potrebbe essere un'opzione migliore, anche se non ne so molto e per quanto ne so non ci sono documenti
ETHproductions

1
Non molto importante, ma puoi giocare a golf fino a:•Jh]•3B5!…-=_‡
Adnan,

1
@Adnan "--===__"ûper 10;).
Magic Octopus Urn,

2

Pennello

Paintbrush è un linguaggio di programmazione ricreativo creato da me stesso, Hyper Neutrino, allo scopo di essere bravo in ASCII-Art. In molti casi non è in grado di competere bene con il carbone, ma può richiedere input e fare una varietà di altre cose. Funziona su una griglia 2D di caratteri ed è in grado di manipolare il carattere di sfondo, manipolare quello che è considerato un personaggio di sfondo al momento, spostare righe e colonne, spostare righe e colonne, copiare righe, colonne o l'intera griglia, ecc.

Alcuni esempi possono essere trovati nel repository GitHub.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.