आंशिक उत्पादों का उत्पादन


17

में लंबे समय से गुणा , संख्या गुणा के बाद, आप आंशिक उत्पादों के साथ, इस चुनौती आप उत्पादन उन आंशिक उत्पादों होगा में छोड़ दिया जाता।

क्योंकि लंबी गुणा लंबी है, आपके कोड को क्षतिपूर्ति करने के लिए जितना संभव हो उतना छोटा होना होगा।

उदाहरण

34, 53
102, 1700

48, 38 
384, 1440

361, 674
1444, 25270, 216600

0, 0
0

1, 8
8

विशेष विवरण

  • इनपुट / आउटपुट किसी भी उचित प्रारूप में हो सकता है जैसे कि सरणी, अल्पविराम से अलग स्ट्रिंग (या कोई अन्य सीमांकक जो कि एक अंक नहीं है), सूची, फ़ंक्शन तर्क आदि।
  • आंशिक उत्पादों को बढ़ते क्रम में होना चाहिए।
  • यदि एक आंशिक उत्पाद है 0, तो आप यह चुन सकते हैं कि आप इसे आउटपुट करना चाहते हैं या नहीं।

यह है जो बाइट्स जीत में सबसे छोटा कोड है!


मैं मान रहा हूँ कि संख्याएँ तार हो सकती हैं, है ना?
मामा फन रोल

यह 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

पायथ, 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

जावास्क्रिप्ट (ईएस 7), 48 बाइट्स

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

ईएस 6 (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

लूआ, 72 68 बाइट्स

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

3

एपीएल, 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

पायथ, 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 में और सप्टक में काम करता है।

प्रत्येक नंबर एक अलग लाइन पर इनपुट है।

उदाहरण

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

हास्केल, 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^ii = 0,1,2,...

संपादित करें: 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

हास्केल, 37 बाइट्स

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

कोई कठोर नहीं, सिर्फ अंकगणित। पुनरावर्ती शेष के लिए सबसे छोटा आंशिक उत्पाद प्रस्तुत करता है, जहां अंतिम अंक हैb को काट दिया जाता है और 10 का गुणक लागू किया जाता है। ऑपरेटर पूर्ववर्ती अच्छी तरह से काम करता है।


0

S, 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

जाप , 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इसका मतलब "कोई तर्क नहीं" है। Plz फिक्स, एथ।
nicael

0

पायथन 2, 42 बाइट्स

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

कोई कठोर नहीं, सिर्फ अंकगणित। पुनरावर्ती शेष के लिए सबसे छोटा आंशिक उत्पाद जोड़ता है, जहां अंतिम अंक bको काट दिया जाता है और 10 का गुणक लागू किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.