Mengalikan substring

11

Tulis program yang menggunakan dua bilangan bulat sebagai input; yang pertama bisa berupa bilangan bulat apa saja dan yang kedua kurang dari atau sama dengan jumlah digit pada angka pertama. Biarkan angka-angka ini menjadi adan bmasing - masing.

Program akan melakukan hal berikut

  • Gabungkan jumlah minimal 1s hingga akhir asehingga jumlah digit adapat dibagi dengan b.
  • Membagi asetiap bdigit.
  • Lipat gandakan digit di setiap bagian bersamaan.
  • Gabungkan produk bersama-sama (jika salah satu angka adalah nol, maka gabungkan 0).
  • Ulangi proses ini sampai angka dengan angka yang benar-benar kurang dari bangka terbentuk. Cetak ini sebagai output, serta jumlah proses diulang. Unit tidak diperlukan, tetapi beberapa bentuk pemisahan antara jumlah akhir dan jumlah iterasi adalah.

Dalam kasus uji berikut, langkah-langkah individu ditampilkan untuk tujuan pemahaman. Program Anda tidak perlu menampilkan langkah-langkahnya.

Test case 1

1883915502469, 3

Langkah

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

Output sampel :0, 4

Uji kasus 2

792624998126442, 4

Langkah

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

Output sampel :06, 4


Program harus mengembalikan kesalahan (atau tidak mencetak apa pun) jika b>len(a). Juga, btidak dapat sama dengan 1 atau program akan menghasilkan loop tak terbatas.


Ini kode golf, jadi aturan standar berlaku. Kode terpendek dalam byte menang.

Arcturus
sumber
Apakah perlu program yang lengkap, atau apakah fungsinya cukup?
Ypnypn
@Ypnypn Program lengkap.
Arcturus 3-15
Jadi angka nol di depan mengarah pada panjang adan juga termasuk dalam output?
mbomb007
@ mbomb007 Ya, tetapi hanya di nomor awal. Rantai nol akan disingkat menjadi nol tunggal dalam rangkaian produk.
Arcturus
@ypnypn Anda harus mengatakan itu secara eksplisit dalam pertanyaan. "Aturan standar" dari tag wiki mengatakan "default berikut ... Jawaban dapat berupa program atau fungsi lengkap (atau setara)."
Joshua Taylor

Jawaban:

1

CJam, 42 byte

q~:N;Ab{_N(>}{_N/)N1e]a+::*s:~}w])S@,_])g*

Uji di sini.

Martin Ender
sumber
1

Perl 6, 116 byte

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
}
Brad Gilbert b2gills
sumber
1

Pyth, 32 byte

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

Demonstrasi

Mengambil input pada dua baris, adiikuti oleh b. Memberikan output pada dua baris, operasi diikuti oleh hasil.

Bantalan: +z*\1%_lzQ

Memotong: c ... Q

Konversikan ke daftar int: sMM

Ambil produk: *M

Konversi kembali ke str: jk

Tetapkan kembali: =z

Periksa untuk penghentian: <l ... Q

Iterasi cetak diambil: f ... )

Hasil cetak: z

Pemeriksaan awal apakah akan mencetak sesuatu: IglzQ

isaacg
sumber