Você conhece esse idioma?

34

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 1linguagem 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 2linguagem nd usada no desafio. Um exemplo de programa é:

print(1 if input()[0]=="a"else 2)

Dada a primeira submissão, ela gera 1e 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 1o primeiro programa e ele próprio (porque Ruby é a primeira 1linguagem usada) e o segundo programa que ele deve gerar 2.


Regras:

  • Se houver nrespostas atualmente no desafio, deve haver pelo menos floor(n / 3)idiomas diferentes. Qualquer envio que quebra essa regra é desqualificado.
  • Não existem duas "respostas vizinhas" (por exemplo, resposta ne resposta n+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.

clismique
fonte
1
Um usuário pode postar dois envios consecutivos consecutivos?
Kritixi Lithos
Assim, do jeito que está, eu poderia repetir como está, sem nenhuma alteração, minha resposta n ° 6 como resposta n ° 8, após o que Martin poderia repetir seu número n ° 7 (a menos que eu esteja enganado) etc. até a resposta n ° 15 antes de atingir o limite imposto (ou seja, floor(n / 3)idiomas). Eu estou supondo que este não é o comportamento pretendido.
precisa saber é o seguinte
@ Plannapus Notei isso também. Obviamente, seu objetivo é ter a última resposta; portanto, sabendo que eu também teria um acompanhamento trivial, você pode complicar as coisas (nas quais não pensei antes de postar minha própria resposta).
Martin Ender
3
A contagem de bytes alocados cresce em progressão geométrica e, provavelmente, esse desafio não será encerrado até ficarmos sem idiomas, não porque o código se tornará muito longo.
19417 Wolfram
2
Na OMI, um limite fixo razoável (por exemplo, 384 ou 256 bytes) teria funcionado melhor e provocaria uma concorrência acirrada no final.
zepelim

Respostas:

4

26. > <> (idioma 12), 164 bytes

Meu primeiro programa em> <>! São 156 caracteres, mas 164 bytes em UTF-8.

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
{:}&1+&=?v
      .&0/
v+!?='>'i41i
v+?='y'i47
v+?=' 'i12
v+?=' 'i24
v4
v6
v7
v8
v9
va
  v?(0:i
v1
n;\b1laa*)?+
/"^mwfPes{'tc"i2&01.;

Isso imprime:

  • 1com as respostas 1 , 5 , 7 , 9 e 14 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com respostas 4 , 12 e 15 (Javascript).

  • 5com as respostas 6 e 8 (R).

  • 6com as respostas 10 , 17 , 20 , 22 e 25 (Bash).

  • 7com as respostas 11 e 19 (Mathematica).

  • 8 com resposta 13 (Python).

  • 9 com resposta 16 (Perl).

  • 10com 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{'tcsão colocados na pilha. Um único caractere de entrada é lido ( i). (Vamos chamar esse caractere Cpara exposição.) 2 é colocado no registro (2& ). Depois, saltamos para o início da segunda linha (linha 1) ( 01.).

Essa linha se compara Ca cada caractere na pilha. Uma cópia de Cé mantida na parte inferior da pilha. {gira a pilha para que Cfique 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, se Cfor "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 + be 1obtemos 12, este idioma; caso contrário, 1 permanecerá no topo da pilha.

Nick Matteo
fonte
23

1. Retina , 0 bytes

Experimente online!

O programa vazio é impresso 1quando recebe entrada vazia (ou seja, ele próprio), porque conta com que frequência o regex vazio corresponde à entrada (que é sempre 1+length(input)).

Martin Ender
fonte
12

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.

{      (<>)}{}              #If not zero
 <>(())                     #Push one to the other stack
              (<>{}())      #Switch to other stack and increment by one
Assistente de Trigo
fonte
Você poderia editar esta resposta? Eu acidentalmente para baixo votado it :)
Conor O'Brien
9

3. APL, 7 bytes

' {'⍳⊃⍞

Explicação:

      ⍞  read from the keyboard
     ⊃   first item of list, or space if empty
' {'⍳    index into the string ' {', giving N+1 (=3) if not found
marinus
fonte
8

10. Bash (+ coreutils) [idioma 6], 44, 74 bytes

Versão fixa (retorna o ID do idioma)

expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G

Nota: isso espera a nova linha à direita, após o texto do programa de entrada

zepelim
fonte
7

9. Retina (idioma 1), 20 bytes

$|}\{|[:'][^]']|,\b1

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 base 1para 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).
  • A 'parte anterior já causa uma correspondência nos programas R, por isso precisamos de mais três. A substring ,1aparece nos três vezes e em nenhum outro programa. Nós o combinamos adicionando um limite de palavra tautológico no meio com ,\b1para impedir que ele se corresponda novamente.
Martin Ender
fonte
Hum, acabei de perceber que isso não frustra as respostas R, porque 1é simplesmente a saída padrão. Vou ter que fazer algo sobre isso com a próxima resposta.
Martin Ender
7

18. C (idioma 10), 121 bytes

Este é o padrão C89 ou C90. Ele funciona com clang ou gcc no Try It Online.

main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}

Isso imprime:

  • 1com as respostas 1 , 5 , 7 , 9 e 14 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com respostas 4 , 12 e 15 (Javascript).

  • 5com as respostas 6 e 8 (R).

  • 6com respostas 10 e 17 (Bash).

  • 7com a resposta 11 (Mathematica).

  • 8com 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):

#include <string.h>
#include <stdio.h>
int main(){
    char *v=" ^{ s ePfwm", b[999];
    gets(b); /* buffer overrun if more than 998 characters in the input.
                could be a problem if we get to 191 answers */
    char *c = strchr(v, b[0]); /* Find first character of input in v, or null */
    int n = strlen(b);
    if (!n) {
        printf("1");
    } else if (c) {
        printf("%d", c-v); /* Index of first character of input in v */
    } else if (n > 99) {
        printf("4");
    } else if (n > 60) {
        printf("5");
    } else if (n > 15) {
        printf("1");
    } else {
        printf("3");
    }
    return 0;
}
Nick Matteo
fonte
6

5. Retina (idioma 1), 23 bytes

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}

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.
Martin Ender
fonte
5

7. Retina (idioma 1), 27 bytes

^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5

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 \b5encontra outra sem corresponder a nenhuma outra resposta.

Martin Ender
fonte
4

4, JavaScript (ES6), 32 bytes

s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1

Saídas 1 para uma entrada vazia, 2 se a entrada começar com um { , 4 se iniciar com an se 3 caso contrário.

Luke
fonte
Você pode substituir s[0]=='{'pors[0]>'z'
1
@Masterzagh Eu também estava pensando sobre como isso pode ser golfed, mas, infelizmente, isso não é um código de golfe: /
Kritixi Lithos
@KritixiLithos Bem, sim, mas ele já jogou golfe, então pensei que ele iria querer ir mais longe.
@Masterzagh As pessoas devem evitar editar respostas válidas em desafios como este, pois podem invalidar a) respostas posteriores, b) respostas que estão sendo trabalhadas no momento.
Martin Ender
@MartinEnder, você está certo. Como tal, não vou editá-lo. Eu sei que parece ser um jogo de golfe (por causa dos operadores ternários), mas não escrevi assim de propósito ... Obrigado por todos os comentários!
Lucas
4

11. Mathematica [idioma 7], 53 bytes

Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&

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 /._@__->1que transforma qualquer função não avaliada em 1.

Greg Martin
fonte
Eu acho que é muito tempo para estragar essa estratégia de primeira personagem :)
Martin Ender
1
Eu ia, mas lembrei que também tinha que imprimir corretamente no meu próprio idioma: D
Greg Martin
4

16. Perl (idioma 9), 94 bytes

while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}

Experimente online!(verifica todas as respostas). Saídas "1234151516748149"

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 resposta 10 (Bash).
  • 7 com resposta 11 (Mathematica).
  • 8 com resposta 13 (Python).
  • 9 com esta resposta (Perl).

O programa verifica o comprimento da entrada e mapeia-o para a distribuição de idioma atual.

Lyth
fonte
3

6. R (idioma 5), ​​61 bytes

cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))

Verifica qual é o primeiro caractere da entrada e escolhe a saída de acordo.

Isso imprime assim:

  • 1com as respostas 1 e 5 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com resposta 4 (Javascript).

  • e 5com esta resposta.

Uso:

> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))

1
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
{<>(())(<>)}{}(<>{}())
2
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
' {'⍳⊃⍞
3
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
4
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
1
> cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
5
plannapus
fonte
Para executar este fora de um REPL, ver comentário sob resposta 8.
plannapus
3

8. R (idioma 5), ​​76 bytes

c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)

Verifica a primeira letra da entrada, e compara-o com um vector que contém (por esta ordem) a cadeia vazia, {, ', se c. 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:

  • 1com respostas 1 , 5 e 7 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com resposta 4 (Javascript).

  • e 5com 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.

plannapus
fonte
Os intérpretes on-line da FYI R (riddle, ideone e tryitonline) parecem ter problemas ao lidar com stdin (pelo menos com readline ()) e, portanto, não se comportam corretamente. Se você quiser tentar isso (e a resposta anterior) precisará tentar localmente em uma versão instalada do R, receio.
precisa saber é o seguinte
^ Ok, fora de um REPL readlinedeve ser substituído por readLines(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.
precisa saber é o seguinte
3

12. Javascript (idioma 4), 117 bytes

Nota: Mudei um caractere para corrigir um erro neste.

c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;

Verifica a primeira letra da entrada, se for c, verifica o comprimento da entrada.

Saídas:

  • 1 para respostas 1, 5, 7, 9
  • 2 para resposta 2
  • 3 para resposta 3
  • 4 para a resposta 4 e esta resposta
  • 5 para respostas 6, 8
  • 6 para resposta 10
  • 7 para resposta 11
Devsman
fonte
3

13. Python (linguagem 8), 110 bytes

Nota: Esta resposta foi alterada 6 horas após a publicação, por recomendação do OP.

from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N

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:

  • 1com as respostas 1 , 5 , 7 e 9 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com respostas 4 e 12 (Javascript).

  • 5com as respostas 6 e 8 (R).

  • 6com resposta 10 (Bash).

  • 7com 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 .

Nick Matteo
fonte
Qual é o limite de bytes atual?
Vi.
@ Vi: Bem, foram 149 para a resposta 13 e 163 para a resposta 14; mas o OP apenas mudou as regras de contagem de byte para 45 + 5n, de modo que seria 110 bytes de resposta 13 e 115 bytes para resposta 14.
Nick Matteo
Você provavelmente deve colocar a solução de 110 bytes.
Clismique
@ Qwerp-Derp: Tudo bem. Espero que isso não atrapalhe o trabalho contínuo de ninguém.
Nick Matteo
OK, aguardando cerca de 60 respostas até que o limite de bytes chegue ao território compatível com Java.
Vi.
3

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.

typeset -A p
p=("[\$^]*|'\[*" 1 '{*' 2 "' *" 3 '?=>*' 4 'c?[wt]*' 5 'e*' 6 'P*' 7 'f*' 8 'w*' 9 'm*' 10 'ty*' 11)
echo ${p[(k)$1]:-1} #@<`w&X{

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:

  • 1com respostas 1 , 5 , 7 , 9 e 14 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com respostas 4 , 12 e 15 (Javascript).

  • 5com respostas 6 e 8 (R).

  • 6com respostas 10 , 17 , 20 e 22 (Bash).

  • 7com as respostas 11 e 19 (Mathematica).

  • 8com resposta 13 (Python).

  • 9com resposta 16 (Perl).

  • 10com as respostas 18 , 21 e 23 (C / C ++).

  • 11 com esta resposta (Zsh).

Experimente online!

Nick Matteo
fonte
Eu acho que esta é a primeira resposta a ser multi-alinhada ... +1 de mim.
Clismique
2

14. Retina (idioma 1), 39 bytes

'[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$

Experimente online! (Testa todas as entradas válidas.)

Martin Ender
fonte
1
Vamos lá, Martin, poste em um idioma diferente ... também, você poderia fazer a coisa da formatação de respostas?
Clismique
3
@ Qwerp-Derp Isso está realmente se transformando em uma variação interessante no golfe regular de regex. Em vez de ter um conjunto de entradas e ter que corresponder a algumas delas e falhar com outras, aqui você deve obter um número específico de correspondências em cada uma das entradas. Eu me pergunto se esse regex explodirá exponencialmente em algum momento.
Martin Ender
São realmente 39 bytes? O TIO relata 37 bytes.
precisa saber é o seguinte
1
O @Arnauld TIO é codificado para contar apenas caracteres para o Retina porque você costuma usar codificações de byte único. Esta resposta requer UTF-8, no entanto.
Martin Ender
2

15. Javascript (idioma 4), 108 bytes

Golfe

t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
zepelim
fonte
2

17. Bash (+ coreutils + openssl) (idioma 6), 103 bytes

Golfe

expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x

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:

6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Teste

for i in `seq 17`
do
  echo -n `cat lchain|sed -n $i'{p;q}'|cut -c1`=\>
  cat lchain|sed -n $i'{p;q}'|cut -c6-|\
  expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
done

6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1
zepelim
fonte
2

19. Mathematica (idioma 7), 96 bytes

Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&

Função sem nome, recebendo uma lista de caracteres como entrada e retornando um número inteiro:

  • 1com as respostas 1 , 5 , 7 , 9 e 14 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com respostas 4 , 12 e 15 (Javascript).

  • 5com as respostas 6 e 8 (R).

  • 6com respostas 10 e 17 (Bash).

  • 7com a resposta 11 e esta resposta (Mathematica).

  • 8com resposta 13 (Python).

  • 9com resposta 16 (Perl).

  • 10com 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 # >"; using ToCharacterCode@StringSplit@transforma essa string em uma lista de dez listas de números inteiros nesse intervalo e Position[...,Mod[Length@#,59,33]][[1,1]]localiza qual das dez sublistas corresponde ao comprimento modificado da entrada.

Greg Martin
fonte
1

20. Bash (+ coreutils + openssl) (idioma 6), 121 bytes

Golfe

expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u

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

6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Teste (saída)

./test
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
zepelim
fonte
1

23. C (gcc) (idioma 10), 142 bytes

main(c){int d[256]={0};while((c=getchar())!=EOF)d[c]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}

Experimente online!

  • 1com as respostas 1 , 5 , 7 , 9 e 14 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com respostas 4 , 12 e 15 (Javascript).

  • 5com as respostas 6 e 8 (R).

  • 6com respostas 10 , 17 , 20 e 22 (Bash).

  • 7com as respostas 11 e 19 (Mathematica).

  • 8com resposta 13 (Python).

  • 9com resposta 16 (Perl).

  • 10com 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.

Lyth
fonte
0

21. C ++ (gcc) (idioma 10 como uma variante de C), 142 bytes

main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}

Experimente online!

  • 1com as respostas 1 , 5 , 7 , 9 e 14 (Retina).

  • 2com resposta 2 (Brain-Flak).

  • 3com resposta 3 (APL).

  • 4com respostas 4 , 12 e 15 (Javascript).

  • 5com as respostas 6 e 8 (R).

  • 6com respostas 10 , 17 e 20 (Bash).

  • 7com as respostas 11 e 19 (Mathematica).

  • 8com resposta 13 (Python).

  • 9com resposta 16 (Perl).

  • 10com 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.

Lyth
fonte
Existe uma opção para considerar a linguagem C ++ 11, alguns bytes são deixados para se ajustar a isso.
Lyth
0

22. Bash (+ coreutils) [idioma 6], 123, 131 bytes

EDIT: Publicou uma versão errada no início, deve ser corrigida agora.

Golfe

expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L

A mesma técnica das minhas respostas 20, 17 e 10 .

Dados

6 22 expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L
A 21 main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Execução de teste

./test
6=>6
A=>10
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1
zepelim
fonte
Qual é o 44?
Clismique
22 * 2?
Vi
@ Qwerp-Derp, apenas um erro de digitação
zeppelin
Vamos, suas respostas estão ficando chato agora - se a sua próxima resposta é assim, eu estou considerando downvoting (não é interessante, sabe?)
clismique
1
Algo está errado aqui. Existem apenas 20 entradas em suas letras com hash (3PgT etc.). Para a entrada vazia eu recebo um erro, e para a resposta # 2 eu recebo "4" (ambos funcionou corretamente com a resposta 20.)
Nick Matteo
0

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

{ echo -n 'addsomesalt?';cat; }|expr substr 6BA6A67A69418476151514321 $(expr index 1W0TC4YrKwRGAJupDqn7Xlcog \\`openssl sha256 -binary|base64|cut -c40`) 1| dc -e16i?p #8

Dados

Observe que as novas linhas são codificadas como \ n para a resposta # 24

6 25 { echo -n 'addsomesalt?';cat; }|expr substr 6BA6A67A69418476151514321 $(expr index 1W0TC4YrKwRGAJupDqn7Xlcog \\`openssl sha256 -binary|base64|cut -c40`) 1| dc -e16i?p #8
B 24 typeset -A p\np=("[\$^]*|'\[*" 1 '{*' 2 "' *" 3 '?=>*' 4 'c?[wt]*' 5 'e*' 6 'P*' 7 'f*' 8 'w*' 9 'm*' 10 'ty*' 11)\necho ${p[(k)$1]:-1} #@<`w&X{
A 23 main(c){int d[256]={0};while((c=getchar())!=EOF)d[c]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 22 expr substr 6A67A69418476151514321 $(expr index i3xFepQsAalyIvtqPY7ZN+ \\`openssl sha256 -binary|base64|cut -c10`) 1| dc -e16i?p #L
A 21 main(){int K,d[256]{0};while((K=getchar())!=EOF)d[K]++;printf("%d",d[88]?9:d[119]?5*d[123]:d[35]?d[38]?7:8-d[96]:d[48]?4:d[60]?2:1+d[158]*2);}
6 20 expr substr 67A69418476151514321 $(expr index 7042PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1| dc -e16i?p #u
7 19 Position[ToCharacterCode@StringSplit@";NRU$ Q B [1: =L J, 5% 3 # >",Mod[Length@#,59,33]][[1,1]]&
A 18 main(n){char*v=" ^{ s ePfwm",b[999],*c;gets(b);c=strchr(v,*b);n=strlen(b);printf("%d",n?c?c-v:n>99?4:n>60?5:n>15?1:3:1);}
6 17 expr substr 69418476151514321 $(expr index 2PtgBOlrvfDVC8ZHL `openssl md5 -binary|base64|cut -c2`) 1 #x
9 16 while(<>){print substr("1234151516748149",index("0F=POmS6D4e_XWVH",chr(47+length($_)%70)),1);}
4 15 t=>({24:2,86:3,5:4,73:5,68:5,74:7,4:6,79:4,1:8,67:4})[[...t].reduce((r,c,i)=>r*i^c.charCodeAt(0),0)&0x5F]||1
1 14 '[ ⍳]|}\{|[o@:][^]'c@:]|^c|,\b1|1\d|$
8 13 from hashlib import*;print("1234151516748"["a5e1f936cd78b".index(sha256(input().encode()).hexdigest()[34])])#N
4 12 c=>c?c[0]=='e'?6:c[0]=='$'||c[0]=='^'?1:c[0]=='c'&&c.length>80?4:c[0]=='P'?7:c[0]=='c'?5:c[0]=='{'?2:c[0]=='s'?4:3:1;
7 11 Position[Characters@"^{'sceP",#&@@#][[1,1]]/._@__->1&
6 10 expr substr "1234151516" $(expr index "365f8dc0eb" `md5sum|cut -c12`) 1 #G
1 09 $|}\{|[:'][^]']|,\b1
5 08 c=which(c("","{","'","s","c")==substr(readline(),1,1));ifelse(length(c),c,1)
1 07 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}|\b5
5 06 cat(switch(substr(readline(),1,1),"{"=2,"'"=3,"s"=4,"c"=5,1))
1 05 ^$|(?![⊂⍴])[⊂-⍴]|\B=|{}
4 04 s=>s?s[0]==`{`?2:s[0]==`s`?4:3:1
3 03 ' {'⍳⊃⍞
2 02 {<>(())(<>)}{}(<>{}())
1 01

Saída de teste

6=>6
B=>11
A=>10
6=>6
A=>10
6=>6
7=>7
A=>10
6=>6
9=>9
4=>4
1=>1
8=>8
4=>4
7=>7
6=>6
1=>1
5=>5
1=>1
5=>5
1=>1
4=>4
3=>3
2=>2
1=>1
zepelim
fonte