Adicionar um idioma a uma poliglota


239

Esse é um desafio de no qual cada resposta se baseia na resposta anterior. Eu recomendo classificar o segmento por "mais antigo" para ter certeza da ordem em que as postagens são feitas.

Nota : Esse se tornou um desafio bastante duradouro, e postar novas respostas é bastante difícil. Como tal, agora existe uma sala de bate - papo disponível para esse desafio, caso você queira conselhos sobre uma parte específica de uma resposta em potencial, tenha idéias para idiomas que possam ser adicionados ou algo semelhante. Sinta-se à vontade para entrar se tiver algo a perguntar ou dizer!

A tarefa

O n º programa a ser apresentado deve ser executado em n diferentes línguas; especificamente, todos os idiomas adicionados nos programas anteriores a serem enviados, além de mais um. O programa deve gerar 1 quando executado no primeiro idioma usado nas respostas a esta pergunta, 2 quando executado no segundo idioma e assim por diante. Por exemplo, a primeira resposta pode imprimir 1 quando executada no Python 3, e a segunda resposta pode gerar 1 quando executada no Python 3 e 2 quando executada em JavaScript; nesse caso, a terceira resposta teria que gerar 1 quando executado em Python 3, 2 quando executado em JavaScript e 3 quando executado em outra linguagem.

Regras adicionais

  • Seu programa deve ser executado sem erros ou falhas. Avisos (e outras saídas stderr) são aceitáveis, mas o programa deve sair normalmente (por exemplo, executando o final do programa ou através de um comando como o exitque executa a finalização normal do programa).

  • A saída deve ser apenas o número inteiro, mas as novas linhas finais estão OK. Outra saída stdout inevitável também é permitida. Exemplos: nome e versão do intérprete no Befunge-93, espaço após a sequência impressa no Zephyr. Alguns idiomas fornecem dois métodos de impressão - com e sem espaço à direita; neste caso, método sem espaço à direita deve ser usado.

  • Cada resposta deve ter no máximo 20% ou 20 bytes (o que for maior) que a resposta anterior. (Isso evita que o uso de idiomas como o Lenguage faça spam no encadeamento e incentive pelo menos uma pequena quantidade de golfe.)

  • O uso de versões diferentes do mesmo idioma é permitido (embora, obviamente, eles precisem imprimir números diferentes, você precisará ajustar uma verificação de versão no poliglota). No entanto, você não pode usar um recurso de idioma que retorne o número da versão do idioma. Repetir exatamente o mesmo idioma é, obviamente, impossível (já que o programa precisaria imprimir deterministicamente um dos dois números diferentes).
  • Truques como abuso excessivo de comentários, apesar de ter sido banido em algumas competições poliglotas, estão bem aqui.
  • Você não precisa usar as respostas anteriores como um guia para escrever suas próprias (você pode reescrever todo o programa, se quiser, desde que esteja em conformidade com as especificações); no entanto, basear sua resposta principalmente em uma resposta anterior é permitido e provavelmente a maneira mais fácil de fazer uma solução.
  • Você não pode enviar duas respostas seguidas. Deixe alguém postar no meio. Esta regra se aplica até que a condição de vitória seja cumprida.
  • Como esse desafio exige que outros concorrentes publiquem nos mesmos idiomas que você, você só pode usar idiomas com uma implementação gratuita (como se fosse um concurso de ).
  • No caso em que um idioma possui mais de um intérprete, você pode escolher qualquer intérprete para um determinado idioma, desde que todos os programas destinados a serem executados com êxito nesse idioma o façam nesse intérprete. (Em outras palavras, se um programa funcionar em mais de um intérprete, as postagens futuras poderão escolher um desses intérpretes, em vez de uma postagem "bloqueando" uma escolha específica de intérprete para um idioma.)
  • Esse desafio agora usa as novas regras do PPCG sobre escolha de idioma : você pode usar um idioma ou um intérprete de idioma, mesmo que seja mais novo que a pergunta. No entanto, você não pode usar um idioma / intérprete que seja mais recente que a pergunta se a) o idioma foi projetado para fins de poliglota ou b) o idioma foi inspirado por essa pergunta. (Portanto, as linguagens de programação práticas recém-projetadas quase certamente serão boas, assim como os esolangs não relacionados, mas coisas como A Pear Tree , que foi inspirada por essa pergunta, são proibidas.) Observe que isso não altera a validade das linguagens projetadas. para poliglota mais antigas que esta pergunta.
  • Observe que a condição de vitória (veja abaixo) foi projetada para que quebrar a corrente (ou seja, impossibilitar que outra pessoa responda depois de você através do uso de um idioma difícil de poliglota com outros idiomas) o desqualificará da vitória. O objetivo é continuar o máximo que pudermos e, se você quiser vencer, terá que respeitar isso.

Formato de resposta

Como todas as respostas dependem uma da outra, ter um formato de resposta consistente será útil. Eu recomendo formatar sua resposta da seguinte maneira (este é um exemplo para o segundo link da cadeia):

2. JavaScript, 40 bytes

(program goes here)

Este programa imprime 1 em Python 3 e 2 em JavaScript.

(se você quiser explicar o programa, as técnicas de poliglota, etc., coloque-as aqui)

Condição de vitória

Uma vez que não haja novas respostas por 14 dias, o vencedor será quem postou a segunda resposta mais recente, ou seja, o maior poliglota que foi provado que não quebrou a cadeia. Estender a cadeia depois disso ainda é muito bem-vindo!

O vencedor é o acaso , veja a resposta 194 (TemplAt) .

Lista de idiomas


3
Para pessoas que podem ver postagens excluídas: a postagem da Sandbox estava aqui .

5
Não é necessário copiar o programa anterior, embora você possa usá-lo como um guia; refazer o programa do zero provavelmente levará mais tempo! Não há necessidade de permalink para respostas; a classificação pelos mais antigos já mostrará todas as respostas em ordem.

3
@ ais523 Acho que o que se queria dizer era que as novas respostas deveriam conter links try it com o novo código?
Azul

5
Acho que precisamos de um script que leva um hexadecimal do código e automaticamente executa-lo em todas as línguas ...
mbomb007

3
Esta é a impressora inteira versátil publicada como um tipo diferente de desafio. (Inspiração?) A resposta final (atualmente) seria pontuada 0.0127, apenas vencida pela submissão de 30 idiomas do Sp3000 ... :)
Stewie Griffin

Respostas:


80

Nota: Se você vir isso primeiro, convém classificar pelos mais antigos

17. Julia (128 bytes)

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);# =#;print(17)
#gg99ddi2` |1|1+6

Existem dois ESCs na última linha, um antes do primeiro ge um depois do 2. Isso poderia ser mais jogado, mas as coisas ficaram confusas, não graças a V e Pyth.

Imprime 1 em Python 3, 2 em V, 3 em Minkolang, 4 em> <>, 5 em Python 2, 6 em SMBF, 7 em Japt, 8 em Retina, 9 em Perl, 10 em Befunge-93, 11 em Befunge -98, 12 em Fissão, 13 em Ruby, 14 em Turtléd, 15 em Haystack, 16 em Pyth e 17 em Julia .


Dicas:

  • O início da quarta linha é Python 2/3, Perl, Ruby. O final é Julia, graças a #=comentários multilinhas (observe que Julia não possui and/or).
  • V é <ESC>gg99ddi2<ESC>, que é definitivamente jogável, mas V é irritante para testar no Experimente online! já que o intérprete é bastante lento.
  • Minkolang e Haystack caem no começo v. Befunge-93 e -98 não, e dependem de a b.
  • Retina conta o número de espaços e 1s na quarta linha e V oculta na configuração da Retina (ou seja, antes do backtick).
  • De acordo com a dica da @ ETHproduction, Japt usa backticks para ocultar a maioria do código em uma string.
  • Fissão é R"12"*.
  • SMBF foi jogado <.na primeira linha, além da final 6.

24
Para onde foi o código de todo mundo?
Alfie Goodacre

13
159 bytes a 128 bytes? Uau, isso é um excelente golfe!
Vacas grasnam

6
Bom, 2 ^ 7 bytes
tomsmeding

7
Uau ... incrível! Nós vamos ter que escrever uma nova explicação para todas as línguas, quando tudo está dito e feito ;-)
ETHproductions

4
@AlfieGoodacre "Você não precisa usar as respostas anteriores como um guia para escrever suas próprias (você pode reescrever todo o programa, se quiser, contanto que ele atenda às especificações)"
mbomb007 7/16/16

52

23. Hexagonia , 186 bytes

Desculpe se isso atrapalha os planos ...

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#0\32=""<0]#echo 21
#8␛dggi2␛` |1|6

␛ é usado para representar um caractere ESC literal.

Impressões:

23 em Hexagony , 22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng (testável aqui ), 18 em Cardinal, 17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fissão, 11 em Befunge-98, 10 em Befunge-93, 9 em Perl, 8 em Retina, 7 em Japt , 6 em SMBF, 5 em Python 2, 4 em> <>, 3 em Minkolang, 2 em Vim / V e 1 no Python 3.

Para acessar os idiomas desvinculados, clique no change languagebotão no canto superior direito do link Hexagony.


Hexagonia não é legível (de forma alguma) neste formato. Precisamos olhar para ele de forma hexagonal.
Observe que os 2 caracteres ESC foram substituídos por s para que você possa vê-los - eles são ignorados e, portanto, não há outros no programa:

        # v 1 6 / " < " 6
       / b . q @ " ( : : )      A lot more readable, right?? No?
      : : : ( 2 2 ) S # ; n
     4 " 1 4 " # > 3 N 6 @ 1
    5 o | > ^ * t t t * ~ + +
   ~ ~ ~ % # = ~ n J < R " 1 2
  " ; # [ p r i n t ( ( 1 / 2 a
 n d 9 o r 1 3 ) - ( 0 a n d + 4
) ^ 1 < < 6 5 > > 6 2 ) # 4 6 ( 8   | Note that the 0s below can be replaced
 9 9 9 9 + + + + + ! ) = # p r i    | With anything (except "`" or " "), 
  n t ( 1 7 ) # 0 \ 3 2 = " " <     V as far as Hexagony is concerned
   0 ] # e c h o 2 1 # 8 ␛ d g
    g i 2 ␛ | 1 | 6 . . . . .    <-- the ␛ represents an esc
     . . . . . . . . . . . .         character
      . . . . . . . . . . .
       . . . . . . . . . .       A "." is a no-op
        . . . . . . . . .
                ^
                | Mirror wraps to here, going NW

Para aqueles que não estão familiarizados com o Hexagony , existem 6 IPs, que começam nos 6 cantos. Apenas 1 está ativo por vez e é alternado usando #][. O modelo de memória não é tão importante para este programa, mas pode ser necessário entender no futuro. Tudo o que você precisa saber é que 1 int é armazenado em uma "borda de memória" (ME para abreviar) e '"}{altera o ME que está ativo.

\/|_>< são espelhos que controlam o fluxo do programa.

É assim que funciona:

Primeira linha executada:

#       A no-op (sets active IP to 0, the currently active one)
 v      letter chars set the ME to their ASCII value - so ME is now 118
  16    Like Labyrinth, 0-9 multiplies ME by 10 and is added - ME now 11816
    /   A mirror that sends IP going NW by wrapping to the bottom

A parte inferior (o snippet virou na vertical para que você possa ler de cima para baixo):

    .   
   .    A series of no-ops. The IP is going NW now,
  .     because of the mirror on the top.
 .
|       Another mirror. This one sends the IP NE, into the h
 h      sets the ME to 104, the ASCII value for h
  #     104 % 6 == 2, so IP 2 is now active instead of 0

A margem direita:

        8  IP #2 is moving SW, starting in the right corner 
       i   Sets the ME to 105
      <    Mirror. Sends the IP going due West
    ""     These change the Active ME - just know that the new edge is 0
   =       Changes the MP (more in specs) - effectively a no-op used to fill space
\32        pushes 23, and mirrors up NE to the !

O último bit do código relevante:

!          Prints the current value of the ME as an int. Success!
 20(R~     Does things to the ME - irrelevant now
      @    Ends the program!

Coisas a serem observadas:

  • Hexagony cai todos os s e `s antes de executar, então quaisquer alterações aos não afetará Hexagony
  • Eu precisava preencher o código para que ele fosse interpretado como um hexágono de 9 comprimentos, em vez de um 8º - tenha cuidado com o golfe abaixo de 169 ou acima de 217 caracteres relevantes
  • Por esse motivo, o ~~~e os 2 0s no final podem ser alterados sem causar danos ao código
  • O =""apenas afasta o ME do anterior, para que um novo ME possa ser modificado. Eles podem ser substituídos por outros caracteres que fazem a mesma coisa sem prejudicar o ( 's) programa ( s) de hexagonia , por exemplo)
  • Tecnicamente, isso não é compatível com as especificações do Befunge 93, porque limita a caixa delimitadora do código a 80 por 25 caracteres. No entanto, a maioria dos intérpretes ignora essa especificação (como o TIO), então eu pessoalmente não acho que isso seja um grande negócio. Se o fizer, fique à vontade para deixar um comentário. (Se o suficiente realmente quiser que eu mude, então tentarei)
  • Espero que não seja muito difícil agora.

1
Isso poderia facilmente se tornar o fluxo mais louco do programa, se bem feito. Eu estava perto de fazê-lo com um hexágono tamanho 8 por meio de um método @ ## louco, mas o 9 foi muito mais fácil quando tentei. Além disso, a v1 do TIO funciona muito mais rápido, mas você não pode alternar idiomas facilmente.
MildlyMilquetoast

Gostaria de sugerir o labirinto a seguir, mas quero fazer isso.
MildlyMilquetoast

Não sou habilidoso o suficiente para escrever algo assim, mas nesse meio tempo estou esperando o Cubix aparecer.
Pavel

@ pavel Não estou familiarizado com esse idioma. Presumo que seja 3D. Parece legal. Há também alguns funges que são 3D, pode ser uma adição interessante
MildlyMilquetoast

Suspeito que seja mais fácil manter algo como esse fluxo enquanto ainda estivermos do mesmo lado e apenas reescrever o código Hexagony quando passarmos para o próximo tamanho. No que diz respeito às linguagens 3D, o Trefunge deve ser bastante fácil de ajustar, assumindo que nenhuma das linguagens existentes entre em pânico ao ver os feeds de formulário. (Além disso, Cubix foi publicado anteriormente, mas excluído porque o cartaz pensei que poderia ser muito difícil, manter Hexagony e Cubix ao mesmo tempo poderia ser bastante confuso ...)

52

50. bash, 1024 bytes

#16  "(}23!@)" 3//v\D(@;'[af2.qc]GkGGZ'#)"14";n4
#/*` "[!PPP(22)SP(>7 7*,;68*,@;'1,@ ␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=<xR+++++[D>+++++++L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh@O6O4/]>+.-- -. >][
#Rx%>~~~+ +~*ttt*.x
#D>xU/-<+++L
#R+.----\).>]|
#[#[/v/v(/0l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e00m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#ssseemeePaeueewuuweeeeeeeeeeCisajjapppp/*/
#define z sizeof'c'-1?"38":"37"
#include<stdio.h>
main(  )/*/
#()`#`\'*/{puts(z );}/*'``
<>{# }//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#< >"3"O.
=end #//
"""#"#//
#}
#|o51~nJ;#:p'34'\
#ss8␛dggi2␛ `|1|6$//''25  =#print(17)#>27.say#]#print(47)#]#echo 21#ss*///nd^_^_Z222999"26

Deseja saber mais? Experimente o chat do polygot !

Experimente-os online!

Como de costume, substituí as guias literais por caracteres ESC literais por , devido às limitações do Stack Exchange. Você pode obter uma versão facilmente copiável do programa na caixa "entrada" do link TIO acima.

Atropelar

Este programa imprime 50 em bash, 49 em oitava, 48 em Deadfish ~, 47 em Lily, 46 em Cubix, 45 em PicoLisp, 44 em alphuck, 43 em reticular, 43 em reticular, 42 em evil, 41 em brainf ***, 40 em Minimal -2D, 39 em CoffeeScript, 38 em C, 37 em C ++, 36 em labirinto, 35 em INTERCAL, 34 em trilho, 33 em incidente, 32 em turbilhão, 31 em SNUSP modular,30 em Espaço em branco, 29 em Trigger, 28 em Brain-Flak, 27 em Perl 6, 26 em 05AB1E, 25 em Pip, 24 em Thutu, 23 em Hexagony, 22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng , 18 em Cardinal, 17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission, 11 em Befunge-98, 10 em Befunge-93,9 em Perl 5, 8 em Retina, 7 em Japt, 6 em SMBF, 5 em Python 2, 4 em> <>, 3 em Minkolang, 2 em V / Vim e 1 em Python 3.

Verificação

A maioria dos idiomas é testada pelo driver de teste acima. Os quatro culpados habituais precisam ser testados separadamente:

  • O incidente foi testado usando seu intérprete oficial, offline;

  • O Deadfish ~ também foi testado usando seu intérprete oficial, offline;

  • O SNUSP modular foi testado online aqui ;

  • Reng foi testado online aqui .

Explicação

Eu estava procurando vários leads para adicionar idiomas. Uma possibilidade era encontrar uma linguagem com #comentários de linha que pudesse ser plausivelmente adicionada à linha "linguagem de script" (que lida com Perl, Python 2 e 3 e Ruby). Levei um tempo para pensar em uma linguagem apropriada que pudesse ser compatível com sintaxe com as que já estão lá.

Acontece que a resposta estava me encarando há séculos. Se você clicar no link TIO acima, ele abrirá o driver de teste poliglota, escrito em bash. Então, durante todo esse tempo, tive uma guia dizendo "Bash - TIO Nexus". Você pensaria que seria uma dica, mas aparentemente eu perdi. Como bônus, o bash também é uma linguagem de script; portanto, o termo "linha da linguagem de script" ainda é apropriado.

O programa bash inicia no mesmo local que as outras linguagens de script. No entanto, existe uma maneira bastante simples de separá-lo deles; nas cadeias de caracteres simples, \é um caractere de escape na maioria dos idiomas, mas não no bash. Portanto, podemos ocultar o código bash de outras linguagens via '\'…';, que é uma declaração degenerada (sem efeito) em Perl, Python e Ruby, mas executada no bash. echo 50;exité uma maneira bastante simples de finalizar o programa bash. Bem, quase.

O maior problema aqui é que, ao executar exit, o bash continuará analisando até o final da linha atual (mesmo que não execute o código em questão), portanto, precisamos garantir que não haja erros de sintaxe no restante dos a linha. Temos um 'pouco depois exit;que não é (e não pode ser) correspondido imediatamente. Mais tarde na linha, '…'é usado para ocultar algum código Brain-Flak das linguagens de script, mas isso o ocultaria do bash. Como resultado, precisamos alterar o tipo de literal de cadeia de caracteres que estamos usando para ocultar o código, passando de cadeias de citação simples para citação dupla. or"'"faz o truque sem perturbar Perl, Python ou Ruby (como o argumento à esquerda é verdadeiro em todos os casos).

Agora, temos uma citação dupla incomparável que se estende para uma linha futura. Era bastante difícil fechá-lo sem perturbar pelo menos um outro idioma; o que realmente fazemos é mudar a maneira como ocultamos o código do bash de aspas duplas para uma aspas simples inigualável em um comentário Python / Ruby na linha subseqüente e finalmente fechar a aspas simples no final da linha depois disso.

Pyth e 05AB1E

Brincar com aspas duplas também perturba os idiomas que estavam usando seqüências de caracteres entre aspas duplas para ocultar o código Pyth e 05AB1E. O principal truque que usamos aqui é garantir que cada citação dupla que adicionarmos tenha outra citação dupla logo depois para expor o mínimo de código possível. (Isso explica as aspas duplas extras na __DATA__linha, que não são necessárias para o bash.) Pyth usa \como caractere de escape; O principal resultado disso é que ele limitava o escopo que eu tinha para mexer com seqüências de caracteres nas linguagens de script, forçando-me a usar o método bastante complicado acima (como eu não conseguia facilmente usar a diferença de \comportamento entre o bash e tudo) outro). Em 05AB1E, 'atua como um caractere de escape foracordas, e tê-lo escapar da liderança "não faria. Por isso, acabei precisando colocar um caractere de preenchimento inútil (o padrão é o habitual x; isso facilita a leitura!) Nas "'"construções usadas para mudar entre os estilos de cotação do bash.

Prelúdio

De longe, a linguagem mais difícil de corrigir aqui. O problema é que a linha de script, com todos os seus parênteses, foi movida para os lados e, portanto, o fluxo de controle do Prelude (que se importa muito com a maneira como os parênteses são alinhados verticalmente) foi completamente destruído. Eu tive que tentar reconstruir algo que funcionasse.

Pior ainda, a primeira linha atual (que eu realmente não queria reescrever) coloca um limite rígido para onde os parênteses podem aparecer. Começa com um dígito diferente de zero (dois deles, de fato!), E logo é seguido por um parêntese de abertura. Esse é um loop no Prelude, e os loops no início do fluxo de controle no Prelude causam vários problemas diferentes (principalmente porque fazem com que mais código seja executado, em vez de menos). Como tal, eu precisava muito abrir um loop de iteração 0 em alguma outra linha para pular esse código. A mainlinha para o programa C é altamente adequada, mas precisamos ter muito cuidado com o local onde está o colchete de fechamento correspondente; muito à direita e o suporte inigualável no#R+A linha causará problemas, muito à esquerda e não comentará código suficiente. (Lembre-se de que um parêntese de abertura em uma linha pode corresponder a um parêntese de fechamento de uma linha diferente.)

Feito isso, temos espaço suficiente para ficar entre parênteses de abertura na linha de Incidentes e finalmente conseguimos ultrapassar com segurança os primeiros caracteres do programa. No entanto, a diferença entre os canais entre parênteses acaba significando que parte do código Incidente / Redemoinho é executado no Prelude, corrompendo a pilha. Em vez de tentar evitar isso, movi alguns dos zeros de Whirl para a direita, permitindo que eles nos dessem um programa Prelude em funcionamento novamente.

Outra pequena mudança ocorreu na primeira linha do programa; o parêntese final da linha estava em uma posição muito difícil de evitar. cAdicionei um extra logo após o código Pyth para deslocá-lo para a direita. (Muitos idiomas estão analisando esse ponto do programa, por isso, foi necessária uma quantidade surpreendente de tentativa e erro para encontrar um caractere de preenchimento que não quebrasse pelo menos um idioma!)

Incidente

O Prelude já era difícil o suficiente, mas fazer com que Prelude e Incidente trabalhassem ao mesmo tempo era um pesadelo. O Prelude impôs muitas restrições ao código, o que me impediu de movimentar as coisas livremente e, assim, dificultou a construção acidental de tokens. Por exemplo, o Prelude realmente precisa apenas de um 0movido para a direita, mas isso 00se tornou um token com falha, quebrando alguns dos tokens que queríamos como parte do programa de Incidentes (porque, se dois tokens se sobrepõem, ambos são rejeitados, e o 00foi sobrepondo um sinal que queríamos além da própria sobreposição). Eu tive que mudar as duas para fazer uma quarta cópia e evitar que ela fosse considerada um token.

Mais sutis são os tokens ;'e ␠␠(ou seja, dois caracteres de espaço). O problema é que ambos aparecem antes do kGque está sendo usado para pular para o início do programa e, portanto, interromperão o fluxo de controle do incidente (além de interromper o ponto central do programa).

Remover uma cópia ␠␠quebrando-a não parece viável. Removê-lo por sobreposição pode ser possível ( ␠=é uma sobreposição potencial promissora), mas é quase certamente menos detalhado adicionar apenas uma quarta cópia, que foi o que fiz aqui.

Enquanto isso, podemos usar um truque diferente para ;'. Quebrar isso não é algo que eu queria tentar, já que é usado em situações bastante sensíveis ao espaçamento. No entanto, não é que perto do início do programa (apesar de aparecer na primeira linha), por isso é plausível que poderíamos saltar sobre ele (causando-lo para não afetar o fluxo de controle) ao invés de precisar que ele não existe. Procurei um token adequado para o salto, que não estragaria nenhum dos outros idiomas. /vaparece um pouco mais cedo na primeira linha e não quebra nada, e é isso que eu usei.

50 idiomas em 1 Kib de código

Foi apontado pelo @MistahFiggins que meu envio de 1025 bytes seria muito melhor se fossem 1024 bytes (especialmente porque o quinquagésimo idioma é um marco por si só). Isso exigia encontrar um byte de economia em algum lugar. Nesse caso, salvei três bytes no Deadfish ~, ao custo de dois bytes extras usados ​​para fazer com que os tokens de incidentes se alinhem corretamente e, assim, diminuindo exatamente o programa para 1024 bytes.

Anteriormente, a fórmula usada pelo código Deadfish ~ era (2² + 2) ² + 10 × 1 + 2 = 48. A nova fórmula é (3²-2) ²-1, também produzindo 48. Surpreendentemente, não é isso que muito mais curto para escrever em Deadfish ~, apesar de ser consideravelmente mais simples.

Isso também nos dá uma pontuação VIP de 0,008192. Não apenas este é um novo recorde, como também é um número bastante redondo (o que é, obviamente, uma consequência de ter números redondos agradáveis ​​como entradas para a fórmula).


2
Desculpe por não ter um TIO> _> (Sinceramente, criador do Reng)
Conor O'Brien

@ ConorO'Brien Ping Dennis? Além disso, ais523, você deve tentar jogar um único byte de folga;);
MildlyMilquetoast 21/17/17 /

1
Você pode cortar o espaço puts(z )se trocar (e Pna linha 2, graças à margem de prelúdio que você criou. Bravo nesta resposta. # 50in1k
Chance

1
Por acaso, joguei um byte diferente. Agora, exatamente às 1024, eu realmente não quero alterá-lo :-) Talvez uma resposta posterior possa salvar algumas das economias que temos; é provável que haja muito mais (por exemplo, é provável que exista um acolchoamento / desdispensação antigo de incidentes que não seja mais necessário).

6
@ ais523 concordou. Essa resposta sempre foi criada para ter 1024 bytes.
Chance

38

37. C ++ (gcc), 776 bytes

#  1"16" 2//v\(;@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#*/
#include<iostream>␉
int main()  /*/
#()"`#"\'*/{std::cout<<37;}/*'"`"
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/3!@"26

é uma guia literal, um caractere ESC literal; O Stack Exchange alteraria o programa de outra forma. Eu recomendo copiar o programa da caixa "entrada" do link TIO abaixo, se você quiser trabalhar nele.

Experimente-os online!

Atropelar

Este programa imprime 37 em C ++, 36 em Labyrinth, 35 em INTERCAL, 34 em Rail, 33 em Incident, 32 em Whirl, 31 em SNUSP modular, 30 em Whitespace, 29 em Trigger, 28 em Brain-Flak, 27 em Perl 6 , 26 em 05AB1E, 25 em Pip, 24 em Thutu, 23 em Hexagony, 22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng, 18 em Cardinal,17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission, 11 em Befunge-98, 10 em Befunge-93, 9 em Perl 5, 8 em Retina, 7 em Japt, 6 no SMBF, 5 no Python 2, 4 em> <>, 3 em Minkolang, 2 no V / Vim e 1 no Python 3.

Verificação

A maioria dos idiomas é testada pelo driver de teste mostrado acima. Você pode testar o Reng aqui e o SNUSP Modular aqui ; eles produzem 19 e 31 respectivamente, conforme necessário.

Adicionei outro formato à saída do driver de teste que escapa aspas duplas e substitui o feed de linha. É assim que eu posso alimentar a string de linha única para o programa ac (gcc) que envolvi a função criada por @feersum aqui . Espero que outras pessoas possam usá-lo como está.

Aqui está o programa de token de incidente . Idealmente, gostaria de delimitar os tokens, pois são um pouco difíceis de ler, indicar o token "central" e incluí-lo no driver de teste. Mas eu realmente não sei como fazer outra coisa senão fazer com que vários programas imprimam números inteiros seqüenciais, então isso é o máximo que eu consegui.

Tentei resolver os problemas óbvios de incidentes, como tokens após o início e o fim de tokens de salto e qualquer coisa que parecesse estranha, mas não equilibrei os tokens para colocar 0ono centro. Não tenho muita certeza de qual é a lógica exata para determinar o centro. Espero que @ ais523 ajude lá. Essa sequência próxima ao final 7LEintndus({})!<>+seria todos os tokens, se não fosse essa quarta inclusão no código. Todos eles podem ser removidos (e substituídos por um .para alinhamento Hexagony) para ajustar o token central.

Vou atualizar esta postagem regularmente nos próximos dias para percorrer o código (supondo que o Incidente possa ser verificado / corrigido sem passar pela contagem de bytes). Mas agora é super tarde, e eu queria muito divulgá-lo antes de resolver outro problema semelhante ao labirinto. : P

Explicação

Como o código C ++ funciona.

Eu acho que a maioria das pessoas está familiarizada o suficiente com C ++, então não vou entrar em muitos detalhes. Os comentários do bloco vêm na forma de /* comment */. Os comentários da linha vêm na forma de //comment. O código real utilizado pelo C ++ para produzir a resposta é int main() {std::cout<<37;}. E a biblioteca usada para fazer interface com o STDOUT é referenciada por esta declaração #include<iostream>.

/ * Abuso de comentários * /

Para mim, a história do C ++ remonta à minha resposta Brain-Flak.

Depois de finalmente encontrar o número 28, propus-me a estudar alguns outros poliglotas publicados no PPCG e tudo o que estudou me levou a algumas respostas fáceis (a maioria delas ainda está disponível para ser encontrada se mais alguém for tão inclinado). Mais importante, porém, cheguei a uma conclusão sobre os poliglotas em geral: os poliglotas grandes tendem a se enquadrar em uma de duas grandes categorias:# abuso de /*comentário ou abuso de comentário.

De qualquer maneira, isso não é um fato ou restrição, mas uma estrutura mental pessoal que guiou minhas próximas respostas.

A partir daqui, concluí que, se este se tornasse o maior poliglota do mundo, o que presumo que seja atualmente, seria melhor aproveitar os comentários abusivos de ambas as famílias. Então, decidi encontrar uma maneira de incorporar um/* linguagem de comentários e empurrar para a família C devido principalmente a uma familiaridade pessoal.

Teste inicial de C ++

Meu processo inicial de pensamento para isso foi usar o C # principalmente por causa de minha familiaridade e o primeiro obstáculo para o C # foi colocar o poliglota em um estado em que pudesse aceitar uma linha que não começou #sem ser tratado como código pelas linguagens de script . A resposta do Rail, juntamente com várias respostas de aumento de bytes que levaram a ela, resolveram esse problema.

Em seguida, surgiu o problema de como iniciar o primeiro /*bloco de comentários. Eu sabia que a linha teria que iniciar a linha com a #para permanecer invisível para Perl, Ruby e Python, mas o que quer que viesse antes /*dela seria lido por C #. Tentei uma #regiontag C # no começo, mas isso acabou sendo muito ridículo para as linguagens 2D. Digite C ++.

O C ++ possui várias diretivas de pré-processador, todas #elas iniciadas , que oferecem muitas opções para as linguagens 2D percorrerem. Porém, todos eles eram incompatíveis com pelo menos uma linguagem e, estando em um espaço de código exposto em C ++, eu tinha soluções alternativas limitadas. Por frustração e desespero, deparei-me com o fato de que o C ++ simplesmente aceitaria apenas um #antes do bloco de comentários. Tudo bem, isso é viável. Então, segui em frente com a presunção de que #/*poderia funcionar como os três primeiros caracteres da poliglota.

A segunda parte da verificação básica foi garantir que a declaração de impressão real pudesse viver feliz com os outros códigos. Eu sabia pela resposta do Brain-Flak que Japt não gostava de caracteres não escapados {e isso era necessário para o C ++ dizer int main() {std::cout<<37;}e o C ++ não permitiria o caractere de escape do Japt no meio de seu código. Dessa vez, tive a sorte de descobrir que, se eu abandonasse a cadeia literal de Japt apenas por essa afirmação, Japt ainda produziria felizmente o mesmo resultado.

Enquanto isso, a Brain-Flak também não gostou {}, mas tive novamente a sorte de descobrir que o C ++ estava ok com #as declarações entre, int main()e entre {std::cout<<37;}, permitindo que as chaves sejam comentadas da perspectiva da Brain-Flak.

Portanto, com os principais problemas do C ++ provados como teoricamente solucionáveis, iniciei o árduo processo de resolver todos os erros que havia introduzido.

Paisagem 2D

A parte mais difícil dessa resposta foi de longe a reconfiguração das duas principais linhas do poliglota. E o problema mais significativo foi o *. A subcarga não permitirá a *anterior a (. Ele considera isso como operação matemática em uma pilha vazia, o que parece ser um erro. Portanto, o poliglota exigia um (antes do /*C ++, mas não podia permitir isso. Portanto, a solução foi para nós um comentário da linha C ++ //na primeira linha para ocultar um (e, em seguida, iniciar a segunda linha com a #/*.

Em seguida, Befunge realmente não gostou da ideia de um /sem que algo estivesse sendo dividido, mas depois de estudar a resposta existente do Begunge, 16/"<"6/b.q@eu me deparei com a idéia de um número e uma corda quebrada antes do //. Funcionou e eu não tenho idéia do porquê do C ++ estar bem com isso, mas ele aceita # 1"16" 2como é a declaração de abertura. Não vou questionar, mas sei que os espaços são necessários para que funcione.

Linha Um

Japt mostrou-se bastante sensível ao espaço e realmente não queria inserir sua string baseada em backtick na linha superior, então ela e o backtick de Pip foram movidos para a segunda linha, forçando muita ginástica linguística na linha 1.

  • Pip não gostou da maior parte da linha 1, então um segundo espaço foi colocado após o primeiro #para indicar um comentário.
  • O (Underload teve que ser escapado de Japt com um precedente \.
  • #é um terminador de salto em Turtlèd, pelo que foi necessário, mas Pyth considera isso um loop de terminação de erro; portanto, Pyth precisava de uma divisão por nulo / após o#
  • Não sei mais o que a @primeira linha está fazendo, mas Pyth e Japt parecem gostar mais de sua presença do que não, embora @não seja um personagem significativo, de acordo com a documentação de Pyth.
  • E parece que o primeiro ;pode ser removido neste momento sem consequências, então não tenho mais certeza do que estava sendo resolvido lá, embora eu suspeite que tenha sido relacionado a Pyth. Mas parece que soluções futuras podem salvar um byte, omitindo-o.
  • <> <e Turtlèd funcionam basicamente da mesma maneira que antes, com <> <refletindo no primeiro #e envolvendo o final da linha um. E Turtlèd pula #como eu mencionei e termina com a "14"corda que imprime.

Roteamento 2D

Com esses problemas resolvidos, a próxima fase foi rotear as linguagens 2D. Anteriormente, a inicial vfoi ignorada pelos Befunges devido ao anterior #, mas enviou Haystack e Minkolang para baixo. Agora, o espaço inicial tenta enviar Minkolang ao longo da 3ª dimensão, à qual sua documentação se refere como dimensão do tempo.

Deixando de lado a terceira dimensão de Minolang: para mim, é um pouco impróprio chamar isso de dimensão do tempo, realmente parece mais espacial do que temporal para mim. Eu realmente não entendi até encontrar esse link que ilustra o conceito, e parece mais as várias camadas de um tabuleiro de xadrez 3D. Minha crença é que é assim que as linguagens 3D geralmente operam. Mas como esse era um novo conceito para mim, pensei em lançar essa informação para outras pessoas.

Assim, várias camadas de Minkolang são delimitadas por linhas que terminam em $$$que eu joguei para o final do código Rail aqui: #-3o4o#$$$. Agora, Minkolang atinge o espaço e cai para o primeiro >lugar <>3N.<> ␉//e prossegue para a saída 3. correta. #>Não foi permitido iniciar esta linha porque tentaria terminar um bloco de comentário Perl6, então <é usado em vez de #equilibrar SMBF e Brain -Flak. No entanto, este é um procedimento de troca de pilha do Brain-Flak, portanto, um segundo conjunto <>é usado após o término do Minkolang para retornar à resposta correta do Brain-Flak.

Labrynth esbarra de maneira semelhante no espaço, mas faz Labrynth se mover para baixo na coluna 1. Em seguida, vira a linha 2, onde desce até as 3batidas em outra parede, fazendo com que vire para o sul novamente e bata em uma ;que faz com que as 3 sejam estouradas. . Em seguida, o programa continua à direita, onde 36 é armazenado e impresso, antes de finalmente encontrar uma @saída. Esse caminho é mais longo do que o necessário, mas descobri que o Prelude produziria um nul byte antes da saída normal de 20 se !estivesse mais à esquerda do que está agora, independentemente da linha em que aparece. Então eu fiz isso mais correto, porque eu tinha espaço para fazê-lo.

Em seguida, o roteamento do Haystack foi alterado porque /agora vem antes vda linha 1 e reflete seu caminho como Reng. Felizmente, Reng coabita bastante pacificamente. O único problema foi que a agulha do Haystack |era um refletor em Reng, então um Reng usa um salto tipo Befunge ( #) sobre a agulha para concluir Reng corretamente.

Os Befunges continuam ao longo da linha 1 até a ve são direcionados para baixo e depois para a direita na segunda linha para concluir com o mesmo código usado anteriormente. Meu senso é que essa peça pode ser um pouco mais achatada agora que menos idiomas estão tentando atravessar o código de maneira significativa, mas eu não precisava de mais paredes para bater com a cabeça, então deixei como está.

Finalmente, o ponto de partida do Cardinal é %que não havia necessidade específica de ser agrupado nas duas primeiras linhas já densas. Então eu mudei para a string do Python. Seus múltiplos caminhos de código também são agora delimitados por x's, o que termina o movimento de seu ponteiro.

Linha 2 e 3

A única mudança significativa aqui é que todos os :jogadores foram eliminados por um motivo ou outro. Talvez as (necessidades do Prelude ou talvez tenham sido simples problemas de contagem de bytes - provavelmente os dois. A outra coisa é que o código de salto do gatilho foi movido para trás e renomeado como auaaZ. Eu tinha espaço para preencher para encontrar o caminho do código da Befunge e isso parecia melhor. Além disso, a <seguir esta parte é para equilibrar as seguintes SMBF >. Por fim, o único próximo ao final da segunda linha deve manter a sequência do 05AB1E. Além disso, yyna linha 3 são apenas caracteres de preenchimento para Labyrinth.

The Big String Esolangs

Com as duas linhas principais resolvidas, era hora de começar a investigar os esolangs de análise mais completa, e Pip acabou tendo um problema. Se você se lembra, lidamos com as chaves, {std::cout<<37;}removendo a string Japt para permitir que Japt trate isso como código. Bem, o Pip está usando a mesma sintaxe de string e não gostou dessa linha do código, e o Pip tem opções de declaração de string muito semelhantes ao Japt. Ambos usam um único 'para declarar uma sequência de um caractere, ambos usam a mesma declaração de escape de \e ambos aceitarão "como identificadores de sequência. Por isso, foi difícil fazer Pip acreditar que essa era uma string sem fazer Japt acreditar no mesmo.

No entanto, Japt teve uma diferença explorável - #leva o valor ascii do próximo personagem. Portanto, #"`finalizará a sequência Japt / pip e diga ao Japt para pegar o valor asci de ", enquanto diz ao Pip para iniciar uma nova sequência. O "provavelmente poderia ter sido uma crase em vez disso, e provavelmente teria sido melhor, mas a minha linha de pensamento era usar um identificador de cadeia diferente no interior como outro ponto de manipulação de cadeia. Então, aqui está outro lugar onde você pode salvar alguns bytes no caminho.

Em seguida, tive que iniciar a sequência Japt após o uso de chaves, enquanto deixava Pip permanecer em uma sequência. Fiz isso com '"`aspas simples, duplas e backtick. Para Japt, 'não está em uma sequência e, portanto, é um indicador para usar o próximo caractere como uma única sequência de caracteres. Pip vê 'como parte da string e termina sua string com o ". E, finalmente, `indica tanto a Pip quanto a Japt que está iniciando outra sequência que continua por toda a poliglota até a última linha em que os dois idiomas são concluídos com alegria.

Agora, Japt e Pip trabalharam nesse momento, mas 05AB1E falhou devido ao uso de "causou algum erro ao induzir a exposição do código. Felizmente, este foi fácil de resolver, colocando outro conjunto "ao redor da coisa toda, deixando o conjunto de manipulações de cordas como "`#"\\'*/{std::cout<<37;}/*'"`".

Finalmente, com a linha agora parecida com esta, com a int main() #/*"`#"\'*/{std::cout<<37;}/*'"`"qual o Underload teve um problema. Os consecutivos *foram outro erro de sintaxe, então eu joguei um ()no meio deles *para apaziguar.

Os Esolangs frágeis

O grande obstáculo agora era o espaço em branco. Não vou entrar em muitos detalhes aqui, porque a maior parte da solução Whitespace está embutida nas explicações já fornecidas, e apenas encobri as instâncias em que o espaço em branco forçou algumas decisões. Eu estou olhando para você Labirinto. A grande mudança, porém, é que o código real para gerar a resposta do Whitespace está na linha 2-4, em vez de 1-3. Isso se deve principalmente à exposição do código de Japt na linha 1.

Thutu originalmente tinha problemas com o que tinha sido esta linha: int main() #/*()"`#"\'*/{std::cout<<37;}/*'"`". Então, introduzi um avanço de linha logo antes do primeiro #para ocultar todos os problemas por trás de um indicador de comentário e, em seguida, enviei um monte de rastros /em todos os lugares que estavam expostos ao código.

Nesse ponto, alinhei o Hexagony e encontrei um novo problema. O código no início, que começou a vida como # 1"16" 1fez o +in /+23!@já não limpar a pilha. Então, acabei de remover o +is e encontrei agora a saída 123. Isso foi fácil de corrigir, alterando a jogada de abertura para # 1"16" 2e jogando a peça de Hexagony até /3!@.

O Whirl teve algumas mudanças, mas era principalmente uma questão de garantir que o número certo de 1s principais aparecesse antes da linha de Incidentes de Giro. Embora o incidente tivesse um sinal particularmente difícil. Eu tinha exatamente 3 cópias de /*e */.

Inicialmente, eu queria apenas colocar *//*qualquer lugar antigo no código para criar uma quarta cópia de cada um, mas o Underload viu os consecutivos *novamente, o que foi um impedimento. Por fim, joguei um /no final desta linha int main() /*para terminar /*/, pensando que faria as fichas se sobreporem, mas só consegui criar 4 cópias de uma das duas fichas. Certo, certo. É assim que isso funciona. Oh, bem, eu vou jogar um similar /na final */para fazer um quarto lá. Depois disso, substituí um monte de no-ops de hexagonia por uma quarta cópia de vários tokens de incidentes nessa sequência na linha final 7LEintndus({})!<>+.

Conclusão

Ok, esse é todo o detalhe que tenho para este refatorador massivo. Prometo não ter muito o que escrever sobre a próxima vez. Na verdade, eu não tenho idéia se o C ++ é uma escolha boa ou ruim para esse poliglota, mas acho que ele abre algumas opções. Espero que isso leve a coisas boas.

Feliz codificação.


2
Parece que g++requer um .cpp, então eu adicionei isso à seção específica da extensão do arquivo. Então só tinha que usar run-wrapper.shpara lidar com isso. Vou editá-lo.
SnoringFrog

1
Eu quero adicionar brainfuck simbólico a isso, pois é uma adição fácil, mas os caracteres unicode causam pânico em python2 - _ -
SnoringFrog

1
@SnoringFrog Eu sinto o mesmo sobre emoji
Chance

1
Além disso, **não é um erro de sintaxe no Underload; apenas consome muita pilha, o que suponho que não estava disponível no momento (provavelmente porque você jogou fora os dois pontos). Você pode recarregar a pilha com grupos ou dois pontos entre parênteses antes ou entre eles, ou às vezes ocultar o código do Underload entre parênteses.

2
@ ais523 Nos primeiros dias de C, para economizar tempo nos casos em que era desnecessário, o pré-processador não era executado a menos que a primeira linha começasse com um #. Mas se você não deseja que sua primeira linha seja uma instrução de pré-processador, você precisaria, portanto, de uma maneira de iniciar a primeira linha com um # sem que ele realmente fizesse qualquer coisa, então você tinha a diretiva nula. Eu suspeito fortemente que a compatibilidade com o código que usou essa foi a justificativa para sua inclusão no padrão.
Muzer

34

3. Minkolang v0.15 (26 bytes)

#>>>>>>>>v
print(1)#>3N.i2

Este programa imprime 1 no Python 3, 2 no Vim e 3 no Minkolang v0.15

Espero não estragar as coisas introduzindo uma linguagem 2D

Experimente online!

Explicação

#                     stops program from moving through time (really does nothing)
 >>>>>>>>             I can't use a space because then the program will move through time
         v            go down
         >            go right
          3N.         Outputs 3 and end program
                      Anything afterward is ignored since program has ended

Vim de alguma forma ignora Minkolang, então isso é bom

E realmente não havia um problema com o Python, uma vez que ignora os comentários #

Próximo...

Para o próximo idioma, sugiro algo como> <>, pois #atua como um refletor (para que a direção mude para a esquerda e envolva até a direita), para que você possa adicionar código que possa ser ignorado por outros idiomas


16
"Avançar no tempo" wat?
TuxCrafting 06/12/19

5
@ TùxCräftîñg Minkolang tem 3 dimensões (2d = normal, a 3ª é o tempo). TBH, eu não entendo, ele apenas afirma que na explicação no link TIO
Vacas quack

@ mbomb007 Do que exatamente você está se referindo?
Vacas charlatão

1
@ TùxCräftîñg eu não acho que eu posso fazer isso
dkudriavtsev

1
@wat Hm isso me levou muito tempo para entender
TuxCrafting

34

5. Python 2 (35 bytes)

#3N.;n4
print('1'if 1/2else'5')
#i2

Este programa imprime 1 no Python 3, 2 no Vim, 3 no Minkolang v0.15, 4 em> <> e 5 no Python 2.

Experimente online beta!

No Python 2, 1/2 é 0, que é um valor falso, o que faz com que o Python imprima 5. No Python 3, 1/2 é 0,5, que é um valor verdadeiro, que faz o Python imprimir 1.


1
Posso confirmar que funciona em Minkolang
Vacas charlatão

1
print('1'if 1/2else'5')breaks no meu sistema sem um espaço entre 1/2 e outra
Tasos Papastylianou

Bem, ele funciona com as duas versões no TIO.
betseg

28

4.> <> (29 bytes)

#>>>>>>>>v;n4
print(1)#>3N.i2

Este programa imprime 1 no Python 3, 2 no Vim, 3 no Minkolang v0.15 e 4 em> <>

Experimente Online!

Código executado

#             - change direction to left
            4 - add 4 to stack
           n  - print as a number
          ;   - end the program

Mais uma linguagem 2D.

Não tem efeito no Minkolang, pois adiciona caracteres após a mudança de direção e é ignorado pelo Vim por algum motivo. #é um comentário em Python, portanto, nenhuma alteração também.


28

28. Brain-Flak , 280 bytes

#v`16/"<"6/b.q@"(::):::   (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and (9) or (13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'#@46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

␛ representa um caractere ESC literal, como de costume.

Este programa imprime 28 em Brain-Flak , 27 em Perl 6 , 26 em 05AB1E , 25 em Pip , 24 em Thutu , 23 em Hexagony , 22 em Underload , 21 em Nim , 20 em Prelude , 19 em Reng (testado aqui ), 18 em Cardinal , 17 em Julia , 16 em Pyth , 15 em Haystack , 14 em Turtlèd ,13 em Ruby , 12 em Fissão , 11 em Befunge-98 , 10 em Befunge-93 , 9 em Perl 5 , 8 em Retina , 7 em Japt , 6 em SMBF , 5 em Python 2 , 4 em> <> , 3 em Minkolang , 2 em Vim / V , 1 em Python 3

Primeiro, quero dizer que privilégio é poder contribuir para esse desafio. Eu só ouvi falar de código de golfe há algumas semanas e estou absolutamente viciado desde então. A primeira coisa que fiz quando encontrei esse desafio foi tentar executar o código como está em vários idiomas apenas para ver se encontrava algo com o qual pudesse trabalhar. Isso foi quando estávamos no # 6. Sinceramente, achei que esse desafio era impossível, mas aqui estamos (# 28 Uau!). O que eu descobri na época foi que o Brain-Flak produziu o valor 2. Então decidi aprender.

O Brain-Flak acabou sendo ótimo para esse tipo de desafio, porque é bastante fácil de aprender e ignora praticamente qualquer personagem, exceto (){}[]<>. #também acontece comentar qualquer coisa depois na mesma linha, então a única parte da última submissão que já foi considerada para o Brain-Flak foi a print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)que então foi emparelhada ((())()<<>>). Então, o plano passou a adicionar parênteses supérfluos ao que eu passei a pensar como código python.

Modifiquei os bits python para analisar no Brain-Flak, o ((() () ())()()<<()>>)que equivale a 2 pilhas, sendo a primeira 5 e a segunda sendo 3. Depois disso, eu quadradas as 5 com ({({})({}[()])}{})e adicionando o resultado a 3 com ({}{}). Esse quadrado e adição está ocorrendo em uma string da perspectiva do Python. Não posso pretender entender o raciocínio do Python aqui, mas estou bastante confiante de que essa sequência não será avaliada por outras linguagens de maneira significativa, com apenas algumas exceções.

Acontece que Japt interpreta chaves dentro de uma string como contendo código, mas elas foram fáceis o suficiente para escapar \antes de cada uma {nessa string. Mas isso aumentou a contagem de bytes. Como a vida.

Prelúdio foi bastante perdoador com todos os meus parênteses. Um comentário anterior apontou que o Prelude se encaixaria com as partes alinhadas verticalmente e, por acaso, criei apenas uma. Doce! O (na linha superior alinhado com e (9na linha grande. Então eu tive que adicionar um espaço adicional antes do (na linha superior. Minha suposição aqui é que o espaço duplo era um indicador de comentário para alguma coisa; portanto, adicionar um espaço adicional parecia trivial e funcionou. Devo salientar que tentei adicionar espaços adicionais no (9)lugar, mas o Cardinal não cooperou.

05AB1E não gostou da minha primeira tentativa de encapsular a string Python entre aspas duplas, mas todos pareciam concordar em usar aspas simples. Não é grande coisa lá.

Hexagony era o único idioma que restava neste momento, e eu estava obviamente muito além do próximo limite de tamanho hexadecimal, então era hora de sujar. O /^23!@código é o Hexagony e estou super empolgado com isso, porque acho que facilitará muito as adições futuras. Este pequeno pedaço pode basicamente ser movido para qualquer lugar da string python sem interromper nenhum código. Esta é a sequência completa, para que todos nós estamos na mesma página '(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'. O /aqui define o caminho do Hexagony de SE -> NW para W-> E nessa sequência, com a qual temos muita margem de manobra. (O anterior\ é escapar/para thutu BTW). Minha idéia aqui é que, se você fizer alterações, as chances são de que você acabe passando por essa sequência em algum momento e poderá deslizar a parte do Hexagony ao longo da sequência para pegar o caminho do código e enviá-lo para a conclusão correta. Apenas tome cuidado para não ficar entre Japt \e {. Se você tiver problemas com isso, o @lado direito da string é deixado de outra solução Hexagony e pode ser removido sem conseqüência para os outros idiomas. E, claro, se você pegar o caminho de código do Hexagony na direção oposta, é claro que você pode usar em @!32^\vez de /^23!@. Além disso, você pode perceber que minha solução removeu o===2do código para manter as coisas abaixo do limite de bytes. Alguém mencionou aqui que isso era para o alinhamento da Hexagony e eu não precisava mais disso.

Por fim, aqui está um pequeno pedaço de código que eu encontrei enquanto explorava o codegolf que converte uma linha de texto em um hexágono legível em Hexagony para que você possa depurar. Tenho certeza que muitas pessoas sabem sobre isso, mas eu não o vi postado aqui, por isso pode ajudar outra pessoa também. Aviso justo, você precisa alterar a entrada para remover os backticks e os retornos de carro, bem como trocar a fuga literal por algo que ocupa uma quantidade normal de espaço para que o código alinhe as coisas em um bonito hexágono.

PS Enquanto escrevia isso, percebi que tinha um erro. Eu acreditava que estava limpando a borda da memória do Hexagony com o ^, mas aparentemente posso substituí-lo por um não operacional ou sem conseqüência. Isso ^provavelmente deve ser um +se você tentar manipular essa seção. Aparentemente, eu estava passando por isso +antes, mas futuros poliglotadores podem não ter tanta sorte.

Boa sorte!


Eu estava esperando o resumo e a explicação antes de votar, mas o resumo parece bom, então vou votar enquanto aguarda a explicação :-). Presumo que todas as barras invertidas extras sejam para evitar um erro de sintaxe no Thutu? Além disso, uma abordagem interessante para onde você adicionou seu código, o que eu acho que tem algo a ver com o Hexagony. Vai ser bom ver a explicação completa. (Além disso, seja bem-vindo ao PPCG!))

E agora eu vejo a explicação; Eu gostei de ler. O "código Python" é realmente usado por várias linguagens de script (Python, Perl 5, Ruby), mas todos eles interpretam ande orda mesma forma, para que o seu método de comentar o código nas linguagens de script, mas não Brain-Flak acontece para trabalhar em todos eles.

1
Obrigado @ ais523. Você mencionou a localização do meu código. Então, eu sabia que tinha que colocar os operadores de ataques cerebrais em algum lugar visível para as linguagens de script e minha suposição inicial, incorreta, era de que seria mais fácil em uma nova linha. Isso não funcionou para o Retina e eu não queria lidar com ele e com os problemas de linguagem 2D que eu criaria tentando corrigir o Retina, se possível. Tive a sorte de encontrar o estágio atual.
Chance

2
Resposta fantástica e uma explicação muito completa! Estou realmente feliz em saber que você gosta de ataques cerebrais. : D
DJMcMayhem

25

38. C, 804 bytes

#  1"16" 3//v\(@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#
#*/␉
#define␉z  sizeof 'c'-1?"38":"37"
#include␉<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);;}/*'``
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/(3!@)"26

é uma guia literal, um caractere ESC literal; O Stack Exchange alteraria o programa de outra forma. Eu recomendo copiar o programa da caixa "entrada" do link TIO abaixo, se você quiser trabalhar nele.

Experimente-os online!

Atropelar

Este programa imprime 38 em C, 37 em C ++, 36 em Labirinto, 35 em INTERCAL, 34 em trilho, 33 em incidente, 32 em turbilhão, 31 em SNUSP modular, 30 em espaço em branco, 29 em gatilho, 28 em cérebro-flak, 27 em Perl 6, 26 em 05AB1E, 25 em Pip, 24 em Thutu, 23 em Hexagony, 22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng, 18em Cardinal, em Python 3.17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission, 11 em Befunge-98, 10 em Befunge-93, 9 em Perl 5, 8 em Retina, 7 em Japt, 6 no SMBF, 5 no Python 2, 4 em> <>, 3 em Minkolang, 2 em V / Vim e 1

Verificação

A maioria dos idiomas é testada pelo driver de teste mostrado acima. Você pode testar o Reng aqui e o SNUSP Modular aqui ; eles produzem 19 e 31 respectivamente, conforme necessário.

Aqui está minha versão ligeiramente aprimorada do tokeniser de incidente , projetada para ser um pouco menos eficiente, mas um pouco mais útil.

Explicação

Eu sempre amei fazer pequenos poliglotas, mas nunca um tão grande quanto isso; Eu pensei que provavelmente deveria tentar!

Após a maravilhosa resposta em C ++ do @ Chance, C parecia a próxima opção lógica e, dada (em comparação com algumas respostas anteriores) a relativa facilidade de adicioná-lo, decidi ir em frente quando tivesse a chance!

Eu usei um truque muito conhecido para dizer a diferença entre C e C ++; o tamanho de uma constante de caractere é de 1 byte em C ++, mas o tamanho de um int (garantido que seja pelo menos 16 bits) em C. Esse código deve ser muito portátil (exceto talvez para sistemas que usam bytes com bits suficientes para ajustar um int), a menos que Eu cometi um erro estúpido.

Eu tentei primeiro fazer um printf com tudo em linha, mas os vários colchetes pareciam estar causando problemas para o Japt, então tornei a linha mais simples, que parecia corrigi-la.

Em seguida, o Cardeal não gostou, adivinhei por causa da % printf, então tive que resolvê-lo, passando a manipular as cordas.

Minha próxima tentativa, tentando atribuir uma string e depois alterar o segundo byte contingente no comportamento C, acabou muito tempo e teria empurrado o Hexagony para o próximo tamanho; Eu queria evitar refazer isso, mantendo-o dentro dos personagens extras que eu tinha que brincar! Como precisava de todos os bytes que consegui para isso, implementei as alterações de economia de bytes sugeridas pelo @Chance.

Então, joguei um pouco mais o código C e descobri puts(sizeof'c'-1?"38":"37");que quase funcionava, exceto que o Underload estava em falha de segundo, provavelmente por causa da expressão complexa entre parênteses.

Mesmo depois de remover o extra >>que era necessário para combinar com o <<Perl6, eu não conseguia uma maneira concisa o suficiente para dividir a parte mais complexa dele em uma atribuição de matriz de caracteres. Então, acabei olhando para usar o pré-processador.

Depois de muitas tentativas e erros, encontrei uma solução que parecia Retina. O prelúdio, que estava me causando problemas de vez em quando, acabou se consertando antes que eu voltasse a analisar por que estava quebrando (acho que os suportes ou! eu tinha no ternário em um estágio, olhando para respostas anteriores).

Durante todo o tempo eu estava remendando o espaço em branco para obter algo que o Whitespace gostaria; Achei isso bastante fácil. Especificamente, tab space space spacefoi uma combinação muito útil (a instrução para adicionar os dois itens principais na pilha), pois significava que eu poderia adicionar espaço em branco às linhas sem outro espaço em branco sem que tudo estivesse fora de sincronia (acho que sua posição na programa significa que ele nunca é realmente executado, então não estou preocupado com o fluxo insuficiente de pilhas aqui).

Agora testei o incidente e funciona! Muito obrigado a @Chance e @LliwTelracs, que acabei de perceber que NÃO é um nome galês, por me ajudarem a entender o problema. Veja este destaque de sintaxe . Eu removi o ;token que estava aparecendo antes do #yytoken. Eu fiz isso simplesmente adicionando um extra ;após a getsdeclaração (minha tentativa anterior envolveu a substituição s(que agora aparece muito mais no programa C do que no anterior)) na string "disokenizing" com a ;, mas acabou que eu estava na verdade, um caractere abreviado de Hexagony (obrigado @ Chance); portanto, depois que as tentativas de adicionar um caractere extra a essa última linha falharam, eu apenas mudei de volta e adicionei o ponto e vírgula extra em outro lugar.

Também ajustei um pouco o espaço em branco para alterar alguns outros tokens para tentar centralizar, reconfigurar o avanço de linha da guia (movendo a guia no final da #includelinha para o meio, criando assim três tokens) e desmarque o token de espaço triplo movendo um espaço na definelinha.

Finalmente, um dia após o envio inicial, decidi chegar ao fundo do assustador aviso do pré-processador que o gcc produzia (e que fez Clang falhar). Eu determinei que a razão pela qual a primeira linha funcionou é porque é a saída do pré-processador que fornece informações de depuração, como nomes de arquivos originais e numeração de linhas. Eles não gostaram do primeiro "2" na primeira linha, porque isso significava "retornar de um arquivo incluído para o arquivo fornecido" e, obviamente, isso é impossível, pois não há arquivos incluídos. Depois de alterá-lo para "1" (iniciar o cabeçalho normal), sufocando muitos idiomas, mudei para "3" (inicie o cabeçalho do componente interno), que quebrou apenas o Hexagony, pois agora contava com o 2. Então, no início do código Hexagony, adicionei um colchete aberto(para diminuir o número de 3 para um 2 e, em seguida, fechar um parêntese )após o final ( @) do código hexagônico para satisfazer Retina, Prelude e Underload, que todos esperavam entre parênteses. O novo teste do Reng e do Modular SNUSP não produziu nenhum problema, e os tokens de incidente pareciam corretos, então agora eu o havia corrigido! Eu testei em uma variedade de arquiteturas exóticas e parece funcionar. Sei que não é importante para um código de golfe, e não me importarei se os futuros remetentes precisarem quebrá-lo novamente para manter uma contagem de bytes ou o que for (ou se alguém já começou com base nessa solução e não deseja alterar o deles) demais), mas há uma boa razão para eu ter feito isso - o compilador Objective-C do TIO suporta apenas o Clang, então isso será muito útil se alguém quiser adicionar isso!

Lembre-se de que nunca usei a maioria desses idiomas. Espero que meu sucesso incentive mais novatos a experimentá-lo!


@LliwTelracs Huh, o programa C vinculado por Chance em sua resposta teve uma saída diferente para a lista de tokens:; ^ _ ^ _
Muzer

O erro foi que eu estava cópia colando o valor para o meu programa para que ele não conseguia reconhecer as abas ou escapa
fənɛtɪk

@LliwTelracs Apenas tentando descobrir a tokenização, parece que agora tenho um ponto e vírgula aparecendo três vezes. Eu poderia adicionar um extra, exceto que não acho que posso poupar o byte, pois isso desalinha o Hexagony. Hmm ...
Muzer

1
Trabalhos de incidentes!
#

1
@Chance Acabei de ver como essa primeira linha é válida no pré-processador C, parece que é a saída do pré-processador usada para informações de depuração etc. Isso significa "agora retornando (2) ao arquivo com o nome" 16 " linha 1". Eu acho que é o 2 que faz Clang engasgar (e o gcc avisa), pois ele nunca entrou em nenhum arquivo, então não há nada do que retornar. Quando tiver a chance, posso experimentar alterá-lo para outra coisa para compilá-lo no Clang também. Veja gcc.gnu.org/onlinedocs/cpp/…
Muzer

25

65. ALGOL 68 (Genie) , 1634 bytes

#16  "(}+?23!@)-("//*\Dv;'[af2.q]PkPPX'#CO)"14";n4
#/*0|7//```"`   [-'][!(>77*,;68*,@;'1,@10␉␉11)(22)S␉␉(1 P''53'S^'q
#>␉
# 36!@␉`
#
#_>++++.>.}+?
#`<`
#<]}} +<[<.>>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++59L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52DO,2SUB#2<-#32DOREADOUT,2PLEASEGIVEUPFACiiipsddsd4O6O@oh]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\).>]|
#[#[(?2?20l0v0x1k1kMoOMoOMoOMoOMOO0l0ix0jor0h0h1d111x0eU0yx0y0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_00)
[ "]56p26q[puts 59][exit]" ,'\[' ];#/s\\/;print"24";exit}}__DATA__/
#
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.

#
'(((p\';a=a;case $argv[1]+${a:u} in *1*)echo 50;;*A)echo 54;;*)echo 58;;esac;exit;';print((eval("1\x2f2")and 9or 13)-(0and 4)^1<<(65)>>62)or"'x"or'{}{}{}{}({}<(((((()()())){}{})){}{})>){(<{}(({}){})>)}{}({}())wWWWwWWWWwvwWWwWWWwvwWWWwWWWWWWWWwWWWWwWWWWWWWwWWWWWWWW li ha '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("'3)3)3)"'
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39
""""
=begin
<>{nd
#sseeeemPaeueewuuweeeeeeeeeeCis:ajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( ){puts(p);}/*
print 61
#}
disp 49;
#{
}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.s
=end
"""#"
#}
#s|o51~nJ;#:p'34'3\=#print (17)#>27.say#]#print(47)#]#echo 21# xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi ax fwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWwvwWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm 
# sss8␛dggi2␛`|$// ''25  16*///~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#

Pontuação VIP ( Impressora Inteira Versátil ): .005949 (para melhorar, a próxima entrada deve ter no máximo 1710 bytes)

Experimente online!

Atropelar

Este programa imprime 65 em ALGOL 68, 64 em Agony, 63 em Brian & Chuck, 62 em Grass, 61 em SILOS, 60 em Moorhens 2.0, 59 em Tcl, 58 em Ksh, 57 em Wise, 56 em dc, 55 em Brain -Flak Classic, 54 em Zsh, 53 em Shove, 52 em COW, 51 em Assembly, 50 em Bash, 49 em Octave, 48 em Deadfish ~, 47 em Lily, 46 em Lily, 46 em Cubix, 45em PicoLisp, 44 em Pip,em alphuck, 43 em reticular, 42 em evil, 41 em brainfuck, 40 em 2D-mínimo, 39 em CoffeeScript, 38 em C, 37 em C ++, 36 em Labyrinth, 35 em INTERCAL, 34 em Rail, 33 em Incident, 32 em Whirl, 31 em SNUSP modular, 30 em Whitespace, 29 em Trigger, 28 em Brain-Flak, 27 em Perl 6, 26 em 05AB1E, 25 24 em Thutu, 23 em Hexagony, em> <>, 3 em Minkolang,22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng, 18 em Cardinal, 17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission, 11 em Befunge-98, 10 em Befunge-93, 9 em Perl 5, 8 em Retina, 7 em Japt, 6 em SMBF, 5 em Python 2, 4 2 em V / Vim e 1 em Python 3.

Verificação

A maioria dos idiomas pode ser testada com o driver de teste acima, mas 6 idiomas precisam ser testados localmente.

  • Reng pode ser testado para produzir 19 aqui .

  • O SNUSP modular pode ser testado para gerar 31 aqui .

  • O incidente foi verificado para testar 33 por meio do balanceamento manual de tokens.

  • O Deadfish ~ pode ser testado para gerar 48 localmente, usando este intérprete . Observe que o Deadfish leva o poliglota a ser alimentado com stdin, mas imprime várias >>solicitações na saída padrão, que são uma conseqüência inevitável da execução de qualquer programa do Deadfish.

  • Moorhens 2.0 pode ser testado para gerar 60 usando esse intérprete .

ALGOL 68

ALGOL é provavelmente a menos conhecida das quatro linguagens de programação de alto nível desde os primeiros dias da programação - as linguagens restantes dessa distinção nebulosa são COBOL, FORTRAN e Lisp. A ALGOL era mais conhecida nos círculos acadêmicos e matemáticos da época, mas hoje é mais conhecida por sua enorme influência nas línguas modernas. De fato, a maioria das linguagens práticas e modernas pode ser descrita como "semelhante ao Algol", e a menos importante é C, que, é claro, tem sua própria linhagem de influências e derivados.

Estou muito empolgado por incluir a ALGOL, porque é outro importante passo na história da computação que adicionamos a esse monumento que chamamos de poliglota. Isso é legal.

ALGOL68 é a mais recente das três principais especificações da ALGOL, as outras sendo ALGOL60 e ALGOL58. Curiosamente, a especificação não possui uma sintaxe fixa, o que significa que os tokens estão definidos, mas não a grafia. Isso torna o idioma altamente dependente do intérprete, pois qualquer intérprete pode usar um símbolo diferente para iniciar um bloco de comentários, por exemplo. A especificação descreve o ¢início de um bloco de comentários. Mas como ¢não está entre os códigos ASCII básicos, é compreensível que não seja muito útil como indicador de comentários entre os intérpretes disponíveis. Bem, acontece que o intérprete Genie escreve ¢como #, que é toda a abertura que precisamos para passar pelo personagem 1 e criar um poliglota.

Na verdade, o Genie tem três opções de sintaxe para comentários, sendo as outras duas coe comment, ambas especificadas como escritas em negrito. Sim, ousado. Se usarmos itálico, bem, isso é uma variável. Genie resolveu isso para nós novamente soletrando negrito em todas as letras maiúsculas. E como COnão está na poliglota em nenhum lugar, temos um método fácil de ocultar a poliglota do analisador. Se mais adiante COfor necessário para um idioma, podemos mudar para a COMMENTsintaxe mais detalhada .

Não há comentários de linha no ALGOL - todos são estilo de bloco, o que significa que precisam ser finalizados. Dado o estado inicial da poliglota, nosso comentário do bloco ALGOL é aberto imediatamente e finalizado próximo ao final da linha 1 porque Turtlèd está usando similarmente #como um token de salto. Felizmente, Turtlèd não tem problemas para percorrer os caracteres Ce O, portanto, na linha 1, podemos inserirCO imediatamente após o segundo #para iniciar um comentário de bloco de gordura para ALGOL68.

A partir daqui, apenas temos que colocar em COprint("65")algum lugar. Eu escolhi a última linha porque preferi terminar a linha com outro #comentário e não queria que o comentário terminasse no #início da última linha. Portanto, seguimos nossa declaração de impressão ALGOL com #se a #como o último caractere na poliglota. O sno #sé para alphuck para equilibrar o pna impressão.

Agradeço a @ ais523 por abrir o final da poliglota com a resposta 59 e tornar tudo isso possível.

SMBF

Adicionamos um caractere diferente ao final da poliglota para encerrar o comentário final da ALGOL, e o SMBF estava lendo anteriormente o último caractere para sua resposta. Para remediar isso, tive que alterar o SMBF para ler o penúltimo caractere, alterando esse código na linha 8 [.>-]para isso [<.>>-]. Este é um bloco de código privado SMBF, já que o MP do BF está em 0 quando o loop é iniciado.

Desencadear

Nesse ponto, notei algum comportamento estranho com o SMBF e isso tinha a ver com as relações entre esses segmentos de código e o final da poliglota.

• Destino do salto do incidente: ^_^_

• Destino do salto do gatilho mais resposta: X222999

• Resposta de ALGOL68: COprint("65")#s

A resposta da ALGOL simbolizou alguns tokens de incidente em seu segmento de código, portanto, o código da ALGOL teve que ir antes do segmento de código do incidente. O ALGOL também causou um problema de alinhamento de prelúdio se fosse o primeiro na ordem e, portanto, o segundo ou o terceiro. Enquanto isso, o SMBF teve uma falha inexplicável quando o código do Incidente foi o último, então o Incidente teve que ir primeiro ou segundo. Bem, eu percebi que esse era um problema de lógica introdutória que parecia insolúvel, então decidi tornar o inexplicável mais ... maleável.

Depois de percorrer o SMBF, descobri que o problema de ter ^ _ ^ _ no final era devido ao Wise. O código do Wise ( ~-<~-<~-<<<~-) não está oculto atrás de um loop não executável, ao contrário da maioria dos poliglotas. Mas não há códigos de impressão SMBF envolvidos no código do Wise. Estava apenas mudando os valores da memória. Parecia inócuo. Então qual era o problema então? Era aquele maldito SM em frente ao namorado.

O código do Wise está alterando os caracteres no código a ser executado, e você consegue adivinhar qual é o valor ASCII vizinho ^? É ]. Wise estava colocando um terminador de loop SMBF no final da poliglota, fazendo com que o SMBF caísse em um loop infinito. Isso é péssimo.

Depois de algum pensei que tomou a solução 0 byte para o problema e separados destino do salto do Gatilho ( X) de sua resposta ( 222999) e terminou o poliglota assim: ~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#. Isso funciona apenas porque nenhum caractere aparece consecutivamente após o salto do gatilho, que não é a resposta do gatilho.

Empacotando

Essas são as principais mudanças nesta rodada. Fiz uma pequena alteração para reduzir o muito discutido cna linha 1, mas é o caso das mudanças puramente no golfe.

Boa sorte!

Relatório de incidente

#<q>"3"O.stornou-se #<T>"3"O.sporque desdemonstrar em Tvez de qera mais eficiente em equilibrar

<>{tornou <>{nd- se a desencontrar nde{␊

Coloque um espaço entre }}e +dentro #<]}} +<[<.>>-]>[para desmontar }}+mais barato.


25

2. V (11 bytes)

print(1)#i2

Este programa imprime 1 em Python 3 e 2 em V.

Só para fazer a bola rolar e jogar meu idioma favorito no começo. :)

É uma resposta muito direta.

print(1)#

por acaso é um NOP em V. (sorte minha) Então i2entra no modo de inserção e insere um '2'. Você pode experimentar o V online aqui

Claro, em python

print(1)

imprime '1' e

#i2

é um comentário.


2
Isso é V ou Vim? O intérprete ao qual você está vinculado é tecnicamente "V".
mbomb007

@ mbomb007 Bem, V é quase totalmente compatível com versões anteriores, então a intenção era vim. Suponho que tecnicamente seja V, no entanto. É tarde demais para mudar?
DJMcMayhem

2
Na verdade não, basta editar o título nas respostas.
Mbomb007

1
@ mbomb007 Um caractere ESC literal fará isso (é por isso que eu tive que usar um na minha submissão).

1
Nota para aqueles que testam isso: Você precisa garantir que não tenha um painel de controle transferido da sessão anterior do Vim.
Riking

24

20. prelúdio, 167 bytes

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^*ttt*~++%
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);#35(99999+++++!) =#;print(17)
#       ~nJ<
#
#gg99ddi2` |1|1+6

Caracteres ESC literais no mesmo local dos envios anteriores (entre #e ge entre 2e `e na última linha), porque você não pode tirar o Vim do modo de inserção com caracteres imprimíveis.

Este programa imprime 20 em Prelude , 19 em Reng (testável aqui ), 18 em Cardinal , 17 em Julia , 16 em Pyth , 15 em Haystack , 14 em Turtlèd , 13 em Ruby , 12 em Fission , 11 em Befunge-98 , 10 em Befunge-93 , 9 em Perl , 8 em Retina , 7 em Japt , 6 em SMBF ,5 em Python 2 , 4 em> <> , 3 em Minkolang , 2 em Vim / V , 1 em Python 3 ea partridgeem A Pear Tree .

O código existente praticamente se cancela no Prelude, consistindo apenas de loops while com argumentos falsey e alguma manipulação de pilha em pilhas com as quais não nos importamos. Melhor ainda, há um ponto no código que é um comentário em todos os idiomas que os possuem (entre o #e =#o envio anterior). A parte difícil de encaixar o Prelude nisso foi gerar números com apenas uma pilha e sem aumentar a contagem de bytes. Este programa usa um loop que adiciona 45 a cada elemento da pilha e o gera como ASCII, colocando um 5 acima de um 3 na pilha e obtemos 20como saída. (Em ordem alfabética, 20 é um número mais fácil de produzir do que 19 no Prelude, portanto, a resposta 19 postada realmente me ajudou um pouco.)


O prelúdio deve ser bastante fácil de trabalhar em programas futuros. Alguns conselhos para quem pode causar problemas: não deixe os parênteses alinharem verticalmente; certifique-se de não permitir pontos de exclamação fora dos parênteses; e depois de inserir dígitos fora dos parênteses, não coloque mais parênteses mais à direita na mesma linha. A lacuna em que eu coloquei o programa Prelude ainda está aberta e parece que pode ser um lugar frutífero para outras linguagens 1D (o tipo 1½D do Prelude e atua mais como uma linguagem 1D neste programa).

Bom, me bater para o soco com Prelude :) Eu realmente acho ASCII-only V pode ser possível com :%ssubstituir, mas mesmo assim é um pouco complicado (e V é irritante para testar)
SP3000

Se você usar a :para iniciar um comando no vim, precisará de um retorno de carro, que também é imprimível. : /
Zwei

4
+10000000000 para a partridgeem A Pear Tree. Mas ele imprime 5 GOLDem RINGS?
immibis 12/12

23

30. Espaço em branco , 296 bytes

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999"26

␛ representa escapes literais.

␉ representa abas literais.

Este programa imprime 30 em espaço em branco , 29 em gatilho , 28 em Brain-Flak , 27 em Perl 6 , 26 em 05AB1E , 25 em Pip , 24 em Thutu , 23 em hexagony , 22 em Underload , 21 em Nim , 20 em Prelude , 19 em Reng (testado aqui ), 18 em Cardinal , 17 em Julia , 16 em Pyth , 15 em Haystack , 14 em Turtlèd , 13 em Ruby , 12 em Fission , 11 em Befunge-98 , 10 em Befunge-93 , 9 em Perl 5 , 8 em Retina , 7 em Japt , 6 em SMBF , 5 em Python 2 , 4 em> <> , 3 em Minkolang , 2 em V / Vim e 1 em Python 3 .

Espaço em branco é outro esolang com um conjunto de caracteres limitado. Este lê apenas guias, espaços e feeds de linha.

Então, quando tiramos todas as coisas que o Whitespace não lê, ficamos com o seguinte código:

[space][space][space][LF]
[space][LF]
[LF]
[LF]
[LF]
[space][space][space][space][space][LF]
[space][space][space][space]

E o código para a saída 30 é este:

[space][space][space][tab][tab][tab][tab][space][LF]
[tab][LF]
[space][tab]

Portanto, as três principais linhas do código existente receberam espaços extras no final das linhas para atender aos requisitos. Observe que as guias da linha 1 e o espaço à direita estão no meio da linha para acomodar as necessidades de> <>.

O espaço da linha 2 foi alterado para uma guia aqui. Isso parece funcionar de forma idêntica a um espaço para as linguagens 2D, mas visualmente não se alinha mais. ¯ \ _ (ツ) _ / ¯

Após as instruções para a saída 30, o jogo ficou com o restante dos espaços e feeds de linha necessários para fazer coisas sem sentido e compilar corretamente.

O espaço em branco possui instruções que marcam / vão para um local de código com um rótulo que permite um número arbitrário de guias e espaços, o que ajudou a ocupar os espaços da linha longa. Também começa e termina com um avanço de linha, o que nos ajudou a aumentar alguns dos avanços de linha nas linhas 3-6.

A linha final não poderia ter um avanço de linha sem interromper a Retina, portanto, suas instruções são para fazer algumas matemáticas arbitrárias e manipulação de pilha.

Aqui está o código completo com espaços, tabulações e feeds de linha substituídos pela nossa notação:

#v`16/"<"6/b.q@"(:[Space]::T):[Space][Space][Tab][Tab][Tab][Tab][Space]:(22)S#;n4"14"[LF]
#>3N6@15o|>[Tab]^*ttt*~++~~~%[LF]
#=~nJ<R"12";[Space][Tab][LF]
#[[Tab][LF]
#`<`|[LF]
print((eval("1\x2f2")and[Space](9)or(13))-(0and[Space]4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo[Space]21#|/=1/24=x=90/[LF]
#8␛dggi2␛[Tab]`[Space]|1|6$//''25[Space][Space]#>say[Tab][Tab][Space]27#T222999"26[LF]

E aqui está uma versão comentada apenas do espaço em branco:

Push 30 onto the stack
[space][space][space][tab][tab][tab][tab][space][LF]

Output the number at the top of the stack
[tab][LF][space][tab] 

Jump to label null if the top of the stack is negative. (it's not)
[LF][Tab][LF]

Label this location as [Space]
[LF][Space][Space][Space][LF]

Add the top two items on the stack and replace them with the result. 
[Tab][Space][Space][Space]

Store the stack.
[Tab][Tab][Space]

Edições: o hexagony acaba pulando as guias como espaços, ao contrário da minha afirmação anterior. O @ ais523 teve a gentileza de atualizar o @ Hexagonizer do Kenney para dar conta de escapes e abas literais. Eu tive que modificá-lo para corrigir minha afirmação anterior sobre guias serem lidas como não-ops e substituir escapes literais por .porque o caractere é mais amplo que outros caracteres, tornando o hexadecimal ligeiramente desalinhado. Aqui o link .

E este é o nosso Hex atual corrigido:

          # v 1 6 / " < " 6 /
         b . q @ " ( : : : T )
        : : ( 2 2 ) S # ; n 4 "
       1 4 " # > 3 N 6 @ 1 5 o |
      > ^ * t t t * ~ + + ~ ~ ~ %
     # = ~ n J < R " 1 2 " ; # [ #
    < | p r i n t ( ( e v a l ( " 1
   \ x 2 f 2 " ) a n d ( 9 ) o r ( 1
  3 ) ) - ( 0 a n d 4 ) ^ ( 1 ) < < (
 6 5 ) > > 6 2 ) o r ' ( \ { ( \ { } )
  ( \ { \ / + 2 3 ! @ } [ ( ) ] ) } \
   { } ) ( \ { } \ { } ) ' # 4 6 ( 8
    + 9 + 9 + 9 + 9 + = ! ) = # p r
     i n t ( 1 7 ) # ] # e c h o 2
      1 # | / = 1 / 2 4 = x = 9 0
       / # 8 . d g g i 2 . | 1 |
        6 $ / / ' ' 2 5 # > s a
         y 2 7 # T 2 2 2 9 9 9
          " 2 6 . . . . . . .

Por fim, desenvolvi alguns caracteres desnecessários, principalmente adicionados anteriormente para alinhar parênteses Prelude e hexágonos Hexagony.

Código de Nim está de volta a echo 21partir deecho 5+5+11

Hexagony's #@46é agora#46

Código de Hexagony está de volta a /+23!@=partir de/+23!@

O alinhamento entre parênteses do Prelude (9) or (13)se tornou(9)and(13)

Bem, é tudo o que tenho. Boa sorte a todos!


1
Acho que consertei todos os links e adicionei ␛ em locais do espaço que resultaram das minhas pastas de cópias. Não tendo certeza de como obter guias no SE, o código no Tio deve ser ambíguo. Também tive que recriar minha solução a partir das instruções nesta resposta, mas de alguma forma acabei com 2 bits a menos ... Opa?
Chance

1
Acabei de notar um erro em sua explicação: o retorno de carro (ASCII 13) é um caractere diferente do avanço de linha (ASCII 10). A grande maioria dos idiomas (incluindo espaço em branco) se preocupa com os 10s, não os 13s (e presume-se que uma quebra de linha em um envio PPCG seja apenas um único ASCII 10, a menos que seja indicado de outra forma, porque os 13s tendem a aumentar sua contagem de bytes para não benefício).

1
Sua imagem de explicação hexagônica está incorreta ( impressae23 ) por causa do ;e ao aparecer NW após a primeira reflexão. O link acima funciona tho ...?
MildlyMilquetoast

1
Cheguei à conclusão de que o TIO para Hexagony trata os caracteres de tabulação como espaços / novas linhas. A imagem que você fornece do programa hexagônico não faz nada além de sair se você a seguir (ou colocar no TIO, substituindo as guias por .s). No entanto, copie o código na imagem no TIO, exceto remova os treinamentos .(não parte do código real) e todos os ␉s. Ele imprime 23.
MildlyMilquetoast 6/17/17

1
Uau, obrigado @MistahFiggins! Parece que cometi alguns erros dedutivos e os propaguei para minha explicação. Corrigi a explicação do Hexagony, o diagrama hexadecimal e o script Perag do Hexagonoizer, bem como cruzei o resultado diretamente com o Hexagony. Tudo deve estar bem agora. Boa localização!
Chance

23

100. brainbool, 2953 bytes

#16  "?63(o?23!*# #@"/*\DZZCv;'[af2.q]PkPPX)\('#CO"14"; */
#/*0|7//```"`  [>.>.])[-'][(>77*;,68*,@,1',;# l1011)(22)S\4n;iiipsddpsdoh coding:utf8ââââ(1P''53'S^'????!?!??!??!!!!???!?!??!!?!?!!!!!?!!!!?????!????????????????????!) (qx
#>â
# 36!@â`  e++++++::@ 
#~
#y
#`<`
#<<<#>>]}}+-[.+..]+-+<[<<.>>x>-]>[
#{
#x}
#2""/*\*
#=x<R+++++[D>+++++++q   L+++<-][pPLEASE,2<-#2FAC,2SUB#1<-#52FAC,2SUB#2<-#32FACREADOUT,2PLEASEGIVEUPFACs]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\   \).>]4O6O@|
#[#[(?2?20l0v01k1kMoOMoOMoOMoO MOO0l0ix0jor0h0h1d111x0eU0y0yx0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_0 )0\\
[  "]56p26q[puts 59][exit]" ,'\[999'];#/s\\/;print"24";exit}}__DATA__/
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.<!\
'(wWWWwWWWWwvwWWwWWWwvwWWWw WWWWWWWWwWW/"78"oo@WWwWWWWWWWwWWWWWWWWwwwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWw              (([5]{})))â\';';print((eval("1\x2f 2")and 9or 13<< (65)>>65or 68)-(0and 4)^1<<(65)>>62)or"'x"or' {}{}{}{}({}<(((((()()())){}{})){}{})>)(({})5){}x{(x<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)wWW no no no no no no no no no no no no no no no no no no no no no no no no no no no no no no os sp '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("3'3)))"'a'[[@*3*74[?]*]*(<*.*\>]xxxxxxxxxxxxx)'# \\
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39;'(******* **********819+*+@[*99[?]*]***|!)'
#\\
""""#\
' ( <><        (          )>  ){ ({}[()]  )}{\';      a=$(printf \\x00    );b=${#a};#\\
" }"';           ((   ( (';case "{"$ar[1]"}"${b} in *1)echo 54;;*4)echo 78;; *1*)echo 50;;*)echo 58;;esac;exit;# (((('))))#\
=begin
#p             +555/2+55x%6E2x
;set print "-";print 89;exit#ss 9
utpb now 70 dollar off!
utpb has been selling out worldwide!
#9999 9 seeeemPaeueewuuweeeeeeeeeeCis:ajjappppppp😆😨😒😨💬95💬👥➡
👋🔢🌚🌝🌝🌚🌚🌚🌚🌚

set ! 57
set ! 51
More 91 of thiset of re9
How much is it*/
#if 0
.int 2298589328,898451655,12,178790,1018168591,84934449, 12597
#endif//*
#1"" //*
#include<stdio.h> 
#defineâ x(d)â#d
#define u8 "38\0 "
main ( ) {puts( sizeof (0,u8)-5?u8"67":*u8""?"37":     x( 0'0  "'\"")[9]?"75":'??-'&1? "79":"77");"eg5""6 27""e ' Zing  ";}//*/
#if 0
#endif//* --... ...--
/*/
p=sizeof("9( 999 99\"    ); print'(''72'')';end!"            );main( ){puts(  "92");return(9-9+9 -9);}
#if 0â
#endif//* rk:start | print: "69" rk:end<(9    >5b*:,1-,@
print 61
#}
disp 49 ;9;
#{
}{}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.</+++++++>/+++<-\>+++.---.
#<<<#>>> /
reg end="";print(85);reg s#++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-.
=end
;"""#"#xxxxxxxy"78"\++++>/<~#class P{        function:Main(a:String[] )~Nil{83->Print();} }
#}pS9^7^8^MUOUOF@:8:8\\
#s|)o51~nJ;#:p'34'3  \=#print(17)#>27.say#]# print(47) #]#echo 21#fwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm>++++
#s8âdggi2âM`|$//''  1$6~-<~-<~-<<<~-COprint ("65")#asss^_^_#
#9 "25"  +/ *///X222999686#

Pontuação VIP ( Impressora Inteira Versátil ): .002953 (para melhorar, a próxima entrada deve ter no máximo 3042 bytes)

Atropelar

Este programa imprime 1 em Python 3, 2 em V / Vim, 3 em Minkolang, 4 em> <>, 5 em Python 2, 6 em SMBF, 7 em Japt, 8 em Retina, 9 em Perl 5, 10 em Befunge- 93, 11 em Befunge-98, 12 em Fission, 13 em Ruby, 14 em Turtlèd, 15 em Haystack, 16 em Pyth, 17 em Julia, 18 em Cardinal, 19 em Reng, 20 em Prelude, 21em Nim, 22 em Underload, 23 em Hexagony, 24 em Thutu, 25 em Pip, 26 em 05AB1E, 27 em Perl 6, 28 em Brain-Flak, 29 em INTERCAL, 36 em Labyrinth, 37 em C ++ 03, 38 em C99, 39 em CoffeeScript, 40 em 2D-mínimo, 41 42em Trigger, 30 em Whitespace, 31 em Modular SNUSP, 32 em Whirl, 33 em Incident, 34 em Rail, 35 em alphuck, 45 em PicoLisp, 46 em Cubix, 47 em Lily, 48 em Deadfish ~, 49 em Octave, 50 em Bash, 51 em Assembly, 52 em COW, 53 em Shove, 54 em Zsh, 55 em Brain-Flak Classic, 56 em dc, 57 em Wise, em C11, 68 em brainfuck, no mal, 43 no reticular, 44 58 em Ksh, 59 em Tcl, 60 em Moorhens, 61 em SILOS, 62 em Grass, 63 em Brian & Chuck, 64 in Agony, 65 in ALGOL 68, 66 in Surface, 67em Python 1, 69 em rk-lang, 70 em Commercial, 71 em what, 72 em Fortran, 73 em Morse, 74 em Archway, 75 em C ++ 11, 76 em Trefunge-98, 77 em C ++ 14, 78 em hífen, 79 em C ++ 17, 80 em Klein 201, 81 em Klein 100, 82 em Brain-Flueue, 83 em Objeck, em gnuplot, 90 em RunR, 91 em Cood, 92 em C89, 93 em Set, 94 em Emotinomicon, 95 em Emoji, 96 em EmojiCoder, 97 em Cubically, 84 em Klein 001, 85em zkl, 86 em Miniflak, 87 em Alice, 88 em PingPong, 89 98 em Archway2, 99 em 99 . 100 em brainbool

Verificação

Experimente online! Idiomas não disponíveis no TIO:

  • Japt, 7 online .
  • Reng, 19 on-line .
  • Peixe-morto ~, 48 locais .
  • Moorhens, 60 locais . use moorhens.py da ramificação v2.0-dev
  • Morse, 73 local
  • Archway, 74 local
  • Trefunge-98, 76 local . Use -d 3 -v 98para Trefunge-98.
  • Objeck, 83 local
  • zkl, 85 local
  • PingPong, 88 local
  • RunR, 90 local
  • Cood, 91 online
  • Set, 93 online
  • Emotinomicon, 94 online
  • EmojiCoder, 96 online
  • Archway2, 98 local Não consigo testar o Archway2 porque não tenho o compilador C adequado, mas o stasoid confirmou que funciona no archway2

Explicação

Não acredito que chegamos a 100 idiomas. Gostaria apenas de agradecer a todos os envolvidos nesse processo. Foi um passeio divertido e espero acrescentar mais 100 com vocês.

Brainbool está nos meus olhos há um tempo. No entanto, como o brainbool só pode produzir dois números, 1e 0eu não fui capaz de adicioná-lo até agora (eu não estava por 10 e 11).

O Brainbool é igual ao brainfuck, exceto que, em vez de empacotar em 256, o empate em 2. O Brainbool também não possui um -porque é redundante com o +. Nosso código brainbool para gerar 100 é bastante simples:

+.+..

Para mascarar as saídas do brainfuck, adicionamos um loop e um menos:

+-[.+..]

Agora, tudo o que é necessário é encontrar um lugar para o código ir. Meu local de escolha foi o primeiro +no nível superior do código do cérebro na linha 8. Para substituir no plus, adicionamos nosso código e um +-+que atua como um +no cérebro e um noop no cérebro.

+-[.+..]+-+

Cubix

Coloquei meu código antes da cápsula Cubix, fazendo com que um espelho se movesse no caminho do ponteiro. Para consertar isso, movi a cápsula alguns passos adiante em frente ao espelho ofensivo e estava tudo bem.

Surpreendentemente, nada mais quebrou, nem mesmo o incidente notório.


Na verdade, o brainbool pode gerar um texto arbitrário. Se você passar o -bargumento, ele criará 1s e 0s em bytes e depois será gerado como caracteres.
Pavel

1
@WheatWizard Confirmo que funciona no Archway2.
stasoid 31/07

1
Parabéns! Percebo que a pontuação VIP também caiu abaixo de 0,003.
Ørjan Johansen

1
Eu tenho que confessar, quando você postou originalmente sobre adicionar isso para 100/101, eu realmente não achava que um dia chegássemos aqui. Isso é muito legal.
SnoringFrog

1
@stasoid Estou trabalhando para obter o Archway no TIO, apenas para sua informação.
MD XF

21

27. Perl 6 , 235 bytes

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)#@46(8+9+9+9+9+=!)=#print(17)#3]#echo 21#===2|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

␛ representa um caractere ESC literal, como de costume.

Este programa imprime 27 em Perl 6 , 26 em 05AB1E , 25 em Pip , 24 em Thutu , 23 em Hexagony , em Fission , 11 em Befunge-98 , 10 em Befunge-93 , 9 22 em Underload , 21 em Nim , 20 em Prelude , 19 em Reng (testado aqui ), 18 em Cardinal , 17 em Julia , 16 em Pyth , 15 em Haystack , 14 em Turtlèd , 13 em Ruby ,12 em Perl 5 , 8 em Retina , 7 em Japt , 6 em SMBF , 5 em Python 2 , 4 em> <> , 3 em Minkolang , 2 em Vim / V , 1 em Python 3 e (como é Natal) a partridgeem A Pear Tree .

A sintaxe que destaca o Stack Exchange produz para esta resposta está completamente errada. #`<é um dos muitos marcadores de comentário multilinha do Perl 6 e termina em #>, portanto, o único código que realmente é executado no Perl 6 é muito simples say 27. Eu escolhi esse marcador de comentário específico porque <>não é um par correspondente na maioria dos idiomas e, portanto, os inigualáveis <não quebram idiomas, como o Retina, que tentam analisá-lo.

Não tenho mais certeza de como o Hexagony funciona mais. Quando ele quebrou, mudei um dos personagens que estava usando de a +para a 0para ver se estava sendo atingido; Acontece que foi, e isso corrigiu o programa, mas não sei por que (eu sei que ele quebrou devido a um #na linha de execução, mas não está claro por que remover as +coisas das correções). (O personagem em questão também é analisado por Thutu, mas felizmente isso não faz diferença para o funcionamento do programa Thutu, pois nesse ponto do programa, qualquer coisa que não seja precedida por um =é copiada literalmente para o trabalho. .) Observe que o 0and+4de uma linha anterior se tornou0and 4, para torná-lo um caracter mais curto do ponto de vista do Hexagony (o Hexagony não vê espaços); isso é para compensar o#|em uma linha anterior tornando-se #`<`|, que é um caractere a mais do ponto de vista do Hexagony (porque também não vê aspas). Observe que agora o código está a apenas cinco bytes de distância para expandir o comprimento do lado do Hexagony e quebrar tudo sobre o código atual do Hexagony. Eu recomendo fazer isso de qualquer maneira e apenas refazendo a seção Hexagony do código; provavelmente será mais fácil, e não mais difícil, encaixar tudo após uma expansão.

Algumas outras linguagens também mudaram, principalmente para adicionar robustez suficiente para que eu pudesse inserir código arbitrário na última linha. $//é um marcador de comentário em Japt que permite espaços mais tarde na linha, tornando o programa adicionado menos frágil em Japt (enquanto isso, //quebra se houver parênteses de fechamento mais tarde na linha e espaço é uma espécie de parêntese de fechamento em Japt). Um par de espaços é um marcador de comentário no Pip, o que significa que o código Pip pode ser substancialmente simplificado aqui. Isso também significa que podemos simplificar o 05AB1E em um nível trivial "26. O Retina precisa da quinta linha para ser um regex legal que seja bom em combinar as coisas (o|é assim para Retina); ele analisa de maneira diferente da linha correspondente na entrada anterior, mas de uma maneira que seja igualmente adequada. O Cardinal também é um pouco mais simples do que nas entradas anteriores, mas isso é pura coincidência com a forma como tudo se alinha verticalmente, e a mudança é no código que não fez nada de qualquer maneira.

Supondo que você refaça o Hexagony (você provavelmente precisará), existem locais seguros para adicionar código nas três últimas linhas: o 3in #3]#é apenas para o Hexagony (e é facilmente alterado); o espaço entre #e "na linha final é ignorado pela grande maioria das línguas; e nada está realmente analisando o final da quinta linha que não seja Retina. (Existem muitos outros lugares onde o código também pode ser adicionado, mas esses são provavelmente os mais convenientes.)


1
Eu acidentalmente diminuí a votação desta resposta e notei que diminuí a votação quando notei que meu representante caiu 1. Você pode editar a resposta para que eu possa votar novamente? : D
betseg

4
@betseg: Adicionei um pouco mais de discussão sobre o Hexagony, apenas para você.

2
Parabéns pela recompensa! Eu queria que este post voltasse a funcionar: P
FlipTack 25/12

Eu estava planejando continuar por muito tempo, era apenas um caso de tentar encontrar tempo. (Eu realmente fiz uma tentativa fracassada no Perl 6 há um tempo, no início da cadeia, e não a publiquei porque não funcionou. Felizmente, aprendi com os erros e funciona desta vez.)

21

31. SNUSP modular , 326 bytes

Programa

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999+/+23!@"26

Como sempre, é um caractere ESC literal e é uma guia literal.

Atropelar

Este programa imprime 31 no SNUSP modular, 30 no espaço em branco, 29 no Trigger, 28 no Brain-Flak, 27 no Perl 6, 26 no 05AB1E, 25 no Pip, 24 no Thutu, 23 no Hexagony, 22 no Underload, 21 no Nim , 20 em Prelude, 19 em Reng, 18 em Cardinal, 17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission,11em Befunge-98, 10 em Befunge-93, 9 em Perl 5, 8 em Minkolang, 2 em V / Vim e 1 no Python 3.em Retina, 7 em Japt, 6 em SMBF, 5 em Python 2, 4 em> <>, 3

Verificação

Por que não há links no resumo? Como estou trabalhando em algo para facilitar o teste, um driver de teste que executa o programa na maioria dos idiomas listados aqui e imprime o resultado. Esperamos que isso facilite muito a adição de idiomas futuros ao poliglota. Você pode obter os resultados deste programa para 28 dos 31 idiomas executando o seguinte link TIO (que é um driver de teste escrito em uma mistura de Bash, Perl e A Pear Tree):

Experimente-os online!

O link também produz o bloco de código / formatado visto acima e formata o código em um hexágono para você:

          # v 1 6 / " < " 6 / b
         . q @ " ( : : : T ) : :
        ( 2 2 ) S # ; n 4 " 1 4 "
       # > 3 N 6 @ 1 5 o | > ^ * t
      t t * ~ + + ~ ~ ~ % # = ~ n J
     < R " 1 2 " ; # [ # < | p r i n
    t ( ( e v a l ( " 1 \ x 2 f 2 " )
   a n d ( 9 ) o r ( 1 3 ) ) - ( 0 a n
  d 4 ) ^ ( 1 ) < < ( 6 5 ) > > 6 2 ) o
 r ' ( \ { ( \ { } ) ( \ { } [ ( ) ] ) }
\ { } ) ( \ { } \ { } ) ' # 4 6 ( 8 + 9 +
 9 + 9 + 9 + = ! ) = # p r i n t ( 1 7 )
  # ] # e c h o 2 1 # | / = 1 / 2 4 = x
   = 9 [ < $ + @ + - @ @ @ @ = > + < @
    @ @ = > + < ? # > + . - - . ] / #
     8 . d g g i 2 . | 1 | 6 $ / / '
      ' 2 5 # > s a y 2 7 # T 2 2 2
       9 9 9 + / + 2 3 ! @ " 2 6 .
        . . . . . . . . . . . . .
         . . . . . . . . . . . .
          . . . . . . . . . . .

Faltam três idiomas: V é muito lento e Reng e SNUSP modular não estão instalados no TIO. Felizmente, todos os três têm intérpretes online:

  • Você pode testar o programa em V / Vim (saída pretendida: 2) aqui no TIO.
  • Existe um intérprete online Reng (saída pretendida: 19) aqui .
  • Há um interpretador Modular SNUSP online (saída pretendida: 31) aqui . (Ele é anunciado apenas como um intérprete do SNUSP, mas o SNUSP modular é o dialeto que ele realmente implementa, como visto pelos @sinais em toda a página.)

Todos os três produzem a saída pretendida; portanto, todos os 31 programas são testados corretamente. (Uma coisa que me preocupa um pouco é se o programa Whitespace está sendo finalizado corretamente; no entanto, o espaço em branco aqui é idêntico ao envio anterior, portanto, ambos estão certos ou ambos errados. incorretamente, é provável que ambos os programas possam ser corrigidos da mesma maneira.)

Explicação

Primeiro, o Hexagony, que sempre parece precisar mudar. Na verdade, é muito mais simples do que antes; Mudei o código Hexagony para logo após o código Trigger, o que significa que ele está muito próximo do final do programa, e a "cápsula" Hexagony que imprime 23 e sai é executada quase imediatamente. A última linha geralmente parece um bom lugar para colocar a cápsula, pois significa menos comandos que podem interromper o Hexagony.

Todas as outras alterações estão relacionadas à adição do código Modular SNUSP. A primeira coisa a observar é que o SNUSP começa a executar no primeiro $caractere do programa e é um idioma 2D que sai após sair do limite do programa e, portanto, colocando o programa SNUSP no final da linha longa (dentro o código Thutu, em um ponto em que Thutu aceitará quase tudo), podemos garantir que o SNUSP não veja nenhum código de outros idiomas e a maioria dos outros idiomas não se importará com o SNUSP. Um idioma que se importava era o Perl 6, que analisa colchetes angulares; Eu coloquei um <imediatamente antes do código SNUSP para mantê-lo feliz (já que os colchetes estavam quase sempre correspondentes). O outro idioma que se importa é o SMBF;.Coloquei saída no SMBF e no SNUSP e não queremos criar uma saída extra. Felizmente, como visto pelo SMBF, este programa é<.>>[…] seguido pelo código SNUSP, ou seja, o elemento de fita atual é 0. Portanto, colocar o código SNUSP entre colchetes "comenta" do ponto de vista do SMBF.

Quanto ao próprio código, ele usa um truque conhecido para escrever constantes no SNUSP Modular, no qual você escreve muitos comandos de "procedimento inicial" em uma linha e cria efetivamente uma espécie de número de Fibonacci base. A ideia básica é que +codifique o número 1; @adiciona o número representado pelo código após ele e o número representado pelo código após ele menos seu primeiro caractere; e =é um no-op (assim @=dobrará o número à sua direita). Neste sistema, escolhi @@@@=+@@@=+#como uma representação do número 48.

Há um problema aqui, no entanto; o método padrão de escrever constantes no SNUSP deixa o fluxo de controle para trás no início do programa e, com um oneliner (que eu queria escrever aqui por razões óbvias), não há como alterar o IP para apontar em qualquer direção, exceto a correta. Isso significa que, de alguma forma, teremos que fazer com que o IP passe toda a definição constante e continue à direita, sem a saída do programa (o que #normalmente seria). Para resolver isso, usei cuidadosamente uma definição do número para o qual +sempre foi precedido por =. Isso significa que eu posso escrever um código para definir a segunda célula para 48 via @@@@=>+<@@@=>+<#, seguro com o conhecimento de que nenhum dos >comandos será ignorado por um@comando (e, assim, mantemos o controle do ponteiro da fita). Além disso, sabemos que, no final #, a primeira célula de fita ainda terá seu valor inicial. Portanto, podemos usar a primeira célula de fita como um marcador para saber se devemos retornar da definição do procedimento ou se devemos continuar para a direita (estamos envolvidos em vários procedimentos ao fazer isso, mas encerramos o programa caindo do borda para que isso não importe).

O código SNUSP final, portanto, é $+@+-@@@@=>+<@@@=>+<?#>+.--.. A $marca do início do programa. +@+-define o primeiro elemento de fita como 1 ( ++-mas, assim que o procedimento iniciar com @retornar, ele começará a executar o código a -partir de então, definindo o elemento de fita novamente como 0. ?#finaliza o procedimento somente se o primeiro elemento de fita for diferente de zero; acabamos terminando após o #segundo elemento de fita definido como 50 (48 da definição constante, mais 2 dos dois >+<encontrados ao seguir à direita). Então, tudo o que precisamos fazer é >+.--.gerar os códigos ASCII 51 ( 3) e 49 ( 1) e fica fora do limite do programa (não ]é uma opção no SNUSP, e /reflete o fluxo de controle verticalmente para que saia da borda superior do programa); esse bit funciona de forma idêntica ao cérebro.


20

11. Melhor 98 , 102 bytes

#v;2^0;7||"<+0+0+0+<;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

Impressões:

Para ser sincero, não faço idéia do motivo pelo qual o código do Vim leva 1 minuto para sair. Além disso, não há idéia de como funciona a Retina.

Explicação:

#v          Skips the v, which would send the IP down
  ;         Unlike '93, where ; is a no-op, '98 skips to the next ;
            and doesn't execute anything in between
   2^0;     Not executed, unlike Befunge 93
       7|   Pushes 7 onto the stack, and then sends the IP up, because 7 is not 0
n0b1        n clears the stack, and #s are pushed until the stack is [0, 11, 1
    *.      multiplies the top 2 values of the stack to give 11, and prints it (yay!)
      _     Sends the IP right, because the top value of the stack is 0
       q    Ends the program (no-op for '93, which continues to @)

Coisas a serem observadas:

  • O 0próximo ao bnão é estritamente necessário no estado atual do código e a pilha foi limpa. Ele pode ser removido, se necessário, mas permite outra manipulação de pilha antecipadamente, como parte de um possível programa futuro.
  • Ele _q@existe como parte da Retina (não funciona sem ele, não me pergunte por que). A adição de qtambém permite que o código '98 execute uma toperação, que divide o IP (além de fazer o programa Retina imprimir 8 em vez de 7)
  • O _não é um simples >, porque isso iria mexer o SMBF parte para cima.

Edit: Acabei de perceber que _q@provavelmente deveria estar @00(Onde 0s pode ser ~ qualquer caractere) para tornar o programa mais flexível no futuro. Estou com preguiça (e cansado) de mudar todos os links agora. Irá contornar isso eventualmente ...

Edit 2: Eu não esperava mais 6 respostas tão rapidamente. Eu acho que está ficando como está. Bom trabalho a todos!


Heh, eu escrevi a minha resposta 11º, apenas para perceber que ele já tinha sido publicado, agora eu mudei para a resposta 12ª :)
Vacas quack

Alguma idéia de por que o Vim demora tanto para ser executado?
MildlyMilquetoast

@MistahFiggins Eu acho que é porque o código tem de ser convertido para teclas, mas diferente do que, eu não tenho idéia
Vacas quack

Eu escrevi esse intérprete do vim e não tenho idéia do porquê leva tanto tempo. Não notei muitos problemas de desempenho antes, mas isso ocorre porque a maioria das minhas respostas do V / Vim tem menos de 40 bytes. Não tenho muita certeza do que está causando isso, mas muitas pessoas se queixam disso neste tópico.
DJMcMayhem

20

35. INTERCAL (C-INTERCAL), 631 bytes

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#8␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q222999/+23!@1#"26

é uma guia literal, um caractere ESC literal; O Stack Exchange alteraria o programa de outra forma. Eu recomendo copiar o programa da caixa "entrada" do link TIO abaixo, se você quiser trabalhar nele.

Experimente-os online!

Atropelar

Este programa imprime 35 em INTERCAL, 34 em Rail, 33 em Incident, 32 em Whirl, 31 em SNUSP modular, 30 em Whitespace, 29 em Trigger, 28 em Brain-Flak, 27 em Perl 6, 26 em 05AB1E, 25 em Pip , 24 em Thutu, 23 em Hexagony, 22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng, 18 em Cardinal, 17 em Julia, 16 em Pyth,15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission, 11 em Befunge-98, 10 em Befunge-93, 9 em Perl 5, 8 em Retina, 7 em Japt, 6 em SMBF, 5 em Python 2, 4 em> <>, 3 em Minkolang, 2 em V / Vim e 1 em Python 3.

Verificação

A maioria dos idiomas é testada pelo driver de teste mostrado acima. Você pode testar o Reng aqui e o SNUSP Modular aqui ; eles produzem 19 e 31 respectivamente, conforme necessário. Testei o Incidente localmente em meu próprio sistema, usando o intérprete oficial.

Observe que eu adicionei algumas alterações ao driver de teste para facilitar a localização de caracteres ocultos; vários bytes NUL invadiram a saída do programa em certos idiomas. Decidi que isso provavelmente não é um problema, porque a) uma grande variedade de envios está fazendo isso eb) os intérpretes do Befunge parecem adicionar bytes NUL extras, embora nada no programa implique isso (a menos que eu perdi alguma coisa), por isso deve ter durado muito tempo e provavelmente faz parte de como o intérprete funciona. (Observe que os idiomas que ainda emitem NUL bytes - Befunges e Minkolang - não tiveram seu código alterado para este envio.)

A submissão anterior do Rail sai por acidente, o que não é permitido, mas isso é facilmente corrigível (adicionando um #no final do programa Rail e ajustando o Hexagony para corresponder) e, portanto, não o considerei um grande problema. O trilho nesta solução sai corretamente.

Explicação

Como o código INTERCAL funciona

INTERCAL analisa o programa inteiro. No entanto, erros de sintaxe são uma coisa de tempo de execução no INTERCAL, não no tempo de compilação, e isso geralmente é usado para criar comentários. (Se um erro de sintaxe tentar executar, ele travará o programa com o erro ICL000I, ao contrário do que a Wikipedia afirma incorretamente. Mas se você puder impedir que ele seja executado de alguma forma - e o INTERCAL tenha várias maneiras de impedir a execução de comandos - felizmente não executar sem causar um problema.)

Como tal, podemos impedir que o lixo no final do arquivo seja executado simplesmente saindo primeiro do programa explicitamente (algo que é necessário de qualquer maneira, porque INTERCAL trava se o final do programa for alcançado sem um comando de saída explícito). Manipular o início do programa é mais interessante e explora um bug do analisador. Você pode escrever algo como DO %20 READ OUT #8produzir VIIIcom uma probabilidade de 20% (e de outra forma não fazer nada). Até onde eu sei, o C-INTERCAL analisa o% solitário na segunda linha como indicando uma probabilidade de 0% para o primeiro comando ser executado e, portanto, acaba sempre não sendo executado sempre. (Não sei por que o analisa dessa maneira, mas observar o código compilado mostra que ele gera um número aleatório e o compara a 0.)

Veja como o programa INTERCAL era antes de ajustá-lo ao redor do resto da poliglota:

DO,1<-#2
DO,1SUB#1<-#52
DO,1SUB#2<-#32
DOREADOUT,1
PLEASEGIVEUP

Isso é bastante simples: instancia uma matriz de 2 elementos; defina os elementos como 52 e 32 (decimal), respectivamente (é melhor deixar a codificação de string do INTERCAL; esqueci como ele funciona e tive que fazer várias experiências para descobrir por que esses números codificam 35); leia-o para saída padrão; e saia do programa. Eu adicionei um POR FAVOR adicional no final para finalizar a instrução GIVE UP, iniciando uma nova instrução para o lixo no final do programa, mantendo limites aceitáveis ​​para uma conversa educada. Obviamente, o INTERCAL não se parece com isso no produto final; Vou explicar o porquê.

Enterrado sob uma carga de Ses

O problema mais óbvio com o programa INTERCAL é que ele contém a carta S. Isso é inevitável, pois não há como indexar uma matriz sem usar a letra em questão. No entanto, Sé um comando de saída no Underload, e não há como impedir que ele analise o programa inteiro. A única solução é colocar o código INTERCAL entre parênteses, o equivalente do Underload a uma string literal, para que não seja executado imediatamente.

No entanto, temos dois ^caracteres no final do programa, que executam o código de Underload; então esses Ses serão executados de qualquer maneira se não fizermos algo a respeito. Eu poderia ter mudado para outro caractere, mas decidi que era mais fácil proteger o código para que ele se tornasse sem sentido. aescapa uma string em Underload (o que significa que ^, ao executá-la, simplesmente a escapa novamente em vez de produzir efeitos colaterais prejudiciais). Já temos um ano saycódigo usado no Perl 6 (que nesta disposição do código é realmente suficiente devido a alterações não relacionadas). No entanto, para que as pessoas não precisem confiar nisso, adicionei outroano final da linha (eu queria um personagem lá de qualquer maneira para tornar visível o que seria espaços à direita, e porque o Hexagony precisava de preenchimento como ele é; observe que o Hexagony era bastante fácil de corrigir neste programa, e realmente não precisa de discussão separada). Portanto, o código Underload é um pouco menos frágil do que poderia ter sido.

Prelude a muito trabalho e confusão

Ah, prelúdio. Normalmente não é o idioma mais difícil, mas definitivamente foi dessa vez. Existem dois problemas reais: um é que a adição de parênteses extras em uma linha muito longa corre o risco de perturbar o fluxo de controle do programa Prelude (como eles criam o equivalente a um whileloop), e um é simplesmente o problema de impedi-los de alinhar verticalmente (que é responsável pela maior parte do movimento aleatório do espaço em branco nas linhas). Observe que o espaço em branco também me causou alguns problemas, mas esse programa é equivalente ao programa anterior do ponto de vista do espaço em branco, por isso foi praticamente um caso de "consertar o prelúdio sem quebrar o espaço em branco".

Não tenho muita certeza de como o Prelude realmente funciona neste momento. Existem várias correções para isso, como o 0 no canto inferior esquerdo, mas elas claramente não funcionam da maneira que eu pretendia. (O código de Julia também acabou indo para o final da linha porque os parênteses em sua printdeclaração eram realmente difíceis de lidar.) Talvez tenhamos que deixar um mistério para isso.

Avaria em um reator de fissão

Embora as alterações acima sejam de problemas bastante sutis e difíceis de corrigir, há um problema muito mais óbvio; DOREADOUTcorresponde ao regex R...Oe, portanto, fará com que a Fissão produza uma saída indesejada no quarto ciclo, o que não é tempo suficiente para gerar a saída pretendida 12. E INTERCAL possui apenas uma instrução que produz saída (a menos que você conte com falhas como saída). Uma correção para isso é tentar adicionar espaços em branco entre READe OUT, para nos dar tempo para interceptar a saída, mas isso deixa o espaço em branco irritado. Por um tempo, pensei que esse programa era impossível; R, L, U, E Dsão todos os pontos de entrada na fissão, e todos capazes de potencialmente executar código problemático, e palavras-chave INTERCAL deve estar em letras maiúsculas.

No entanto, há uma correção, e uma bastante surpreendente. Como parte de um esforço de internacionalização, o C-INTERCAL realmente aceita palavras-chave em vários idiomas, com suporte para inglês e latim. Nós não poderia evitar Sassim, mas nós podemos evitar O; FACé um substituto perfeitamente bom para DO, e da mesma forma LEGERE EXsignifica a mesma coisa que READ OUT. (O programa acabou sendo misturado em inglês e latim, mas tudo bem; dificilmente o torna menos legível.) Como tal, podemos alegremente deixar a Fission enlouquecer no canto inferior direito e não deixar que ela produza qualquer resultado. Podemos alterar o código de fissão real para terminar em *vez de;, que fecha o programa inteiro em vez de apenas um thread; esse código é executado rapidamente, portanto, sai do programa antes que todos os pontos de entrada perdidos tenham tempo para causar algum dano.

Malha 6, Perl 6

O próximo problema: os comentários do Perl 6 funcionam combinando <e >. O operador de atribuição da INTERCAL é <-. Felizmente, isso adiciona colchetes de abertura extras , então eu poderia adicionar alguns colchetes de fechamento para cancelá-los em um local não analisado no programa (logo após o código Pip, nesse caso).

No entanto, eu não queria alterar o orçamento de espaço em branco do programa, mas mover o código Julia (para Prelude) acabou adicionando um espaço extra à última linha; Eu tive que remover um de algum lugar. O espaço duplo é um marcador de comentário em Pip, então eu dificilmente poderia alterá-los; a única opção restante é o espaço em say 27. Os golfistas do Perl 5 pensariam imediatamente "bem, basta fazê say+27-lo" (o unary +é útil muitas vezes surpreendentemente!), Mas infelizmente isso não é uma sintaxe válida do Perl 6.

O que podemos fazer, no entanto, é mudar sayda sintaxe da função para a sintaxe do método. Literais inteiros têm vários métodos, incluindo um para imprimi-los, portanto, 27.sayé um programa perfeitamente válido do mesmo tamanho.

Ser quadrado? Não esteja lá

Portanto, a próxima edição é que adicionei um extra .ao programa. Os usuários SMBF saberão que isso é claramente um problema nesse idioma, produzindo saída dispersa (NUL bytes neste caso). Já havia um .último programa em produção dispersa, mas isso não significa que eu não deva aproveitar a oportunidade para corrigi-lo.

A idéia básica aqui é criar um loop SMBF para comentar as instruções incorretas. Isso significa mover os colchetes. Levei-os de todo o código SNUSP (porque eles estavam lá apenas por causa do Incidente, e o Incidente não se importa onde no programa são), e colocou o colchete de abertura no início do código INTERCAL, eo suporte de fechamento imediatamente antes do gatilho (ocultando os dois com cuidado .).

Infelizmente, colchetes são significativos para a Retina; ele vê […<-#…e diz "isso não faz sentido, você não pode criar esse intervalo porque <não vem antes #". Felizmente, isso é facilmente corrigível com uma barra invertida estrategicamente posicionada.

O incidente no centro do programa

Isso aconteceu na última resposta e provavelmente acontecerá repetidamente a partir de agora; várias seqüências de caracteres ocorreram aleatoriamente três vezes e deslocaram-se pelo centro do programa do ponto de vista do incidente.

O token mais urgente de manipular era 1#, que aparece três vezes se você fizer essas alterações ingenuamente: #= >␉1#no início da terceira linha __DATA__=1#, e echo 21#. Por que isso é um problema? Como a 1#terceira linha se sobrepõe ao #vlogo após, e dois tokens sobrepostos fazem com que nenhum deles seja contado. E #vé o token que costumávamos comentar o código antes da saída do programa Incidente! Corrigi isso esgueirando um extra 1#muito perto do final do programa (apenas três caracteres o seguem); nenhum dos idiomas que analisa essa parte do programa faz nada com ele.

Havia vários outros tokens problemáticos para lidar. Um casal eram letras solteiras Pe U; Eu lidei com isso através da alteração de algumas no-ops de preenchimento no código do incidente de xpara Pou Urespectivamente, fornecendo uma quarta cópia. A alteração no código de fissão deixa *como um token, mas notavelmente, isso é dividido de maneira diferente do normal, aparecendo duas vezes antes do código de incidente e apenas uma vez depois. Em vez de removê-lo, usei-o para equilibrar parcialmente o novo LEtoken que apareceu no código INTERCAL. Isso é suficiente para levar o centro do programa de volta a um0osímbolo. Obviamente, as mudanças no programa provavelmente atrapalharão isso. (Minhas tentativas de obter o incidente no TIO falharam porque o libdivsufsort não está disponível lá, então parece que podemos nos beneficiar de um novo intérprete, especialmente em JavaScript, para que ele possa ser executado on-line. Se você estiver interessado, dê uma olhada neste pergunta .)


1
Uau, esse desafio percorreu um caminho surpreendentemente longo. Bom trabalho!
MildlyMilquetoast

Latin ?! Uau, que ótima solução! Eu amo que o código diga 'por favor, desista' agora. É como se estivesse me desafiando a desistir.
Chance

19

1. Python 3 (8 bytes)

print(1)

Este programa imprime 1 no Python 3.

Começando isso com o Python 3, porque eu sei que é bom para poliglotas e pode ser tomado em várias direções diferentes (também, eu queria garantir que a primeira resposta estivesse em uma linguagem relativamente normal, em vez de um esolang absurdo difícil de poliglota com).


> <> Seria uma boa escolha para o segundo idioma (para começarmos o espaço em 2D)?
Vacas

Então isso significa que a próxima resposta não pode ter mais que 9 bytes? Vai ser muito difícil encontrar outro.
DJMcMayhem

1
@DJMcMayhem Cada resposta deve ter no máximo 20% ou 20 bytes (o que for maior) mais
Vacas

19

10. Melhor , 95 bytes

#v02^0;7||"<+0+0+0+<;n4
#v0#@00
#>3N.
#|\w*
#8
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

Há um caractere ESC literal entre je dna última linha (grr, @ ais523). Não está incluído neste código. Para obter o código real, acesse o Try it onlinelink.

Isso imprime 1 no Python 3, 2 no Vim, 3 no Minkolang, 4 no <> <, 5 no Python 2, 6 no SMBF, 7 no Japt, 8 na Retina, 9 no Perl e 10 no Befunge.

Esse código compartilha *com a Retina e .com Minkolang e SMBF.

Experimente online

Explicação

Programa atual

#v02^
    @
    .
    *



    t
    5
#v02^

A última linha foi escrita para maior clareza (o playground da Befunge é cíclico.)

#

Trampolim, pula v

02^

Empurre 0e depois 2na pilha e suba.

5t*.@

Push 5, no-op, multiplique dois elementos na pilha ( 2e 5), imprima e finalize o programa.


1
Isso faz com que o SMBF imprima um byte nulo no início ..
PurkkaKoodari

@ Pietu1998 corrigido!
JungHwan Min

Ei, não fui eu quem escolheu usar uma linguagem em que muitos dos comandos mais importantes são caracteres não imprimíveis ... (Em outras notícias, eu estava considerando o Befunge como uma forte possibilidade de adicionar a esse poliglota; ele parece se encaixar bem com os outros idiomas. Gosto da maneira como você fez isso, embora possa precisar ser modificado para se encaixar mais.)

@ ais523 Concordo que modificar este código pode ser difícil. Para aliviar isso, coloquei alguns 0s para indicar que esses caracteres podem ser qualquer coisa (exceto a "<+0+0+0+<;n4parte) e partes do código Befunge podem ser movidas. E uma dica para a próxima pessoa: a maioria dos caracteres não funciona no Befunge, portanto, adicionar mais linhas provavelmente não afetará o código do Befunge.
JungHwan Min

Pensando em enviar um befunge-98 (ou outro funge similar), porque eles adicionam uma quantidade razoável de operações que não são operacionais no normal de 1993. Pode ser difícil de ajustar, no entanto, e eu precisaria descobrir como todos os outros idiomas funcionavam para que eu pudesse contorná-los ...
MildlyMilquetoast

19

21. Nim (161 bytes)

#v`16/"<"6/b.q@#;n4"14""
#>3N6@15o|> ^*ttt*~++ %
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#]#echo 21
#8dggi2` |1|6

Dois <ESC>s, entre 8de 2`na última linha. Você pode dizer que o meu anterior foi jogado às pressas, porque acordei hoje de manhã e percebi que poderia tirar mais um monte. Eu tinha 152 bytes, mas isso parece funcionar apenas no Perl 5.24.0; portanto, no interesse da compatibilidade com o TIO, mantive a expressão original por enquanto.

Imprime 1 em Python 3, 2 em V, 3 em Minkolang, 4 em> <>, 5 em Python 2, 6 em SMBF, 7 em Japt, 8 em Retina, 9 em Perl, 10 em Befunge-93, 11 em Befunge -98, 12 em Fissão, 13 em Ruby, 14 em Turtléd, 15 em Haystack, 16 em Pyth, 17 em Julia, 18 em Cardinal, 19 em Reng, 20 em Prelude e 21 em Nim .

Observe que o Nim, no ideone.com, usa a versão 0.11.2, um pouco antiga, pois esse programa se baseia em #[ ... ]#comentários de várias linhas adicionados no início de 2016.

Graças ao intérprete do Cardinal para Windows, meu fluxo de trabalho agora consiste em dois laptops e um Python http.serverno meio.


Editar - mais algumas dicas:

  • O 8início da última linha é definir o limite de Retina para as 8 primeiras partidas, caso contrário, sem ele, a Retina produzirá 2. Observe que isso significa que o regex da linha final só precisa corresponder ao menos 8 vezes na segunda última linha agora, em oposição a exatamente 8 - durante a intromissão, modifiquei o Prelude para acertar a Retina, mas acabou sendo desnecessário no final .
  • A citação incompatível no final da primeira linha é para que Pyth não reclame de sintaxe inválida para o restante do código.
  • Se você modificar a segunda linha, poderá ser necessário alterar o 6@ para Minkolang, o que faz o ponteiro pular 6 espaços para pousar no ^.
  • Há um par de [] agora, então o SMBF precisa estar em uma célula 0 antes de atingir o [, ou em alternativa o interior precisa limpar a célula.

Provavelmente há mais no golfe (mesmo agora vejo um espaço perdido antes do %Cardinal), mas eu realmente deveria parar de jogar golfe nas primeiras horas da manhã.


1
O TIO agora suporta Cardinal
MildlyMilquetoast 8/16/16

19

51. Montagem (x64, Linux, AS) , 1086 bytes

#16  "(}23!@)(" 3//*v\D@;'[af2.qc]'#)"14";n4
#/*` PkPPZ (22)S"[!(>7 7*,;68*,@;'1,@␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++EAL+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh]>+.-- -. >][
#x%+>+=+~tt .
#D>xU/-<+++L
#R+.----\).>]|
#[#[(}2}20l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e0@O6O4/0m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#sseemeePaeueewuuweeeeeeeeeeCisajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( )/*/
#
#"`#"\'*/{puts (p);}/*'"`"
/*
<>{#65}//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#<R>"3"O.
=end #//
"""#"#//
#}
#s|o51~nJ;#:p'34'\=#print (17)#>27.say#]#print(47)#]#echo  21
#sss8␛dggi2␛ `|1|6$//''25  16*///89^_^_Z222999"26

é uma guia literal, um caractere ESC literal; O Stack Exchange alteraria o programa de outra forma. Eu recomendo copiar o programa da caixa "entrada" do link TIO abaixo, se você quiser trabalhar nele.

Deseja saber mais? Experimente o chat do polygot !

Experimente online!

Pontuação VIP ( Impressora Inteira Versátil ): .008186 (para melhorar, a próxima entrada não deve exceder 1151 bytes)

Este programa imprime 51 em Assembly, 50 em Bash, 49 em Octave, 48 em Deadfish ~, 47 em Lily, 46 em Cubix, 45 em PicoLisp, 44 em alphuck, 43 em reticular, 42 em evil, 41 em brainf *** , 40 em 2D mínimo, 39 em CoffeeScript, 38 em C, 37 em C ++, 36 em labirinto, 35 em INTERCAL, 34 em trilho, 33 em incidente, 32 em turbilhão,31 em Modular SNUSP, 30 em Espaço em branco, 29 em Trigger, 28 em Brain-Flak, 27 em Perl 6, 26 em 05AB1E, 25 em Pip, 24 em Thutu, 23 em Hexagony, 22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng, 18 em Cardinal, 17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission, 11 em Befunge-98,10 em Befunge-93, 9 em Perl 5, 8 em Retina, 7 em Japt, 6 em SMBF, 5 em Python 2, 4 em> <>, 3 em Minkolang, 2 em V / Vim e 1 em Python 3.

Verificação

A maioria dos idiomas é testada pelo driver de teste mostrado acima.

  • Reng pode ser testado para produzir 19 aqui .

  • O SNUSP modular pode ser testado para gerar 31 aqui .

  • Forma de cubo do Cubix vista aqui

  • O incidente é verificado mantendo os tokens equilibrados, conforme descrito nas respostas anteriores.

  • Para Deadfish ~, pode ser testado a saída 48 com isso . Observe que o Deadfish ~ leva o poliglota a ser alimentado com stdin, mas imprime várias >>solicitações na saída padrão, que são uma consequência inevitável da execução de qualquer programa Deadfish ~.

  • O conjunto pode ser testado para produzir 51 aqui

Obrigado e parabéns

Quando a resposta 50-em-1-k de @ ais523 caiu 2 semanas atrás, uma lágrima escorreu pela minha bochecha. Era lindo demais. E foi em Bash. Foi perfeito demais.

Virei-me para minha esposa e disse: "Acho que o poliglota está pronto", sentindo um imenso orgulho.

Ela se virou para me olhar nos olhos, parou um momento e disse: “Bom. Agora tire o lixo.

O que ela quis dizer foi que sentiu uma profunda alegria por mim e meus amigos da Internet. Obrigado e parabéns a todos.

Explicação da montagem

Nos dias que se seguiram, minha mente continuou voltando a algo que @ ais523 disse no bate-papo poliglota pouco antes de postar Bash. Ele ressaltou que alguns tipos de montagem usam #comentários de linha baseados e /*comentários de bloco. Bem, isso foi o suficiente para eu perder a cabeça lentamente pelas próximas 2 semanas.

Existe um tipo de desafio implícito nos poliglotas para incluir idiomas legítimos. Estou usando o termo legítimo aqui muito livremente, mas acho que todos podemos entender o que estou falando. Uma coisa é incluir Brainf ***, mas outra é incluir outros tipos como Mathlab ou R. Assembly certamente se enquadra nessa última categoria, e minha mente não podia deixar isso de lado. Mas eu não sabia nada sobre a Assembléia, então essa foi uma batalha difícil.

Depois de bater com a cabeça no problema por um tempo, procurando uma maneira de o Assembly e o C / C ++ coexistirem, descobri que esta é a documentação para o montador GNU:

Para ser compatível com montadores anteriores, as linhas que começam com '#' têm uma interpretação especial. Após o '#' deve haver uma expressão absoluta (consulte Expressões): o número da linha lógica da próxima linha. Então, uma string (consulte Strings) é permitida: se presente, é um novo nome de arquivo lógico. O restante da linha, se houver, deve estar em branco.

Percebi que isso era bastante semelhante à nossa diretiva de pré-processador para C / C ++ na linha 1 do poliglota. Após algumas tentativas e erros, descobri que#1 “bla” 1//* inseriria um comentário em bloco apenas para a Assembléia.

E assim foi feito um poliglota.

Com os maiores problemas de bloqueio resolvidos, comecei a jogar golfe neste exemplo de olá mundo.

.intel_syntax noprefix
.section .data
     msg: .asciz "51"
.section .text
.global _start
_start:
    # write syscall
    mov     rax, 1
    # file descriptor, standard output
    mov     rdi, 1
    # message address
    mov     rsi, OFFSET FLAT:msg
    # length of message
    mov     rdx, 14
    # call write syscall
    syscall
    #End the Program
    mov    rax, 60
    mov    rdi, 0
    syscall

Crédito do Autor Principal

Na verdade, eu menti um minuto atrás, a primeira versão do código do Assembly que usei estava na sintaxe da AT&T, que é um dos dois ramos sintáticos do Assembly. Um dos principais elementos da sintaxe da AT&T é que suas referências de registro usam um %prefixo e isso é um problema para a poliglota. O Cardeal usa %como origem do ponteiro, então, se jogássemos um monte de coisas %, seria como uma segunda reação da Fissão.

O outro ramo sintático, que não usa %como prefixo de registro, é chamado de sintaxe Intel. A exploração que estamos usando no poliglota para ultrapassar a primeira linha e inserir um comentário em bloco está no GNU Assembler (GAS ou AS, abreviado). O AS tem a feliz característica de permitir os dois ramos sintáticos. Você apenas precisa declarar que deseja usar a sintaxe da Intel, o que está acontecendo na linha 1 do código do assembly.

O Assembly usa registradores, que são um pequeno número de locais de memória literalmente localizados na CPU para velocidade de acesso. Isso não é exclusivo do Assembly, exceto pelo fato de seu uso não ser abstraído da preocupação do desenvolvedor.

Existem diferentes tipos de registros que são usados ​​para diferentes fins. Da Wikipedia:

• AX multiplicar / dividir, carregar e armazenar strings

• Contagem CX para operações e turnos de cordas

• Endereço da porta DX para IN e OUT

• Registro de índice BX para MOVE

• SP aponta para o topo da pilha

• BP aponta para a base do quadro da pilha

• SI aponta para uma fonte em operações de fluxo

• DI aponta para um destino em operações de fluxo

AX é usado na linha da função _start aqui: mov rax, 1. O rin raxindica que a memória é de 64 bits. Se trocássemos isso por um e, isso indicaria uma memória de 32 bits, que é totalmente válida para um processador de 64 bits. Nós simplesmente não usamos a metade superior da memória disponível. Para indicar memória de 16 bits, basta usar ax, o que é bom para nós, porque estamos apenas imprimindo números inteiros. Assim, podemos jogar alguns bytes alterando todas as referências de registro para 16 bits.

Ok, nem todas as referências de registro podem eliminar o arquivo r. mov rsi, OFFSET FLAT:msg. Se você está familiarizado com o Assembly, mas não com essa afirmação, é porque isso era semi-exclusivo para o AS. Pelo menos, o que eu recolhi disso , o que me ajudou a redefinir a declaração para apenaslea rsi,m .

Depois disso, descobri experimentalmente que poderia derrubar _start:apenas _pe cortar .global _startcompletamente com apenas um aviso emitido. Segundo, msg:foi reduzido para apenas uma variável de caractere p:. Escolhi ptanto a variável string quanto a função inicial para compensar parte da sAssembléia adicionada em benefício de Alphuck.

Depois, ;delimitei as instruções para colocá-las todas em uma linha. Isto é principalmente para evitar arrastar excessivo#// s em cada linha para o benefício de Thutu. Além disso, notei que nosso Assembler não parecia fazer distinção entre maiúsculas e minúsculas; portanto, apenas maiúsculas e minúsculas colocavam vários caracteres para evitar o desequilíbrio do incidente.

Este golfe nos levou a:

.intel_syntax noprefix;.text;mov ax,1;mov di,1;lea rsi,m;mov dx,2;syscall;mov ax,60;mov di,0;syscall;m:.asciz "51"

Depois de tudo isso, Japt e Underload foram os únicos filhos problemáticos nessa resposta. Japt tinha um pouco de carne com o *adicionado na linha 1, mas parecia ser corrigido revertendo para a puts(p);linha a partir da resposta C ++. Acabei jogando um (nessa linha também e depois fechei na linha de Octive. Era assim que o Underload parava de falhar. Um tratamento semelhante foi tido na linha 1 para adicionar o *lá.

Isso foi suficiente para atender aos requisitos de byte desse desafio. Na verdade, eu verifiquei isso produzindo esta versão do poliglota. Mas eu queria tentar melhorar a pontuação VIP também, se possível. E como eu cumpri todos os requisitos do desafio, me senti bem em colaborar para aprimorar o código. Então parei no bate-papo poliglota para procurar ajuda no golfe.

Temos que ir mais fundo

@ ais523 demonstrou uma técnica de passar as instruções para o montador como código de máquina com esta declaração.

.text;.long 2298589328,898451655,12,178790,1018168591,84934449,12597 O código da máquina é uma série de instruções numéricas executadas diretamente pela CPU que podem ser representadas em decimal, hexadecimal ou octal. Para nossos propósitos, o decimal é o menor desde que (hex leva um líder 0xpara representar). A .longdeclaração aqui está declarando que o que segue é uma série de instruções de código de máquina decimal.

Bem, eu cutuquei essa declaração também um pouco para ver o que o montador permitiria e fiz algumas alterações. Primeiro, descobri que posso remover .text;tudo junto, apenas com problemas de avisos, o que foi uma economia de bytes bastante vendida. Então, um tempo depois, eu também encontrei, essa declaração na documentação de especificação do AS

.long é o mesmo que .int

Legal. Portanto, podemos fazer essa troca por um byte rápido. Agora nossa montagem, mas realmente o código da máquina, foi resumida a isso:

.int 2298589328,898451655,12,178790,1018168591,84934449,12597.

Embora tudo esteja bem, é bastante difícil trabalhar diretamente com o código da máquina e eu queria pelo menos ver como fazer todas as traduções. Então, idealmente, gostaríamos de desmembrar o código da máquina de volta à montagem. A maneira mais fácil de fazer isso é fazer um despejo de objeto, o que @ ais523 demonstrou para mim com esse trecho de código.

Aqui está o trecho de código.

E aqui está apenas a Assembléia.

nop
mov    $0x1,%al
mov    %eax,%edi
lea    0xc(%rip),%rsi
mov    $0x2,%dx
syscall 
mov    $0x3c,%al
xor    %edi,%edi
syscall 
.byte 0x35
xor    %eax,(%rax)

Esse link também mostra alguns números hexadecimais de 2 caracteres ao lado de cada linha de montagem. Eles correspondem às instruções decimais. Por exemplo, se você colocar 2298589328em este decimal ao conversor hex, você recebe 8901B090de volta. E se você observar atentamente, essas são as primeiras 4 instruções hexadecimais do despejo de objetos (na ordem inversa).

Pelo que sei, conjuntos de 4 números hexadecimais são sempre usados ​​para converter em decimal, e o principal truque de economia de bytes usado aqui é estruturar o assembly para que os últimos números hexadecimais em nossos 4 conjuntos sejam 00. Esses serão transformados para zeros à esquerda quando os colocamos na .intdeclaração que são apenas omitidos.

É isso que está acontecendo na 12declaração. Na parte hexadecimal do objeto despejo, isso é 0c 00 00 00.

Isso é tanto quanto meu entendimento da Assembléia chegou em duas semanas. Que curso intensivo!

Incidente

O incidente foi uma solução mais difícil na implementação mais curta da montagem, porque pesou os tokens poliglotas muito mais pesados ​​até o topo. Aqui está o relatório de incidentes.

  • ! na linha 2 detokenizes !

  • O primeiro EAda linha INTERCAL se dissimula

  • O último espaço da segunda à última linha detokenizes um token de espaço-espaço.

  • 85 na última linha detokenizes

  • O Rin #<R>"3"O.detokenizesR

  • 65em <>{#65 }//tokens65

  • 16 na última linha se decodifica

  • 89 na última linha se simboliza

Cardeal

Acabei de perceber que fiz uma alteração no cardeal que esqueci de documentar. Passei um tempo bisbilhotando procurando maneiras de salvar bytes e decidi aprender o cardeal. Depois de algum tempo com a documentação, vi essa linha.

= copia o valor ativo do ponteiro para seu valor inativo.

Este não era um truque usado na poliglota. A solução antiga incluía estas instruções: `++ ~ * t

++ incrementos de até 2.

~ altera a pilha ativa

* adiciona as pilhas.

Percebi que isso ~*poderia ser alcançado apenas com as =instruções, então reformulei a solução para fazer algumas trocas de pilha inúteis e adicionar essa pequena economia de bytes.


3
Estou intrigado com a forma como você pode manter a poliglota nesse estágio incrível. Como???
Qwerp-Derp

3
Isso é realmente uma coisa de pura beleza.
Muzer #

Unário deve ser o próximo
Christopher

Não, isso seria matar a pontuação VIP (a menos que o código foi de 3 bytes ou menos)
CalculatorFeline

19

6. SMBF , 45 bytes

#v<++++<;n4
#>3N.
print('1'if 1/2else'5')
#i2

Experimente online

Este programa imprime 1 em Python 3, 2 em V, 3 em Minkolang v0.15, 4 em> <>, 5 em Python 2 e 6 em SMBF.

O SMBF (também conhecido como Brainfuck de modificação automática) usa <++++<>.. O ponteiro é movido para a esquerda (até o último caractere do código-fonte) e a célula é incrementada quatro vezes e depois impressa.


17

13. Ruby (129 bytes)

#v;2^0;7||"<+0+0+0+<*!2'!1'L;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

Observe o Esccaractere literal na última linha entre the je d, conforme a resposta Perl de ais523 .

Experimente online!

Isso imprime 1 em Python 3, 2 em Vim, 3 em Minkolang, 4 em <> <, 5 em Python 2, 6 em SMBF, 7 em Japt, 8 em Retina, 9 em Perl, 10 em Befunge, 11 em Befunge- 98, 12 em Fissão e 13 em Ruby.

Apenas uma pequena modificação na printdeclaração existente para abusar do fato de que0 Ruby ser . Eu tive que adicionar alguns espaços às outras instruções para fazer a análise corretamente.


17

15. Palheiro (141 bytes)

#v;2^0;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

Nota: existe um ESCdepoiso na terceira linha e depois jna última linha

Isso imprime 1 em Python 3 , 2 em Vim, 3 em Minkolang, 4 em <> <, 5 em Python 2 , 6 em SMBF, 7 em Japt, 8 em Retina, 9 em Perl, 10 em Befunge, 11 em Befunge- 98 , 12 em Fission, 13 em Ruby, 14 em turtlèd e 15 no Haystack.

Experimente online!

Explicação

#v                           go down
 v
 >                           go right
  3N.                        does nothing important
     15o|                    outputs 15 and ends program
                             there is an <ESC> after 'o' since 'o' in Vim enters insert mode
         1                   I added this to satisfy Retina

Incrível, obrigado por conferir o Haystack! :)
Kade

@Kade É uma linguagem agradável 2D, um intérprete online seria mais útil (embora eu já tenha baixado o interpretador Python) :)
Vacas quack

@Kade Agora existe um link TIO para palheiro!
Vacas grasnam

@MistahFiggins O link funciona para mim e gera 15
Cows quack

@MistahFiggins Cache? Porque ele trabalha para mim, sem quaisquer problemas ou quaisquer mensagens de erro
Vacas quack

17

9. Perl, 84 bytes

#v;7||"<+0+0+0+<;n4
#>3N.
#|\w*
#8
#|

#M`
print(None and 9or 1/2and 1or 5)
#j␛d5ki2

Há um caractere ESC literal no código real entre o je d; foi substituído por um aqui para visibilidade.

Isso imprime 1 no Python 3 , 2 no Vim (testado localmente, mas aqui está um link para a linguagem muito semelhante V), 3 no Minkolang , 4 no <> < , 5 no Python 2 , 6 no SMBF , 7 no Japt , 8 na Retina e 9 em Perl .

Vamos colocar algumas linguagens mais exotéricas, através do abuso da aritmética que funciona de maneira diferente em diferentes idiomas. ( Noneé falsey em Python, mas é verdade em Perl, eand / orchains funcionam da mesma maneira nos dois idiomas.)

Além do Python, também tive que alterar o código vim. Em vez de transformá-lo em uma série de no-ops, eu apenas o deixei inserir lixo e, em seguida, o excluí novamente no final.


4
A sério? Você tornará extremamente difícil para qualquer outra pessoa criar respostas se você inserir um ESC literal. Temos que poder testar o código.
mbomb007

1
Você não precisa incluir o ESC literal em suas próprias respostas; Eu apenas achei que era a maneira mais fácil de escrever este. (Além disso, ele funciona bem no Firefox e em testes locais; a única coisa que me impede de publicá-lo é que o Chromium, que eu uso para o SE, não deseja colocá-lo na caixa de entrada.)

1
Além disso, você não pode testar localmente o Vim. Os idiomas são definidos pelo intérprete usado. Então é realmente V que nós tivemos todo esse tempo.
Mbomb007

1
Err, não é vimum intérprete para o Vim? (Ele funciona em ambos vime V, embora.)

4
@ ais523 talvez você possa colocar ␛ para representar o byte 0x1B?
betseg 07/12/16

17

36. Labirinto , 647 bytes

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N36!@@15o|>␉^?.*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q2229991#;abcd!fghij/+23!@"26

é uma guia literal, um caractere ESC literal; O Stack Exchange alteraria o programa de outra forma. Eu recomendo copiar o programa da caixa "entrada" do link TIO abaixo, se você quiser trabalhar nele.

Experimente-os online!

Atropelar

Este programa imprime 36 em Labyrinth, 35 em INTERCAL, 34 em Rail, 33 em Incident, 32 em Whirl, 31 em SNUSP modular, 30 em espaço em branco, 29 em Trigger, 28 em Brain-Flak, 27 em Perl 6, 26 em 05AB1E , 25 em Pip, 24 em Thutu, 23 em Hexagony, 22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng, 18 em Cardinal, 17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission, 11 em Befunge-98, 10 em Befunge-93, 9 em Perl 5, 8 em Retina, 7 em Japt, 6 em SMBF, 5 em Python 2, 4 em> <>, 3 em Minkolang , 2 no V / Vim e 1 no Python 3.

Verificação

A maioria dos idiomas é testada pelo driver de teste mostrado acima. Você pode testar o Reng aqui e o SNUSP Modular aqui ; eles produzem 19 e 31 respectivamente. @ ais523 ajudou a depurar e corrigir o código do incidente, que agora funciona.

Como o labirinto funciona

O labirinto começa a mudar algumas das colunas da fonte um pouco, mas depois de alguns passos o ponteiro chega até Na segunda linha (inicialmente, quando o ponteiro chega lá, ele não está mais Nlá), movendo-se para a direita , com um 0 no topo da pilha. Em seguida, simplesmente empurra e imprime um 36 e termina com36!@

Coisas que eu fiz quebrou

Eu sabia que queria adicionar labirinto, pois é um dos poucos esolangs que eu conheço um pouco. Com o depurador, descobri que, alterando o 8 na última linha para 0, o Labyrinth não ficou preso em um loop infinito e, estranhamente, nada mais parecia quebrar. A partir daí, eu apenas joguei no comando bruto e de saída 36 que eu precisava, e esses convenientemente levaram a um @para encerrar as coisas.

Depois, reparei o que eu quebrei: Minkolang, Cardeal e Hexagony.

O !estava fazendo Minko pule o próximo personagem, o que ele precisava para terminar, então eu apenas acrescentou um extra @. Por enquanto, tudo bem.

A mudança no comprimento da 2ª linha fez o Cardinal perder sua declaração de saída. Tentar adicionar um extra .na primeira linha fez o Prelude perder a cabeça (não sei porquê, honestamente), então eu segui um método diferente e simplesmente o deixei na segunda linha. Isso, inadvertidamente, gerou um terceiro ponteiro do Cardeal, então eu preenchi as coisas com uma ?(não é uma escolha necessária, apenas a primeira coisa que achei que consertava tanto a Fissão quanto o Cardeal).

Felizmente, a hexagonia foi uma correção relativamente simples, eu apenas joguei uma série de letras para que o ponteiro encontrasse o código. Achei que o alfabeto não deveria ter aparecido antes e não causaria problemas com o incidente. Foi também quando percebi que não havia testado o Incident. Graças a @ ai523, descobri que só precisava de um ponto de exclamação extra, então a estring do alfabeto foi alterada para a !.

Pontuações da versátil impressora inteira

Apenas para dar um pontapé no comentário de @Stewie Griffin sobre a pergunta, aqui está um trecho que mostra como cada resposta teria sido pontuada se fosse inserida na "The Verstatile Integer Printer".


1
OK, parece que isso causa apenas um pouco de incidente; o programa fora do centro devido a agora ter exatamente três pontos de exclamação, mas isso pode ser facilmente corrigido alterando um caractere de preenchimento para um quarto ponto de exclamação. Mudei o eno alfabeto que você adicionou a um ponto de exclamação; isso parece funcionar.

1
Agradável! Eu tenho esperado secretamente pelo labirinto, tão bom em você. Em uma nota separada, a melhor parte do código até agora (para mim) é a mensagem "PLEASEGIVEUPPLEASE", dizendo para você parar de tentar. ;)
MildlyMilquetoast

17

41. brainf *** , 916 bytes

#  4"16" 3//v\(@#/;\D"14"<;n4
#/*`3 afaaZ">;[77*,68*,@;'1,'1,q)(22)S#   ␉␉␉␉ (
#yy␉;36!@
#`<` ␉
#=␉x
#<]+<[.>-]>[
#␉<
###xR+++++[D>+++++++L+++<-][<<<]>+.---.>][
#px%>~~~+␉+~*ttt*.x
#D>xU/-<+++L)
#R+.----.R␉>]|
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#|␉
print((eval("1\x2f2")and(9)or(13   ) )-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
###; console.log  39
""""#//
=begin␉//
#*/
#define␉z  sizeof 'c'-1?"38":"37"
#include<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);}/*'``
$'main'␉//
#-3o4o#$$$
<>"3"O.<␉>//
#
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  a>>>
#>27.say# /7Jn~15o|  
#8␛dggi2␛`␉|1|6$//''25  =#print(17) ###^_^_LEintnd"3"z!]/}23!@/*///Z222999"26

é uma guia literal, um caractere ESC literal; O Stack Exchange alteraria o programa de outra forma. Eu recomendo copiar o programa da caixa "entrada" do link TIO abaixo, se você quiser trabalhar nele.

Experimente online!

Pontuação VIP (Impressora Inteira Versátil): 0,01329

Atropelar

Este programa imprime 41 em brainf ***, 40 em Minimal-2D, 39 em CoffeeScript, 38 em C, 37 em C ++, 36 em labirinto, 35 em INTERCAL, 34 em trilho, 33 em incidente, 32 em turbilhão, 31 em SNUSP modular, 30 em espaço em branco, 29 em gatilho, 28 em Brain-Flak, 27 em Perl 6, 26 em 05AB1E, 25 em Pip, 24 em Thutu, 23 em hexagony, 22 em Underload, 21 em Nim, 20 em Prelude, 19 em Reng, 18 em Cardinal, 17 em Julia, 16 em Pyth, 15 em Haystack, 14 em Turtlèd, 13 em Ruby, 12 em Fission, 11 em Befunge-98, 10 em Befunge-93 , 9 em Perl 5, 8 em Retina, 7 em Japt, 6 em SMBF, 5 em Python 2, 4 em> <>, 3 em Minkolang, 2 em V / Vim e 1 em Python 3.

Verificação

A maioria dos idiomas é testada pelo driver de teste mostrado acima. Você pode testar o Reng aqui e o SNUSP Modular aqui ; eles produzem 19 e 31 respectivamente, conforme necessário.

O driver de teste foi atualizado para incluir o tokenizador, finalmente. Todo o código C é armazenado como argumento da perspectiva do Bash Script. Também alterei a saída para quebrar horizontalmente com um espaço à direita após cada token, em vez de sair verticalmente. Essa era apenas a minha preferência, para que correspondesse à saída de espaço em branco. Mas qualquer um pode mudar se achar que é muito confuso.

Também fiz um ajuste no Test Driver para lidar com o espaçamento das colunas do char UFT8 da Turtlèd no resumo. Esse desalinhamento estava me deixando louco! A “correção” é bastante hack-ish, uma vez que apenas procura um è e altera a largura da coluna nesse caso, mas faz o trabalho.

Explicação

Primeiro, quero dizer o quão incrível a Versatile Integer Printer da SnoringFrog snippet de código de pontuação de última postagem. Eu tenho calculado respostas antes de postar por um tempo, e isso me inspirou a mantê-lo pequeno. Acho que podemos vencer a resposta do @ sp3000 eventualmente.

Então comecei a trabalhar nessa resposta, tentando jogar o que pude e tive muito sucesso. Eu até tive uma resposta em um idioma diferente, com uma contagem total de bytes menor que # 40. Mas, quando tentei jogar golfe no Minimal-2D, tive que aprender BF para poder trabalhar melhor com seus derivados e, no processo, encontrei o recorde do @ Primo quebrando o Hello, World! . Eu me apaixonei pela elegância.

O Minimal-2D, ao que parece, não era eficiente o suficiente para utilizar a técnica de inicialização de fita usada pelo @Primo, mas sou da opinião agora que provavelmente seria muito pesado de qualquer forma. Afinal, estamos apenas tentando imprimir um número inteiro. Mas o @Primo me enviou o caminho para aprender a multiplicar em BF, que eu trouxe para o código do Minimal-2D.

Depois de tudo isso, reli o comentário do @ SnoringFrog sobre como incluir o BF e percebi que não apenas eu poderia fazê-lo, como também poderia usar grande parte do código 2D mínimo que eu tinha jogado na resposta do BF. Então eu procurei responder com BF, e aqui estamos nós.

Mais uma coisa antes de eu entrar nos detalhes. Houve algumas alterações que fiz por motivos não relacionados ao golfe. Primeiro, mudei a maior parte do código @SnoringFrog adicionado logo abaixo das linguagens 2D nas várias linhas superiores. Para mim, é um movimento estratégico de longo prazo para evitar que langs 2D atravessem o centro do poliglota, a fim de evitar erros futuros sempre que possível. O acerto de bytes foi baixo para essa mudança, então eu fui a favor.

Segundo, durante os vários re-fatores, aprendi que o Begunges e o Minkolang produzem um espaço à direita após as saídas numéricas e que essa foi a causa dos bytes nulos que vimos no Driver de Teste para esses idiomas. Eu os corrigi produzindo o valor da pilha como um código ascii (que não incluía o recurso de espaço à direita), em vez do valor diretamente. Também houve um pequeno byte atingido para essa alteração, mas agora a saída do Test Driver é tão uniforme. Como eu não poderia?

SM / BF

Vamos analisar rapidamente o básico. Estes são os únicos comandos válidos para SMBF e BF:

>   Move the pointer to the right
<   Move the pointer to the left
+   Increment the memory cell under the pointer
-   Decrement the memory cell under the pointer
.   Output the character signified by the cell at the pointer
,   Input a character and store it in the cell at the pointer
[   Jump past the matching ] if the cell under the pointer is 0
]   Jump back to the matching [ if the cell under the pointer is nonzero

Ambos os idiomas possuem uma fita de memória na qual os valores são armazenados e alterados. A única diferença do SMBF é que qualquer código que está sendo executado também é armazenado na fita de memória à esquerda do ponto de partida. Como o @SnoringFrog apontou, fazer com que o SMBF e o BF produzam resultados diferentes depende de mover o ponteiro da memória para a esquerda da origem. No intérprete BF de Tio, o ponteiro de memória é capaz de se mover para a esquerda da origem e encontrará 0 em vez dos códigos ascii do Polyglot que o SMBF vê. Aqui está um exemplo que pode ser executado no SMBF e no BF para exemplificar a diferença.

No início da poliglota, os Befunges exigem que a >segunda linha seja executada até a conclusão e o Perl6 exige que todos >sejam precedidos por a <. Então, o SM / BF começa com <>o ponteiro de memória na origem e, em seguida, atinge um [que salta alguns caracteres ofensivos dos dois idiomas para ]a 6ª linha.

Em seguida, incrementamos a célula de memória de origem para os dois idiomas e movemos o ponteiro de memória para a esquerda com +<. (Por convenção conversacional, chamaremos a célula de memória de origem como célula 0, células à direita da origem 1, 2, ... E células à esquerda -1, -2, ...). A célula -1 contém o código asci do último caractere na poliglota no SMBF e 0 no BF; portanto, quando o próximo [é encontrado, apenas o BF passa para o próximo ]enquanto o SMBF passa para o código.

À medida que o SMBF percorre, [.>-]ele imprime os 6 encontrados no final da poliglota e move o ponteiro da memória de volta para a célula 0, configurando seu valor novamente para zero para sair do ]. Para revisar, as fitas deste litro são: as células negativas do SMBF retêm a poliglota e são 0 e as células positivas retêm zero. As células negativas e positivas do BF mantêm zero, enquanto a célula de origem mantém 1.

Em seguida, >move o SMBF para a célula 1 e o BF de volta para a célula 0, permitindo que o BF insira seu bloco de código privado: [<+++++[>++++++++++<-][<<<]>+.---.>](removi os caracteres não BF disso). Aqui, voltamos à célula -1 e inicializamos nossa variável de controle de loop (célula -1) para um valor de 5. Em seguida, inserimos o loop em que adicionamos 10 à célula 0 e diminuímos a célula -1 cinco vezes antes de sair do loop em que estaremos apontando para a célula -1 com o valor 0.

Em seguida, encontramos o [<<<]ponto zero, para que o BF não passe por isso. O objetivo aqui é equilibrar um número de >s com os anteriores <para que o Perl6 não se engane.

Nesse ponto, a célula 0 é avaliada em 51. O valor ascii de 4 é 52, então movemos o ponteiro para a célula 0, adicione 1 e imprima o valor. E, finalmente, decrementamos a célula 0 de volta para o caractere ascii 1 e imprimimos novamente antes de definir o ponteiro de memória para a célula 1 (valor 0) para sair após o ].

SMBF e BF atingem o último [na linha 8 a seguir, enquanto ambos estão descansando em um valor 0. Portanto, os dois pulam o código Minimal-2D restante até que ]seja encontrado na linha 11. Mas isso é de curta duração, porque a linha 12 começa com outra [que leva os dois idiomas quase ao final do poliglota, onde não há instruções adicionais.

Refatores

Mínimo-2D

A reescrita do Minimal-2D foi principalmente para salvar alguns bytes de maneira semelhante ao truque de multiplicação do BF. Minimal-2D, no entanto, não possui os caracteres [e ]para controle de loop. Em vez disso, possui estes comandos:

/   Skips next instruction if the data pointer is set to 0.
U   Tells the program to switch to the up direction of processing instructions.
D   Tells the program to switch to the down direction of processing instructions.
L   Tells the program to switch to the left direction of processing instructions.
R   Tells the program to switch to the right direction of processing instructions.

Eles podem ser usados ​​para produzir a mesma estrutura lógica, embora em uma mansão 2D, como a do BF. Por exemplo, BF's ++++++[>++++++<-]>.é equivalente a isso no Minimal-2D.

Aqui está uma versão simplificada do código do Minimal-2D no poliglota, com todo o código estranho removido e todo o lugar que contém os caracteres substituídos #.

###################D
###R+++++[D>+++++++L
###>
D>#U/-<+++L)
R+.----.R

A Dlinha 1 envia o ponteiro de instrução para baixo Lna linha 8 da poliglota que envia o ponteiro para a esquerda. Aqui, configuramos a variável de controle do loop (célula 0) para 7, movemos o ponteiro da memória para a célula 1 e inserimos um loop. No loop, adicionamos 3 à célula 1, diminuímos a célula 0 e verificamos se o valor da célula 0 ainda é zero. Caso contrário, adicionamos outros 8 à célula 1 e depois decrementamos e verificamos novamente. O resultado desse loop é que o valor da célula 1 é definido como 51 no final do loop (6 * 8 + 3).

Saímos do loop pulando o U, movendo o ponteiro de memória para a célula 1 e descendo então para a direita na linha 11 do poliglota. E, finalmente, aumentamos o valor de ascii para 4 e depois diminuímos para o valor de ascii para 0 antes de correr para a direita para finalizar o programa.

Retina

A Retina tinha muitos requisitos difíceis de trabalhar para todos os derivados do AM. Não gosta de consecutivos +ou incompatíveis ()ou []. Mas esses são realmente apenas requisitos para todas as outras linhas; portanto, muito do trabalho para BF, SMBF e Minimal-2D girava em torno de colocar a maior parte do código em linhas pares.

O byte comprometido apenas com Retina é o |final da linha 11. Para citar @ ais523 “a maioria das expressões regulares termina com | vai combinar com qualquer coisa ”. Sem isso, Retina retorna 0. Por que isso corrige, eu não sei. Não tive que me aprofundar muito em Retina, provavelmente porque tenho evitado a longa fila. Mas, como o Prelude, descobri que não preciso entender tanto quanto preciso entender como depurar, que neste caso consistia principalmente em excluir linhas (em múltiplos de 2) até encontrar a linha isso está causando a quebra. Imaginei essa correção com base no comentário de @ ais523 e fui recompensado. Eu sou legal demais para a escola, eu acho.

Cardeal

Acontece que eu gostei do posicionamento do @ SnoringFrog do Minimal-2D em relação ao código do Cardinal. É uma boa localização, considerando que o Cardinal não perturba a Retina, e parecia permitir alguma interligação com o Minimal-2D. Então, quando decidi transplantar o Minimal-2D até o 2D, levei o Cardinal para o passeio. Houve algumas mudanças cosméticas no Cardinal. Primeiro, joguei >quase o início de sua declaração #p x%>~~~+ +~*ttt*.xpara o Minimal-2D para alterar os ponteiros de memória dentro de seu loop / Segundo, mudei tudo para um caractere à direita para dar espaço ao Minimal-2D para sair do loop normalmente. O pnesta picada é para este preenchimento de caracteres.

Befunge / 98

Na verdade, os Befunges foram onde eu comecei tentando jogar golfe no poliglota, já que o refator C ++ alterou todos os outros códigos lang 2D, exceto este. Ao tentar descobrir que o WTF estava acontecendo neste código, encontrei isso na documentação do Begunge:

O .comando retira um valor da pilha e o gera como um número inteiro decimal, seguido por um espaço , um pouco como Forth. ,exibirá um valor, interpretará como o valor ASCII de um caractere e produzirá esse caractere ( não seguido por um espaço ) .

Santo Moley! Podemos limpar os bytes nulos na saída. Depois disso, tudo era apenas uma questão de descobrir como inserir valores maiores de asci e segregar o código. Befunge-98 tinha um código de salto ;dizendo-lhe para pular o [77*,68*,@no ;[77*,68*,@;'1,'1,q, que nos deu a segregação.

O Befunge-98 também tinha um comando ( ') para pegar o código ascii do próximo caractere. Portanto, '1,pega o código código ASCI do caractere 1, coloca-o na pilha e depois imprime o caractere ASCII para o valor mais alto da pilha com ,. Só preciso fazer isso duas vezes para imprimir 11 e soltar a qpara sair normalmente.

Befunge adequado é um pouco menos conveniente, mas apenas justo. Aqui temos que fazer um cálculo para colocar o código desejado na pilha. Felizmente, nossos códigos foram facilmente multiplicados por 7 * 7 e 6 * 8 antes do mesmo comando de saída ,. Então saímos de Befunge @antes que o código do irmão mais velho contaminasse a saída.

Minkolang

Depois de encontrar uma correção para os espaços de fuga do Befunge, fiquei muito empolgado com a idéia de encontrar uma correção de Minkolang também e a documentação de Minkolang dizia que o comando de saída usado até esse momento funcionava da mesma maneira que o intérprete de Befunge. OPor acaso, foi documentado como outro comando de saída, que não foi descrito como compartilhando esse princípio, então apenas tirei uma foto no escuro e tentei emitir a string"3" . Vitória perfeita.

> <>

Uma das primeiras coisas que observei ao mover o código 2D mínimo foi verificar se eu podia mover> <> junto com ele. Se eu ia lidar com o transversalismo poliglota 2D, eu lidaria com todas as transgressões. Basicamente, tive sorte em encontrar a solução de colocar ;n4 no final da linha 1 e \Dvoltar mais para a linha 1. BTW, eu não sabia que> <> poderia ser direcionado antes da resposta 40, pois está muito bem contido . Eu gostaria de pensar que isso poderia ser usado mais tarde para divergir> <> de outro idioma semelhante.

Perl6

Eu já falei sobre alguns dos <>problemas de balanceamento do Perl6 em outras partes desta resposta, por isso não vou repassar isso novamente. Mas quero ressaltar que mudei #>27.say#para a penúltima linha. Isso não tem um objetivo funcional nesta resposta. Na verdade, fiz esse movimento para satisfazer uma resposta diferente que acabei não usando nesta rodada. Decidi deixá-lo, pois pretendo postar essa resposta na minha próxima oportunidade e não queria me incomodar em desfazer e refazer.

Correções de bugs

05as1e

O 05as1e definitivamente não gostou do novo código Begunge tanto quanto da versão antiga. Suponho que seja o ,s, já que esse é o único personagem revolucionário. De qualquer forma, tive que "recuar ainda mais na linha dois para ocultar os comandos ofensivos, e sabia que eles "tinham que ir antes do caminho do código Befunge, pois "era um sim nos dois idiomas. (Posso apenas criar termos como sim-op, certo?) A bidimensionalidade da linha 2 é bastante rígida, mas pude deslocar o <caminho de código anterior ao Begunge pelo ". No <entanto, era um requisito do Perl6. (Ele deve ter <todos os >s precedentes .) Consegui soltar a <linha um em um local divinado por instinto e conhecimento prévio, resolvendo a discordância de 05ab1e e Perl6.

Turbilhão

As alterações Befunge na linha 2 adicionaram um extra 1ao poliglota antes da linha Incidente / Giro. Esse extra 1fez com que o Whirl começasse a apontar para as instruções erradas no volante. A primeira 1na diretiva de pré-processador do C / C ++ era apenas uma referência de número de linha no código, e isso poderia ser facilmente qualquer outro número de linha, então eu mudei isso arbitrariamente 4para satisfazer o Whirl.

Incidente

A cadeia de decodificação no final da poliglota é bem conhecida neste momento, então não vou entrar nela. Eu removi da string o que pude e adicionei os novos tokens necessários. Existem 2 caracteres de descriptografia que não estão nessa string, embora eu deva apontar. Em primeiro lugar, o segundo Rem #R+.----.R >]|é necessária aqui, porque é um ponto de fusão de partida, e que era mais seguro nesta linha porque já havia um ponto de título Fusão de partida na mesma direção. Segundo, o xin #= xé remover um token envolvido em um ␉␊#padrão, que se tornou mais comum.

Outras

Hexagony, Whitespace e Prelude todos tiveram os pequenos ajustes usuais, mas nada de especial que valha a pena falar.

Pensamentos finais

É tudo o que tenho para esta resposta. Para aqueles que procuram um ponto de partida para a próxima resposta, sugiro o mal. Parece viável, embora eu não tenha olhado muito de perto, mas suspeito que não seria muito difícil de integrar. Eu sei que ele tem um comando de salto que deve ajudar a ignorar a maior parte do poliglota. Boa sorte.


Falha no incidente (ele imprime 3333e aguarda a entrada), mas provavelmente é facilmente corrigível. O problema é que você colocou um token ( -]) após o ^-token usado anteriormente para pular para o final do programa. Os outros dois usos de -]são consecutivos, de modo que formam um padrão… xx… x…, que é um salto para trás. Mover essa última -]um pouco mais cedo (ou a ^_sa um pouco mais tarde, ou ambas), no entanto, provavelmente será bastante fácil.

@ ais523 Obrigado. É isso que recebo ao jogar golfe enquanto escrevo. Lembre-se sempre de verificar as crianças do incidente. Felizmente, eu pude consertar este com adição por subtração, então a vitória geral, eu acho.
Chance

1
Se você executar o V com -v(para detalhado), poderá substituir um caractere de escape literal por <esc>, o que poderá facilitar um pouco o trabalho com o código no futuro. (
Pavel

Uau! Obrigado @ ais523 pela recompensa. Que ótima maneira de começar segunda-feira de manhã!
Chance

Befunge-98 é mais antigo que Befunge-93?
CalculatorFeline

17

183. Imagem de inicialização Intel 8080 (ZEMU), 9870 bytes

Experimente online!

Explicação

Graças a Potato44 pela idéia de adicionar código de máquina, foi muito divertido fazer essa resposta.

Eu não fiz o arquivo COM CP / M porque restringe o tamanho da poliglota a cerca de 60 KB, o que eu quero evitar. A imagem de inicialização ficou ainda mais fácil do que COM, porque o ZEMU carrega o setor de inicialização do 6º setor por padrão (setores lógicos de 128 bytes com base em 1), portanto, o início do poliglota não precisa ser executado. O código de inicialização deve estar no deslocamento 0x280 ((6-1) * 128) na poliglota.

Eu uso o emulador ZEMU, que está vinculado nesta página . Para executar o poliglota no ZEMU:

  • Discos> A: selecione arquivo poliglota
  • Opções> Conjunto de instruções I8080
  • Pressione o botão Boot

A função que imprime um caractere no console ( cns$ot) foi copiada do BIOS22Dv221.ASM da distribuição do ZEMU. Fiz duas alterações: o caractere não é mascarado no ASCII de 7 bits porque controlamos os parâmetros e jrz cns$oté substituído jz cns$otporjrz (salto relativo se zero) é a instrução Zilog Z80 que não está presente no Intel 8080.

Programa inicial ( sintaxe da Intel , assembler vinculado aqui ):

    org 3120h    ; chosen so that cns$ot == 0x3131, easier to generate
                 ; this program will be generated at this offset
                 ; to run it directly specify org 0100h

    mvi c,31h    ; '1'
    call cns$ot
    mvi c,38h    ; '8'
    call cns$ot
    db 38h       ; for answer 188, NOP in I8080
    mvi c,33h    ; '3'
    call cns$ot
    hlt          ; halt processor

;;;;;;;;; copied from BIOS22Dv221.ASM
cno$sp equ 7dh
cno$sb equ 01h
cno$si equ 00h
cno$dp equ 7ch

; print char to console, receives char in c register
cns$ot:
    in cno$sp    ; in status
    xri cno$si   ; adjust polarity
    ani cno$sb   ; mask status bit
    jz cns$ot    ; repeat until ready
    mov a,c      ; get character in a
    out cno$dp   ; out character
    ret

Este programa contém caracteres que não podem ser usados ​​diretamente no poliglota. A maioria dos caracteres de controle ASCII (código <0x20) é proibida no Simula, caracteres não ASCII (código> = 0x80) não podem aparecer sozinhos porque o arquivo deve ser UTF-8 válido. Portanto, o programa acima é gerado por outro programa que é UTF-8 válido.

O programa a seguir gera o código necessário e salta para ele. ld (hl),anão pode ser usado por causa de Grass ( 'w'==0x77). sub h(0x94) e xor a(0xAF) são bytes de continuação UTF-8, devem ser anexados com byte de avanço UTF-8. A instrução ret nc(= 0xD0, retorno se não transportar) é usada como byte de chumbo UTF-8. Para fazer com que não faça nada, é precedido com scfinstrução (definir sinalizador de transporte). Também evitado ','(0x2C) e '.'(0x2E) para DOBELA. org 0100hA diretiva não é usada porque o assembler usado não a entende (a organização é definida na GUI). Este programa é independente da posição de qualquer maneira. Eu gosto mais de mnemônicos Zilog, então usei-os para programas mais longos.

Sintaxe Zilog , assembler vinculada a partir daqui :

  ; generate: 0E 31 CD 31 31 0E 38 CD 31 31 38 0E 33 CD 31 31 76 DB 7D EE 00 E6 01 CA 31 31 79 D3 7C C9

  ld hl,3120h

  ld a,3Fh
  scf       ; set carry flag so that ret nc does nothing
  ret nc    ; utf8 lead byte for next insn
  sub h     ; a -= h; a = 0Eh;  utf8 cont byte (opcode 0x94)
  ld c,a

  ld (hl),c ; 0Eh    ; not using ld (hl),a because it is 'w'
  inc hl

  ld (hl),h ; 31h
  inc hl

  ld a,32h
  cpl       ; a = ~a; a = 0xCD
  ld d,a
  ld (hl),d ; CDh
  inc hl

  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),38h ; 38h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),38h ; 38h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),33h ; 33h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),76h ; 76h
  inc hl

  ld a,23h  ; not using ld a,24h because it has '$' (breaks SNUSP)
  inc a
  cpl       ; a = ~a; a = 0xDB
  ld d,a
  ld (hl),d ; DBh
  inc hl

  ld (hl),7Dh ; 7Dh
  inc hl

  ld a,c    ; a = 0Eh
  cpl       ; a = F1h
  dec a
  dec a
  dec a     ; a = EEh
  ld d,a
  ld (hl),d ; EEh
  inc hl

  scf
  ret nc
  xor a     ; a ^= a; a = 0; utf8 cont byte
  ld c,a
  ld (hl),c ; 00h
  inc hl

  ld a,4Ah
  scf
  ret nc
  sub h     ; a -= h; a = 0x19;  utf8 cont byte
  cpl       ; a = ~a; a = 0xE6
  ld d,a
  ld (hl),d ; E6h
  inc hl

  ld a,c
  inc a
  ld d,a
  ld (hl),d ; 01h
  inc hl

  ld a,35h
  cpl       ; a = 0xCA
  ld d,a
  ld (hl),d ; CAh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),79h ; 79h
  inc hl

  ld a,2Dh  ; not using ld a,2Ch because it has ','
  dec a
  cpl       ; a = 0xD3
  ld d,a
  ld (hl),d ; D3h
  inc hl

  ld (hl),7Ch ; 7Ch
  inc hl

  ld a,36h
  cpl       ; a = 0xC9
  ld d,a
  ld (hl),d ; C9h

  ld sp,3232h  ; set up stack for generated program

  ld hl,3120h  ; not using ld l,20h because it has '.'
  jp (hl)      ; go to generated program 
               ; confusing mnemonic - actually it is jp hl, ie. PC = HL
               ; opcode 0xE9, utf8 lead byte (0xE9 = 0b11101001), must be followed by 2 cont bytes
  db 80h,80h

Este programa é montado em:

! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退

Ele deve estar no deslocamento 0x280 no poliglota (consulte a linha 2). O teste de abstração no driver de teste verifica isso.

Refatorações

Cartuchos

Movido as conchas de volta para a linha mais longa. Eu gosto mais desse layout porque os parênteses não se alinham com outros idiomas. Movidos Moorhenses e Flaks antes das conchas, para que não quebrem quando as conchas são trocadas. A linha mais longa tem esse layout agora:

Grass  Moorhenses  Flaks  Shells  Rubies/Pythons/Perl5  PicoLisp  Prelude  Klein001

Novo código de conchas:

a=$(printf \\x00)
b=$(echo -n $a | wc -c)
case $b[1] in 1*)echo 54;; 4*)echo 78;; 8*)echo 166;; *1*)echo 50;; *)echo 58;; esac
exit

Código de cascas antigas:

a=$(printf \\x00)
b=${#a}
case "{"$ar[1]"}"${b} in *1)echo 54;; *4)echo $((19629227668178112600/ 118248359446856100));; *1*)echo 50;; *)echo 58;; esac
exit

O comprimento de $aé calculado até $(echo -n $a | wc -c)agora ( daqui ). Inicialmente eu usei isso para me livrar #, mas agora ele é usado por causa de um código mais curto. Os reservatórios podem conter #porque os flocos estão antes dos reservatórios.

O Yash (166) usa o comando de eco interno que não suporta opções por padrão, portanto "-n" e avanço de linha acabam fazendo parte da saída, o que fornece 4 bytes adicionais. Quando não definido, o ECHO_STYLEpadrão é SYSV( -nopção não aceita).

Esse link TIO testa o código em todos os shells.

Adicional (((((antes dos reservatórios consertarem Underload e Retina. Mais um par de parênteses é adicionado para ocultar 58do Prelude (fechado com #)depois exit). {antes ((((((é para Japt, sem ele Japt trava.

Flaks

Devido à realocação do Flaks, o código inicial pode ser simplificado - resta apenas ([]):

     line 21      (Grass(([5]{})))    scripting langs                  clear stack     Flaks main code                                                                                      begin skip code      the rest of polyglot   end skip code   print(85)
old: []{}[][][]   ((([]{})))          ((()()<<()>>)((()([])))<<()>>)   {}{}{}{}{}{}{}  ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()
new: []{}[][][]     ([]  )                                                             ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()

Este link TIO testa o código em todos os Flaks.

Fissão e Cardeal

Cisão foi transferida para LNUSP: R"12"R _*. O segundo ponteiro é usado para terminar a fissão o mais rápido possível - na 3ª etapa, veja a resposta 54 para obter mais informações.

Cardeal foi transferida para LNUSP: @ %"18". Como em Fissão, o segundo ponteiro é usado para finalizar o Cardinal o mais rápido possível - no terceiro passo.

MarioLANG

Use em ####...vez de ====...como plataforma:

insira a descrição da imagem aqui

Mínimo-2D

Poliglota com MarioLANG:

insira a descrição da imagem aqui

Wierd & 1L_a

Estranho: use espaço na linha 10 da coluna 79 para refletir o IP.
1L_a, Wierd: o espaço na linha 9 da coluna 79 é importante.

insira a descrição da imagem aqui

Cubicamente

Novo Código: :1*23!/5x%6E0

:1*23!/5x%6E0
! - skip over / in Klein 201
x - destroy Cardinal pointer before it hits /

pure:
:1*23/5%6E0

faceval:
0 0
1 9
2 18
3 27
4 36
5 45

program:
:1   mem = 9
*23  mem *= 18; mem *= 27
/5   mem /= 45
%6   print mem
E0   exit

9*18*27/45 == 97 (integer division)

6 in %6 is used to print mem because 0-5 are used to print faceval (eg. %3 prints 27)
0 in E0 is not an exit code, it is present just to trigger E instruction

Klein 201/100

Novo Código: !|*****[[[828+*+@+*99]]]*****|!

Afinal, a pilha de multiplicações contém um único zero, porque saltar da pilha vazia dá zero. Este zero é adicionado ao número principal com +próximo a @. Anteriormente foi descartado ?, veja resposta Klein 001 .

Como as portas funcionam em Klein:

insira a descrição da imagem aqui

Turbilhão

O código de giro é basicamente o mesmo, a única alteração é que o código principal assume que a operação atual é ops.one (2), não ops.load (4).

Efetivamente, o Whirl pode ser considerado como tendo três operações:

  • 1 gire um passo
  • 0 mudar o sentido de rotação
  • 00 executar instrução atual e tocar o anel

Operações combinadas para simplificar o raciocínio sobre o programa:

  • 0000 se a operação atual do anel inativo é noop, basta executar a operação atual do anel ativo sem efeitos colaterais
  • 11..11 girar n etapas
  • 011..11 alterne a direção e gire n etapas

0000executa a instrução atual do anel ativo, mas também executa a instrução atual do anel inativo como efeito colateral. Se a instrução atual do anel inativo é inofensiva, podemos focar apenas nas operações no anel ativo sem pensar no que está acontecendo com o anel inativo. Isso é especialmente útil neste programa porque possui uma separação clara: primeiro o número 32 é criado usando apenas o anel matemático e, em seguida, alternamos para o anel ops e executamos duas instruções lá (imprimir e sair).

Primeiro, eu queria que a operação atual no anel de operações fosse noop quando o código principal começar a ser executado. Possui 2 vantagens: 1) o código principal do Whirl pode ser executado de forma independente e 2) podemos esquecer completamente o anel de operações ao criar o número 32 com o anel matemático. No entanto, ele torna o código mais longo do que era, então o código principal assume que a operação atual é ops.one (2). Isso significa que ops.value é definido como 1 como efeito colateral das operações matemáticas, que são usadas para impressão. O código antigo alcançou o mesmo efeito com a instrução ops.load, mas o uso de ops.one expressa mais claramente a intenção - definir ops.value como diferente de zero.

at this point current ring is ops, dir = clockwise, cur op = ops.one
00    switch to math ring
011   rotate to math.not
0000  math.not (math.val = 1)
01111 rotate to math.store
0000  math.store (mem[0] = 1)
1     rotate to math.add
0000  math.add (math.val = 2)
01    rotate to math.store
0000  math.store (mem[0] = 2)
011   rotate to math.mult
0000  math.mult (math.val = 4)
0000  math.mult (math.val = 8)
0000  math.mult (math.val = 16)
0000  math.mult (math.val = 32)
011   rotate to math.store
00    math.store (mem[0] = 32), switch to ops ring
up to this point the program is the same as before

01111 rotate to ops.intio
0000  ops.intio - print mem[0] as number
0111  rotate to ops.exit
00    ops.exit

O novo código é mais curto porque o código antigo possui algumas opções de direção redundantes na segunda parte do programa, não por causa de uma nova suposição.

old: (1111) 00011000001111000010000010000011000000000000000001100 01111110000011100
new: (11)   00011000001111000010000010000011000000000000000001100   011110000011100

Como manter o Giro correto ao alterar algo antes da linha Incidente / Giro:

  • verifique se há um número par de 0s antes do código principal de giro
  • garantir que não haja dois 0s consecutivos
  • adicione / remova 1s suficientes até que o Whirl funcione novamente; adicionar n 1s equivale a remover 12 n 1s e vice-versa

Inconscientemente, quebrei a primeira regra quando adicionei o Ropy. Quando houver um número ímpar de 0s, o código principal começará a ser executado com a direção incorreta do anel de operações, que interrompe a instrução de saída. Então agora existe 0na linha 3 que compensa 0na linha 1.

Outras

CoffeeScript : console.log a&&39||180( daqui )

INTERCAL : mudou-se para a linha 37
Brainfuck , Agony : mudou-se para outros derivados do cérebro na linha 10

xEec : movido para 1L_a ( h#115# o#)

CSL : movido para a linha 80
Trefunge : movido para a linha 120
Gaot ++ , Stones : colocado em linhas separadas


4
Bom, são muitos bytes para jogar fora.
Potato44

16

16. Pitão (159 bytes)

#v\;2^0\;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^<1b0 <
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#"07|5//00;16 "jd5ki2

Nota: existe um ESCbyte ( 0x1B) após o ona terceira linha e após oj da última linha.

Foi uma experiência divertida. Japt e Pyth são idiomas de golfe, mas Japt é um infixo e Pyth é um prefixo, e Pyth solicita automaticamente a entrada e falha se houver argumentos ausentes.

Antes da resposta do Haystack, eu tinha uma solução quase funcional #, que obtém um código char em Japt e loop até erro em Pyth. Pyth é muito útil em poliglotas, já que o comentário comum# funciona essencialmente como um silenciador de erros.

Quando cheguei em casa, consegui encontrar um código que funcionasse tanto nos // usos, que funciona como um comentário em Japt e em duas divisões em Pyth. Depois, bastava fazer com que os Befunges seguissem corretamente.

É muito improvável que seja ideal, mas é bom o suficiente por enquanto. Tentei testá-los todos, mas eu apreciaria muito que alguém verificasse se os resultados correspondem.

Impressões 1 em Python 3 , 2 em V , 3 em Minkolang , 4 em> <> , 5 em Python 2 , 6 em Brainfuck com modificação automática , 7 em Japt , 8 em Retina , 9 em Perl , 10 em Befunge (-93 ) , 11 em Befunge-98 , 12 em Fission , 13 em Ruby , 14 em Turtléd , 15 em Haystack e

16 em Pyth .

Explicação

O que Pyth vê aqui é:

#v\;2^0\;7||"string
multiline
string"07|5//00;16 "string

Isso se traduz no seguinte pseudocódigo:

while no errors occur:
    evaluate ";"
    print 2
    print 0 to the power ";"
    print 7
    print "string\nmultiline\nstring" or 0 or 7
    print 5 or 0 divided by 0 divided by (missing)
print 16
do nothing with "string"

O primeiro loop termina na tentativa de avaliar ;qual não é uma expressão válida. Então Pyth apenas imprime 16.


Estendendo de que maneira? Ainda preciso de mais 5 bytes disponíveis para minha resposta;)
Alfie Goodacre

@AlfieGoodacre Adicionando o restante dos detalhes à postagem. Eu só queria manter a sanidade e, assim, postou meu código antes que alguém roubasse meu lugar. : D
PurkkaKoodari
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.