Как умножить элементы в массиве, например, 4 лота [1 .. 10] в F # - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь положить колоду карт (Блэкджек) в массив или список. Я уже видел это, но не могу вспомнить синтаксис и нигде не могу его найти.

Мне нужно что-то вроде этого let list = [ 1 .. 10; 10; 10; 10 ] * 4, но, конечно, это не работает. Если бы кто-нибудь мог помочь, я был бы очень признателен.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Я не уверен в точном синтаксисе, который вы используете ...

В идеале вам нужен список мастей и список карт, а затем вы создаете декартово произведение , и, вероятно, проще всего хранить каждую карту в колоде в кортеже number, suit* 1006. *

let cards = [1..10]
let suits = [1..4]

let deck = seq { 
    for card in cards do //cards could just be [1..10]
        for suit in suits do //suits could be too
            yield card, suit }

//Show the answer
printfn "%A" (deck |> Seq.toList)

Обычно иском является Дискриминационный Союз, и вы можете сопоставить номера:

type Suit = 
| Hearts
| Spades
| Diamonds
| Clubs

let toSuit suit =
    match suit with
    | 1 -> Hearts
    | 2 -> Spades
    | 3 -> Diamonds
    | 4 -> Clubs

и изменить yield card, suit } на yield card, toSuit suit }

Вы могли бы сделать то же самое с картами, имея DU от Ace -> King. Я оставлю это как упражнение для вас;)

Наконец, если вам нужна общая функция, вы можете написать что-то вроде этого - я не помню, чтобы это было в FSharp.Core, но я могу ошибаться.

let multiplyList xs by = seq {
    for x in xs do
        for y in [1..by] do 
            yield x, y }

let deck = multiplyList cards 4 |> Seq.toList
0 голосов
/ 12 января 2019

Было бы неплохо, если бы вы указали, какой язык вы используете, потому что ответ может быть другим. Я думаю, что вы ищете массив массивов. Вам понравится нужна куча массивов отслеживать ранг карты, масть, значение ранга, а также то, была ли она разыграна, не разыграна или как вам нравится. Так что вам нужно что-то вроде:

ranks = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']
rankValues = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
suits = [ 'spades', 'hearts', 'clubs', 'diamonds' ]

deck = [[ 0,0,0,0,0,0,0,0,0,0,0,0,0],
        [ 0,0,0,0,0,0,0,0,0,0,0,0,0],
        [ 0,0,0,0,0,0,0,0,0,0,0,0,0],
        [ 0,0,0,0,0,0,0,0,0,0,0,0,0]]
card = [suit, rank]

deck [suit][rank] = true
deck [suit][rank] = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...