संख्या त्रिकोण


11

श्रेय

इस कोड-गोल्फ चुनौती के लिए प्रेरणा के लिए रैंड अल थोर के पत्र-आधारित प्रश्न के लिए मेरा धन्यवाद ।

पृष्ठभूमि

इस चुनौती की प्रकृति रैंड द्वारा उनके "ए ट्राइएंगल फॉर्मेड थ्री लेटर्स" में वर्णित एल्गोरिदम पर आधारित है:

  • 10 अक्षरों के क्रम से शुरू करें जिनमें से प्रत्येक X, Y, या Z है।
  • प्रत्येक पंक्ति के तहत, अगली पंक्ति का निर्माण निम्नानुसार है। यदि दो आसन्न पत्र समान हैं, तो उनके नीचे एक ही पत्र लिखें; यदि वे अलग हैं, तो उनके नीचे तीसरा पत्र लिखें।

आप तब तक पिछले चरण को दोहराएंगे जब तक कि आपकी दसवीं पंक्ति में एक अक्षर न हो।

चुनौती

हम उपरोक्त एल्गोरिथम पर एक गणितीय स्पिन लगाने जा रहे हैं:

  • आइए 10 अंकों के अनुक्रम से शुरू करें, प्रत्येक को एक स्थान से अलग किया गया है, और जिनमें से प्रत्येक 1, 2 या 3 है।
  • प्रत्येक पंक्ति के तहत, अगली पंक्ति का निर्माण निम्नानुसार है। यदि दो आसन्न अंक समान हैं, तो उनके नीचे एक ही अंक लिखें; यदि वे अलग हैं, तो उनके नीचे तीसरा अंक लिखें।
  • पिछले चरण को तब तक दोहराएं जब तक आपके पास एक अंतिम संख्या न हो।

इसलिए, इस एल्गोरिथ्म का अनुसरण करते हुए, यदि पंक्ति के साथ शुरू होता है 1 2 3 3 1 3 1 3 1 2, उदाहरण के लिए, निम्न त्रिकोण उत्पन्न होता है:

Input: 1 2 3 3 1 3 1 3 1 2

Output:

1 2 3 3 1 3 1 3 1 2
 3 1 3 2 2 2 2 2 3 
  2 2 1 2 2 2 2 1  
   2 3 3 2 2 2 3   
    1 3 1 2 2 1    
     2 2 3 2 3     
      2 1 1 1      
       3 1 1       
        2 1        
         3         

मैं संख्या त्रिकोण में सभी अंकों का योग जानने के लिए उत्सुक हूं, इसलिए इन सभी अंकों को जोड़ दूंगा, और इस कुल को ग्यारहवीं पंक्ति में डाल दूंगा, पहली पंक्ति में अंतिम अंक के लिए सही-सही। तो, हमारा नंबर त्रिकोण कुछ इस तरह दिखेगा (मेरे उदाहरण में रिक्तियां .दिखाने के लिए चरित्र द्वारा नीचे दिए गए स्थान दर्शाए गए हैं ।)

Input: 1 2 3 3 1 3 1 3 1 2

Output:

1.2.3.3.1.3.1.3.1.2
.3.1.3.2.2.2.2.2.3.
..2.2.1.2.2.2.2.1..
...2.3.3.2.2.2.3...
....1.3.1.2.2.1....
.....2.2.3.2.3.....
......2.1.1.1......
.......3.1.1.......
........2.1........
.........3.........
................109

आपकी चुनौती कोड लिखने की है जो एक इनपुट स्ट्रिंग / सरणी / आदि के साथ शुरू हो सकती है। मेरे उदाहरण के अनुसार, दस अंक, और फिर संख्या त्रिकोण बनाने वाली दस पंक्तियों को उत्पन्न करने के लिए एल्गोरिथ्म लागू करें, इसके बाद 11 वीं पंक्ति होगी जो सही-औचित्य के साथ सभी अंकों का कुल प्रदर्शित करेगी।

परिक्षण

इस स्ट्रिंग का परीक्षण आपके चयन के दस अंकों के यादृच्छिक रूप से उत्पन्न स्ट्रिंग के साथ किया जा सकता है, या नीचे दिए गए स्निपेट से उत्पन्न ...

c1=()=>('1331123221'+(Math.random()*(1<<24)|0).toString(4)).replace(/0/g, "").slice(-10).split("").join(" ");

$("#btn").click(function(){
  $("#str").val(c1());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str"><button id="btn">Get numbers</button>
<br>
Please use this snippet to generate a starting row for testing your code. Alternatively, you can also use a string of your choice, so long as it's ten digits (ranging from 1 to 3), separated by single spaces.

नियम

  1. कोड-गोल्फ नियम लागू होते हैं, इसलिए सबसे कम संख्या में बाइट चुनौती जीतते हैं। इस घटना में कि एक ही स्कोर के साथ दो प्रविष्टियाँ हैं, विजेता को अप-वोटों की संख्या के आधार पर सम्मानित किया जाएगा।
  2. हम 11 पंक्तियों, 19 वर्णों के बाद मूल रूप से क्या हैं ... आप अपने अंतिम आउटपुट को कैसे प्रस्तुत करते हैं, यह पूरी तरह से आप पर निर्भर है: सरणी, कंसोल, फ़ाइल आउटपुट, STDOUT, आदि, इसलिए कृपया जो भी आउटपुट विधि आपको पसंद आए, उसका उपयोग करें। अपने लाभ के लिए काम करें। आउटपुट में एकमात्र नियम यह है कि ऊपर के समान प्रारूप में प्रत्येक पंक्ति में 19 वर्णों के साथ हमारी 11 पंक्तियाँ हैं ...
  3. यदि यह आपके कोड को मदद करता है, तो अंकों के लिए जो भी विभाजक है उसका उपयोग करें ... बस याद रखें कि देयता एक योगदान कारक हो सकती है।
  4. कोई मूर्ख कमियां नहीं
  5. इनपुट की हार्ड-कोडिंग की अनुमति नहीं है। इस कोड का उद्देश्य ऐसा है कि इसका उपयोग हर बार अलग-अलग इनपुट के साथ अलग-अलग परिणाम देने के लिए किया जा सकता है। 1 1 1 1 1 1 1 1 1 1उदाहरण के लिए हार्ड-कोडिंग , एल्गोरिथ्म के पूरे बिंदु को पूरी तरह से नकार देता है।

आप सभी के साथ आने के लिए देख सकते हैं!



1
क्या मुझे एक विभाजक की आवश्यकता है यदि मेरा त्रिकोण केंद्र-संरेखित है (जो इस प्रकार सुपाठ्य है)?
जंगहवां मिन सिप

1
ऐसा लग रहा है इस अंतरिक्ष के बिना (मेरा उत्तर अंतरिक्ष, जो 10 बाइट्स लेता है)।
जंगहवान मिन

2
अनुमति मिली
वैलीवेस्ट

1
ध्यान दें कि 10 की स्ट्रिंग (या 3 की एक शक्ति से अधिक संख्या 1) अंकों के लिए, अंतिम अंक को स्ट्रिंग में पहले और आखिरी अंक से गणना की जाती है; अन्य अंकों में कोई अंतर नहीं है।
नील

जवाबों:


1

05AB1E , 32 26 बाइट्स

DvÐOˆðýðN×.ø,ü+3%3^}\¯O19j

व्याख्या

D                 # duplicate input
v                 # for y,N in input,len(input): (10 times do)
 Ð                # triplicate current list
 Oˆ               # sum one copy and add it to global array
 ðý               # merge one copy on spaces
   ðN×.ø          # surround it with N spaces
        ,         # and print it
 ü+               # reduce one copy by addition
   3%             # modulus 3
     3^           # XOR 3
                  # this is the list sent to the next iteration
}                 # end loop
\                 # drop empty list left over from last iteration of loop
 ¯O               # sum the global array giving the triangles total sum
   19j            # join with spaces up to 19 chars

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


7

गणितज्ञ, 104 97 90 94 बाइट्स

{Grid[List@*Row/@#],#~Total~2}~Column~Right&[NestList[3-Mod[+##,3]&@@@Partition[#,2,1]&,#,9]]&

व्याख्या

Partition[#,2,1]

विभाजन की लंबाई 2 में इनपुट, 1 विभाजन ऑफसेट।

3-Mod[+##,3]&@@@

प्रत्येक विभाजन लेता है, और इसी आउटपुट की गणना करता है।

एक चाल यहाँ शामिल है। मैंने दो संख्याएँ जोड़ीं, mod 3 लिया और उस परिणाम को घटाया 3. जिससे वांछित संख्या मिलती है। (उदाहरण 3 - ((2 + 1) आधुनिक 3) = 3)

NestList[ ... ,9]

उपरोक्त प्रक्रिया को नौ बार दोहराता है, आउटपुट के रूप में सभी पुनरावृत्तियों को देता है।

Grid[List@*Row/@#]

प्रत्येक पुनरावृत्ति को पंक्तियों में प्रारूपित करें, और एक त्रिकोण बनाते हुए पूरी चीज़ को एक कॉलम (केंद्र संरेखित) में रखें।

#~Total~2

सभी नंबरों का कुल लें।

{...}~Column~Right

त्रिभुज और कुल को मिलाएं, और पूरी चीज़ को दाएं संरेखित करें (त्रिभुज पहले से ही संरेखित है, इसलिए इसका संरेखण प्रभावित नहीं होता है)।


1
एक ही फ़ंक्शन के साथ प्रेरित दृष्टिकोण जो समान और विभिन्न माता-पिता दोनों प्रकार की देखभाल करता है ... मुझे यह पसंद है!
4

3

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

@Neil को 1 बाइट धन्यवाद दिया गया

a=>a.map((_,i)=>(q=" ".repeat(i))+(a=a.map(c=>(x+=r=i&&p^(p=c)||c,r),p=i&&a.shift())).join` `+q,x=0).join`
`+`
`+(" ".repeat(18)+x).slice(-19)

मैंने विभिन्न भागों के संयोजन की कोशिश की, लेकिन यह 5 बाइट्स से अधिक लंबा हो गया:

a=>[...a.map((_,i)=>(a=a.map(c=>(x+=r=i&&p^(p=c)||c,r),p=i&&a.shift())).join` `+" ".repeat(i),x=0),x].map(q=>(" ".repeat(18)+q).slice(-19)).join`
`

अच्छा कार्य! क्या JHM की चाल 3-((x+y)%3)इस कोड को कम करने में मदद कर सकती है?
वैलीवेस्ट

2
नहीं। p^c||pपहले से ही काफी छोटा है :-)
ETHproductions

अब, मुझे यह कैसे याद आया? बेशक! XOR फ़ंक्शंस यहाँ अच्छी तरह से काम करते हैं!
वैलीवेस्ट

1
XOR ?! मैं ऐसा सोच भी नहीं सकता था। कहा जा रहा है कि, दुख की बात है, XOR का उपयोग करने से मेरा कोड लंबा हो जाता है: P
JungHwan Min

के लिए i?p^(p=c)||p:cआप उपयोग कर सकते हैं i&&p^(p=c)||c?
नील

2

माणिक, 134 101 बाइट्स

JHM की modulo ट्रिक का उपयोग करना।

->a{b=*a
(0..8).map{|i|[" "*i,a=a.each_cons(2).map{|x,y|b<<n=3-(x+y)%3
n}]*" "}<<"%19d"%b.reduce(:+)}

इसे eval.in पर देखें: https://eval.in/649993


2

CJam ,  44  40 बाइट्स

l~{S*\_S*\2ew{:+3%3^}%2$N@}A%_s:~:+sJSe[

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

व्याख्या

l~       e# Read and evaluate input.
{        e# Map this block over i in the range [0 1 ... 9].
  S*     e#   Get a string of i spaces (the indentation).
  \_     e#   Swap with the current line of trits and duplicate it.
  S*     e#   Join the trits with spaces.
  \2ew   e#   Swap with the other copy of the trits and get all consecutive pairs.
  {      e#   Map this block over the pairs...
    :+   e#     Sum the pair.
    3%   e#     Modulo 3.
    3^   e#     XOR 3.
         e#     This expression (x+y)%3 ^ 3 computes the required mapping.
  }%     e#   Now this is the next line.
  2$     e#   Copy the indentation (to pad the lines to equal length).
  N      e#   Push a linefeed.
  @      e#   Pull up the next line.
}A%      e# The result of this is a nested array whose string representation is
         e# the required triangle.
_s       e# Duplicate and flatten into a string.
:~       e# Eval each character which gives a list of all the trits.
:+       e# Sum that.
s        e# Turn the sum into a string.
JSe[     e# Left-pad it with spaces to width 19.

हमेशा की तरह, बहुत प्रभावशाली! आप अब तक लीड में हैं!
7

1
@ वैलीवेस्ट थैंक्स। :) बस पाइथ, जेली और MATL की प्रतीक्षा करें। ;)
मार्टिन एंडर

वास्तव में, मैं यह जानने के लिए उत्सुक हूं कि गोल्फस्क्रिप्ट समाधान कैसा दिखेगा ...?)
वैलीवेस्ट

ओह, एक SQL समाधान पोस्ट करने के लिए किसी को भी? ;)
7

1

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

एक अपेक्षाकृत सरल पुनरावृत्त समाधान।

L=input()
s=0
for i in range(len(L)):
    print" "*-~i+" ".join(`L`[1::3]);s+=sum(L);N=L;L=[]
    for a,b in zip(N,N[1:]):L+=[list({1,2,3}-{a,b}),[a]][a==b]
print"%19s"%s

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



0

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

एक सरणी को इनपुट के रूप में लेता है और पुनरावर्ती रूप से अल्पविराम से अलग त्रिकोण बनाता है।

f=(s,p=`
`,S=0)=>p+(s[0]?s+f(s.map((v,i)=>(S+=v,v^s[i-1]||v)).slice(1),p+' ',S):(p+S).slice(-9))

console.log(f([1,2,3,3,1,3,1,3,1,2])); // reference example
console.log(f([3,3,2,1,3,1,2,1,2,1])); // random example
console.log(f([1,1,1,1,1,1,1,1,1,1])); // all ones (test case for sum < 100)

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