ফারো একটি অ্যারে বদলান


31

একটি ফারো সাফাল এমন একটি কৌশল যা ঘন ঘন যাদুকররা ডেকে "ডুবিয়ে" রাখতে ব্যবহার করেন। একটি ফারো সাফল্য সম্পাদন করতে আপনি প্রথমে ডেকটি ২ টি সমান অর্ধেক করে কেটে ফেলুন এবং তারপরে আপনি দুটি অংশটি বিভক্ত করুন। উদাহরণ স্বরূপ

[1 2 3 4 5 6 7 8]

ফারো বদলে গেছে

[1 5 2 6 3 7 4 8]

এটি যে কোনও সংখ্যক বার পুনরাবৃত্তি হতে পারে। মজার বিষয় যথেষ্ট, আপনি যদি এটি যথেষ্ট বার পুনরাবৃত্তি করেন তবে আপনি সর্বদা আসল অ্যারেতে ফিরে আসবেন। উদাহরণ স্বরূপ:

[1 2 3 4 5 6 7 8]
[1 5 2 6 3 7 4 8]
[1 3 5 7 2 4 6 8]
[1 2 3 4 5 6 7 8]

লক্ষ্য করুন যে 1 নীচে থাকে এবং 8 টি শীর্ষে থাকে। এটি এটিকে একটি বহিরাগত শিফট করে তোলে । এটি একটি গুরুত্বপূর্ণ পার্থক্য।

চ্যালেঞ্জ

পূর্ণসংখ্যার একটি অ্যারের দেওয়া একটি , এবং একটি সংখ্যা এন , আউটপুট পর অ্যারে এন ফারো shuffles। একটি পুনরাবৃত্ত মনে করতে পারেন বা নেতিবাচক উপাদান, কিন্তু এটা সবসময় উপাদানের একটি জোড় সংখ্যা থাকবে। আপনি ধরে নিতে পারেন অ্যারেটি খালি হবে না। আপনি এটি ধরে নিতে পারেন যে এন হবে একটি অ-নেতিবাচক পূর্ণসংখ্যা, যদিও এটি 0 হয় You আপনি যেকোন যুক্তিসঙ্গত পদ্ধতিতে এই ইনপুটগুলি নিতে পারেন। বাইটের সংক্ষিপ্ত উত্তরটি জিতল!

পরীক্ষার আইও:

#N, A,                                              Output
1,  [1, 2, 3, 4, 5, 6, 7, 8]                        [1, 5, 2, 6, 3, 7, 4, 8]
2,  [1, 2, 3, 4, 5, 6, 7, 8]                        [1, 3, 5, 7, 2, 4, 6, 8]
7,  [-23, -37, 52, 0, -6, -7, -8, 89]               [-23, -6, -37, -7, 52, -8, 0, 89]
0,  [4, 8, 15, 16, 23, 42]                          [4, 8, 15, 16, 23, 42]
11, [10, 11, 8, 15, 13, 13, 19, 3, 7, 3, 15, 19]    [10, 19, 11, 3, 8, 7, 15, 3, 13, 15, 13, 19]

এবং, একটি বিশাল পরীক্ষার কেস:

23, [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]

আউটপুট করা উচিত:

[1, 30, 59, 88, 18, 47, 76, 6, 35, 64, 93, 23, 52, 81, 11, 40, 69, 98, 28, 57, 86, 16, 45, 74, 4, 33, 62, 91, 21, 50, 79, 9, 38, 67, 96, 26, 55, 84, 14, 43, 72, 2, 31, 60, 89, 19, 48, 77, 7, 36, 65, 94, 24, 53, 82, 12, 41, 70, 99, 29, 58, 87, 17, 46, 75, 5, 34, 63, 92, 22, 51, 80, 10, 39, 68, 97, 27, 56, 85, 15, 44, 73, 3, 32, 61, 90, 20, 49, 78, 8, 37, 66, 95, 25, 54, 83, 13, 42, 71, 100]  

অ্যারেতে শূন্য উপাদান থাকতে পারে?
ফাঁস নুন

@ লিক্যনুন আমরা না বলব, আপনাকে শূন্য উপাদানগুলি পরিচালনা করতে হবে না।
ডিজেএমসিএমহেম



1
সীমাবদ্ধ সেটগুলির কোনও ক্রিয়াকলাপ, যদি যথেষ্ট সময় পুনরাবৃত্তি করা হয়, যেখানে এটি শুরু হয়েছিল সেখানেই শেষ হবে; এটি ফারোর রদবদলের জন্য বিশেষ নয়।
গ্রেগ মার্টিন

উত্তর:



19

vim, 62 59 54

qrma50%mb:norm@q<cr>ggqOjdd'apjma'b@q<esc>0"qDJ<C-a>D@"i@r<esc>xxdd@"

কি দারুন. এটি সম্ভবত হ্যাকিয়েস্ট জিনিস যা আমি পিপিসিজির জন্য লিখেছি এবং এটি কিছু বলছে।

ইনপুটটিকে প্রথম লাইনে এন হিসাবে নেওয়া হয় তারপরে অ্যারের উপাদানগুলি, প্রতিটি তার নিজস্ব লাইনে।

qr         first, we're going to record the contents of the @r macro. this is
             the macro which does the faro-shuffle operation.
  ma       set the mark 'a at the beginning of the file
  50%      move to the 50% point of the file (i.e. halfway down)
  mb       set another mark here
  :norm@q  evaluate the recursive macro @q. we'll get to what that does later,
             but the interesting part here is that it's :norm@q instead of @q.
             this is because a recursive macro terminates at the end of the
             file, which means when @q terminates, @r would also abort, which
             would make calling it with a count impossible. running @q under
             :norm prevents this.
  gg       move back to the top of the file for the next iteration
q          end recording
O          now we're inserting contents of the @q macro, the recursive part
             we can't record it directly because it's destructive
  j        move to line directly below mark 'b (which was just set before @q)
  dd       delete this line and bring it...
  'ap      up after mark 'a (which starts on line 1, bringing the N/2th line
             directly below line 1, aka line 2)
  jma      replace mark 'a one line below this so that the next time we call
             'ap, the line from the second half is interleaved with the lines
             from the first half
  'b       jump back to mark 'b (remember, 'b is the last line of the first
             half of the file, originally reached via 50%)
  @q       call ourselves, causing the macro to run until hitting EOF
0"qD       delete this into register "q
J          delete the empty line that remains
<C-a>      here's another interesting bit: we want to run @r N times. but 0@r
             means "go to column 0, and then run @r once." so we have to
             increment the input number...
D@"        and then *that* many times...
  i@r        insert @r...
xx         ... and finally, delete two characters, which is the extra @r from
             the increment
dd         delete the sequence of @rs into the "" register...
@"         and run it!

এই উত্তরটি লেখার সময় আমি সম্ভবত বেশ কয়েকটি ভিম বাগ খুঁজে পেয়েছি:

  • অন্যান্য ম্যাক্রোগুলির মধ্যে ম্যাক্রো রেকর্ডিং সম্ভব নয় (তাদের পাঠ্য ম্যানুয়ালি সেট করার সময়, এর সাথে নয় q) বা এর মধ্যে :*map

  • :let @a='<C-v><cr>'<cr>i<C-r>a তীব্র কারণে যাই হোক না কেন, একটি নয়, দুটি নতুন লাইন আউটপুট দেয়।

আমি পরে এগুলি তদন্ত করতে পারে।

ডঃ গ্রিন ডিম এবং হ্যাম ডিজেকে 3 বাইটের জন্য ধন্যবাদ !


4
এটি সুন্দর এবং ভয়াবহ। আমার সম্ভবত এটি করার মতো যথেষ্ট ধৈর্য নেই। :Pএছাড়াও, আপনি করছেন 2 বাইট বন্ধ গ্রহণ করতে পারেন "rckপরিবর্তে vgg"rc, এবং একটি অন্য 5 বন্ধ করে নিতে পারেন dw@"i@r<esc>পরিবর্তেAA@R<C-v><esc><esc>0D@"
DJMcMayhem

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

7

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

def f(n,L):exec"l=len(L)/2;L=(L+L[1:]*~-l)[::l];"*n;print L

অন্যান্য পাইথনের উত্তরের চেয়ে কিছুটা দীর্ঘতর একটি ভিন্ন পদ্ধতি শুধুমাত্র ইতিবাচক এমনকি সংখ্যক উপাদানগুলির জন্য কাজ করে।

উদাহরণস্বরূপ 1, [1,2,3,4,5,6,7,8], অ্যারের নিন এবং len(L)/2-1প্রথম উপাদানটি বিয়োগের কপি যুক্ত করুন , যেমন

[1,2,3,4,5,6,7,8,2,3,4,5,6,7,8,2,3,4,5,6,7,8,2,3,4,5,6,7,8]

তারপরে প্রতিটি len(L)/2তম উপাদান নিন।

[1,2,3,4,5,6,7,8,2,3,4,5,6,7,8,2,3,4,5,6,7,8,2,3,4,5,6,7,8]
 ^       ^       ^       ^       ^       ^       ^       ^

6

পাইথন, 68 57 বাইট

f=lambda n,x:n and f(n-1,sum(zip(x,x[len(x)/2:]),()))or x

11 বাইট বন্ধ করে গল্ফ করার জন্য @ স্প3000 কে ধন্যবাদ!

আইডিয়নে এটি পরীক্ষা করুন ।


6

হাস্কেল, 62 বাইট

0!a=a
n!a|s<-length a=(n-1)![a!!mod(div(s*i+i)2)s|i<-[0..s-1]]

যাক গুলি = 2 · টি তালিকার আকার হবে। আমি নতুন তালিকার -th উপাদান গ্রহণ করে প্রাপ্ত হয় এখানে চিত্র বর্ণনা লিখুনপুরাতন তালিকার -th উপাদান, শূন্য-ইন্ডেক্স, মডিউল গুলি

প্রুফ: যদি i = 2 · k সমান হয় তবে

                                         এখানে চিত্র বর্ণনা লিখুন

এবং যদি i = 2 · k + 1 টি বিজোড় হয় তবে

                        এখানে চিত্র বর্ণনা লিখুন

সুতরাং সূচকের জন্য ব্যবহৃত মানগুলি 0, টি , 1, টি + 1, 2, টি + 2,…


5

জে - 12 বাইট

Adverb (!) বাম দিকে শ্যফেল সংখ্যা এবং ডানদিকে শ্যাফেল করতে অ্যারে নেওয়া।

/:#/:@$0,#^:

জে পার্সারের স্পর্শকৃত অ্যাডওয়্যার লেখার জন্য বিধি রয়েছে , তবে তাদের খুব কম নজির রয়েছে: আপনি যদি বাম যুক্তি হিসাবে ক্রিয়াপদের একটি ট্রেন ব্যবহার করতে চান, আপনি অন্যথায় প্রয়োজনীয় বন্ধনীগুলির সেটটি বাদ দিতে পারেন। সুতরাং (/:#/:@$0,#)^:উপরেরটি আসলে সংক্ষিপ্ত , যা বামদিকে অ্যাডভারব হিসাবে শফলেসের সংখ্যা নেয় এবং তারপরে ডানদিকে ঘুরতে যাওয়ার জন্য অ্যারে গ্রহণ করে একটি ম্যানডিক ফাংশন হয়ে যায়।

যা বলেছিল, আমরা নীচে পরিবর্তিত হই। #অ্যারের দৈর্ঘ্য, সুতরাং 0,#একটি দুটি উপাদান তালিকা: 0 nonzero কিছু অনুসরণ করে। তারপরে #/:@$এটিকে ইনপুট অ্যারে হিসাবে দীর্ঘায়িত করে একটি তালিকায় প্রতিলিপি করে এবং এটির সাজান ভেক্টর নেয় ।

তালিকার সাজানোর ভেক্টর হ'ল তালিকাটি কীভাবে সাজানো যায় সে সম্পর্কিত তথ্য: ক্ষুদ্রতম উপাদানের (0-ভিত্তিক) ইনডেক্স এবং তারপরে পরবর্তী-ক্ষুদ্রতমের সূচী ইত্যাদি। উদাহরণস্বরূপ, এর সাজানোর ভেক্টর 0 1 0 1 ...এভাবে হবে 0 2 4 ... 1 3 5 ...

যদি জে এখন এই বাছাই করা ভেক্টরটিকে বাছাই করে ফেলত তবে এটি ফারো-এলোমেলো হবে; তবে এটি তুচ্ছ হবে, যেহেতু আমরা 0 1 2 3 ...ফিরে আসব। সুতরাং আমরা ইনপুট অ্যারেটিকে সাজানোর জন্য ডায়াডিক/: ব্যবহার করি যেমন এটি ছিল 0 2 4 ... 1 3 5 ... , যা ফারো এলোমেলো করে।

নীচে ব্যবহারের উদাহরণ। এটা নিজেকে এ চেষ্টা করুন tryj.tk !

   1 (/:#/:@$0,#^:) 1 2 3 4 5 6 7 8
1 5 2 6 3 7 4 8

   f =: /:#/:@$0,#^:

   2  f  1 2 3 4 5 6 7 8
1 3 5 7 2 4 6 8

   7  f  _23 _37 52 0 _6 _7 _8 89   NB. "negative 1" is spelled _1
_23 _6 _37 _7 52 _8 0 89

   1  f  0 0 0 0 1 1 1              NB. odd-length lists
0 1 0 1 0 1 0

5

পাইথ - 8 7 বাইট

@ আইস্যাককে ধন্যবাদ 1 বাইট সংরক্ষিত

usCc2GE

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


2
হুম ... পাইথ জেলিকে মারলে জেলির উত্তরে অবশ্যই কিছু ভুল হতে পারে।
ফাঁস নুন

2
ইনপুট অর্ডার অদলবদল এবং Qএকটি বাইট সংরক্ষণ করতে অপসারণ । জেলি পাইথকে মারলে অবশ্যই পাইথের উত্তরের সাথে কিছু ভুল হতে পারে। :)
isaacg

@ আইসএইচজি ডার্ন, শপথ করতে পারতাম আমি এর আগে চেষ্টা করেছিলাম। কেন যে কাজ করে? কোনওটির uসাথে ডিফল্টটিতে হুকটি করা উচিত নয় এবং নির্দিষ্ট পয়েন্ট করা উচিত?
মালটিসেন

@ মাল্টেসেন আপনি ঠিক বলেছেন, আমি মনে করি যে আমি যে পরীক্ষার পরীক্ষার চেষ্টা করেছি কেবল তার ক্ষেত্রেই কাজ হয়েছে। এর জন্যে দুঃখিত.
isaacg

@LeakyNun ধন্যবাদ @Dennis এবং @issacg , Pyth এবং জেলি এখন সমান (7 বাইটস) হয়। ; ডি
কেভিন ক্রুইজসেন

3

জেলি, 9 7 বাইট

ডেনিসকে 2 বাইট ধন্যবাদ!

œs2ZFð¡

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

ব্যাখ্যা

œs2ZFð¡  Main dyadic chain. Arguments: x,y
      ¡  Repeat the following y time:
œs2          Split into two.
   Z         Transpose.
    F        Flatten.

পূর্ববর্তী 9-বাইট সংস্করণ:

œs2ZF
Ç⁴¡

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


2

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

(n,a)=>[...a].map((e,i)=>a[(i<<n)%~-a.length||i]=e)

জায়গায় ইনপুট অ্যারে পরিবর্তন করে এবং মূল অ্যারের একটি অনুলিপি প্রদান করে। এটি যদি অগ্রহণযোগ্য &&aহয় তবে পরিবর্তিত অ্যারেটি ফেরত দেওয়ার জন্য প্রত্যয় যুক্ত করা যেতে পারে। nজাভাস্ক্রিপ্টের পূর্ণসংখ্যার গাণিতিকের সীমাবদ্ধতার কারণে কেবলমাত্র ছোট মানগুলির জন্য কাজ করে । 61 60 বাইট রিকার্সিভ সংস্করণ যা বৃহত্তর সাথে কাজে n, উপর @ লিন এর সূত্র ভিত্তি করে:

f=(n,a,l=a.length)=>n?f(n-1,a.map((_,i)=>a[(i*-~l>>1)%l])):a

2

এমএটিএল , 11 বাইট

w:"tn2/e!1e

সংশোধনের জন্য @ ডেনিসকে ধন্যবাদ

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

ব্যাখ্যা

w         % Take the two inputs N and A. Swap them
:         % Generate [1 2 ... N]
"         % Repeat N times
  tn2/    %   Duplicate A. Number of elements divided by 2
  e       %   Reshape to that number of rows
  !       %   Transpose
  1e      %   Reshape to one row
          % End (implicit)
          % Display (implicit)

কেন wপ্রয়োজনীয়?
ডেভিড

@ ডেভিড এটি সংশোধন ছিল। এটি ছাড়া, এন = 0 এর জন্য লুপটি প্রবেশ করা হয় না এবং দ্বিতীয় ইনপুট নেওয়া হয় না
লুইস মেন্ডো

আহ যে বিরক্তিকর!
ডেভিড

2

জে, 22 19 17 বাইট

3 বাইট @ গ্যারেথকে ধন্যবাদ

@ অ্যালগোরিদমশর্ককে 2 বাইট ধন্যবাদ ।

-:@#({.,@,.}.)]^:

ব্যবহার

>> f =: -:@#({.,@,.}.)]^:
>> 2 f 1 2 3 4 5 6 7 8
<< 1 3 5 7 2 4 6 8

যেখানে >>এসটিডিএন এবং<<হয়।

পূর্ববর্তী 22-বাইট সংস্করণ:

({~[:,/@|:@i.2,-:@#)^:

ব্যবহার

>> f =: ({~[:,/@|:@i.2,-:@#)^:
>> 2 f 1 2 3 4 5 6 7 8
<< 1 3 5 7 2 4 6 8

কোথায় >>STDIN এবং STDOUT <<হয়।


কারণ জে এর পার্স নিয়ম , আপনি 2 অক্ষর জন্য বাইরের বাম বন্ধনী ড্রপ করতে পারেন।
অ্যালগরিদমশর্ক

18 বাইটের{~2,@|:@i.@,-:@#^: জন্য ট্রান্সপোজড সূচক ব্যবহার করে বিকল্প ।
মাইল

আরেকটি বিকল্প ব্যবহার করে 17 বাইট এছাড়াও[:,@|:]]\~_2%~#^:
মাইল

@ মাইলস আমি বিশ্বাস করি ,@|:@$~2,-:@#^:15 বাইটের জন্য কাজ করে
জোনা

1

গণিত 44 বাইট

4 মাইলের সাহায্যে মাইলকে 4 টি বাইট সংরক্ষণ করা হয়েছে।

Riffle@@TakeDrop[#,Length@#/2]&~Nest~##&

Riffle @@ TakeDrop[#, Length@#/2] &~Nest~## &[list, nShuffles]তালিকাটি দুটি সমান সাবলিস্ট এবং Riffleতাদের শাফল ( গুলি) এ বিভক্ত করে।


 Riffle @@ TakeDrop[#, Length@#/2] &~Nest~## &[Range@8, 1]

{1, 5, 2, 6, 3, 7, 4, 8}


Riffle @@ TakeDrop[#, Length@#/2] &~Nest~## &[Range@100, 23]

{1, 30, 59, 88, 18, 47, 76, 6, 35, 64, 93, 23, 52, 81, 11, 40, 69, 98, 28, 57, 86, 16, 45, 74, 4 , 33, 62, 91, 21, 50, 79, 9, 38, 67, 96, 26, 55, 84, 14, 43, 72, 2, 31, 60, 89, 19, 48, 77, 7, 36 , 65, 94, 24, 53, 82, 12, 41, 70, 99, 29, 58, 87, 17, 46, 75, 5, 34, 63, 92, 22, 51, 80, 10, 39, 68 , 97, 27, 56, 85, 15, 44, 73, 3, 32, 61, 90, 20, 49, 78, 8, 37, 66, 95, 25, 54, 83, 13, 42, 71, 100 }


ব্যবহার TakeDropআমরা সলিউশন ব্যবহার জানতে পারেন 40 বাইট হিসাবে Riffle@@TakeDrop[#,Length@#/2]&~Nest~##&পাশাপাশি ক্রম গ্রহণ ##করার জন্য অতিরিক্ত আর্গুমেন্ট হিসাবে বিশ্লেষণ হতে Nest
মাইল

@miles। খুব সুন্দর ব্যবহার TakeDrop। এবং ##ক্রম সন্নিবেশ করানোর জন্য এটি ব্যবহার করা ভাল ।
ডেভিডসি

1

APL, 23 21 অক্ষর

({⊃,/⍵(↑,¨↓)⍨2÷⍨⍴⍵}⍣N)A

অনুমান ছাড়াই (ডেনিসকে ধন্যবাদ) এবং ১ টি চর সংক্ষিপ্ত:

({{∊,⌿2(2÷⍨≢⍵)⍴⍵}⍣⎕)⎕

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


1

জাভা, 109 বাইট

int[]f(int[]a,int n){for(int x,q=a.length,d[];0<n--;a=d){d=new int[q];for(x=0;x<q;x++)d[(2*x+2*x/q)%q]=a[x];}return a;}

ব্যাখ্যা: উপাদানগুলি যখন ফোরো এলোমেলো হয়ে যায় তখন কীভাবে সরানো যায় তার একটি নিদর্শন রয়েছে:

এক্স এর মূল সূচক হতে দিন

যাক নতুন সূচক হতে

এল এর অ্যারে এর দৈর্ঘ্য হতে দিন

  • y ডাবল এক্স
  • x যদি L এর অর্ধেকের চেয়ে বড় বা সমান হয় তবে ইনক্রিমেন্ট y
  • Y কে অ্যারের সীমানার মধ্যে রাখুন

বা কোড হিসাবে: y=(2*x+x/(L/2))%L

এটি ধরে নেওয়া হয় যে সূচকগুলি 0 থেকে শুরু হয় Here এখানে কোডটি আরও ব্যাখ্যা করেছে:

int[] faroShuffle( int[] array, int numberOfShuffles ) {
    //repeat the faro shuffle n times
    for( int index, length=array.length, destination[]; 0<numberOfShuffles--; array=destination ) {
        //new array to copy over the elements
        destination=new int[length];
        //copy the elements into the new array
        for( index=0; index<length; index++ )
            destination[(2*index+2*index/length)%length]=array[index];
        //at the end of each loop, copy the reference to the new array and use it going forward
    }
    return array;
}  

পরীক্ষার ক্ষেত্রে আদর্শ দেখুন


আমি জানি এটি এক বছরের বেশি সময় হয়েছে, তবে আপনি কয়েকটি অংশ গল্ফ করতে পারেন: void f(int[]a,int n){for(int x,q=a.length,d[];0<n--;a=d)for(d=new int[q],x=0;x<q;)d[(2*x+2*x/q)%q]=a[x++];}( 107 বাইট - আপনার বর্তমান উত্তরটি 119 বিটিডব্লু, 109 নয়, তাই -12 বাইট)। আপনি যেহেতু ইনপুট অ্যারে সংশোধন করেছেন, তাই এটি ফেরত দেওয়ার দরকার নেই, তাই বাইট হ্রাস করার জন্য আপনি এটিকে একটি অকার্যকর জায়গায় পরিবর্তন করতে পারেন। ওহ, এবং আপনি a->n->{for(int x,q=a.length,d[];0<n--;a=d){d=new int[q];for(x=0;x<q;x++)d[(2*x+2*x/q)%q]=a[x];}}
কার্ভিংয়ের

1

জুলিয়া, 45 42 বাইট

a\n=n>0?reshape(a,endof(a)÷2,2)'[:]\~-n:a

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

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

আমরা (পুনরায়) \এই কাজের জন্য বাইনারি অপারেটরটি সংজ্ঞায়িত করি । একটিটিকে একটি অ্যারে এবং এন -নেতিবাচক পূর্ণসংখ্যা দেওয়া হোক।

যদি এন ধনাত্মক হয় তবে আমরা অ্যারে পরিবর্তন করব। এটি দৈর্ঘ্যের (ক) (2 টি সারি এবং দুটি কলামের ম্যাট্রিক্সে পুনরায় আকার দেওয়ার মাধ্যমে অর্জন করা হয় । 'ফলস্বরূপ ম্যাট্রিক্স স্থানান্তর করে, দুটি সারি তৈরি করে, এর সাথে ফলকে আরও সমতল করুন[:] । জুলিয়া যেহেতু কলাম-প্রধান ক্রমে ম্যাট্রিক্স সঞ্চয় করে, এটি দুটি সারিকে ফাঁকে ফাঁকে ফাঁকে ফেলে দেয়।

এরপরে, আমরা \আবর্তিত হিসাবে আবর্তিত একটি এবং এন - 1 ( ~-n) আর্গুমেন্ট হিসাবে পুনরায় কল করি, এইভাবে অতিরিক্ত শাফলগুলি সম্পাদন করে। একবার এন পৌছানোর 0 , আমরা বর্তমান মান একটি




0

প্রোলোগ, 116 বাইট

a([],[[],[]]).
a([H,I|T],[[H|U],[I|V]]):-a(T,[U,V]).
f(X,0,X).
f(X,N,Y):-N>0,M is N-1,f(X,M,Z),a(Z,[A,B]),append(A,B,Y).

ব্যবহার

?- f([1,2,3,4,5,6,7,8],2,X).
X = [1, 5, 2, 6, 3, 7, 4, 8] ;
false.


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