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 1
st. 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 2
drugim 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 1
i 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, 1
biorąc pod uwagę pierwszy program i siebie (ponieważ Ruby jest 1
używanym językiem st), a biorąc pod uwagę drugi program, musi on wypisać 2
.
Zasady:
- Jeśli
n
w wyzwaniu są obecnie odpowiedzi, muszą istnieć co najmniejfloor(n / 3)
różne języki. Wszelkie zgłoszenia łamiące tę zasadę są dyskwalifikowane. - Żadne dwie „sąsiadujące odpowiedzi” (np. Odpowiedź
n
i 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 n
przydzielona 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ą.
źródło
floor(n / 3)
Języków). Zgaduję, że to nie jest zamierzone zachowanie.Odpowiedzi:
26. > <> (język 12), 164 bajty
Mój pierwszy program w> <>! Ma 156 znaków, ale 164 bajty w UTF-8.
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 odpowiedziami 10 , 17 , 20 , 22 i 25 (Bash).7
z odpowiedziami 11 i 19 (Mathematica).8
z odpowiedzią 13 (Python).9
z odpowiedzią 16 (Perl).10
z odpowiedziami 18 , 21 i 23 (C / C ++).11
z 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{'tc
kładzie się na stosie. Pojedynczy znak wejścia jest czytany (i
). (Nazwijmy ten znakC
ekspozycją.) 2 jest umieszczane w rejestrze (2&
). Następnie przeskakujemy na początek drugiej linii (linia 1) (01.
).Ta linia porównuje się
C
z każdym znakiem na stosie. KopiaC
jest przechowywana na spodzie stosu.{
obraca stos tak, abyC
był na wierzchu;:
powiela to;}
obraca kopię z powrotem na dół. Zwiększamy register (&1+&
) aż do znalezienia dopasowania. (Jeśli więcC
jest „c”, rejestr zawiera 3 po znalezieniu dopasowania; jeśliC
jest „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
C
jest 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ę don
instrukcji, 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+
b
i1
otrzymujemy 12, ten język; w przeciwnym razie 1 pozostaje na wierzchu stosu.źródło
1. Siatkówka , 0 bajtów
Wypróbuj online!
Pusty program drukuje
1
po podaniu pustego wejścia (tzn. Samego siebie), ponieważ zlicza, jak często pusty wyrażenie regularne pasuje do wejścia (co jest zawsze1+length(input)
).źródło
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.
źródło
3. APL, 7 bajtów
Wyjaśnienie:
źródło
10. Bash (+ coreutils) [język 6],
44, 74 bajtyNaprawiono wersję (zwraca identyfikator języka)
Uwaga: oczekuje się, że końcowy znak nowej linii, po tekście programu wejściowego
źródło
9. Siatkówka (język 1), 20 bajtów
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ę1
dla 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,1
pojawia się w obu z nich trzy razy i nie ma w innych programach. Dopasowujemy go, dodając tautologiczną granicę słów pomiędzy,,\b1
aby zapobiec ponownemu dopasowaniu się do siebie.źródło
1
jest to po prostu ich domyślny wynik. Będę musiał coś z tym zrobić z następną odpowiedzią.18. C (język 10), 121 bajtów
Jest to standard C89 lub C90. Działa z clang lub gcc w Try It Online.
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 odpowiedziami 10 i 17 (Bash).7
z odpowiedzią 11 (Mathematica).8
z odpowiedzią 13 (Python).9
z 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):
źródło
5. Siatkówka (język 1), 23 bajty
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.źródło
7. Siatkówka (język 1), 27 bajtów
Wypróbuj online! (Testuje wszystkie możliwe dane wejściowe.)
Drobna modyfikacja piątej odpowiedzi .
\B=
już znajduje 4 dopasowania w szóstej odpowiedzi i\b5
znajduje inne bez dopasowywania innych odpowiedzi.źródło
4, JavaScript (ES6), 32 bajty
Wyjścia 1 dla pustego wejścia, 2 jeśli wejście zaczyna się od a
{
, 4 jeśli zaczyna się ods
a 3 w przeciwnym razie.źródło
s[0]=='{'
przezs[0]>'z'
11. Mathematica [język 7], 53 bajty
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łę,/._@__->1
która przekształca każdą nieocenioną funkcję na1
.źródło
16. Perl (język 9), 94 bajty
Wypróbuj online! (sprawdza wszystkie odpowiedzi). Wyjścia „1234151516748149”
To drukuje:
Program sprawdza długość wejściową i odwzorowuje ją na bieżącą dystrybucję języka.
źródło
6. R (język 5), 61 bajtów
Sprawdza, jaki jest pierwszy znak wejścia i odpowiednio wybiera wynik.
Spowoduje to wydrukowanie:
1
z odpowiedziami 1 i 5 (siatkówka).2
z odpowiedzią 2 (Flak mózgu).3
z odpowiedzią 3 (APL).4
z odpowiedzią 4 (JavaScript).i
5
z tą odpowiedzią.Stosowanie:
źródło
8. R (język 5), 76 bajtów
Sprawdza pierwszą literę wejścia i porównuje go z wektorem zawierającym (w tej kolejności) łańcuchem pustym,
{
,'
,s
ic
. 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:
1
z odpowiedziami 1 , 5 i 7 (Retina).2
z odpowiedzią 2 (Flak mózgu).3
z odpowiedzią 3 (APL).4
z odpowiedzią 4 (JavaScript).oraz
5
z odpowiedzią 6 i tą odpowiedzią (R).Jeśli się nie mylę, limit liczby bajtów na tę odpowiedź wynosił 94 bajty.
źródło
readline
należ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.12. Javascript (język 4), 117 bajtów
Uwaga: Zmieniłem postać, aby poprawić błąd w tym.
Sprawdza pierwszą literę wejścia, jeśli jest to c, sprawdza długość wejścia.
Wyjścia:
źródło
13. Python (język 8), 110 bajtów
Uwaga: Ta odpowiedź została zmieniona 6 godzin po opublikowaniu, na zalecenie PO.
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:
1
z odpowiedziami 1 , 5 , 7 i 9 (Retina).2
z odpowiedzią 2 (Flak mózgu).3
z odpowiedzią 3 (APL).4
z odpowiedziami 4 i 12 (JavaScript).5
z odpowiedziami 6 i 8 (R).6
z odpowiedzią 10 (Bash).7
z 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 .
źródło
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ę.
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:
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 odpowiedziami 10 , 17 , 20 i 22 (Bash).7
z odpowiedziami 11 i 19 (Mathematica).8
z odpowiedzią 13 (Python).9
z odpowiedzią 16 (Perl).10
z odpowiedziami 18 , 21 i 23 (C / C ++).11
z tą odpowiedzią (Zsh).Wypróbuj online!
źródło
14. Siatkówka (język 1), 39 bajtów
Wypróbuj online! (Testuje wszystkie prawidłowe dane wejściowe.)
źródło
15. JavaScript (język 4), 108 bajtów
Grał w golfa
źródło
17. Bash (+ coreutils + openssl) (język 6), 103 bajty
Grał w golfa
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:
Test
źródło
19. Mathematica (język 7), 96 bajtów
Funkcja bez nazwy, która przyjmuje listę znaków jako dane wejściowe i zwraca liczbę całkowitą:
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 odpowiedziami 10 i 17 (Bash).7
z odpowiedzią 11 i tą odpowiedzią (Mathematica).8
z odpowiedzią 13 (Python).9
z odpowiedzią 16 (Perl).10
z 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życieToCharacterCode@StringSplit@
przekształca ten ciąg w listę dziesięciu list liczb całkowitych w tym zakresie iPosition[...,Mod[Length@#,59,33]][[1,1]]
sprawdza, która z dziesięciu list podrzędnych odpowiada zmodyfikowanej długości danych wejściowych.źródło
20. Bash (+ coreutils + openssl) (język 6), 121 bajtów
Grał w golfa
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
Test (wyjście)
źródło
23. C (gcc) (język 10), 142 bajty
Wypróbuj online!
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 odpowiedziami 10 , 17 , 20 i 22 (Bash).7
z odpowiedzią 11 i 19 (Mathematica).8
z odpowiedzią 13 (Python).9
z odpowiedzią 16 (Perl).10
z 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.
źródło
21. C ++ (gcc) (język 10 jako wariant C), 142 bajty
Wypróbuj online!
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 odpowiedziami 10 , 17 i 20 (Bash).7
z odpowiedzią 11 i 19 (Mathematica).8
z odpowiedzią 13 (Python).9
z odpowiedzią 16 (Perl).10
z 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.
źródło
22. Bash (+ coreutils) [język 6],
123, 131 bajtówEDYCJA: Najpierw opublikowano niewłaściwą wersję, należy ją teraz naprawić.
Grał w golfa
Ta sama technika, co moje odpowiedzi # 20, # 17 i # 10 .
Dane
Testowe uruchomienie
źródło
44
?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
Dane
Wyjście testowe
źródło