Teilzeichenfolgen multiplizieren

11

Schreiben Sie ein Programm, das zwei Ganzzahlen als Eingabe verwendet. Die erste kann eine beliebige Ganzzahl sein und die zweite ist kleiner oder gleich der Anzahl der Stellen in der ersten Zahl. Lassen Sie diese Zahlen sein aund bjeweils.

Das Programm führt folgende Schritte aus

  • Verketten Sie eine minimale Anzahl von 1s bis zum Ende, adamit die Anzahl der Stellen in adurch teilbar ist b.
  • Split aentlang jeder bZiffer.
  • Multiplizieren Sie die Ziffern in jedem Abschnitt.
  • Verketten Sie die Produkte miteinander (wenn eine der Zahlen Null ist, verketten Sie sie 0).
  • Wiederholen Sie diesen Vorgang, bis eine Zahl mit streng weniger als bZiffern gebildet wird. Drucken Sie dies als Ausgabe aus, und die Nummer des Vorgangs wird wiederholt. Einheiten sind nicht erforderlich, aber es gibt eine Form der Trennung zwischen der endgültigen Anzahl und der Anzahl der Iterationen.

In den folgenden Testfällen werden die einzelnen Schritte zum Zwecke des Verständnisses gezeigt. Es ist nicht erforderlich, dass Ihr Programm die Schritte anzeigt.

Testfall 1

1883915502469, 3

Schritte

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

Beispielausgabe :0, 4

Testfall 2

792624998126442, 4

Schritte

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

Beispielausgabe :06, 4


Das Programm muss einen Fehler zurückgeben (oder einfach nichts drucken), wenn b>len(a). Auch bkann gleich nicht 1 oder das Programm in einer Endlosschleife führen.


Dies ist Code Golf, daher gelten Standardregeln. Der kürzeste Code in Bytes gewinnt.

Arcturus
quelle
Muss es ein komplettes Programm sein oder reicht eine Funktion aus?
Ypnypn
@Ypnypn Ein komplettes Programm.
Arcturus
Führende Nullen zählen also zur Länge von aund sind auch in der Ausgabe enthalten?
mbomb007
@ mbomb007 Ja, aber nur in der Anfangsnummer. Die Kette von Nullen würde bei der Verkettung von Produkten auf einzelne Nullen verkürzt.
Arcturus
@ypnypn sollten Sie das explizit in der Frage sagen. Die "Standardregeln" aus dem Tag-Wiki besagen "die folgenden Standardeinstellungen ... Antworten können entweder vollständige Programme oder Funktionen (oder gleichwertige) sein."
Joshua Taylor

Antworten:

1

Perl 6, 116 Bytes

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
quelle
1

Pyth, 32 Bytes

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

Demonstration

Nimmt Eingaben in zwei Zeilen vor, agefolgt von b. Gibt die Ausgabe in zwei Zeilen aus, gefolgt vom Ergebnis.

Pad: +z*\1%_lzQ

Hacken: c ... Q

In Liste der Ints konvertieren: sMM

Nehmen Sie Produkte: *M

Zurück zu str konvertieren: jk

Zurück zuweisen: =z

Auf Kündigung prüfen: <l ... Q

Druckiterationen genommen: f ... )

Druckergebnis: z

Erste Überprüfung, ob überhaupt etwas gedruckt werden soll: IglzQ

isaacg
quelle