Irish Snap: règles des variantes

13

introduction

Récemment, deux de mes amis et moi-même avons décidé de jouer aux cartes, et l'un d'eux a suggéré le jeu «Irish Snap», qui a été l'inspiration pour ce défi. Cependant, j'ai appris plus tard que le jeu a beaucoup de règles différentes avec lesquelles vous pouvez jouer, dont certaines sont répertoriées ici . Les règles qui sont dans ce défi ne sont pas actuellement répertoriées sur cette page, d'où le nom, «Règles de variantes»

Le défi

Étant donné un tableau de 3 cartes, produisez une valeur de vérité ou de falsey selon qu'elles effectuent un snap valide dans un jeu de snap irlandais.

Contribution

L'entrée sera un tableau de 3 nombres, allant de 1 à 13 inclus, 1 représentant un as, 11 représentant un valet, 12 représentant une reine et 13 représentant un roi. L'entrée peut être dans n'importe quel ordre de haut, milieu, bas.

Règles

Les 4 critères différents pour savoir si les cartes font un snap irlandais sont:

  • Les cartes du haut et du milieu sont les mêmes
  • Les cartes du haut et du milieu ont une différence d'un
  • Les cartes du haut et du bas sont les mêmes
  • Les cartes du haut et du bas ont une différence d'un

Si l'un de ces critères est rempli, vous devez générer une valeur véridique. En plus de cela, pour les deux critères qui exigent que les cartes aient une différence d'un, cela `` s'enroule '', ce qui signifie qu'un as et un roi sont considérés comme ayant une différence d'un, et vice versa.

Cas de test

Input (Bottom, Middle, Top) -> Output
1 13 7 -> False
1 4 13 -> True
9 3 6 -> False
8 9 7 -> True
2 6 5 -> True
12 5 11 -> True
10 4 8 -> False
12 13 7 -> False
9 7 10 -> True
7 3 1 -> False
4 2 3 -> True
EdgyNerd
la source
2
Pouvons-nous prendre les cartes séparément? Ou prenez-vous comme top, [middle, bottom]?
Jo King
bien sûr, vous pouvez faire les deux. a changé la question pour refléter cela
EdgyNerd
Peut-on inverser la sortie, c'est-à-dire retourner False pour des snaps valides et vice versa? Que diriez-vous d'un cas de test où le milieu et le bas sont valides?
Jo King
Oui, vous pouvez inverser la sortie. Aussi, a ajouté ce cas de test
EdgyNerd
Les valeurs de sortie doivent-elles être cohérentes ou pourrions-nous, par exemple, produire 0pour falseet tout autre entier pour trueou, même, tout entier négatif pour falseou tout entier positif pour true?
Shaggy

Réponses:

4

Python 3 , 38 octets

lambda x,y,z:{x-y,x-z}&{0,1,12,-1,-12}

Essayez-le en ligne!

Renvoie un ensemble non vide (véridique) s'il est valide, un ensemble vide (falsey) sinon. Prend la saisie dans l'ordre haut-milieu-bas, mais peut être réorganisé pour la même taille de code.

Arfie
la source
4

Perl 6 , 16 octets

3>(*-(*|*)+1)%13

Essayez-le en ligne!

Anonyme quel que soit lambda qui accepte l'entrée top, middle, bottomet renvoie une jonction qui a la valeur True ou False

Jo King
la source
Dommage <qu'un espace blanc soit nécessaire avant , c'était l'occasion rêvée d'avoir un smiley de cœur.
Grimmy
3

05AB1E , 7 6 octets

α12%ß!

Essayez-le en ligne!

Prend les entrées comme [middle, bottom], top.

α        # absolute difference
 12%     # mod 12
    ß    # minimum
     !   # factorial

Seul 1 est vrai dans 05AB1E. 0! et 1! sont tous deux 1, alors qu'aucun autre nombre n'a une factorielle de 1.

Grimmy
la source
2

J , 12 octets

1 e.2>12||@-

Essayez-le en ligne!

En bas au milieu comme argument gauche, en haut comme argument droit.

réponse originale prenant la saisie comme une seule liste

J , 24 octets

1 e.2>#:@3 5(12||@-/)@#]

Essayez-le en ligne!

  • #:@3 5Les nombres 3 et 5 en binaire sont 0 1 1et 1 0 1qui sont respectivement les masques pour les cartes milieu / haut et bas / haut
  • (12||@-/)@# Nous filtrons l'entrée avec ces masques, prenons la valeur abs des différences résultantes, puis le reste lorsqu'il est divisé par 12 (pour le cas ace-king)
  • 1 e.2> l'un ou l'autre des nombres résultants est-il inférieur à 2, c'est-à-dire 0 ou 1?
Jonas
la source
2

JavaScript (ES6), 29 octets

Prend l'entrée comme ([bottom, middle])(top).

La sortie est inversée.

a=>c=>a.every(n=>(n-c)/2%6|0)

Essayez-le en ligne!


JavaScript (ES6),  37  30 octets

1 octet enregistré grâce à @Grimy

Prend l'entrée comme ([bottom, middle])(top).

a=>c=>a.some(n=>(n-=c)*n%72<2)

Essayez-le en ligne!

Arnauld
la source
%144pourrait être%72
Grimmy
@Grimy Merci! FWIW, %13fonctionnerait également.
Arnauld
2

Fusain , 12 octets

›²⌊﹪↔⁻E²NN¹²

Essayez-le en ligne! Port de la réponse de @ Grimy. Prend l'entrée en trois valeurs distinctes bottom, middle, top et sorties en utilisant le format booléen par défaut de Charcoal pour -for true, rien pour false. Explication:

 ²              Literal 2
›               Is greater than
  ⌊             Minimum of
    ↔            Absolute value of (vectorised)
      E²N       First two numeric inputs as a list ([bottom, middle])
     ⁻          Minus (vectorised)
         N      Third input (top)
   ﹪            Modulo (vectorised)
          ¹²    Literal 12
Neil
la source
1

Perl 5 -ap , 31 octets

$t=<>}{$\|=abs($t-$_)%12<2for@F

Essayez-le en ligne!

Contribution:

bottom middle
top

En fait, l'ordre du milieu et du bas n'a pas d'importance.

Production:

0pour faux; 1Pour de vrai

Xcali
la source
1

Pyth , 12 11 octets

Prend l'entrée comme [bottom, top, middle]ou [middle, top, bottom](les deux fonctionnent). Sorties [](Falsy en Pyth) s'il n'y a pas de snap valide, sinon un tableau non vide.

f>2%.aT12.+

Essayez-le en ligne!

Si une valeur cohérente de vérité / fausse est requise, ajoutez-la .Adevant pour +2 octets. La sortie sera alors Trueou False.

Explication

  f             # Filter on lambda T:
   >2           # 2 > 
      .aT       #     abs(T)
     %   12     #            % 12
           .+   # the list of deltas (difference between consecutive elements)

.A (if required)# Any truthy values in the above list?

Edit: -1 avec une approche différente

ar4093
la source
1

Gelée , 6 octets

I%12ỊẸ

Essayez-le en ligne!

Un lien monadique prenant la liste [middle, top, bottom]comme argument et retournant 1pour snap et 0pour no snap.

Nick Kennedy
la source
0

[R], 23 octets

prend l'entrée comme a = c (bas, haut, milieu):

any(abs(diff(a))%%12<2)

Zahiro Mor
la source