การคูณสตริงย่อย


11

เขียนโปรแกรมที่รับจำนวนเต็มสองตัวเป็นอินพุต ที่แรกสามารถเป็นจำนวนเต็มใด ๆ และที่สองน้อยกว่าหรือเท่ากับจำนวนหลักในจำนวนแรก ให้ตัวเลขเหล่านี้จะเป็นaและbตามลำดับ

โปรแกรมจะทำสิ่งต่อไปนี้

  • Concatenate จำนวนน้อยที่สุดของ1s ที่ส่วนท้ายของaดังนั้นจำนวนของตัวเลขในหารด้วยab
  • แยกaตามbตัวเลขทุกตัว
  • คูณตัวเลขในแต่ละส่วนเข้าด้วยกัน
  • ต่อผลิตภัณฑ์เข้าด้วยกัน (หากตัวเลขใดตัวเลขหนึ่งเป็นศูนย์ให้ต่อเข้าด้วยกัน0)
  • ทำซ้ำขั้นตอนนี้จนกว่าจะมีหมายเลขที่มีตัวเลขน้อยกว่าbเลขเคร่งครัด พิมพ์สิ่งนี้เป็นผลลัพธ์รวมทั้งจำนวนกระบวนการซ้ำ หน่วยไม่จำเป็น แต่รูปแบบการแยกบางอย่างระหว่างหมายเลขสุดท้ายและจำนวนการวนซ้ำคือ

ในกรณีทดสอบต่อไปนี้แสดงแต่ละขั้นตอนเพื่อวัตถุประสงค์ในการทำความเข้าใจ โปรแกรมของคุณไม่จำเป็นต้องแสดงขั้นตอน

กรณีทดสอบ 1

1883915502469, 3

ขั้นตอน

1883915502469          //Iteration 1
188391550246911
188 391 550 246 911
64 27 0 48 9
64270489               //Iteration 2
642704891
642 704 891
48 0 72
48072                  //Iteration 3
480721
480 721
0 14
014                    //Iteration 4
0

ตัวอย่างผลลัพธ์ :0, 4

กรณีทดสอบ 2

792624998126442, 4

ขั้นตอน

792624998126442        //Iteration 1
7926249981264421
7926 2499 8126 4421
756 648 96 32
7566489632             //Iteration 2
756648963211
7566 4896 3211
1260 1728 6
126017286              //Iteration 3
126017286111
1260 1728 6111
0 112 6
01126                  //Iteration 4
01126111
0112 6111
0 6
06

ตัวอย่างผลลัพธ์ :06, 4


โปรแกรมจะต้องกลับข้อผิดพลาด (หรือเพียงแค่ไม่ได้พิมพ์อะไร) b>len(a)ถ้า นอกจากนี้bไม่สามารถเท่ากับ 1 มิฉะนั้นโปรแกรมจะส่งผลให้เกิดการวนซ้ำไม่สิ้นสุด


นี่คือรหัสกอล์ฟดังนั้นจึงใช้กฎมาตรฐาน รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


มันจำเป็นต้องเป็นโปรแกรมที่สมบูรณ์หรือฟังก์ชั่นเพียงพอหรือไม่?
Ypnypn

@Ypnypn โปรแกรมที่สมบูรณ์
Arcturus

ดังนั้นศูนย์นำหน้านับรวมกับความยาวของaและรวมอยู่ในเอาท์พุท?
mbomb007

@ mbomb007 ใช่ แต่เป็นเพียงหมายเลขเริ่มต้นเท่านั้น ห่วงโซ่ของเลขศูนย์จะสั้นลงเป็นศูนย์เดี่ยวในการต่อเรียงผลิตภัณฑ์
Arcturus

@ ypnypn คุณควรพูดอย่างชัดเจนในคำถาม "กฎมาตรฐาน" จากแท็ก wiki พูดว่า "ค่าเริ่มต้นต่อไปนี้ ... คำตอบอาจเป็นโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ (หรือเทียบเท่า)"
Joshua Taylor

คำตอบ:



1

Perl 6, 116 ไบต์

my ($a,$b)=@*ARGS;for 0..* {if $b>$a.chars {$_&&say "$a,$_";last};$a=map({[*] @_},($a~1 x$b-1).comb.rotor($b)).join}
my ($a,$b)=@*ARGS;
for 0..* {
  if $b>$a.chars {$_&&say "$a,$_";last}; # you need a 「;」 if you remove the newline
  $a=map(
    {[*] @_},
    ($a~1 x$b-1).comb.rotor($b)
  ).join
}

1

Pyth, 32 ไบต์

IglzQf<l=zjk*MsMMc+z*\1%_lzQQQ)z

สาธิต

นำข้อมูลเกี่ยวกับเส้นสองเส้นตามด้วยa bให้เอาต์พุตบนสองบรรทัดการดำเนินการตามด้วยผลลัพธ์

Pad: +z*\1%_lzQ

สับ: c ... Q

แปลงเป็นรายการของ ints: sMM

ใช้ผลิตภัณฑ์: *M

แปลงกลับเป็น STR: jk

มอบหมายกลับ: =z

ตรวจสอบการเลิกจ้าง: <l ... Q

พิมพ์การทำซ้ำ: f ... )

ผลการพิมพ์: z

ตรวจสอบเบื้องต้นว่าจะพิมพ์อะไรหรือไม่: IglzQ

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