এন-ম টার্নারি


17

আমি এন-তৃতীয় বার্ষিকীকে একটি টার্নারি হিসাবে সংজ্ঞায়িত করি যা এন ফিরে আসে এবং ফর্মটি রয়েছে:

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

একটি ফাংশন বা সম্পূর্ণ প্রোগ্রাম লিখুন যা একটি ইনপুট দেয় এন-ত্রি ত্রৈমাসিকের আউটপুট দেয় বা ফিরে আসে। কোড-গলফ।

Testcases

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
পেছনের সাদা স্থান অনুমোদিত?
rink.attendant.6

@ রিঙ্ক করুন, প্রশিক্ষণের কোনও জায়গা নেই
ক্যারিডর্ক

1
যেহেতু "টেরিনারি" এর অর্থ 3, তাই আপনার এটির নাম "এন-আরি" রাখা উচিত নয়, এটি গণিতের ক্ষেত্রে কী বলা হয়েছে?
mbomb007

4
একটি মন্তব্য "সম্পাদনা" করার উপায় হ'ল: এটি মুছুন এবং একটি নতুন যুক্ত করুন।
রেটো কোরাডি

1
@ রিটোকোরাডি কোনও মন্তব্য পোস্ট করার পাঁচ মিনিটের মধ্যে থাকলে আপনি এটি সম্পাদনা করতে পারেন।
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

সিজেম, 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

সিজেম, 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
বাহ আপনি সিজেমে কোডিংয়ে বেশ দ্রুত: ও
ক্যারিডর্ক

@ ডেনিস আমি মনে করি আপনার প্রাথমিক সমাধানটি, যা অপটিমাইজারদের প্রথম সমাধানের সাথে অভিন্ন ছিল, এটি আসলে প্রথম ছিল। কমপক্ষে আমি নিশ্চিত যে আমি এটি প্রথম পপ আপ দেখেছি pretty আপনার পোস্টের সময় আপডেট করা হয়েছিল যখন আপনি এটিকে সময়কালের মধ্যে সম্পাদনা করেছিলেন।
রেটো কোরাাদি

1
@ রিটোকোরাদি তার পোস্টের আইডি 52870 Mine খনি আমার 52869 :)
অপ্টিমাইজার

আহ, ঠিক আছে, আমার এই সাইটে মুছে ফেলা পোস্ট দেখার অনুমতি নেই। দুজনেই অবশ্যই আমার জন্য একই সময়ে পপ আপ করতে পেরেছিলেন এবং আমি কেবল শীর্ষটি লক্ষ্য করেছি। আমি মনে করি না যে এসই গ্রেট পিরিয়ডের মধ্যে সম্পাদনা করার সময় পোস্ট করার জন্য কিছু মজার স্টাফ করতে পারে। অন্যথায় আপনি একটি খালি জায়গা ধারক পোস্ট করতে পারেন এবং অনুগ্রহকালীন সময়ের মধ্যে সামগ্রীটি পূরণ করতে পারেন যাতে এটির প্রথম দৃষ্টিভঙ্গির মতো দেখতে এটি তৈরি হয় এবং এটিতে শুরু থেকেই দরকারী সামগ্রী অন্তর্ভুক্ত থাকে কারণ গ্রেস পিরিয়ডের সম্পাদনাগুলি ট্র্যাক করা হয় না।
রেটো কোরাদি

6

ব্রেইনফাক, 305

(এসটিডিআইএন থেকে ইনপুট নম্বর ছাড়াই, নীচে সম্পাদনা দেখুন)

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

আমি এই সংখ্যাটি প্রিন্ট করতে এই অ্যালগরিদম ব্যবহার করেছি , যা পুরো প্রোগ্রামের 155 বাইট নেয় up

এটি 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 বিট নিতে পারে

ইউনারি, ~ 4.08 * 10 ^ 275 বাইট

এখানে জন্য অত্যন্ত দীর্ঘ হতে পারে, কিন্তু এটা ঠিক 408452257862560239329948606295286361112603208650130608525040044700379331457759667646985586658469601803889628246410788572492437928714867190270708935427798983714797786123292750743771225096145575210320040188155473030775033228313350778616384531426430459309802833775612506568528463 শূন্য এবং Brainfuck প্রোগ্রাম হিসাবে একই কাজ করে।

সম্পাদনা : আমি গণ্ডগোল করেছি, এই প্রোগ্রামটি সত্যই ব্যবহারকারীর ইনপুট নেয় না, এটি কেবল বর্তমান পয়েন্টারের মানটিকে ইনপুট হিসাবে ব্যবহার করে। কোনও সংখ্যাকে পার্স করতে সক্ষম হওয়ার জন্য আরও অনেক বেশি প্রয়োজন হবে এবং আমি এটি করতে বিরক্ত হব না।

সুতরাং এটি প্রোগ্রামে সরাসরি প্রবেশ করা একটি মান নিয়ে কাজ করে (প্রোগ্রামের আগে n + "যোগ করে) তবে STDIN এর সাথে নয়


5

জাভাস্ক্রিপ্ট (ES6), 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

জুলিয়া, 44 31 বাইট

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

এটি একটি নামবিহীন ফাংশন তৈরি করে যা কোনও পূর্ণসংখ্যাকে ইনপুট হিসাবে গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে। এটি কল করার জন্য, এটির একটি নাম দিন f=n->...

প্রথমে আমরা পূর্ণসংখ্যা 1 থেকে n এর সাথে একসাথে যোগ করি ?এবং প্রতিটি এবং স্পেসকে একক স্ট্রিংয়ে পৃথক করে। তারপর আমরা এই স্ট্রিং লিখবেন " : 0"পুনরাবৃত্তি এন -1 বার।

উদাহরণ:

julia> f(1)
"1"

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

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

2

জাভাস্ক্রিপ্ট ES7, 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

@ কামেট্রিক্সম আপেল একবার প্রথম বিটাতে এটির অনুমতি দিয়েছিল, তবে বিভিন্ন ইউনিকোড এনকোডিং আপনাকে এটি করতে বাধা দেয়। এটি মূলত কারণ কিছু প্রতীক দুটি বাইট বা তার বেশি দীর্ঘ এবং কিছু না। সুতরাং একই সূচক সহ বিভিন্ন এনকোডিংগুলিতে একই অক্ষর আনার গ্যারান্টি নেই। আমার বিবরণটি সঠিক নাও হতে পারে তবে মূলত এ কারণেই অ্যাপল কুরুচিপূর্ণ মুখের স্ট্রিং সূচক সিনট্যাক্সটি প্রবর্তন করেছিল।
বেন লু

সাম্প্রতিককালে আমি কোড
গল্ফিংয়ের জন্য সুইফ্টটি

2

পার্ল, 36 বাইট

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

35+1জন্য অক্ষর -n

সাথে চালান:

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

2

জাভা, 71

আরসিবির উত্তরে মন্তব্য করার পরে আমি নিজেকে সাহায্য করতে পারিনি । সুতরাং এখানে অন্য জাভা রয়েছে (like১ এর মতো যখন জাভা সবচেয়ে দীর্ঘ নয়!)

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। এছাড়াও, শুরুতে if স্টেটমেন্টটি অপ্রয়োজনীয় যেহেতু লুপ লজিক যেভাবেই ফলাফলটির গ্যারান্টি দিতে পারে।
জ্যাক আম্মো

@ জ্যাকআ্যাম্মো দুর্দান্ত টিপস, ধন্যবাদ! হোয়াইটস্পেসকে অনুসরণ করার জন্য যদি বিবৃতিটি প্রয়োজনীয় ছিল তবে লুপ যুক্তির জন্য আপনার উন্নতির পরে আর হবে না। আমি পরিবর্তনগুলি অন্তর্ভুক্ত করেছি এবং আপনার উত্তরটিকে আপলোড করেছি।
আরসিবি

1

জাভাস্ক্রিপ্ট (ES6), 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

@ ফ্রাইএইমডিজম্যান ঠিক আছে, ধন্যবাদ। এর আগে এমন পরিস্থিতি আমার আর কখনও হয়নি।
mbomb007

1

টাকা , 77 বাইট

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

লাইভ ডেমো এবং পরীক্ষার কেস।

ব্যাখ্যা:

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

সংখ্যাটিকে এন আন্ডারস্কোরের একটি সিরিজে প্রসারিত করুন।

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

বারবার স্পেস দ্বারা পৃথক করে আন্ডারস্কোরগুলির একটি ব্যাপ্তি তৈরি করুন। যেমন এটি পরিণত ___হবে _ __ ___

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

আন্ডারস্কোর (দৈর্ঘ্যের এন) এর এন -1 উদাহরণগুলির শেষ সেটটিতে যুক্ত করুন : 0

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

আন্ডারস্কোরগুলির প্রতিটি গ্রুপকে তার দৈর্ঘ্যের দ্বারা প্রতিস্থাপিত করুন, পূর্বে ?, প্রথমটির জন্য নির্ধারণ করুন CE

^./1

প্রথমটি 1 নম্বর দিয়ে প্রতিস্থাপন করুন।

বিন্যাসের কারণে এটিও 0ভালভাবে পরিচালনা করে: এটি খালি স্ট্রিংটি প্রিন্ট করে।


1

সুইফট, 79 75 বাইট

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

fসুস্পষ্টভাবে একটি Intপ্যারামিটারের সাথে একটি ফাংশন হিসাবে ঘোষণা করা হয় যা a প্রদান করে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 "?" এর বিপরীতটি মুদ্রণ করুন (তবে হেই, প্যালিনড্রোমগুলি) প্রকৃত স্ট্রিং মুদ্রণের চেয়ে বিপরীতটি আরও ছোট মুদ্রণ করছে?
ক্যারিডরক

@ ক্যারিডরক হ্যাঁ, কারণ> <> কেবল একটি স্ট্যাক পপিং করে
চারটি বাই প্রবন্ধ

sp3000 জেনে ভাল লাগল।
ক্যারিডরক


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। এটি আইওএস ২.০ এবং তারপরে এবং ম্যাক ওএস এক্সের সর্বশেষতম সংস্করণে চলতে হবে should

কোডের একটি ভাঙ্গন:

-(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");}

Golfing নামে 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;)
লিটোসিয়াসট

1

সি, 63 বাইট

পুনরায় ব্যবহারযোগ্য ফাংশন, একটি আর্গুমেন্ট হিসাবে n নেয়।

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

অসম্পূর্ণ এবং মন্তব্য করা হয়েছে (বেশ সোজা)

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

কমন লিস্প, ৮৪

(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 হয় তবে কিছুই আউটপুট দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.