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

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.


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


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.


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?

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!


%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

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


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







0

[R], 23 octets

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.