Construa uma linguagem de golfe comigo


30

Muitos usuários do PPCG ajudaram na criação desse desafio, tanto no bate-papo quanto no Sandbox, especificamente Martin Ender , AdmBorkBork , Emigna e user202729

Nossa comunidade achou necessário criar um conjunto de idiomas projetados especificamente para o golfe, "idiomas do golfe", como os chamamos. Essas linguagens evoluíram do GolfScript , antes brilhante e desajeitado, para as linguagens concisas e elegantes, como Jelly e Husk . Como podemos ver, esses idiomas estão ficando cada vez menores para um conjunto de tarefas. Portanto, como especialistas óbvios por aqui em relação às línguas do golfe, devemos projetar uma linguagem juntos para vencer todas as outras línguas que ousarem competir. Apresentando o Bugle!

Bugle: Desde a sigla BuGoL: Bu ILT Ir lfing L anguage.

Como esse desafio funcionará

Caso você não tenha entendido o que estou aludindo na introdução, esse desafio é um desafio de em que cada um de nós contribui com algo para o intérprete de uma nova linguagem de golfe, melhorando sua capacidade de competir no PPCG a cada resposta.

Vou postar a primeira resposta que consiste na base da especificação / intérprete de idioma e todas as outras respostas continuarão a partir disso. Novos envios fornecerão o seguinte:

  • Uma alteração nas especificações do idioma
  • Um intérprete atualizado, atendendo exatamente ao que está disposto nas alterações
  • Pontuação atualizada do idioma (mais detalhes em breve)

Você pode alterar as especificações de uma das três maneiras:

  • Você pode adicionar um único comando
  • Você pode adicionar dois novos comandos
  • Você pode editar o comportamento de um comando existente

Em relação ao novo intérprete, você deve usar a versão mais recente, escrita em Python. Não precisa ser jogado golfe. Todo comando adicionado anteriormente deve ser testado com o intérprete mais recente, bem como com os comandos mais recentes (aquele que você adiciona). Você também não deve usar linguagem ofensiva a qualquer momento ao atualizar o intérprete, como comentários ou literais de strings, etc.

Os comandos adicionados podem fazer o que você desejar . Os únicos requisitos são:

  • Não produz saída ofensiva
  • Não é o mesmo que outro comando
  • Isso não impede que um dos desafios da amostra seja concluído

Além disso, pode ser tão específico ou geral quanto você desejar. Também pode ser qualquer personagem que você quiser. Se você não tiver certeza se sua adição constitui um 'novo comando', não hesite em perguntar nos comentários.

Pontuação do idioma

Você deve ter notado que precisa incluir a pontuação do idioma em todos os novos envios. Sua pontuação é o que impede esse desafio para sempre e é definida da seguinte forma:

A pontuação atual é a soma da contagem de bytes necessária para o idioma concluir as 20 tarefas abaixo

Para cada uma das tarefas, as regras de E / S padrão se aplicam , assim como as brechas padrão .

As 20 tarefas:

  1. "Olá Mundo!" - Saída da stringHello, World!
  2. 1, 2, Fizz, 4, Buzz - gera cada número inteiro de 1 a 100 (inclusive) em uma linha separada, com múltiplos de 3 sendo substituídos por Fizz, múltiplos de 5 sendo substituídos por Buzze múltiplos de ambos porFizzBuzz
  3. Produza o número 2014 sem nenhum número no seu código-fonte - envie o número 2014 sem usar nenhum dos caracteres 0123456789no código-fonte, sem acessar variáveis ​​externas ou sementes aleatórias
  4. Obfuscated Olá Mundo - Saída a corda Hello, World!, sem o uso de qualquer um dos personagens em pelo menos dois dos seguintes conjuntos: hlwd, eor01e 27(case-insensitive)
  5. Cante Parabéns à sua linguagem de programação favorita - Em uma linguagem de sua escolha, faça o seguinte:

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. Não somos estranhos ao código do golfe, você conhece as regras, e eu também - Saída a letra completa de "Never Gonna Give You Up"

  7. Emita o sinal - dado um número, imprima -1 se for negativo, 0 se for 0 ou 1 se for positivo
  8. Conjectura de Collatz (OEIS A006577) - Partindo de um número inteiro, divida-o por 2 se for par ou multiplique por 3 e adicione 1 se for ímpar e repita o processo até chegar a 1. A saída deve ser o número de iterações leva você para chegar a 1.
  9. Uma matriz de desafios nº 1: Matrizes alternadas - Dada uma matriz de números inteiros, verifique se todos os itens indexados pares são iguais e todos os itens indexados ímpares são iguais e emita um valor verdadeiro ou falso de acordo.
  10. Eu sou uma matriz insignificante? - Dada uma matriz de números inteiros, verifique se as diferenças absolutas entre elementos consecutivos são menores ou iguais a 1 e emita um valor verdadeiro ou falso de acordo.
  11. Esse número é primo? - Dado um número inteiro positivo, escreva um programa completo para verificar se é primo e produza um valor verdadeiro ou falso de acordo.
  12. Eu sou um palíndromo. Você está? - Dada uma string, verifique se é palíndromo, enquanto seu programa / função também é palíndromo e produz dois valores distintos e consistentes de acordo.
  13. Soma os números na entrada padrão - Pegue uma série de números no STDIN e faça a saída deles.
  14. Encontre o fatorial - Dado um número inteiro n, produza o produto de todos os números inteiros entre 1e ninclusive.
  15. Código mais curto para produzir saída infinita - Sem nenhuma entrada, produza saída infinita que, teoricamente, nunca interromperá a saída.
  16. Faça uma fatia de Pi - Envie este texto exato:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Encontre o menor número que não divide N - Dado um número inteiro positivo N, produza o menor número inteiro positivo que não divide N
  2. Isso é par ou ímpar? - Dado um número inteiro N, produza sua paridade como valores de verdade / falsidade.
  3. Saída com o mesmo comprimento que o código - Escreva o código mais curto cuja saída tenha o mesmo comprimento que o código, onde a saída não seja a mesma que o código.
  4. Golf um quine para o bem! - Escreva o quine mais curto do seu idioma.

Para ser válido, um novo envio deve ter envios de golfe para pelo menos 2 dos problemas, com pelo menos 1 byte para cada. Você pode aumentar o tamanho de outros envios, mas a pontuação total deve diminuir em pelo menos 2 por resposta. Além disso, considere incluir um link para os programas atualizados. As soluções atualizadas não devem funcionar quando executadas com uma versão anterior do intérprete.

Como obter cookies

Eu tenho uma lista de 5 desafios, que não são obrigatórios para tentar, e não têm influência na sua pontuação, mas são simplesmente desafios adicionais para testar se o Bugle é capaz o suficiente. Sinta-se à vontade para incluir uma solução para qualquer número deles em sua resposta:

  1. Criar um auto-intérprete
  2. Crie um quine com capacidade de carga útil
  3. Covfefify uma string
  4. Hiperprogramação: N + N, N × N, N ^ N, tudo em um
  5. "NÓ" ou "NÃO"?

Descrições não incluídas, pois não são necessárias para que todos possam competir no desafio.

Como ganhar

Uma vez que a pontuação mínima ( que acreditamos ter 16 anos, embora sejam bem-vindas quaisquer tentativas de jogar golfe), obviamente a cadeia terminou, pois as soluções não conseguem uma pontuação melhor. Depois de 16 anos, o desafio permanece vivo por 1 mês depois, para dar a alguém a chance de jogar mais as soluções. Após este mês, o desafio acabou.

Quando o desafio terminar, migrarei o intérprete para um repositório GitHub e passarei pelas maquinações habituais de liberar uma linguagem estável. Você também pode começar a publicar soluções para desafios no PPCG no momento, usando o idioma mencionado, mas tente não inundar a página inicial com respostas. Em vez disso, espalhe-os por um período de tempo.

Formatação

Para facilitar a localização de informações na sua resposta, formate-a da seguinte maneira:

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

Onde [N]está o seu número de resposta (1 para o primeiro, 2 para o segundo etc.)

Regras

  • Você deve esperar 3 horas entre a postagem das respostas
  • Você não pode postar duas vezes seguidas, a menos que nenhuma resposta tenha sido postada por 10 dias (exatamente 240 horas)
  • Você não pode remover comandos anteriores.
  • Seu intérprete não precisa jogar golfe, e sua contagem de bytes é completamente irrelevante aqui.
  • Se alguém sugere um campo de golfe para os programas enquanto a sua resposta é a mais recente, você deve editar nos campos de golfe, e atualizar a sua pontuação.
    • Você também pode fazer isso quando sua resposta estiver no meio da cadeia, desde que sua pontuação não fique mais baixa do que as respostas posteriores.
  • Evite responder a quaisquer desafios existentes do PPCG usando esse idioma, pelo menos até que o desafio termine
  • O intérprete é escrito em Python 3 e deve continuar assim por toda a cadeia. É proibido alterar o idioma.
  • Novamente, para ser válido, um novo envio deve ter envios de golfe para pelo menos 2 dos problemas, com pelo menos 1 byte para cada.

Vamos começar!



1
É melhor perguntar: alguém gostaria de explicar o voto negativo? Eu valorizaria todo e qualquer comentário que você gostaria de dar.
caird coinheringaahing

2
@ Kaldo Não temos certeza. O quine deve ter no mínimo dois bytes, mas se o programa vazio sair Hello, World!, será de 19 bytes. Mas se o comportamento das alterações de programa vazias, dependente da entrada, ele pode ser capaz de ser reduzido
Caird coinheringaahing

1
@WeijunZhou "Evite responder a todos os desafios existentes do PPCG usando esse idioma, pelo menos até que o desafio termine"
caird coinheringaahing

1
Construes @LyricLy Sintaxe (tais como forloops) são permitidos, e encorajados a ser adicionado
caird coinheringaahing

Respostas:


3

3. Pontuação: 2938 2583 2532 (-51)

O novo intérprete está aqui .

Principalmente para fins de jogar golfe e facilitar a saída, eu adicionei a capacidade de duplicar a pilha / deque e também a saída de todo o modelo na forma de texto renderizado em vez de como números inteiros.

Soluções

1. "Olá, mundo!" - 17 bytes (-3)

#"Hello, World!"a

5. Cante Parabéns à sua linguagem de programação favorita - 95 bytes (-3)

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

6. Não somos estranhos ao código do golfe, você conhece as regras, e eu também - 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. Asse uma fatia do Pi - 149 bytes (-3)

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

20. Golf você um quine para o bem! - 23 bytes (-39)

$"R34RdR36Ra"R34RdR36Ra

Recursos de idioma adicionados

  • a

    • Tudo: imprime o modelo inteiro como texto, por exemplo, #"Hello, World!"aimprimeHello, World!
  • d

    • Empilhamento / remoção da fila: empurre a pilha sobre ela mesma.

8

2. Pontuação: 2938 2583

O intérprete modificado está aqui no TIO .

O literal de string é a adição mais óbvia à linguagem, principalmente para combater desafios da .

Soluções

1. "Olá, mundo!" - 20 bytes (-28)

#"Hello, World!"[o>]

Qualquer pode ser concluído usando a estrutura #"<string>"[o>]que gera a sequência especificada até o 0 após a sequência ser atingida.

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-]

Graças a @ user202729 por jogar golfe nisto.

3. Produza o número 2014 sem nenhum número no seu código-fonte - 9 bytes (-4)

#"ĒĎ"[O>]

Usa os dois caracteres 20 e 14 nos pontos de código do Bugle.

4. Olá, mundo ofuscado - 19 bytes (-153)

#"Ifmmp!Xpsme"[-o>]

Atende às regras nº 1 (não HLWDhlwd) e nº 3 (não 27).

5. Cante Parabéns à sua linguagem de programação favorita - 98 bytes (-230)

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

6. Não somos estranhos ao código do golfe, você conhece as regras, e eu também - 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. Asse uma fatia de Pi - 149 bytes (-290)

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

20. Golf você um quine para o bem! - 62 bytes (-12)

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

Adicionado recurso de idioma

  • "...": String literal.
    • Stack / Deque: Empurre os pontos de código do Bugle de cada caractere para o topo / frente da pilha / deque.
    • Fita / Grade: Escreva os pontos de código de Clarim de cada caractere na fita / grade à direita, começando na célula atual. Não move o cursor.
    • \n é tratado como outros caracteres.
    • Não existe um caractere de escape por enquanto, portanto, você não pode gravar "(34) na memória usando este comando. Não é um problema muito grande, pelo menos por enquanto, já que todos os listados aqui não têm "na saída.

Qualquer golfe adicional é sempre bem-vindo, especialmente para "Nunca vou desistir de você" e para o jogo. Especificamente, o quine acima é o primeiro quine não trivial que eu já fiz, então acredito firmemente que alguém pode inventar um menor.


Espero que todos os outros aditem os tipos de acréscimos, em vez de apenas adicionar componentes internos aos desafios específicos. +1
caird coinheringaahing

@ user202729 Provavelmente fui eu quem introduziu o bug; obrigado por corrigi-lo e a solução FizzBuzz.
Bubbler

3

1. Pontuação: 9638

O intérprete de base pode ser encontrado aqui e as submissões aqui . É bastante longo, então eu o incluí no GitHub, em vez de ocupar a maior parte do post.

Soluções

Todas essas soluções são os programas Unicode, executados com o -usinalizador de linha de comando, mas as pontuações são contadas como se fossem codificadas na página de códigos do Bugle.

1. "Olá, mundo!" - 48 bytes

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Basta pressionar e emitir o código de caractere de cada caractere na string.

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

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

A mesma técnica do Hello, World! exemplo

3. Produza o número 2014 sem números no seu código-fonte - 13 bytes

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

#usa a fita, +incrementa a célula, Ogera como número inteiro e -diminui

4. Olá, mundo ofuscado - 172 bytes

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

Usa sua similaridade inerente ao cérebro. Atende às regras 1 e 3

5. Cante Parabéns à sua linguagem de programação favorita - 328 bytes

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Todos os têm esse tipo de estrutura, no momento.

6. Não somos estranhos ao código do golfe, você conhece as regras, e eu também - 6893 bytes

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Emita o sinal - 18 bytes

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

Verifica se a entrada é maior que zero, menor que zero (alterada para render em -1vez de 1) e igual a zero, antes de obter sua soma.

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

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

Isso executa o loop na pilha, mas alterna para a fita para aumentar a contagem a cada iteração.

9. Uma Matriz de Desafios # 1: Matrizes Alternadas - 35 bytes

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

Esta é uma ligeira modificação da resposta de Mitch Schwartz ao desafio existente.

10. Sou uma matriz insignificante? - 46 bytes

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

Todo o crédito é para Emigna por fazer isso

11. Esse número é primo? - 31 bytes

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

Usa o teorema de Wilson e calcula (n-1)!² % n

12. Eu sou um palíndromo. Você está? - 13 bytes

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

A primeira metade do programa, até O, define a pilha como [x, x]onde xestá Trueou False. Oexibe o valor superior e o gera. O restante do programa apenas garante que nenhum erro seja produzido. Felizmente, quando ?encontra o final do arquivo, ele apenas pressiona ''(a string vazia).

13. Soma os números no padrão em - 19 bytes

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

Isso pode ser dividido em duas partes: ?:[?:];e L0s[+L1s-]. A primeira parte coleta todas as entradas da pilha. A segunda parte empurra a soma dos dois principais elementos, enquanto o comprimento é maior que 1.

14. Encontre o fatorial - 25 bytes

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

Isso tem uma estrutura semelhante ao programa de soma, mas, em vez de pressionar entradas múltiplas, ele [:1s-:];empurra o intervalo da 1 .. npilha e [×L1s-]leva o produto.

15. Código mais curto para produzir saída infinita - 5 bytes

#+[O]

Use um loop while, com o 1continuamente sob o ponteiro. Saídas 1para sempre.

16. Asse uma fatia do Pi - 439 bytes

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Encontre o menor número que não divide N

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

Isso usa a divisão de teste, terminando quando o resultado do módulo não é igual 0.

18. Isso é par ou ímpar? - 5 bytes

$2?%O

Módulo simples por 2

19. Saída com o mesmo comprimento que o código - 16 bytes

$16:[32+:o33s-:]

Produz os 16 primeiros caracteres ASCII imprimíveis ao contrário: 0/.-,+*)('&%$#"!

20. Golf você um quine para o bem!

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

O crédito vai para user202729 por fazer isso


Especificação de idioma

Chamando

bugle.pyatualmente usa uma série de sinalizadores, o nome do arquivo / código a ser executado. Até o momento, ele possui 4 sinalizadores de linha de comando:

  • -f/ --fileespecifica que o código deve ser lido de um arquivo
  • -c/ --cmd/ --cmdlineEspecifica que o código é fornecido através da linha de comando.

    -ce -fnão pode ser usado na mesma chamada

  • -u/ --unicodeinstrui o intérprete a ler o código com a codificação Unicode. O padrão é usar a codificação do Bugle abaixo

  • -l/ --lengthgera o comprimento do arquivo, em bytes, para STDERR após a execução

A chamada a seguir foi usada para testar as observações acima

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

Página de código

Bugle usa 512 caracteres em sua página de código. O 0xFFcaractere não deve ser usado para um comando , pois é usado para indicar que o próximo valor hexadecimal será indexado na segunda metade da página de códigos. Os caracteres usados ​​são:

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

Ou veja-o no formato de tabela . Observe que \te \nrepresentam a guia e a nova linha, respectivamente. Observe também que a 16ª linha termina com um caractere não imprimível: e pode não ser exibida em todos os navegadores.

Memória

Atualmente, o intérprete possui 5 modelos de memória embutidos. Cada modelo de memória requer que um caractere informe ao intérprete para começar a usar esse modelo:

  • Stack ( $): uma pilha padrão, que suporta os valores que estão sendo enviados, pressionados, etc.
  • Fita infinita ( #): uma fita à la brainfuck, que inicialmente é apenas 0s.
  • Grade infinita ( G): uma grade 2D, infinita nas duas direções, contendo apenas 0s
  • Deque ( D): um deque , conforme implementado pelo collectionsmódulo.
  • Register ( S): um valor único, que pode ser usado para armazenar um valor.

A grade também possui um único valor salvo em seu ponteiro que pode ser gravado ou gravado nas células.

Além disso, os tamanhos de fita e grade e o comportamento de disposição podem ser modificados usando um comando de chamada diferente. Esses comandos diferentes usam um determinado número de valores do modelo de memória atual como parâmetros de customização:

  • Fita ( À): Obtém dois valores - size ( int) e wrapping ( bool)
  • Fita ( Á): assume um valor - tamanho ( int). Envoltórios no final da fita
  • Fita ( Â): assume um valor - tamanho ( int). Não quebra no final
  • Grade ( Ǵ): recebe 4 valores - tamanho x ( int), tamanho y ( int), x quebra ( bool) e quebra ( bool)

O tipo de memória que está sendo usado pode mudar durante um programa pelo uso de ₀₁₂₃₄₅₆₇₈₉, que acessa o ntipo de memória usado indexado 0 ( é o primeiro, é o segundo etc.), mas, atualmente, os valores não podem ser trocados entre diferentes tipos de memória.

Ramificação

Até agora, o Bugle possui dois comandos de ramificação, ambos terminados com um ]caractere:

  • While ( [): loops ao estilo brainfuck while. Eles exibem um valor da pilha / deque, se estiverem sendo usados, ou acessam a célula sob o ponteiro na fita / grade.

    Exemplo: #?[-O]conta desde a entrada até0

  • Se / mais ( {e }). Execução única enquanto loops. Se o valor exibido for falso, a cláusula if será ignorada, indo para a cláusula else, separada por }. Eles se comportam da mesma maneira que os loops while em relação ao acesso à memória.

    Exemplo: {0}1]é um portão NÃO lógico

Funções incorporadas

Execuções de dígitos são interpretadas como números inteiros e são apenas pressionadas / gravadas no modelo de memória atual como estão.

Obviamente, equipei o Bugle com algumas funções básicas básicas, o mínimo possível, para permitir que outras pessoas adicionem mais à medida que a cadeia progride. Os comandos base são os seguintes:

  • +

    • Stack / Deque: adicione os dois principais valores
    • Fita / Grade: Incrementa a célula atual
  • -

    • Stack / Deque: subtraia os dois principais valores
    • Fita / Grade: Decrementa a célula atual
  • %

    • Stack / Deque: module os dois principais valores
  • :

    • Stack / Deque: Duplicar o valor superior
  • ;

    • Stack / Deque: pop o valor superior
    • Fita / Grade: zere a célula atual
  • <

    • Fita / Grade: Mover para a esquerda uma célula
  • =

    • Pilha: os dois principais valores são iguais?
    • Grade: Mover uma célula para baixo
  • >

    • Fita / Grade: Mova uma célula para a direita
  • ?

    • Stack / Deque: avalie uma linha de entrada
    • Fita / Grade: Pega um caractere de entrada
  • L

    • Stack / Deque: Empurre o comprimento da pilha / deque
  • O

    • Tudo: gera o valor atual
  • R

    • Pilha: inverta o elemento superior, se possível, caso contrário, inverta a pilha
  • Z

    • Pilha: O elemento superior é positivo?
  • ^

    • Grade: Mover uma célula para cima
  • h

    • Tudo: Imprima o modelo de memória cheia
  • o

    • Tudo: imprime o valor atual como um caractere
  • r

    • Pilha: gire os 3 principais valores
    • Deque: gire os ntempos de deque , onde nestá o valor mais alto
  • s

    • Stack / Deque: Troque os dois principais valores
    • Pilha: Divide o valor superior
  • ×

    • Pilha: multiplique os dois principais valores
    • Grade: Escreva o valor do ponteiro na célula atual
  • ÷

    • Pilha: divida os dois principais valores
    • Grade: Escreva a célula atual no valor do ponteiro
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.