Existem idiomas especialmente bons em arte ASCII?

20

Fiquei me perguntando se existem idiomas esotéricos ou de golfe que visam especificamente a saída de texto e a arte ASCII?

Por exemplo, 05AB1E pelo menos começou segmentando conversões básicas. Existem idiomas de golfe direcionados à produção de texto e à arte de produção de texto?

Nesse caso, eles têm páginas de dicas aqui e são de uso comum?

Nota: não estou procurando idiomas capazes de produzir arte ASCII, mas sim intencionalmente projetados para serem capazes de concluir desafios de maneira relativamente curta e concisa.

Phoenix socrático
fonte
1
Desde que você mencionou, na minha experiência, 05AB1E é muito bom em desafios de arte ascii.
DJMcMayhem
1
Eu gostaria de ver uma linguagem de arte ASCII chamada "ASC e II receberá". (Falando sério, se um já não saída, há um pouco de potencial lá.)
Hactar
Eu projetei uma linguagem chamada Crayon, criada especificamente para criar arte ASCII, mas infelizmente ainda não tive tempo de implementá-la.
ETHproductions 20/09/16
@ Somente ASCII e eu tenho trabalhado em uma linguagem de arte ASCII. Ainda está na fase de design, mas adoraríamos sua opinião (ou de qualquer pessoa). Junte-se a nós no chat se estiver interessado.
DLosc
Bem, aqui eu estava pensando que minha idéia era única ... Fiz essa pergunta porque queria escrever uma linguagem baseada em CharMatrix. Porém, ninguém mencionou um dos recursos que eu queria, então eu poderia fazer isso de qualquer maneira. Todas as respostas e comentários têm sido grande por sinal, graças a todos
socrático Phoenix

Respostas:

15

Bem, de fato, existe! Uma tal linguagem é um Tenho vindo a trabalhar por um tempo chamado V .

Sob o capô, V é apenas o vim , mas todas as teclas são executadas automaticamente e o conteúdo do buffer do vim é impresso em STDOUT quando o programa termina. Isso apenas torna a execução mais conveniente.

Um pouco de história sobre o idioma. Quando comecei a usar o editor de texto vim para o code-golf, descobri que ele é realmente muito bom nisso, mas tem alguns recursos irritantes que tornam mais difícil competir com ele. Por exemplo, você pode configurar um tipo de "loop while" fazendo

qq<foobar>@qq@q

que se repetirá <foobar>até que ocorra um erro. Isso possui 7 bytes de código padrão. Em V, isso é reduzido para ò<foobar>ò.

Algumas das coisas que tornam o V ótimo para a arte ASCII:

  • É 2D por natureza. Uma característica é a posição "cursor", onde a maioria dos comandos faz algo com base em onde o cursor está no texto. Os outros comandos movem a localização do cursor. Por exemplo, x exclui um único personagem, mas Wx avança uma palavra e , em seguida, exclui um personagem. Como a maioria dos outros idiomas não é intencionalmente bidimensional, isso oferece uma boa vantagem quando o desafio é posicionar o texto no espaço 2D

  • É inteiramente baseado em string. Você pode usar algumas operações matemáticas, mas essas geralmente são a maneira mais longa de conseguir as coisas.

  • Ele usa a compressão regex para alterar rapidamente o texto.

  • Toda a sua memória interna, que é apenas uma matriz de caracteres 2D, é implicitamente impressa quando o programa termina. Além disso, todas as entradas são adicionadas implicitamente à sua memória interna , o que é bom quando a maior parte do desafio é alterar as entradas de uma certa maneira.

Então, eu realmente gosto de usar essa linguagem e, se você estiver procurando por uma linguagem especificamente , eu recomendo. No entanto , eu também daria algumas isenções de responsabilidade.

  • É muito confuso para aprender. Também é muito poderoso, mas como é baseado em um editor de texto muito popular, com 30 anos, existem muitos recursos obscuros que podem facilmente confundir novos usuários.

  • Embora seja melhor no manuseio de números do que no vim, o suporte a números ainda não é ótimo. Pessoalmente, acho que isso torna mais divertido trabalhar (como usar a retina para tarefas que o regex nunca foi planejado). : D

  • Ainda é um WIP. Existem alguns bugs e algumas coisas que ainda não adicionei.

  • Não possui muitos usuários. (Número atual de usuários: 1).

Se você estiver interessado em aprender mais, aqui estão alguns bons recursos:

  • Uma sala de bate-papo onde eu ficaria feliz em responder a quaisquer perguntas que você tiver e ajudar a explicar como isso funciona para você.

  • Um tópico de dicas para jogar golfe no vim, mas a maioria das dicas continua.

  • Um meta post descrevendo V com mais detalhes.

DJMcMayhem
fonte
8

Recentemente, criei uma nova linguagem de programação, chamada Turtlèd , que opera em uma grade de caracteres com uma tartaruga, que se move pela grade, grava na grade e tem fluxo de controle com a grade. A grade é impressa implicitamente no final. Por não ter de escrever espaços e de poder escrever o texto espacialmente, em vez de da esquerda para a direita, de cima para baixo, provavelmente faz com que atenda à definição dada, sendo bom em arte asciática.

Atualmente, não existem documentos, portanto você provavelmente não poderá usá-lo, a menos que queira ler meu intérprete, o que provavelmente não é algo que você deseja fazer. Acho que também pode haver erros no intérprete, mas a especificação não foi desenvolvida o suficiente para dizer se é um erro. Provavelmente, Turtlèd será concluído em breve, com documentos e tudo, embora

Limão destrutível
fonte
3

Introdução ao ASCII-Golfing para 05AB1E (Conversão de Base [Simples])

Enquanto 05AB1E não se destina diretamente ao ASCII-Art, venci 2 desafios com ele. A melhor coisa do 05AB1E é que, mesmo com a simples conversão de base, geralmente existem truques que você pode usar para estender e até reduzir pela metade sua contagem de bytes. Freqüentemente, em desafios ASCII, existem truques de repetição que você pode utilizar para desenhar apenas metade do padrão e depois virar e concatenar. Se for um padrão de quatro vias, você pode fazer coisas como zip e bifurcar para desenhar apenas um canto do padrão. Existem várias técnicas de manipulação da estrutura de dados a serem usadas em conjunto com essa idéia simples de compactação de base.


Aqui está um curso rápido sobre uma tática de conversão básica:

Em 05AB1E, enumero todos os caracteres usados ​​na arte ASCII, por exemplo:

--===___===--

Resultaria em:

-
=
_

Atribuo a eles números começando com 1 e 0 e 2:

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

Substituo os caracteres na string original pelos números:

1122200022211

Eu converto para decimal usando a base mais baixa possível (3):

879412

( Como fazer isso usando 05AB1E )

Eu então o converto na base 214:

Jh]

( Como fazer isso usando 05AB1E )

Em seguida, envolvo-o no seguinte código:

05AB1E , 16 bytes

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

Experimente online!

Ou tente com as etapas intermediárias exibidas.

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.

Agora, com esse desafio específico, a string é tão curta que não faz sentido. Eu provavelmente pressionaria metade da corda e Palindromize por 10 bytes "--===__"ûou jogaria como Adnan nos comentários usando fatorial, homem inteligente •Jh]•3B5!…-=_‡. Ele também (uma das?) O criador (s?) De 05AB1E.


Exemplo mais complexo:

/codegolf//a/106621/59376


Além disso, talvez tente a linguagem de complexidade kolmogorov de Dennis: Bubblegum ; não faço ideia de como usar isso.

Urna de polvo mágico
fonte
2
O Bubblegum não é realmente um bom lang para a arte ASCII, pois não pode receber informações (exceto os dois exemplos ), o que é necessário para a maioria dos desafios da arte ASCII. O chiclete de canela pode ser uma opção melhor, embora eu não saiba muito sobre isso e que eu saiba, não há documentos.
ETHproductions
1
Não é realmente importante, mas você pode jogar isso em:•Jh]•3B5!…-=_‡
Adnan
1
@Adnan "--===__"ûpor 10;).
Magic Octopus Urn
2

pincel

O Paintbrush é uma linguagem de programação recreativa criada por mim, Hyper Neutrino, com o objetivo de ser bom no ASCII-Art. Em muitos casos, não compete bem com o carvão vegetal, mas pode receber informações e fazer uma variedade de outras coisas. Opera em uma grade 2D de caracteres e é capaz de manipular o caractere de segundo plano, manipular o que é considerado um caractere de segundo plano no momento, alternar linhas e colunas, mover linhas e colunas, copiar linhas, colunas ou a grade inteira, etc.

Alguns exemplos podem ser encontrados no repositório GitHub.

HyperNeutrino
fonte