Вывести частичные продукты


17

При длинном умножении , после умножения чисел, вы получаете частичные продукты, в этом вызове вы получите эти частичные продукты.

Поскольку длинное умножение является длинным, чтобы компенсировать ваш код, оно должно быть максимально коротким.

Примеры

34, 53
102, 1700

48, 38 
384, 1440

361, 674
1444, 25270, 216600

0, 0
0

1, 8
8

Характеристики

  • Ввод / вывод может быть в любом приемлемом формате, таком как массив, разделенная запятыми строка (или любой другой разделитель, который не является цифрой), список, аргументы функции и т. Д.
  • Частичные продукты должны быть в порядке возрастания.
  • Если частичный продукт есть 0, вы можете выбрать, хотите ли вы выводить его или нет.

Это поэтому выигрывает самый короткий код в байтах!


Я предполагаю, что числа могут быть строками, верно?
Mama Fun Roll

Этот 0,0 тестовый пример усложняет задачу.
xnor

Каков ожидаемый результат для 12, 102? Большинство ответов, кажется, возвращаются 24, 0, 1200.
Деннис

@ Денис 24, 0, 1200в порядке. Я
укажу

Ответы:


4

Желе, 10 байт

DU×µLR’⁵*×

Попробуйте онлайн!

Как это устроено

DU×µLR’⁵*×  Left argument: multiplier -- Right argument: multiplicant

D           Convert the multiplier to base 10 (array of digits).
 U          Reverse the array.
  ×         Multiply each digit by the multiplicant.
   µ        Begin a new, monadic chain. Argument: A(array of products)
    L       Get the length of A.
     R      Turn length l into [1, ..., l].
      ’     Decrement to yield [0, ..., l-1].
       ⁵*   Compute 10**i for each i in that range.
         ×  Hook; multiply the powers of ten by the corresponding elements of A.

3
Я предполагаю, что название этого языка происходит от того факта, что он заставляет всех чувствовать себя желе.
геокавель

7

Pyth, 12 байт

.e**Qsb^Tk_w

Тестирование

Вводит новую строку отдельно, например

361
674

Объяснение:

.e**Qsb^Tk_w
                Implicit: Q = eval(input()),T = 10
           w    Input the second number as a string.
          _     Reverse it.
.e              Enumerated map, where b is the character and k is the index.
     sb         Convert the character to an int.
   *Q           Multiply by Q.
  *    ^Tk      Multiply by T ^ k. (10 ^ index)

4

JavaScript (ES7), 48 байт

(a,b)=>[...b+""].reverse().map((d,i)=>10**i*a*d)

ES6 (56 байт)

(a,b)=>[...b+""].reverse().map((d,i)=>a*d+"0".repeat(i))

объяснение

Возвращает массив частичных произведений в виде чисел.

(a,b)=>
  [...b+""]    // convert the multiplier to an array of digits
  .reverse()   // reverse the digits of the multiplier so the output is in the right order
  .map((d,i)=> // for each digit d of the multiplier
    10**i      // get the power of ten of the digit
      *a*d     // raise the product of the digit to it
  )

Тестовое задание

Тест использует Math.powвместо того, **чтобы заставить его работать в стандартных браузерах.



3

APL, 21 байт

{⍺×x×10*1-⍨⍳≢x←⊖⍎¨⍕⍵}

Это двоичная функция, которая принимает целые числа слева и справа и возвращает массив. Чтобы вызвать его, назначьте его переменной.

Объяснение:

             x←⊖⍎¨⍕⍵} ⍝ Define x to be the reversed digits of the right input
     10*1-⍨⍳≢         ⍝ Generate all 10^(1-i) for i from 1 to the number of digits
{⍺×x×                 ⍝ Multiply the right input by the digits and the powers of 10

1
⍎¨⍕довольно умный
Деннис

2

05AB1E , 15 байтов

Код:

VDgUSXFTNmY**=\

Объяснение:

VDgUSXFTNmY**=\

V                 # Assign the input to Y
 D                # Duplicate of input, because the stack is empty
  g               # Pushes the length of the last item
   U              # Assign the length to X
    S             # Split the last item
     X            # Pushes X (length of the last item)
      F           # Creates a for loop: for N in range(0, X)
       TNm        # Pushes 10 ^ N
          Y       # Pushes Y (first input)
           *      # Multiplies the last two items
            *     # Multiplies the last two items
             =    # Output the last item
              \   # Discard the last item

2

Pyth, 26 байт

DcGHKjHTFNJlK*G*@Kt-JN^TN

Это определяет функцию так c, что она принимает 2аргументы, и функция печатает частичные продукты.

DcGHKjHTFNJlK*G*@Kt-JN^TN
DCGH                      Define function c(G, H)
    KjHT                  Set K to the list of digits converting H to base 10
        FNJlK             Set J to the length of K and loop with variable N
                          (Implicit: print)
             *G*@Kt-JN    Calculates the partial product
                      ^TN Raising it to the appropriate power of 10

1

MATL , 18 байт

ij48-tn:1-P10w^**P

Компилятор (5.1.0) работает в Matlab и Octave.

Каждый номер вводится в отдельной строке.

пример

>> matl ij48-tn:1-P10w^**P
> 361
> 674
1444  25270 216600

объяснение

i           % input first number (say 361)
j           % input second number, interpreted as a string (say '674')
48-         % subtract '0' to obtain vector of figures (gives [6 7 4])
tn:1-P      % vector [n-1, ... 1, 0] where n is the number of figures (gives [2 1 0])
10w^        % 10 raised to that, element-wise (gives [100 10 1])
*           % multiply, element-wise (gives [600 70 4])
*           % multiply (gives 361*[600 70 4], or [216600 25270 1444])
P           % flip vector ([1444 25270 216600]). Implicitly display

1

Haskell, 60 57 54 байта

g x=zipWith(\b->(x*10^b*).read.pure)[0..].reverse.show

На 5 байт меньше .show ), если я могу взять второе число в виде строки.

Пример использования: g 361 674->[1444,25270,216600] .

Умножьте каждую цифру на реверсе yс xи масштабируйте 10^iгдеi = 0,1,2,... .

Редактировать: Спасибо @Mauris за 3 байта!


Вы даже можете сделать (\b->(x*10^b*).read.pure).
Линн

@ Маурис: Хорошо. Большое спасибо!
Ними

1

Юлия, 50 49 байтов

f(a,b)=[a*d*10^~-i for(i,d)=enumerate(digits(b))]

Это функция, которая принимает два целых числа и возвращает массив целых чисел.

digitsФункция возвращает массив цифр в целочисленном входном в в обратном порядке. Получим индекс, значение пары с помощьюenumerate и вычисляем частичные произведения как первый ввод, умноженный на число раз 10, возведенное в степень индекса цифры - 1.

Спас Байт благодаря Денису!



1

CJam, 19 17 байт

q~W%eef{~~A@#**}p

Принимает ввод, причем первый элемент является целым числом, а второй - строкой (например, 34 "53"). Предложения приветствуются, так как я уверен, что они могут быть короче. Спасибо Деннису за сохранение двух байтов.

Попробуйте онлайн.

объяснение

q~    e# Get input and evaluate it, x and "y"
W%    e# Reverse y so it will be properly sorted
ee    e# Enumerate through y with each character and its index
f{    e# For each digit in y...
  ~~  e# Convert the digit to an integer on the stack
  A@# e# Take 10 to the power of y's index
  **  e# Multiply all three together to get the final result
}
p     e# Print the array

1
~~A@#**сохраняет пару байтов.
Деннис

1

Haskell, 37 байт

a%0=[]
a%b=b`mod`10*a:(a*10)%div b 10

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


0

𝔼𝕊𝕄𝕚𝕟, 11 символов / 23 байта (неконкурентные)

ᴙíⓢⓜî*$*Ⅹⁿ_

Try it here (Firefox only).

Нашел ошибку при кодировании решения этой проблемы ...

объяснение

          // Implicit: î = input 1, í = input 2
ᴙíⓢ      // reverse í and split it into an array
ⓜî*$*Ⅹⁿ_ // multiply î by each individual digit in í and put in previous array
          // implicit output

0

Japt , 28 байт

I=[]Vs w m@IpApY+1 /A*U*X};I

Объяснение:

I=[]Vs w m@IpApY+1 /A*U*X};I
I=[]                         //that's simple, init an array I
    Vs                       //take the second input and convert to string
       w                     //reverse it and...
         m@              }   //...map through the chars; X is a char, Y is counter
           Ip............    //push the following value into I...
             ApY+1 /A*U*X    //10^(Y+1)/10*U*X, U is the first input
                           I //output the resulting array

Из-за ошибки в интерпретаторе, нужно использовать ApY+1 /10вместо ApY, потому что Ap0(то есть 10 ^ 0) дает 100. Я думаю, это по причине разрешить быстрый квадрат с Ap, но 0не означает «без аргументов». Плз исправить, эт.
Никаэль

0

Python 2, 42 байта

f=lambda a,b:b*[0]and[b%10*a]+f(a*10,b/10)

Нет строковых, просто арифметика. Рекурсивно добавляет наименьший частичный продукт к остальным, где последняя цифра bусекается и применяется множитель 10.

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