Tarefa:
Seu desafio é, com base em envios anteriores e ele próprio como entrada, gerar o idioma em que foram escritos, no seguinte formato:
Digamos que o primeiro programa esteja em Ruby. Ele deve ser produzido 1
, porque Ruby é a primeira 1
linguagem usada neste desafio. Um exemplo de programa é:
a=gets
puts 1
Quando dado como entrada, ele retorna 1
.
O próximo programa pode estar em Python. Ele deve ser produzido 2
, porque Python é a 2
linguagem nd usada no desafio. Um exemplo de programa é:
print(1 if input()[0]=="a"else 2)
Dada a primeira submissão, ela gera 1
e se entrega 2
.
Você tem permissão para repetir os idiomas, mas não pode enviar uma resposta no idioma da resposta anterior.
Por exemplo, se o terceiro programa estiver em Ruby, ele deve gerar 1
o primeiro programa e ele próprio (porque Ruby é a primeira 1
linguagem usada) e o segundo programa que ele deve gerar 2
.
Regras:
- Se houver
n
respostas atualmente no desafio, deve haver pelo menosfloor(n / 3)
idiomas diferentes. Qualquer envio que quebra essa regra é desqualificado. - Não existem duas "respostas vizinhas" (por exemplo, resposta
n
e respostan+1
) não podem usar o mesmo idioma. - Versões diferentes de um idioma não contam como idiomas diferentes
Python 2 == Python 3
. - As respostas devem receber os envios anteriores na íntegra como entrada.
- O primeiro envio deve receber entrada.
- Você não tem permissão para enviar várias respostas seguidas.
- "Repetir respostas" (respostas que tenham exatamente o mesmo código de um envio anterior) não são permitidas.
- As respostas não têm permissão para ultrapassar a contagem de bytes alocada dessa resposta - consulte "Contagem de bytes alocada" para obter mais detalhes.
Contagem de bytes alocada:
Para cada número de resposta n
, a contagem de bytes alocada para essa resposta é 45 + 5n
.
Formatação da resposta:
Formate sua resposta da seguinte maneira:
# {answer no.}, {language}
{program}
This prints:
- `1` in answer(s) {all answers using 1st language, with links}
- `2` in answer(s) {all answers using 2nd language, with links}
...
{optional explanation}
Para as listas de respostas, faça o seguinte:
- `1` in answers [1]({link to answer}), [3]({link to answer})...
Pontuação:
A primeira resposta a sobreviver após 7 dias sem envios válidos depois disso é declarada vencedora.
fonte
floor(n / 3)
idiomas). Eu estou supondo que este não é o comportamento pretendido.Respostas:
26. > <> (idioma 12), 164 bytes
Meu primeiro programa em> <>! São 156 caracteres, mas 164 bytes em UTF-8.
Isso imprime:
1
com as respostas 1 , 5 , 7 , 9 e 14 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com respostas 4 , 12 e 15 (Javascript).5
com as respostas 6 e 8 (R).6
com as respostas 10 , 17 , 20 , 22 e 25 (Bash).7
com as respostas 11 e 19 (Mathematica).8
com resposta 13 (Python).9
com resposta 16 (Perl).10
com respostas 18 , 21 e 23 (C / C ++).11
com resposta 24 (Zsh).12
com esta resposta (> <>).Experimente online!
Explicação:
A primeira linha é simplesmente a resposta # 5. Ele não faz nada, mas envia o ponteiro da instrução para a linha inferior.
/
vira o peixe para a direita e os personagens^mwfPes{'tc
são colocados na pilha. Um único caractere de entrada é lido (i
). (Vamos chamar esse caractereC
para exposição.) 2 é colocado no registro (2&
). Depois, saltamos para o início da segunda linha (linha 1) (01.
).Essa linha se compara
C
a cada caractere na pilha. Uma cópia deC
é mantida na parte inferior da pilha.{
gira a pilha para queC
fique no topo;:
duplica;}
gira a cópia de volta para o fundo. Nós incrementamos o registro (&1+&
) até que uma correspondência seja encontrada. (Portanto, seC
for "c", o registro conterá 3 quando a correspondência for encontrada; seC
for "t", o registro conterá 4 e assim por diante.) Em seguida, pularemos para o primeiro caractere do número da linha no registro (0&.
) .As linhas 3 a 13 tratam do que fazer quando
C
é c, t, ', {, etc., respectivamente. O ponteiro de instruções está se movendo para trás quando pulamos; ele pousa no primeiro caractere da linha especificada, mas após um salto ele avança um tique antes de executar, e começa a executar a partir do final da linha, retrocedendo. Cada linha empurra o número de idioma apropriado na pilha e envia o peixe para on
instrução que o imprime.^
é o caso mais complicado, devido à minha própria astúcia com a primeira linha desta resposta. A linha 13 lê a entrada até EOF. Em seguida, ele é direcionado para a linha 15, que compara o comprimento da pilha (l
) a 100 (aa*
). Se for mais longo ()?
), adicionamos+
b
e1
obtemos 12, este idioma; caso contrário, 1 permanecerá no topo da pilha.fonte
1. Retina , 0 bytes
Experimente online!
O programa vazio é impresso
1
quando recebe entrada vazia (ou seja, ele próprio), porque conta com que frequência o regex vazio corresponde à entrada (que é sempre1+length(input)
).fonte
2. Brain-Flak , 22 bytes
Experimente online!
Isso verifica o topo da pilha e coloca um na pilha oposta, se for diferente de zero. Em seguida, incrementa e retorna a pilha oposta. Isso faz com que retorne 1 para o programa vazio e 2 para qualquer outra coisa.
Como as pilhas no Brain-Flak são padronizadas como zero, um programa vazio terá um zero no topo da pilha, enquanto qualquer outro programa (exceto programas que terminam em caracteres nulos) terá um valor verdadeiro. Isso significa que podemos executar um programa if muito simples na pilha de entrada.
fonte
3. APL, 7 bytes
Explicação:
fonte
10. Bash (+ coreutils) [idioma 6],
44, 74 bytesVersão fixa (retorna o ID do idioma)
Nota: isso espera a nova linha à direita, após o texto do programa de entrada
fonte
9. Retina (idioma 1), 20 bytes
Experimente online!
Como o plannapus, decidi reescrever para mudar um pouco as coisas, o que também acabou diminuindo consideravelmente o código (uma modificação da minha última resposta para explicar as últimas do plannapus teria terminado em torno de 32 bytes, eu acho).
Explicação
Como minhas outras respostas, isso conta apenas o número de várias correspondências de expressões regulares, mas é muito mais eficiente:
$
corresponde ao final da sequência. Isso sempre funciona, mesmo se houver uma correspondência até o final da string, então isso nos fornece uma linha de base1
para todas as entradas.}\{
encontra uma única correspondência no segundo programa (Brain-Flak), elevando a contagem até lá2
. A barra invertida não é necessária para escapar, mas impede que essa parte do regex se corresponda.[:'][^]']
é bem chique, na verdade. O único objetivo é contar os dois'
no programa APL (linguagem 3) e os três:
no programa JavaScript (linguagem 4), mas precisamos impedir que essa parte seja compatível. Então, nós também garantir que o próximo caractere é nem'
, nem]
(porque aqueles não aparecem após as que não deseja corresponder, mas eles não aparecem neste programa aqui).'
parte anterior já causa uma correspondência nos programas R, por isso precisamos de mais três. A substring,1
aparece nos três vezes e em nenhum outro programa. Nós o combinamos adicionando um limite de palavra tautológico no meio com,\b1
para impedir que ele se corresponda novamente.fonte
1
é simplesmente a saída padrão. Vou ter que fazer algo sobre isso com a próxima resposta.18. C (idioma 10), 121 bytes
Este é o padrão C89 ou C90. Ele funciona com clang ou gcc no Try It Online.
Isso imprime:
1
com as respostas 1 , 5 , 7 , 9 e 14 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com respostas 4 , 12 e 15 (Javascript).5
com as respostas 6 e 8 (R).6
com respostas 10 e 17 (Bash).7
com a resposta 11 (Mathematica).8
com resposta 13 (Python).9
com resposta 16 (Perl).10
com esta resposta (C).Aqui está um driver do bash que o executa com todas as 18 respostas em Experimente online!
Equivalente não destruído (646 bytes):
fonte
5. Retina (idioma 1), 23 bytes
Experimente online!(Testa todas as entradas possíveis.)
Conta as correspondências de várias coisas na entrada:
^$
corresponde à sequência de entrada, ou seja, a primeira resposta uma vez.{}
corresponde a si próprio, dos quais existem dois no segundo programa e um neste.(?![⊂⍴])[⊂-⍴]
combina caracteres com os pontos de código 8834 a 9076, exclusivos , que encontram três correspondências no terceiro programa. Usamos a cabeça negativa para evitar que as extremidades do intervalo sejam correspondidas neste programa.\B=
corresponde a um=
que não é precedido por um caractere de palavra. Isso corresponde a quatro dos=
no quarto programa e não corresponde ao=
neste programa.fonte
7. Retina (idioma 1), 27 bytes
Experimente online! (Testa todas as entradas possíveis.)
Uma pequena modificação da quinta resposta .
\B=
já encontra 4 correspondências na sexta resposta e\b5
encontra outra sem corresponder a nenhuma outra resposta.fonte
4, JavaScript (ES6), 32 bytes
Saídas 1 para uma entrada vazia, 2 se a entrada começar com um
{
, 4 se iniciar com ans
e 3 caso contrário.fonte
s[0]=='{'
pors[0]>'z'
11. Mathematica [idioma 7], 53 bytes
Função sem nome, tendo uma lista de caracteres como argumento e produzindo um número inteiro positivo. Simplesmente ramifique na primeira letra da entrada, usando sua posição na sequência
"^{'sceP"
para decidir sobre a saída. Isso fornece a resposta correta para todos os envios anteriores, exceto o programa Retina inicial vazio e a resposta Retina mais recente ; esses dois erros de cuspe, mas a saída é reparada pela regra/._@__->1
que transforma qualquer função não avaliada em1
.fonte
16. Perl (idioma 9), 94 bytes
Experimente online!(verifica todas as respostas). Saídas "1234151516748149"
Isso imprime:
O programa verifica o comprimento da entrada e mapeia-o para a distribuição de idioma atual.
fonte
6. R (idioma 5), 61 bytes
Verifica qual é o primeiro caractere da entrada e escolhe a saída de acordo.
Isso imprime assim:
1
com as respostas 1 e 5 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com resposta 4 (Javascript).e
5
com esta resposta.Uso:
fonte
8. R (idioma 5), 76 bytes
Verifica a primeira letra da entrada, e compara-o com um vector que contém (por esta ordem) a cadeia vazia,
{
,'
,s
ec
. Em seguida, ele gera o índice da correspondência (a indexação R é baseada em 1) ou 1 se não houver correspondência.O mesmo conceito que a resposta nº 6, mas impede que a resposta nº 7 corresponda a ela.
Isso imprime:
1
com respostas 1 , 5 e 7 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com resposta 4 (Javascript).e
5
com a resposta 6 e esta resposta (R).Se não me engano, a permissão de contagem de bytes para esta resposta foi de 94 bytes.
fonte
readline
deve ser substituído porreadLines(file("stdin"))
. O que significa mais 16 caracteres: a resposta 6 deve, portanto, ter 77 bytes (de 79 permitidos) e essa resposta 92 bytes (de 94 permitidos). Com essa alteração, ele também funciona em intérpretes online.12. Javascript (idioma 4), 117 bytes
Nota: Mudei um caractere para corrigir um erro neste.
Verifica a primeira letra da entrada, se for c, verifica o comprimento da entrada.
Saídas:
fonte
13. Python (linguagem 8), 110 bytes
Nota: Esta resposta foi alterada 6 horas após a publicação, por recomendação do OP.
Essa é a mesma idéia da resposta 10 (no bash), mas no Python 3. (Essa abordagem pode funcionar com no máximo mais 3 entradas antes de ficarmos sem dígitos hexadecimais).
Isso imprime:
1
com as respostas 1 , 5 , 7 e 9 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com respostas 4 e 12 (Javascript).5
com as respostas 6 e 8 (R).6
com resposta 10 (Bash).7
com a resposta 11 (Mathematica).8
para esta resposta (Python).Experimente online! para: Resposta 1 , Resposta 2 , Resposta 3 , Resposta 4 , Resposta 5 , Resposta 6 , Resposta 7 , Resposta 8 , Resposta 9 , Resposta 10 , Resposta 11 , Resposta 12 ou esta resposta .
fonte
24. Zsh (idioma 11), 142 bytes
Minha resposta anterior nº 18 em C ainda funciona sem modificações para todas as entradas subseqüentes ( demo ). Então, vamos misturar um pouco.
O objetivo do comentário no final é corresponder ao tamanho das respostas 21 e 23 e garantir que nenhum caractere único dos hashes sha256 ou sha384 seja exclusivo para todas as respostas até agora, usando os caracteres verificados pelas respostas C ++ de Lyth. ;-)
Isso imprime:
1
com respostas 1 , 5 , 7 , 9 e 14 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com respostas 4 , 12 e 15 (Javascript).5
com respostas 6 e 8 (R).6
com respostas 10 , 17 , 20 e 22 (Bash).7
com as respostas 11 e 19 (Mathematica).8
com resposta 13 (Python).9
com resposta 16 (Perl).10
com as respostas 18 , 21 e 23 (C / C ++).11
com esta resposta (Zsh).Experimente online!
fonte
14. Retina (idioma 1), 39 bytes
Experimente online! (Testa todas as entradas válidas.)
fonte
15. Javascript (idioma 4), 108 bytes
Golfe
fonte
17. Bash (+ coreutils + openssl) (idioma 6), 103 bytes
Golfe
Utiliza a mesma técnica da minha resposta nº 10 , mas com o dicionário codificado em Base64 , em vez de hexadecimal .
Reunimos o seguinte arquivo de dados para teste:
Teste
fonte
19. Mathematica (idioma 7), 96 bytes
Função sem nome, recebendo uma lista de caracteres como entrada e retornando um número inteiro:
1
com as respostas 1 , 5 , 7 , 9 e 14 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com respostas 4 , 12 e 15 (Javascript).5
com as respostas 6 e 8 (R).6
com respostas 10 e 17 (Bash).7
com a resposta 11 e esta resposta (Mathematica).8
com resposta 13 (Python).9
com resposta 16 (Perl).10
com resposta 18 (C).Até o momento, todas as respostas são distintas e até o módulo 59 distinto - portanto, pode ser detectado por qual número inteiro no intervalo 33, 34, ..., 91 que eles são congruentes (mod 59). Esses são todos os caracteres ASCII imprimíveis, codificados pela sequência
";NRU$ Q B [1: =L J, 5% 3 # >"
; usingToCharacterCode@StringSplit@
transforma essa string em uma lista de dez listas de números inteiros nesse intervalo ePosition[...,Mod[Length@#,59,33]][[1,1]]
localiza qual das dez sublistas corresponde ao comprimento modificado da entrada.fonte
20. Bash (+ coreutils + openssl) (idioma 6), 121 bytes
Golfe
O mesmo método da minha resposta nº 17 (que por sua vez se baseia na minha resposta original nº 10 ).
Como temos 10 idiomas distintos agora, mudei para a codificação de posição hexadecimal.
Dados
Teste (saída)
fonte
23. C (gcc) (idioma 10), 142 bytes
Experimente online!
1
com as respostas 1 , 5 , 7 , 9 e 14 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com respostas 4 , 12 e 15 (Javascript).5
com as respostas 6 e 8 (R).6
com respostas 10 , 17 , 20 e 22 (Bash).7
com as respostas 11 e 19 (Mathematica).8
com resposta 13 (Python).9
com resposta 16 (Perl).10
com as respostas 18 , 21 e esta resposta (C).Esse programa conta o número de caracteres diferentes (em ASCII, para que os caracteres UTF-8 de vários bytes sejam divididos em várias entradas) e segue uma árvore de decisão cuidadosamente projetada, com base no número de ocorrências desse ou daquele caractere.
A árvore de decisão permanece inalterada em relação ao número 21 (yay!). Não tenho permissão para postar exatamente o mesmo código; portanto, voltamos ao C puro com pequenas modificações.
fonte
21. C ++ (gcc) (idioma 10 como uma variante de C), 142 bytes
Experimente online!
1
com as respostas 1 , 5 , 7 , 9 e 14 (Retina).2
com resposta 2 (Brain-Flak).3
com resposta 3 (APL).4
com respostas 4 , 12 e 15 (Javascript).5
com as respostas 6 e 8 (R).6
com respostas 10 , 17 e 20 (Bash).7
com as respostas 11 e 19 (Mathematica).8
com resposta 13 (Python).9
com resposta 16 (Perl).10
com a resposta 18 e esta resposta (C).Esse programa conta o número de caracteres diferentes (em ASCII, para que os caracteres UTF-8 de vários bytes sejam divididos em várias entradas) e segue uma árvore de decisão cuidadosamente projetada, com base no número de ocorrências desse ou daquele caractere.
Curiosidades : a letra K não foi usada até esta entrada. As letras I, E, Y, j, k, q, z permanecem sem uso.
fonte
22. Bash (+ coreutils) [idioma 6],
123, 131 bytesEDIT: Publicou uma versão errada no início, deve ser corrigida agora.
Golfe
A mesma técnica das minhas respostas 20, 17 e 10 .
Dados
Execução de teste
fonte
44
?25. Bash (idioma 6), 169 bytes
A mesma técnica das minhas respostas 22, 20, 17 e 10 .
Desculpe @ Qwerp-Derp! ;) Prometo que este é o último :)
Golfe
Dados
Saída de teste
fonte