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
Другие вопросы по тегам