Умножение подстрок


11

Напишите программу, которая принимает два целых числа в качестве входных данных; первое может быть любым целым числом, а второе меньше или равно количеству цифр в первом числе. Пусть эти числа будут aи bсоответственно.

Программа сделает следующее

  • Объедините минимальное число 1s до конца, aчтобы число цифр в aделилось на b.
  • Сплит aпо каждой bцифре.
  • Умножьте цифры в каждом разделе вместе.
  • Объедините продукты вместе (если одно из чисел равно нулю, то объедините 0).
  • Повторяйте этот процесс, пока не будет сформировано число со строго меньшим количеством bцифр. Выведите это как вывод, а также номер процесса, который повторяется. Единицы не обязательны, но существует некоторая форма разделения между конечным числом и числом итераций.

В следующих тестовых примерах отдельные шаги показаны с целью понимания. Ваша программа не обязана отображать шаги.

Тестовый пример 1

1883915502469, 3

меры

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

Пример вывода :0, 4

Контрольный пример 2

792624998126442, 4

меры

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

Пример вывода :06, 4


Программа должна вернуть ошибку (или просто ничего не печатать), если b>len(a). Кроме того, bне может быть равно 1 или программа приведет к бесконечному циклу.


Это код гольф, поэтому применяются стандартные правила. Самый короткий код в байтах побеждает.


Это должна быть полная программа или достаточно функции?
Ypnypn

@Ypnypn Полная программа.
Арктур

Значит лидирующие нули учитываются по длине aи также включены в вывод?
mbomb007

@ mbomb007 Да, но только в начальном номере. Цепочка нулей будет сокращена до единичных нулей при объединении продуктов.
Арктур

@ypnypn Вы должны сказать это прямо в вопросе. «Стандартные правила» из тега вики говорят «следующие значения по умолчанию ... Ответы могут быть либо полными программами, либо функциями (или эквивалентными)».
Джошуа Тейлор

Ответы:



1

Perl 6, 116 байт

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 байта

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

демонстрация

Принимает ввод в две строки, aпосле чего b. Дает вывод в две строки, за операциями следует результат.

Pad: +z*\1%_lzQ

Чоп: c ... Q

Преобразовать в список целых: sMM

Взять продукты: *M

Преобразовать обратно в ул: jk

Назначить обратно: =z

Проверка на прекращение: <l ... Q

Принять итерации: f ... )

Результат печати: z

Первоначальная проверка того, печатать ли вообще что-либо: IglzQ

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.