APL Bridge Game
Я пытаюсь написать код игры "Бридж" в APL, часть, на которой я застрял, - это когда я печатаю руки, я хочу вернуть 4 отдельные руки, чтобы забить все случайные карты, и я хочу сначала отсортировать карты по масти, а затем в сортировка по тузу до двух я могу выполнить каждый из этих видов индивидуально
HAND←DEAL;CHAR;DECK
DECK←MAKE_DECK
CHAR←DECK[;13?52]
⍝HAND←CHAR[;'SHDC23456789TJQKA'”³CHAR]
HAND←CHAR[;'CDHS'”³CHAR]
сортирует по масти, но не по номерам в костюме, и я также не знаю, как заставить его разыграть 4 руки вместо одной руки из 13 карт
пример вывода:
Q982AQT93T934 AKJ657428J987 K865AKJ54KQT3 T743JQ762A652
SSSSHHHHHDDDC SSSSSHHHDCCCC HHHHDDDDDCCCC SSSSHDDDDCCCC
1 ответ
(Я не был уверен, что вы делали в MAKE_DECK, может быть, там происходит что-то особенное? В противном случае нет никаких причин делать для этого отдельную функцию. Кроме того, я не уверен, что я не являюсь носителем английского языка). по поводу именования карточек и т. д. - пожалуйста, исправьте в случае необходимости...)
DECK←(52⍴'AKQJ0987654'),[.5]13/'SHDC'
Затем я раздаю карты и просто создаю множество индексов в DECK;
HANDS←4 13⍴52?52
Они должны быть отсортированы по строкам. (Я делаю это, используя "классический" стиль, который, будем надеяться, будет работать во всех APL-диалектах...):
x←0
x←x+1 ⋄ HANDS[x;]←HANDS[x;⍋HANDS[x;]] ⋄ →(x<4)/⎕LC
(Пожалуйста, обратите внимание, что эта строка будет работать только внутри функции, а не когда вы выполняете ее непосредственно в интерпретаторе - нет ⎕LC, которую он мог бы → to...) Итак, какова рука игрока 1?
DECK[;HANDS[1;]]
JAQJ08740Q4K7
SSHHHHHHDDCCC
Надеюсь, что вы можете собрать хорошую функцию из этого;-)
Основываясь на предыдущем ответе, мы можем устранить цикл с помощью небольшой арифметики. Выходной интервал достигается с помощью expand:
⎕←deck←2 52⍴(52⍴'AKQJ098765432'),13/'SHDC'
AKQJ098765432AKQJ098765432AKQJ098765432AKQJ098765432
SSSSSSSSSSSSSHHHHHHHHHHHHHDDDDDDDDDDDDDCCCCCCCCCCCCC
⎕←hand←52?52
41 45 42 18 33 15 7 44 21 16 25 11 49 10 40 6 1 19 43 52 46 9 24 17 8 38 39 34 28 23 20 50 29 37 2 36 26 13 31 51 4 48 32
5 27 22 14 3 30 47 35 12
Unsorted
(55⍴14↑13⍴1)\deck[;hand]
K9Q08K807Q345 5A9A9J2864J73 27K584Q4K5220 3J690A6AQJ763
CCCHDHSCHHHSC SCSSHCCCSHHSD DDDHHCDDSDHSD CSCDSDHHSDCDS
Sorted
(55⍴14↑13⍴1)\deck[;hand[⍋hand+13/1000×⍳4]]
84KQ0738KQ095 A9765J943AJ82 K2852KQ075424 QJ03A6AJ96763
SSHHHHHDCCCCC SSSSSHHHDCCCC SSHHHDDDDDDDC SSSSHHDDDDCCC