तिर्यक त्रिकोण


22

इसका विचार मुख्य रूप से BIO 2017 q1 से है । मुझे अपनी बाइनरी अनुक्रम चुनौती से इस चुनौती को पोस्ट करने का विचार मिला , क्योंकि बहुत से लोग इसे पसंद करने लगे।

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

नियम

टर्नेरी (3 बेस) में अंकों के अनुक्रम में ले लो; यह पूर्ववर्ती शून्य की संख्या के साथ एक स्ट्रिंग, एक सरणी या संख्यात्मक मान के रूप में हो सकता है।

त्रिकोण में प्रत्येक पंक्ति के लिए, नीचे की एक पंक्ति तब तक उत्पन्न होती है जब तक कि अंतिम पंक्ति में केवल एक अंक न हो। दो अन्य अंकों के नीचे एक अंक खोजने के लिए, यह अंक इसके ऊपर के दो के समान होगा यदि ये दो अन्य अंक समान हैं। अन्यथा, यह वह अंक होगा जो दोनों में से किसी के बराबर नहीं है। यहाँ एक उदाहरण है:

0 0 1 2 0 1 2 2
 0 2 0 1 2 0 2
  1 1 2 0 1 1
   1 0 1 2 1
    2 2 0 0
     2 1 0
      0 2
       1

आपसे केवल अंतिम पंक्ति लौटने की उम्मीद है।

अपने कोड को छोटा करें।

परीक्षण के मामलों

0 -> 0
11 -> 1
10 -> 2
000 -> 0
012 -> 1
21102 -> 2
201021 -> 1
111111 -> 1
1020202020 -> 2
0212121210 -> 0

जवाबों:


9

भूसी , 9 बाइट्स

%3←ΩεẊo_+

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

व्याख्या

मुख्य विचार दो अंकों की मैपिंग को एक के रूप में f (a, b) = (-ab)% 3 के रूप में गणना करना है । गोल्फ उद्देश्यों के लिए हम बहुत अंत तक मोडुलो में देरी कर सकते हैं।

   Ωε       Apply the following function until the list is only one
            element in length.
     Ẋo       Apply the following function to pairs of adjacent values.
       _+       Add the two values and negate the result.
  ←         Take the first (and only) element of this list.
%3          Take it modulo 3.

सिद्धांत रूप में, प्रत्येक तत्व को संबंधित द्विपद गुणांक द्वारा गुणा करके और सम -लंबाई सूची के लिए योग को -1 से गुणा करके परिणाम की गणना करना संभव है , लेकिन मुझे कम बाइट में ऐसा करने का तरीका नहीं पता है।


6

MATL , 10 बाइट्स

td"HYCEsI\

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

अंकों की प्रत्येक जोड़ी के लिए, कोड दो बार राशि modulo 3 की गणना करता है। इस प्रक्रिया को इनपुट माइनस 1 की लंबाई के रूप में कई बार दोहराया जाता है।

t        % Implicit input: array of length n. Duplicate
d        % Consecutive differences. Gives an array of length n-1
"        % For each (that is, do n-1 times)
  HYC    %   2-column matrix where each column is a sliding block of length 2
  E      %   Times 2, element-wise
  s      %   Sum of each column
  I\     %   Modulo 3
         % Implicit end. Implicit display

3

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

f=lambda a,*l:-(f(*l)+f(a,*l[:-1]))%3if l else a

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

क्रमशः पहले और अंतिम तत्वों को हटाने वाले उपनलियों पर पुनरावृत्ति होती है।

यह पायथन 3 में क्लीनर होगा यदि यह वास्तव में अनपैक कर सकता है f=lambda a,*b,c:...


3

इमोजीकोड , 242 बाइट्स

🐋🍨🍇🐖🔢➡️🚂🍇🔂i⏩➖🐔🐕1 0🍇🔂j⏩0i🍇🍊❎😛🍺🔲🐽🐕j🚂🍺🔲🐽🐕➕1j🚂🍇🐷🐕j➖➖3🍺🔲🐽🐕j🚂🍺🔲🐽🐕➕1j🚂🍉🍉🍉🍎🍺🔲🐽🐕0🚂🍉🍉

मेरे C उत्तर के समान एल्गोरिथ्म का उपयोग करता है इसे ऑनलाइन आज़माएं!



2

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

f[a]=a
f(h:t)=mod(-f t-f(h:init t))3

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

अधिक सममित पर 1 बाइट बचाता है:

f[a]=a
f l=mod(-f(tail l)-f(init l))3

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

यह विचार सरल है: क्रमशः पहले और अंतिम तत्व को हटाने वाले सब्लिस्ट्स पर फ़ंक्शन की पुनरावर्ती गणना करें और उनके साथ संयोजन करें \a b -> mod(-a-b)3। यह zipWith'इन फ़्यूज़न' से कम लगता है ।

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

f[a]=mod a 3
f l=f$zipWith((-).(0-))l$tail l

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



2

जे, 23 15 बाइट्स

3&(|2+/\-)~<:@#

@ मीलों के लिए धन्यवाद

पुराना समाधान:

3|2&(-@+/\)^:(#>1:)^:_]

मार्टिन एंडर के समाधान से प्रेरित:

व्याख्या

3|2&(-@+/\)^:(#>1:)^:_]    | Whole program
                      ]    | Seperates the argument from the _ (infinity)
           ^:(#>1:)^:_     | Do while the length is greater than one
  2&(-@+/\)                | Inverse of the sum of adjacent elements
3|                         | Modulo 3

2
15 बाइट्स के साथ3&(|2+/\-)~<:@#
मील

@ मीलों, हा, मैं इसे 19 बाइट्स के लिए पोस्ट करने वाला था 3|((2<.#)-@+/\])^:_- तुम्हारा वास्तव में बहुत अच्छा है।
योना

0

बैच, 122 बाइट्स

@set/an=2,s=i=l=0
@for %%e in (%*)do @set/al+=1,n^^=3
@for %%e in (%*)do @set/as+=%%e*n,s%%=3,n*=l-=1,n/=i+=1
@echo %s%

द्विपद विस्तार का उपयोग करता है। जैसा कि @MartinEnder बताते हैं, यदि मानों की संख्या (जो पहले लूप में गिना जाता है) सम है, तो निगेटिव (मॉडुलो 3) होना आवश्यक है, इसलिए या nतो 1या उसके 2अनुसार सेट किया गया है। दूसरा लूप तब द्विपद गुणांक के माध्यम से योग की गणना करता है।


0

एपीएल (डायलॉग) , 17 बाइट्स

{3|3-2+/⍵}⍣{1=≢⍺}

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

कैसे?

2+/⍵ - प्रत्येक दो आसन्न वस्तुओं को योग करें

3- - वेक्टरकृत तीन से घटाना

3| - वेक्टरकृत modulo तीन से

- दोहराओ जब तक...

1=≢⍺ - केवल एक आइटम बचा है


0

एपीएल + विन, 30 28 बाइट्स

2 बाइट्स ने उरीएल के सौजन्य से बचाया।

n←⎕⋄¯1↑∊⍎¨(⍴n)⍴⊂'n←3|3-2+/n'

स्पष्टीकरण:

n←⎕ Prompt for screen input of the form: 0 0 1 2 0 1 2 2

'n←3|3-2+/n' Successive rows are 3 mod 3 minus successive digit pairs.

(⍴n)⍴⊂ Create a nested vector of the row code, one element per row. 

¯1↑∊⍎¨ Execute each element of row code, flatten result and take final value.

यह एक पंक्ति में एपीएल में लूपिंग कोड लिखने का एक तरीका है।


आपको 3|
यूरिल

@Uriel। धन्यवाद।
ग्राहम

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