【问题标题】:APL Poker Game ScoringAPL 扑克游戏计分
【发布时间】:2018-03-12 02:51:36
【问题描述】:

我在 APL 中遇到了一个问题,它涉及获取值并像扑克游戏一样对它们进行评分。 所以我用了

      CHARS⍸CAR3
 5 29 30  8 29 23  5
34 34 33  2 34  3 34
 6 10 10 15  6 15 15

这是卡片“一副”中字符的整数表示 然后我用了

{⍺,⍴⍵}⌸(HAND3[1;]) 

返回每个字母索引的频率,例如字母 S 出现 2 次,由第二行中出现的 29 表示。我不知道如何为我的矩阵的每一行执行此操作,即 3 组 3x7 矩阵 该函数只返回第一行

 5 2
29 2
30 1
 8 1
23 1

当我尝试对每一行执行此操作时,它会返回所有字符的频率,并且不会对每个集合单独执行此操作。简而言之,我需要它为每个手牌分别执行功能。

【问题讨论】:

    标签: matrix array-formulas frequency-analysis apl dyalog


    【解决方案1】:

    处理其参数的主要单元,对于向量,主要单元是元素,对于矩阵,主要单元是行。所以要让分别处理HANDS3矩阵的每一行,将矩阵“拆分”(一元)为三个向量,然后将{⍺,⍴⍵}⌸应用于每个(¨),如下:

          HANDS3
     5 29 30  8 29 23 55
    34 34 33  2 34  3 34
     6 10 10 15  6 15 15
          ↓HANDS3
    ┌──────────────────┬──────────────────┬──────────────────┐
    │5 29 30 8 29 23 55│34 34 33 2 34 3 34│6 10 10 15 6 15 15│
    └──────────────────┴──────────────────┴──────────────────┘
          {⍺,⍴⍵}⌸¨↓HANDS3
    ┌────┬────┬────┐
    │ 5 1│34 4│ 6 2│
    │29 2│33 1│10 2│
    │30 1│ 2 1│15 3│
    │ 8 1│ 3 1│    │
    │23 1│    │    │
    │55 1│    │    │
    └────┴────┴────┘
    

    Try it online!

    【讨论】:

    • 我明白了,APL 中的优先级和它的规则让我望而却步。您如何确定何时使用 concat/lamenate 与“each”函数?顺便谢谢您
    • @cphoenix Concatenate (,[N]) 用于扩展数组,同时保持其排名。 Laminate ,[N-0.5] 用于通过增加数组的等级(但保持其形状)来扩展数组。每个 (¨) 都是一个 operator,它将其操作数函数应用于其参数的每个元素或其参数的每对元素。
    猜你喜欢
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2023-03-11
    相关资源
    最近更新 更多