प्रत्याख्यानों के योग में एक संख्या का विघटन करें


9

प्रतिनिधि संख्या के a * (10^n - 1)/9साथ फॉर्म के नंबर हैं a in [-9,9]\{0}(दूसरे शब्दों में 111, -3333, 66, संख्या जो केवल एक बार दोहराकर बनाई गई हैं)

लक्ष्य: एक प्रोग्राम या फ़ंक्शन लिखें जो एक एकल सकारात्मक पूर्णांक Nऔर प्रिंट लेता है N = s_1 + s_2 + ... + s_k। प्रति पंक्ति एक संख्या होनी चाहिए और संख्याओं को सही-संरेखित करने की आवश्यकता है। किसी भी दो सारांश में अंकों की समान संख्या नहीं होनी चाहिए और शून्य जोड़ने की अनुमति नहीं है। आउटपुट को आरोही या अवरोही क्रम में (अंकों की संख्या से) आदेश दिया जाना चाहिए

उदाहरण:

in:
24192
out:
24192 =
22222 +
 2222 -
  222 -
   33 +
    3

in:
24192
out:
    -7
   -22
  +888
 +1111
+22222
=24192

in:
113
out:
113=    NOT  111+  no empty lines  111+
111+          00+                    
  2            2                     2

जैसा कि आप देख सकते हैं कि कई समाधान हो सकते हैं और कुछ कलात्मक स्वतंत्रता की अनुमति है। प्रत्येक पंक्ति में प्रमुख और अनुगामी व्हाट्सएप की अनुमति है

सबसे छोटी बाइट गिनती जीत


क्या आप को रोकने के लिए कुछ नियमों की घोषणा करनी चाहिए जैसे कि सिर्फ प्रिंटिंग Nवाले?
पुरकाकूदरी

3
यह पहले से ही कवर किया गया है: "कोई भी दो सारांश अंकों की समान संख्या नहीं होनी चाहिए"
नटकी

इन नंबरों को repdigits भी कहा जाता है।
य्प्निपन

जवाबों:


6

पर्ल 5 - 97 92 93 86

$x=$_=pop;{printf"%15s
",$_;$_=$x,s!\d!//,$&!eg,$x-=$_,$i++?s/^\b/+/:s/^/=/;/0/||redo}

एक पैरामीटर के रूप में दिया गया इनपुट:

$perl a.pl 2224192
     2224192
    =2222222
       +1111
        +888
         -22
          -7

यदि संख्या में 0 है तो यह कुछ भी प्रिंट नहीं करता है। शायद यह /0/पाशन की स्थिति है।
feersum

धन्यवाद, वास्तव में ऐसा ही है। मैंने अपने आप को पर्ल शॉर्टकट लूप्स के साथ भ्रमित किया। उनके पास अंत में स्थिति है लेकिन फिर भी इसे पहले पुनरावृत्ति पर जांचें। मुझे "+0" की तलाश करनी है।
नटकी

वास्तव में मैं अनुकरण कर सकता हूं ... जबकि () सिर्फ एक अतिरिक्त चरित्र का उपयोग करके redo
नटकी

2

CJam, 55 50 बाइट्स

'=l:L+Li{_W>"-+"=1$zs(\,)*+:Ii-L,_S*I+\~>\}h;]W%N*

इसका परीक्षण यहां करें।

आउटपुट स्वरूप का उपयोग करता है

      -7
     -22
    +888
   +1111
+2222222
=2224192

मुझे पीटने के बाद मैं इसे और अधिक गोल्फ कर सकता हूं।

स्पष्टीकरण:

'=l:L+Li{_W>"-+"=1$zs(\,)*+:Ii-L,_S*I+\~>\}h;]W%N*
'=                                                 "Push = character.";
  l:L                                              "Read STDIN and store in L.";
     +L                                            "Concatenate, push new copy of L.";
       i                                           "Convert to integer.";
        {                                 }h       "Do-while loop. Leaves the condition on the
                                                    stack. I will use the remainder for that.";
         _W>                                       "Duplicate remainder, compare with -1.";
            "-+"=                                  "Select appropriate sign character.";
                 1$                                "Copy remainder again.";
                   zs                              "Take abs() and convert to string.";
                     (                             "Shift off first digit.";
                      \                            "Swap with string.";
                       ,                           "Get length.";
                        )                          "Increment.";
                         *                         "Repeat digit that often.";
                          +                        "Concatenate with sign.";
                           :I                      "Store in I.";
                             i-                    "Convert to integer. Subtract from remainder.";
                                                   "Now we'll right-justify I.";
                               L,                  "Load input, get length.";
                                 _                 "Duplicate.";
                                  S*               "Repeat space that often.";
                                    I+             "Load string and concatenate.";
                                      \~           "Swap with length. Bitwise complement.";
                                        >          "Take that many characters from the right.";
                                         \         "Swap with remainder.";
                                            ;      "Discard final remainder (0).";
                                             ]     "Wrap in array.";
                                              W%   "Reverse.";
                                                N* "Join with line feeds.";

परिणामी सरणी स्वचालित रूप से कार्यक्रम के अंत में मुद्रित होती है।


0

जावास्क्रिप्ट ईएस 6 - 145

i=0;f=n=>{return g=n<0,n=Math.abs(n)+'',l=n.length,r=l-1?n[0].repeat(l):n,(i>0?g?'-':'+':n+'=')+'\n'+' '.repeat(i++)+(l-1?r+f((+n-r)*(g?-1:1)):r)}

फ़ायरफ़ॉक्स कंसोल में पेस्ट करें। के रूप में चलाएँ f(24192)

इसके लिए आउटपुट f(24192):

24192=
22222+
 1111+
  888-
   22-
    7

इनपुट के साथ 55इसमें योग में 0 (जो एक बग है) शामिल है।
feersum

0

गोल्फक्राफ्ट 77

~.[{..0>2*(.@*`.,\[0=]*''+~*.@\-.}do;]-1%{[.0>' +'=\`n].1=,2$`,\-' '*\+}%'='@

ऑनलाइन डेमो लिंक:

इकाई परीक्षण संस्करण के साथ थोड़ा अधिक पठनीय संस्करण (यदि गोल्फस्क्रिप्ट को पठनीय कहा जा सकता है) यहां उपलब्ध है

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