打高尔夫球


25

小时候,我经常玩纸牌游戏高尔夫。您应该选择接受的挑战是计算高尔夫球手的得分。由于此纸牌游戏1有9000多种版本,我们将遵循我记得玩的规则。

游戏规则)

  • 您以6张牌结束一轮比赛,并且希望获得尽可能少的积分。

  • 不使用小丑。

  • A和2分别得-1和-2分。

  • 杰克和国王都得0分。

  • 3到10张卡片的面值是值得的。但是,当您将它们配对时,它们将被取消。例如,一个5代表5分,但是两个5代表零。三个5代表5分(因为前2个配对,但第3个不是。),四个5代表0(因为共2个配对)。

  • 皇后区值15分。皇后不能取消,例如2个皇后价值30分。

规则(挑战)

输入将是一个整数数组,或6个单独的整数。您更喜欢哪一个。1代表一张ace,2-10代表2-10,Jack,Queen和King代表11、12和13。输出是根据上述规则的一手牌得分。您可以放心地假设所有输入均有效,例如,没有数字出现超过4次,并且所有数字都在范围内[1, 13]。输入和输出可以采用任何合理的格式。

测试IO:

[11, 10, 3, 1, 2, 2]    --> 8
[4, 5, 5, 3, 8, 7]      --> 22
[2, 2, 2, 2, 1, 1]      --> -10 (The lowest score possible)
[12, 12, 12, 12, 10, 9] --> 79 (The highest score possible)
[9, 9, 9, 9, 11, 1]     --> -1
[8, 8, 8, 8, 11, 13]    --> 0
[10, 9, 3, 7, 12, 2]    --> 42
[1, 2, 3, 4, 5, 6]      --> 15
[10, 9, 2, 3, 4, 1]     --> 23
[10, 3, 12, 3, 7, 12]   --> 47

以字节为单位的最短答案胜出!


1不是真的,但是有很多变化。

Answers:


3

Pyth,28 27 25字节

s+*L%/Qd2}3Tm?<d3_d*15q12

在线尝试。 测试套件。

说明

  • 首先,Pyth自动添加一些变量。现在的代码s+*L%/Qd2}3Tm?<d3_d*15q12dQ
  • }3T生成列表[3, 4, 5, 6, 7, 8, 9, 10]
  • 将列表(*L)中的每个数字乘以输入(/Qd)中该数字的计数,以2为模(%2)为单位。配对数字的结果为0,非配对数字的结果为数字本身。
  • 映射输入数字(mQ):
    • 如果数字小于3(?<d3),则取反(_d)。
    • 否则,检查是否为12(q12d),然后将布尔值乘以15(*15)。皇后结果为15,其他任何结果为0。
  • 连接列表(+)。现在,结果列表包含非配对数字(第一部分)和特殊卡A,2,Q(第二部分)的分数,并带有一些额外的零。
  • 最后,取结果的总和(s)。

替代的25字节解决方案

-+s*L%/Qd2}3T*15/Q12s<#3Q

这与第一个相似,但分别计算皇后并用过滤器消除王牌和王牌。


11

Python 2,72 70字节

f=lambda x,*T:[x*(-1)**T.count(x),~x%2*15,-x][(x-3)/8]+(T>()and f(*T))

有一次我希望Python能够得到0**0 == 0一次治疗,这样我就能做到(-condition)**num。打电话喜欢f(11, 10, 3, 1, 2, 2)

先前的72字节版本:

f=lambda x,*T:[~x%2*15,x*(-1)**(x<3or T.count(x))][x<11]+(T>()and f(*T))

5

> <>63 57 56 + 2 = 65 59 58字节

输入数字应在程序启动时位于堆栈上,因此该-v标志为+2字节。在线尝试!

</!?lp6$+1g6:
3\0
?\::6g2%*{+}1+:b=
;\~16g-26g2*-c6gf*+n

由于将代码字段中所有未使用的值初始化为0,因此可以通过获取值[value,6],将其递增并将其放回代码字段中,来计算出堆栈中每个值中有多少个。然后将总数计算为:

T = 0 + {for x in 3 to 10, x*([x,6]%2)} - [1,6] - 2*[2,6] + 15*[12,6]

编辑:通过重组输入并切换计算步骤来关闭6个字节。先前版本:

:6g1+$6pl0=?\
/-*2g62-g610/
c ;n$\
6:b=?/>::6g2%*{+}1+!
\gf*+3/

编辑2:由于Sp3000,保存了1个字节


我已经看到您使用0=?过几次或类似的方法-可以?!代替使用吗?
Sp3000 '16

@ Sp3000 Ack,当然,您是对的。谢谢,我会补充一点

5

MATL27 26字节

3:10=s2\7M*G12=15*Gt3<*_vs

输入是一个列数组,即,值之间用分号分隔。

在线尝试!或者验证所有的测试用例(这增加了一个循环,采取一切投入,并取代G1$0G推动最新的输入)。

说明

3:10=    % Take input implicitly. Compare with range [3 4 ... 10], with broadcast
s        % Sum of each column: how may threes, fours, ... tens there are
2\       % Modulo 2
7M       % Push [3 4 ... 10] again
*        % Element-wise multiply (the sum of this array is the score of 3...10)
G        % Push input again
12=      % Compare with 12, element-wise
15*      % Multiply by 15 (this is the score of 12)
G        % Push input again
t3<      % Duplicate. True for entries 1 or 2
*_       % Multiply and negate (the sum of this array is the score of 1, 2)
v        % Concatenate all stack concents into a vertical array
s        % Sum of array. Implicitly display

4

-37 36 35

这似乎太大了,但是FGITW。

J<#h;K-QS2++*15/K12sm*d%/Jd2{J_s@S2

测试套件


2
“这似乎太大了,但是FGITW。” 那么先打高尔夫球吗?

我没有看到这一点,直到我完成了我自己的,但他们几乎是一样的,但使用JK似乎完全不必要的,你也可以打高尔夫球+_-;)我有31:+*15/Q12-sm*d%/Qd2{>#2<#11Qs@S2
FryAmTheEggman

1
@FryAmTheEggman 24:+*15/Q12-s*R%/Qd2}3Ts@S2
雅库布

3

JavaScript(ES6),63个字节

a=>a.map(e=>r+=e<3?-e:e>10?e-12?0:15:(m[e]^=1)?e:-e,r=0,m=[])|r

或者,如果您愿意,

a=>a.map(e=>r-=e<3?e:e>10?e-12?0:-15:(m[e]^=1)?-e:e,r=0,m=[])|r


0

Perl 5.10.0 + -n115 64 60 56字节

$p+=$_-12?$_>2?$_<11?++$l[$_]%2?$_:-$_:0:-$_:15}{say$p

在线尝试!

说明:

在其-n周围添加循环:

# Used variables:
# $_: input (auto)
# $p: points
# $l[n]: number of occurences of n (for 3-10)
while (<>) { # for every input
    $p += $_ - 12 ? # if the input is not 12 (queen) ...
        $_ > 2 ? # then: if it's > 2 (not ace or 2) ...
            $_ < 11 ? # then: if < 11 (3-10) ...
                ++$l[$_] % 2 ? # then: if it's an odd occurence (1st, 3rd, 5th, ...)
                    $_ # add it
                    : -$_ # else subtract it
            : 0 # no points for other stuff (J, K)
        : -$_ # negative points for ace and 2
    : 15 # 15 points for queen
}
{ # after input:
    say $p # output points
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.