Czy znasz ten język?


34

Zadanie:

Twoim wyzwaniem jest, biorąc pod uwagę wcześniejsze zgłoszenia i sam jako dane wejściowe, wydrukować język, w którym są napisane, w następującym formacie:

Powiedzmy, że pierwszy program jest w Ruby. Musi być wyprowadzany 1, ponieważ Ruby jest 1st. Językiem używanym w tym wyzwaniu. Przykładowy program to:

a=gets
puts 1

Podany jako dane wejściowe zwraca 1.

Następny program może być w języku Python. Musi być generowany 2, ponieważ Python jest 2drugim językiem używanym w wyzwaniu. Przykładowy program to:

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

Biorąc pod uwagę pierwsze przedłożenie, wypływa ono 1i daje sobie wyniki 2.

Możesz powtarzać języki, ale nie możesz przesyłać odpowiedzi w języku poprzedniej odpowiedzi.

Na przykład, jeśli trzeci program jest w Rubim, musi on wypisać dane, 1biorąc pod uwagę pierwszy program i siebie (ponieważ Ruby jest 1używanym językiem st), a biorąc pod uwagę drugi program, musi on wypisać 2.


Zasady:

  • Jeśli nw wyzwaniu są obecnie odpowiedzi, muszą istnieć co najmniej floor(n / 3)różne języki. Wszelkie zgłoszenia łamiące tę zasadę są dyskwalifikowane.
  • Żadne dwie „sąsiadujące odpowiedzi” (np. Odpowiedź ni odpowiedź n+1) nie mogą używać tego samego języka.
  • Różne wersje języka nie są liczone jako różne języki (tak Python 2 == Python 3).
  • Odpowiedzi muszą w całości uwzględniać poprzednie zgłoszenia.
  • Pierwsze zgłoszenie musi zawierać dane wejściowe.
  • Nie możesz przesyłać wielu odpowiedzi z rzędu.
  • „Powtarzaj odpowiedzi” (odpowiedzi, które mają dokładnie taki sam kod jak poprzednie przesłanie) są niedozwolone.
  • Odpowiedzi nie mogą przekraczać przydzielonej liczby bajtów tej odpowiedzi - więcej informacji można znaleźć w części „Przydzielona liczba bajtów”.

Przydzielona liczba bajtów:

Dla każdego numeru odpowiedzi nprzydzielona jest liczba bajtów dla tej odpowiedzi 45 + 5n.


Formatowanie odpowiedzi:

Sformatuj swoją odpowiedź w następujący sposób:

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

W przypadku list odpowiedzi wykonaj następujące czynności:

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

Punktacja:

Pierwsza odpowiedź, która przetrwała po 7 dniach bez ważnych zgłoszeń, została ogłoszona zwycięzcą.


1
Czy jeden użytkownik może opublikować dwa kolejne zgłoszenia z rzędu?
Kritixi Lithos

Tak więc, w obecnej postaci, mógłbym powtórzyć bez zmian moją odpowiedź nr 6 jako odpowiedź nr 8, po czym Martin mógłby powtórzyć swój numer nr 7 (chyba że się mylę) itd. Aż do odpowiedzi nr 15 przed osiągnięciem narzuconego progu (tj. floor(n / 3)Języków). Zgaduję, że to nie jest zamierzone zachowanie.
plannapus

@plannapus Też to zauważyłem. Oczywiście, twoim celem jest uzyskanie ostatniej odpowiedzi, więc wiedząc, że będę miał również trywialne działania następcze, możesz chcieć skomplikować rzeczy (o czym nie myślałem przed opublikowaniem własnej odpowiedzi).
Martin Ender

3
Przydzielona liczba bajtów rośnie w postępie geometrycznym i prawdopodobnie te wyzwania nie zakończą się, dopóki nie zabraknie języków, nie dlatego, że kod stanie się zbyt długi.
Wolfram

2
IMO rozsądny stały limit (np. 384 lub 256 bajtów), działałby lepiej i wywołałby ostrą konkurencję na końcu.
zeppelin

Odpowiedzi:


4

26. > <> (język 12), 164 bajty

Mój pierwszy program w> <>! Ma 156 znaków, ale 164 bajty w 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.;

To drukuje:

  • 1z odpowiedziami 1 , 5 , 7 , 9 i 14 (Retina).

  • 2z odpowiedzią 2 (Flak mózgu).

  • 3z odpowiedzią 3 (APL).

  • 4z odpowiedziami 4 , 12 i 15 (JavaScript).

  • 5z odpowiedziami 6 i 8 (R).

  • 6z odpowiedziami 10 , 17 , 20 , 22 i 25 (Bash).

  • 7z odpowiedziami 11 i 19 (Mathematica).

  • 8z odpowiedzią 13 (Python).

  • 9z odpowiedzią 16 (Perl).

  • 10z odpowiedziami 18 , 21 i 23 (C / C ++).

  • 11z odpowiedzią 24 (Zsh).

  • 12 z tą odpowiedzią (> <>).

Wypróbuj online!

Wyjaśnienie:

Pierwszy wiersz to po prostu odpowiedź nr 5. Nie robi nic, tylko wysyła wskaźnik instrukcji do dolnej linii. /obraca rybę w prawo, a postacie ^mwfPes{'tckładzie się na stosie. Pojedynczy znak wejścia jest czytany ( i). (Nazwijmy ten znak Cekspozycją.) 2 jest umieszczane w rejestrze ( 2&). Następnie przeskakujemy na początek drugiej linii (linia 1) ( 01.).

Ta linia porównuje się Cz każdym znakiem na stosie. Kopia Cjest przechowywana na spodzie stosu. {obraca stos tak, aby Cbył na wierzchu; :powiela to; }obraca kopię z powrotem na dół. Zwiększamy register ( &1+&) aż do znalezienia dopasowania. (Jeśli więc Cjest „c”, rejestr zawiera 3 po znalezieniu dopasowania; jeśli Cjest „t”, rejestr zawiera 4 itd.). Następnie przeskakujemy do pierwszego znaku numeru linii w rejestrze ( 0&.) .

Linie od 3 do 13 zajmują się tym, co zrobić, gdy odpowiednio Cjest c, t, ', {itd. Wskaźnik instrukcji przesuwa się do tyłu podczas skoku; wyląduje na pierwszym znaku danej linii, ale po skoku przesuwa się tyknięciem przed wykonaniem, więc zaczyna wykonywać od końca linii cofając się. Każda linia wypycha odpowiedni numer języka na stosie, a następnie wysyła rybę do ninstrukcji, która ją drukuje.

^jest najbardziej skomplikowanym przypadkiem, z powodu mojej własnej niegodziwości w pierwszym wierszu tej odpowiedzi. Wiersz 13 odczytuje dane wejściowe aż do EOF. Następnie przekierowuje w dół do linii 15, która porównuje długość stosu ( l) do 100 ( aa*). Jeśli jest dłuższy ( )?), dodajemy + bi 1otrzymujemy 12, ten język; w przeciwnym razie 1 pozostaje na wierzchu stosu.


23

1. Siatkówka , 0 bajtów

Wypróbuj online!

Pusty program drukuje 1po podaniu pustego wejścia (tzn. Samego siebie), ponieważ zlicza, jak często pusty wyrażenie regularne pasuje do wejścia (co jest zawsze 1+length(input)).


12

2. Brain-Flak , 22 bajty

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

Wypróbuj online!

To sprawdza górną część stosu i umieszcza jeden na przeciwległym stosie, jeśli jest niezerowy. Następnie zwiększa i zwraca przeciwny stos. To powoduje, że zwraca 1 dla pustego programu i 2 dla czegokolwiek innego.

Ponieważ stosy w Brain-Flak są ustawione na zero, pusty program będzie miał zero na górze stosu, podczas gdy każdy inny program (z wyjątkiem programów, które kończą się znakami zerowymi) będzie miał prawdziwą wartość. Oznacza to, że możemy uruchomić bardzo prosty program na stosie wejściowym.

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

Czy możesz edytować tę odpowiedź? Przez przypadek przegłosowałem :)
Conor O'Brien

9

3. APL, 7 bajtów

' {'⍳⊃⍞

Wyjaśnienie:

      ⍞  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) [język 6], 44, 74 bajty

Naprawiono wersję (zwraca identyfikator języka)

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

Uwaga: oczekuje się, że końcowy znak nowej linii, po tekście programu wejściowego


7

9. Siatkówka (język 1), 20 bajtów

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

Wypróbuj online!

Podobnie jak plannapus, zdecydowałem się na przepisanie, aby nieco zmienić, co skończyło się również znacznym skróceniem kodu (myślę, że modyfikacja mojej ostatniej odpowiedzi na najnowszą wersję plannapusa skończyłaby się na około 32 bajtach).

Wyjaśnienie

Podobnie jak moje inne odpowiedzi, to tylko zlicza liczbę różnych dopasowań wyrażeń regularnych, ale robi to znacznie wydajniej:

  • $dopasowuje koniec łańcucha. To zawsze działa, nawet jeśli do końca łańcucha dochodzi dopasowanie, więc daje nam to podstawę 1dla wszystkich danych wejściowych.
  • }\{ znajduje pojedyncze dopasowanie w drugim programie (Brain-Flak), co podnosi liczbę 2 . Ukośnik odwrotny nie jest konieczny do ucieczki, ale zapobiega dopasowaniu tej części wyrażenia regularnego.
  • [:'][^]']jest naprawdę fantazyjne. Jedynym celem jest policzenie dwóch 'w programie APL (język 3) i trzech :w programie JavaScript (język 4), ale musimy zapobiec dopasowaniu tej części do siebie. Dlatego też upewniamy się, że kolejna postać nie jest ani ', ani ](ponieważ nie pojawiają się po tych, które robimy chcemy dopasować, ale pojawiają się tutaj w tym programie).
  • 'Z poprzedniej części powoduje już jeden mecz w programach badawczo, więc musimy jeszcze trzy. Podciąg ,1pojawia się w obu z nich trzy razy i nie ma w innych programach. Dopasowujemy go, dodając tautologiczną granicę słów pomiędzy, ,\b1aby zapobiec ponownemu dopasowaniu się do siebie.

Hm, właśnie zdałem sobie sprawę, że to wcale nie udaremnia odpowiedzi R, ponieważ 1jest to po prostu ich domyślny wynik. Będę musiał coś z tym zrobić z następną odpowiedzią.
Martin Ender

7

18. C (język 10), 121 bajtów

Jest to standard C89 lub C90. Działa z clang lub gcc w 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);}

To drukuje:

  • 1z odpowiedziami 1 , 5 , 7 , 9 i 14 (Retina).

  • 2z odpowiedzią 2 (Flak mózgu).

  • 3z odpowiedzią 3 (APL).

  • 4z odpowiedziami 4 , 12 i 15 (JavaScript).

  • 5z odpowiedziami 6 i 8 (R).

  • 6z odpowiedziami 10 i 17 (Bash).

  • 7z odpowiedzią 11 (Mathematica).

  • 8z odpowiedzią 13 (Python).

  • 9z odpowiedzią 16 (Perl).

  • 10 z tą odpowiedzią (C).

Oto sterownik bash, który uruchamia go z wszystkimi 18 odpowiedziami Wypróbuj online!

Ekwiwalent niefundowany (646 bajtów):

#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. Siatkówka (język 1), 23 bajty

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

Wypróbuj online!(Testuje wszystkie możliwe dane wejściowe.)

Liczy dopasowania różnych rzeczy w danych wejściowych:

  • ^$ dopasowuje ciąg wejściowy, tzn. pierwszą odpowiedź raz.
  • {} pasuje do siebie, których są dwa w drugim programie i jeden w tym.
  • (?![⊂⍴])[⊂-⍴]dopasowuje znaki o kodach od 8834 do 9076, wyłączne , które znajdują trzy dopasowania w trzecim programie. Używamy negatywnego spojrzenia w przód, aby uniknąć dopasowania końców zakresu w tym programie.
  • \B=dopasowuje coś, =co nie jest poprzedzone znakiem słownym. To pasuje do czterech z =czwartego programu i nie pasuje do =tego w tym programie.


4

4, JavaScript (ES6), 32 bajty

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

Wyjścia 1 dla pustego wejścia, 2 jeśli wejście zaczyna się od a {, 4 jeśli zaczyna się od sa 3 w przeciwnym razie.


Można zastąpić s[0]=='{'przezs[0]>'z'

1
@Masterzagh Myślałem również o tym, jak można grać w golfa, ale niestety, to nie jest golf golfowy: /
Kritixi Lithos

@KritixiLithos No tak, ale on już trochę grał w golfa, więc pomyślałem, że chciałby pójść dalej.

@Masterzagh Ludzie powinni unikać edytowania poprawnych odpowiedzi w takich wyzwaniach, ponieważ mogą unieważnić a) późniejsze odpowiedzi, b) odpowiedzi, nad którymi obecnie pracujemy.
Martin Ender

@MartinEnder, masz rację. Jako taki nie będę go edytować. Wiem, że wygląda na golfa (ze względu na operatorów trójskładnikowych), ale specjalnie tego nie napisałem ... Dziękuję za wszystkie opinie!
Łukasz

4

11. Mathematica [język 7], 53 bajty

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

Nienazwana funkcja przyjmująca listę znaków za argument i generująca dodatnią liczbę całkowitą. Po prostu rozgałęzia się na pierwszej literze wejścia, używając jego pozycji w ciągu, "^{'sceP"aby zdecydować o wyniku. To daje prawidłową odpowiedź na wszystkie poprzednie zgłoszenia oprócz początkowego pustego programu Retina i najnowszej odpowiedzi Retina ; oba te błędy plucia, ale dane wyjściowe są naprawiane przez regułę, /._@__->1która przekształca każdą nieocenioną funkcję na 1.


Myślę, że nadszedł czas, aby zepsuć tę strategię pierwszego bohatera :)
Martin Ender

1
Miałem zamiar, ale potem przypomniałem sobie, że musiałem poprawnie napisać również w swoim własnym języku: D
Greg Martin

4

16. Perl (język 9), 94 bajty

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

Wypróbuj online! (sprawdza wszystkie odpowiedzi). Wyjścia „1234151516748149”

To drukuje:

  • 1 z odpowiedziami 1, 5, 7, 9 i 14 (Retina).
  • 2 z odpowiedzią 2 (Flak mózgu).
  • 3 z odpowiedzią 3 (APL).
  • 4 z odpowiedziami 4, 12 i 15 (JavaScript).
  • 5 z odpowiedziami 6 i 8 (R).
  • 6 z odpowiedzią 10 (Bash).
  • 7 z odpowiedzią 11 (Mathematica).
  • 8 z odpowiedzią 13 (Python).
  • 9 z tą odpowiedzią (Perl).

Program sprawdza długość wejściową i odwzorowuje ją na bieżącą dystrybucję języka.


3

6. R (język 5), 61 bajtów

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

Sprawdza, jaki jest pierwszy znak wejścia i odpowiednio wybiera wynik.

Spowoduje to wydrukowanie:

  • 1z odpowiedziami 1 i 5 (siatkówka).

  • 2z odpowiedzią 2 (Flak mózgu).

  • 3z odpowiedzią 3 (APL).

  • 4z odpowiedzią 4 (JavaScript).

  • i 5z tą odpowiedzią.

Stosowanie:

> 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

Aby uruchomić to poza REPL, zobacz komentarz pod odpowiedzią 8.
plannapus

3

8. R (język 5), 76 bajtów

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

Sprawdza pierwszą literę wejścia i porównuje go z wektorem zawierającym (w tej kolejności) łańcuchem pustym, {, ', si c. Następnie wyprowadza indeks dopasowania (indeksowanie R jest oparte na 1) lub 1, jeśli nie ma dopasowania.

Ta sama koncepcja, co odpowiedź nr 6, ale uniemożliwia dopasowanie odpowiedzi nr 7 .

To drukuje:

  • 1z odpowiedziami 1 , 5 i 7 (Retina).

  • 2z odpowiedzią 2 (Flak mózgu).

  • 3z odpowiedzią 3 (APL).

  • 4z odpowiedzią 4 (JavaScript).

  • oraz 5z odpowiedzią 6 i tą odpowiedzią (R).

Jeśli się nie mylę, limit liczby bajtów na tę odpowiedź wynosił 94 bajty.


Wygląda na to, że tłumacze online FYI R (rfiddle, ideone i tryitonline) mają problemy z obsługą stdin (przynajmniej z readline ()) i dlatego nie zachowują się poprawnie. Jeśli chcesz spróbować tego (i poprzedniej odpowiedzi), będziesz musiał spróbować lokalnie na zainstalowanej wersji R, obawiam się.
plannapus

^ Ok, poza REPL readlinenależy zastąpić readLines(file("stdin")). Co oznacza 16 kolejnych znaków: odpowiedź 6 powinna zatem wynosić 77 bajtów (z 79 dozwolonych), a ta odpowiedź 92 bajty (z 94 dozwolonych). Po tej zmianie działa również na tłumaczy internetowych.
plannapus

3

12. Javascript (język 4), 117 bajtów

Uwaga: Zmieniłem postać, aby poprawić błąd w tym.

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;

Sprawdza pierwszą literę wejścia, jeśli jest to c, sprawdza długość wejścia.

Wyjścia:

  • 1 dla odpowiedzi 1, 5, 7, 9
  • 2 dla odpowiedzi 2
  • 3 za odpowiedź 3
  • 4 za odpowiedź 4 i tę odpowiedź
  • 5 dla odpowiedzi 6, 8
  • 6 za odpowiedź 10
  • 7 za odpowiedź 11

3

13. Python (język 8), 110 bajtów

Uwaga: Ta odpowiedź została zmieniona 6 godzin po opublikowaniu, na zalecenie PO.

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

Jest to ten sam pomysł, co odpowiedź 10 (w bash), ale w Pythonie 3. (To podejście może działać dla maksymalnie 3 kolejnych wpisów, zanim skończą się cyfry szesnastkowe).

To drukuje:

  • 1z odpowiedziami 1 , 5 , 7 i 9 (Retina).

  • 2z odpowiedzią 2 (Flak mózgu).

  • 3z odpowiedzią 3 (APL).

  • 4z odpowiedziami 4 i 12 (JavaScript).

  • 5z odpowiedziami 6 i 8 (R).

  • 6z odpowiedzią 10 (Bash).

  • 7z odpowiedzią 11 (Mathematica).

  • 8 dla tej odpowiedzi (Python).

Wypróbuj online! dla: odpowiedź 1 , odpowiedź 2 , odpowiedź 3 , odpowiedź 4 , odpowiedź 5 , odpowiedź 6 , odpowiedź 7 , odpowiedź 8 , odpowiedź 9 , odpowiedź 10 , odpowiedź 11 , odpowiedź 12 lub tej odpowiedzi .


Jaki jest obecny limit bajtów?
Vi.

@ Vi .: Cóż, było 149 dla odpowiedzi 13 i 163 dla odpowiedzi 14; ale OP właśnie zmienił reguły liczenia bajtów na 45 + 5n, tak że będzie to 110 bajtów dla odpowiedzi 13 i 115 bajtów dla odpowiedzi 14.
Nick Matteo

Prawdopodobnie powinieneś umieścić rozwiązanie 110-bajtowe.
clismique

@ Qwerp-Derp: W porządku. Mam nadzieję, że nie zakłóci to bieżącej pracy.
Nick Matteo,

OK, czekam na około 60 odpowiedzi, aż limit bajtów dotrze do ziemi przyjaznej Javie.
Vi.

3

24 Zsh (język 11), 142 bajty

Moja poprzednia odpowiedź # 18 w C nadal działa niezmodyfikowana dla wszystkich kolejnych wpisów ( demo ). Więc pomieszajmy to trochę.

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{

Celem komentarza na końcu jest dopasowanie długości odpowiedzi 21 i 23 i upewnienie się, że żaden pojedynczy znak skrótu sha256 lub sha384 nie jest unikalny dla każdej odpowiedzi do tej pory, używając znaków sprawdzonych przez odpowiedzi Lyth's C ++. ;-)

To drukuje:

  • 1z odpowiedziami 1 , 5 , 7 , 9 i 14 (Retina).

  • 2 z odpowiedzią 2 (Flak mózgu).

  • 3 z odpowiedzią 3 (APL).

  • 4z odpowiedziami 4 , 12 i 15 (JavaScript).

  • 5z odpowiedziami 6 i 8 (R).

  • 6z odpowiedziami 10 , 17 , 20 i 22 (Bash).

  • 7z odpowiedziami 11 i 19 (Mathematica).

  • 8z odpowiedzią 13 (Python).

  • 9z odpowiedzią 16 (Perl).

  • 10z odpowiedziami 18 , 21 i 23 (C / C ++).

  • 11 z tą odpowiedzią (Zsh).

Wypróbuj online!


Myślę, że to pierwsza odpowiedź na wiele linii ... +1 ode mnie.
clismique

2

14. Siatkówka (język 1), 39 bajtów

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

Wypróbuj online! (Testuje wszystkie prawidłowe dane wejściowe.)


1
No dalej, Martin, pisz w innym języku ... czy możesz zrobić formatowanie odpowiedzi?
clismique

3
@ Qwerp-Derp To faktycznie zmienia się w ciekawą odmianę standardowego golfa regularnego. Zamiast mieć zestaw danych wejściowych i dopasowywać niektóre z nich, a niektóre inne zawodzić, tutaj musisz uzyskać określoną liczbę dopasowań dla każdego z nich. Zastanawiam się, czy to wyrażenie regularne wybuchnie wykładniczo w pewnym momencie.
Martin Ender,

Czy to naprawdę 39 bajtów? TIO zgłasza 37 bajtów.
Arnauld

1
@ Arnauld TIO jest zakodowany na sztywno, aby po prostu liczyć znaki dla Retina, ponieważ często używasz kodowania jednobajtowego. Ta odpowiedź wymaga jednak UTF-8.
Martin Ender

2

15. JavaScript (język 4), 108 bajtów

Grał w golfa

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) (język 6), 103 bajty

Grał w golfa

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

Używa tej samej techniki, co moja odpowiedź nr 10 , ale zamiast słownika z kodowaniem Base64 Hex .

Do testowania przygotowałem następujący plik danych:

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 (język 7), 96 bajtów

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

Funkcja bez nazwy, która przyjmuje listę znaków jako dane wejściowe i zwraca liczbę całkowitą:

  • 1z odpowiedziami 1 , 5 , 7 , 9 i 14 (Retina).

  • 2z odpowiedzią 2 (Flak mózgu).

  • 3z odpowiedzią 3 (APL).

  • 4z odpowiedziami 4 , 12 i 15 (JavaScript).

  • 5z odpowiedziami 6 i 8 (R).

  • 6z odpowiedziami 10 i 17 (Bash).

  • 7z odpowiedzią 11 i tą odpowiedzią (Mathematica).

  • 8z odpowiedzią 13 (Python).

  • 9z odpowiedzią 16 (Perl).

  • 10z odpowiedzią 18 (C).

Do tej pory wszystkie długości odpowiedzi są różne, a nawet odrębne modulo 59 - stąd można wykryć, przy pomocy której liczby całkowitej z zakresu 33, 34, ..., 91 są one zgodne (mod 59). Są to wszystkie drukowalne znaki ASCII, kodowane przez ciąg znaków ";NRU$ Q B [1: =L J, 5% 3 # >"; użycie ToCharacterCode@StringSplit@przekształca ten ciąg w listę dziesięciu list liczb całkowitych w tym zakresie i Position[...,Mod[Length@#,59,33]][[1,1]]sprawdza, która z dziesięciu list podrzędnych odpowiada zmodyfikowanej długości danych wejściowych.


1

20. Bash (+ coreutils + openssl) (język 6), 121 bajtów

Grał w golfa

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

Ta sama metoda, co moja odpowiedź nr 17 (która z kolei opiera się na mojej pierwotnej odpowiedzi nr 10 ).

Ponieważ mamy teraz 10 różnych języków, przełączyłem się na szesnastkowe kodowanie pozycji.

Dane

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 (wyjście)

./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) (język 10), 142 bajty

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

Wypróbuj online!

  • 1z odpowiedziami 1 , 5 , 7 , 9 i 14 (Retina).

  • 2z odpowiedzią 2 (Flak mózgu).

  • 3z odpowiedzią 3 (APL).

  • 4z odpowiedziami 4 , 12 i 15 (JavaScript).

  • 5z odpowiedziami 6 i 8 (R).

  • 6z odpowiedziami 10 , 17 , 20 i 22 (Bash).

  • 7z odpowiedzią 11 i 19 (Mathematica).

  • 8z odpowiedzią 13 (Python).

  • 9z odpowiedzią 16 (Perl).

  • 10z odpowiedzią 18 , 21 i tą odpowiedzią (C).

Ten program zlicza liczbę różnych znaków (w ASCII, więc wielobajtowe znaki UTF-8 dzielą się na kilka pozycji), a następnie postępuje zgodnie ze starannie zaprojektowanym drzewem decyzyjnym, w oparciu o liczbę wystąpień tego lub innego znaku.

Drzewo decyzyjne pozostaje niezmienione od # 21 (tak!). Nie wolno mi pisać dokładnie tego samego kodu, więc wróciliśmy do czystego C z drobnymi modyfikacjami.


0

21. C ++ (gcc) (język 10 jako wariant C), 142 bajty

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

Wypróbuj online!

  • 1z odpowiedziami 1 , 5 , 7 , 9 i 14 (Retina).

  • 2z odpowiedzią 2 (Flak mózgu).

  • 3z odpowiedzią 3 (APL).

  • 4z odpowiedziami 4 , 12 i 15 (JavaScript).

  • 5z odpowiedziami 6 i 8 (R).

  • 6z odpowiedziami 10 , 17 i 20 (Bash).

  • 7z odpowiedzią 11 i 19 (Mathematica).

  • 8z odpowiedzią 13 (Python).

  • 9z odpowiedzią 16 (Perl).

  • 10z odpowiedzią 18 i tą odpowiedzią (C).

Ten program zlicza liczbę różnych znaków (w ASCII, więc wielobajtowe znaki UTF-8 dzielą się na kilka pozycji), a następnie postępuje zgodnie ze starannie zaprojektowanym drzewem decyzyjnym, w oparciu o liczbę wystąpień tego lub innego znaku.

Ciekawostki : litera K nie była używana do tego wpisu. Litery I, E, Y, j, k, q, z pozostają nieużywane.


Istnieje możliwość rozważenia języka C ++ 11, aby zmieścić się w nim kilka bajtów.
Lyth

0

22. Bash (+ coreutils) [język 6], 123, 131 bajtów

EDYCJA: Najpierw opublikowano niewłaściwą wersję, należy ją teraz naprawić.

Grał w golfa

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

Ta sama technika, co moje odpowiedzi # 20, # 17 i # 10 .

Dane

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

Testowe uruchomienie

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

Co to jest 44?
clismique

22 * 2? 󠀠󠀠󠀠󠀠󠀠
Vi.

@ Qwerp-Derp, tylko literówka
zeppelin

Daj spokój, twoje odpowiedzi stają się teraz nudne - jeśli twoja następna odpowiedź jest taka, rozważam oddanie głosu (to nie ciekawe, wiesz?)
clismique

1
Coś tu nie gra. W haszowanych literach jest tylko 20 pozycji (3PgT itp.). Za puste wejście dostaję błąd, a za odpowiedź nr 2 dostaję „4” (oba działały poprawnie z odpowiedzią 20.)
Nick Matteo

0

25. Bash (język 6), 169 bajtów

Ta sama technika, co moje odpowiedzi # 22, # 20, # 17 i # 10 .

Przepraszamy @ Qwerp-Derp! ;) Obiecuję, że to ostatni :)

Grał w golfa

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

Dane

Pamiętaj, że znaki nowej linii są zakodowane jako \ n dla odpowiedzi nr 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

Wyjście testowe

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.