Alt dizeleri çarpma


11

İki tamsayıyı girdi olarak alan bir program yazın; birincisi herhangi bir tamsayı olabilir ve ikincisi ilk sayıdaki basamak sayısından küçük veya ona eşittir. Bu sayılar sırasıyla ave olsun b.

Program aşağıdakileri yapacaktır

  • Minimum sayıda 1s değerini sonuna akadar birleştirin , böylece içindeki basamak sayısı abölünebilir b.
  • aHer bbasamak boyunca bölün .
  • Her bölümdeki rakamları birlikte çarpın.
  • Ürünleri bir araya getirin (sayılardan biri sıfırsa birleştirin 0).
  • bRakamlardan kesinlikle daha az olan bir sayı oluşana kadar bu işlemi tekrarlayın . Bunu çıktı olarak yazdırın ve işlem sayısı tekrarlanır. Birimler gerekli değildir, ancak son sayı ile yineleme sayısı arasında bir çeşit ayrım gereklidir.

Aşağıdaki test durumlarında, münferit adımlar anlaşılması amacıyla gösterilmiştir. Programınızın adımları görüntülemesi gerekli değildir.

Test durumu 1

1883915502469, 3

adımlar

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

Örnek Çıktı :0, 4

Test durumu 2

792624998126442, 4

adımlar

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

Örnek Çıktı :06, 4


Program bir hata döndürmelidir (ya da herhangi bir şey yazdırmamalıdır) b>len(a). Ayrıca, b1'e eşit olamaz veya program sonsuz bir döngüye neden olur.


Bu kod golf, bu yüzden standart kurallar geçerlidir. Bayt cinsinden en kısa kod kazanır.


Tam bir program mı olmalı yoksa yeterli bir işlev mi?
Ypnypn

@Ypnypn Tam bir program.
Arcturus

Önde gelen sıfırlar uzunluğa doğru sayılır ave çıktıya dahil edilir mi?
mbomb007

@ mbomb007 Evet, ancak yalnızca ilk sayı olarak. Sıfırlar zinciri, ürünlerin bir araya getirilmesinde tekli sıfırlara kısaltılacaktır.
Arcturus

@ypnypn bunu açıkça soruda söylemelisiniz. Wiki etiketindeki "standart kurallar" şu varsayılanları söyler: Yanıtlar tam programlar veya işlevler (veya eşdeğeri) olabilir. "
Joshua Taylor

Yanıtlar:



1

Perl 6, 116 bayt

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 bayt

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

gösteri

İki satırdan girdi alır, aardından gelir b. İki satırda çıktı verir, işlemler ve ardından sonuç.

Pad: +z*\1%_lzQ

Pirzola: c ... Q

Ints listesine dönüştür: sMM

Ürünleri al: *M

Geri dönüşüme dön: jk

Geri ata: =z

Sonlandırmayı kontrol edin: <l ... Q

Alınan iterasyonları yazdırın: f ... )

Sonuçları yazdır: z

Hiçbir şey yazdırıp yazdırmayacağınıza ilişkin ilk kontrol: IglzQ

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.