เครดิตให้กับ@ Agawa001สำหรับการถามคำถามนี้
คำอธิบาย
ใหม่ของฉัน "keybore" มีเพียง 2 ปุ่มคือและ+-
0ตัวเลขที่อยู่ในหน่วยความจำเริ่มต้นที่
ติดต่อกันแต่ละกด+หรือ-จะเพิ่มขึ้น / ลดลงหน่วยความจำสำหรับว่ากี่ครั้งก็ถูกกดอย่างต่อเนื่อง
ดังนั้นหากคุณกด+4 ครั้งครั้งแรกที่มันเพิ่ม 1 ครั้งที่สองจะเพิ่ม 2 ครั้งที่สามเพิ่ม 3 ครั้งที่สี่เพิ่ม 4 ให้คุณ10(สิบ)
ทีนี้ถ้าคุณกด-3 ครั้งครั้งแรกที่มันลบ 1 ครั้งที่สอง 2 ครั้งที่สามครั้งที่ 3 ปล่อยคุณด้วย4(สี่)
TL; DR
รับสตริง + และ - ให้แบ่งแต่ละการเปลี่ยนแปลงของตัวละคร จากนั้นแต่ละสตริงผลลัพธ์ของ+สัญลักษณ์m จะเพิ่มหมายเลขสามเหลี่ยม m-th และแต่ละสตริงของ-สัญลักษณ์n จะลบหมายเลขสามเหลี่ยม n-th
เดินผ่าน
ตอนนี้ถ้าคุณยังไม่เข้าใจผมจะแสดงวิธีการสร้าง+++--+--1
Program | Counter | Memory
----------------------------
| 0 | 0
+ | +1 | 1
++ | +2 | 3
+++ | +3 | 6
+++- | -1 | 5
+++-- | -2 | 3
+++--+ | +1 | 4
+++--+- | -1 | 3
+++--+-- | -2 | 1
งาน
- คุณจะใช้จำนวนเต็มบวกเป็นอินพุตไม่ว่าจะเป็นอาร์กิวเมนต์การทำงานหรือจาก STDIN
- จากนั้นคุณจะส่งออก / พิมพ์จำนวนขั้นต่ำของการกดแป้นที่จำเป็นในการสร้างหมายเลขนั้นโดยใช้วิธีการด้านบน
Testcases
เนื่องจากการจัดเรียง+หรือการ-รันใหม่ให้หมายเลขเท่ากันสำหรับแต่ละกลุ่มดังกล่าวจะมีการแสดงรายการลำดับต้นสุดของพจนานุกรมเท่านั้น
Input | Output | Possible corresponding sequences
-------------------------------------------------
4 | 5 | -+++-
6 | 3 | +++
9 | 5 | ++++-
11 | 7 | +++-+++
12 | 7 | +++++--, ++++-++
19 | 8 | -++++++-
39 | 12 | +++++++++---
40 | 13 | +++++++++---+, ++++++++-+++-
45 | 9 | +++++++++
97 | 20 | ++++++++++++++--+---, +++++++++++++-++++--, ++++++++++++-++++++-
361 | 34 | ++++++++++++++++++++++++++-+++-+++
ทรัพยากรเพิ่มเติม
- พิสูจน์ได้ว่าสามารถใช้หมายเลขใด ๆ : โดยพื้นฐาน
++-แล้วคุณสามารถรับหมายเลขซ้ำได้ เพื่อให้ได้ตัวเลขคี่เพียงแค่ใส่+ท้าย - อีกวิธีทั่วไปในการรับหมายเลขใด ๆ ตัวอย่างเช่นในการสร้าง
50วิธีหนึ่งคือการกด+50 ครั้งแล้วกด-49 ครั้ง - คำตอบของ 50 หมายเลขแรก
- บังคับ JSFiddle
เกณฑ์การให้คะแนน
+++++--เป็นทางเลือก แต่ฉันลบ++-++++เพราะมันเทียบเท่า++++-++) ฉันยังมีอีกกรณีที่ฉันต้องการเพิ่มในภายหลังในกรณีที่ทุกคนคิดวิธีแก้ปัญหาที่มีประสิทธิภาพถ้าฉันจัดการสร้างมันขึ้นมา
++-++++ลบ นี่คือการแก้ไขของฉันไม่ใช่ของคุณ
+++++--(หรือเท่ากัน--+++++) ซึ่งเป็นสาเหตุที่ฉันรู้สึกว่าต้องแก้ไขตั้งแต่แรก