Dans le jeu de cartes Magic: the Gathering, il y a cinq couleurs différentes, qui représentent des affiliations lâches de cartes, Blanc ( W
), Bleu ( U
), Noir ( B
), Rouge ( R
) et Vert ( G
). Ceux-ci sont souvent disposés dans un pentagone comme suit:
W
G U
R B
Tant dans l'histoire de MtG que dans de nombreux mécanismes de cartes, les couleurs adjacentes de ce pentagone sont généralement considérées comme des alliés, et les couleurs non adjacentes (en quelque sorte opposées) sont considérées comme des ennemis.
Dans ce défi, vous recevrez deux couleurs et devrez déterminer leur relation.
Le défi
On vous donne deux caractères distincts de l'ensemble BGRUW
. Vous pouvez les prendre comme une chaîne de deux caractères, une chaîne avec un séparateur entre les caractères, deux valeurs de caractères distinctes, deux chaînes singleton, deux entiers représentant leurs points de code ou un type de liste ou de jeu contenant deux caractères / chaînes / entiers.
Votre sortie doit être l’une des deux valeurs distinctes et cohérentes de votre choix, l’une qui indique que les deux couleurs sont des alliés et l’autre qui indique qu’elles sont des ennemis. L'une de ces deux valeurs peut ne produire aucune sortie.
Vous pouvez écrire un programme ou une fonction et utiliser l’une quelconque de nos méthodes standard de réception d’entrée et de sortie.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
C'est du code-golf , donc la réponse valide la plus courte - mesurée en octets - est gagnante.
Cas de test
Il n'y a que 20 entrées possibles, je vais donc toutes les énumérer.
Copains:
WU UB BR RG GW UW BU RB GR WG
Ennemis:
WB UR BG RW GU BW RU GB WR UG
la source
Réponses:
JavaScript (ES6),
26 23 17 1514 octetsAccepte deux codes ASCII dans la syntaxe de curry
(a)(b)
. Retours4
pour amis ou0
pour ennemis.Essayez-le en ligne!
Comment?
NB: seul le quotient entier de la division par 0,6 est présenté ci-dessous.
Approche précédente, 15 octets
Accepte deux codes ASCII dans la syntaxe de curry
(a)(b)
. Retours0
pour amis ou1
pour ennemis.Essayez-le en ligne!
Comment?
Approche initiale, 23 octets
Prend la saisie sous forme de chaîne de 2 caractères. Retours
true
pour amis oufalse
pour ennemis.Essayez-le en ligne!
la source
a*b%290&8
fonctionnerait aussi bien (produire0
pour des amis ou8
pour des ennemis).Gelée , 6 octets
Prend deux points de code comme argument. Donne 1 pour les amis, 0 pour les ennemis.
Essayez-le en ligne!
Contexte
Soit n et m les points de code de deux caractères saisis. En prenant | n - m | , nous devons nous préoccuper uniquement des deux combinaisons de caractères. Le tableau suivant montre toutes les 2 combinaisons de caractères avec les différences absolues correspondantes.
Tous les ennemi combinaisons sont divisibles par 3 , 5 ou 7 , mais aucun des amis combinaisons ce, alors amis sont exactement ceux qui sont co-premier avec 3 x 5 x 7 = 105 .
Comment ça fonctionne
la source
_
est la gelée. Avez-vous utilisé autre chose?ạ
comme une valeur absolue, pas une différence absolue.Python 2 , 19 octets
Essayez-le en ligne!
Une fonction anonyme: revient
1
pour les amis et0
pour les ennemis.la source
Befunge-98,
1312 octetsEssayez-le en ligne!
Imprimés
0
pour les amis et1
pour les ennemisCeci utilise la différence entre les valeurs ASCII des lettres.
Si nous prenons le
(((ASCII difference % 9) % 5) % 3)
, les valeurs pour les ennemis seront 0. Ensuite, nous ne pas la valeur et l’imprimons.Merci à @Martin pour le golf
la source
IA%9%5%3¬
Edit Essayez-le en ligne!Gelée ,
87 octetsLes greffons de la fabuleuse réponse Befunge de Mistah Figgins !
Essayez-le en ligne!
Comment?
Comme Mistah Figgins l'a noté, la décision peut être prise en prenant la différence absolue entre les valeurs ASCII mod 9 mod 5 mod 3 - 0 sont alors des amis et les 1 et 2 sont des ennemis.
Si nous prenons plutôt la différence (en clair) mod 9, nous constatons que les amis sont 1, 2, 7 et 8 tandis que les ennemis sont 3, 4, 5 et 6.
Le code prend la différence avec
I
et indices dans la longueur 9 liste[1,1,0,0,0,0,1,1,0]
, qui est 390 en binaire,390B
. L'indexation est à la fois modulaire (si bien que l'indexation exécute le mod 9 gratuitement) et à base 1 (d'où le 1 à l'extrême gauche).la source
Métaprogrammation de modèles C ++, 85 octets
moins golfé:
S'agissant d'un langage de métaprogrammation, une construction compilant ou non est une sortie possible.
Une instance de
f<'W','B'>
compile si et seulement si'W'
et'B'
sont des ennemis.Math basé sur la réponse Befunge .
Exemple en direct .
Comme la métaprogrammation des modèles C ++ est l’une des pires langues du golf, toute personne qui est pire que cela devrait avoir honte. ;)
la source
template
s.Ruby,
2219 octetsEntrée: code ASCII des 2 caractères. Sortie: 1 pour les alliés, 0 pour les ennemis.
Comment ça fonctionne:
Obtenez la différence entre les 2 nombres modulo 9, utilisez un masque de bits (390 est le binaire 110000110) et obtenez un seul bit en utilisant l'
[]
opérateur.la source
->x,y{x*y%103%2}
Notez que0
et1
sont inversés.x*y%51>9
comme tout le monde. Je pense qu'il serait injuste pour les votes positifs de le changer si radicalement maintenant.CJam , 8 octets
Un bloc sans nom qui attend deux codes de caractère au-dessus de la pile et les remplace par
0
(amis) ou1
(ennemis).Essayez-le en ligne!
Explication
Eh bien, nous avons vu beaucoup de solutions arithmétiques amusantes à présent, alors je suppose que ce n'est pas grave si je présente la mienne maintenant. Le plus proche de ce que j'ai vu jusqu'à présent est la solution C de Steadybox . Celui-ci a été trouvé avec l'aide d'un brute forcer de GolfScript que j'ai écrit il y a quelque temps pour Anarchy Golf.
Voici ce que celui-ci fait aux différentes entrées (en ignorant l'ordre, car la multiplication initiale est commutative):
Nous pouvons voir comment prendre le produit des entrées modulo 51 sépare bien les entrées en résultats grands et petits, et nous pouvons utiliser n'importe laquelle des valeurs intermédiaires pour distinguer les deux cas.
la source
Röda ,
302221 octetsOctets sauvegardés grâce à @fergusq en utilisant
_
pour prendre en entrée les valeurs du fluxEssayez-le en ligne!
La fonction est lancée comme
push "WU" | f
après l'attribution d'un nom à la fonctionExplication
la source
{[(_.._)in"WUBRGWGRBUW"]}
mais la fonction doit alors s'appeler comme[a, b] | f
.05AB1E , 10 octets
Renvoie 0 pour un ami et 1 pour un ennemi.
Essayez-le en ligne! ou en tant que suite de tests
Explication
la source
C,
3332292422 octetsRenvoie 1 si amis, 0 si ennemis.
la source
Vim,
2221 octetsEntrée: une seule ligne contenant les deux caractères.
Sortie: tampon vide si amis, tampon contenant
WUBRGWGRBUW
si ennemis.Explication
la source
C
au lieu decw
Japt , 6 octets
Inspiré par la solution de @Martin Ender .
Prend un tableau de deux codes de caractères en entrée.
Essayez-le en ligne! | Suite de tests
Retour
true
pour les amis,false
pour les ennemis.Solution de 14 octets:
Prend deux codes de caractères en entrée
Essayez-le en ligne! | Suite de tests
Explication:
Solution de 12 octets:
Essayez-le en ligne! | Suite de tests
Explication:
Retours
1
pour les amis et0
pour les ennemis.Solution de 9 octets :
Inspiré par la solution de @ Arnauld .
Suite de tests
Retour
1
pour les amis,0
pour les ennemis.Solution de 11 octets:
inspiré par la solution de @Mistah Figgins .
Suite de tests
la source
Brain-Flak ,
155, 147, 135 octetsEssayez-le en ligne!
Cela correspond à 134 octets de code plus une pénalité d'un octet pour le
-a
drapeau qui active l'entrée ASCII.Cela fonctionne en trouvant la différence absolue entre les entrées et en vérifiant si elles sont égales à 2, 11, 16 ou 19. Si c'est le cas, l'entrée est un ami et elle affiche un 1. Si ce n'est pas le cas, elle n'imprime rien. Puisque rien dans brain-flak ne correspond à une pile vide, ce qui est faux, aucune sortie n'est une valeur de faux. ( méta )
Une chose que j’aime particulièrement dans cette réponse, c’est que le fragment "Différence absolue" (c’est-à-dire
(([(({}[{}]))<>])){({}())<>}{}{}<>{}
) n’est pas pur à la pile, mais il peut toujours être utilisé dans cette réponse car nous ne nous soucions pas de la pile sur laquelle nous nous retrouvons avant l’encodage. les différences possibles.Lors d'une édition ultérieure, j'en ai encore plus profité en abusant des restes de la pile qui ne finissaient pas avec la différence absolue. Lors de la première révision, je les ai enlevés tous les deux pour le garder un peu plus sain d'esprit. Ne pas faire cela donne deux golfs majeurs:
Évidemment, cela supprime le code pour les faire apparaître:,
{}{}
mais plus important encore:Cela nous permet de compresser la
2, 11, 16, 19
séquence deà
Heureusement, il n'y a pas de code supplémentaire nécessaire pour gérer ces restes plus tard, ils sont donc simplement laissés sur la pile alternative.
Comme il est notoirement difficile de comprendre le brain-flak, voici une version lisible / commentée:
la source
Gelée , 14 octets
Retour
1
pour les ennemis et0
pour les amis.Suite de test sur Essayez-le en ligne!
Comment?
la source
05AB1E , 7 octets
Ceci est un port de ma réponse de gelée . Prend une liste de points de code en entrée. Imprime 1 pour les amis, 0 pour les ennemis.
Essayez-le en ligne!
Comment ça fonctionne
la source
CJam ,
16121110 octetsGolfé 4 octets en utilisant l'algorithme de Mistah Figgins
Sauvé 1 octet grâce à Lynn
Sorties
1
pour les couleurs ennemies,0
pour les couleurs alliées.Essayez-le en ligne! (Ou vérifier tous les cas de test )
Explication
la source
l:m9%5%3%!
est un octet plus court.Retina , 18 octets
Essayez-le en ligne!
Assez simple: trie l'entrée et essaie de lui faire correspondre n'importe quelle paire d'alliés triée. Malheureusement, je ne pense pas que la nature basée sur les cordes de Retina permette à l'une des approches les plus intéressantes d'être compétitives.
En guise d’aperçu de la prochaine version de Retina, j’ai l’intention d’ajouter une option permettant d’échanger les expressions rationnelles et les chaînes cibles (la chaîne actuelle sera utilisée comme expression rationnelle et vous lui attribuez une chaîne à vérifier), auquel cas cette la solution fonctionnera (ou quelque chose du genre):
la source
Java (OpenJDK 8) ,
2823 octets-5 octets grâce à fergusq
Essayez-le en ligne!
la source
"WUBRGWGRBUW"::contains
?Brachylog , 10 octets
Une solution simple, sans astuces.
Essayez-le en ligne!
Explication
la source
Gelée , 6 octets
Pour être complet. Prend deux points de code comme argument. Donne 0 pour les amis, 1 pour les ennemis.
Essayez-le en ligne!
Contexte
Soit n et m les points de code de deux caractères saisis. En prenant | n - m | , nous devons nous préoccuper uniquement des deux combinaisons de caractères. Le tableau suivant montre toutes les 2 combinaisons de caractères avec les différences absolues correspondantes.
Si nous divisons ces entiers par 3 , nous obtenons les quotients suivants.
1 , 4 et 7 peuvent être mappés à 1 en prenant les résultats modulo 3 .
Maintenant, il suffit de regarder la parité.
Comment ça fonctionne
la source
Cubix, 11 octets
Une implémentation de Cubix de la solution d'Arnauld.
Usage
Entrez les deux caractères, et les résultats sont
0
destinés aux amis et1
aux ennemis. Essayez-le ici.Explication
Le code peut être développé comme ceci.
Les caractères sont exécutés dans cet ordre (à l'exclusion du flux de contrôle):
la source
Python 2 , 26 octets
Essayez-le en ligne!
la source
AWK, 23 octets
Exemple d'utilisation: awk '{$ 0 = "WUBRGWGRBUW" ~ $ 1} 1' <<< UB
Cela imprime
1
si la paire est un ami,0
sinon. Je voulais faire quelque chose d'intelligent, mais tout ce à quoi je pensais serait plus long.la source
Gelée , 12 octets
Sorties
1
pour les alliés,0
pour les ennemis.Essayez-le en ligne!
Explication
la source
Ruby, 28 octets
Sorties true pour un ami, false pour un ennemi:
La version non-lisée n'est pas très différente:
la source
05AB1E , 7 octets
Adaptation du mod-trick de Jonathan's Jelly answer
Essayez-le en ligne! ou en tant que suite de tests
Explication
la source
GolfScript , 7 octets
Prend deux points de code en entrée.
Essayez-le en ligne! (Suite de test qui convertit le format d'entrée pour plus de commodité.)
Un portage GolfScript de ma réponse CJam (qui, techniquement, est un portage CJam du résultat de ma brute forcée GolfScript ... euhhh ...).
Cependant, étant donné que GolfScript fonctionne correctement avec modulo avec des entrées négatives, il existe une solution alternative amusante avec le même nombre d'octets qui utilise
4
pour les ennemis au lieu de1
:Essayez-le en ligne!
la source
Java 7, 38 octets
La réponse du port de @Mistah Figgins Befunge-98 est la plus courte de Java 7 parmi les réponses affichées jusqu'à présent.
Pour les autres:
39 octets: Port de la réponse JavaScript (ES6) de @Arnauld .
39 octets: Port de @MartinEnder réponse CJAM s »
47 octets: Port de la réponse C de @Steadybox '
52 octets: Port de la réponse Python 2 de @Lynn
REMARQUE: les réponses ignorées utilisant des nombres premiers / palindromes et similaires, car celles-ci sont loin d'être courtes en Java. ;)
TODO: Venir avec ma propre réponse .. Bien que je doute que ce soit plus court que la plupart d'entre eux.Essayez tous ici.
EDIT: Ok, je suis venu avec quelque chose qui n'est pas si mal:
50 octets:
Explication:
Tous les ennemis sont dans la plage 4-6 (inclus) ou 0.
EDIT2: Hmm .. Je viens de remarquer que cela ressemble beaucoup à la réponse de @Steadybox ': ..
la source
PHP, 31 octets
Courir avec
echo AB | php -nR '<code>
, oùA
etB
sont les deux couleurs.strtr
renvoie la chaîne de la position où l'entrée est trouvée;avec
WBGURWRUGBW
comme botte de foin, cela retourne une chaîne de vérité si les couleurs sont des ennemis; chaîne vide sinon.!
fait passer la chaîne de vérité àfalse
, ce qui donne une sortie videet la chaîne vide à
true
, ce qui donne une sortie1
.la source