Buluşmanın Büyüsü: Dostlar veya Düşmanlar?


67

Kart oyunu Sihirli: Buluşması , Beyaz (kartların gevşek bağlılıkları temsil eden beş farklı renk vardır W), Mavi ( U), Siyah ( B), Kırmızı ( R) ve Yeşil ( G). Bunlar genellikle aşağıdaki şekilde bir beşgen halinde düzenlenmiştir:

  W
G   U
 R B

Hem MtG hem de pek çok kart mekaniğinde, bu pentagondaki bitişik renkler genellikle müttefik olarak kabul edilir ve bitişik olmayan (tersi) renkler düşman olarak kabul edilir.

Bu mücadelede size iki renk verilecek ve ilişkilerini belirlemelisiniz.

Meydan okuma

Setten iki farklı karakter var BGRUW. Bunları iki karakterli bir dize, karakterler arasında sınırlayıcı olan bir dize, iki ayrı karakter değeri, iki singleton dizesi, kod noktalarını temsil eden iki tam sayı veya iki karakter / dizge / tam sayı içeren bir liste veya set olarak alabilirsiniz.

Çıktınız, iki rengin müttefik olduğunu ve biri düşman olduğunu belirten, seçeceğiniz iki ayrı ve tutarlı değerden biri olmalıdır. Bu iki değerden biri hiç çıktı olmayabilir.

Bir program veya fonksiyon yazabilir ve standart girdi alma ve çıktı alma yöntemlerimizden herhangi birini kullanabilirsiniz .

Herhangi bir programlama dilini kullanabilirsiniz , ancak bu boşluklara dikkat edin. varsayılan olarak yasak .

Bu , yani en kısa geçerli cevap - bayt cinsinden - kazanır.

Test Kılıfları

Sadece 20 olası girdi var, o yüzden hepsini listeleyeceğim.

Arkadaşlar:

WU   UB   BR   RG   GW   UW   BU   RB   GR   WG

Düşmanlar:

WB   UR   BG   RW   GU   BW   RU   GB   WR   UG

33
Sıradaki: temel kuralları uygulayın: P
Kaptan Adam

12
@CaptainMan 30k karakter
yazısına sığdırabilirseniz sizi yeniler

@Walfrat 30k? Mümkün olmalı
Değil Charles

2
@IvanKolmychek en beklenmedik ittifaklar gelen en beklenmedik sonuçlarla geliyor.
Aluriak

1
Gerçek şu ki: Büyü: Toplanma tamamlandı :)
Matthew Roh

Yanıtlar:


82

JavaScript (ES6),  26 23 17 15  14 bayt

Körleme sözdiziminde girişi iki ASCII kodu olarak alır (a)(b). İade 4arkadaşlar veya 0düşmanlara için.

a=>b=>a*b/.6&4

Çevrimiçi deneyin!

Nasıl?

Not: Bölümün sadece tam sayı bölümü 0.6 ile gösterilmektedir.

Combo | a  | b  | a*b  | / 0.6 | AND 4
------+----+----+------+-------+------
  WU  | 87 | 85 | 7395 | 12325 |   4
  UB  | 85 | 66 | 5610 |  9350 |   4
  BR  | 66 | 82 | 5412 |  9020 |   4
  RG  | 82 | 71 | 5822 |  9703 |   4
  GW  | 71 | 87 | 6177 | 10295 |   4
  UW  | 85 | 87 | 7395 | 12325 |   4
  BU  | 66 | 85 | 5610 |  9350 |   4
  RB  | 82 | 66 | 5412 |  9020 |   4
  GR  | 71 | 82 | 5822 |  9703 |   4
  WG  | 87 | 71 | 6177 | 10295 |   4
------+----+----+------+-------+------
  WB  | 87 | 66 | 5742 |  9570 |   0
  UR  | 85 | 82 | 6970 | 11616 |   0
  BG  | 66 | 71 | 4686 |  7810 |   0
  RW  | 82 | 87 | 7134 | 11890 |   0
  GU  | 71 | 85 | 6035 | 10058 |   0
  BW  | 66 | 87 | 5742 |  9570 |   0
  RU  | 82 | 85 | 6970 | 11616 |   0
  GB  | 71 | 66 | 4686 |  7810 |   0
  WR  | 87 | 82 | 7134 | 11890 |   0
  UG  | 85 | 71 | 6035 | 10058 |   0

Önceki yaklaşım, 15 bayt

Körleme sözdiziminde girişi iki ASCII kodu olarak alır (a)(b). İade 0arkadaşlar veya 1düşmanlara için.

a=>b=>a*b%103%2

Çevrimiçi deneyin!

Nasıl?

Combo | a  | b  | a*b  | MOD 103 | MOD 2
------+----+----+------+---------+------
  WU  | 87 | 85 | 7395 |    82   |   0
  UB  | 85 | 66 | 5610 |    48   |   0
  BR  | 66 | 82 | 5412 |    56   |   0
  RG  | 82 | 71 | 5822 |    54   |   0
  GW  | 71 | 87 | 6177 |   100   |   0
  UW  | 85 | 87 | 7395 |    82   |   0
  BU  | 66 | 85 | 5610 |    48   |   0
  RB  | 82 | 66 | 5412 |    56   |   0
  GR  | 71 | 82 | 5822 |    54   |   0
  WG  | 87 | 71 | 6177 |   100   |   0
------+----+----+------+---------+------
  WB  | 87 | 66 | 5742 |    77   |   1
  UR  | 85 | 82 | 6970 |    69   |   1
  BG  | 66 | 71 | 4686 |    51   |   1
  RW  | 82 | 87 | 7134 |    27   |   1
  GU  | 71 | 85 | 6035 |    61   |   1
  BW  | 66 | 87 | 5742 |    77   |   1
  RU  | 82 | 85 | 6970 |    69   |   1
  GB  | 71 | 66 | 4686 |    51   |   1
  WR  | 87 | 82 | 7134 |    27   |   1
  UG  | 85 | 71 | 6035 |    61   |   1

İlk yaklaşım, 23 bayt

Girdiyi 2 karakterli bir dize olarak alır. İade truearkadaşlar veya falsedüşmanlara için.

s=>parseInt(s,35)%9%7<3

Çevrimiçi deneyin!


10
Ah, nihayet eğlenceli bir şey. :)
Martin Ender

4
Fantastik bulmak!
Greg Martin,

Burada bilmediğim zekice bir matematik var mı, yoksa işe yaramayana kadar farklı modüller zorla mı kullandın?
FourOhFour

@FourOhFour Zorla zorlandı. Bence bu en küçük çift ​​modül çözümüdür. Ancak bu cevabın bir limanı ( karşılaştırma kullanıyor) aslında bir bayt daha kısa olacaktır.
Arnauld,

1
@OddDev Aslında sadece en az önemli olanı değil, tüm bitleri test ettim. Mesela, a*b%290&8aynı şekilde çalışacaktı ( 0arkadaşlar veya 8düşmanlar için üretiliyor).
Arnauld

37

Jöle , 6 bayt

ạg105Ị

Argüman olarak iki kod noktası alır. Verim 1 arkadaşlar için, 0 düşman için.

Çevrimiçi deneyin!

Arka fon

Let , n ve m, iki giriş karakter kodu puan olması. Alarak | n - m | Kendimizi sadece 2 karakter kombinasyonunun tümü ile ilgilenmemiz gerekiyor. Aşağıdaki tablo, tüm 2 karakter kombinasyonunu karşılık gelen mutlak farkları göstermektedir.

WU  2
UB 19
BR 16
RG 11
GW 16

WB 21
UR  3
BG  5
RW  5
GU 14

Tüm düşman kombinasyonları 3 , 5 veya 7 ile bölünebilir , ancak arkadaş kombinasyonlarının hiçbiri bu değildir, bu nedenle arkadaşlar tam olarak 3 × 5 × 7 = 105 ile aynı hizada olanlardır. .

Nasıl çalışır

ạg105Ị  Main link. Left argument: n (code point). Right argument: m (code point)

ạ       Yield the absolute difference of n and m.
 g105   Compute the GCD of the result and 105.
     Ị  Insignificant; return 1 if the GCD is 1, 0 if not.

Güzel benekli! Mutlak değer neden gerekli? (Online denedim ve doğru cevap vermedi; fakat matematiksel olarak bu fark etmemeli.)
Greg Martin

@GregMartin Gerekli değil; İmzalı fark da aynı şekilde işe yarayacak. Çıkarma _Jöle'dir. Başka bir şey mi kullandın?
Dennis,

Ah, görüyorum ki, yanlış bir mutlak değer olarak okudum , mutlak fark değil.
Greg Martin,


21

Befunge-98, 13 12 bayt

~~-9%5%3%!.@

Çevrimiçi deneyin!

0Arkadaşlarınız için yazdırır ve1 düşmanlar

Bu, harflerin ASCII değerleri arasındaki farkı kullanır.

Eğer alırsak (((ASCII difference % 9) % 5) % 3) , düşmanlar için değerler 0 olacaktır. O zaman, biz değer değil ve yazdırırız.

Golf için @ Martin'e teşekkürler


Jelly'i 9 bayt için kullanın: IA%9%5%3¬Düzenle Çevrimiçi Deneyin!
Jonathan Allan,

@JonathanAllan Görüyorum ki zaten yaptınız! Güzel.
MildlyMilquetoast

Aslında mod 9 mod 6'daki (mutlak fark yerine gerçek olanı kullanarak) yönteminizi kullandım ve Jelly'in 7'ye indirgemek için modüler olarak listeler halinde dizine alındığı gerçeğini kullandım . Akredite oldum ve buraya bağlandım.
Jonathan Allan,

@ JonathanAllan Ben de mod 9 mod 6 yöntemi ile geldi, ama Befunge gerçek bir fark veya mutlak bir değere sahip değil, bu yüzden mümkün değildi
MildlyMilquetoast

18

Jöle , 8 7 bayt

Mistah Figgins'in müthiş Befunge'nin cevabının sırtıma sırtı !

Iị390B¤

Çevrimiçi deneyin!

Nasıl?

Mistah Figgins'in belirttiği gibi, ASCII değerleri arasındaki mutlak fark alınarak karar verilebilir.

Bunun yerine mod 9 (düz) farkını alırsak, arkadaşların 1s, 2s, 7s ve 8s olduğunu, düşmanların ise 3s, 4s, 5s ve 6s olduğunu görüyoruz.

Kod farkı alır Ive daha sonra [1,1,0,0,0,0,1,1,0]ikili listede 390 olan 9 uzunluğuna listeler 390B. İndeksleme hem modülerdir (bu yüzden indeksleme ücretsiz olarak mod 9'u ücretsiz olarak gerçekleştirir) hem de 1 tabanlıdır (dolayısıyla en solda 1).


16

C ++ şablon metaprogramlaması, 85 bayt

template<int A,int B,int=(A-B)%9%5%3>struct f;template<int A,int B>struct f<A,B,0>{};

daha az golf oynadı:

template<int A, int B,int Unused=(((A-B)%9)%5)%3>
struct foe;
template<int A, int B>
struct foe<A,B,0>{};

Bu bir metaprogramlama dili olduğundan, derleyen ya da olmayan bir yapı olası bir çıktıdır.

Derleme örneği, f<'W','B'>eğer ve sadece eğer 'W've 'B'düşmanlar.

Befunge cevabını temel alan matematik .

Canlı bir örnek .

C ++ şablon metaprogramlaması en kötü golf dillerinden biri olduğundan, bundan daha kötü olan herkes utanç duymalıdır. ;)


Görünüşe göre toplamda iki tane boş beyaz alan var template.
Yytsi

@TuukkaX sabit,
ohoh

14

Ruby, 22 19 bayt

->x,y{390[(x-y)%9]}

Giriş: 2 karakterin ASCII kodu. Çıktı: müttefikler için 1, düşmanlar için 0.

Nasıl çalışır:

2 sayı modulo 9 arasındaki farkı alın, bir bit maskesi kullanın (390, 110000110 ikilidir) ve []işlecini kullanarak tek bir bit edin .


2
Güzel, tamsayıların indekslenebileceğini unutmaya devam ediyorum. +1
Martin Ender

16 bayt: ->x,y{x*y%103%2}Notun 0ve 1değiştirildiğine dikkat edin.
Eric Duminil,

1
Ve x*y%51>9diğerleri gibi 15 bayt . Bence şimdi çok radikal bir şekilde değiştirmenin en iyisi haksızlık olur.
GB

10

CJam , 8 bayt

{*51%9>}

Yığının üstünde iki karakter kodu bekleyen ve bunları 0(arkadaş) veya 1(düşman) ile değiştiren adsız bir blok .

Çevrimiçi deneyin!

açıklama

Şimdi çok eğlenceli aritmetik çözümler gördük, bu yüzden şimdi kendime bir tane sunsam iyi olur. Şimdiye kadar gördüğüm en yakın Steadybox C çözümü . Bu, bir süre önce anarşi golfü için yazdığım bir GolfScript brute forcer yardımı ile bulundu.

İşte bunun çeşitli girdilere yaptığı şey: (ilk çarpım değişmeli olduğu için sırayı yok sayarak):

xy   x    y    x*y   %51  >9

WU   87   85   7395    0   0
UB   85   66   5610    0   0
BR   66   82   5412    6   0
RG   82   71   5822    8   0
GW   71   87   6177    6   0
WB   87   66   5742   30   1
UR   85   82   6970   34   1
BG   66   71   4686   45   1
RW   82   87   7134   45   1
GU   71   85   6035   17   1

Modül 51 girdilerinin ürününün alınmasının girdileri büyük ve küçük sonuçlara nasıl güzel bir şekilde ayırdığını görebiliriz ve iki durumu birbirinden ayırmak için aradaki değerlerden herhangi birini kullanabiliriz.


9

Röda , 30 22 21 bayt

@Forgusq sayesinde akıştaki _değerleri girdi olarak almak için kullanılarak kaydedilen bayt sayısı

{[_ in"WUBRGWGRBUW"]}

Çevrimiçi deneyin!

İşlev, işleve push "WU" | fbir isim verdikten sonra olduğu gibi çalıştırılır.

açıklama

{                      /* Declares an anonymous function */
 [                 ]   /* Push */
  _ in                 /* the boolean value of the value on the stream is in */
      "WUBRGWGRBUW"    /* this string */
}

o_O yıldırım hızı
Pavel

Parametreleri almak yerine girdi değerlerini akıştan okuyarak 5 bayt tasarruf etmek mümkündür:, {[(_.._)in"WUBRGWGRBUW"]}ancak fonksiyonun böyle çağrılması gerekir [a, b] | f.
fergusq

9

05AB1E , 10 bayt

Arkadaş için 0 , düşman için 1 döndürür .

‘Û‹BWR‘ûIå

Çevrimiçi deneyin! veya Test paketi olarak

açıklama

‘Û‹BWR‘     # push the string "RUGBWR"
       û    # palendromize (append the reverse minus the first char)
        Iå  # check if input is in this string

9

C, 33 32 29 24 22 bayt

#define f(k,l)k*l%51<9

Arkadaş 1 ise düşman, 0 düşerse.


8

Vim, 22 21 bayt

CWUBRGWGRBUW<esc>:g/<c-r>"/d<cr>

Giriş: iki karakteri içeren tek bir satır.

Çıktı: arkadaşlar ise boş tampon, WUBRGWGRBUWeğer düşman varsa içeren tampon .

açıklama

C                                 # [C]hange line (deletes line into " register and enters insert mode)
 WUBRGWGRBUW<esc>                 # insert this text and exit insert mode
                 :g/      /d<cr>  # delete all lines containing...
                    <c-r>"        # ... the previously deleted input

2
Sen yapabilirsin Cyerinecw
Kritixi Lithos

8

Japt , 6 bayt

@ Martin Ender'in çözümünden ilham aldı .

Giriş olarak iki karakter kodundan oluşan bir dizi alır.

×%51<9

Çevrimiçi deneyin! | Test odası

Düşman trueiçin arkadaşlar falseiçin döner.

14 baytlık çözüm:

Giriş olarak iki karakter kodu alır.

nV a /3%3 f ¦1

Çevrimiçi deneyin! | Test odası

Açıklama:

nV a /3%3 f ¦1
nV a             // Absolute value of: First input (implicit) - Second input
      /3%3 f     // Divide by 3, mod 3, then floor the result
             ¦1  // Return true if the result does not equals 1, otherwise return false

12 baytlık çözüm:

"WUBRGW"ê èU

Çevrimiçi deneyin! | Test odası

Açıklama:

"WUBRGW"ê èU
"WUBRGW"ê     // "WUBRGW" mirrored = "WUBRGWGRBUW"
          èU  // Returns the number of times U (input) is found

İade 1arkadaşlar ve 0düşmanlar için.

9 baytlık çözüm :

@ Arnauld'un çözümünden ilham aldı .

*V%24%B%2

Test odası

Düşman 1için arkadaşlar 0için döner.

11 baytlık çözüm:

@Mistah Figgins'in çözümünden ilham aldı .

nV %9%5%3¦0

Test odası


8

Brain-Flak , 155, 147 , 135 bayt

(([(({}[{}]))<>])){({}())<>}(((([])[][][])[]())()()())<>{}<>{({}<><(({}))>)({}[{}]<(())>){((<{}{}>))}{}{{}({}<({}())>)(<()>)}{}<>}<>{}

Çevrimiçi deneyin!

Bu 134 baytlık kod artı -aASCII girişini sağlayan bayrak için bir baytlık cezadır .

Bu, girişler arasındaki mutlak farkı bulmak ve 2, 11, 16 veya 19'a eşit olup olmadıklarını kontrol etmek suretiyle çalışır. Varsa, giriş bir arkadaştır ve 1 yazar. Yazmıyorsa, hiçbir şey yazdırmaz. Yana hiçbir beyin ateşin ortasında falsy olan boş bir yığın, karşılık gelen, herhangi bir çıkışın bir falsy değerdir. ( meta )

Özellikle bu cevabı sevdiğim bir şey, "mutlak fark" snippet'inin (yani (([(({}[{}]))<>])){({}())<>}{}{}<>{}) yığın temiz olmadığı, ancak kodlamadan önce hangi yığının üzerinde durduğumuzu umursamadığımız için hala bu cevapta kullanılabileceğidir. olası farklılıklar.

Daha sonraki bir düzenleme, ben yığın kalanlar kötüye kullanarak bu daha da yararlandı gelmez Üzerinde mutlak fark ile sonunda. İlk revizyonda, ikisini biraz daha aklı başında tutmak için ikisini birden fırlattım. Değil yapmamak iki büyük golf sahası verir:

  1. Açıkçası, onları açmak için kodu kaldırıyor: {}{}ama daha da önemlisi:

  2. 2, 11, 16, 19Sıralamayı sıkıştırmamızı sağlar .

    (((((()()))[][][](){})[][]())[])
    

    için

    (((([])[][][])[]())()()())
    

    Neyse ki, daha sonra bu artıkları işlemek için fazladan bir kod gerekmiyor, bu yüzden alternatif yığında kalıyorlar.

Beyin flakının anlaşılması zor olduğu için, okunabilir / yorum yapılan bir versiyon:

#Push the absolute difference of the two input characters. It is unknown which stack the result will end on
(([(({}[{}]))<>])){({}())<>}

#Push 2, 11, 16, 19, while abusing the values left on the stack from our "Absolute value" calculation
(((([])[][][])[]())()()())

#Pop a zero from the other stack and toggle back
<>{}<>

#While True
{

    #Move top over and duplicate the other top
    ({}<><(({}))>)

    #Equals?
    ({}[{}]<(())>){((<{}{}>))}{}

    #If so:
    {

        #Increment the number under the stack
        {}({}<({}())>)
        #Push a zero
        (<()>)

    }

    #Pop the zero
    {}

    #Go back to the other stack
    <>

#Endwhile
}

#Toggle back
<>

#Pop a zero
{}

Bir itme, bir pop çıkartabilir ve 129'a
Riley

@Riley Cool, bahşiş için teşekkürler! Yorumlanmış bir sürüme sahip olmaktan hoşlanıyorum, bu yüzden güncellemeden önce bu sürümü kavrayabilmeyi bekleyeceğim.
DJMcMayhem

Sadece iki küçük değişiklik oldu. İşte önemli kısım. Yorumlarım büyük harflerle yazıyor, üzgünüm diye bağırıyor gibi görünüyorsa.
Riley

7

Jöle , 14 bayt

“WUBRG”wЀIAÆP

İade 1düşmanları için ve 0arkadaşları için.

Test paketi Çevrimiçi deneyin!

Nasıl?

“WUBRG”wЀIAÆP - Main link                                   e.g. WG
“WUBRG”        - ['W','U','B','R','G']
       wЀ     - first index of sublist mapped over the input     [1,5]
          I    - incremental differences                           -4
           A   - absolute value                                     4
            ÆP - is prime?                                          0

7

05AB1E , 7 bayt

$Æ105¿Ö

Bu Jelly cevabımın bir limanı . Giriş olarak kod noktalarının bir listesini alır. 1 arkadaş yazdırır , 0 düşmanlar için .

Çevrimiçi deneyin!

Nasıl çalışır

$        Push 1 and [n, m] (the input).
 Æ       Reduce [n, m] by subtraction, pushing n - m.
  105¿   Take the GCD of n - m and 105.
      Ö  Test if 1 is divisible by the GCD (true iff the GCD is ±1).

6

CJam , 16 12 11 10 bayt

Mistah Figgins'in algoritmasını kullanarak 4 byte golf oynadı

Lynn sayesinde 1 bayt kaydedildi

l:m9%5%3%!

1Düşman renkler, 0müttefik renkler için çıktılar .

Çevrimiçi deneyin! (Veya tüm test durumlarını doğrulayın )

açıklama

l           e# Push a line of input as a string
 :m         e# Reduce the string by subtraction (using the ASCII values)
   9%5%3%   e# Mod by 9, then by 5, then by 3. By doing this, enemy
            e#  pairs go to 0, and allies go to 1, 2, -1, or -2.
         !  e# Boolean negation

Çok akıllı olmaya çalışmayın! l:m9%5%3%!bayt daha kısa.
Lynn,

@ Lynn O vay, öyle. Bu çok sıkıcı. Teşekkürler
Business Cat

5

Retina , 18 bayt

O`.
BR|BU|GR|GW|UW

Çevrimiçi deneyin!

Oldukça dümdüz: girişi sıralar ve ona göre sıralanmış müttefik çiftlerinden herhangi biriyle eşleşmeye çalışır. Ne yazık ki, Retina'nın tel temelli yapısının daha ilginç yaklaşımların herhangi birinin rekabetçi olmasına izin verdiğini sanmıyorum.

Bir sonraki Retina sürümü için gizli bir bakış olarak, regex ve hedef dizgiyi değiştiren bir seçenek eklemeyi planlıyorum (bu nedenle mevcut dize regex olarak kullanılacak ve kontrol etmek için bir dize vereceksiniz), bu durumda bu kısa çözüm işe yarayacak (ya da bu çizgiler boyunca bir şey):

?`WUBRGWGRBUW



4

Jöle , 6 bayt

ạ:3%3Ḃ

Bütünlüğü hatırına. Argüman olarak iki kod noktası alır. Verim 0 arkadaş, 1 düşman için.

Çevrimiçi deneyin!

Arka fon

Let , n ve m, iki giriş karakter kodu puan olması. Alarak | n - m | Kendimizi sadece 2 karakter kombinasyonunun tümü ile ilgilenmemiz gerekiyor. Aşağıdaki tablo, tüm 2 karakter kombinasyonunu karşılık gelen mutlak farkları göstermektedir.

WU UB BR RG GW  WB UR BG RW GU
 2 19 16 11 16  21  3  5  5 14

Bu tamsayıları 3'e bölersek aşağıdaki bölümleri alırız.

WU UB BR RG GW  WB UR BG RW GU
 0  6  5  3  5   7  1  1  1  4

1 , 4 ve 7 sonuçları modulo 3 alınarak 1 ile eşlenebilir .

WU UB BR RG GW  WB UR BG RW GU
 0  0  2  0  2   1  1  1  1  1

Şimdi sadece pariteye bakmak zorundayız.

Nasıl çalışır

ạ:3%3Ḃ  Main link. Left argument: n (code point). Right argument: m (code point)

ạ       Absolute difference; yield |n - m|.
 :3     Integer division by 3, yielding |n - m| / 3.
   %3   Modulo 3, yielding |n - m| / 3 % 3.
     Ḃ  Parity bit; yield |n - m| / 3 % 3 & 1.

4

Cubix, 11 bayt

Arnauld'un çözümünün bir Cubix uygulaması.

U%O@A*'g%2W

kullanım

İki karakteri girin ve çıktı 0 arkadaşlar ve 1düşmanlar için . Burada dene.

açıklama

Kod bu şekilde genişletilebilir.

    U %
    O @
A * ' g % 2 W .
. . . . . . . .
    . .
    . .

Karakterler bu sırada yürütülür (kontrol akışı hariç):

A*'g%2%O@
A         # Read all input as character codes
 *        # Multiply the last two character codes
    %     # Modulo the result by
  'g      #     103
      %   # And modulo that by
     2    #     2
       O  # Output the result ...
        @ # ... and terminate


2

AWK, 23 Bayt

{$0="WUBRGWGRBUW"~$1}1

Örnek kullanım: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB

Aksi takdirde 1, bu çift bir arkadaş ise yazdırır 0. Akıllıca bir şey yapmak istedim ama düşündüğüm her şey daha uzun olacaktı.


2

Jöle , 12 bayt

“WUBRGW”ŒBẇ@

Düşmanlar 1için müttefikler 0için çıktılar .

Çevrimiçi deneyin!

açıklama

“WUBRGW”ŒBẇ@   Main link

“WUBRGW”       The string "WUBRGW"
        ŒB     Bounce; yields "WUBRGWGRBUW"
          ẇ@   Check if the input exists in that string

2

Ruby, 28 bayt

Çıktılar arkadaş için doğru, düşmanlar için yanlış:

p'WUBRGWGRBUW'.include?$**''

Ungolfed versiyonu çok farklı değil:

p 'WUBRGWGRBUW'.include?(ARGV.join(''))


2

GolfScript , 7 bayt

~*51%9>

Giriş olarak iki kod noktası alır.

Çevrimiçi deneyin! (Giriş biçimini kolaylık sağlamak için dönüştüren test paketi.)

CJam cevabımın GolfScript portu (teknik, uhhh ... benim GolfScript Brute Forcer sonucu bir CJam limanıdır ...).

Bununla birlikte, GolfScript negatif girişleri doğru girdiğinde modulo aldığı için 4, düşmanlar için kullanılan aynı bayt sayısında eğlenceli bir alternatif çözüm vardır 1:

~-)9%4&

Çevrimiçi deneyin!

xy   x    y    x-y    +1  %9  &4

WU   87   85     2     3   3   0
UB   85   66    19    20   2   0
BR   66   82   -16   -15   3   0
RG   82   71    11    12   3   0
GW   71   87   -16   -15   3   0
WB   87   66    21    22   4   4
UR   85   82     3     4   4   4
BG   66   71    -5    -4   5   4
RW   82   87    -5    -4   5   4
GU   71   85   -14   -13   5   4

2

Java 7, 38 bayt

int b(int a,int b){return(a-b)%9%5%3;}

Port @Mistah Figgins 'Befunge-98 cevap şu ana kadar yayınlanan yanıtlarından Java 7 kısa olduğunu.
Diğerlerine gelince:

39 bayt: @Arnauld'un JavaScript (ES6) yanıtından gelen bağlantı noktası .

int a(int a,int b){return a*b%24%11%2;}

39 bayt: @ MartinEnder'in CJam cevabından bağlantı noktası

Object e(int a,int b){return a*b%51>9;}

47 bayt: @Steadybox 'C cevap noktasından bağlantı noktası

Object d(int a,int b){return(a=a*b%18)>7|a==3;}

52 byte: Liman dan @Lynn 'ın Python 2 cevap

Object c(String s){return"WUBRGWGRBUW".contains(s);}

NOT: Astarlar / palindromlar ve benzerlerini kullanan atlanan cevaplar, çünkü bunlar Java'da hiçbir yere yakın değildir. ;)
TODO: Kendi cevabımla geliyorum .. Her ne kadar şüpheliyim, bunların çoğundan daha kısa.

Hepsini burada dene.


EDIT: Tamam, kendimi çok kötü olmayan bir şey ile geldi:

50 bayt:

Object c(int a,int b){return(a=a*b%18)>3&a<7|a<1;}

Açıklama:

ab  a   b   a*b     %18

WU  87  85  7395    15
UB  85  66  5610    12
BR  66  82  5412    12
RG  82  71  5822    8
GW  71  87  6177    3
UW  85  87  7395    15
BU  66  85  5610    12
RB  82  66  5412    12
GR  71  82  5822    8
WG  87  71  6177    3

WB  87  66  5742    0
UR  85  82  6970    4
BG  66  71  4686    6
RW  82  87  7134    6
GU  71  85  6035    5
BW  66  87  5742    0
RU  82  85  6970    4
GB  71  66  4686    6
WR  87  82  7134    6
UG  85  71  6035    5

Bütün düşmanlar 4-6 (dahil) ya da 0 aralığındadır.
EDIT2: Hmm .. Sadece @ Steadybox 'answer ..' e çok benzer olduğunu fark ettim .


2

PHP, 31 bayt

echo!strstr(WBGURWRUGBW,$argn);

İki rengin echo AB | php -nR '<code>nerede Ave nerede olduğunu çalıştırın B.

strtrdizeyi girdinin bulunduğu konumdan döndürür;
ile WBGURWRUGBWsamanlık bu renkler düşmanlar ise bir truthy dize döndürür olarak; Boş dize değilse.

!truthy dizesini falseboş çıktıya
ve boş dizgeyi trueçıktıya dönüştürür 1.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.