एन-वें टेरनेरी


17

मैं n-वें टर्नरी को एक ternary के रूप में परिभाषित करता हूं जो n को लौटाता है और जिसका रूप है:

1 ? 2 ? 3 ? n - 1 ? n : 0 : 0 : 0  # n - 1 zeroes

एक फ़ंक्शन या पूरा कार्यक्रम लिखें जो इनपुट n को आउटपुट देगा या एन-वें टर्नेरी लौटाएगा। कोड-गोल्फ।

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

0 #=> undefined behaviour
1 #=> 1
2 #=> 1 ? 2 : 0
3 #=> 1 ? 2 ? 3 : 0 : 0
10 #=> 1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 10 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0

1000-वें त्रैमासिक मुझे लगता है कि इसके लिए किसी प्रकार का ज़ेन सद्भाव है।


1
क्या अनुगामी व्हाट्सएप की अनुमति है?
रिंक.टेंटेंड ।6

@ क्रि न, नो ट्रेनिंग स्पेस
कारिडोरक

1
चूंकि "टर्नरी" का अर्थ 3 है, तो क्या आपको इसे "एन-एरी" नाम नहीं देना चाहिए, जिसे यह गणित में संदर्भित किया गया है?
mbomb007

4
किसी टिप्पणी को "संपादित" करने का तरीका है: इसे हटाएं, और एक नया जोड़ें।
रेटो कोराडी

1
@RetoKoradi आप एक टिप्पणी संपादित कर सकते हैं अगर यह पोस्ट करने के पांच मिनट के भीतर है।
mbomb007

जवाबों:


8

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

अंतरिक्ष मुझे मार रहे हैं, उन्हें संभालने का एक बेहतर तरीका सोच रहे हैं।

+j" ? "SQ*tQ" : 0

यह सिर्फ एक संख्या से जुड़ता है " ? "और फिर दूसरे भाग को समेटता है।

+              String concatenation
 j" ? "        Join by the string
  SQ           1-indexed inclusive range to input
 *             String repetition
  tQ           Input - 1
  " : 0        String implicitly closed by end of program

इसे यहाँ ऑनलाइन आज़माएँ


10

CJam, 18 18 बाइट्स

ri,:)":?0"*2/ze_S*

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

व्याख्या

ri,:)          e# Generate the list 1..n.
":?0"*         e# Insert ":?0" between every two numbers.
2/             e# Split into pairs, e.g. 1:, ?0, 2:, ?0, ..., ?0, n.
z              e# First items in every pair before second items in every pair.
e_             e# Concatenate the two parts.
S*             e# Insert spaces.

12
मैं प्यार करता हूँ :)
एलेक्स ए।

9

रूबी, 31 बाइट्स

f=->n{[*1..n]*' ? '+' : 0'*~-n}

परीक्षा:

> f[1]
=> "1"
> f[7]
=> "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 : 0 : 0 : 0 : 0 : 0 : 0"

2
तो array * string== array.join string... दिलचस्प
कारिडोरक

यह वास्ताव में अच्छा है। जिज्ञासा से बाहर, जब आप करते हैं तो क्या होता है f[0]?
एलेक्स ए।

1
@AlexA। irb(main):007:0> f[0] ArgumentError: negative argument from (irb):6:in * from (irb):6:in block in irb_binding from (irb):7:in [] from (irb):7 from /usr/bin/irb:11:in <main>
कारिडोरक

4
@ कारिडोरक जोर और अनायास दोनों। अच्छा लगा।
एलेक्स ए।

2
@ डानिएरो चेतावनी: एंटी-स्ट्रिंग उत्पन्न हो सकती है
कारिडोरक

8

CJam, 19 बाइट्स

बस एक शुरुआत ...

ri_,:)'?*\(":0"*+S*

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

ri_                       e# Read the number as integer and make a copy of it on stack
   ,:)                    e# Convert the copy to array [1 .. n]
      '?*                 e# Join the numbers with a '?'. So we have [1 '? 2 '? ... '? n]
         \(               e# Swap the stack to get original integer on top. Decrement it by 1
           ":0"*          e# Get n-1 repeated ":0" string
                +S*       e# Join the two strings and fill it with spaces. 

इसे यहाँ ऑनलाइन आज़माएँ


हेक, 1 मिनट बहुत देर हो चुकी है।
डेनिस

3
वाह आप Cjam में कोडिंग में बहुत तेज़ हैं: O
Caridorc

@ डेनिस मुझे लगता है कि आपका प्रारंभिक समाधान, जो ऑप्टिमाइज़र के पहले समाधान के समान था, वास्तव में पहले था। कम से कम मुझे पूरा यकीन है कि मैंने इसे पहले देखा था। लेकिन आपकी अवधि के बाद का समय अपडेट किया गया था जब आपने इसे अनुग्रह अवधि के भीतर संपादित किया था।
रेटो कोराडी

1
@RetoKoradi उनकी पोस्ट आईडी 52870 है। मेरा 52869 :) है
ऑप्टिमाइज़र

आह, ठीक है, मुझे इस साइट पर हटाए गए पोस्ट देखने की अनुमति नहीं है। दोनों ने मेरे लिए एक ही समय में पॉप अप किया होगा, और मैंने केवल शीर्ष पर ध्यान दिया था। मुझे लगता है कि एसई को अनुग्रह अवधि के दौरान संपादन करते समय पोस्ट करने के लिए कुछ कायरता भरा सामान हो सकता है। अन्यथा आप एक खाली स्थान धारक को पोस्ट कर सकते हैं, और अनुग्रह अवधि के भीतर सामग्री को भर सकते हैं, यह देखने के लिए कि आपके पास पहला उत्तर था, और इसमें वास्तव में प्रारंभ से उपयोगी सामग्री थी क्योंकि अनुग्रह अवधि के भीतर संपादन ट्रैक नहीं होते हैं।
रेटो कोराडी

6

ब्रेनफक, 305

(STDIN से इनपुट नंबर के बिना, नीचे देखें संपादित करें)

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

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

यह 32768 (एल्गोरिथम की 16-बिट सीमा) तक इनपुट के लिए काम करता है। यह अनुगामी स्थानों का उत्पादन नहीं करता है और इनपुट के लिए भी काम करता है 1:

input    output
0        [infinite loop (til underflow)]
1        "1"
2        "1 ? 2 : 0"
4        "1 ? 2 ? 3 ? 4 : 0 : 0 : 0"
etc.

जल्दी से चलना:

सेटअप (97 बाइट्स)

-                                 Decrease input (position 0)
[->+>+<<]  >>>                    Copy input twice to the right and 
                                      shift 3 positions to the right
++++[>++++++++<-]>   [<+>-]       Precalculate number 32 (=" ") at position 3
+++++++[>+++++++++<-]>  [<+>-]    Precalculate number 63 (="?") at position 4
++++++[>++++++++<-]>    [<+>-]    Precalculate number 48 (="0") at position 5
++<<<<                            Precalculate number 2 for later use. This number
                                      will be printed in each iteration. (position 6)

पहला भाग (181 बाइट्स)

>>>+.-<<<                Go to the char "0" we saved, increase it, print it,
                             decrease it and go back (this prints "1" everytime)
[                        While our second copy of the number isn't zero
    >.>.<.>>>                Move to " ", print, move to "?", print,
                                 move to " " again, print, move to our
                                 number at the end which is initially 2

    [>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]
        ++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<
        [.[-]<]<             Algorithm to print the number at current position

    +<<<<                    Increase our number at the end and return to the beginning
-]                       Decrease the loop variable

दूसरा भाग (27 बाइट्स)

>>-----<<<        Move to our "?" char and decrease it by 5 to get ":"
[-                While our first copy of the number isn't zero decrease it
   >>.>.<.>>.<<<<     Print " ", print ":", print " ", print "0"
]

यदि इसे 8 ब्रेनफक कमांड्स को 3 बिट्स पर मैप करने की अनुमति दी जाएगी, तो यह प्रोग्राम 114 बाइट्स और अन्य 3 बिट्स ले जाएगा

Unary, ~ 4.08 * 10 ^ 275 बाइट्स

यह यहाँ के लिए बहुत लंबा हो सकता है, लेकिन यह सिर्फ 408452257862560239329948606295286361112603208650130608525040044700379331457759667646985586658469601803889628246410788572492437928714867190270708935427798983714797786123292750743771225096145575210320040188155473030775033228313350778616384531426430459309802833775612506568528463 शून्य है और Brainfuck कार्यक्रम के रूप में ही काम करता है।

संपादित करें : मैं गड़बड़ कर दिया, इस कार्यक्रम वास्तव में उपयोगकर्ता इनपुट नहीं लेता है, यह सिर्फ इनपुट के रूप में वर्तमान सूचक मूल्य का उपयोग करता है। एक नंबर को पार्स करने में सक्षम होने के लिए एक पूरी बहुत अधिक आवश्यकता होगी और मुझे ऐसा करने के लिए परेशान नहीं किया जा सकता है।

तो यह प्रोग्राम में सीधे दर्ज किए गए मान के साथ काम करता है (प्रोग्राम से पहले n + "+" जोड़कर) लेकिन एसटीडीआईएन के साथ नहीं


5

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

f=m=>(g=k=>k-m?k+` ? ${g(k+1)} : 0`:m)(1)

बाहरी फ़ंक्शन fइनपुट मान लेता है और फिर gबेस केस के लिए परीक्षण करने के लिए अधिकतम के रूप में इनपुट मान का उपयोग करके, बीच के तार से स्ट्रिंग का निर्माण करने के लिए आंतरिक फ़ंक्शन को पुन: कॉल करता है।

Ungolfed:

function f(max) {
    function g(count) {
        if(count==max) {
            // base case: return max for the center
            return max;
        } else {
            // recursive case: build outer shell around center
            return count + " ? " + g(count+1) + " : 0";
        }
    }

    return g(1);
}



3

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

g n='1':foldr(\x s->" ? "++show x++s++" : 0")""[2..n]

यह कैसे काम करता है: एक खाली स्ट्रिंग के साथ शुरू करके अंदर से स्ट्रिंग का निर्माण करें और वर्तमान संख्या और ए को जोड़ने के साथ nनीचे से लूपिंग करें । अंत में सबके सामने रख दिया ।2?: 01

एक अलग दृष्टिकोण (@ मौरिस के लिए धन्यवाद अब 9 बाइट्स छोटे):

हास्केल, 60 51 बाइट्स

 f n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])

यह कैसे काम करता है: प्रत्येक के लिए एक शाब्दिक 1द्वारा पीछा किया जाता ? <x>है <x>और [2..n]उसके बाद : 0प्रत्येक के लिए एक स्थिर होता <x>है [2..n]


आपके 60 बाइट्स के आधार पर एक दृष्टिकोण जो 51 तक नीचे आता है:g n='1':((=<<[2..n])=<<[(" ? "++).show,\x->" : 0"])
लिन

वास्तव में, आप इसे केवल 51 के (\_->" : 0")=<<[2..n]साथ सीधे बदल सकते हैं[2..n]>>" : 0"
लिन के


3

जूलिया, ४४ 31 बाइट्स

n->join(1:n," ? ")*" : 0"^(n-1)

यह एक अनाम फ़ंक्शन बनाता है जो पूर्णांक को इनपुट के रूप में स्वीकार करता है और एक स्ट्रिंग लौटाता है। इसे कॉल करने के लिए, इसे एक नाम दें, जैसे f=n->...

पहले हम पूर्णांक 1 से n तक एक साथ जुड़ते हैं , प्रत्येक ?को एक स्ट्रिंग के साथ और रिक्त स्थान को अलग करते हैं । फिर हम इस स्ट्रिंग को " : 0"दोहराते हैं n -1 बार ।

उदाहरण:

julia> f(1)
"1"

julia> f(3)
"1 ? 2 ? 3 : 0 : 0"

julia> f(0)
can't repeat a string -1 times

2

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

n=>[for(i of Array(n).keys())i+1].join` ? `+' : 0'.repeat(n-1)

मुझे नहीं पता कि मैं इसे और अधिक बढ़ा सकता हूं। लेकिन यह एक बहुत ही सीधा समाधान है

केवल फ़ायरफ़ॉक्स:

var f=n=>[for(i of Array(n).keys())i+1].join` ? `+' : 0'.repeat(n-1)

alert(f(+prompt('Input: ')));

ES5 समकक्ष:

// Most browsers now support .repeat
String.prototype.repeat = String.prototype.repeat || function(n){var _n = '', i = 0; for (;i < n; i += 1){_n+=this};return _n}
                                                             //Function                         
function f(n){a=[];for(i of Array(n).keys()){a.push(i+1)};return a.join(' ? ')+' : 0'.repeat(n-1)}

alert(f(+prompt('Input: ')))


2

कॉफीस्क्रिप्ट, 52 बाइट्स

f=(n)->s='';s=' ? '+n--+s+' : 0'while n;s.slice 3,-4

व्याख्या

f=(n)->
 s = ''                                # initialize string
 s = ' ? ' + n-- + s + ' : 0' while n  # prepend and append in decrementing loop
 s.slice 3,-4                          # chop off leading ?, trailing 0 and whitespace

2

एसडब्ल्यूआई-प्रोलॉग, 90 बाइट्स

a(X):-Y is X-1,\+ (between(1,Y,L),\+writef('%w ? ',[L])),write(X),writef('%r',[' : 0',Y]).

निश्चित रूप से जीतने के लिए नहीं जा रहा है, लेकिन \+ (between(1,TopBound,N),\+do_something(N))पूर्णांक के अनुक्रम पर कुछ दोहराने के लिए निर्माण काफी दिलचस्प है।


2

स्विफ्ट 145 (135 डब्ल्यू / ओ व्हॉट्सएप)

func t(n:Int) -> String {
    let a = (1..<n).reverse().reduce("") {" ? \($1)\($0) : 0"}
    return a.substringFromIndex(advance(a.startIndex, 3))
}

क्या आप विश्वास कर सकते हैं कि प्रतिस्थापन का हिस्सा वास्तव में अभिव्यक्ति का उत्पादन करने वाले भाग से अधिक लंबा है।


1
होगा प्यार स्विफ्ट <3 मैं वास्तव में चाहता हूं कि वे इसे बना दें ताकि आप स्ट्रिंग्स को इंटगर सूचकांकों जैसे str[1]या के साथ एक्सेस कर सकें str[0...5]। बेशक आप एक छोटा सा विस्तार कर सकते हैं, लेकिन मेरी इच्छा है कि मानक पुस्तकालय ने इसे सक्षम किया
Kametrixom

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

हाल ही में मैंने कोड गोल्फिंग के लिए स्विफ्ट का उपयोग करने के लिए वास्तव में उपयोग किया है, मेरे स्विफ्ट उत्तर पर एक नज़र है
केमेट्रिक्स

2

पर्ल, 36 बाइट्स

say join(" ? ",1..$_)." : 0"x($_-1)

35 पात्र +1 के लिए -n

साथ दौड़ो:

echo 10 | perl -nE'say join(" ? ",1..$_)." : 0"x($_-1)'

2

जावा, 71

आरसीबी के जवाब पर टिप्पणी करने के बाद मैं खुद की मदद नहीं कर सका । तो यहाँ एक और जावा (71 वाह की तरह जब जावा सबसे लंबे समय तक नहीं है!)

String t(int n){String s=""+n;for(;--n>0;)s=n+" ? "+s+" : 0";return s;}

2

जावा, 125 88 बाइट्स

मूल

String f(int n){if(n==1)return"1";String s="",e="";for(int i=1;i<n;i++){s+=i+" ? ";e+=i==n-1?": 0":": 0 ";}return s+n+" "+e;}

अच्छे स्वरूपण और परिवर्तनशील नामों के साथ:

String nAry(int n) {
    if (n == 1) {
        return "1";
    }
    String start = "", end = "";
    for (int i = 1; i < n; i++) {
        start += i + " ? ";
        end += (i == n - 1) ? ": 0" : ": 0 ";
    }
    return start + n + " " + end;
}

बेहतर - जैक अम्मो की टिप्पणियों के लिए धन्यवाद:

String f(int n){String s="",e=s;for(int i=1;i<n;){s+=i+++" ? ";e+=" : 0";}return s+n+e;}

1
आपको केवल स्थान के लिए खाते में ई के लिए अपील करने के लिए उस त्रैमासिक ऑपरेटर की आवश्यकता नहीं है, बस मान लें कि आपको हमेशा बृहदान्त्र के सामने स्थान की आवश्यकता है e+=" : 0";। तब आप पोस्ट-इंक्रीमेंटिंग के द्वारा 1 बाइट बचा सकते हैं जब मैं इसका उपयोग फ़ोरलोप लाइन पर करने के बजाय करता हूँ। for(int i=1;i<n;){s+=i+++" ? ";आपके रिटर्न स्टेटमेंट को n के बाद जोड़े गए स्थान की आवश्यकता नहीं होगी return s+n+e;। आप 1 बाइट का उपयोग करके भी बचा सकते हैं e=s। इसके अलावा, अगर लूप लॉजिक के लिए शुरुआत में स्टेटमेंट अनावश्यक है, तो वैसे भी उस परिणाम की गारंटी होगी।
जैक अम्मो

@JackAmmo उत्कृष्ट सुझाव, धन्यवाद! यदि स्टेटमेंट व्हाट्सएप से बचने के लिए आवश्यक था, लेकिन लूप लॉजिक के लिए आपके सुधार के बाद अब नहीं। मैंने बदलावों को शामिल किया है और आपके उत्तर को बदल दिया है।
RCB

1

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

टेम्पलेट स्ट्रिंग्स की मदद से मेरे कॉफीस्क्रिप्ट उत्तर के रूप में समान दृष्टिकोण, मदद करता है। String.prototype.repeatकई पात्रों की लागत।

f=n=>{for(s=``;n;)s=` ? ${n--+s} : 0`;return s.slice(3,-4)}

डेमो

फ़ायरफ़ॉक्स केवल अब के लिए है, क्योंकि यह ES6 है।

f=n=>{for(s=``;n;)s=` ? ${n--+s} : 0`;return s.slice(3,-4)}

// DEMO
console.log = x => document.body.innerHTML += '<p>' + x

console.log(f(1));
console.log(f(3));
console.log(f(10));



1

अजगर 2, 63 60 58 56

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

आसान समाधान: (63)

n=input()
for i in range(n-1):print-~i,'?',
print`n`+' : 0'*~-n

संपादित करें : मैं वास्तव में एक पुनरावर्ती समारोह की कोशिश करना चाहता था। यहाँ यह है: (56)

f=lambda n,c=1:`c`+(' ? '+f(n,c+1)if c<n else~-n*' : 0')

संपादित करें : किसी को भी पता है कि यह काम क्यों नहीं कर रहा है? मैं के सूचकांक के साथ एक सूची की कोशिश की c<n, लेकिन यह एक ढेर अतिप्रवाह त्रुटि के कारण काम नहीं किया। इसके साथ ही:

f=lambda n,c=1:`c`+((c<n)*(' ? '+f(n,c+1))or~-n*' : 0')

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

@FryAmTheEggman ठीक है, धन्यवाद। मैं इस तरह की स्थिति पहले कभी नहीं हुआ है।
mbomb007

1

रु , 77 बाइट्स

(\d+)/(_)^^(\1)
+^_(_+)/\1 _\1
_(_+)$/_\1( : 0)^^((^^\1))
(__+)/? (^^\1)
^./1

लाइव डेमो और परीक्षण के मामले।

स्पष्टीकरण:

(\d+)/(_)^^(\1)

N अंडरस्कोर की श्रृंखला में संख्या का विस्तार करें।

+^_(_+)/\1 _\1

बार-बार रिक्त स्थान से अलग, अंडरस्कोर की एक श्रृंखला बनाते हैं। जैसे यह में बदल ___जाएगा _ __ ___

_(_+)$/_\1( : 0)^^((^^\1))

अंडरस्कोर के अंतिम सेट (लंबाई N के) N-1 के उदाहरणों पर लागू करें : 0

(__+)/? (^^\1)

पहले के ?लिए EXCEPT द्वारा लंबाई, पूर्वकाल के प्रत्येक समूह को बदलें ।

^./1

नंबर 1 के साथ पहले वाले को बदलें।

प्रारूप के कारण, यह भी 0अच्छी तरह से संभालता है : यह सिर्फ खाली स्ट्रिंग को प्रिंट करता है।


1

स्विफ्ट, 79 75 बाइट्स

let f={{$0+$1}((1..<$0).reduce(("1","")){($0.0+" ? \($1+1)",$0.1+" : 0")})}

fसंक्षेप में एक Intपैरामीटर के साथ एक फ़ंक्शन के रूप में घोषित किया जाता है जो एक रिटर्न देता हैString

साथ काम करता है n >= 1और जब रनटाइम पर क्रैश होता है n == 0। कोई अनुगामी व्हाट्सएप नहीं हैं

संपादित करें: 2 * 2 वर्णों को हटाने का प्रबंधन, क्योंकि स्ट्रिंग प्रक्षेप हमेशा सबसे छोटा नहीं होता है

संपादित करने के लिए ध्यान दें: इस कोड को संकलित करने के लिए हमेशा के लिए (यह बंद नहीं होता है) लेता है, लेकिन यह निश्चित रूप से होता है यदि संकलक इसे संभाल सकेगा। इस संकलन को प्राप्त करने से पहले संस्करण को देखें


1

> <> , 32 + 3 = 35 बाइट्स

:l(?vln" ? "ooo0$
"ooo>nl?!;" : 

ध्यान दें कि दूसरी पंक्ति में एक अनुगामी स्थान है। +3 -vध्वज के लिए है, जैसे दौड़ते हैं

$ py -3 fish.py ternary.py -v 2
1 ? 2 : 0

एक कोड बिंदु के रूप में इनपुट लेना तरह

i:l(?vln" ? "ooo0$!
 "ooo>nl?!;" :

34 बाइट्स है, लेकिन मैं उपरोक्त संस्करण को पसंद करता हूं क्योंकि यह परीक्षण करना आसान है और यह वैसे भी नहीं जीतेगा।

व्याख्या

बहुत कुछ छद्म-पुनरावृत्ति और दुरुपयोग चल रहा है, तो चलो एक नज़र डालें।

पहली पंक्ति "1 ? 2 ? ... n-1 ? " भाग को प्रिंट करती है । स्टैक केवल इनपुट के साथ शुरू होता है n, -vध्वज के लिए धन्यवाद , और हम निम्नलिखित करते हैं:

:l(?v           If (length of stack + 1 > n), go to the second line
ln              Print the length of the stack
" ? "ooo        Print the reverse of " ? " (but hey, palindromes)
0$              Push 0 and swap, keeping n on top and increasing the 
                length of the stack by 1

> <> टॉरोइडल है, इसलिए उपरोक्त लूप में निष्पादित होता है जब तक कि स्टैक के nसाथ शीर्ष पर नहीं होता हैn-1 नीचे शून्य के पर नहीं होता है, जिस बिंदु पर यह दूसरी पंक्ति में जाता है।

पहली बार दूसरी पंक्ति को निष्पादित किया जाता है, nनिर्देश चलाया जाता है, nस्टैक के शीर्ष पर मुद्रण होता है। यह सिर्फ n-1जीरो छोड़ता है , और हम निम्नलिखित कार्य करते हैं, एक लूप में भी:

l?!;            If the stack is empty, terminate
" : "ooo        Print the reverse of " : " (but hey, palin...)
n               Print one of the 0s, decreasing the stack's length by 1
                This reuses the same n instruction from before

" ? "ooo "?" (लेकिन हे, palindromes) के रिवर्स को प्रिंट करें, वास्तविक स्ट्रिंग को प्रिंट करने की तुलना में उल्टा प्रिंट कर रहा है?
कारिडोरक जूल

@Caridorc हां, क्योंकि> <> केवल स्टैक को पॉप करके चार-चार-चार प्रिंट कर सकते हैं :)
Sp3000

sp3000 जानकर अच्छा लगा।
कारिडोरक जूल

1

स्काला, 78 71 52 50 बाइट्स

def f(n:Int)=(1 to n).mkString(" ? ")+" : 0"*(n-1)

1

उद्देश्य-सी, 346 बाइट्स

-(void)printTernaryOfInt:(int)ternary{NSMutableString *outString=@"".mutableCopy; for (int i=1;i<=ternary;i++) {[outString appendString:[NSString stringWithFormat:@" ? %i",i]];}[outString deleteCharactersInRange:NSMakeRange(0, 2)];for (int i=1;i<ternary;i++) {[outString appendString:[NSString stringWithFormat:@" : 0"]];}NSLog(@"%@",outString);}

में लाना 0के लिए intया कुछ भी नकारात्मक एक को जन्म देती है NSRangeExceptionकी वजह से outStringयुक्तnil । यह iOS 2.0 और बाद में और मैक ओएस एक्स के कई नवीनतम संस्करणों पर चलना चाहिए।

कोड का टूटना:

-(void)printTernaryOfInt:(int)ternary{ ... }

उद्देश्य-सी में मानक फ़ंक्शन की घोषणा।

NSMutableString *outString=@"".mutableCopy;

उत्पादन के लिए जाने के लिए एक स्ट्रिंग बनाता है outString, और यह परिवर्तनशील बनाता है। (दूसरे शब्दों में, इसे पढ़ा और लिखा जा सकता है।

for (int i=1;i<=ternary;i++) {[outString appendString:[NSString stringWithFormat:@" ? %i",i]];}

स्ट्रिंग के पहले भाग को आउटपुट में जोड़ता है।

[outString deleteCharactersInRange:NSMakeRange(0, 2)];

यह सुनिश्चित करने के लिए स्ट्रिंग की शुरुआत को साफ किया ? 1जाता है 1। नोट: यदि 0दिया गया था, तो यह वह जगह है जहां NSRangeExceptionसूचकांक नहीं होने के कारण ऐसा होता 1

for (int i=1;i<ternary;i++) {[outString appendString:[NSString stringWithFormat:@" : 0"]];}

स्ट्रिंग के दूसरे भाग को स्ट्रिंग में जोड़ता है।

NSLog(@"%@",outString);}

स्ट्रिंग का उपयोग करके वापस थूकता है NSLogऔर फ़ंक्शन बंद कर देता है।

आउटपुट:

इनपुट करने 0से यह क्रैश लॉग होता है:

    2015-07-11 05:15:28.036 Example App[41665:2134488] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString deleteCharactersInRange:]: Range or index out of bounds'
*** First throw call stack:
(
    0   CoreFoundation                      0x009b5746 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x0063ea97 objc_exception_throw + 44
    2   CoreFoundation                      0x009b566d +[NSException raise:format:] + 141
    3   CoreFoundation                      0x00981813 mutateError + 259
    4   CoreFoundation                      0x009818c1 -[__NSCFString deleteCharactersInRange:] + 65
    5   Example App                         0x000e3785 -[ViewController printTernaryOfInt:] + 277
    6   Example App                         0x000e3645 -[ViewController placeOrder:] + 133
    7   libobjc.A.dylib                     0x006547cd -[NSObject performSelector:withObject:withObject:] + 84
    8   UIKit                               0x00d75a40 -[UIApplication sendAction:to:from:forEvent:] + 99
    9   UIKit                               0x00d759d2 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
    10  UIKit                               0x00eb613a -[UIControl sendAction:to:forEvent:] + 69
    11  UIKit                               0x00eb6557 -[UIControl _sendActionsForEvents:withEvent:] + 598
    12  UIKit                               0x00eb57c1 -[UIControl touchesEnded:withEvent:] + 660
    13  UIKit                               0x00dcdcaa -[UIWindow _sendTouchesForEvent:] + 874
    14  UIKit                               0x00dce786 -[UIWindow sendEvent:] + 792
    15  UIKit                               0x00d8c681 -[UIApplication sendEvent:] + 242
    16  UIKit                               0x00d9cab8 _UIApplicationHandleEventFromQueueEvent + 21484
    17  UIKit                               0x00d702e7 _UIApplicationHandleEventQueue + 2300
    18  CoreFoundation                      0x008d706f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    19  CoreFoundation                      0x008ccb7d __CFRunLoopDoSources0 + 253
    20  CoreFoundation                      0x008cc0d8 __CFRunLoopRun + 952
    21  CoreFoundation                      0x008cba5b CFRunLoopRunSpecific + 443
    22  CoreFoundation                      0x008cb88b CFRunLoopRunInMode + 123
    23  GraphicsServices                    0x029e42c9 GSEventRunModal + 192
    24  GraphicsServices                    0x029e4106 GSEventRun + 104
    25  UIKit                               0x00d740b6 UIApplicationMain + 1526
    26  Example App                         0x000e3cfa main + 138
    27  libdyld.dylib                       0x02d76ac9 start + 1
    28  ???                                 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

1 यह देता है:

2015-07-11 05:06:02.360 Example App[41665:2134488]  1

2 यह देता है:

2015-07-11 05:06:07.613 Example App[41665:2134488]  1 ? 2 : 0

7 यह देता है:

2015-07-11 05:06:12.147 Example App[41665:2134488]  1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 : 0 : 0 : 0 : 0 : 0 : 0

200 यह देता है:

2015-07-11 05:06:35.552 Example App[41665:2134488]  1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ? 10 ? 11 ? 12 ? 13 ? 14 ? 15 ? 16 ? 17 ? 18 ? 19 ? 20 ? 21 ? 22 ? 23 ? 24 ? 25 ? 26 ? 27 ? 28 ? 29 ? 30 ? 31 ? 32 ? 33 ? 34 ? 35 ? 36 ? 37 ? 38 ? 39 ? 40 ? 41 ? 42 ? 43 ? 44 ? 45 ? 46 ? 47 ? 48 ? 49 ? 50 ? 51 ? 52 ? 53 ? 54 ? 55 ? 56 ? 57 ? 58 ? 59 ? 60 ? 61 ? 62 ? 63 ? 64 ? 65 ? 66 ? 67 ? 68 ? 69 ? 70 ? 71 ? 72 ? 73 ? 74 ? 75 ? 76 ? 77 ? 78 ? 79 ? 80 ? 81 ? 82 ? 83 ? 84 ? 85 ? 86 ? 87 ? 88 ? 89 ? 90 ? 91 ? 92 ? 93 ? 94 ? 95 ? 96 ? 97 ? 98 ? 99 ? 100 ? 101 ? 102 ? 103 ? 104 ? 105 ? 106 ? 107 ? 108 ? 109 ? 110 ? 111 ? 112 ? 113 ? 114 ? 115 ? 116 ? 117 ? 118 ? 119 ? 120 ? 121 ? 122 ? 123 ? 124 ? 125 ? 126 ? 127 ? 128 ? 129 ? 130 ? 131 ? 132 ? 133 ? 134 ? 135 ? 136 ? 137 ? 138 ? 139 ? 140 ? 141 ? 142 ? 143 ? 144 ? 145 ? 146 ? 147 ? 148 ? 149 ? 150 ? 151 ? 152 ? 153 ? 154 ? 155 ? 156 ? 157 ? 158 ? 159 ? 160 ? 161 ? 162 ? 163 ? 164 ? 165 ? 166 ? 167 ? 168 ? 169 ? 170 ? 171 ? 172 ? 173 ? 174 ? 175 ? 176 ? 177 ? 178 ? 179 ? 180 ? 181 ? 182 ? 183 ? 184 ? 185 ? 186 ? 187 ? 188 ? 189 ? 190 ? 191 ? 192 ? 193 ? 194 ? 195 ? 196 ? 197 ? 198 ? 199 ? 200 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0 : 0

1

सी, 84 78 बाइट्स

सी, भले ही यह फ़ंक्शन के रूप में सबसे छोटा नहीं है:

i;f(n){while(++i<n)printf("%i ? ",i);printf("%i",n);while(--i)printf(" : 0");}

गोल्फ के नाम पर, intप्रकार निर्दिष्टकर्ता के दूर छोड़ दिया है i, fऔर nक्योंकि यह डिफ़ॉल्ट है। iयह एक वैश्विक चर है और यह शून्य के लिए चूक है। fमान वापस नहीं करता है, लेकिन यह केवल एक चेतावनी का कारण बनता है। printfनहीं है #include'डी। चलाने के लिए, यहां एक पूर्ण कार्यक्रम संस्करण है:

#include <stdio.h>

i;f(n){while(++i<n)printf("%i ? ",i);printf("%i",n);while(--i)printf(" : 0");}

int main(int argc, char *argv[]){
    if(argc != 2){
        return 1;
    }
    f(atoi(argv[1]));
    puts("");
}

आप इसका उपयोग करके इसे छोटा कर सकते हैं for(printf(...);--i;)
lirtosiast

1

सी, 63 बाइट्स

पुन: प्रयोज्य कार्य, एक तर्क के रूप में n लेता है।

i;f(n){for(i=1;i<2*n;i++)printf(i-1?n/i?" ? %d":" : 0":"1",i);}

Ungolfed और टिप्पणी की गई (बहुत सीधा):

int f(int n) {
    int i;

    // 1 ... n, n+1 ... 2n-1
    for(i = 1; i < 2*n; i++) {
        // If i == 1, prints "1"
        // If i <= n, prints " ? %d", i (i = 2 ... n)
        // Else, prints " : 0" (i = n+1 ... 2n-1)
        printf(
            i-1 ?
                n/i ?
                    " ? %d" :
                    " : 0" :
                "1",
        i);
    }
}

1

आम लिस्प, 84

(format t "~{~A ? ~}~@*~{~[~;~:;0~^ ? ~]~}" (loop for i from 1 to (read) collect i))

सबसे पहले, (loop for i from 1 to (read) collect i)1 से पूर्णांक की एक सूची बनाता है जो कुछ भी डाला जाता है, जो फ़ंक्शन के एकमात्र तर्क के रूप में उपयोग किया जाता है। लेकिन इसका असली जादू नियंत्रण स्ट्रिंग में है जो लाइन शोर की तरह दिखता है। "~{~A ? ~}"पहले तर्क के भीतर संग्रहीत पूरी सूची पर पुनरावृत्त करता ?है, पहली छमाही के लिए प्रत्येक संख्या को आउटपुट करता है । ~@*पहले तर्क के लिए तर्क सूची को रीसेट करता है। ~{~[~;~:;0~^ ? ~]~}सूची में दोहराया गया, 0 ?प्रत्येक तर्क के लिए आउटपुट की खपत हुई, लेकिन यदि तर्क 0 या 1 है तो कुछ भी आउटपुट नहीं कर रहा है।

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