Multiplicando substrings

11

Escreva um programa que use dois números inteiros como entrada; o primeiro pode ser qualquer número inteiro e o segundo é menor ou igual ao número de dígitos no primeiro número. Deixe esses números serem ae brespectivamente.

O programa fará o seguinte

  • Concatene um número mínimo de 1s até o final de amodo que o número de dígitos em aseja divisível por b.
  • Divida aao longo de todos os bdígitos.
  • Multiplique os dígitos em cada seção juntos.
  • Concatene os produtos juntos (se um dos números for zero, concatene 0).
  • Repita esse processo até que um número estritamente menor que bdígitos seja formado. Imprima isso como saída, assim como o número do processo é repetido. As unidades não são necessárias, mas é alguma forma de separação entre o número final e o número de iterações.

Nos seguintes casos de teste, as etapas individuais são mostradas com o objetivo de entender. Não é necessário que o seu programa exiba as etapas.

Caso de teste 1

1883915502469, 3

Passos

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

Saída de amostra :0, 4

Caso de teste 2

792624998126442, 4

Passos

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

Saída de amostra :06, 4


O programa deve retornar um erro (ou simplesmente não imprimir nada) se b>len(a). Além disso, bnão pode ser igual a 1 ou o programa resultará em um loop infinito.


Isso é código de golfe, portanto, regras padrão se aplicam. O código mais curto em bytes vence.

Arcturus
fonte
Precisa ser um programa completo ou é uma função suficiente?
Ypnypn
@Ypnypn Um programa completo.
Arcturus
Assim, os zeros à esquerda contam para o comprimento ae também são incluídos na saída?
mbomb007
@ mbomb007 Sim, mas apenas no número inicial. A cadeia de zeros seria reduzida para zeros únicos na concatenação de produtos.
Arcturus
@ypnypn, você deve dizer isso explicitamente na pergunta. As "regras padrão" da tag wiki dizem "os seguintes padrões ... As respostas podem ser programas ou funções completos (ou equivalente)."
Joshua Taylor #

Respostas:

1

CJam, 42 bytes

q~:N;Ab{_N(>}{_N/)N1e]a+::*s:~}w])S@,_])g*

Teste aqui.

Martin Ender
fonte
1

Perl 6, 116 bytes

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
fonte
1

Pitão, 32 bytes

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

Demonstração

Recebe entrada em duas linhas, aseguido por b. Dá saída em duas linhas, operações seguidas de resultado.

Almofada: +z*\1%_lzQ

Picar: c ... Q

Converta na lista de entradas: sMM

Tome produtos: *M

Converta de volta para str: jk

Atribuir de volta: =z

Verifique a rescisão: <l ... Q

Iterações de impressão realizadas: f ... )

Resultado da impressão: z

Verificação inicial da impressão ou não de qualquer coisa: IglzQ

isaacg
fonte