Multiplier les sous-chaînes

11

Écrivez un programme qui prend deux entiers en entrée; le premier peut être n'importe quel entier et le second est inférieur ou égal au nombre de chiffres du premier nombre. Que ces nombres soient aet brespectivement.

Le programme fera ce qui suit

  • Concaténez un nombre minimal de 1s à la fin de asorte que le nombre de chiffres dans asoit divisible par b.
  • Divisez le along de tous les bchiffres.
  • Multipliez les chiffres de chaque section ensemble.
  • Concaténer les produits ensemble (si l'un des nombres est zéro, concaténer 0).
  • Répétez ce processus jusqu'à ce qu'un nombre avec strictement moins de bchiffres soit formé. Imprimez ceci comme sortie, ainsi que le numéro du processus est répété. Les unités ne sont pas nécessaires, mais une certaine forme de séparation entre le nombre final et le nombre d'itérations l'est.

Dans les cas de test suivants, les étapes individuelles sont affichées à des fins de compréhension. Il n'est pas nécessaire que votre programme affiche les étapes.

Cas de test 1

1883915502469, 3

Pas

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

Exemple de sortie :0, 4

Cas de test 2

792624998126442, 4

Pas

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

Exemple de sortie :06, 4


Le programme doit renvoyer une erreur (ou simplement ne rien imprimer) si b>len(a). De plus, bne peut pas être égal à 1 ou le programme entraînera une boucle infinie.


C'est du golf de code, donc les règles standard s'appliquent. Le code le plus court en octets gagne.

Arcturus
la source
Doit-il s'agir d'un programme complet ou une fonction est-elle suffisante?
Ypnypn
@Ypnypn Un programme complet.
Arcturus
Les zéros non significatifs comptent donc pour la longueur de aet sont également inclus dans la sortie?
mbomb007
@ mbomb007 Oui, mais uniquement dans le numéro initial. La chaîne de zéros serait raccourcie en zéros simples dans l'enchaînement des produits.
Arcturus
@ypnypn vous devez le dire explicitement dans la question. Les "règles standard" du tag wiki disent "les valeurs par défaut suivantes ... Les réponses peuvent être soit des programmes complets soit des fonctions (ou équivalent)".
Joshua Taylor

Réponses:

1

Perl 6, 116 octets

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
la source
1

Pyth, 32 octets

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

Manifestation

Prend la saisie sur deux lignes, asuivie de b. Donne la sortie sur deux lignes, opérations suivies du résultat.

Tampon: +z*\1%_lzQ

Hacher: c ... Q

Convertir en liste d'ints: sMM

Prenez des produits: *M

Convertir en str: jk

Attribuer en retour: =z

Vérifier la résiliation: <l ... Q

Imprimer les itérations prises: f ... )

Résultat d'impression: z

Vérification initiale de l'impression de quelque chose: IglzQ

isaacg
la source