To gra dla trzech graczy, gra jedną ręką.
W tym samym czasie każdy gracz pokazuje swoją rękę z 0 do 5 palcami wyciągniętymi.
Jeśli wszyscy gracze pokazują ten sam (parzysty lub nieparzysty) numer, nie ma zwycięzcy. Ale inaczej, gracz pokazujący inny rodzaj wygrywa.
P l a y e r s
A B C Winner
Even Even Even No winner
Odd Odd Odd No winner
Even Odd Odd Player A
Odd Even Even Player A
Even Odd Even Player B
Odd Even Odd Player B
Odd Odd Even Player C
Even Even Odd Player C
Żądane narzędzie może wykorzystywać argumenty (3 argumenty jako wartości liczbowe od 0 do 5) lub STDIN (3 wartości według linii, oddzielone spacjami).
Nie trzeba sprawdzać danych wejściowych: nieregularne dane wejściowe mogą powodować nieoczekiwane wyniki.
Argumenty lub wartości na linii podana jest od lewej do prawej, od gracza A do odtwarzacza C .
Wyjście musi zawierać tylko A
, B
lub C
(kapitalizowane) lub ciąg znaków no one
(małymi literami, z regularnym przestrzeni).
Narzędzie może działać tylko raz lub jako filtr we wszystkich wierszach wejściowych.
Najkrótszy kod wygrywa.
Odpowiedzi:
APL (
3430)Wyjaśnienie:
2|⎕
: przeczytaj wiersz danych wejściowych, weź mod-2 każdej liczby (podając listę, tj.1 0 1
)∘.=⍨
: porównaj każdy element w wektorze z każdym elementem w wektorze, otrzymując macierz+/
: zsumuj rzędy macierzy, podając dla każdego elementu, ile elementów była równa. Gdyby były dwa takie same i jeden inny, mamy teraz wektor podobny do tego,2 1 2
gdzie1
oznaczono, kto był inny. Jeśli wszystkie są takie same, otrzymamy3 3 3
.1⍳⍨
: znajdź pozycję1
. Jeśli nie ma1
, to w tym przypadku zwraca o więcej niż długość wektora4
.⊃'ABC',⊂'no one'
: wyświetla ciąg pod danym indeksem.źródło
Mathematica,
45 43 4241 znakówPrzykład:
Inne rozwiązanie z
4342 znakami:źródło
PowerShell, 65
źródło
Befunge-98,
61 5045 znakówWykorzystuje sprytną minę Forsa, aby zgolić jeszcze kilka postaci. Teraz jednowierszowy (tzn. Kompatybilny z Unefunge)! Czyta do momentu wygrania gry; dodaj
@
na końcu, aby uzyskać program jednorazowy.Traktuje wejściowy mod 2 jako liczbę binarną, jak w mojej odpowiedzi JS, a następnie polega na wyszukiwaniu AC i wraca do „nikogo”, jeśli jest poza boiskiem (poprzez sprawdzenie, czy znak jest ≥'A ”, co pozwala mi użyć pobliskiego kodu jako danych: D).Odmiana, która odczytuje wiersz danych wejściowych, generuje dane wyjściowe, odczytuje nowy wiersz danych wejściowych itp., Dopóki nie zostanie podjęta decyzja o grze (tj. Nie „nikt”):
źródło
APL, 30
Jeśli wolno mi zmieniać zmienne systemowe według konfiguracji, można wygolić 2 znaki. (W szczególności zmiana początku indeksu
⎕IO
na 0)Kluczowy kawałek
Jeśli reprezentujemy wszystkie szanse w ten sam sposób, a wszystkie wyrównujemy w ten sam sposób, wówczas operacja równości par może rozróżnić wszystkie 4 przypadki:
0 0
dla wygranych B,0 1
dla wygranych A itp.Wyjaśnienie
2|⎕
Pobiera dane wejściowe i mod 22=/
Równość parami1+
Dodaj 1 do indeksowania (tablice APL są domyślnie oparte na 1)'BA'('C',⊂'no one')
Zagnieżdżona tablica⊃
Wybiera właściwy element z zagnieżdżonej tablicyźródło
C: 88 znaków
Niestety C, jak zawsze, wymaga sporo niepotrzebnych śmieci. Ale w jakim innym języku można pisać,
=**++b+**(++
a to faktycznie coś znaczy? Po prostu wysublimowane.Wystarczy przekazać trzy liczby jako argumenty i voilà!
źródło
*b[1]
itp. Bez różnicy wielkości (choć trochę utraty elegancji .. :()s = "=**++b+**(++"
P z całą powagą, wow, jak to ... jak to w ogóle działa? : Ob
, i całkiem dobrze wydrukujesz ten warunek, powinieneś być w stanie to zrozumieć. : D (pióro i papier również pomagają, dla wynikowej tabeli prawdy)GolfScript (31 znaków)
Bardzo prosta logika: zmniejsz moduł wejściowy 2, a następnie posortuj kopię. Środkowy element posortowanej tablicy jest w większości, więc poszukaj indeksu, który jest inny (a zatem w mniejszości).
źródło
Ruby (ciało funkcyjne), 42 znaki
Zakładając 3 numeryczne argumenty
a
,b
orazc
:Ruby (narzędzie wiersza poleceń), 61 znaków
Wersja 1 ma 62 znaki:
Ale, odkładając odpowiedź Darrena Stone'a , wersja 2 sprowadza się do 61 znaków:
źródło
Ruby, 61 znaków
źródło
['no one',?C,?B,?A]
==%w(no\ one C B A)
(zapisane 2 znaki).JavaScript (węzeł), 87 znaków
Aby piłka się potoczyła ... oczekuje danych wejściowych w postaci trzech dodatkowych argumentów. Wykorzystuje następujący wzorzec dla wejścia / wyjścia (
/
reprezentuje „nikt”):źródło
GolfScript,
363533 znakówPobiera dane wejściowe zgodnie z opisem z STDIN. Możesz również przetestować kod online .
źródło
Perl, 84 znaków.
<>=~/(\d)/g
analizuje linię wejściową na wyraźne cyfrymap{$_%2
bierze tę listę i oblicza wartość mod 2 (parzysta lub nieparzysta)oct"0b".join"",
pobiera tę listę wartości modów, łączy je w ciąg, dołącza specyfikator ósemkowy i konwertuje ciąg na liczbę.Zasadniczo stworzyłem tabelę prawdy, a następnie starannie zmieniłem jej kolejność, tak że miałem operację odwracania
$x == 4
. Więc jeśli$x >=4
zrobiliśmy inwersję[$x>=4?7-$x:$x]
której użyliśmy do indeksowania w tablicy('no one','C','B','A')
To nie jest najkrótszy możliwy kod, ale tak naprawdę nie jest to szum linii ... co samo w sobie jest niezwykłe.
Perl: 74 znaków + 3 flagi = 77, biegnij z
perl -anE '(code)'
Jest to poprawa, polegająca na wykorzystaniu funkcji autosplit (-a), powiedzmy (-E) i na końcu ustaleniu, co było nie tak z porównaniem.
źródło
>=4
zamiast po prostu>3
? +1 za wskazówki,'0b'.
których wcześniej nie znałemCommon Lisp,
114 10670 znakówZ trzech wartości utwórz parę reprezentującą różnicę w parzystości między sąsiednimi elementami. Potraktuj to jako liczbę binarną, aby zindeksować do listy wyników.
Starszy algorytm:
źródło
Python 2, 54
źródło
Mathematica
100 9489Testowanie
źródło
Haskell, 97
źródło
R 67
źródło
/usr/bin/R
), A następnie wprowadzić powyższy kod.scan()
jest to, co poprosi cię o wprowadzenie: przykładem może być wpisanie,1[space]3[space]5[space][enter][enter]
a zobaczysz odpowiednie wyjście (tutaj,no one
) wydrukowane na ekranie. Możesz pobrać R tutaj: cran.r-project.org/mirrors.htmlC, 85 znaków
Nie tak krótki jak moja odpowiedź Ruby, ale cieszę się z tego, biorąc pod uwagę
main
cruft.źródło
Ryba - 41
Odpowiedź Stfego FireFly na befunge i przeniesienie go do ryb, ponieważ użycie rejestrów w rybach pozwala nam ogolić niektóre postacie. Straciłem kilka znaków z powodu braku poziomego, jeśli operator.
To przenosi parametry poprzez argumenty.
źródło
#@...<
na końcu, aby zapisać znak. Aha, a twój obecny kod wygląda dla mnie na 42 znaki, więc zmniejszaj liczbę znaków. :)Smalltalk, 128 znaków
wysłać
value:
z kolekcjąźródło
JavaScript (ES6) / CoffeeScript, 50 bajtów
Korzysta z tabeli prawdy zgodnie z odpowiedzią Firefly, ale przyjmuje bardziej bezpośrednie podejście do dostępu do postaci:
Próbny
źródło
Python 3, 115
źródło
Python 3, 114
źródło
Dwie różne metody w dwóch różnych językach + warianty -> 6 odpowiedzi
Istnieją zasadniczo 2 sposoby tej operacji:
array
na podstawie: Zbudowano 3-cyfrową liczbę binarną, niż pobrać odpowiedź z tablicycount
na podstawie: Policz parzyste i nieparzyste i sprawdź, czy istniejecount == 1
Perl 71 (oparty na tablicy + wariacja)
Jeden z moich najkrótszych perli:
s/(.)\s*/$1&1/eg;
przekształć ciąg podobny1 2 3
do101
$==oct"0b".$_;
przekształć binarny na oct (taki sam jak dec, poniżej 8)$==$=>3?7-$=:$=;
jeśli> 3
oper7-
. (Stamtądno one
== 0)say$=?chr 68-$=:"no one"
jeśli nie0
, wypisz char od wartości, w przeciwnym razie wydrukujno one
.Perl 71 (oparty na tablicy)
nieco inny na etapie drukowania: dane wyjściowe są oparte na „tablicy” .
Perl 81 (na podstawie liczby)
Inne znaczenie:
$c=A
Zainicjuj licznik c za pomocąA
.map{$a[$_%2]=$c++;$b[$_%2]++}split
Licznik b count parzystych i nieparzystych, sklep który jeden tylkosay$b[0]==1?$a[0]:
jeśli nawet licznik == 1? również wydrukować nawet odtwarzacz.$b[0]==2?$a[1]:
jeśli nawet licznik == 2? również drukuje nieparzysty odtwarzacz.:"no one"
w przeciwnym razie wydrukujno one
.Bash 85 (oparty na macierzy)
Jest to oparte na mojej drugiej wersji perla:
c=$((($1%2)<<2|($2&1)*2+($3%2)))
zrobić indeks pos.mod
and
*4
<<1
.((c>3))&&c=$((7-c))
jeśli c> = 4, to c = 7-c.o=()
zadeklaruj tablicęecho ${o[c]}
na podstawie tablicyBash 133 (na podstawie liczby)
a[$1&1]=A;a[$2&1]=B;a[$3&1]=C
zapisz gracza w zmiennej a [parzysty] i [nieparzysty]((b[$1&1]++));((b[$2&1]++));((b[$3&1]++))
policz parzyste / nieparzyste w b.case $b in 1) echo ${a[0]}
w przypadku gdy licznik parzysty == 1 wydruk parzysty odtwarzacz2)echo ${a[1]};;
case even counter == 2 drukuj nieparzysty odtwarzacz*)echo no one;esac
w przeciwnym razie wydrukujno one
.Bash 133 (na podstawie liczby)
Ta sama wersja, zamiast warunku i grupy poleceń bash
case ... esac
źródło
Game Maker Language, 116
Moja nowa odpowiedź w dużej mierze opiera się na formule FireFly:
Stary kod skompilowany z niezainicjowanych zmiennych jako 0, 183 znaków:
Edytuj # 1 - Cały inny kod
źródło
Clojure, 116
źródło
vba, 116
wywołać
?z(1,2,3)
lub przypisać do zmiennej za pomocąq=z(1,2,3)
, a nawet używać jako UDF w programie Excel i używać=z(1,2,3)
w formule programu Excelźródło
Python 3, 80 znaków
Uwaga: wejście musi mieć wartość „1” [nieparzysty] lub „0” [parzysty]. Na przykład:
źródło
split
ajoin
więc nadal możesz wykorzystać swój (bardzo inteligentny)int(...input...)
pomysł. ?'0b'+
Myślę, że , przynajmniej wydaje mi się zbędny i po prostuint(input(),2)
wydaje się działać w REPL.Java, 226 znaków
źródło
C
10196C, prawdopodobnie najbardziej trywialny przykład (niektóre operacje trójkowe):
źródło