ขยายชวเลขและเพิ่มลำดับจำนวนเต็ม


18

กำหนดอินพุตของรายการตัวเลขในรูปแบบของลำดับเลขชวเลขและเพิ่มจำนวนเต็มออกลำดับในเต็ม

ชวเลขลำดับเพิ่มขึ้นจํานวนเต็มรูปแบบผลงานโดยการหาทุกจำนวนn ด้วยตัวเลขน้อยกว่าจำนวนก่อนมัน เมตร ด้วยdเป็นจำนวนของตัวเลขในnสุดท้ายdหลักเมตรจะถูกแทนที่ด้วยตัวเลขของทั้งหมด n นี่คือตัวอย่างอินพุต:

123 45 6 7 89 200

เมื่อใช้กฎการเปลี่ยนเราจะเปลี่ยน 45 เป็น 145 เพราะ 45 <123:

123 145 6 7 89 200

ใช้กฎเดียวกันซ้ำ ๆ นี่จะกลายเป็น:

123 145 146 7 89 200
123 145 146 147 89 200
123 145 146 147 189 200

ตอนนี้มีการเรียงลำดับ (ไม่มีตัวเลขที่ใช้กฎ) ดังนั้นนี่คือผลลัพธ์สุดท้าย

คุณอาจคิดว่า

  • การจดชวเลขจะใช้เมื่อเป็นไปได้เสมอ ยกตัวอย่างเช่นการป้อนข้อมูลจะ ไม่เคย12 312 13

  • ตัวเลขจะไม่ลดลงในขณะที่ยังคงมีจำนวนหลักเหมือนกัน 333 222ยกตัวอย่างเช่นการป้อนข้อมูลจะไม่

  • การใช้กฎชวเลขและจะไม่ส่งผลให้จำนวนที่ยังคงน้อยกว่าจำนวนก่อนหน้าในลำดับ 123 12ยกตัวอย่างเช่นการป้อนข้อมูลจะไม่

  • ตัวเลขจะเป็นจำนวนเต็มบวกเสมอและจะไม่มี 0 นำหน้า (หากใช้รูปแบบสตริง)

  • ลำดับที่ขยายเต็มจะไม่ประกอบด้วยตัวเลขที่ซ้ำกัน (อย่างไรก็ตามลำดับชวเลขอาจ; อดีต10 1 20 1-> 10 11 20 21.)

  • จะมีอย่างน้อยหนึ่งหมายเลขในอินพุต

อินพุตและเอาต์พุตสามารถเป็นรายการ / อาร์เรย์ของตัวเลข / สตริงหรือสตริงเดี่ยวที่มีองค์ประกอบคั่นด้วยตัวเลขใด ๆ ที่ไม่ใช่ตัวเลข

เนื่องจากนี่คือรหัสที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ

กรณีทดสอบที่มีอินพุตและเอาต์พุตบนบรรทัดที่สลับกัน:

1 2 3 10 1 2 20 5 100 200 10 3 5 26 9 99 999 9999
1 2 3 10 11 12 20 25 100 200 210 213 215 226 229 299 999 9999
223 1184 334 441 5 927 2073 589 3022 82 390 5 9
223 1184 1334 1441 1445 1927 2073 2589 3022 3082 3390 3395 3399
5 10 5 20 5 30 5 40 5 50 5
5 10 15 20 25 30 35 40 45 50 55
7 8 9 70 80 90 700 800 900 7000 8000 9000
7 8 9 70 80 90 700 800 900 7000 8000 9000
42
42

ความท้าทายค่อนข้างเก่า แต่ก) อินพุตสามารถว่างได้หรือไม่ b) อินพุตสามารถมีได้เพียงหนึ่งหมายเลขเท่านั้นหรือไม่?
Erik the Outgolfer

@EriktheOutgolfer ฉันจะไปต่อและบอกว่าจะมี≥1ตัวเลขในอินพุต
Doorknob

คำตอบ:


7

เยลลี่ขนาด 7 ไบต์

DUṛ"\UḌ

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมดตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

DUṛ"\UḌ  Main link. Input: A (list of integers)

D        Convert each integer to a list of its base 10 digits.
 U       Reverse each digit list.
    \    Do a cumulative reduce, applying the dyadic link to the left:
   "       For each pair of corresponding digits:
  ṛ          Select the right one.
           Vectorization leaves digits that do not have a counterpart untouched.
     U   Reverse the resulting digit arrays.
      Ḍ  Convert from base 10 to integer.

5

Javascript, 45 42 ไบต์

3 ไบต์ปิดขอบคุณ@Neil

a=>a.map(x=>z=z.slice(0,-x.length)+x,z='')

ฟังก์ชั่นด้านบนคาดว่าอาร์เรย์ของสตริง


1
บันทึก 4 ไบต์โดยใช้z=z.slice(0,-x.length)+x,z=''(หรือชื่อตัวแปรที่คุณเลือก)
Neil

@Neil ทำได้ดีนี่! ฉันรู้ว่าควรมีวิธีการทำเช่นนั้น
นำออก

(ขออภัยสำหรับ miscounting ประหยัด.) นอกจากนี้ยังมีรุ่นสตริงคือไม่จำเป็นเป็นปรากฎว่าs=>s.split` `.map(คือ 2 ไบต์ (ฉันสองตรวจสอบในครั้งนี้) s=>s.replace(/\d+/g,สั้นกว่า
Neil

@Neil จุดที่ถูกต้อง ฉันเพิ่งปล่อยให้มันอยู่ที่นั่นเพราะเป็นเป้าหมายแรกของฉันเมื่อตอบ ... แต่คุณถูกต้อง
ลบ


0

Gema, 35 ตัวอักษร

<D>=@set{p;@fill-right{${p;};$0}}$p

อินพุต: สตริงที่มีตัวเลขคั่นด้วยอะไรก็ได้เอาต์พุตสตริง

วิ่งตัวอย่าง:

bash-4.3$ gema '<D>=@set{p;@fill-right{${p;};$0}}$p' <<< '123 45 6 7 89 200'
123 145 146 147 189 200

0

Ruby, 39 ตัวอักษร

->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}

อินพุต: อาร์เรย์ของสตริงเอาต์พุต: อาร์เรย์ของสตริง

วิ่งตัวอย่าง:

2.1.5 :001 > ->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}[%w{123 45 6 7 89 200}]
 => ["123", "145", "146", "147", "189", "200"] 

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