Embora> <> não seja um idioma popular, ele pode ser bom para jogar golfe e foi usado neste site. Foi inspirado pelo Befunge e tem algumas semelhanças em suas instruções.
Comandos necessários:
> < ^ v
Muda a direção do ponteiro da instrução (direita, esquerda, cima, baixo)
/ \ | _ #
Espelhos; o ponteiro mudará de direção, dependendo da direção que já tem.
x
Direção aleatória.
+ - * , %
Adição, subtração, multiplicação, divisão e módulo, respectivamente. Retira A e B da pilha e empurra o operador A. A divisão por 0 gera um erro.
0-9 a-f
Coloca o valor correspondente na pilha. a = 10, ..., f = 15
=
Retira A e B da pilha e empurra 1 se B = A e 0 caso contrário.
)
Melhor que. Retira A e B da pilha e empurra 1 se B <A
(
Inferior a. Retira A e B da pilha e empurra 1 se B> A
' "
Habilita a análise de string. A análise de string empurra todos os caracteres encontrados para a pilha até encontrar uma cotação de fechamento.
!
Pula as seguintes instruções.
?
Pula a instrução a seguir se o topo da pilha for zero ou se a pilha estiver vazia. (nota: isso não sai nada da pilha!)
:
Duplica o valor superior na pilha.
~
Remove o valor superior da pilha.
$
Gira os 2 principais valores na pilha no sentido horário, respectivamente. (por exemplo, se sua pilha for 1,2,3,4, resultaria em 1,2,4,3)
@
Gire os 3 principais valores da pilha no sentido horário, respectivamente. (por exemplo, se sua pilha for 1,2,3,4, resultaria em 1,4,2,3) Retira
&
o valor superior da pilha e o coloca no registro. Ligar e novamente pegará o valor no registro e o colocará de volta na pilha.
r
Inverte a pilha.
}
Desloca a pilha para a direita / gira a pilha inteira no sentido horário (por exemplo, 1,2,3,4 torna-se 4,1,2,3
{
Desloca a pilha para a esquerda / gira a pilha inteira no sentido anti-horário (por exemplo, 1,2,3,4 torna-se 2,3,4,1 Retira
g
A e B da pilha e empurra o valor em B, A. Na caixa de códigos Retira
p
A, B e C da pilha e altera o valor em C, B para A.
o
Pops e outputs como um caractere
n
Pops e outputs o valor
i
Pega um caractere como entrada do usuário e envia seu valor ASCII para a pilha
;
Finaliza a execução
Não é necessário implementar a segmentação, mas você pode, se quiser.
A resposta mais curta vence, em caso de empate, a primeira resposta vence.
Você pode usar qualquer idioma, e eval é permitido.
O arquivo será fornecido por meio de argumentos de linha de comando e terá uma .fish
extensão.
Você pode usar o intérprete oficial do Python como referência, se necessário. O artigo da Esolangs Wiki tem mais informações sobre como o idioma funciona, além de mais alguns exemplos.
Casos de teste:
Olá Mundo!
Código:
"Hello World!"r>?o?<;
Saída:
Hello World!
Código fatorial :
01::nv
:@*:n>84*o$1+
Saída (até 5):
1 2 6 24 120
fonte
1 2 6 24 120 720 ...
e deve ser o que o interpretador Python também produz .l
para empurrar o comprimento da pilha. E, tanto quanto eu sei,?
aparece o valor.Respostas:
APL (Dyalog) (750)
Como o APL realmente não possui uma linha de comando, carregue-o em um espaço de trabalho (por exemplo, com
)ed F
) e execute-o a partir da linha APL da seguinte maneira:Não lida com nenhum erro. O comportamento do código incorreto não está especificado. Também não pode fazer threads. Onde a página Esolang e a pergunta entram em conflito, ela segue a pergunta.
Editar: uma versão um pouco mais legível com comentários pode ser encontrada aqui: https://gist.github.com/anonymous/6428866
fonte
Delphi, 1144
Todas, exceto as instruções de rodagem, são implementadas.
O código recuado e comentado diz:
Editar histórico:
(1306 + 18 = 1324): Bugs corrigidos em algumas ordens de operação (o Delphi avalia os argumentos ao contrário). Também pop fixo de pilha (não foi possível pop mais de uma vez por instrução).
(1324-33 = 1291): Removida a proteção ao gravar o conteúdo de uma pilha vazia
(1291-56 = 1235): Função Turn adicionada, variáveis renomeadas, dígitos de instrução reduzidos
(1235-7 = 1228): Variáveis reordenadas, bug corrigido em '@'
(1228-37 = 1191): compartilhou mais código de implementação, espalhando-o por três blocos de casos consecutivos
(1191-12 = 1179): compartilhou a implementação do ciclo de pilha entre as três instruções agora.
(1179-20 = 1159): divida a análise de string em 3 blocos de caso, remove a variável j e compartilhe outra implementação
(1159-15 = 1144): 'x' simplificado, alterando-o para uma das 4 instruções de direção
fonte
for k in TFile.ReadAllLines(ParamStr(1))do c:=c+k+StringOfChar(' ',80-Length(k));
. Você também pode se livrarf:TextFile
disso, mas precisa adicionaruses IOUtils;
no início. Diferença: lê todas as linhas, e não apenas as 25 primeiras.Haskell 1428
Quase todos os caracteres minúsculos são usados como nomes de função.
PS : Existe algum jogo sobre esse tipo de esolangs (ponteiro 2d)? Eles devem ser muito divertidos!
Um exemplo de programa de pesca
fonte
zip(['0'..'9']++['a'..'f'])[0..15]
deveria ser usado em vez dezip['0'..'9'][0..9]++zip['a'..'f'][10..15]
. que golfe incrível!\q->t$(r q)q
é basicamenter>>=t
Pitão, 978
980981Não suporta encadeamento.
Versões:
1. 981
2. 980:
p
Instrução fixa ; pequena melhoria.3. 978:
?
instrução fixa .fonte
p
precedure aqui, porque eu não entendo muito bem este> Pops A, B, e C da pilhap
comando pega os três últimos valores na pilha (os exibe)a
b
ec
, e atribui o localc
,b
na grade aa
. É por isso que você não pode converter para código nativo.a=pop();b=pop();c=pop()
ouc=pop();b=pop();a=pop()
?a=pop();b=pop();c=pop()
Delphi,
18551701Esta versão tem suporte a threads a um custo bastante: A versão sem suporte a threads tem 1144 caracteres no momento, então o suporte a threads adiciona 557 caracteres (cerca de 50%)!
Observe que esta implementação contém algumas idéias que reduzirão meu outro envio em algumas dezenas de caracteres (eu as aplicarei mais tarde).
Esse código executa a amostra 'multithread hello, world' na perfeição e na maioria das outras amostras. (Meu intérprete me dá uma exceção de divisão por zero ao executar a amostra 'e' - alguém pode confirmar isso com outro intérprete> <>?)
Aqui o código recuado e comentado:
Editar histórico:
(1855-154 = 1701): Aplicou todas as idéias da versão não encadeada
fonte
procedure _.U(v: Int16);
->procedure _.U;
eprocedure _.T(A, b: Int16);
->procedure _.T;
TextFile
pode ser escrito comoText
eAssignFile()
comoAssign()
PHP, 2493 bytes
Eu sei que ele foi implementado com um tamanho menor de compilador com outras linguagens, mas, mesmo assim, com o espírito de um programador que nunca diz nada, criei um interpretador PHP CLI para
><> Fish
. Todo o código fonte está abaixo.A principal característica da linguagem de programação Fish não foi implementada, a saber:
i
de um caractere. A CLI do PHP requer que o usuário pressione a<Enter>
tecla para inserir a entrada no buffer de entrada.Observe que eu escrevi e otimizei muitas das funções nativas, incluindo a criação da matriz usando:
ao invés de
O programa pode ser acessado através da interface da linha de comandos (CLI) usando o seguinte comando:
Passei um total de 6 horas para concluir isso com referência ao intérprete python original.
Fonte original:
Editar histórico
x
sintaxe para selecionar uma das direções em vez de selecionar por conta própria.p
comando ondechr()
deve ser usado antes de inserir o valor na caixa de código.fonte
Caracteres Lua 1640 (1558 sem rosqueamento)
Versão de rosqueamento, com golf (1640 caracteres):
A versão de encadeamento faz alguns hacks desagradáveis com setfenv e getfenv para eliminar a necessidade de indexação para os diferentes encadeamentos.
Versão de rosqueamento legível:
Versão sem encadeamento, golfed (1558 caracteres, mas pode ser reduzida um pouco mais se a versão sem encadeamento for o critério):
Versão legível:
Não colocar o próximo como resultado, pois usar a compactação diretamente não é o objetivo, eu acho;). Usando murgaLua (ou qualquer versão Lua com lzlib e luaSocket (para decodificação de base64)), na contagem mágica de 1333:
fonte