দ্য এভার এমপ্ল্লিফিং জিগজ্যাগ


24

একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি ধনাত্মক পূর্ণসংখ্যক এন নেবে এবং কেবল প্রয়োজনীয় রেখাগুলি ব্যবহার করে এই পরিবর্ধক জিগজ্যাগ প্যাটার্নের প্রথম এন সংখ্যাগুলি আউটপুট করবে:

                                         26
                                       25  27                                      .
         10                          24      28                                  .
        9  11                      23          29                              .
 2     8     12                  22              30                          44
1 3   7        13              21                  31                      43
   4 6           14          20                      32                  42
    5              15      19                          33              41
                     16  18                              34          40
                       17                                  35      39
                                                             36  38
                                                               37

সুতরাং এন যদি হয় 1তবে আউটপুট হয়

1

যদি এন হয় 2তবে আউটপুট হয়

 2
1

এন 3হলে আউটপুট হয়

 2
1 3

এন 4হলে আউটপুট হয়

 2
1 3
   4

এন 10হলে আউটপুট হয়

         10
        9
 2     8
1 3   7
   4 6
    5

এন 19হলে আউটপুট হয়

         10
        9  11
 2     8     12
1 3   7        13
   4 6           14
    5              15      19
                     16  18
                       17

ইত্যাদি।

নোট

  • জিগজ্যাগের প্রতিটি শিখর বা গর্ত 1পূর্বের শিখর বা গর্তের চেয়ে লাইন থেকে আরও লাইন দূরে তার বিন্দুতে পৌঁছায় ।

  • এন সীমাবদ্ধ নয় 44। জিগজ্যাগ একই প্যাটার্নে বৃদ্ধি পায় এবং বৃহত্তর এন সমর্থন করা উচিত।

  • চিত্রযুক্ত হিসাবে একাধিক সংখ্যা সহ সংখ্যাগুলি কেবল তাদের কোণে "স্পর্শ" করা উচিত। এন 100ও তার বেশি হলে এটি কাজ করে তা নিশ্চিত করুন ।

  • আউটপুটে কোনও optionচ্ছিক ট্রেলিং নিউলাইন ছাড়া খালি (বা কেবল স্থান) লাইন থাকা উচিত নয়।

  • যে কোনও লাইনটিতে প্রচুর পরিমাণে চলার স্থান থাকতে পারে।

স্কোরিং

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। টাইব্রেকার এর আগের উত্তর।


সর্বাধিক সম্ভব এন কি?
জুলি পেলেটিয়ার

@ জুলিপেল্টিয়ের তত্ত্ব অনুসারে কোনটি নেই তবে আপনি ধরে নিতে পারেন এটি 2 2 16 এর চেয়ে কম হবে।
ক্যালভিনের শখ 2

নিয়ন্ত্রণের অক্ষর ব্যবহারের অনুমতি রয়েছে বা আমরা কি কেবলমাত্র ডিজিট স্পেস এবং লাইনফিডে সীমাবদ্ধ?
ডেনিস

2
@ ডেনিস যাক না বলুন। কেবল ডিজিট / স্পেস / নিউলাইন।
ক্যালভিনের শখ

1
কারও উচিত এটি রসিকতা হিসাবে সেই ফর্ম্যাটে ওইআইএস-এ জমা দেওয়া উচিত।
ড্যানএম্যান

উত্তর:


10

জেলি , 41 37 29 বাইট

RDµḌ’½Ċ-*_\x©L€Ṣ.ị®ạ€⁶ẋj"FZj⁷

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

RDµḌ’½Ċ-*_\x©L€Ṣ.ị®ạ€⁶ẋj"FZj⁷  Main link. Argument: n (integer)

R                              Range; yield [1, ..., n].
 D                             Decimal; yield A =: [[1], ..., [1, 0], ...].
  µ                            Begin a new, monadic chain. Argument: A
   Ḍ                           Undecimal; convert back to falt range.
    ’                          Decrement to yield [0, ..., n-1].
     ½Ċ                        Take the square root and round up (ceil).
       -*                      Elevate -1 to each rounded square root.
         _\                    Cumulatively reduce by subtraction.
                               This yields [1, 2, 1, 0, -1, 0, ...], i.e., the
                               vertical positions of the digits in A.
             L€                Compute the length of each list in A.
           x                   Repeat the nth position l times, where l is the
                               nth length.
            ©                  Copy the result to the register.
               Ṣ               Sort.
                .ị             At-index 0.5; yield the last and first element,
                               which correspond to the highest and lowest position.
                  ạ€®          Take the absolute difference of each position in the
                               register and the extrema.
                               This yields the number of spaces above and below
                               the integers in r as a list of pairs.
                     ⁶ẋ        Replace each difference with that many spaces.
                         F     Flatten the list A.
                       j"      Join the nth pair of strings of spacing, separating
                               by the nth digit in flat A.
                          Z    Zip/transpose the result.
                           j⁷  Join, separating by linefeeds.

2
আপনার ভাষায় (জেলি) এমন কোনও ক্রিয়াকলাপ কেন তৈরি করবেন না যা আপনি যখন ছিলেন তখন কয়েকটা অক্ষরে তা করতে পারে?
জুলি পেলেটিয়ার

19
@ জুলিপেলিটিয়ার একটি ভাল গল্ফিং ল্যাঙ্গুয়েজ লেখার শিল্পটি হ'ল নির্দেশাবলী (এবং বাক্য গঠন / ভাষা শব্দার্থবিজ্ঞান) এর একটি সেট নিয়ে আসে যা আপনাকে যথাসম্ভব বিভিন্ন কাজের জন্য সংক্ষিপ্ত সমাধান লেখার অনুমতি দেয়, একটি খুব নির্দিষ্ট একটি সমাধান করতে সক্ষম না হয়ে এবং একটি একক বাইটে চ্যালেঞ্জ স্বাক্ষরিত। একটি ভাল গল্ফিং ভাষা প্রকৃতপক্ষে খুব শক্তিশালী এবং অভিব্যক্তিযুক্ত হয়ে থাকে, কেবল বিল্ট-ইনগুলির সংকলন হওয়ার বিপরীতে যা তারা গণনা করা নির্দিষ্ট ফাংশন ব্যতীত কোনও কিছুর জন্য অকেজো।
মার্টিন ইন্ডার

@JuliePelletier এবং এটি PPCG দঃপূঃ নিয়ম বিরুদ্ধে যেতে হবে
Bálint

8

পিএইচপি, 211 177 164 163 বাইট

সঙ্গে শিখর পূর্বাভাস $n($x, $y)আউটপুট কার্সার ব্যবহার করে উভয় দিক এবং অ্যারেটিকে গতিশীলভাবে বাড়ান ।

নম্বরগুলি সারিবদ্ধ হয় str_pad()এবং চূড়ান্ত আউটপুট হ'ল implode()স্ট্রিংগুলির অ্যারে ( $g)।

for($x=0,$d=-1,$h=$n=2,$y=$a=1;$a<=$argv[1];$y+=$d){$g[$y]=str_pad($g[$y],$x).$a;$x+=strlen($a);if($a++==$n){$h+=2;$n+=$h-1;$d*=-1;}}ksort($g);echo implode(~õ,$g);

এটি অনলাইন পরীক্ষা!

আপডেট: অপ্রয়োজনীয় অ্যারে_প্যাড () থেকে মুক্তি পেয়ে 34 বাইট সরানো হয়েছে। আপডেট 2: অনুসরণ করুন @ সন্নিবেশকারীর নামটি আরও খানিকটা ছোট করার জন্য এখানে here আপডেট3: লিনের পরামর্শ অনুসরণ করে ~ imp দিয়ে আরও একটি বাইট সংরক্ষণ করুন যা ল্যাটিন -১ চারসেটের ব্যবহার চাপিয়ে দেয়। (অনলাইন পিএইচপি এমুলেটরটিতে উপলব্ধ নেই সুতরাং সেখানে অন্তর্ভুক্ত নেই)


এই কোড সম্পর্কে কেবল একটি প্রশ্ন .. আপনি একটি নির্দিষ্ট উপাদান অ্যাক্সেস করার আগে অ্যারে $ g শুরু করতে হবে না? মানে, এটিকে একটি দৈর্ঘ্য দেওয়া বা সারিগুলি সন্নিবেশ করা? আমি পিএইচপি নিয়ে খুব অভিজ্ঞ নই, তাই এটি আমার কাছে কেবল অদ্ভুত দেখাচ্ছে ... ধন্যবাদ
ইয়োতম সালমন

না। একবার আপনি সংজ্ঞা দিলে $arr = [];আপনি উল্লেখ করতে পারেন $arr[anything]। কিছু ক্ষেত্রে আউটপুট বিজ্ঞপ্তি হবে তবে সেগুলি এখানে উপেক্ষা করা হবে। নোট করুন যে এর মতো পড়ার জিনিসগুলি সম্ভবত কোনও ভাষা শিখতে আপনাকে বেশি সহায়তা করবে না। আপনার মন্তব্য আমাকে অনুধাবন করেছে আমি এটিকে আরও সংক্ষিপ্ত করে তুলতে পারি যদিও প্রথমদিকে আমি ভেবেছিলাম আমার অ্যারে প্যাড করা দরকার তবে আমি তা করি না। :)
জুলি পেলেটিয়ার

হাহাহা সাহায্য করার জন্য খুশি;) ঠিক বুঝতে পেরেছি যে পিএইচপি-তে একটি অ্যারে এবং ডিকশনারি একইভাবে আরম্ভ করা হয় এবং সিনট্যাক্সের দিকে তাকানোর সময় সম্পূর্ণ একই হয় (কেন, পিএইচপি ?!)
ইয়োটাম সালমন

কিছু ছোটখাটো উন্নতি - ১4৪ বাইট : for($x=0,$d=-1,$h=$n=2,$y=$a=1;$a<=$argv[1];$y+=$d){$g[$y]=str_pad($g[$y],$x).$a;$x+=strlen($a);if($a++==$n){$h+=2;$n+=$h-1;$d*=-1;}}ksort($g);echo implode("⏎",$g);(সত্যিকারের নতুন লাইনের সাথে new প্রতিস্থাপন করুন
সন্নিবেশকের নাম এখানে

আমি বিশ্বাস করি যদি আপনি আপনার এনকোডিং অধিকার স্থাপন (ল্যাটিন -1, না হল UTF-8), দুই বাইট বিকল্প নেই করার "⏎"
লিন

8

পাইথ, 60 53 52 46 42 39 38 36 34 32 31 বাইট

39: এটি এখন জেলিটির বাগ-ফিক্সড সংস্করণের সাথে সমান এবং আমি ডেনিসের প্রতিযোগিতামূলক সংস্করণটিও গল্ফ করেছি!

38: আমি ডেনিসের বাইরে গল্ফ!

৩ 36: আমি আবার ডেনিসকে ছাপিয়ে গেলাম!

34: তার বাগ-স্থির সংস্করণের চেয়েও কম!

31: 32 -> 31 ডেনিসকে ধন্যবাদ।

J1K.u+N=J_WsI@Y2JtQZjsM.t.e ++, *] * dl`hkabhSK`hk *] * dl`hkabeSKKd 
J1K.u+N=J_WsI@Y2JtQZjsM.t.eX *] * dl`hkhaeSKhSKabhSKhkKd 
J1K.u + + N=J_WsI@Y2JtQZ=-RhSKKjsM.t.eX *] * dl`hkheSKbhkKd 
J1K.u+N=J_WsI@Y2JtQQj-#dsMC.eX *] * dl`hkheSKbhkK 
J1j- # dscC] * dssmC + কিউবিএইচএম = + জেড = জে_ডব্লিউএসআই @ টিডি 
2 
জে জেজে- # ডিএসএমসিএমএক্স *] *; লহডিকিউ + কিউ = + জেড = জে_ডব্লিউএসআই @ টিডি 2 জেএইচড 
জে 1 জে- # ডিএসএমসিএমএক্স *] *; লডহিউকিউ + কিউ = জেড = জে_ডব্লিউ জে 1 
জে 1j - # ডিএসএমসিএমএক্স *] *; l`hdyQ + কিউ = + জেড = @ _ বিজেএসআই @ td2h জে- # ডিএসএমসিএমএক্স *] *; l`hdyQ + কিউ = + জাস্টি% s @ টিডি 2 2 
জে- # ডিএসএমসিএমএক্স *] *; এল dy এইচডিইউ + কিউ = + জেড @ _বি 1.ই @ ডি 2 এ 
জেকিজেড- # ডিএসএমসিএমএক্স *] *; l`hdyQ = + জে _ _1.ই @ ডি 2 
জ জিকিউজ- # ডিএসএমসিএমএক্স *] *; l`hdJ = + কিউ @ _বি 1। ই @ d2h
 d2h j- # dsMCmX *] *; l`hdyQ = + প্রশ্ন @ _B1.E @ d2h
j- # dsMCmX *] *; l`hdyQ=+Q^_1.E@d2h

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

j-#dsMCmX*]*;l`hdyQ=+Q^_1.E@d2h      input: Q
j-#dsMCmX*]*;l`hdyQ=+Q^_1.E@d2hdQ    implicit filling arguments

       m                        Q    for each number d from 0 to Q-1:
                           @d2           yield the square root of d.
                         .E              yield its ceiling.
                      ^_1                raise -1 to that power. this
                                         yields the desired direction.
                   =+Q                   increment Q by this amount.

               hd                        yield d+1.
              `                          yield its string representation.
             l                           yield its length.
           *;                            repeat " " for that number of times
          ]                              yield a list containing the string above.
         *       yQ                      repeat the list for Q*2 times.
                                         the Q has changed, but Q*2 is
                                         an overshoot that is high
                                         enough, so we don't have to
                                         worry about it.

        X                                in that list, replace the
                                         element with index being the
                                         number generated above
                              hd         with d+1.

      C                              transpose the resulting array.
    sM                               flatten each element.
 -#d                                 remove lines containing only spaces.
                                     (filter on truthiness of set difference with space)
j                                    join by newlines.

2
" 39: জেলির সমান "; " 38: আমি ডেনিসকে আউট-গল্ফ করেছি! " কয়েক ঘন্টা আপনি করেছেন তবে দেখে মনে হচ্ছে @ ডেনিস কোড-গল্ফিংয়ে জিততে পছন্দ করেন না: জেলি 37 বাইট ;)
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন সম্পন্ন হয়েছে
লিকি নুন

নিস! xD M̶a̶y̶b̶e̶ আমার বুনো কল্পনা আছে, তবে এখন আমি কল্পনা করেছি আপনি অবশেষে এই সংক্ষিপ্ত সমাধান না পাওয়া পর্যন্ত আপনি কয়েক ঘন্টার জন্য হতাশার দিকে তাকিয়ে দেখেছেন এবং এখন @ ডেনিস আকস্মিকভাবে জেগে উঠবেন এবং তার কোডটি ছোট করবেন। (জে কে, আমি আশা করি আপনি ডেনিসের নীচে থাকবেন!)
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন টাডা! এটি এখন বাগ-ফিক্সড সংস্করণের চেয়ে কম।
লিকি নুন

5

ম্যাটল্যাব, 148 বাইট

n=input('');k=fix(n^.5);m=0;w=1;d=-1;for l=1:n;s=num2str(l);m(k+1,w:w+nnz(s)-1)=s;w=w+nnz(s);k=k+d;d=d*(-1)^(l^.5==fix(l^.5));end;[m(any(m,2),:),'']

নোট করুন যে অ্যাটাকভে ফাঁকা স্থানগুলি অনুপস্থিত, যেমনটি ম্যাটল্যাব মুদ্রিত অনুসারে অক্ষরটি মুদ্রণ করে 0 একটি স্থান হিসাবে , যখন অষ্টাভ কেবল সেই চরিত্রটিকে বাদ দেয় না।

ব্যাখ্যা:

n=input('');
k=fix(n^.5);                    %caculate starting height
m=0;w=1;d=-1;                   %initialize counters and output matrix
for l=1:n;
    s=num2str(l);
    m(k+1,w:w+nnz(s)-1)=s;      %insert current index as a string
    w=w+nnz(s);                 %current horizontal position
    k=k+d;                      %current vertical position
    d=d*(-1)^(l^.5==fix(l^.5)); %if we reached a square number, change direction
end
[m(any(m,2),:),'']              %delete all zero rows

3

হাস্কেল, 144 142 বাইট

g n|k<-take n$scanl(+)0$[1..]>>= \x->(-1)^x<$[2..2*x]=unlines[[1..n]>>= \x->show x#(k!!(x-1)==y)|y<-[minimum k..maximum k]]
s#g|g=s|1<2=' '<$s

ব্যবহারের উদাহরণ:

*Main> putStr $ g 19
         10                  
        9  11                
 2     8     12              
1 3   7        13            
   4 6           14          
    5              15      19
                     16  18  
                       17    

কিভাবে এটা কাজ করে:

s#g|g=s|1<2=' '<$s              -- # is a helper function that expects a string s
                                -- and a boolean g. It returns s if g is True, else
                                -- as many spaces as there a characters in s 

k<-take n$                      -- bind k to the first n elements of
 [1..]>>= \x->(-1)^x<$[2..2*x]  -- 2*x-1 copies of (-1)^x for each x in [1,2,3,...]
                                -- i.e. [-1, 1,1,1, -1,-1,-1,-1,-1, 1,1,1,1,1,1,1..]
 scanl(+)0                      -- build partial sums, starting with 0
                                -- i.e. [0,-1,0,1,2,1,0,-1,-2,-3,-2,-1...]
                                -- -> k is the list of y coordinates for the
                                --    numbers 1,2,3,...

 [  |y<-[minimum k..maximum k]] -- for all y coordinates in k 
      \x->show x#(k!!(x-1)==y)  -- map the # function
  [1..n]>>=                     -- over [1..n] (the x coordinates)
                                -- where # is called with
                                --  s -> a string representation of x 
                                --  g -> True if k at index x equals the current y
unlines                         -- join with newlines

সম্পাদনা করুন: লিনকে দুটি বাইটের জন্য ধন্যবাদ!


2

জাভাস্ক্রিপ্ট (ES6), 213 বাইট

with(Math)n=>(a=[...Array(n)].map((_,i)=>n-=1+sqrt(--i)&1||-1).map((e,_,a)=>e-min(...a))).map((e,i)=>r[e][i]=++i,r=[...Array(1+max(...a))].map(_=>a.map((_,i)=>` `.repeat(1+log10(++i)))))&&r.map(a=>a.join``).join`\n`

যেখানে \nএকটি আক্ষরিক নিউলাইন চরিত্র উপস্থাপন করে। ব্যাখ্যা:

with(Math)                          Bring functions into scope
 n=>                                Accepts one parameter
  (a=                               Intermediate result variable
   [...Array(n)].map(               For each number 0..n-1
    (_,i)=>n-=                      Accumulate index for each number
     1+sqrt(--i)&1||-1              Calculate the direction
    ).map((e,_,a)=>e-min(...a))     Scale the smallest index to zero
  ).map((e,i)=>r[e][i]=++i,         Overwrite the padding with 1..n
   r=[...Array(1+max(...a))].map(   Calculate number of lines
    _=>a.map((_,i)=>                For each number 1..n
     ` `.repeat(1+log10(++i)))))    Calculate the padding needed
  &&r.map(a=>a.join``).join`\n`     Join everything together

সংক্ষিপ্ত করার জন্য pow(-1,ceil(sqrt(i)))আমি এটিকে আবার লিখি sqrt(i-1)&1||-1যদিও এটি i=01 যুক্ত করার জন্য এটি কাজ করে না তবে এটি পরে ফলাফলটির সাইনটি উল্টিয়ে দেয় যার কারণে আমি শেষ করছি n-=


হেই তুমি সোনার ব্যাজ পেয়েছ! সুন্দর কাজ! এবং পবিত্র ধূমপানগুলিতে আপনার প্রায় আমার মতোই খ্যাতি রয়েছে। এটাকে যেতে দিন!
কনডর ও'ব্রায়ান

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ এটি ধর্মান্ধ ব্যাজটি "কেবল"। স্পষ্টতই আমি সোনার কোড-গল্ফ ট্যাগ ব্যাজটি পাওয়ার খুব কাছাকাছি!
নিল

দ্বৈত পবিত্র ধূমপান। আমার চলন্ত এক্সডি করা দরকার
কনার ও'ব্রায়ান

1

পাইথন 2, 137 বাইট

l={}
i=x=y=n=v=0
exec"v+=1;l[y]=l.get(y,'').ljust(x)+`v`;x+=len(`v`);i=-~i%-~n;y+=n%4-1;n+=2>>i*2;"*input()
for k in sorted(l):print l[k]

আদর্শে আউটপুট দেখুন ।


এইচএম ... এটি আর চলতে থাকে না এবং চালিয়ে যায়।
Zizouz212

@ জিজোজ ২১২ এটি করে, আদর্শের ঠিক একটি স্থির আউটপুট রয়েছে এবং স্বয়ংক্রিয়ভাবে লাইনগুলি দীর্ঘ হয় যা খুব দীর্ঘ।
flawr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.