Soy un novato de Scala. Decidí escribir un solucionador de spider solitario como primer ejercicio para aprender el lenguaje y la programación funcional en general.Repetición de una lista en Scala
Me gustaría generar una baraja barajada aleatoriamente que contenga 1, 2 o 4 palos. Esto es lo que ocurrió:
val numberOfSuits = 1
(List("clubs", "diamonds", "hearts", "spades").take(numberOfSuits) * 4).take(4)
que debe devolver
List("clubs", "clubs", "clubs", "clubs")
List("clubs", "diamonds", "clubs", "diamonds")
List("clubs", "diamonds", "hearts", "spades")
dependiendo del valor de numberOfSuits, excepto que no hay lista de "multiplicar" operación que puedo encontrar. ¿Lo extrañé? ¿Hay una mejor manera de generar el mazo completo antes de barajar?
Por cierto, planeo usar una enumeración para los trajes, pero fue más fácil escribir mi pregunta con cuerdas. Tomaré la lista que se generó arriba y usaré para comprensión, iterar sobre los palos y una lista similar de "rangos" de cartas para generar un mazo completo.
La parte interesante de este proyecto creará las generaciones inmutables del cuadro (diseño actual de las tarjetas). Solicito al cuadro actual una lista de movimientos legales, devueltos como tuplas de (columna de origen, columna de destino y posición de origen). A continuación, aplico cada uno al cuadro actual de forma recursiva usando algún tipo de algoritmo mini-max para encontrar el "mejor" movimiento.También quiero que el objeto de la tarjeta sea inmutable, por lo que los cuadros ("cuadros?") Tendrán que saber si una carta está boca arriba. – Ralph