Irish Snap: Reglas variantes


13

Introducción

Recientemente, un par de mis amigos y yo decidimos jugar algunas cartas, y uno de ellos sugirió el juego 'Irish Snap', que fue la inspiración para este desafío. Sin embargo, más tarde aprendí que el juego tiene muchas reglas diferentes con las que puedes jugar, algunas de las cuales se enumeran aquí . Las reglas que están en este desafío no están listadas actualmente en esa página, de ahí el nombre, 'Reglas variantes'

El reto

Dada una serie de 3 cartas, genera un valor verdadero o falso dependiendo de si hacen un complemento válido en un juego de complemento irlandés.

Entrada

La entrada será una matriz de 3 números, que van del 1 al 13 inclusive, 1 representando un as, 11 representando un gato, 12 representando una reina y 13 representando un rey. La entrada puede ser en cualquier orden de arriba, medio, abajo.

Reglas

Los 4 criterios diferentes para si las cartas hacen un snap irlandés son:

  • Las cartas superiores y medias son iguales
  • Las cartas superiores y medias tienen una diferencia de uno
  • Las cartas superior e inferior son iguales
  • Las cartas superior e inferior tienen una diferencia de uno

Si se cumple alguno de estos criterios, debe generar un valor verdadero. Además de esto, para los dos criterios que requieren que las cartas tengan una diferencia de uno, se "ajusta", lo que significa que se considera que un as y un rey tienen una diferencia de uno, y viceversa.

Casos de prueba

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
¿Podemos tomar las cartas por separado? O tomar entrada como top, [middle, bottom]?
Jo King

Claro, puedes hacer ambas cosas. cambió la pregunta para reflejar eso
EdgyNerd

¿Podemos invertir la salida, es decir, devolver False para instantáneas válidas y viceversa? ¿Qué tal un caso de prueba donde tanto el medio como el fondo son válidos?
Jo King

Sí, puedes invertir la salida. Además, agregó ese caso de prueba
EdgyNerd el

¿Deben ser consistentes los valores de salida o podríamos, por ejemplo, salida 0para falsey cualquier otro entero para trueo, incluso, un entero negativo para falseo cualquier entero positivo para true?
Shaggy

Respuestas:


4

Python 3 , 38 bytes

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

Pruébalo en línea!

Devuelve un conjunto no vacío (verdadero) si es válido, conjunto vacío (falsey) si no. Toma la entrada en orden superior-medio-inferior, pero se puede reorganizar para el mismo tamaño de código.


4

Perl 6 , 16 bytes

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

Pruébalo en línea!

Anónimo, cualquier lambda que tome datos como top, middle, bottomy devuelva un cruce que se evalúe como verdadero o falso


Se necesita un espacio en blanco demasiado malo antes <, esta era la oportunidad perfecta para tener un corazón sonriente.
Grimmy

3

05AB1E , 7 6 bytes

α12%ß!

Pruébalo en línea!

Toma entradas como [middle, bottom], top.

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

Solo 1 es veraz en 05AB1E. 0! ¡y 1! son ambos 1, mientras que ningún otro número tiene un factorial de 1.


2

J , 12 bytes

1 e.2>12||@-

Pruébalo en línea!

Tomando el centro inferior como el argumento izquierdo, el superior como el argumento derecho.

respuesta original tomando entrada como una lista

J , 24 bytes

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

Pruébalo en línea!

  • #:@3 5Los números 3 y 5 en binario son 0 1 1y 1 0 1cuáles son las máscaras para las tarjetas media / superior e inferior / superior respectivamente
  • (12||@-/)@# Filtramos la entrada con esas máscaras, tomamos el valor de abs de las diferencias resultantes, luego el resto cuando se divide por 12 (para el caso de as-rey)
  • 1 e.2> son cualquiera de los números resultantes menores que 2, es decir, 0 o 1

2

JavaScript (ES6), 29 bytes

Toma entrada como ([bottom, middle])(top).

La salida está invertida.

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

Pruébalo en línea!


JavaScript (ES6),  37  30 bytes

Guardado 1 byte gracias a @Grimy

Toma entrada como ([bottom, middle])(top).

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

Pruébalo en línea!


%144podría ser%72
Grimmy

@ Grimy Gracias! FWIW, %13también funcionaría.
Arnauld

2

Carbón de leña , 12 bytes

›²⌊﹪↔⁻E²NN¹²

Pruébalo en línea! Puerto de la respuesta de @ Grimy. Toma la entrada como tres valores separados inferior, medio, superior y salidas utilizando el formato booleano predeterminado de Charcoal -para verdadero, nada para falso. Explicación:

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

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

Pruébalo en línea!

Entrada:

bottom middle
top

En realidad, el orden del medio y el fondo no importa.

Salida:

0por falso 1de verdad


1

Pyth , 12 11 bytes

Toma entrada como [bottom, top, middle]o [middle, top, bottom](ambos funcionan). Salidas [](Falsy in Pyth) si no hay un snap válido, de lo contrario, una matriz no vacía.

f>2%.aT12.+

Pruébalo en línea!

Si se requiere un valor de verdad / falsedad consistente, agregue .Aal frente para +2 bytes. Entonces la salida será Trueo False.

Explicación

  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?

Editar: -1 con un enfoque diferente







0

[R], 23 bytes

toma la entrada como a = c (abajo, arriba, en el medio):

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.