Multiplicar subcadenas

11

Escriba un programa que tome dos enteros como entrada; el primero puede ser cualquier número entero y el segundo es menor o igual que el número de dígitos en el primer número. Deje que estos números sean ay brespectivamente.

El programa hará lo siguiente

  • Concatene un número mínimo de 1s al final de amodo que el número de dígitos asea ​​divisible por b.
  • Dividir a lo alargo de cada bdígito.
  • Multiplique los dígitos en cada sección juntos.
  • Concatene los productos juntos (si uno de los números es cero, entonces concatene 0).
  • Repita este proceso hasta que bse forme un número con estrictamente menos de dígitos. Imprima esto como la salida, así como también se repite el número del proceso. Las unidades no son necesarias, pero sí alguna forma de separación entre el número final y el número de iteraciones.

En los siguientes casos de prueba, los pasos individuales se muestran con el propósito de comprender. No es necesario que su programa muestre los pasos.

Caso de prueba 1

1883915502469, 3

Pasos

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

Salida de muestra :0, 4

Caso de prueba 2

792624998126442, 4

Pasos

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

Salida de muestra :06, 4


El programa debe devolver un error (o simplemente no imprimir nada) si b>len(a). Además, bno puede ser igual a 1 o el programa dará como resultado un bucle infinito.


Este es el código de golf, por lo que se aplican reglas estándar. El código más corto en bytes gana.

Arcturus
fuente
¿Tiene que ser un programa completo o es una función suficiente?
Ypnypn
@Ypnypn Un programa completo.
Arcturus
Entonces, ¿los ceros iniciales cuentan para la longitud de ay también se incluyen en la salida?
mbomb007
@ mbomb007 Sí, pero solo en el número inicial. La cadena de ceros se acortaría a ceros simples en la concatenación de productos.
Arcturus
@ypnypn deberías decir eso explícitamente en la pregunta. Las "reglas estándar" de la etiqueta wiki dicen "los siguientes valores predeterminados ... Las respuestas pueden ser programas completos o funciones (o equivalentes)".
Joshua Taylor

Respuestas:

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

Pyth, 32 bytes

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

Demostración

Toma entrada en dos líneas, aseguido de b. Da salida en dos líneas, operaciones seguidas de resultado.

Almohadilla: +z*\1%_lzQ

Picar: c ... Q

Convertir a lista de entradas: sMM

Tomar productos: *M

Convertir de nuevo a str: jk

Asignar de nuevo: =z

Verifique la terminación: <l ... Q

Imprimir iteraciones tomadas: f ... )

Resultado de impresión: z

Verificación inicial de si imprimir algo en absoluto: IglzQ

isaacg
fuente