Conosci quella lingua?


34

Compito:

La tua sfida è, dati gli invii precedenti e se stesso come input, produrre la lingua in cui sono scritti, nel seguente formato:

Supponiamo che il primo programma sia in Ruby. Deve produrre 1, perché Ruby è il 1linguaggio usato in questa sfida. Un programma di esempio è:

a=gets
puts 1

Quando viene dato come input, ritorna 1.

Il prossimo programma potrebbe essere in Python. Deve produrre 2, perché Python è il 2nd linguaggio usato nella sfida. Un programma di esempio è:

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

Dato il primo invio, emette 1e si è prodotto 2.

Puoi ripetere le lingue, anche se non puoi inviare una risposta nella lingua della risposta precedente.

Ad esempio, se il terzo programma si trova in Ruby, deve produrre 1in output dato il primo programma e se stesso (poiché Ruby è la 1st lingua usata) e dato il secondo programma deve produrre 2.


Regole:

  • Se ci sono nrisposte attualmente nella sfida, ci devono essere almeno floor(n / 3)lingue diverse. Qualsiasi invio che infrange questa regola viene squalificato.
  • Non esistono due "risposte vicine" (es. Risposta ne risposta n+1) non possono usare la stessa lingua.
  • Versioni diverse di una lingua non contano come lingue diverse (quindi Python 2 == Python 3).
  • Le risposte devono contenere integralmente le osservazioni precedenti come input.
  • Il primo invio deve contenere input.
  • Non puoi inviare più risposte di seguito.
  • "Ripeti risposte" (risposte che hanno lo stesso codice esatto di un invio precedente) non sono consentite.
  • Le risposte non possono superare il conteggio byte assegnato di quella risposta. Per ulteriori dettagli, vedere "Conteggio byte allocato".

Conteggio byte assegnato:

Per ogni numero di risposta n, il conteggio dei byte allocati per quella risposta è 45 + 5n.


Risposta formattazione:

Formatta la tua risposta in questo modo:

# {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}

Per gli elenchi di risposte, procedere come segue:

- `1` in answers [1]({link to answer}), [3]({link to answer})...

punteggio:

La prima risposta a sopravvivere dopo 7 giorni senza invii validi è dichiarata vincitrice.


1
Un utente può pubblicare due invii consecutivi di seguito?
Kritixi Lithos,

Quindi, così com'è, potrei ripetere così com'è, senza alcuna modifica, la mia risposta n ° 6 come risposta n ° 8, dopo la quale Martin potrebbe ripetere il suo numero n ° 7 (a meno che non mi sbagli) ecc. Fino alla risposta n ° 15 prima di raggiungere la soglia imposta (cioè le floor(n / 3)lingue). Immagino che questo non sia un comportamento previsto.
plannapus,

@plannapus Ho notato anche questo. Certo, il tuo obiettivo è quello di avere l'ultima risposta, quindi sapendo che avrei avuto un banale follow-up potresti voler complicare le cose (a cui non avevo pensato prima di pubblicare la mia risposta).
Martin Ender,

3
Il conteggio dei byte allocati aumenta con la progressione geometrica e probabilmente queste sfide non termineranno fino a quando non esauriremo le lingue, non perché il codice diventerà troppo lungo.
Wolfram,

2
L'IMO un ragionevole limite fisso (ad es. 384 o 256 byte) avrebbe funzionato meglio e alla fine avrebbe innescato una forte concorrenza.
Zeppelin,

Risposte:


4

26. > <> (lingua 12), 164 byte

Il mio primo programma in assoluto in> <>! Sono 156 caratteri, ma 164 byte in 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.;

Questo stampa:

  • 1con risposte 1 , 5 , 7 , 9 e 14 (Retina).

  • 2con risposta 2 (Brain-Flak).

  • 3con risposta 3 (APL).

  • 4con risposte 4 , 12 e 15 (Javascript).

  • 5con risposte 6 e 8 (R).

  • 6con risposte 10 , 17 , 20 , 22 e 25 (Bash).

  • 7con risposte 11 e 19 (Mathematica).

  • 8con risposta 13 (Python).

  • 9 con risposta 16 (Perl).

  • 10con risposte 18 , 21 e 23 (C / C ++).

  • 11 con risposta 24 (Zsh).

  • 12 con questa risposta (> <>).

Provalo online!

Spiegazione:

La prima riga è semplicemente la risposta n. 5. Non fa altro che inviare il puntatore dell'istruzione alla riga inferiore. /gira il pesce a destra e i personaggi ^mwfPes{'tcvengono messi in pila. Viene letto un singolo carattere di input ( i). (Chiamiamo questo personaggio Cper l'esposizione.) 2 viene messo nel registro ( 2&). Quindi saltiamo all'inizio della seconda riga (riga 1) (01. ).

Questa linea si confronta Ccon ogni personaggio in pila. Una copia di Cviene conservata sul fondo della pila. {ruota la pila in modo che Csia in cima; :lo duplica; }ruota la copia in fondo. Aumentiamo il registro ( &1+&) fino a quando non viene trovata una corrispondenza. (Quindi se Cè "c", il registro contiene 3 quando viene trovata la corrispondenza; se Cè "t", il registro contiene 4 e così via.) Quindi passiamo al primo carattere del numero di riga nel registro (0&. ) .

Le righe da 3 a 13 trattano cosa fare quando Cè rispettivamente c, t, ', {, ecc. Il puntatore dell'istruzione si sposta indietro quando saltiamo; atterra sul primo carattere di una determinata linea, ma dopo un salto avanza un segno di spunta prima dell'esecuzione, quindi inizia l'esecuzione dalla fine della riga andando indietro. Ogni riga spinge il numero di lingua appropriato sulla pila, quindi invia il pesce nall'istruzione, che lo stampa.

^è il caso più complicato, a causa della mia sgarbatezza con la prima riga di questa risposta. La riga 13 legge l'input fino a EOF. Quindi dirige verso il basso fino alla linea 15, che confronta la lunghezza dello stack ( l) con 100 ( aa*). Se è più lungo ( )?), aggiungiamo + be 1per ottenere 12, questa lingua; in caso contrario, 1 rimane in cima alla pila.


23

1. Retina , 0 byte

Provalo online!

Il programma vuoto stampa 1quando viene dato un input vuoto (cioè se stesso), poiché conta la frequenza con cui il regex vuoto corrisponde all'input (che è sempre 1+length(input)).


12

2. Brain-Flak , 22 byte

{<>(())(<>)}{}(<>{}())

Provalo online!

Questo controlla la parte superiore dello stack e ne mette uno sullo stack opposto se è diverso da zero. Quindi incrementa e restituisce lo stack opposto. Questo lo fa restituire 1 per il programma vuoto e 2 per qualsiasi altra cosa.

Dato che le pile in Brain-Flak sono impostate su zero, un programma vuoto avrà uno zero in cima allo stack mentre qualsiasi altro programma (tranne i programmi che terminano in caratteri null) avrà un valore di verità. Ciò significa che possiamo eseguire un programma if molto semplice nello stack di input.

{      (<>)}{}              #If not zero
 <>(())                     #Push one to the other stack
              (<>{}())      #Switch to other stack and increment by one

Potresti modificare questa risposta? L'ho votato per errore :)
Conor O'Brien,

9

3. APL, 7 byte

' {'⍳⊃⍞

Spiegazione:

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

8

10. Bash (+ coreutils) [lingua 6], 44, 74 byte

Versione fissa (restituisce l'ID lingua)

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

Nota: questo si aspetta la nuova riga finale, dopo il testo del programma di input


7

9. Retina (lingua 1), 20 byte

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

Provalo online!

Come plannapus, ho deciso di fare una riscrittura per cambiare un po 'le cose, il che ha finito per abbreviare considerevolmente il codice (una modifica della mia ultima risposta per tenere conto dell'ultimo plannapus sarebbe finito intorno a 32 byte, credo).

Spiegazione

Come le mie altre risposte, questo conta solo il numero di varie corrispondenze regex, ma lo fa in modo molto più efficiente:

  • $corrisponde alla fine della stringa. Funziona sempre, anche se c'è una corrispondenza che arriva fino alla fine della stringa, quindi questo ci fornisce una base 1per tutti gli input.
  • }\{ trova una singola partita nel secondo programma (Brain-Flak), portando il conteggio fino a 2 . La barra rovesciata non è necessaria per la fuga ma impedisce a questa parte della regex di adattarsi.
  • [:'][^]']è piuttosto elegante in realtà. L'unico scopo è contare i due 'nel programma APL (lingua 3) e i tre :nel programma JavaScript (lingua 4), ma dobbiamo evitare che questa parte si combini da sola. Quindi assicuriamo anche che il prossimo personaggio non sia né ', né ](perché quelli non compaiono dopo quelli che facciamo vogliamo abbinare, ma lo fanno apparire in questo programma).
  • La 'parte precedente causa già una corrispondenza nei programmi R, quindi ne abbiamo bisogno di altre tre. La sottostringa ,1appare in entrambi tre volte e in nessun altro programma. Lo abbiniamo aggiungendo un confine di parole tautologico nel mezzo ,\b1per evitare che si abbini nuovamente.

Hm, ho appena capito che questo non ostacola affatto le risposte R, perché 1è semplicemente il loro output predefinito. Dovrò fare qualcosa al riguardo con la prossima risposta.
Martin Ender,

7

18. C (lingua 10), 121 byte

Questo è lo standard C89 o C90. Funziona con clang o gcc su 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);}

Questo stampa:

  • 1con risposte 1 , 5 , 7 , 9 e 14 (Retina).

  • 2con risposta 2 (Brain-Flak).

  • 3con risposta 3 (APL).

  • 4con risposte 4 , 12 e 15 (Javascript).

  • 5con risposte 6 e 8 (R).

  • 6con risposte 10 e 17 (Bash).

  • 7con risposta 11 (Mathematica).

  • 8con risposta 13 (Python).

  • 9con risposta 16 (Perl).

  • 10 con questa risposta (C).

Ecco un driver bash che lo esegue con tutte e 18 le risposte su Provalo online!

Equivalente non golfato (646 byte):

#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;
}

6

5. Retina (lingua 1), 23 byte

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

Provalo online!(Verifica tutti gli input possibili.)

Conta le partite di varie cose nell'input:

  • ^$ corrisponde alla stringa di input, ovvero alla prima risposta una volta.
  • {} corrisponde a se stesso, di cui due nel secondo programma e uno in questo.
  • (?![⊂⍴])[⊂-⍴]abbina i caratteri con i punti di codice da 8834 a 9076, in esclusiva , che trova tre corrispondenze nel terzo programma. Usiamo il lookahead negativo per evitare che le estremità del range vengano abbinate in questo programma.
  • \B=corrisponde a un carattere =che non è preceduto da un carattere parola. Questo corrisponde a quattro dei =nel quarto programma e non corrisponde a =in questo programma.

5

7. Retina (lingua 1), 27 byte

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

Provalo online! (Verifica tutti gli input possibili.)

Una modifica minore della quinta risposta . \B=trova già 4 corrispondenze nella sesta risposta e ne \b5trova un'altra senza corrispondere ad altre risposte.


4

4, JavaScript (ES6), 32 byte

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

Emette 1 per un ingresso vuoto, 2 se l'ingresso inizia con a {, 4 se inizia con an se 3 altrimenti.


È possibile sostituire il s[0]=='{'bys[0]>'z'

1
@Masterzagh Stavo anche pensando a come si può giocare a golf, ma purtroppo questo non è un codice-golf: /
Kritixi Lithos

@KritixiLithos Beh, sì, ma ha già giocato a golf, quindi ho pensato che avrebbe voluto andare oltre.

@Masterzagh Le persone dovrebbero evitare di modificare risposte valide in sfide come questa perché possono invalidare a) risposte successive, b) risposte su cui si sta attualmente lavorando.
Martin Ender,

@MartinEnder, hai ragione. Come tale non lo modificherò. So che sembra golfato (a causa degli operatori ternari), ma non l'ho scritto apposta come quello ... Grazie comunque per tutti i feedback!
Luca,

4

11. Mathematica [lingua 7], 53 byte

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

Funzione senza nome che prende un elenco di caratteri come argomento e produce un numero intero positivo. Si ramifica semplicemente sulla prima lettera dell'input, usando la sua posizione nella stringa "^{'sceP"per decidere l'output. Questo dà la risposta giusta per tutti i precedenti invii tranne il programma Retina vuoto iniziale e la risposta Retina più recente ; entrambi questi errori di sputo, ma l'output viene riparato dalla regola /._@__->1che trasforma qualsiasi funzione non valutata in 1.


Penso che sia davvero il momento di rovinare quella strategia del primo personaggio :)
Martin Ender,

1
Stavo per farlo, ma poi mi sono ricordato che dovevo produrre correttamente anche la mia lingua: D
Greg Martin

4

16. Perl (lingua 9), 94 byte

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

Provalo online!(controlla tutte le risposte). Uscite "1234151516748149"

Questo stampa:

  • 1 con risposte 1, 5, 7, 9 e 14 (Retina).
  • 2 con risposta 2 (Brain-Flak).
  • 3 con risposta 3 (APL).
  • 4 con risposte 4, 12 e 15 (Javascript).
  • 5 con risposte 6 e 8 (R).
  • 6 con risposta 10 (Bash).
  • 7 con risposta 11 (Mathematica).
  • 8 con risposta 13 (Python).
  • 9 con questa risposta (Perl).

Il programma controlla la lunghezza dell'input e la mappa sulla distribuzione della lingua corrente.


3

6. R (lingua 5), ​​61 byte

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

Verifica qual è il primo carattere dell'input e scegli l'output di conseguenza.

Questo stampa così:

  • 1con le risposte 1 e 5 (Retina).

  • 2con risposta 2 (Brain-Flak).

  • 3con risposta 3 (APL).

  • 4con risposta 4 (Javascript).

  • e 5con questa risposta.

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

Per eseguire questo al di fuori di un REPL, vedere il commento nella risposta 8.
plannapus,

3

8. R (lingua 5), ​​76 byte

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

Verifica la prima lettera dell'input, e lo confronta con un vettore contenente (in questo ordine) stringa vuota, {, ', se c. Quindi genera l'indice della corrispondenza (l'indicizzazione R è basata su 1) o 1 se non vi è corrispondenza.

Stesso concetto della risposta n ° 6 ma impedisce alla risposta n ° 7 di corrispondere.

Questo stampa:

  • 1con risposte 1 , 5 e 7 (Retina).

  • 2con risposta 2 (Brain-Flak).

  • 3con risposta 3 (APL).

  • 4con risposta 4 (Javascript).

  • e 5con la risposta 6 e questa risposta (R).

If I'm not mistaken, the byte-count allowance for this answer was 94 bytes.


FYI R online interpreters (rfiddle, ideone and tryitonline) seems to have problem handling stdin (at least with readline() ) and thus won't behave properly. If you want to try this (and the previous answer) you'll have to try locally on an installed version of R, i'm afraid.
plannapus

^ Ok, outside of a REPL readline should be replaced by readLines(file("stdin")). Which means 16 more characters: answer 6 should therefore be 77 bytes (out of 79 allowed) andthis answer 92 bytes (out of 94 allowed). With this change it works on online interpreters as well.
plannapus

3

12. Javascript (language 4), 117 bytes

Note: I changed a character to correct a mistake in this one.

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;

Checks the first letter of the input, if it's c, checks the length of the input.

Outputs:

  • 1 for answers 1, 5, 7, 9
  • 2 for answer 2
  • 3 for answer 3
  • 4 for answer 4 and this answer
  • 5 for answers 6, 8
  • 6 for answer 10
  • 7 for answer 11

3

13. Python (language 8), 110 bytes

Note: This answer was altered 6 hours after posting, at the recommendation of the OP.

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

This is the same idea as answer 10 (in bash), but in Python 3. (This approach can work for at most 3 more entries before we run out of hex digits.)

This prints:

  • 1 with answers 1, 5, 7, and 9 (Retina).

  • 2 with answer 2 (Brain-Flak).

  • 3 with answer 3 (APL).

  • 4 with answers 4 and 12 (Javascript).

  • 5 with answers 6 and 8 (R).

  • 6 with answer 10 (Bash).

  • 7 with answer 11 (Mathematica).

  • 8 for this answer (Python).

Try it online! for: Answer 1, Answer 2, Answer 3, Answer 4, Answer 5, Answer 6, Answer 7, Answer 8, Answer 9, Answer 10, Answer 11, Answer 12, or this answer.


What is the current byte limit?
Vi.

@Vi.: Well, it WAS 149 for answer 13 and 163 for answer 14; but the OP just changed the byte count rules to 45+5n, so that it would be 110 bytes for answer 13 and 115 bytes for answer 14.
Nick Matteo

You should probably put the 110 byte solution up.
clismique

@Qwerp-Derp: All right. Hopefully that won't break anyone's ongoing work.
Nick Matteo

OK, waiting for about 60 answers until the byte limit it gets to Java-friendly land.
Vi.

3

24. Zsh (language 11), 142 bytes

My previous answer #18 in C still works unmodified for all the subsequent entries (demo). So let's mix it up a little.

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{

The purpose of the comment at the end is to match the length of answers 21 and 23, and ensure that no single character of the sha256 or sha384 hashes is unique for every answer so far, using the characters checked by Lyth's C++ answers. ;-)

This prints:

  • 1 with answers 1, 5, 7, 9, and 14 (Retina).

  • 2 with answer 2 (Brain-Flak).

  • 3 with answer 3 (APL).

  • 4 with answers 4, 12, and 15 (Javascript).

  • 5 with answers 6 and 8 (R).

  • 6 with answers 10, 17, 20, and 22 (Bash).

  • 7 with answers 11 and 19 (Mathematica).

  • 8 with answer 13 (Python).

  • 9 with answer 16 (Perl).

  • 10 with answers 18, 21, and 23 (C/C++).

  • 11 with this answer (Zsh).

Try it online!


I think this is the first answer to be multi-lined... +1 from me.
clismique

2

14. Retina (language 1), 39 bytes

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

Try it online! (Tests all valid inputs.)


1
Come on Martin, post in a different language... also, could you do the answer-formatting thing?
clismique

3
@Qwerp-Derp This is actually turning into an interesting variation on standard regex golf. Instead of having a set of inputs and having to match some of them and fail some others, here you have to get a specific number of matches on each of the inputs. I do wonder whether this regex will blow up exponentially at some point.
Martin Ender

Is it really 39 bytes? TIO reports 37 bytes.
Arnauld

1
@Arnauld TIO is hardcoded to just count characters for Retina because you often use single-byte encodings. This answer requires UTF-8 though.
Martin Ender

2

15. Javascript (language 4), 108 bytes

Golfed

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

2

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

Golfed

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

Uses the same technique as my answer #10, but with Base64 encoded dictionary, instead of Hex.

I've put together the following data file for testing:

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

Test

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

2

19. Mathematica (language 7), 96 bytes

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

Unnamed function taking a list of characters as input and returning an integer:

  • 1 with answers 1, 5, 7, 9, and 14 (Retina).

  • 2 with answer 2 (Brain-Flak).

  • 3 with answer 3 (APL).

  • 4 with answers 4, 12, and 15 (Javascript).

  • 5 with answers 6 and 8 (R).

  • 6 with answers 10 and 17 (Bash).

  • 7 with answer 11 and this answer (Mathematica).

  • 8 with answer 13 (Python).

  • 9 with answer 16 (Perl).

  • 10 with answer 18 (C).

So far all the lengths of answers are distinct, and they're even distinct modulo 59—hence can be detected by which integer in the range 33, 34, ..., 91 they're congruent to (mod 59). These are all printable ASCII characters, encoded by the string ";NRU$ Q B [1: =L J, 5% 3 # >"; using ToCharacterCode@StringSplit@ turns this string into a list of ten lists of integers in that range, and Position[...,Mod[Length@#,59,33]][[1,1]] finds which of the ten sublists matches the modified length of the input.


1

20. Bash (+coreutils +openssl) (language 6), 121 byte

Golfed

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

The same method as my answer #17 (which in turn is based on my original answer #10).

As we have 10 distinct languages now, I've switched to hexadecimal position encoding.

Data

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

Test (output)

./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

1

23. C (gcc) (language 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);}

Try it online!

  • 1 with answers 1, 5, 7, 9, and 14 (Retina).

  • 2 with answer 2 (Brain-Flak).

  • 3 with answer 3 (APL).

  • 4 with answers 4, 12, and 15 (Javascript).

  • 5 with answers 6 and 8 (R).

  • 6 with answers 10, 17, 20 and 22 (Bash).

  • 7 with answer 11 and 19 (Mathematica).

  • 8 with answer 13 (Python).

  • 9 with answer 16 (Perl).

  • 10 with answer 18, 21 and this answer (C).

This program counts number of different characters (in ASCII, so multi-byte UTF-8 characters get split into several entries) and then follows a carefully designed decision tree, basing on the number of occurrences of this or that character.

The decision tree is unchanged from #21 (yay!). I'm not allowed to post exactly same code, so we're back to pure C with minor modifications.


0

21. C++ (gcc) (language 10 as a variant of 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);}

Try it online!

  • 1 with answers 1, 5, 7, 9, and 14 (Retina).

  • 2 with answer 2 (Brain-Flak).

  • 3 with answer 3 (APL).

  • 4 with answers 4, 12, and 15 (Javascript).

  • 5 with answers 6 and 8 (R).

  • 6 with answers 10, 17 and 20 (Bash).

  • 7 with answer 11 and 19 (Mathematica).

  • 8 with answer 13 (Python).

  • 9 with answer 16 (Perl).

  • 10 with answer 18 and this answer (C).

This program counts number of different characters (in ASCII, so multi-byte UTF-8 characters get split into several entries) and then follows a carefully designed decision tree, basing on the number of occurrences of this or that character.

Trivia: letter K was not used until this entry. Letters I, E, Y, j, k, q, z remain unused.


There is an option to consider C++ language 11, a few bytes are left to fit that in.
Lyth

0

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

EDIT: Published a wrong version at first, should be fixed now.

Golfed

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

The same technique as my answers #20, #17 and #10.

Data

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

Test Run

./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

What's the 44?
clismique

22*2?󠀠󠀠󠀠󠀠󠀠
Vi.

@Qwerp-Derp, just a typo
zeppelin

Come on, your answers are getting boring now - if your next answer is like this, I'm considering downvoting (it's not interesting, y'know?)
clismique

1
Something is wrong here. There are only 20 entries in your hashed letters (3PgT etc.). For empty input I get an error, and for answer #2 I get "4" (both worked correctly with answer 20.)
Nick Matteo

0

25. Bash (language 6), 169 bytes

The same technique as my answers #22, #20, #17 and #10.

Sorry @Qwerp-Derp ! ;) I promise this is the last one :)

Golfed

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

Data

Note that newlines are encoded as \n for answer #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

Test Output

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.