ตีกอล์ฟด้วยสกอร์


25

เมื่อตอนเป็นเด็กฉันเคยเล่นเกมไพ่" กอล์ฟ "บ่อยครั้ง ความท้าทายของคุณถ้าคุณเลือกที่จะยอมรับมันคือการคำนวณคะแนนของมือกอล์ฟ เนื่องจากมีมากกว่า 9000 รูปแบบในเกมการ์ดใบนี้1เราจะไปตามกฎที่ฉันจำได้ว่าเล่น

กฎ (ของเกม)

  • คุณจบรอบด้วยไพ่ 6 ใบและคุณต้องการแต้มน้อยที่สุด

  • ไม่ใช้โจ๊กเกอร์

  • Aces และ 2s มีค่า -1, และ -2 คะแนนตามลำดับ

  • แจ็คและราชาทั้งคู่มีค่า 0 คะแนน

  • ไพ่จาก 3 ถึง 10 เป็นมูลค่าที่คุ้มค่า อย่างไรก็ตามสิ่งเหล่านี้จะถูกยกเลิกเมื่อคุณจับคู่ออก ตัวอย่างเช่น 5 มีค่า 5 คะแนน แต่ 5s สองตัวมีค่าเป็นศูนย์ 5 วินาทีมีค่า 5 คะแนน (ตั้งแต่ 2 คู่แรกถูกจับคู่ออก แต่ไม่ได้เป็นอันดับ 3) และ 5 วินาทีสี่มีค่าเป็น 0 (เนื่องจากทำ 2 คู่)

  • ควีนส์มีค่า 15 คะแนน ไม่สามารถยกเลิกควีนส์ได้เช่น 2 ควีนส์มีค่า 30 คะแนน

กฎ (ของการท้าทาย)

อินพุตจะเป็นอาร์เรย์ของจำนวนเต็มหรือจำนวนเต็ม 6 ตัว แล้วแต่จำนวนใดที่คุณต้องการ 1 หมายถึงเอซ 2-10 หมายถึง 2-10 และแจ็คราชินีและคิงหมายถึง 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ไม่จริง แต่มีหลายรูปแบบ

คำตอบ:


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) ด้วยการนับจำนวนที่อยู่ใน input ( /Qd), modulo 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

สิ่งนี้ทำงานคล้ายกับอันแรก แต่นับควีนแยกจากกันและทำให้เอซและ twos เป็นตัวกรอง


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))

เมื่อมาถึงจุดหนึ่งที่ผมอยากงูใหญ่ได้รับการรักษาเป็นครั้งแรกเพื่อที่ฉันจะทำอย่างไร0**0 == 0 โทรเช่น(-condition)**numf(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 ไบต์

หมายเลขอินพุตคาดว่าจะอยู่ในสแต็กเมื่อเริ่มต้นโปรแกรมดังนั้นจึงมีค่า 2 ไบต์สำหรับ-vแฟล็ก ลองออนไลน์!

</!?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]

แก้ไข: golfed ปิด 6 ไบต์โดยปรับโครงสร้างอินพุตและสลับขั้นตอนการคำนวณรอบ ๆ รุ่นก่อนหน้า:

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

แก้ไข 2: บันทึก 1 ไบต์ขอบคุณ Sp3000


ฉันเคยเห็นว่าคุณเคยใช้0=?หรือคล้ายกันสองสามครั้ง - คุณสามารถใช้?!แทนได้หรือไม่
Sp3000

@ Sp3000 แน่นอนคุณพูดถูก ขอบคุณฉันจะเพิ่มที่ใน
Sok

5

MATL , 27 26 ไบต์

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

อินพุตเป็นอาร์เรย์คอลัมน์นั่นคือค่าจะถูกคั่นด้วยเครื่องหมายอัฒภาค

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด (เป็นการเพิ่มลูปเพื่อรับอินพุตทั้งหมดและแทนที่Gด้วย1$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

Pyth - 37 36 35

ดูเหมือนว่าจะใหญ่เกินไป แต่ FGITW

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

Test Suite


2
ดูเหมือนว่ามันจะใหญ่เกินไป แต่ FGITW ดังนั้นกอล์ฟก่อนหรือไม่
แมว

ฉันไม่เห็นนี้จนกว่าฉันจะได้เสร็จสิ้นการของตัวเอง แต่พวกเขาเกือบจะเหมือนกันยกเว้นการใช้JและKดูเหมือนว่าไม่จำเป็นทั้งหมดและยังให้คุณสามารถกอล์ฟ+_เพื่อ-;) ผมได้ 31:+*15/Q12-sm*d%/Qd2{>#2<#11Qs@S2
FryAmTheEggman

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

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 + -n, 115 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
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.