Множення підрядків


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 це слід сказати прямо у питанні. "Стандартні правила" з тегу wiki кажуть "наступні параметри за замовчуванням ... Відповіді можуть бути як повними програмами, так і функціями (або еквівалентними)".
Джошуа Тейлор

Відповіді:



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

Перетворити до списку ints: sMM

Візьміть продукти: *M

Перетворити назад до str: jk

Призначити назад: =z

Перевірка на припинення: <l ... Q

Роздруковані ітерації: f ... )

Результат друку: z

Початкова перевірка того, чи потрібно взагалі щось друкувати: IglzQ

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.