Keluarkan Produk Parsial

17

Dalam penggandaan yang panjang , setelah mengalikan angka, Anda dibiarkan dengan produk parsial, dalam tantangan ini Anda akan menampilkan produk parsial tersebut.

Karena multiplikasi yang panjang itu panjang, untuk mengkompensasi kode Anda harus sesingkat mungkin.

Contohnya

34, 53
102, 1700

48, 38 
384, 1440

361, 674
1444, 25270, 216600

0, 0
0

1, 8
8

Spesifikasi

  • Input / Output mungkin dalam format apa pun yang wajar seperti array, string yang dipisahkan koma (atau pembatas lainnya yang bukan digit), daftar, argumen fungsi, dll.
  • Produk parsial harus dalam urutan yang meningkat.
  • Jika sebagian produk adalah 0, Anda dapat memilih apakah Anda ingin output atau tidak.

Ini adalah sehingga kode terpendek dalam byte menang!

Downgoat
sumber
Saya berasumsi bahwa angka-angka dapat berupa string, bukan?
Mama Fun Roll
0,0 test case itu membuatnya jauh lebih sulit.
xnor
Untuk apa hasil yang diharapkan 12, 102? Sebagian besar jawaban sepertinya kembali 24, 0, 1200.
Dennis
@ Dennis 24, 0, 1200baik-baik saja. Saya akan tentukan dalam posting
Downgoat

Jawaban:

4

Jelly, 10 byte

DU×µLR’⁵*×

Cobalah online!

Bagaimana itu bekerja

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.
Dennis
sumber
3
Saya menduga nama bahasa ini berasal dari fakta bahwa itu membuat semua orang merasa jeli.
geokavel
7

Pyth, 12 byte

.e**Qsb^Tk_w

Suite uji

Membagi input baris baru, mis

361
674

Penjelasan:

.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)
isaacg
sumber
4

JavaScript (ES7), 48 byte

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

ES6 (56 byte)

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

Penjelasan

Mengembalikan array produk parsial sebagai angka.

(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
  )

Uji

Tes menggunakan Math.powalih-alih **membuatnya berfungsi di browser standar.

pengguna81655
sumber
3

Lua, 72 68 Bytes

b=arg[2]:reverse()for i=1,#b do print(arg[1]*b:sub(i,i)*10^(i-1))end
Nikolai97
sumber
3

APL, 21 byte

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

Ini adalah fungsi diad yang menerima bilangan bulat di kiri dan kanan dan mengembalikan array. Untuk menyebutnya, tetapkan ke variabel.

Penjelasan:

             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
Alex A.
sumber
1
⍎¨⍕cukup pintar.
Dennis
2

05AB1E , 15 byte

Kode:

VDgUSXFTNmY**=\

Penjelasan:

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
Adnan
sumber
2

Pyth, 26 byte

DcGHKjHTFNJlK*G*@Kt-JN^TN

Ini mendefinisikan fungsi csedemikian rupa sehingga menerima 2argumen, dan fungsi tersebut mencetak sebagian produk.

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
Elemen118
sumber
1

MATL , 18 byte

ij48-tn:1-P10w^**P

The compiler (5.1.0) bekerja di Matlab dan Oktaf.

Setiap angka dimasukkan pada saluran yang terpisah.

Contoh

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

Penjelasan

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
Luis Mendo
sumber
1

Haskell, 60 57 54 byte

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

5 byte lebih sedikit (drop the .show) jika saya bisa mengambil angka kedua sebagai string.

Contoh penggunaan: g 361 674-> [1444,25270,216600].

Lipat gandakan setiap digit kebalikan ydengan xdan skala dengan 10^imana i = 0,1,2,....

Sunting: Terima kasih kepada @Mauris selama 3 byte!

nimi
sumber
Anda bahkan dapat melakukannya (\b->(x*10^b*).read.pure).
Lynn
@Mauris: Bagus. Terima kasih banyak!
nimi
1

Julia, 50 49 byte

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

Ini adalah fungsi yang menerima dua integer dan mengembalikan array integer.

The digitsmengembalikan fungsi array digit input bilangan bulat dalam urutan terbalik. Kami mendapatkan indeks, pasangan nilai menggunakan enumeratedan menghitung produk parsial sebagai input pertama kali digit kali 10 dinaikkan menjadi kekuatan indeks digit - 1.

Menyimpan satu byte berkat Dennis!

Alex A.
sumber
1

Python 2, 61

def p(a,b):
 j=0
 while b>0:
  print`b%10*a`+j*'0';b/=10;j+=1 
Willem
sumber
1

CJam, 19 17 byte

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

Mengambil input dengan item pertama berupa integer dan yang kedua adalah string (mis 34 "53".). Saran diterima, karena saya yakin itu bisa lebih pendek. Terima kasih kepada Dennis karena telah menghemat dua byte.

Cobalah online.

Penjelasan

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
NinjaBearMonkey
sumber
1
~~A@#**menghemat beberapa byte.
Dennis
1

Haskell, 37 byte

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

Tidak ada pengerasan, hanya aritmatika. Secara rekursif mendahului produk parsial terkecil ke yang lain, di mana digit terakhir bdipotong dan pengganda 10 diterapkan. Prioritas operator bekerja dengan baik.

Tidak
sumber
0

𝔼𝕊𝕄𝕚𝕟, 11 karakter / 23 byte (tidak kompetitif)

ᴙíⓢⓜî*$*Ⅹⁿ_

Try it here (Firefox only).

Menemukan bug saat mengode solusi untuk masalah ini ...

Penjelasan

          // 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
Mama Fun Roll
sumber
0

Japt , 28 byte

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

Penjelasan:

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
nicael
sumber
Karena bug dalam interpreter, harus menggunakan ApY+1 /10alih-alih ApY, karena Ap0(yang 10 ^ 0) memberikan 100. Saya kira itu karena alasan untuk memungkinkan kuadrat cepat Ap, tetapi 0tidak berarti "tidak ada argumen". Tolong perbaiki, Eth.
nicael
0

Python 2, 42 byte

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

Tidak ada pengerasan, hanya aritmatika. Secara rekursif menambahkan produk parsial terkecil ke sisanya, di mana digit terakhir bdipotong dan pengganda 10 diterapkan.

Tidak
sumber