W grze karcianej Magic: the Gathering występuje pięć różnych kolorów, które reprezentują luźne powiązania kart, biały ( W
), niebieski ( U
), czarny ( B
), czerwony ( R
) i zielony ( G
). Są one często ułożone w pięciokąt w następujący sposób:
W
G U
R B
Zarówno w tradycji MtG, jak i w wielu mechanikach kart, sąsiednie kolory w tym pięciokącie są zwykle uważane za sojuszników, a niesąsiadujące (jakby przeciwne) kolory są uważane za wrogów.
W tym wyzwaniu otrzymasz dwa kolory i powinieneś określić ich związek.
Wyzwanie
Otrzymałeś dowolne dwie różne postacie z zestawu BGRUW
. Możesz je traktować jako ciąg dwóch znaków, ciąg z ogranicznikiem między znakami, dwie oddzielne wartości znaków, dwa ciągi singletonów, dwie liczby całkowite reprezentujące ich punkty kodowe lub typ listy lub zestawu zawierający dwa znaki / ciągi / liczby całkowite.
Twój wynik powinien być jedną z dwóch wyraźnych i spójnych wartości twojego wyboru, jedną, która wskazuje, że dwa kolory są sojusznikami, a drugą, że są wrogami. Jedna z tych dwóch wartości może w ogóle nie dać wyniku.
Możesz napisać program lub funkcję i użyć dowolnej z naszych standardowych metod otrzymywania danych wejściowych i dostarczania danych wyjściowych.
Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Przypadki testowe
Istnieje tylko 20 możliwych danych wejściowych, więc wymienię je wszystkie.
Przyjaciele:
WU UB BR RG GW UW BU RB GR WG
Przeciwnicy:
WB UR BG RW GU BW RU GB WR UG
źródło
Odpowiedzi:
JavaScript (ES6),
26 23 17 1514 bajtówPobiera dane wejściowe jako dwa kody ASCII w składni curry
(a)(b)
. Zwraca4
dla przyjaciół lub0
dla wrogów.Wypróbuj online!
W jaki sposób?
NB: tylko iloraz liczby całkowitej dzielenia przez 0,6 pokazano poniżej.
Poprzednie podejście, 15 bajtów
Pobiera dane wejściowe jako dwa kody ASCII w składni curry
(a)(b)
. Zwraca0
dla przyjaciół lub1
dla wrogów.Wypróbuj online!
W jaki sposób?
Wstępne podejście, 23 bajty
Pobiera dane wejściowe jako ciąg 2 znaków. Zwraca
true
dla przyjaciół lubfalse
dla wrogów.Wypróbuj online!
źródło
a*b%290&8
działałby równie dobrze (produkowanie0
dla przyjaciół lub8
wrogów).Galaretka , 6 bajtów
Jako argument przyjmuje dwa punkty kodowe. Daje 1 dla przyjaciół, 0 dla wrogów.
Wypróbuj online!
tło
Niech n i m będą punktami kodowymi dwóch znaków wejściowych. Biorąc | n - m | , musimy zajmować się tylko 2-kombinacjami postaci. Poniższa tabela pokazuje wszystkie 2 kombinacje znaków odpowiadające im różnice bezwzględne.
Wszystkie stac choc kombinacje są podzielne przez 3 , 5 lub 7 , ale żaden ze znajomych kombinacji tego, więc przyjaciele są dokładnie te, które są wspólnie pierwsza z 3 × 5 × 7 = 105 .
Jak to działa
źródło
_
to galaretka. Użyłeś czegoś innego?ạ
tylko wartość bezwzględną, a nie absolutną różnicę.Python 2 , 19 bajtów
Wypróbuj online!
Anonimowa funkcja: wraca
1
dla przyjaciół i0
wrogów.źródło
Befunge-98,
1312 bajtówWypróbuj online!
Odbitki
0
dla przyjaciół i1
wrogówWykorzystuje różnicę między wartościami ASCII liter.
Jeśli weźmiemy
(((ASCII difference % 9) % 5) % 3)
, wartości dla wrogów będą wynosić 0. Wówczas nie będziemy wartością i wydrukujemy ją.Dzięki @Martin za golfa
źródło
IA%9%5%3¬
Edytuj Wypróbuj online!Galaretka ,
87 bajtówPiggyback z fantastycznej odpowiedzi Mistunge Figgins na Befunge !
Wypróbuj online!
W jaki sposób?
Jak zauważył Mistah Figgins, decyzję można podjąć, biorąc absolutną różnicę między wartościami ASCII mod 9 mod 5 mod 3 - 0 to przyjaciele, a 1 i 2 są wrogami.
Jeśli zamiast tego weźmiemy (zwykły) mod różnicy 9, stwierdzimy, że przyjaciele to 1, 2, 7 i 8, podczas gdy wrogowie to 3, 4, 5 i 6.
Kod do kwadratu różnicę przy
I
czym indeksy do listy długość 9[1,1,0,0,0,0,1,1,0]
, który jest 390 binarnie390B
. Indeksowanie jest zarówno modułowe (tak więc indeksowanie wykonuje mod 9 za darmo), jak i oparte na 1 (stąd 1 po lewej).źródło
Metaprogramowanie szablonu C ++, 85 bajtów
mniej golfa:
Ponieważ jest to język metaprogramowania, kompilacja lub kompilacja nie jest jednym z możliwych wyników.
Instancja
f<'W','B'>
kompilacji wtedy i tylko wtedy'W'
i'B'
są wrogowie.Matematyka oparta na odpowiedzi Befunge .
Przykład na żywo .
Ponieważ metaprogramowanie szablonów C ++ jest jednym z najgorszych języków gry w golfa, każdy, kto jest gorszy, powinien się wstydzić. ;)
źródło
template
.Ruby,
2219 bajtówWprowadź: kod ASCII 2 znaków. Wyjście: 1 dla sojuszników, 0 dla wrogów.
Jak to działa:
Znajdź różnicę między 2 cyframi modulo 9, użyj maski bitowej (390 to binarna 110000110) i uzyskaj pojedynczy bit za pomocą
[]
operatora.źródło
->x,y{x*y%103%2}
Zauważ, że0
i1
są odwrócone.x*y%51>9
jak wszyscy inni. Sądzę, że niesprawiedliwe byłoby głosowanie za tak radykalną zmianą.CJam , 8 bajtów
Nienazwany blok, który oczekuje dwóch kodów znaków na stosie i zastępuje je
0
(przyjaciółmi) lub1
(wrogami).Wypróbuj online!
Wyjaśnienie
Cóż, widzieliśmy teraz wiele zabawnych rozwiązań arytmetycznych, więc myślę, że to w porządku, jeśli przedstawię teraz swoje własne. Najbliżej tego, co widziałem do tej pory, jest rozwiązanie C Steadyboksa . Ten został znaleziony przy pomocy brutalnego forcerla GolfScript, który napisałem jakiś czas temu dla anarchii golfa.
Oto, co robi to z różnymi danymi wejściowymi (ignorując kolejność, ponieważ początkowe mnożenie jest przemienne):
Widzimy, jak biorąc iloczyn iloczynu modulo 51 ładnie dzieli dane wejściowe na duże i małe wyniki, i możemy użyć dowolnej z wartości pomiędzy, aby rozróżnić oba przypadki.
źródło
Röda ,
302221 bajtówBajty zapisane dzięki @fergusq przy użyciu
_
do pobierania wartości ze strumienia jako danych wejściowychWypróbuj online!
Funkcja jest uruchamiana jak
push "WU" | f
po przypisaniu nazwy do funkcjiWyjaśnienie
źródło
{[(_.._)in"WUBRGWGRBUW"]}
ale wtedy funkcja musi zostać wywołana jak[a, b] | f
.05AB1E , 10 bajtów
Zwraca 0 za przyjaciela i 1 za wroga.
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
C,
3332292422 bajtówZwraca 1 jeśli przyjaciele, 0 jeśli wrogowie.
źródło
Vim,
2221 bajtówDane wejściowe: pojedynczy wiersz zawierający dwa znaki.
Wyjście: pusty bufor dla przyjaciół, bufor zawierający
WUBRGWGRBUW
wrogów.Wyjaśnienie
źródło
C
zamiastcw
Japt , 6 bajtów
Zainspirowany rozwiązaniem @Martin Ender .
Pobiera tablicę dwóch kodów znaków jako danych wejściowych.
Wypróbuj online! | Pakiet testowy
Zwraca
true
dla przyjaciół,false
dla wrogów.14-bajtowe rozwiązanie:
Pobiera dwa kody znaków jako dane wejściowe
Wypróbuj online! | Pakiet testowy
Wyjaśnienie:
12-bajtowe rozwiązanie:
Wypróbuj online! | Pakiet testowy
Wyjaśnienie:
Zwraca
1
dla przyjaciół i0
dla wrogów.9-bajtowe rozwiązanie :
Zainspirowany rozwiązaniem @ Arnauld .
Pakiet testowy
Zwraca
1
dla przyjaciół,0
dla wrogów.11-bajtowe rozwiązanie:
zainspirowany rozwiązaniem @Mistah Figgins .
Pakiet testowy
źródło
Brain-Flak ,
155, 147, 135 bajtówWypróbuj online!
Jest to 134 bajty kodu plus jeden bajt kary dla
-a
flagi, która umożliwia wejście ASCII.Działa to poprzez znalezienie bezwzględnej różnicy między wejściami i sprawdzenie, czy są równe 2, 11, 16 lub 19. Jeśli tak, dane wejściowe są przyjacielem i wypisuje 1. Jeśli nie, nic nie wypisuje. Ponieważ nic w teście mózgowym nie odpowiada pustemu stosowi, co jest fałszem, żadne wyjście nie jest wartością fałszowania. ( meta )
Jedną rzeczą, która szczególnie podoba mi się w tej odpowiedzi, jest to, że fragment „absolutnej różnicy” (to znaczy
(([(({}[{}]))<>])){({}())<>}{}{}<>{}
) nie jest czysty na stosie, ale nadal można go użyć w tej odpowiedzi, ponieważ nie obchodzi nas, na którym stosie trafimy przed kodowaniem. możliwe różnice.Przy późniejszej edycji wykorzystałem to jeszcze bardziej, nadużywając resztek na stosie, co nie kończy się absolutną różnicą. Podczas pierwszej wersji wysadziłem ich obu, aby zachować nieco więcej rozsądku. Nie zrobienie tego daje dwa główne pola golfowe:
Oczywiście usuwa kod, aby je pop:,
{}{}
ale co ważniejsze:Pozwala nam to skompresować
2, 11, 16, 19
sekwencjędo
Na szczęście nie ma potrzeby dodatkowego kodu, aby później obsłużyć te resztki, więc pozostały one tylko na innym stosie.
Ponieważ flakowanie mózgu jest niezwykle trudne do zrozumienia, oto czytelna / skomentowana wersja:
źródło
Galaretka , 14 bajtów
Zwraca
1
za wrogów i0
przyjaciół.Pakiet testowy w Wypróbuj online!
W jaki sposób?
źródło
05AB1E , 7 bajtów
To jest port mojej odpowiedzi na żelki . Pobiera na wejściu listę punktów kodowych. Drukuje 1 dla przyjaciół, 0 dla wrogów.
Wypróbuj online!
Jak to działa
źródło
CJam ,
16121110 bajtówRozegrano 4 bajty za pomocą algorytmu Mistah Figgins
Zaoszczędzono 1 bajt dzięki Lynn
Wyjścia
1
dla kolorów wroga,0
dla kolorów sojuszników.Wypróbuj online! (Lub zweryfikuj wszystkie przypadki testowe )
Wyjaśnienie
źródło
l:m9%5%3%!
jest bajt krótszy.Siatkówka , 18 bajtów
Wypróbuj online!
Całkiem proste: sortuje dane wejściowe i próbuje dopasować do nich dowolną z posortowanych par sojuszników. Niestety nie sądzę, że oparty na łańcuchach Retina charakter pozwala na bardziej interesujące podejście do rywalizacji.
Jako rzut oka na następną wersję Retina, planuję dodać opcję, która zamienia wyrażenia regularne i ciąg docelowy (więc bieżący ciąg zostanie użyty jako wyrażenie regularne i dasz mu ciąg do sprawdzenia), w którym to przypadku jest on krótszy rozwiązanie zadziała (lub coś w tym stylu):
źródło
Java (OpenJDK 8) ,
2823 bajtów-5 bajtów dzięki fergusq
Wypróbuj online!
źródło
"WUBRGWGRBUW"::contains
?Brachylog , 10 bajtów
Proste rozwiązanie, bez żadnych sztuczek.
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 6 bajtów
Dla kompletności. Jako argument przyjmuje dwa punkty kodowe. Daje 0 dla przyjaciół, 1 dla wrogów.
Wypróbuj online!
tło
Niech n i m będą punktami kodowymi dwóch znaków wejściowych. Biorąc | n - m | , musimy zajmować się tylko 2-kombinacjami postaci. Poniższa tabela pokazuje wszystkie 2 kombinacje znaków odpowiadające im różnice bezwzględne.
Jeśli podzielimy te liczby całkowite przez 3 , otrzymamy następujące ilorazy.
1 , 4 i 7 można zmapować na 1 , biorąc wyniki modulo 3 .
Teraz musimy tylko spojrzeć na parzystość.
Jak to działa
źródło
Cubix, 11 bajtów
Implementacja rozwiązania Arnauld przez Cubix.
Stosowanie
Wprowadź dwa znaki, a wyświetli się
0
dla przyjaciół i1
wrogów. Wypróbuj tutaj.Wyjaśnienie
Kod można rozszerzyć w ten sposób.
Znaki są wykonywane w tej kolejności (z wyłączeniem przepływu kontrolnego):
źródło
Python 2 , 26 bajtów
Wypróbuj online!
źródło
AWK, 23 bajtów
Przykładowe użycie: awk '{$ 0 = "WUBRGWGRBUW" ~ 1 $} 1' <<< UB
Drukuje się,
1
jeśli para jest przyjacielem, w0
przeciwnym razie. Chciałem zrobić coś sprytnego, ale wszystko, o czym myślałem, potrwa dłużej.źródło
Galaretka , 12 bajtów
Wyjścia
1
dla sojuszników,0
wrogów.Wypróbuj online!
Wyjaśnienie
źródło
Rubinowy, 28 bajtów
Dane wyjściowe true dla przyjaciela, false dla wroga:
Wersja bez golfa nie różni się zbytnio:
źródło
05AB1E , 7 bajtów
Adaptacja mod-trick z odpowiedzi Jonathana na galaretkę
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
GolfScript , 7 bajtów
Pobiera dwa punkty kodowe jako dane wejściowe.
Wypróbuj online! (Zestaw testowy, który dla wygody konwertuje format wejściowy).
Port GolfScript mojej odpowiedzi CJam (który technicznie jest portem CJam wyniku mojej brutalnej forcerki GolfScript ... uhhh ...).
Ponieważ jednak GolfScript dostaje modulo z ujemnymi danymi wejściowymi, istnieje fajne alternatywne rozwiązanie o tej samej liczbie bajtów, które wykorzystuje
4
dla wrogów zamiast1
:Wypróbuj online!
źródło
Java 7, 38 bajtów
Port z odpowiedzi Befunge-98 @Mistah Figgins jest najkrótszy w Javie 7 z dotychczas opublikowanych odpowiedzi.
Co do pozostałych:
39 bajtów: Port z odpowiedzi JavaScript (ES6) @Arnauld .
39 bajtów: Port od @MartinEnder „s CJam odpowiedź
47 bajtów: Port z odpowiedzi @Steadybox 'C.
52 bajty: Port z odpowiedzi @Lynn na Python 2
UWAGA: Pomiń odpowiedzi, które używają liczb pierwszych / palindromów i tym podobne, ponieważ w Javie nie są one zbyt krótkie. ;)
DO ZROBIENIA: Wymyślenie własnej odpowiedzi. Chociaż wątpię, że jest krótsza niż większość z nich.Wypróbuj wszystko tutaj.
EDYCJA: Ok, sam wymyśliłem coś, co nie jest takie złe:
50 bajtów:
Wyjaśnienie:
Wszyscy wrogowie są w przedziale 4-6 (włącznie) lub 0.
EDYCJA 2: Hmm .. Właśnie zauważyłam, że jest bardzo podobna do odpowiedzi @Steadybox .. :(
źródło
PHP, 31 bajtów
Uruchom z
echo AB | php -nR '<code>
, gdzieA
iB
są dwa kolory.strtr
zwraca ciąg z pozycji, w której znajduje się wejście;z
WBGURWRUGBW
jak stóg siana zwraca prawdziwy ciąg, jeśli kolory są wrogami; pusty ciąg, jeśli nie.!
zamienia prawdziwy ciąg znaków nafalse
, co skutkuje pustym wyjściem,a pusty ciąg na
true
, co daje wynik1
.źródło