El truco de magia de 5 cartas involucra a un mago cuyo asistente les da 4 cartas mostradas y una oculta, en este orden, y el mago debe adivinar la oculta.
ADVERTENCIA: ¡Solución a continuación! Vete ahora o déjate mimar con él.
La solución
¡El truco aquí es que las cinco cartas se dan en un orden específico !
son las 5 cartas en el orden dado.
es el número de tarjeta de en(orden de números).
, donde es un número de tarjeta es un número entero, es igual al número de tarjeta pasos a la derecha de en , ajustando al principio si es necesario.
es el traje de en (orden del traje).
, donde es un número de tarjeta es un palo, denota la tarjeta con el número de tarjeta y el palo .
, donde y son las tarjetas, es cierto si 's traje es a la izquierda de ' s traje en , o sus trajes son iguales y 's número de tarjeta es a la izquierda de ' s número de tarjeta en .
, donde y son cartas, es verdadero si es falso.
, donde , y son las tarjetas, es el índice de permutación de este orden de ellos, especificado por la tabla siguiente:
La solución al truco de magia de 5 cartas es el problema:
El reto
Hasta aquí todo bien. Sin embargo, hacer el cálculo especificado anteriormente ya se solicita aquí . En cambio, su desafío es, dadas las 5 cartas sin un orden específico, ordenarlas correctamente. Esto significa que las primeras cuatro cartas en la salida representarán la quinta. En otras palabras, ser el asistente. Requisitos:
- .
- (es decir, esto debe ser posible).
Ejemplo
Consideremos el conjunto 7H,2D,6D,5C,6C
. En primer lugar, tomamos los 25 pares:
7H,7H 7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,2D 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,6D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,5C 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C 6C,6C
Luego, obviamente eliminamos los 5 pares que contienen la misma carta dos veces, no existen en un solo mazo:
7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C
Luego, dado que los trajes deben ser iguales, diferentes trajes en un par es un no-no:
2D, 6D 6D, 2D 5C, 6C 6C, 5C
Finalmente, verificamos si es posible pasar de la primera carta a la segunda agregando como máximo 6, eliminando la mitad de los pares restantes:
2D, 6D 5C, 6C
Ahora tenemos los pares válidos: 2D,6D
y 5C,6C
. La primera carta de cada par es la carta 1, mientras que la última es la carta 5.
Vamos a ir 5C,6C
aquí por facilidad. Todo el conjunto es 7H,2D,6D,5C,6C
, por lo tanto, eliminar las 2 cartas del par que hemos elegido, tenemos 7H,2D,6D
. Estas cartas representarán 6 - 5 = 1
, así que tenemos que ordenarlas como "min, mid, max". 7H > 2D < 6D < 7H
, o simplemente 2D < 6D < 7H
, así que ahora tenemos 2D,6D,7H
.
El último paso es poner todo esto junto, para que nuestro resultado sea 5C,2D,6D,7H,6C
.
Aclaraciones
- Puede usar en
10
lugar deT
. - Puede usar uno de
♠♥♦♣
,♤♡♢♧
o en♠♡♢♣
lugar deCDHS
, respectivamente. - Este es el código de golf , el código más corto gana.
Casos de prueba
Puede generar una o más de las soluciones válidas incluidas para cada caso de prueba.
8S,TD,5C,QS,TS -> 8S,5C,QS,TD,TS
... 8S,TD,TS,5C,QS
... TS,5C,8S,TD,QS
JD,KH,4S,9D,8S -> 9D,KH,8S,4S,JD
... 4S,JD,KH,9D,8S
4H,4D,TH,KH,2C -> 4H,KH,4D,2C,TH
... TH,4D,2C,4H,KH
... KH,4D,TH,2C,4H
3S,KS,8S,KH,9H -> 9H,8S,KS,3S,KH
... 3S,KS,9H,KH,8S
... 8S,3S,9H,KH,KS
... KS,KH,9H,8S,3S
KH,TS,3C,7H,JD -> 7H,TS,JD,3C,KH
4C,KC,TD,JD,QS -> KC,JD,QS,TD,4C
... TD,4C,KC,QS,JD
AC,5H,8D,6D,8S -> 6D,AC,8S,5H,8D
AS,TC,3S,2H,9C -> 9C,2H,AS,3S,TC
... AS,9C,2H,TC,3S
4C,JS,AS,8H,JC -> JC,JS,AS,8H,4C
... JS,JC,4C,8H,AS
4H,QS,TH,QC,AC -> QC,4H,QS,TH,AC
... 4H,QS,QC,AC,TH
fuente
Respuestas:
Node.js ,
190186180 bytesPruébalo en línea!
¿Cómo?
Identificar y comparar los números de tarjeta.
La función auxiliarsol devuelve un índice que representa el número de una tarjeta dada.
"NS"
Generando las permutaciones de la entrada
Probar los trajes
La primera prueba obvia es asegurarse de que la primera y la última carta sean del mismo palo. Rechazamos la permutación si no son iguales.
Probar la distancia
Calculamos la distancia entre el primer número de tarjeta y el último número de tarjeta con:
Esta prueba se basa en la forma en que funciona el
sort()
algoritmo de Node.js.sort()
Consideremos el siguiente código:
Ahora, si lo hacemos:
Cada permutación genera una máscara de bits única, que se asigna a una distancia única:
Poniendo todo junto, tenemos la siguiente prueba:
fuente
Python 3 ,
260 248232 bytesPruébalo en línea!
-12 bytes gracias a Eric the Outgolfer
-14 bytes al eliminar una lista de comprensión
fuente
Limpio ,
225220209 bytesPruébalo en línea!
Como una función compuesta
:: [[Char]] -> [[Char]]
, con algunos ayudantes.Expandido:
fuente
Ruby , 175 bytes
Pruébalo en línea!
Una función lambda que toma una serie de tarjetas como cadenas
Comentado
fuente
Jalea , 41 bytes
Un enlace monádico que acepta una lista de listas de caracteres que devuelve una lista de todos los arreglos válidos en el mismo formato.
Pruébalo en línea! (el pie de página formatea el resultado como una cuadrícula para evitar la impresión aplastante implícita que realiza el código del enlace cuando se ejecuta como un programa completo)
O ver un conjunto de pruebas .
Tengo la sospecha de que otro enfoque será mucho más conciso. ¡Tendré que volver a visitar este desafío más tarde!
... hmm, tuve otro golpe y obtuve otro 41 byter ( prueba ):
fuente