Sottostringhe moltiplicanti


11

Scrivi un programma che accetta due numeri interi come input; il primo può essere qualsiasi numero intero e il secondo è inferiore o uguale al numero di cifre nel primo numero. Lascia che questi numeri siano ae brispettivamente.

Il programma farà quanto segue

  • Concatena un numero minimo di 1s fino alla fine di acosì il numero di cifre in aè divisibile per b.
  • Dividi alungo ogni bcifra.
  • Moltiplica le cifre in ogni sezione insieme.
  • Concatenare i prodotti insieme (se uno dei numeri è zero, quindi concatenare 0).
  • Ripetere questo processo fino a quando non bviene formato un numero con meno di cifre. Stampa questo come l'output, così come il numero del processo viene ripetuto. Le unità non sono necessarie, ma esiste una qualche forma di separazione tra il numero finale e il numero di iterazioni.

Nei seguenti casi di test, i singoli passaggi vengono mostrati a scopo di comprensione. Non è necessario che il programma visualizzi i passaggi.

Caso di prova 1

1883915502469, 3

passi

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

Uscita campione :0, 4

Caso di prova 2

792624998126442, 4

passi

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

Uscita campione :06, 4


Il programma deve restituire un errore (o semplicemente non stampare nulla) se b>len(a). Inoltre, bnon può essere uguale a 1 o il programma si tradurrà in un ciclo infinito.


Questo è il golf del codice, quindi si applicano le regole standard. Vince il codice più breve in byte.


Deve essere un programma completo o è una funzione sufficiente?
Ypnypn,

@Ypnypn Un programma completo.
Arcturus,

Quindi gli zeri iniziali contano per la lunghezza ae sono inclusi anche nell'output?
mbomb007,

@ mbomb007 Sì, ma solo nel numero iniziale. La catena di zeri verrebbe abbreviata in zeri singoli nella concatenazione dei prodotti.
Arturo

@ypnypn dovresti dirlo esplicitamente nella domanda. Le "regole standard" dal tag wiki dicono "i seguenti valori predefiniti ... Le risposte possono essere programmi o funzioni completi (o equivalenti)".
Joshua Taylor,

Risposte:



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
}

1

Pyth, 32 byte

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

Dimostrazione

Accetta input su due righe, aseguito da b. Fornisce output su due righe, operazioni seguite dal risultato.

pad: +z*\1%_lzQ

chop: c ... Q

Converti in elenco di ints: sMM

Prendi i prodotti: *M

Converti indietro in str: jk

Riassegna: =z

Verifica la risoluzione: <l ... Q

Stampa iterazioni prese: f ... )

Stampa il risultato: z

Verifica iniziale se stampare qualcosa: IglzQ

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.