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 encadeamento de respostas, 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:
- "Olá Mundo!" - Saída da string
Hello, World!
- 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 porBuzz
e múltiplos de ambos porFizzBuzz
- Produza o número 2014 sem nenhum número no seu código-fonte - envie o número 2014 sem usar nenhum dos caracteres
0123456789
no código-fonte, sem acessar variáveis externas ou sementes aleatórias - 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
,eor01
e27
(case-insensitive) 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
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"
- Emita o sinal - dado um número, imprima -1 se for negativo, 0 se for 0 ou 1 se for positivo
- 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.
- 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.
- 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.
- 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.
- 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.
- Soma os números na entrada padrão - Pegue uma série de números no STDIN e faça a saída deles.
- Encontre o fatorial - Dado um número inteiro
n
, produza o produto de todos os números inteiros entre1
en
inclusive. - Código mais curto para produzir saída infinita - Sem nenhuma entrada, produza saída infinita que, teoricamente, nunca interromperá a saída.
- Faça uma fatia de Pi - Envie este texto exato:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
\::\433832|
\::\79502|
\::\8841|
\::\971|
\::\69|
\::\3|
\__\|
- 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
- Isso é par ou ímpar? - Dado um número inteiro N, produza sua paridade como valores de verdade / falsidade.
- 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.
- 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:
- Criar um auto-intérprete
- Crie um quine com capacidade de carga útil
- Covfefify uma string
- Hiperprogramação: N + N, N × N, N ^ N, tudo em um
- "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!
fonte
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 reduzidofor
loops) são permitidos, e encorajados a ser adicionadoRespostas:
3. Pontuação:
293825832532 (-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)
5. Cante Parabéns à sua linguagem de programação favorita - 95 bytes (-3)
6. Não somos estranhos ao código do golfe, você conhece as regras, e eu também - 1884 bytes (-3)
16. Asse uma fatia do Pi - 149 bytes (-3)
20. Golf você um quine para o bem! - 23 bytes (-39)
Recursos de idioma adicionados
a
#"Hello, World!"a
imprimeHello, World!
d
fonte
2. Pontuação:
29382583O intérprete modificado está aqui no TIO .
O literal de string é a adição mais óbvia à linguagem, principalmente para combater os desafios da complexidade do kolmogorov .
Soluções
1. "Olá, mundo!" - 20 bytes (-28)
Qualquer desafio de complexidade kolmogorov 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 -
41964 bytes (-1332)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)
Usa os dois caracteres 20 e 14 nos pontos de código do Bugle.
4. Olá, mundo ofuscado - 19 bytes (-153)
Atende às regras nº 1 (não
HLWDhlwd
) e nº 3 (não27
).5. Cante Parabéns à sua linguagem de programação favorita - 98 bytes (-230)
6. Não somos estranhos ao código do golfe, você conhece as regras, e eu também - 1887 bytes (-5006)
16. Asse uma fatia de Pi - 149 bytes (-290)
20. Golf você um quine para o bem! - 62 bytes (-12)
Adicionado recurso de idioma
"..."
: String literal.\n
é tratado como outros caracteres."
(34) na memória usando este comando. Não é um problema muito grande, pelo menos por enquanto, já que todos os desafios de complexidade kolmogorov 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.
fonte
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
-u
sinalizador 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
Basta pressionar e emitir o código de caractere de cada caractere na string.
2. 1, 2, Fizz, 4, Buzz - 1396 bytes
A mesma técnica do Hello, World! exemplo
3. Produza o número 2014 sem números no seu código-fonte - 13 bytes
#
usa a fita,+
incrementa a célula,O
gera como número inteiro e-
diminui4. Olá, mundo ofuscado - 172 bytes
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
Todos os desafios da complexidade kolmogorov 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
7. Emita o sinal - 18 bytes
Verifica se a entrada é maior que zero, menor que zero (alterada para render em
-1
vez de1
) e igual a zero, antes de obter sua soma.8. Conjectura de Collatz (OEIS A006577) - 36 bytes
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
Esta é uma ligeira modificação da resposta de Mitch Schwartz ao desafio existente.
10. Sou uma matriz insignificante? - 46 bytes
Todo o crédito é para Emigna por fazer isso
11. Esse número é primo? - 31 bytes
Usa o teorema de Wilson e calcula
(n-1)!² % n
12. Eu sou um palíndromo. Você está? - 13 bytes
A primeira metade do programa, até
O
, define a pilha como[x, x]
ondex
estáTrue
ouFalse
.O
exibe 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
Isso pode ser dividido em duas partes:
?:[?:];
eL0s[+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
Isso tem uma estrutura semelhante ao programa de soma, mas, em vez de pressionar entradas múltiplas, ele
[:1s-:];
empurra o intervalo da1 .. n
pilha e[×L1s-]
leva o produto.15. Código mais curto para produzir saída infinita - 5 bytes
Use um loop while, com o
1
continuamente sob o ponteiro. Saídas1
para sempre.16. Asse uma fatia do Pi - 439 bytes
17. Encontre o menor número que não divide N
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
Módulo simples por 2
19. Saída com o mesmo comprimento que o código - 16 bytes
Produz os 16 primeiros caracteres ASCII imprimíveis ao contrário:
0/.-,+*)('&%$#"!
20. Golf você um quine para o bem!
O crédito vai para user202729 por fazer isso
Especificação de idioma
Chamando
bugle.py
atualmente 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
/--file
especifica que o código deve ser lido de um arquivo-c
/--cmd
/--cmdline
Especifica que o código é fornecido através da linha de comando.-c
e-f
não pode ser usado na mesma chamada-u
/--unicode
instrui o intérprete a ler o código com a codificação Unicode. O padrão é usar a codificação do Bugle abaixo-l
/--length
gera o comprimento do arquivo, em bytes, para STDERR após a execuçãoA chamada a seguir foi usada para testar as observações acima
Página de código
Bugle usa 512 caracteres em sua página de código. O
0xFF
caractere 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:Ou veja-o no formato de tabela . Observe que
\t
e\n
representam 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:
$
): uma pilha padrão, que suporta os valores que estão sendo enviados, pressionados, etc.#
): uma fita à la brainfuck, que inicialmente é apenas0
s.G
): uma grade 2D, infinita nas duas direções, contendo apenas0
sD
): um deque , conforme implementado pelocollections
módulo.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:
À
): Obtém dois valores - size (int
) e wrapping (bool
)Á
): assume um valor - tamanho (int
). Envoltórios no final da fitaÂ
): assume um valor - tamanho (int
). Não quebra no finalǴ
): 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 on
tipo 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ógicoFunçõ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:
+
-
%
:
;
<
=
>
?
L
O
R
Z
^
h
o
r
n
tempos de deque , onden
está o valor mais altos
…
×
÷
fonte