<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 65641; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 31516; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d?\.?\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
2.7.1
a2.7.n
. (Na verdade, sweerpotato faz exatamente isso com as versões principais.)Respostas:
30 idiomas, 248 bytes, 248/30 ^ 3 = 0,009185
Edit: Beatnik removido, pois o teste de primalidade no Beatnik pode não ser possível.
O código possui guias (que são alteradas pelo Stack Exchange) e uma nova linha à direita, então aqui está o
xxd
:Como alternativa, você pode copiar e colar o código em "Experimente online!" link .
Isso é muito ruim, mas eu queria jogar fora a idéia de que, uma vez que você tenha idiomas suficientes, a contagem de bytes não importará mais. Dito isto, existem alguns idiomas que eu ainda poderia adicionar facilmente (por exemplo, Objeck), mas atualmente são muito longos para serem úteis. Estou ficando sem boas línguas, então posso parar por enquanto.
Execute todos os programas com
</dev/null 2>/dev/null
(ou seja, entrada vazia, STDERR suprimido).A explicação é bastante longa, então aqui está um resumo executivo:
1. VACA
COW é um derivado do Brainfuck com comandos adicionais, um dos quais é saída numérica. Qualquer coisa inválida é ignorada; portanto, o programa executado é meramente
que incrementa a célula para 1 e a imprime como um número.
2. CoffeeScript (inclui intérprete)
O CoffeeScript vê:
que simplesmente alerta 2.
(Sim, provavelmente seria melhor se outro idioma ocupasse esse espaço, mas estou com preguiça de reorganizar neste momento: P)
3. Lisp Comum | ideona
Lisp comum (clisp) vê:
1/5
é racional e não é igual a0.2
, portanto 3 é impresso. O processo"""
é um erro de sintaxe.Observe que
print
parece gerar uma nova linha anterior e um espaço à direita no Common Lisp. No entanto, felizmente,write
funciona tanto no Common Lisp quanto no Chicken Scheme.4. Retina | Experimente online!
Restrições introduzidas : Cada segunda linha que começa na primeira precisa ser um regex válido.
Cada par de linhas forma um estágio de substituição, substituindo instâncias de correspondências do regex da primeira linha pela segunda linha. No meio, temos o par
que substitui a cadeia vazia inicial por
"""
. A linha final vazia, que não faz parte de nenhum par, é tratada como um estágio de correspondência, contando o número de correspondências da regex. Existem quatro instâncias de cadeia vazia"""
, a saber1"2"3"4
.5. Befunge-93 | Intérprete
O Befunge é uma linguagem 2D e as instruções relevantes são
na primeira linha e
5
na na25
linha.#
pula a próxima instrução,15g
coloca o char na posição(1, 5)
do código (5
na25
linha),,
gera o char e@
pára.6. Python 2 | ideona
Python vê:
(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6
, que éprint
ed.7. Rail | Experimente online!
O trilho é uma linguagem 2D e a execução começa
$
na função principal, na direção sudeste. Assim, a parte relevante do código écom
o
eJ
provenientes de linhas usadas pelo TRANSCRIPT. Após a saída 7, o trem atinge umaJ
instrução não reconhecida , que trava o programa.8. ETA | Experimente online!
Restrições introduzidas: Os caracteres antes do programa ETA não devem estar incluídos
etaoinsh
.O ETA reconhece apenas as letras
etaoinsh
e suas versões maiúsculas, o que significa que o código começa comn...e
envia um número 7 base com base no que está dentro dos delimitadores, ouSaI
seja624
, 312 em decimal.o
então sai como char, aparentemente após o módulo 256, fornecendo o char8
(ponto de código 56).e
então tenta dividir com uma pilha vazia, que falha.9. Prelúdio | Experimente online!
Restrições introduzidas: não mais do que um
()
em qualquer coluna,()
correspondendo a leitura de uma coluna por vez, nenhum loop infinito causado por()
.Isso requer que o interpretador Python tenha
NUMERIC_OUTPUT = True
definido.Prelúdio é um idioma em que cada linha é executada separadamente. Muitos caracteres são executados, mas a parte importante é a
na segunda linha, que emite 9.
()
no Prelude, denota um loop, mas graças à proeminência de#
s (que sai da pilha), as partes superiores das pilhas são sempre 0 no momento em que um loop é atingido, portanto, nenhuma delas São executados. Porém, as restrições de código-fonte do Prelude relacionadas a()
alguns espaços estranhos foram introduzidas.10. Gol> <> | Intérprete
Esta parte (e> <>) funciona como a resposta de Martin . O código relevante é
Gol> <> é uma linguagem 2D e
#
reflete o IP, fazendo com que ele viaje para a esquerda. Ele envolve, empurra 10, 14 e 0 para a pilha.@
depois gira a pilha, trazendo 10 para o topo,n
sai e;
interrompe o programa.11. mal | Experimente online!
Esta parte também é semelhante à resposta de Martin.
o mal ignora tudo, exceto letras minúsculas. Ignorando mais alguns caracteres, a parte relevante é
onde
a
incrementa a variávelA
,e
é a função de tecer do mal que embaralha os bitsA
e asw
saídasA
. Por isso, produzimos1
duas vezes, dando11
.Mas e o restante das instruções, e especialmente
w
na última linha? Digamos que, às vezes, é mais fácil mexer no código e rezar para que ele ainda funcione em tudo o que, aqui, de alguma forma funcionou ...12. Foo | Experimente online!
Foo produz qualquer coisa entre aspas duplas, então a parte relevante é a
na segunda linha. No entanto, como precisamos de aspas duplas posteriormente, usamos um método semelhante à resposta de Martin para cometer um erro de Foo, ou seja, o anterior
#-1@
. Não está claro por que isso funciona em uma linguagem na qual os soldados enfrentam a pilha e a divisão vazias por zero erros, mas estou feliz que sim.13. Ruby | ideona
Como Python, Ruby vê:
No entanto, é importante notar que a cadeia de múltiplas linhas é realmente três cordas separadas (
""
,"..."
,""
) concatenados. A linha de impressão é impressa(4^2+7) = xor(4,2)+7 = 6+7 = 13
antes de ocorrer um erro ao tentar dividirnil
por 2.14. > <> | Experimente online!
Essa parte é a mesma que a parte Gol> <>, exceto que
@
os 14 chegam ao topo, que é gerado.15. Brian e Chuck | Experimente online!
Brian & Chuck é um derivado de BF com duas fitas, onde o ponteiro de instruções de uma fita é o ponteiro de memória da outra. Na ausência de
```
, as duas primeiras linhas do código fonte são usadas para inicializar as fitas.Os caracteres relevantes nas duas primeiras linhas são:
A
?
fita da Brian passa o controle para Chuck na célula que está sendo apontada (o#
) é diferente de zero. Chuck então executa>.>.
, produzindo os dois caracteres após o ponto de interrogação.16. espaço em branco | Intérprete
Usando
STL
espaço, tabulação e avanço de linha, respectivamente, o início do programa é:A primeira linha empurra 16 (
+10000
base 2), a anterior aTLST
imprime como um número. As próximas três novas linhas interrompem o programa.Observe, no entanto, que este programa é específico para intérpretes. O restante dos erros de sintaxe do código na maioria dos intérpretes, portanto, é necessário um intérprete mais brando, como o vinculado acima.
17. 3var | Experimente online!
Na primeira linha, várias instruções são executadas, mas as relevantes são
Devido à restrição do ETA, usamos
k
para diminuir a variável B em vez dea
incrementá-la.kk
decrementa B para -2 e B paramm
quadrados duas vezes para 16, o que é incrementado para 17 coma
. Isso é gerado como
.#
é então usado para redefinir B para 0 e/
causa erro no programa via divisão por 0.18. Axo | Experimente online!
Restrições introduzidas: Nenhuma instrução antes do programa Axo que altere a direção do IP
Mais uma vez, várias instruções são executadas na primeira linha, mas as relevantes são
Axo é uma linguagem 2D como o Befunge, e
#
é similarmente uma ponte que pula a próxima instrução, mas apenas se o topo da pilha for zero.15,
empurre para a pilha, mas a pilha será esvaziada@
.99+
depois empurra 18,{
sai e\
pára.19. labirinto | Experimente online!
Labirinto é outra linguagem 2D, e as instruções executadas são
#
empurra o comprimento da pilha, que é 0 na primeira vez.|
é bit a bit OR, não alterando nada, já que a pilha só tem 0s nesse momento, e a segunda#
agora empurra 1 devido ao zero solitário. Viramos à direita devido ao 1,9
converte esse 1 em1*10+9 = 19
,!
imprime e@
pára.Este programa baseia-se no fato de que
[
atualmente não é uma instrução reconhecida e, portanto, é tratado como um muro.20. estrelado | Experimente online!
Restrições introduzidas: Todos os
+
s devem ter pelo menos um espaço anteriorSe removermos caracteres não reconhecidos, a parte relevante do código será
,
é entrada, mas, como canalizamos de/dev/null
lá, não há, empurrando 0 para a pilha. A+
comn >= 5
espaços anteriores pressionan-5
, então a próxima instrução pressiona 2. em..
seguida, gera esses dois dígitos na ordem inversa.Em seguida, temos um
+
com um único espaço anterior, que é duplicado. No entanto, a pilha está vazia, então nós cometemos erros.21. Fissão | Experimente online!
A única parte relevante para a fissão é
L
gera um átomo se movendo para a esquerda,"21"
imprime 21 e*
pára.22. Brainfuck | Experimente online!
Restrições introduzidas: não
.
antes da primeira[
Isso requer um intérprete que dê 0 no EOF e tenha células de 8 bits. O código relevante é
O inicial
-
é compensar o+
, e o primeiro[...]
não é executado, pois a célula é 0. O seguinte-[>+<-----]>-
define a célula para o código de char de2
e a..
gera duas vezes.23. Julia | Experimente online!
Julia vê:
O que é impresso é
4^2+7 = pow(4,2)+7 = 16+7 = 23
e o programa falha ao tentar dividirnothing
por 2. Observe que Julia não parece se importar com o fato de que o restante do código causaria um erro de sintaxe de qualquer maneira.24. Lily | Intérprete
Lily vê:
7/6*24 = 1*24 = 24
é impresso.25. GolfScript | Experimente online!
GolfScript vê:
O GolfScript é baseado em pilha, então 25 é empurrado para a pilha e, em seguida, exibido e impresso
print
.(
Em seguida, tenta diminuir a seqüência vazia implícita na pilha, que falha e gera erros no programa.26. esquema de frango | ideona
O esquema de galinhas possui a mesma
#| ... |#
sintaxe de comentário multilinha que o Common Lisp. No entanto, em1/5
é um float que é igual a0.2
, então 26 é gerado.27. qui | Experimente online!
Thue é um idioma baseado na reescrita de strings. A primeira parte relevante é
que define uma substituição e
f -> 27
depois denota o fim das substituições por::=
. O solitáriof
emif
é então substituída com27
, o qual é emitido.28. Perl 6 | ideona
O Perl 6 tem uma nova sintaxe de comentário, a saber,
#`(some bracket)
que é um comentário com várias linhas até o colchete correspondente. Assim, o Perl 6 vê:que imprime
7/6*24 = 28
.29. Picolisp | ideona
Picolisp vê:
que imprime 29. A linha depois causa um erro de sintaxe.
30. TRANSCRIÇÃO | Experimente online!
TRANSCRIPT é um esolang temático modelado após aventuras de texto. Linhas não reconhecidas são ignoradas (o que permite adicionar texto extra de história / tipo entre as instruções reais do código), portanto, as linhas relevantes são:
A primeira linha declara uma variável de string
Jo
, usando um nome de duas letras, pois os nomes de uma letra parecem falhar. A segunda linha define essa string como"30"
, que é emitida porX
("examine") na terceira linha.fonte
pre
tags em vez de usar um bloco de código no estilo Markdown.15 idiomas,
686665 bytes / 15 ^ 3 = 0,019 ...Retina , Estrelado , Prelúdio , ETA , Axo , Labirinto , Hexagonia , Foo , Brian & Chuck , Gol> <> , mal , Espaço em branco , Fissão , > <> e GolfScript .
Após uma reescrita maciça, consegui me encaixar em mais quatro idiomas. O código contém as poucas guias do espaço em branco. Como o Stack Exchange os converte em espaços, eu os representei
\t
abaixo:Acho que terminei de adicionar idiomas (embora a adição de apenas um possa salvar alguns bytes no que eu já tenho). Eu me pergunto se é possível jogar golfe ... 65 bytes para 15 idiomas é um salto de 32 bytes para 11 idiomas, e agora tenho pelo menos um caractere inútil para fazer o Foo funcionar.
Impressões de retina
1
Experimente online.
Felizmente, a primeira linha é um regex válido. No entanto, esse regex obviamente não corresponde à entrada vazia, portanto, o primeiro estágio (composto pelas duas primeiras linhas) não faz nada.
A terceira linha é por si só, portanto é tratada como um estágio de Correspondência que, por padrão, conta o número de correspondências. No entanto,
`
é um separador que informa à Retina que a parte à frente é uma sequência de configuração (não conhece nenhuma das opções fornecidas lá) e a parte depois é o regex. Portanto, o regex está vazio e Retina encontra exatamente uma correspondência.Impressões estreladas
2
Experimente online.
Estrelado ignora tudo, exceto espaços e
+*,'`.
. Cada comando é um desses caracteres em conjunto com os espaços desde o último desses caracteres. Então, vamos remover todo o código estranho:Sete espaços seguidos de
+
empurrões a2
. Um espaço seguido por um+
duplicado.'
é um salto condicional. Ele aparece no topo da pilha, que é realmente positivo (positivo), e então pula para o rótulo correspondente (onde os rótulos são indicados por`
e "correspondente" significa "com o mesmo número de espaços à esquerda"), que é o primeiro`
..
sem espaços à sua frente, imprime a parte superior da pilha como um número.Impressões de prelúdio
3
Experimente online.
Isso pressupõe o interpretador Python que usa saída numérica. Vamos remover todas as no-ops:
A primeira voz faz um monte de coisas, mas nada disso importa, porque não há
!
como imprimir nenhum dos resultados. A segunda voz empurra a1
, depois a5
e depois a7
. Tomamos a diferença dos dois últimos para obter-2
e subtraímos isso do1
para obter3
.!
imprime. A terceira voz tem apenas no-ops.Impressões ETA
4
Experimente online.
O ETA ignora tudo, exceto os caracteres
ETAOINSH
(em qualquer caso). Portanto, o código visto pelo ETA é:I
tenta ler a entrada, mas não consegue, por isso empurra-1
.a
empurra o número da linha atual mais 1, que é2
.e
é divmod , que substitui aqueles com0
e1
(ou-1
, eu realmente não sei, mas isso não importa). O próximoe
substitui os dois por0
.Agora a parte interessante.
NTHne
é um literal de número de base 7.N
ee
são apenas os delimitadores e os três dígitos sãoTHN
. Ou seja54
(ondeT
é dígito1
,H
é0
en
é5
).a
empurra2
mais uma vez.S
subtrai-o, resultando52
eO
emite-o como um caractere (4
). Agorae
tenta divmod novamente, mas a pilha contém dois zeros, então o programa termina com um erro (mas não polui STDOUT enquanto o faz).Impressões Axo
5
Experimente online.
Esse idioma foi praticamente o único responsável pela reescrita. Eu não poderia ter o
}
na primeira linha porque ele bloqueava a entrada no Axo (consulte o histórico de revisões do que estou falando). Para o Axo, apenas esta parte do código é relevante:Felizmente, o Axo também tem
0
s implícitos na parte inferior da pilha, porque#
aparece a parte superior da pilha (para verificar se a próxima instrução deve ser ignorada ou não). As letras são todas não ops. Em seguida,5
pressiona a5
,{
imprime e\
finaliza o programa. Muito simples, realmente.Impressões em labirinto
6
Experimente online.
Estou truncando o código um pouco, porque a metade direita nunca é alcançada e também estou usando
t
no lugar de\t
, para que as colunas estejam alinhadas corretamente:Agora que letras, espaços e tabulações são paredes no Labyrinth, o código acessível fica assim:
O ponteiro de instruções seguirá automaticamente esse caminho.
#
empurra a profundidade da pilha principal (0
) e a15
transforma em a15
.}
move-o para a pilha auxiliar e não vamos mais usá-lo. Isso convenientemente zera a parte superior da pilha, para que o IP não vire à esquerda na5
.7
transforma o zero em um7
,'
é um no-op. A`
negação é unária, então chegamos-7
. Agora-
subtrai o-7
do implícito0
abaixo dele7
. Desta vez, o IP vira à direita para o`
, que é uma negação unária, então obtemos7
novamente. O IP atinge um beco sem saída e dá a volta. O-
faz a mesma coisa que antes, então temos7
mais uma vez. Como o topo da pilha agora é positivo, o IP vira à direita. Há outro-
que dá-7
novamente. Então~
é bit a bit NOT, que fornece6
e!
imprime. Esse é apenas o momento certo para fazê-lo, porque agora a pilha está vazia novamente, de forma que o IP não vire à esquerda e, em{
vez disso, continue em frente no@
final do programa.Impressões hexagonais
7
Experimente online.
O código desdobrado fica assim:
Normalmente, isso seria um programa assustador do Hexagony, mas os caracteres atualmente em uso não são muitos. Na verdade, eles são praticamente iguais aos usados pelo Labyrinth e acho que a maneira como eu diferencio
5
e6
é bastante agradável. :)A linha superior pode basicamente ser ignorada.
#
normalmente mudaria para um IP diferente, mas a borda da memória atual é0
, portanto não. As letras apenas definem um valor fixo de memória, mas não vamos usá-lo. Após o final da primeira linha, o fluxo de controle continua na linha do meio (começando pela}
, indo para a direita). Os}
move para outra borda de memória.7
define essa borda para7
.'
volta para onde viemos.-
subtrai a borda da memória que acabamos de definir7
de uma borda da memória não utilizada (0
), então obtemos-7
. O próximo-
faz a mesma coisa novamente, por isso é um não-op. Até agora, bem parecido com o Labirinto (além do layout da memória). Mas agora~
não é bit a bit NÃO, mas negação unária no Hexagony. Então isso dá em7
vez de6
.!@
, como em Labirinto, imprime o valor e finaliza o programa.Impressões Foo
8
Experimente online.
Como todos sabemos desde a impressão do Quiz do Idioma de Programação , o Foo é bastante trivial, mesmo que a maior parte do código seja uma mistura aleatória de caracteres. Nenhum dos caracteres afeta a saída, exceto a
"8"
que é impressa8
. Bem, existe o"31"
mais tarde, mas Foo termina com um erro no final da primeira linha. Não sei exatamente por que isso acontece, mas exige isso3
(ou qualquer outro dígito) na linha superior, que não é usada em nenhum outro lugar.Brian & Chuck impressões
9
Experimente online.
Vamos fazer isso novamente quando removemos a terceira linha (nunca é analisada) e substituímos todos os caracteres irrelevantes (por exemplo, no-ops ou células que não são lidas) por espaços:
Como lembrete, cada linha é do tipo Brainfuck cuja fita é o código fonte do outro programa. O fluxo de controle começa na primeira linha (chamada Brian).
Ele
{
move a cabeça da fita para a esquerda (onde ela já está) e o?
controle das mãos passa para Chuck (a segunda linha). Lá,}
move a cabeça da fita para a direita até encontrar uma célula zero. Isso não acontece até o final do programa, então o cabeçote da fita termina uma célula após o9
.-
diminui essa célula, mas isso é irrelevante.<
move a cabeça da fita para a9
e.
imprime. Chuck fica sem programa e termina.Gol> <> impressões
10
Testado aqui.
#
é um espelho, então o IP pula imediatamente para o final da primeira linha (e vai para a esquerda). O9
pode ser ignorado.a
empurra10
,e
empurra14
,"8"
empurra o código de caractere de8
,@
gira os três principais elementos da pilha (puxando para cima10
), de modo quen
imprima10
e;
finalize o programa.Agradecemos ao Sp3000 por sugerir o uso em
@
vez de!
(que salvou um byte).impressões do mal
11
Agradeço ao Sp3000 por me enviar algumas listas de comandos forçadas brutas para gerar números de um dígito.
Experimente online.
evil ignora tudo, exceto letras minúsculas, para que o código fique assim:
Além disso,
n
afeta algum estado com o qual não nos importamos, então vamos ignorá-lo também. Agoraa
incrementa o registro (que começa em0
) ee
é a operação mágica de "tecer" do mal que permeia os bits de uma maneira particular.aeeeaeea
passa a produzir o valor49
que é o código de caractere1
.ww
imprime duas vezes.Impressões em espaço em branco
12
Experimente online.
Ok, sabemos que o Whitespace apenas lê espaços, tabulações e feeds de linha, então vamos escrever o código como visto pelo Whitespace com
STL
:São dois comandos:
O primeiro pressiona o número
12
. Especificamente,SS
inicia um número literal. O próximoS
é o bit do sinal (positivo). Então tudo até oL
é uma representação binária do número. Há uma tonelada de zeros à esquerda, que precisamos para Starry, mas eles não afetam o número. Então oTTSS
s está12
em binário. Curiosidade: se eu adicionasse um idioma 16, poderia salvar um byte aqui, porque Starry poderia usar os quatroS
no represtado binário de16
. Duvido que sim ...O
TLST
apenas imprime a parte superior da pilha como um número. (TL
marca o comando como um comando de E / S eST
está imprimindo números.)Cópias de fissão
13
Experimente online.
A fissão vê apenas esta parte do código:
L
inicia o fluxo de controle com um átomo de esquerda."
alterna o modo de impressão, para que31
apenas imprima13
. Então o átomo é capturado na cunha do<
, que finaliza o programa.> <> impressões
14
Testado aqui.
Distinguir entre> <> e Gol> <> não é tão fácil quanto eu pensava, porque Gol> <> quase sempre faz a mesma coisa que> <> para comandos que existem em ambos e comandos que existem apenas em Gol> < > causar> <> travar. No entanto,
@
gira o contrário em> <>, de modo que empurra para baixo em7
vez de puxar para cima10
e, em seguida,14
é impresso em vez de10
.Impressões GolfScript
15
Experimente online.
Essa é a mais simples:
#
comenta a primeira linha. Então se15
empurra e}
é um "super comentário", que ignora todo o resto do programa. Portanto, o15
é impresso no final do programa.fonte
Python 1.x, 2.xe 3.x, 32 bytes / 3 ^ 3 = 1.1851 ...
Imprime o primeiro número da versão, que está
1
no Python 1.x,2
no Python 2.xe3
no Python 3.x.Quando chegarmos ao Python 9.x, minha pontuação será gloriosa
0.04389
!: ~)!
fonte
1
porque é o primeiro caractere da string "10.whatever"?3 idiomas, 2 bytes / 27 = 0,074
Bem, supera pelo menos metade das finalizações: P
1. GolfScript
O GolfScript ignora o
P
, produzindo apenas o 1. Experimente online .2. Par
P
é 2 à potência de, então1P = 2^1 = 2
. Experimente online .3. Sério
P
dá o nono primo, zero indexado. Temos 3, já que é o segundo primo. Experimente online .Notas
Meu objetivo inicial era encontrar uma resposta válida em 1 byte. Minha primeira tentativa foi a
\x12
que funciona em Bubblegum e gs2 , mas o desafio requer um mínimo de três idiomas.\x13
funcionaria se houvesse um idioma em que isso produz 1.Desistindo de uma resposta de 1 byte, mudei para dois bytes.
3u
é por pouco, produzindo 1 em japonês , 3 em GolfScript e 4 em sério, mas era difícil encontrar uma linguagem que produzisse 2 para preencher a lacuna.Tudo isso me levou muito tempo: /
fonte
6 idiomas - 44 bytes / 6 ^ 3 = 0,204 ...
Agradecimentos ao SnoringFrog por salvar 10 bytes!
Trabalha em:
Nota: Antes de tentar online, certifique-se de substituir S por espaços e T por tabulações ou converter o seguinte hexdump em ASCII
Vou tentar usar mais linguagens de programação :)
Befunge (impressões
1
):Experimente online
Pitão (impressões
2
):Experimente online
Brainfuck (impressões
3
):Experimente online
Hexagonia (impressões
4
):Experimente online
Uma versão mais legível:
Espaço em branco (impressões
5
):Experimente online
Como outros caracteres são ignorados, mas os espaços em branco e as guias são deixados com o seguinte:
AniRad versão 0.2 (impressões
6
):De alguma forma, isso funciona para a versão 0.2, mas fornece um erro para a versão 0.4. Eu não tenho idéia do porquê. Você pode encontrar a versão 0.2 aqui . Para executar isso, você pode copiar e colar o código do intérprete para repl.it e executá-lo. Depois disso, você só precisa colar o programa no STDIN e executá-lo.
fonte
SSSSSSSSSSTTSTSTLTLSS
você tem agora, você pode fazerSSSTSTLTLST
. pilha, em seguida, imprime como inteiro.67 idiomas,3237 bytes, pontuação0,148 ...37/7 3 ≈ 0,107872 ...Brainfuck-ng
+
incrementa a célula atual,!
imprime como número inteiro e@
sai.#
e"
são NOPs.Python 2
A primeira linha é o comentário. Usando a divisão inteira, calcula
4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2
e imprime o resultado.Python 3
O mesmo que o anterior, mas com divisão de flutuação.
4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3
.Lua
--
inicia um comentário e,#
na primeira linha, há um comentário, basicamenteprint(4)
.> <>
#
reflete IP,5
pressiona 5,n
imprime um número e;
sai.Befunge
#
pula o mouse+
,!
anula logicamente o topo da pilha,"@\"
empurra a corda@\
,6
empurra 6,.
imprime um número e@
sai.Pyth
#
inicia um loop infinito, descartando erros.7
imprime 7, depois segue o+!"string")
que basicamente causa um erro por não ter dois operandos para+
finalizar o programa.fonte
JavaC ++ C, 363/27 = 13,4 ....
Java imprime 1, C ++ imprime 2, C imprime 3. Não quebrando nenhum registro aqui (porque Java), mas eu realmente gosto da maneira inteligente e abusiva de criar poliglotas nessas linguagens que descobri.
Isso é uma bagunça. Aqui está um detalhamento de como funciona. Os literais Unicode (
\u000a
também conhecidos como avanço de linha e\u002a
também conhecidos como*
) são expandidos pelo compilador Java em seus caracteres reais. Então, aqui está o que o compilador Java vê:Todas essas coisas no começo são ignoradas porque estão agrupadas em um comentário de várias linhas (
/* ... */
). Posteriormente, vemos que a mistura de comentários de uma linha e de várias linhas nos permite controlar exatamente quais partes são comentadas em cada idioma. No método principal, iniciamos um comentário com várias linhas e, em seguida, temos//*/
. Normalmente, esse seria um comentário de linha única, mas, como estamos em um comentário de várias linhas,//
ele não faz nada, permitindo*/
que ele seja fechado.Este é o código Java equivalente, com os comentários removidos:
Aqui está o que o compilador C / C ++ vê (removi os literais Unicode, pois eles não são expandidos pelo compilador e, portanto, não fazem nada):
Aqui, os comentários de linha única substituem os delimitadores de comentário de várias linhas no início, para que todos
#define
os#include
se pré-processem. Em seguida, comentários de várias linhas são usados para comentar o código de padrão para Java. Este é o código equivalente, com os comentários removidos:Um truque poliglota C / C ++ padrão (the
#ifdef __cplusplus
) é utilizado para definir um tokeno
como um"2"
ou"3"
, dependendo se é um compilador C ++ ou C que está compilando o código. Em seguida, definimos uma funçãop
que recebe um únicoint
argumento (ignorado) e chamaprintf
, usando nossoo
token recém-definido . Como de costume, o valor de retorno é deixado de fora, pois não estamos no modo estrito. Em seguida, definimos astruct
com um único membro, um ponteiro de função cuja assinatura correspondep
a e construímos uma única instância chamadaout
. No método principal (deixamos de lado oint
habitual), o endereço dep
é atribuído aout.print
(assimout.print
chamadasp
) e é chamado.Se o C ++ não estivesse incluído nas linguagens, poderíamos descartar todo o código do pré-processador e definir
p
comoint p(int a){puts("2");}
. Infelizmente, o C ++ requer uma#include
E / S de execução. Se C não estivesse incluído, poderíamos descartar a definiçãop
e a#ifdef
macro do pré - processador e definir diretamente uma função de membro nostruct
lugar de precisar de um ponteiro de função. Infelizmente, C não suporta funções membro.fonte
4 idiomas, 28 bytes / 64 = 0,4375
1. Python 2
0
é falso e/
é divisão inteira, então2. Perl (também Python 3)
0
é falso e/
é divisão de flutuação, então3. Ruby
0
é verdade e^
é bit a bit xor, então4. Lua
0
é verdade e^
é exponenciação, entãoObserve que Lua e Ruby não podem adicionar booleanos como se fossem números inteiros, daí o agrupamento deles. Infelizmente
0and
, não funciona em Lua, por isso não podemos salvar um byte lá.Versão anterior de 17 bytes, que imprime 1 (Lua), 2 (Ruby), 3 (Python / Perl):
-3 bytes graças a @xnor para esta versão, tornando-a muito mais limpa :)
fonte
2^(0 or 1)
?BFSRS> <> funge93thon123, 73/343 ≈ 0.212827 ...
Brainfuck, Sério ,> <>, Befunge-93, Python 1, Python 2, Python 3
Contém imprimíveis, hexdump (reversível com
xxd -ps -r
):Adicionarei mais idiomas (e provavelmente bytes) ao longo do tempo. Os idiomas no cabeçalho são listados na ordem em que são impressos. Assume células de quebra automática de 8 bits e uma fita que não se queixa de sair da posição inicial (quebra automática ou infinita) para Brainfuck.
Brainfuck:
Sério :
><>
:Befunge-93:
Python 1 (graças ao muddyfish):
Python 2 :
Python 3 :
fonte
3
para4
) #14 idiomas, 73 bytes, pontuação = (73/14 ^ 3) = 0,02660349854
Posso adicionar mais alguns langs, mas acho que vou adicionar o que tenho aqui.
1. Brainbool ; Experimente online!
O código relevante:
Isso é realmente justo
+.+
, o que gera 1.2. Jolf ; Experimente aqui!
O
(
char para de interpretar o código fonte, portanto, o código relavent é:Isso é equivalente a (em JavaScript)
Qual saída 2.
3. elemento; Experimente online!
O código relevante:
Isso captura
3
e imprime.4. Brainfuck ; Experimente online!
O código relevante é:
Qual é a maneira padrão de gerar o código de char do 4 e produzi-lo, e algumas outras coisas depois dele.
5. Reng; Experimente aqui!
~
finaliza o programa, então o código relevante aqui é:#
redefineY
para ser o TOS, neste caso0
,.2
empurra 2;(
gira a pilha N vezes, pressionando N da pilha;3`
empurra -3; e, finalmente,5n
imprime5
.6. ETA; Experimente online!
O ETA lê apenas as letras E, T, A, O, I, N, S, H, portanto, o código executado apenas é o seguinte:
Código super-relevante:
Ou, de forma equivalente:
nthne o
.n...e
é um literal de base 7 ethn
é o número base 7 de 54.o
gera esse caractere. A submissão falha, mas não sei por que.7. Python 3
O que vê:
15/2
produz 7,5, como/
é a divisão de flutuação.int(...)
torna o número um int, que é impresso. O programa falha quando+3
é encontrado.8. Julia
Julia vê:
Em vez de truncar 15/2, Julia o arredonda, produzindo 8. Ele imprime isso e depois erros ao encontrar +3.
9. fissão; Experimente online!
Código relevante:
Eu recebi essa idéia da parte da Fissão de Martin (mais como roubada).
L
começa uma coisa voltada para a esquerda, captura9
e termina com<
.10. espaço em branco; Experimente aqui!
O código relevante, traduzindo espaços
S
e tabulações emT
:Empurra 10 para a pilha e a produz como um número (
T\nST
).11. Python 2
O Python 2 vê isso:
(int(15/2))+3
é avaliado como 11 e é impresso.12. Gol> <>; Experimente aqui!
Código relevante:
Isso usa o truque usado na resposta de Martin que
@
gira diferentes direções em> <> e Gol> <>.#
espelha,c
empurra 12,d
empurra 13,0
empurra 0 e@
levac
para o topo da pilha, sendo depois retirado e impresso;n
.13.> <>; Experimente online!
Código relevante:
Novamente, o uso que
@
gira diferentes direções em> <> e Gol> <>.#
espelha,c
empurra 12,d
empurra 13,0
empurra 0 e@
levad
para o topo da pilha, sendo depois retirado e impresso;n
.14. Golfscript; Experimente online!
O que vê:
Empurra
14
,print
s it e erros.Roubadoinspirado pela resposta do Sp3000 .fonte
Subskin , Brainfuck e Fob 27 bytes / 3 ^ 3 = 1
Subskin
Definimos o ponteiro da instrução (não importa aqui) para
0
e o registro de saída como31
. Se o conteúdo do registro de saída for>= 0
, emitimos o valor contido como achar
. Todos os outros códigos são ignorados.Brainfuck
Coloca
3
no registro, diminui o valor uma vez com-
e finalmente gera com.
.Fob
Isso é um pouco mais complicado, pois o Brainfuck também lê as instruções
<
e>
no Fob. Entramos no modo de execução#
e aumentamos o ponteiro de Brainfuck em um que facilite mais tarde. Ainda não temos nada para executar, então nada é executado.Entramos no modo acumulador com
$
, lançamos a3
, entramos no modo de execução novamente, empurramos o conteúdo do acumulador para a pilha<
e, finalmente, produzimos o conteúdo com>
.Para evitar que o Brainfuck estrague o programa, entramos no modo de acumulação novamente com
$
.fonte
7 idiomas, 55/7 ^ 3 ≈ 0,16035
Executa no PowerShell v1, v2, v3, v4 e v5, Foo e Pyth
Os dígitos 1 a 5 usam lógica semelhante à resposta da batata doce . A
$PSVersionTable
variável especial foi introduzida no PowerShell v2 e contém uma lista completa de compilações, revisões, etc. Aqui está um exemplo de saída da variável:Nesse código, primeiro o armazenamos
$p
para que o tamanho do código seja menor. Em seguida, verificamos sua existência, alavancando a variável como um índice em uma matriz de dois itens:$NULL
, o!
que é$TRUE
, ou1
, que corresponde ao segundo elemento da matriz, que é gerado1
.!
a variável resultará em$FALSE
ou0
, que indexa o primeiro elemento, que gera o número da versão.Usando o Foo for 6, aproveitamos esse
#
comentário no PowerShell, que é ignorado ao executá-lo em um ambiente PS. No entanto, Foo felizmente cuspir o número6
e, em seguida, prosseguir com o resto do programa, o que não faz nada.Usando Pyth for 7, retornamos
7
e imediatamente encerramos com.q
, para que o loop infinito while-true que começou com#
não importa. Como ainda temos algo que é impresso implicitamente. Obrigado a @ FryAmTheEggman por esta adição.Edit - Golfed um punhado de bytes graças a Mauris Edit - esclareceu Pyth explicação graças a Sp3000
fonte
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]
? Isso funciona no meu PowerShell, mas talvez não em todas as versões anteriores.7 idiomas, 287/7 ^ 3 = 0,836
Provavelmente a pontuação mais baixa que aparece, de qualquer maneira eu gosto dessas 3 versões do poliglota C.Adicionada a solução Python chata para pelo menos se qualificar para a recompensa de "3 idiomas únicos".
Adicionado Java abusando dos trigramas C para diferentes interpretações de comentários.
Trabalha em:
Python 1
Python 2
Python 3
C89
C99
C ++
Java
versão golfed:
Ungolfed:
Ok, isso provavelmente está ficando meio estranho e espero que minhas habilidades em inglês sejam boas o suficiente para explicar isso de maneira comum.
Antes de tudo, vou explicar os diferentes tipos de comentários que usei para encapsular as estruturas de linguagem, cada uma por si.
Então vamos pegar o primeiro bloco:
Para Java, este é apenas o começo de um comentário de várias linhas. Mas ... em C99 / 89 / ++, isso avalia como
Como
??/
é um trígrafo por\
enquanto em C, o\
caractere é meio consistente e até consome quebras de linha em sua funcionalidade de comando. Isso faz com que o resultado de um\n
seja apenas "exibido" em vez de apresentar quebras de linha. isso significa que, considerando a matriz de bytes que representa o primeiro bloco: [/
] [*
] [\n
] [*
] [?
] [?
] [/
] [\n
] [/
]] seria após a avaliação do trigrama: [/
] [*
] [\n
] [*
] [\
] [\n
] [/
] [ ] Onde a funcionalidade consistente dos\
gatilhos e "consome", os\n
bytes avaliados restantes e finais em C langs são: [/
] [*
] [\n
] [*
] [/
] [ ]Mas tudo isso java não sabe nada e trata tudo o que se segue como um comentário até que esse truque seja revertido.
(continua!)
fonte
4 idiomas (Befunge-93, Microscript II, Microscript e Foo), pontuação 7/64 = 0,109
Melhor: Pressione 4, pressione 1, imprima 1 e termine.
Microscript II: Produza a string "4", descarte-a, pegue a raiz quadrada de uma, descarte-a e, finalmente, defina x como 2. Isso é impresso implicitamente.
Microscript: pressione 52 na pilha (que nunca será realmente usada pelo restante do programa), aumente o registro (inicialmente zero) em um e, em seguida, aumente o registro em dois. Isso é impresso implicitamente.
Foo: Imprima a string "4" e pressione 2
fonte
Python 1 | 2 | 3, 27 bytes / 27 = 1
O uso de números de versão pelo @wewepotato me fez pensar se era possível distinguir os Pythons em menos. Aqui está o melhor que eu encontrei.
Explicação
Para distinguir o Python 3 das versões anteriores, usamos o truque de divisão inteira padrão vs. divisão de ponto flutuante.
(1/2>0) == (0>0)
retorna 0 pré-Python 2.3 ou aFalse
partir do Python 2.3 em diante e(1/2>0) == (0.5>0)
retornaTrue
para o Python 3.Para distinguir o Python 1 do resto, pegamos o comprimento da string
"\xabc"
, que é o comprimento um no Python 1 e o comprimento dois do Python 2 em diante. Por quê? Porque(Do que há de novo no Python 2.0 )
fonte
Python 3, Ruby, Perl, C, C ++, Objective-C 202 bytes / 6 ^ 3 = 0,935 ...
Isso foi bastante divertido, na verdade, e muito jogo com booleanos.
Você pode todas as versões do código no site a seguir , copiando e colando o código no intérprete.
Python 3, impressões
1
O truque é o seguinte:
Isso imprimirá
1
Ruby, impressões
2
O código interpretado para Ruby é:
Então isso imprime
2
Perl, impressões
3
O código interpretado para Perl é:
Primeiro, o
__DATA__
token informa ao compilador Perl que a compilação foi concluída. Tudo depois é ignorado.E imprime
3
C, impressões
4
O código interpretado é bem diferente dos outros:
Isso simplesmente imprimirá o caracter
4
.C ++, impressões
5
O mesmo que o código C
Isso imprimirá o caracter
5
.Objetivo-C, impressões
6
O mesmo que o código C
Isso imprimirá o caracter
6
.fonte
5 idiomas, 18 bytes / 5 ^ 3 = 0,144
É executado em Brainbool , Mathematica , Foo , > <> e Befunge-93 .
Brainbool
O Brainbool é como o Brainfuck, mas opera apenas em bits, e sua entrada e saída consistem apenas em
0
e1
.Mathematica
No Mathematica, tudo é uma expressão e tem um valor.
Print@2
imprime2
e retorna o símboloNull
. Depois disso, o código faz alguns cálculos simbólicos, mas não imprime nada.Foo
"3"
impressões 3. Não sei o que as outras partes fazem.> <>
Befunge
12 idiomas, 35 bytes / 12 ^ 3 = 0,0202546 ...
Usando o truque de sweerpotato , barato, mas poderoso.
Executa no Brainbool , Mathematica 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 e 10.0 , Foo e > <> .
fonte
6 idiomas, 38/6 ^ 3 = 0.17592̅5̅9̅
Espaço em branco , Brainfuck, Rubi, Labirinto , Foo, Seriously
Lenda:
£
: aba•
: espaço§
: 0x7fContém caracteres não imprimíveis, então aqui está o hexdump:
7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a
Explicação:
Espaço em branco
Experimente online. (Nota: meu programa omite os três feeds de linha de fechamento para finalizar o programa, eu escrevi / testei isso no Whitelips e produz a saída correta lá, mas não no Try It Online, portanto, o programa vinculado tem esses dois caracteres adicionados. como posso dizer, alguns intérpretes permitem que você faça isso, outros ficam presos em um loop infinito sem a terminação explícita)
(omitindo caracteres ignorados)
spacespacespacetabenter: empurre um 1 para a pilha
tabenterspacetab: gera a parte superior da pilha
Rubi
Não deveria precisar de explicação. Imprime 2, trata o restante dessa linha (ergo, o programa de foda cerebral) como um comentário, trata o restante do arquivo como vazio.
Brainfuck
Experimente online.
Requer um intérprete que suporte o fluxo insuficiente. Subflui a primeira célula para 255 e a usa para um contador de loop gerar 51, que é o código ascii para 3.
Labirinto
Experimente online.
(omitindo as duas últimas linhas por legibilidade, porque elas nunca são alcançadas)
Foo
Experimente online.
A única coisa que afeta a saída é "5", que imprime 5.
A sério
Experimente online.
fonte
5 idiomas, Chaîne , Minkolang , Foo , Brainf ** k-ng e Vitsy , 21/5 ^ 3 = 0,168
Brainf ** k-ng
Chaîne
Foo
Minkolang
Vitsy
Provavelmente posso adicionar> <> ou algo assim.
fonte
Craneflak , Brain-Flak Classic , Rain-Flak , BrainHack , Brain-Flueue , miniflak , miniHack : .1020
Experimente online!
Explicação
A primeira coisa acontecendo aqui é que há uma diferença na maneira como os comentários são lidos entre os intérpretes BrainHack, CraneFlak e Rain-Flak. Craneflak não tem comentários, no Rain-Flak
#
comenta o resto da linha e no BrainHack#{...}
comenta o interior.Então, aqui está o que cada idioma lê:
A próxima coisa é a diferença entre os flocos cerebrais e os miniflaques. O Rain-Flak e o BrainHack suportam miniflak, onde todas as operações extras são simplesmente removidas. Isso significa que eles perdem a
[]
e<...>
A seguir, temos a diferença entre o Brain-Flak e o Brain-Flak Classic. Em clássico
[]
é-1
em vez da altura da pilha, o que significa que o nosso resultado é 1 a menos do que em regular de Rain-Flak, fazendo 2.Por fim, temos a diferença entre Flak cerebral e Flue cerebral. Na combustão cerebral, uma fila é usada em vez de uma pilha. Normalmente, o ataque cerebral empurra 3 e 5 e retira os 5, no entanto, no escape cerebral, o pop se livra dos 3 e não dos 5.
fonte
Via Láctea 1.0.2 , CJam e STXTRM , 20 bytes / 3 ^ 3 = 0,741
Eu imagino que há pelo menos um outro idioma que eu poderia adicionar.
Explicação
Via Láctea ,
1
Na Via Láctea, as strings são apenas indicadas por pares de aspas duplas. Uma aspas simples lê a entrada da linha de comando; se não houver, ele envia uma string vazia. Sinais maiores que e menores que girarão a pilha inteira para a direita e para a esquerda, respectivamente. Finalmente, um ponto-e-vírgula troca os dois principais elementos da pilha.
Aqui está uma visualização de pilha (a pilha mostrada é o resultado da operação listada após a ocorrência):
CJam ,
2
No CJam, as strings também são indicadas por pares de aspas duplas. Uma aspas simples envia o código do caractere a seguir. Quando um código de caractere é produzido, ele é produzido como seu caractere correspondente. Sinais maior que e menor que agem como esperado, avaliando a ordem dos dois principais elementos da pilha. Finalmente, um ponto-e-vírgula descarta o elemento da pilha superior. No término do programa, o conteúdo da pilha é gerado.
Aqui está uma visualização de pilha (a pilha mostrada é o resultado da operação listada após a ocorrência):
STXTRM ,
3
No MSM, qualquer coisa que não seja um operador é enviada para a pilha como um caractere. Um ponto-e-vírgula duplica o elemento da pilha superior. O programa continua até que não haja mais operadores ou que haja um único elemento na pilha.
O caractere final na pilha
3
é duplicado pelo operador final.3
é o elemento mais alto no final do programa, portanto é emitido.fonte
5 idiomas, 18 bytes / 5 ^ 3 = 0,144
Ouroboros , Pip , QBasic, Foo e Pyth
1. Ouroboros
Cada linha do programa representa uma cobra comendo seu rabo.
Cobra 1
Push
5
,'
é um push não operacional52
(código ASCII de"4"
).(
faz com que a cobra estale um número e coma tantos caracteres de sua cauda. Como isso resulta na ingestão do ponteiro de instruções (e de toda a cobra), a execução é interrompida.Cobra 2
Empurre
1
, empurre um número aleatório (?
), empurre3
,'
é um no-op.@
gira o1
para o topo da pilha e on
gera como um número, deixando o3
topo da pilha. Depois(
come tantos caracteres do final da cobra, engolindo o ponteiro da instrução e interrompendo.Você pode executar este programa on-line no interpretador de snippet de pilha aqui .
2. Pip
A maior parte do programa consiste em expressões que são avaliadas e descartadas:
5
'"
(literal de caractere)4
"()"
1?3'@
(expressão ternária)n
(variável, = nova linha)()
(nada)Finalmente, a última expressão
2
,, é impressa.3. QBasic
Tudo depois
'
é um comentário. A primeira linha resume-se a5
um número de linha. Na segunda linha,1
é um número de linha e?3
é um atalho paraPRINT 3
.(Aparentemente, ter números de linha fora de ordem não é um problema, embora seja fácil corrigi-lo.)
4. Foo
Quase tudo é sem ops.
"4"
impressões4
. Os parênteses (x2) são um loop que é executado até que a célula atual da matriz seja zero, o que é verdadeiro imediatamente e o loop sai.@
, quando não é seguido por um número, pega o valor da célula da matriz atual (inicializada em 0) e a envia para a pilha.Não tenho muita certeza de como o segundo, incomparável,
"
deve ser tratado. A versão online parece adicionar uma nova linha à saída, permitida pelas regras do desafio.5. Pitão
5
é produzido. Em seguida, o programa encontra'"4"
, que tenta ler de um arquivo chamado4
. Enquanto esse arquivo não existir, acho que isso deve encerrar o programa com um erro. (A versão online dizname 'open' is not defined
- presumo que abrir arquivos não é permitido online).A dispersão
"
no final da linha 1 garante que a linha 2 não cause um erro de sintaxe antes da execução.fonte
4 idiomas, 24 bytes, 24/4 ^ 3 = 0,375
1. PHP
PHP executa o
print(1);
que é igual a 12. Lua
Lua executa o
print(1//0.5);
que é igual a 23. Python 2
Python 2 executa
print(1//0.5--1+1/2*2);
igual a 3 (divisão inteira)4. Python 3
Python 3 executa
print(1//0.5--1+1/2*2);
igual a 4 (divisão flutuante)fonte
Brainfuck-ng, Foo,> <>, 9 bytes / 3 ^ 3 = 0,333 ...
Brainfuck-ng
Os únicos caracteres que reconhece são
+
e!
:Impressões
1
Foo
Imprime tudo entre aspas.
Impressões
2
> <>
#
Espelha o ponto à esquerda,3
empurra 3 para a pilha,n
gera como um número inteiro,;
interrompe o programa.fonte
3 idiomas,
8283/3 ^ 3 = 3,074 ...Trabalhos em ??? , Espaço em branco e Beatnik . Ou melhor, deve funcionar nesses idiomas, mas não poderei testá-los por alguns dias. Enfim, aqui está o código:
1. ???
??? é basicamente foda cerebral, mas usa pontuação comum como comandos, em vez dos caracteres tradicionais.
.
incrementa a célula de memória atual, feita 49 vezes.!
pega a célula de memória atual e a imprime como um caractere, aqui1
.2. Espaço em branco
Espaço em branco é uma linguagem que ignora todos os caracteres que não sejam espaços em branco. Aqui eu o converti para um formulário de fácil leitura. A primeira linha empurra
2
a pilha e as duas segundas linhas imprimem a parte superior da pilha como um número aqui2
.Observe que no código combinado, substituí as guias com quatro espaços devido a limitações técnicas.
3. Beatnik
Beatnik é um idioma em que cada palavra é convertida em sua pontuação do Scrabble; essas pontuações são interpretadas como comandos. A primeira linha entra
17
na pilha. A segunda linha duplica o topo da pilha de duas vezes e a terceira linha adiciona o topo de elementos da pilha em conjunto duas vezes, triplicando eficazmente17
em51
. A última linha imprime o caractere no topo da pilha, aqui3
.Observe que estou usando o Beatnik no Face Value, supondo que não haja um erro na especificação original do Beatnik. Observe também que estou usando o sistema de pontuação North American English Scrabble.
Se ainda não está claro, cada um desses idiomas aceita apenas um certo tipo de caractere (pontuação, espaço em branco e letras, respectivamente), portanto, escrever esse poliglota foi tão fácil quanto escrever os programas individuais. O único "truque" real é usar o código de espaço em branco para separar as palavras do Beatnik. Além disso, os programas individuais não se sobrepõem.
fonte
5 idiomas, 175/5 ^ 3 = 1,4
Decidi postar uma resposta diferente, pois a recompensa está mudando os requisitos de uma maneira que me fez sentir insegura com a minha primeira resposta (mas que ainda está me satisfazendo no caminho do grande desafio!)
Então, aqui está a minha solução que se qualifica para o desafio da recompensa:
Compila em
fonte
3 idiomas, 15 bytes, pontuação 0,555 ...
Vou adicionar mais idiomas mais tarde.
1. Emotinomicon
Emotinomicon praticamente ignora qualquer texto que não seja uma string.
😅
pressiona 1 para empilhar e😨
envia os TOS como um número.2. Javascript
Os comentários em Javascript começam com
//
, portanto, apenas a2
parte é executada.3. Python 2/3 REPL
Os comentários no Python começam com
#
, portanto, apenas a2//1+1
parte é executada.//
é uma divisão inteira no Python 3 e é igual/
ao Python 2. 2 dividido por 1 é 2, mais 1 é 3.fonte
4 idiomas, 97 bytes, 0,37890625
Rubi
Isso define
s
a"1"
, compara usando=~
contra-3
em um contexto vazio, tenta dividir2
pelo/2;'''/.to_s.ord
então começa uma nova string contendo=;print 4; __DATA__ =1;
, atinge um comentário, em seguida,print
ss
que ainda é1
.Pitão
Conjuntos
s
para"1"
conforme acima, em seguida, define-o novamente para~-3
o que é2
. Nós executamos uma divisão inteira de2//2
, então há uma string contendo/.to_s.ord;"=;print 4; __DATA__ =1; ";#
, seguida por um comentário, finalmenteprint
ings
, que ainda é2
.Javascript
Define
s
para, em"1"
seguida, define novamente~-3
como conforme descrito acima, e há2
uma linha seguida por um comentário. Em seguida, definimos a variável__DATA__
como1
. Há uma sequência curta contendo,;#'''#
seguida por uma definição da funçãoprint
que codifica a saída como 3, chamada na próxima linha.Perl
Executa uma substituição equivalente a
s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/
,print
s4
e o restante da cadeia é mascarado por trás do__DATA__
identificador.fonte
QBasic, QBIC e> <>, 18 bytes / 3 ^ 3 idiomas = 0,66666 pontos
Demolir:
1. QBasic ( obtenha o IDE )
2. QBIC ( Pegue o intérprete )
3.> <> ( Experimente online )
fonte
JavaScript, HTML e PHP, 72 bytes / 3 ^ 3 = 2,67
Em HTML, isso imprimirá o primeiro 1, ignorará a
<!window?2:2//>
tag e o restante será um comentário em HTML.Em JavaScript, ele avalia
1<!window?2:2
e gera 2 (isso deve ser executado em um console) e o restante é um comentário.No PHP, o seguinte é gerado pelo servidor:
1<!top?2:2//><!----><script>document.body.innerHTML=3</script>
que substitui o HTML1
por3
.fonte