एक डिजिटल त्रिभुज के साथ योग


28

ठीक है, यह वास्तव में नीचे योग।

एक प्रोग्राम या फ़ंक्शन लिखें जो दशमलव पूर्णांक (0-9) की गैर-रिक्त सूची में लेता है और शीर्ष पर इनपुट सूची के साथ अंकों की एक नीचे की ओर इशारा करते हुए "त्रिकोण" को आउटपुट करता है जहां पहली पंक्ति के बाद प्रत्येक अंक दो अंकों का योग होता है। इसके ऊपर मोडुलो 10।

उदाहरण के लिए, इनपुट [7, 5, 0, 9]में आउटपुट है

7 5 0 9
 2 5 9
  7 4
   1

क्योंकि 2है (7 + 5) mod 10, 5है (5 + 0) mod 10, 9है (0 + 9) mod 10, करने के लिए सभी तरह से आदि 1किया जा रहा है (7 + 4) mod 10

यदि सूची में केवल एक आइटम है, तो आउटपुट इनपुट से मेल खाता है; उदाहरण के लिए [4]वसीयत का इनपुट मिलेगा

4

यहाँ कुछ अतिरिक्त उदाहरण दिए गए हैं:

[0]

0

[1, 2]

1 2
 3

[8, 7]

8 7
 5

[0, 0]

0 0
 0

[1, 4, 2]

1 4 2
 5 6
  1

[0, 1, 0]

0 1 0
 1 1
  2

[1, 0, 0, 0]

1 0 0 0
 1 0 0
  1 0
   1

[1, 2, 3, 4]

1 2 3 4
 3 5 7
  8 2
   0

[1, 2, 3, 5, 8]

1 2 3 5 8
 3 5 8 3
  8 3 1
   1 4
    5

[9, 2, 4, 5, 3, 2, 2]

9 2 4 5 3 2 2
 1 6 9 8 5 4
  7 5 7 3 9
   2 2 0 2
    4 2 2
     6 4
      0

ध्यान दें कि आउटपुट में:

  • पहली पंक्ति में अग्रणी स्थान नहीं हैं।
  • प्रत्येक बाद की पंक्ति में पिछली पंक्ति की तुलना में एक अधिक अग्रणी स्थान होता है।
  • अंकों को एक ही स्थान से अलग किया जाता है।
  • प्रत्येक पंक्ति को एक अनुगामी स्थान तक रखने की अनुमति है।
  • एक एकल वैकल्पिक अनुगामी न्यूलाइन हो सकती है।
  • आपको सामान्य दशमलव अंकों के लिए वर्णों का उपयोग करना चाहिए (0 9 के माध्यम से)।

बाइट्स में सबसे छोटा कोड जीतता है। टाईब्रेकर पहले जवाब है।


1
पहले मैंने शीर्षक "डिजिटल ट्रामा" पढ़ा
बिल्ली

जवाबों:


24

ब्रेनएफ ** के, 396 391 बाइट्स

>+>>++++[-<++++++++>]->,----------[++++++++++.>>++++++++[-<++++<------>>]<.,----------]-<+[-<+]->>+[-<<<<<++++++++++.[-]>[-<+>>.<]<[->+<]>+>>>[[->+]->>+<<<+[-<+]->]>+[-<->[[->+]->+>>+<<<<+[-<+]->]<+>->+[->+]->>[->+<]>+>++++++++++>>-<<[-<-[>>]<]<->>>+[-<<<+>>>[-<->]<+++++++++>>>+]++++++++[-<++++<++++++>>]<<<[-<<<<+[-<+]-<+>>+[->+]->>>>+<]>.>.[-]<[-]<<<[->+<]<<+[-<+]>+]>>[-]<<<-<+[-<+]->>+]

मैं ऐसा करने के प्रलोभन का विरोध नहीं कर सका। कम से कम त्रिभुज नुकीले-नीचे की ओर होता है।

इनपुट न्यूक्लियर वर्णों की एक स्ट्रिंग के रूप में आता है, जिसके बाद एक नई लाइन होती है।

आउटपुट में हर लाइन पर एक एकल अनुगामी स्थान होगा।

उदाहरण:

$ bf sd.bf
010
0 1 0 
 1 1 
  2 

$ bf sd.bf
123456
1 2 3 4 5 6 
 3 5 7 9 1 
  8 2 6 0 
   0 8 6 
    8 4 
     2 

$ bf sd.bf
9245322
9 2 4 5 3 2 2 
 1 6 9 8 5 4 
  7 5 7 3 9 
   2 2 0 2 
    4 2 2 
     6 4 
      0 

व्याख्या

चूंकि कोड को कार्यात्मक दृष्टिकोण से समझाना मुश्किल है, इसलिए हम इसे विभिन्न समय पर टेप की स्थिति के परिप्रेक्ष्य से देख सकते हैं। यहाँ मुख्य विचार यह है कि हम जिस त्रिभुज को आउटपुट करते हैं, उसे एक कसकर भरे (बीएफ, वैसे भी) सरणी के रूप में आरम्भ किया जाता है, जो लूप के प्रत्येक पुनरावृत्ति द्वारा आकार में सिकुड़ जाता है। एक और महत्वपूर्ण विचार यह है कि हम 255एक "प्लेसहोल्डर" को इंगित करने के लिए उपयोग करते हैं जिसे हम टेप पर खोज सकते हैं।

प्रारंभ

यह सबसे आसान कदम है। कार्यक्रम की शुरुआत में, हम निम्नलिखित कार्य करते हैं:

>+>>++++[-<++++++++>]->

यह टेप को निम्न स्थिति में ले जाता है (जहां >N<टेप पर पॉइंटर के स्थान को इंगित करता है)

[ 0 1 32 255 >0< 0 0 ...]

यहां पहला नंबर "बफर" स्थान है। हम इसे लंबे समय के आधार पर उपयोग नहीं करने जा रहे हैं, लेकिन यह थोड़ा संचालन को सरल बनाने और चारों ओर डेटा की प्रतिलिपि बनाने के लिए उपयोगी है।
दूसरी संख्या रिक्त स्थान की संख्या है जिसे हम पहली पंक्ति के बाद शुरू करते हुए, प्रत्येक पंक्ति के शुरू में आउटपुट करेंगे । पहली पंक्ति में कोई अग्रणी स्थान नहीं होगा।
तीसरा नंबर स्पेस कैरेक्टर है जिसे हम आउटपुट करते हैं।
चौथा नंबर एक प्लेसहोल्डर 255 है, जिससे हम अपेक्षाकृत आसानी से इस स्थिति में वापस आ सकते हैं।

इनपुट

इस स्थिति से, हम सभी पात्रों में पढ़ेंगे। इस चरण के अंत में, हम निम्नलिखित स्थिति में होने की उम्मीद करते हैं:

[ 0 1 32 255 a b c d e f ... >255< 0 0 ... ]

जहां a b c d e f ...संख्यात्मक वर्णों की स्ट्रिंग इंगित करती है जो इनपुट थी (न्यूलाइन नहीं)।

हम इसे निम्नलिखित के साथ पूरा करते हैं:

,----------[++++++++++.>>++++++++[-<++++<------>>]<.,----------]-

इसके लिए कुछ बारीकियां हैं। सबसे पहले, हम प्रत्येक चरित्र को आउटपुट करेंगे जैसे कि हम उन्हें प्राप्त करते हैं, और उसके बाद एक स्थान का उत्पादन करते हैं। दूसरे, हम टेप पर ASCII मान की प्रतिलिपि नहीं बनाना चाहते, हम वास्तविक संख्यात्मक अंक की प्रतिलिपि बनाना चाहते हैं। तीसरा, हम उस समय रुकना चाहते हैं जब हम एक नई लाइन मारते हैं और उस समय अपने आप को एक अच्छी जगह पर छोड़ देते हैं।
कहो हमारे इनपुट है 6723। फिर, पहला पढ़ने पर 6, हमारा टेप इस तरह दिखता है:

[ 0 1 32 255 >54< 0 0 ...]

हम जांचते हैं कि यह मान 10(ASCII की नई रेखा) के बराबर नहीं है ,----------[++++++++++। हम तब मूल्य का प्रिंट आउट लेते हैं और एक साथ 48 इनपुट मूल्य से घटाकर जारी रखते हैं और 32 को इसके आगे के मान में जोड़ते हैं ( >>++++++++[-<++++<------>>]<), यहाँ छोड़ रहे हैं:

[ 0 1 32 255 6 >32< 0 ...]

सूचना कैसे इस प्रक्रिया के दौरान हम यह मान सकते हैं कि हमारे इनपुट के अधिकार के लिए सभी अंक 0 होती है - इसका अर्थ यह है कि हम किसी भी पहले वाली स्थिति को बर्बाद कर के खतरे में नहीं कर रहे हैं अगर हम गणना करने के लिए सही करने के लिए मूल्यों का उपयोग 6 * 8और 4 * 8
अब हम अपने द्वारा उत्पन्न अंतरिक्ष वर्ण को आउटपुट करते हैं, और हमारे द्वारा गणना किए गए स्थान को हटाते हुए एक नया इनपुट लेते हैं। आखिरकार, इनपुट को एक नई लाइन द्वारा समाप्त कर दिया जाएगा और लूप बाहर निकल जाएगा, 255जहां एक नई लाइन ( ,----------]-) होगी। यह दूसरा प्लेसहोल्डर चरित्र है जिसका उपयोग हम टेप को नेविगेट करने के लिए करेंगे। हमारे परिदृश्य में इस बिंदु पर, हमारा टेप बिल्कुल यही है:

[ 0 1 32 255 6 7 2 3 >255< 0 0 ... ]

गणना

जिस तरह से यह काम करता है वह यह है कि हमारे 255प्लेसहोल्डर्स के बीच अंकों की सूची लूप के प्रत्येक पुनरावृत्ति द्वारा सिकुड़ने वाली है। जब इसमें केवल 1 अंक बचा होता है, तो हम कर लेते हैं और इसे तुरंत रोक देना चाहिए (ध्यान दें कि, इस बिंदु पर, उस सूची का प्रत्येक अंक पहले ही आउटपुट हो चुका है, इसलिए हमें इसे फिर से आउटपुट करने के बारे में चिंता करने की आवश्यकता नहीं है)।

अब हम इस ट्रिक का उपयोग पहले 255प्लेसहोल्डर पर नेविगेट करने के लिए करते हैं <+[-<+]-:। यह प्रभावी रूप से बाईं ओर टेप को खोजता है 255, बीच में कुछ भी नहीं बदल रहा है। अब जब हमने पॉइंटर को स्थानांतरित कर दिया है, तो हम अपनी निकास स्थिति की जांच कर सकते हैं: यदि सूची में केवल एक अंक है, तो दाईं ओर सेल दो स्थान धारण करेगा 255। इस प्रकार, हम उसके खिलाफ जांच करते हैं और एक लूप शुरू करते हैं:>>+[-<<

हमारे लूप में पहला कदम एक नई पंक्ति का उत्पादन करना है। इसलिए हम पहली सेल (हमारे बफर सेल) में जाते हैं, इसमें 10 और आउटपुट जोड़ते हैं। अगला कदम सभी प्रमुख अंतरिक्ष पात्रों का उत्पादन करना है। उन्हें आउटपुट करने के बाद, हम अग्रणी स्थानों की संख्या के लिए हमारी गिनती बढ़ाते हैं। इन चरणों को निम्नलिखित द्वारा पूरा किया जाता है:

-<<<<<++++++++++.[-]>[-<+>>.<]<[->+<]>+>>>

जो हमें इस अवस्था में छोड़ देता है:

[ 0 2 32 255 >6< 7 2 3 255 0 0 0 0 0 0 ]

हमारा अगला कदम सूची में पहले मूल्य को दूसरे प्लेसहोल्डर को कॉपी करना है 255:

[[->+]->>+<<<+[-<+]->]

हम अनिवार्य रूप से हमारे प्लेसहोल्डर के बीच आगे और पीछे हटते हुए ऐसा करते हैं 255, हमें यहाँ छोड़ते हुए:

[ 0 2 32 255 >0< 7 2 3 255 0 6 0 0 ... ]

अब हम एक लूप शुरू करते हैं, बाकी सूची के माध्यम से पुनरावृत्ति करते हुए, जब हम टकराते हैं तो रुक जाते हैं 255:>+[-<

इस बिंदु पर, हमारी तत्काल बाईं ओर का अंक हमेशा 0. होता है, क्योंकि हम उनसे प्यार करते हैं, हम एक प्लेसहोल्डर 255को वहां पॉप करते हैं ताकि हम सूची में अपने स्थान पर वापस आ सकें। अगला चरण सूची के दूसरे स्थान को उन स्थानों पर ले जाना है, जहां हम पहले स्थान पर चले गए, दूसरे स्थान पर रहने वाले से पहले 255। इन चरणों को निम्नलिखित द्वारा पूरा किया जाता है:

->
[[->+]->+>>+<<<<+[-<+]->]

हमें यहाँ छोड़कर: [ 0 2 32 255 255 >0< 2 3 255 7 6 7 0 ] अब, दोनों 6और 7एक स्थान जहां गणना हो सकता है के लिए ले जाया गया है। हमें दो प्रतियों की आवश्यकता है 7क्योंकि सूची में अगले नंबर को भी इसकी आवश्यकता होगी। 7के तुरंत बाद 255इस उद्देश्य में कार्य करता है, जबकि अन्य 7गणना के द्वारा भस्म हो जाएगा।

सबसे पहले, हम दो अंक जोड़ते हैं:

<+>->+[->+]->>
[->+<]>

हमें यहां छोड़कर:

[ 0 2 32 255 0 255 2 3 255 7 0 >13< 0 ]

चरणों का अगला संयोजन सबसे जटिल है। हमें यह देखने की आवश्यकता है कि क्या हम जिस संख्या को इंगित कर रहे हैं वह 10 से बड़ा है, और यदि यह है, तो हम घटाते हैं 10। वास्तव में, हम जो करते हैं, हम उससे 10 घटाते हैं और देखते हैं कि क्या वह 0घटाव के किसी भी बिंदु पर हिट करता है। यदि ऐसा होता है, तो हम 10बाद में वापस जोड़ते हैं । इसके अंत में, हमारे पास 10 का योग होना चाहिए।

Prepare a 10 to the right
+>++++++++++
Leave yet another 255 for a loop condition later
>>-<<
If the number is greater than 10 end up one space to the left
else one space to the right
[-<-[>>]<]<->
Check if the previous 255 is two spaces to the right and if it is
add 10 back to our sum--we've subtracted too much
>>+[-<<<+>>>[-<->]<+++++++++>>>+]

इस बिंदु पर, हमने लक्ष्य पूरा कर लिया है। हमारे पास राशि है modulo 10! इसके अलावा, संख्या 10 से अधिक थी या नहीं, हम यहाँ समाप्त करेंगे:

[ 0 2 32 255 0 255 2 3 255 7 0 3 0 0 >0< ]

हमारा अगला लक्ष्य इस नई राशि का उत्पादन करना है, इसे एक स्थान के साथ पालन करें, और इसे हमारी सूची में वापस इंजेक्ट करें। हम यह सब हमारी पिछली तकनीकों के साथ करते हैं 255-हॉटिंग और 48हमारी राशि को जोड़ने के लिए, इसलिए मैं इसे विस्तार से कवर नहीं करूंगा।

++++++++[-<++++<++++++>>]
<<<[-<<<<+[-<+]-<+>>+[->+]->>>>+<]
>.>.

और हम यहां हैं: [ 0 2 32 255 3 255 2 3 255 7 0 0 51 >32< ] ध्यान दें कि हमने 255अपने नव-इंजेक्शन के बाद एक अतिरिक्त प्लेसहोल्डर कैसे रखा 3ताकि हम सूची में जगह न खोएं। इस बिंदु पर, हमारे पास हमारी राशि और उसका स्थान है, इसलिए हमें उस स्थिति को साफ करने और वापस लाने की आवश्यकता है जहां इस लूप का अगला पुनरावृत्ति काम करने वाला है। हमें अपने 51और 32कक्षों को खाली करने की आवश्यकता है , 7एक बार दाईं ओर ले जाएं, और हमारे सूची प्लेसहोल्डर पर नेविगेट करें ताकि हम शुरू कर सकें।

[-]<[-]<<<[->+<]<<+[-<+]

अब, हम यहाँ हैं: [ 0 2 32 255 3 >0< 2 3 255 0 7 0 ... ]
जो कि ठीक उसी जगह पर है जहाँ हम अपनी अगली यात्रा के लिए बनना चाहते हैं। तो 255 के लिए जाँच करें और आगे बढ़ें! ( >+])

जब हम लूप से दूर हो जाते हैं, तो हम एक पूरी नई सूची बनाने जा रहे हैं - पिछली सूची से रकम से बना। पहली बार, यह इस तरह दिखेगा:

 [ 0 2 32 255 3 9 5 0 >0< ]

अब हम अपनी नई सूची में उस पूरी प्रक्रिया को दोहराना चाहते हैं, इसलिए हम 255बाईं ओर नीचे की ओर झुकते हैं और सब कुछ शुरू करते हैं! हमें थोड़ा सा सफाई करने की आवश्यकता है >>[-]<<, और फिर अपने प्लेसहोल्डर को साथ छोड़ दें <-। उसके बाद, हम बिलकुल उसी स्थान पर हैं, जैसा कि हम इनपुट के बाद थे, इसलिए हम एक ही चेक करने से दूर हो सकते हैं: <+[-<+]->>+और बूम! हमें अपना पूरा लूप मिल गया है! हमें बस समापन ब्रैकेट की आवश्यकता होती है, और जब यह समाप्त होता है तो हमने पहले ही सब कुछ आउटपुट कर दिया है, इसलिए हम कर रहे हैं ]:।


वैसे भी आपका स्वागत है :) आपने 2015 के बाद से उत्तर नहीं दिया है: ओ
केल्विन के

1
@HelkaHomba मुझे पता है! मैं अभी भी कुछ आवृत्ति के साथ यात्रा करता हूं, लेकिन मैं सिर्फ इस एक के लिए कोड लिखने का विरोध नहीं कर सकता। यह भाषा के लिए एकदम सही है :)
ब्रेनसैट

9
"बीएफ के लिए बिल्कुल सही" एक अवधारणा है जो मुझे रोमांचित करती है :-)
लुइस

7

जेली , 20 19 18 बाइट्स

Ṛ+2\Ṗп%⁵z”@ṚZGḟ”@

इसे ऑनलाइन आज़माएं!

पृष्ठभूमि

जेली में नंबर उत्पन्न करना सीधा है। आउटपुट थोड़ा अधिक जटिल है।

जेली में एक अंतर्निर्मित ग्रिड परमाणु ( G) है जो स्तंभों के बीच पंक्तियों और रिक्त स्थान के बीच नईलाइन्स के साथ एक 2 डी सूची प्रदर्शित करता है। हम संख्याओं के 2D सरणी (प्रत्येक पंक्ति के साथ उत्पन्न) को उल्टा करते हैं, और इसे भरण मूल्य के साथ स्थानांतरित करते हैं @। परिणामी सरणी को पुनः Gप्राप्त करने और फिर से स्थानांतरित करने के बाद, निम्नलिखित उपज लागू करें।

9 2 4 5 3 2 2
@ 1 6 9 8 5 4
@ @ 7 5 7 3 9
@ @ @ 2 2 0 2
@ @ @ @ 4 2 2
@ @ @ @ @ 6 4
@ @ @ @ @ @ 0

वांछित त्रिकोणीय आकार प्राप्त करने के लिए, हमें केवल इतना करना है कि भरण मूल्य को हटा दें।

यह काम किस प्रकार करता है

Ṛ+2\Ṗп%⁵z”@ṚZGḟ”@  Main link. Argument: A (list of integers)

Ṛ                   Reverse A.
    Ṗп             While there's more than one element:
 +2\                  Compute the pairwise sum.
                    Collect all intermediate results in a list.
       %⁵           Take all resulting integers modulo 10.
         z”@        Transpose with fill value '@'.
            Ṛ       Reverse the order of the rows.
             Z      Transpose.
              G     Grid.
               ḟ”@  Filter; remove the fill value.

5

पायथ - 18 बाइट्स

j.e+*dkjdbP.ueM+Vt

टेस्ट सूट

j                                       Join by newlines
 .e                                     Loop over seq in var b and index in var k
  +                                     Concatenate
   *dk                                  Space repeated k times
    jdb                                 Join b by spaces
  P                                     [:-1] to get rid of empty line
   .u             (Q implicit)          Cumulative fixed point over input (var G)
    eM                                  Mod 10 mapped over list
     +V                                 Vectorized addition
      t(G implict)                      G[1:]
      (G implict)                       Vectorize cuts this off to G[:-1]

5

पायथन 3.5, 74 72 71 बाइट्स

f=lambda L,*S:f([sum(x)%10for x in zip(L,L[1:print(*S,*L)]or 1)],'',*S)

इनपुट पूर्णांक (उदाहरण f([1,2,3,5,8])) की एक सूची है , आउटपुट STDOUT के लिए है। %10और तथ्य यह है कि mapरिटर्न एक mapअजगर 3 में वस्तु थोड़ा कष्टप्रद है, जिसे हम ऐसा नहीं कर सकते map(lambda*x:sum(x)%10,L,L[1:])या इसी तरह की।

फ़ंक्शन में त्रुटियां होती हैं, लेकिन तब तक आउटपुट पूरा हो जाता। स्टिक को छड़ी करने के लिए एक अच्छी जगह ढूंढकर @xsot को -1 बाइट के लिए धन्यवादprint


3
मैं 3.5 स्थापित नहीं है, लेकिन यह काम करना चाहिए:f=lambda L,*S:f([sum(x)%10for x in zip(L,L[1:print(*S,*L)]or 1)],'',*S)
xsot

1
@xsot यह है ... का एक अद्भुत उपयोग None!
Sp3000

printकुछ कैसे लौटाता है? मुझे पता नहीं है कि printफ़ंक्शन वापस आ रहा है।
आउटगॉल्फ

@ E @G's ओह रुको, आपका मतलब है कि पायथन का printसमारोह लौट रहा है - हाँ, यह Noneपूरा होने पर वापस आ रहा है
Sp3000

मेरा मतलब है, Noneस्लाइसिंग पर कितना उपयोगी है ?
आउटगोल्फ

5

05AB1E , 20 19 17 बाइट्स

कोड:

DvNð×?T%Ððý,¦‚ø€O

स्पष्टीकरण:

D                     # Duplicate the input.
 v                    # Map over it, running the following len(input) times.
  Nð×                 # Multiply the iteration number with a space.
     ?                # Pop and print without a newline.
      T%              # Take all integers modulo 10.
        Ð             # Triplicate the array.
         ðý,          # Join by spaces and print with a newline.
            ¦         # Remove the first element of the array.
             ‚        # Wrap it up, (pop a, b push [a, b]).
              ø       # Zip.
               €O     # Sum up each element.

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!


4

MATL, 32 30 29 28 27 26 25 24 बाइट्स

t"X@qZ"y1X9&VhDTTH&Y+10\

1 बाइट ने @Luis को धन्यवाद दिया

इसे ऑनलाइन आज़माएं!

सभी परीक्षण मामलों के लिए संशोधित संस्करण

व्याख्या

        % Implicitly grab input
t       % Duplicate the input
"       % For each element of the input (really just a shortcut to loop numel(input) times)
  X@q   % Determine the current loop index and subtract 1
  Z"    % Create an array of blanks this size (these are the padding to the left)
  y     % Copy the current array of numbers from the stack
  1X9   % Get the pre-defined output format of %.15g from the clipboard
  &V    % Convert the input to it's character representation with single spacing
  h     % Horizontally concatenate the left padding and the numbers
  D     % Display the result (consumes the string)
  TT    % Create a two-element vector of 1's ([1 1])
  H&Y+  % Convolve [1 1] with the array (computes the pair-wise sum)
  10\   % Mod 10 the result
        % Implicitly close for loop

अच्छा! मैं अग्रणी स्थान प्राप्त करने का मार्ग खोजने का प्रयास कर रहा था। मैं Vप्रारूप युक्ति की अनुमति देता हूं । आप Z"इसके बजाय 1 बाइट को बचा सकते हैं O: इस लिंक को देखें (मैं टिप्पणी में प्रारूप के साथ परेशान हूं)
लुइस मेंडेन

@LuisMendo टिप के लिए धन्यवाद! हाँ, मुझे वह प्रारूप युक्ति मिली है, Dजिसमें डिफ़ॉल्ट रूप से उस एकल-स्थान-संख्याओं का उपयोग किया जाता है।
स्वेवर

2

दरअसल, 43 बाइट्स

;l;D+#"{:^%d}"%╗W;' j1╟╜f.;pXZ`i+9u@%`MdXWX

इसे ऑनलाइन आज़माएं!

यह प्रोग्राम आउटपुट के बाद सिंगल ट्रेलिंग न्यूलाइन प्रिंट करता है।

स्पष्टीकरण:

;l;D+#"{:^%d}"%╗W;' j1╟╜f.;pXZ`i+9u@%`MdXWX
;l;D+                                        calculate the width of the field (2L-1 where L = len(input))
     #"{:^%d}"%╗                             push to a list, make a Python new-style format string for centering text, save in reg0
                W;' j1╟╜f.;pXZ`i+9u@%`MdXW   while the top of the stack is truthy:
                 ;' j1╟                        duplicate list, join with spaces, push string to a list
                       ╜f.                     center string and print  
                          ;pXZ                 zip list with itself shifted forward by 1 (zip(a,a[1:]))
                              `i+9u@%`M        map: add each pair and mod by 10
                                       dX      discard the last value (which was not added with anything)
                                          X  discard the now-empty list after the loop to avoid printing it


2

सीजेएम, 25 बाइट्स

q~{_2ew::+Af%}h;]eeSff*N*

इसे ऑनलाइन आज़माएं!

व्याख्या

त्रिकोण लेआउट उत्पन्न करने के लिए यह काफी साफ चाल का उपयोग करता है।

q~      e# Read and evaluate input.
{       e# While the list of digits is non-empty...
  _2ew  e#   Duplicate and get all sublists of length 2.
  ::+   e#   Sum each pair.
  Af%   e#   Take each result modulo 10.
}h
;]      e# Discard the final empty list and wrap the others in an array.
ee      e# Enumerate the array. E.g. for input `[7 5 0 9]` we now get this:
        e# [[0 [7 5 0 9]]
        e#  [1 [2 5 9]]
        e#  [2 [7 4]]
        e#  [3 [1]]]
Sff*    e# Perform S* on each element at depth two. For the integers from the
        e# enumeration this gives a string of that many spaces, i.e. the correct
        e# indentation. For the lists of digits this inserts a space character
        e# between every two digits, thereby spacing out the digits as necessary.
N*      e# Put linefeeds between the pairs of indentation and digit list.

1

जावास्क्रिप्ट (ईएस 6) 147 बाइट्स

a=>{o=0;e=(c=>console.log(' '.repeat(o++)+c.join` `));l=1;while(l){p=0,d=[],e(a),a.map(b=>{p?d.push((v+b)%10):0;p=1,v=b});d.length<2?l=0:a=d};e(d)}

हम्म, मेरे पास कुछ विचार हैं, इसे नीचे करने के लिए
बैलिंट


1

पाइके, 21 बाइट्स

lVDm}R$],FsT%)od*pKDP

यहाँ यह कोशिश करो!

मैं इस विधि को थोड़ा अलग समझना चाहता हूं।

[1, 2, 3, 5, 8] - take the input
[2, 4, 6, 10, 16] - double it
[1, 2, 3, 5, 8] - take the input again
[1, 1, 2, 3] - get the deltas
[[2,1], [4,1], [6,2], [10,3]] - transpose them together
[3, 5, 8, 13] - apply addition
[3, 5, 8, 3] - mod 10

1

पर्ल 6 ,  65 63 62  61 बाइट्स

{put ' 'x my$++,$_ for @_,{.rotor(2=>-1).map(*.sum%10).list}...1}
{put ' 'x my$++,$_ for @_,{@(.rotor(2=>-1).map(*.sum%10))}...1}
{put ' 'x my$++,$_ for @_,{@(map *.sum%10,.rotor(2=>-1))}...1}
{put ' 'x my$++,$_ for @_,{[map *.sum%10,.rotor(2=>-1)]}...1}

स्पष्टीकरण:

{ # anonymous block that takes the list as input (@_)

  put # print with trailing newline

    ' ' x ( my $ )++, # pad with one more space than previous iteration
    $_                   # the list to print for this iteration
    # The 「.Str」 method on a List puts spaces between elements
    # which is what 「put」 calls on anything that isn't a Str

  for # do that for every list produced from the following

    @_, # the input list

    { # anonymous block that takes the previous list as input ($_)

      [ # turn the following from a Seq into an Array

        map
          *.sum % 10, # sum the values and modulus 10 of the following:

          # take the previous list 2 at a time, backing up one
          $_.rotor( 2 => -1 )

      ]

    }

    ... # repeatedly call that block until:

    1   # the result is only one element long
}

उदाहरण:

my &digital-triangle-sum = {put ' 'x my$++,$_ for @_,{[map *.sum%10,.rotor(2=>-1)]}...1}

for [7,5,0,9], [0,1,0], [1,0,0,0], [9,2,4,5,3,2,2] -> \List {
   digital-triangle-sum List

   put '';
}
7 5 0 9
 2 5 9
  7 4
   1

0 1 0
 1 1
  2

1 0 0 0
 1 0 0
  1 0
   1

9 2 4 5 3 2 2
 1 6 9 8 5 4
  7 5 7 3 9
   2 2 0 2
    4 2 2
     6 4
      0



1

TSQL, 198 194 191 बाइट्स

WHILE में से एक के बजाय GOTO का उपयोग करके, मैं 3 वर्णों को गोल्फ करने में सक्षम था

golfed

DECLARE @ varchar(100)= '1 2 3 4 5 6 7'

DECLARE @j INT=1,@i INT=LEN(@)a:
PRINT @
WHILE @i>@j
SELECT
@=STUFF(@,@i-1,2,RIGHT(SUBSTRING(@,@i-2,1)+SUBSTRING(@,@i,1)*1,1)+' '),@i-=2SELECT
@=STUFF(@,@j,1,' '),@j+=1,@i=LEN(@)IF @i>0GOTO a

इसे ऑनलाइन आज़माएं (2 * WHILE के साथ पुरानी स्क्रिप्ट का उपयोग करके)


1

जावा 7, 230 215 213 बाइट्स

int c=0;void m(int[]a){int l=a.length,j=-1,i=-1;if(l<1)return;int[]x=new int[l-1];while(++j<c)p(" ");for(;++i<l;p(a[i]+" "))if(i<l&i>0)x[i-1]=(a[i-1]+a[i])%10;p("\n");c++;m(x);}<T>void p(T s){System.out.print(s);}

मैंने सोचा था कि यह थोड़ा लंबा हो गया है .. हो सकता है कि यह थोड़ा और अधिक गोल्फ हो सकता है, क्योंकि मैं थोड़े गड़बड़ कर दिया है मैं ...

कुछ बाइट्स ने @GiacomoGarabello को धन्यवाद दिया ।

Ungolfed और परीक्षण कोड:

इसे यहाँ आज़माएँ।

class Main{
  static int c = 0;

  static void m(int[] a){
    int l = a.length,
        j = -1,
        i = -1;
    if(l < 1){
      return;
    }
    int[] x = new int[l-1];
    while(++j < c){
      p(" ");
    }
    for(; ++i < l; p(a[i] + " ")){
      if(i < l & i > 0){
        x[i - 1] = (a[i - 1] + a[i]) % 10;
      }
    }
    p("\n");
    c++;
    m(x);
  }

  static <T> void p(T s){
    System.out.print(s);
  }

  static void printAndReset(int[] a){
    m(a);
    c = 0;
    System.out.println();
  }

  public static void main(String[] a){
    printAndReset(new int[]{ 7, 5, 0, 9 });
    printAndReset(new int[]{ 0 });
    printAndReset(new int[]{ 1, 2 });
    printAndReset(new int[]{ 8, 7 });
    printAndReset(new int[]{ 0, 0 });
    printAndReset(new int[]{ 1, 4, 2 });
    printAndReset(new int[]{ 0, 1, 0 });
    printAndReset(new int[]{ 1, 0, 0, 0 });
    printAndReset(new int[]{ 1, 2, 3, 4 });
    printAndReset(new int[]{ 1, 2, 3, 5, 8 });
    printAndReset(new int[]{ 9, 2, 4, 5, 3, 2, 2 });
  }
}

आउटपुट:

7 5 0 9 
 2 5 9 
  7 4 
   1 

0 

1 2 
 3 

8 7 
 5 

0 0 
 0 

1 4 2 
 5 6 
  1 

0 1 0 
 1 1 
  2 

1 0 0 0 
 1 0 0 
  1 0 
   1 

1 2 3 4 
 3 5 7 
  8 2 
   0 

1 2 3 5 8 
 3 5 8 3 
  8 3 1 
   1 4 
    5 

9 2 4 5 3 2 2 
 1 6 9 8 5 4 
  7 5 7 3 9 
   2 2 0 2 
    4 2 2 
     6 4 
      0 

एक फ़ंक्शन बनाएं void p(String s){System.out.print(s);}और मानक प्रिंट को बदलें। printlnउपयोग के लिए p("\n")। ( और) के पास ले जाएँ int iऔर अंदर की स्थिति को स्थानांतरित करें ताकि आप कुल -11 के लिए कोष्ठक को हटा सकेंint jint c=0;int c=0,i,j;print(a[i]+" ")for
जियाको गारबेलो

@GiacomoGarabello मैंने आज इस छोटे प्रिंट संस्करण को सीखा: <T>void p(T s){System.out.print(s);}इसके बजाय void p(String s){System.out.print(s);}
केविन क्रूज़सेन

वाह ... 2 बाइट्स पायथ और जेली के करीब! धन्यवाद!
जियाकोमो गारबेलो

@GiacomoGarabello "पायथ और जेली के करीब 2 बाइट्स!" हेहे। 'हमेशा जीवन के उज्ज्वल पक्ष पर देखे।' ;)
केविन क्रूज़सेन 9

1

सी # 6, 125 + 31 125 + 18 = 143 बाइट्स

string f(int[] n,string s="")=>s+string.Join(" ",n)+"\n"+(n.Length>1?f(n.Zip(n.Skip(1),(a,b)=>(a+b)%10).ToArray(),s+" "):"");

+18 के लिए है using System.Linq;

13 बाइट्स सहेजने के लिए @TheLethalCoder का धन्यवाद, एक अनावश्यक स्टेटमेंट का उपयोग करके


0

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

a=a.map((_,i)=>(b=a,a=[a.map((e,j)=>j>i?(e+a[j-1])%10:''),b.join` `)).join`
`

0

सी, 138 बाइट्स

golfed

c,d;main(int a,char**b){b++;while(c++,d=0,--a)while(d<a)printf("%*c%c",!d?c:1,*b[d],(d+2>a)*10),++d<a?*b[d-1]=(*b[d-1]+*b[d]-96)%10+48:0;}

Ungolfed

c,d;
main(int a,char**b){
b++;
while(c++,d=0,--a)
    while(d<a)
        printf("%*c%c",
          !d?c:1,      //number of blanks in front of digit
          *b[d],       //digit
          (d+2>a)*10), //returns 10(new line) only for d+1 == a
        ++d<a
          ? *b[d-1]=(*b[d-1]+*b[d]-96)%10+48 //update digit 
          :  0;
}

0

सी #, 167 बाइट्स

Im वास्तव में इस समाधान पर बहुत गर्व है, एक बार जब आप उनमें से फांसी प्राप्त करते हैं तो लैम्ब्डा अभिव्यक्ति बहुत मजेदार होती है

void f(List<int> a){int x=a.Count;for(int s=0;s<x;s++){Console.WriteLine(new String(' ',s)+string.Join(" ",a));a=a.Take(x-s-1).Select((v,i)=>(a[i+1]+v)%10).ToList();}}

यहाँ और सुधार के लिए अपुष्ट:

void f(List<int> a)
{
int x = a.Count;
for (int s = 0; s<x ;s++)
{
    Console.WriteLine(new String(' ',s)+string.Join(" ",a));
    a=a.Take(x-s-1).Select((v,i)=>(a[i+1]+v)%10).ToList();
}
}

इसे यहाँ आज़माएं


आप सूची के बजाय इनपुट के लिए एक सरणी का उपयोग करके 2 बाइट्स बचा सकते हैं। List<int> a-> int[] a, int x=a.Count-> int x=a.Length, .ToList()->ToArray()
सोक

0

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

f=mapM(\(r,s)->putStrLn$r++(s>>=(++" ").show)).zip(iterate(' ':)"").takeWhile(/=[]).iterate g where g(_:[])=[];g(y:p:ys)=mod(y+p)10:g(p:ys)

इनपुट को एक तर्क के रूप में लेता है, STDOUT को आउटपुट देता है।

Ungolfed संस्करण:

f = mapM (\(r, s) -> putStrLn $ r ++ (s >>= (++ " ") . show))
    . zip (iterate (' ' :) "")
    . takeWhile (/= [])
    . iterate sumTerms
    where sumTerms (_:[]) = []
          sumTerms (y:p:ys) = mod (y+p) 10 : sumTerms (p:ys)

0

पायथन 3, 97 बाइट्स

def f(x):print(*x);x[-1]==''or f(['']+[(x[i]+x[i+1])%10if''!=x[i]else''for i in range(len(x)-1)])

एक एकल अनुगामी न्यूलाइन प्रिंट करता है।

यह काम किस प्रकार करता है

def f(x):                            function with input of list of numbers
print(*x)                            print the old line of the triangle
x[-1]==''or...                       if no more numbers, stop...
(x[i]+x[i+1])%10if''!=x[i]else''...  ...else compute the next entry in the new line if
                                     possible...
...for i in range(len(x)-1)          ...for all relevant digit pairs...
['']+...                             ...concatenate with empty string to force new leading
                                     space...
f(...)                               ...and pass to function

Ideone पर इसे आज़माएं



0

जावास्क्रिप्ट (बाहरी पुस्तकालय का उपयोग करके) (198 बाइट्स)

n=>{a=_.From(n);b=a.Write(" ");c=1;while(++c){a=a.BatchAccumulate(2).Where(y=>y.Count()==2).Select(z=>z.Sum()%10);if(a.Count()==0){break;}b+="\r\n"+_.Range(0,c).Write(" ",x=>"")+a.Write(" ")}return b}

लिंक से संबंधित: https://github.com/mvegh1/Enumerable/

कोड स्पष्टीकरण: यह पुस्तकालय का उपयोग करना आसान था! बाइट्स में जीत नहीं होती है, लेकिन कोड बहुत क्रियाशील नहीं है और पढ़ने में आसान है। तो, इनपुट "n" पूर्णांक का एक सरणी है। इसे लाइब्रेरी में लोड करें, चर "a" में संग्रहीत। "b" रिटर्न स्ट्रिंग है, सम्मिलित स्ट्रिंग को "" सी के रूप में सीमांकक के रूप में b। C में संग्रहीत करें। वर्तमान पुनरावृत्ति, डालने के लिए रिक्त स्थान की संख्या निर्धारित करने के लिए इसका उपयोग करें। नोट: यह केवल 0-9 से इनपुट होने पर अच्छी तरह से काम करने लगता है। तब, जबकि सही है, कोड का एक निश्चित सेट दोहराएं। यह कोड आसन्न बैच बनाने के लिए है। वर्तमान गणना योग्य "a" के सेट, अर्थात यदि हमारे पास [1,2,3,4,5,6] हैं तो हमें [1,2], [2,3], [3,4], ... [ 6] ... फिर फ़िल्टर करें ताकि हमारे पास केवल आकार के बैच हों। 2. फिर हम मैप करते हैं कि बैचों के योगों का%% 10. यदि कोई खाली है, तो हम कर रहे हैं। और हम अपनी वापसी में नई लाइन जोड़ते हैं। अंत में वापसी ...

कुछ मिनट में आ रही तस्वीर।

यहाँ छवि विवरण दर्ज करें

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