Snap irlandese: regole varianti


13

introduzione

Di recente, io e un paio di miei amici abbiamo deciso di giocare alcune carte, e uno di loro ha suggerito il gioco "Irish Snap", che è stato l'ispirazione per questa sfida. Tuttavia, in seguito ho appreso che il gioco ha molte regole diverse con cui puoi giocare, alcune delle quali sono elencate qui . Le regole presenti in questa sfida non sono attualmente elencate in quella pagina, da cui il nome "Regole varianti"

La sfida

Dato un array di 3 carte, ottieni un valore di verità o di falso a seconda che facciano uno snap valido in una partita di snap irlandese.

Ingresso

L'input sarà un array di 3 numeri, che vanno da 1 a 13 inclusi, con 1 che rappresenta un asso, 11 che rappresenta un jack, 12 che rappresentano una regina e 13 che rappresentano un re. L'input può essere in qualsiasi ordine di top, middle, bottom.

Regole

I 4 criteri diversi per se le carte fanno uno snap irlandese sono:

  • Le carte superiore e centrale sono uguali
  • Le carte superiore e centrale hanno una differenza di una
  • Le carte superiore e inferiore sono uguali
  • Le carte superiore e inferiore hanno una differenza di una

Se uno di questi criteri è soddisfatto, è necessario fornire un valore veritiero. Inoltre, per i due criteri che richiedono che le carte abbiano una differenza di 1, si "avvolge", il che significa che un asso e un re hanno una differenza di 1 e viceversa.

Casi 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
Possiamo prendere le carte separatamente? O accetta input come top, [middle, bottom]?
Jo King,

certo, puoi fare entrambe le cose. ha cambiato la domanda per riflettere questo
EdgyNerd il

È possibile invertire l'output, ovvero restituire False per snap validi e viceversa? Che ne dite di un caso di test in cui sono validi sia il centro che il fondo?
Jo King,

Sì, puoi invertire l'output. Inoltre, ha aggiunto quel test case
EdgyNerd il

I valori di output devono essere coerenti o potremmo, ad esempio, output 0per falsee qualsiasi altro numero intero per trueo, anche, un numero intero negativo per falseo un numero intero positivo per true?
Shaggy,

Risposte:


4

Python 3 , 38 byte

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

Provalo online!

Restituisce un set non vuoto (verità) se valido, set vuoto (falsità) in caso contrario. Accetta l'input in ordine dall'alto in basso, ma può essere riorganizzato per le stesse dimensioni del codice.


4

Perl 6 , 16 byte

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

Provalo online!

Anonimo qualunque lambda che accetta input come top, middle, bottome restituisce una giunzione che restituisce True o False


In precedenza <era richiesto uno spazio bianco troppo brutto , questa era l'occasione perfetta per avere uno smiley del cuore.
Grimmy,

3

05AB1E , 7 6 byte

α12%ß!

Provalo online!

Accetta input come [middle, bottom], top.

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

Solo 1 è vero in 05AB1E. 0! e 1! sono entrambi 1, mentre nessun altro numero ha un fattoriale di 1.


2

J , 12 byte

1 e.2>12||@-

Provalo online!

Prendendo il centro in basso come arg sinistro, in alto come arg destro.

risposta originale prendendo input come un elenco

J , 24 byte

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

Provalo online!

  • #:@3 5I numeri 3 e 5 in binario sono 0 1 1e1 0 1 quali sono le maschere rispettivamente per le carte medio / superiore e inferiore / superiore
  • (12||@-/)@# Filtriamo l'input con quelle maschere, prendiamo il valore abs delle differenze risultanti, quindi il resto una volta diviso per 12 (per il caso asso-re)
  • 1 e.2> uno dei numeri risultanti è inferiore a 2, ovvero 0 o 1?

2

JavaScript (ES6), 29 byte

Accetta input come ([bottom, middle])(top).

L'uscita è invertita.

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

Provalo online!


JavaScript (ES6),  37  30 byte

Salvato 1 byte grazie a @Grimy

Accetta input come ([bottom, middle])(top).

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

Provalo online!


%144potrebbe essere%72
Grimmy,

@Grimy Grazie! FWIW, %13funzionerebbe anche.
Arnauld,

2

Carbone , 12 byte

›²⌊﹪↔⁻E²NN¹²

Provalo online! La risposta di Port of @ Grimy. Prende l'input come tre valori separati bottom, middle, top e output usando il formato booleano predefinito di Charcoal di -per vero, niente per falso. Spiegazione:

 ²              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 byte

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

Provalo online!

Ingresso:

bottom middle
top

In realtà, l'ordine del centro e del fondo non ha importanza.

Produzione:

0per falso; 1per vero


1

Pyth , 12 11 byte

Accetta input come [bottom, top, middle]o [middle, top, bottom](entrambi funzionano). Emette [](Falsy in Pyth) se non c'è uno snap valido, altrimenti un array non vuoto.

f>2%.aT12.+

Provalo online!

Se è richiesto un valore di verità / falsa coerente, aggiungere .Ain anticipo per +2 byte. Quindi l'output sarà TrueoFalse .

Spiegazione

  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?

Modifica: -1 con un approccio diverso







0

[R], 23 byte

accetta input come a = c (in basso, in alto, in mezzo):

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.