Mnożenie podciągów

11

Napisz program, który przyjmuje dwie liczby całkowite jako dane wejściowe; pierwsza może być dowolną liczbą całkowitą, a druga jest mniejsza lub równa liczbie cyfr w pierwszej liczbie. Niech te numery się ai bodpowiednio.

Program wykona następujące czynności

  • Połącz minimalną liczbę 1s do końca, aaby liczba cyfr w abyła podzielna przez b.
  • Podziel awzdłuż każdej bcyfry.
  • Pomnóż cyfry w każdej sekcji razem.
  • Połącz produkty razem (jeśli jedna z liczb jest równa zero, następnie połącz 0).
  • Powtarzaj ten proces, aż butworzy się liczba z dokładnie mniejszą liczbą cyfr. Wydrukuj to jako wynik, a także numer procesu jest powtarzany. Jednostki nie są konieczne, ale istnieje pewna forma separacji między liczbą końcową a liczbą iteracji.

W poniższych przypadkach testowych poszczególne kroki są pokazane w celu zrozumienia. Twój program nie musi wyświetlać kroków.

Przypadek testowy 1

1883915502469, 3

Kroki

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

Przykładowe dane wyjściowe :0, 4

Przypadek testowy 2

792624998126442, 4

Kroki

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

Przykładowe dane wyjściowe :06, 4


Program musi zwrócić błąd (lub po prostu nic nie drukować), jeśli b>len(a). Ponadto, bnie może być równy 1, w przeciwnym razie program spowoduje nieskończoną pętlę.


To jest kod golfowy, więc obowiązują standardowe zasady. Najkrótszy kod w bajtach wygrywa.

Arktur
źródło
Czy musi to być kompletny program, czy wystarczająca funkcja?
Ypnypn,
@Ypnypn Kompletny program.
Arcturus,
Czy więc zera wiodące liczą się do długości ai są również uwzględniane w danych wyjściowych?
mbomb007
@ mbomb007 Tak, ale tylko w początkowym numerze. Łańcuch zer zostałby skrócony do pojedynczych zer w konkatenacji produktów.
Arcturus,
@ypnypn powinieneś powiedzieć to wprost w pytaniu. „Standardowe reguły” z tagu wiki mówią „następujące wartości domyślne ... Odpowiedzi mogą być pełnymi programami lub funkcjami (lub równoważnymi)”.
Joshua Taylor,

Odpowiedzi:

1

Perl 6, 116 bajtów

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
źródło
1

Pyth, 32 bajty

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

Demonstracja

Pobiera dane wejściowe w dwóch wierszach, aa następnie b. Daje dane wyjściowe w dwóch wierszach, po których następuje operacja.

Podkładka: +z*\1%_lzQ

Posiekać: c ... Q

Konwertuj na listę ints: sMM

Weź produkty: *M

Konwertuj z powrotem na str: jk

Przypisz z powrotem: =z

Sprawdź zakończenie: <l ... Q

Wykonano iteracje wydruku: f ... )

Wynik wydruku: z

Wstępne sprawdzenie, czy w ogóle coś wydrukować: IglzQ

isaacg
źródło