একটি রাগযুক্ত অ্যারে পরিবর্তন করুন


23

একটি রাগযুক্ত অ্যারে এমন একটি অ্যারে যেখানে প্রতিটি উপাদান ধনাত্মক পূর্ণসংখ্যার অজানা সংখ্যার অ্যারে হয়।

উদাহরণস্বরূপ, নীচে রাগযুক্ত অ্যারেগুলি রয়েছে:

[[1,2,3],[4],[9,10]]               Shape:  3,1,2
[[1],[2],[3]]                      Shape:  1,1,1
[[1,2,3,4,5,6,8]]                  Shape:  7

নিম্নলিখিত হয় না জীর্ণ অ্যারে:

[1]   Each element will be an array
[]    The array will contain at least 1 element
[[1,2,3],[]]  Each subarray will contain at least 1 integer

আপনাকে একটি র‌্যাগড অ্যারে ইনপুট করতে হবে এবং বদলে যাওয়া পূর্ণসংখ্যার সাহায্যে একটি র‌্যাগড অ্যারে ফিরিয়ে আনতে হবে

  • আউটপুট অ্যারের অবশ্যই ইনপুট অ্যারের একই আকার থাকতে হবে । আমরা প্রতিটি সুব্ররের দৈর্ঘ্য হিসাবে অ্যারের আকারটি সংজ্ঞায়িত করি ।
  • প্রতিটি পূর্ণসংখ্যার প্রতিটি সম্ভাব্য স্থানে উপস্থিত হওয়ার সমান সম্ভাবনা থাকার সুযোগ থাকতে হবে।
  • আপনি ধরে নিতে পারেন যে আপনার ভাষার অন্তর্নির্মিত এলোমেলো এলোমেলো।

উদাহরণস্বরূপ, যদি আমি পাস: [[4],[1,2,3],[4]]তারপর, [[1],[4,4,2],[3]]একটি বৈধ আউটপুট, কিন্তু হবে [[4,1,3],[3],[4]]বা [[4],[4],[1,2,3]]হবে না।



1
ইনপুটটি কি সর্বদা 2D অ্যারে হবে?
ডেনিস

উত্তর:


17

জেলি, জেলির কোডপেজে 3 বাইট

FẊṁ

ব্যাখ্যা:

FẊṁ
F    flatten list
 Ẋ   shuffle the output from the previous line
  ṁ  unflatten the list, shaping it like…

প্রোগ্রামটি অসম্পূর্ণ হওয়ার কারণে ( দ্বিতীয় তর্কটি বিবৃত নেই), ডিফল্ট হ'ল প্রোগ্রামের ইনপুটটি ব্যবহার করা; সুতরাং আউটপুট ইনপুট হিসাবে একই সাবলিস্ট প্যাটার্ন কারণ হতে পারে।

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


4
বাহ, আনফ্লেটেন একটি ঝরঝরে এবং অপ্রত্যাশিত আদেশ।
যাদু অক্টোপাস n

3
বাম যুক্তিটি সমতল হতে হবে না বলে আনফ্লেটেনটি সেরা শব্দটি নাও হতে পারে। স্তন্যপায়ী হয় ছাঁচ
ডেনিস

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

আমি বোঝাতে চাইছি যে বাম যুক্তি কিছু হতে পারে, কেবল একটি ফ্ল্যাট তালিকা নয়। উদাহরণস্বরূপ: tio.run/nexus/jelly#@/9wZ@P///@jow11FIxidRSijXUUTEC0qY6CWWzs/…
ডেনিস

1
ওহ, আমি এটিকে একটি অপরিচ্ছন্ন অপারেশন বলব; বাম যুক্তিটিকে একটি সমতল তালিকা হিসাবে বিবেচনা করা হচ্ছে (ঠিক এটি উপাদান হিসাবে তালিকাগুলি ধারণ করে, তবে সেই উপাদানগুলিকে অস্বচ্ছ হিসাবে ব্যাখ্যা করা হচ্ছে)। প্রকৃতপক্ষে, আমি সন্দেহ করি যে অবিচ্ছিন্নতা কী তা নিয়ে আমরা একমত হয়েছি তবে

7

পাওয়ারশেল ভি 2+, 86 বাইট

param($n)$a=$n-split'[^\d]'-ne''|sort{random};-join($n-split'\d+'-ne''|%{$_+$a[$i++]})

স্ট্রিং ম্যানিপুলেশন মাধ্যমে কাজ করে। ইনপুট অ্যারের প্রতিনিধিত্ব করে একটি স্ট্রিং হিসাবে পাশ করা হয়েছে, আপনার ভাষার জন্য যে কোনও ফর্ম্যাট কাজ করে। ;-)

-splitঅ-অঙ্কগুলিতে ইনপুট আউট করে স্ক্রিপ্ট ব্লকের sortউপর ভিত্তি করে random(যা প্রতিটি ইনপুটটির জন্য সাজানোর ক্ষেত্রে আলাদা এলোমেলো ওজন নির্ধারণ করবে), এতে সংরক্ষণ করে $a। আমরা তারপরে splitআবার ইনপুটটি, এবার অঙ্কগুলিতে এবং প্রতিটি এক আউটপুটের জন্য বর্তমান মানের (সাধারণত বন্ধনী এবং কমা) স্ট্রিং-এর সাথে সম্পর্কিত সংখ্যার সাথে সংযুক্ত $a। এটি -joinএকসাথে একটি স্ট্রিং এ এডিট, এবং আউটপুট অন্তর্ভুক্ত।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\shuffle-a-ragged-array.ps1 "@(@(1,2,3),4)"
@(@(3,2,1),4)

PS C:\Tools\Scripts\golfing> .\shuffle-a-ragged-array.ps1 "@(@(1,2,3),4)"
@(@(1,2,4),3)

PS C:\Tools\Scripts\golfing> .\shuffle-a-ragged-array.ps1 "[[4],[1,2,3],[4]]"
[[4],[2,4,3],[1]]

PS C:\Tools\Scripts\golfing> .\shuffle-a-ragged-array.ps1 "[[10],[1,2,3],[5]]"
[[10],[5,2,1],[3]]

PS C:\Tools\Scripts\golfing> .\shuffle-a-ragged-array.ps1 "[[10],[1,2,3],[5]]"
[[5],[10,2,1],[3]]

5

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

from random import*
x=input();r=sum(x,[]);shuffle(r)
print[[r.pop()for _ in t]for t in x]

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


অজগরটি আমি ভাল করে জানি না, তবে তুমি করতে পারো না shuffle(r=sum(x,[]))?
কনর ও'ব্রায়েন

1
না, জায়গা বদলে শ্যাফেল করে আর কিছুই দেয় না
ডেনিস

3

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

x=>x.map(y=>y.map(z=>+s.splice(Math.random()*s.length,1)),s=eval(`[${x}]`))

এই প্রথম আমি .splice()কোনও কোড-গল্ফ চ্যালেঞ্জ ব্যবহার করে মনে করতে পারি ...

আপনি আগে থেকে অ্যারে পরিবর্তন করে দুটি বাইট বন্ধ করতে পারেন:

x=>x.map(y=>y.map(z=>s.pop()),s=eval(`[${x}]`).sort(_=>Math.random()-.5))

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


"আপনি ধরে নিতে পারেন যে আপনার ভাষার অন্তর্নির্মিত এলোমেলো is
কনর ও'ব্রায়েন

@ কনরও ব্রায়েন "প্রতিটি পূর্ণসংখ্যার প্রতিটি সম্ভাব্য স্থানে উপস্থিত হওয়ার সমান সম্ভাবনা থাকার সুযোগ থাকতে হবে।"
ইটিএইচ প্রডাকশনগুলি

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


2

ব্র্যাচল্যাগ , 17 বাইট

c@~P,?:{l~l}a.cP,

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

ব্যাখ্যা

আমরা মূলত ভেরিয়েবলের উপাদানগুলির সাথে সাবলিস্টগুলির একটি তালিকা তৈরি করি যা ইনপুট হিসাবে একই "আকৃতি" রয়েছে এবং তারপরে আমরা উল্লেখ করি যে আমরা যদি সমস্ত কিছুকে একটি তালিকার সাথে সংযুক্ত করি, তবে অবশ্যই এটি অবশ্যই একটি তালিকাতে ইনপুটটির সংক্ষিপ্তকরণের পরিবর্তন হতে পারে ।

c@~P,                 Concatenate the Input into a single list. Shuffle it and call that P.
     ?:{   }a.        The Output is the result of applying this to each element of the input:
        l~l               The Output is a list of same length as the Input.    
             .cP,     P is the concatenation of the sublists of the Output.

1

পার্ল, 37 বাইট

কোড + -pপতাকা 36 বাইট ।

@n=/\d+/g;s/\d+/splice@n,rand@n,1/ge

এটি চালানোর জন্য:

perl -pE '@n=/\d+/g;s/\d+/splice@n,rand@n,1/ge' <<< "[[4],[1,2,3],[4]"

ব্যাখ্যা:

@ এন = / ডি + / জি # সমস্ত ইন্টিজার @n এ সঞ্চয় করুন
এস / \ ডি + / # প্রতিটি পূর্ণসংখ্যার সাথে প্রতিস্থাপন করুন ...
বিভক্ত @ এন, র‌্যান্ড @ এন, 1 / জিও # এলিমেন্ট @n এর র্যান্ডম অবস্থানে (যা @ এন থেকে মুছে ফেলা হয়েছে)

1

05 এ বি 1 ই , 17 বাইট

˜.r¹vDyg£DˆgF¦}}¯

˜                 Unflatten input
 .r               tmp = shuffle(flattened_input)
   ¹v             For each sub-array
     Dyg£         Take the first length(current_array) elements from tmp
         Dˆ       Append the result to a global array
           gF¦}   Remove the first elements from tmp
               }  End for
                ¯ Display the global array

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

আমি 05AB1E বা 2sable সমাধানের জন্য বিল্ট-ইন কিছু আনুষাঙ্গিক / ছাঁচনির্মাণ ব্যবহার করে এখনও জানি না :) এর জন্য অপেক্ষা করছি।


1

এপিএল, 35 বাইট

আমি পার্লকে মারধরও করছি, এমন কিছু আছে যা আমি মিস করছি।

{Z[?⍨⍴Z]⊂⍨(⍳⍴Z←∊⍵)∊⊃¨{⍵+⊃⌽⍺}\⍳¨⍴¨⍵}

উদাহরণ:

      {Z[?⍨⍴Z]⊂⍨(⍳⍴Z←∊⍵)∊⊃¨{⍵+⊃⌽⍺}\⍳¨⍴¨⍵}(1 2 3)(,4)(9 10)
┌──────┬─┬───┐
│10 3 2│1│9 4│
└──────┴─┴───┘

ব্যাখ্যা:

  • একটি সমতল অ্যারে উপ-অ্যারেগুলির সূচনার সাথে সম্পর্কিত সূচকগুলি সন্ধান করুন:
    • ⍳¨⍴¨⍵: প্রতিটি উপ-অ্যারের জন্য, সূচকগুলির একটি তালিকা পান
    • {⍵+⊃⌽⍺}\: প্রথম সাব-অ্যারে দিয়ে শুরু করে, পরবর্তী অ্যারেতে প্রতিটি মানের সাথে অ্যারেতে সর্বশেষ মান যুক্ত করুন।
    • ⊃¨: অ্যারেগুলির প্রথম আইটেমগুলি পান, যা শুরু করার জায়গা
    • (⍳⍴Z←∊⍵)∊: সমতল অ্যারে সংরক্ষণ করুন Z। বিট-ভেক্টর তৈরি করুন যেখানে উপ-অ্যারেগুলি শুরু হওয়া উচিত যেখানে স্থানগুলি চিহ্নিত করে।
  • চ্যাপ্টা অ্যারে পরিবর্তন করুন:
    • ?⍨⍴Z: এর একটি এলোমেলো অনুক্রম তৈরি Z
    • Z[... ]: পরস্পর বিনিময় করা Z
  • ⊂⍨: বিট-ভেক্টর অনুসারে সাব-অ্যারেতে ক্রমটি বিভক্ত করুন।

1
আপনি একটি স্থান প্রতিস্থাপন করতে পারে। অ্যাসাইনমেন্ট আপনাকে পরিবর্তনশীল সমতল করতে দেয়:A⊣(∊A)←(∊A)[?⍨≢∊A←⎕]
অ্যাডাম

@ অ্যাডাম: বাহ, আমি জানতাম না যে আপনি এটি করতে পারেন। কোন ফাংশন এটি করতে পারে তার একটি তালিকা আছে?
মেরিনাস

1
হ্যাঁ । এবং এটিও পরিবর্তিত অ্যাসাইনমেন্টের সাথে কাজ করে।
Adám

1

পাইথ, 15 বাইট

tPc.SsQ.u+NlYQ0

একটি প্রোগ্রাম যা তালিকার ইনপুট নেয় এবং ফলাফল মুদ্রণ করে।

পরীক্ষা স্যুট

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

tPc.SsQ.u+NlYQ0  Program. Input: Q
       .u    Q0  (1) Reduce Q with starting value 0, returning all results:
         +        Add
          N       the current value
           lY     to the length of the next element of Q
     sQ          Flatten Q
   .S            (2) Randomly shuffle
  c              Chop (1) at every location in (2)
tP               Discard the first and last elements
                 Implicitly print

1

পিএইচপি , 105 বাইট

$m=array_merge(...$i=$_GET[i]);shuffle($m);foreach($i as$v)$o[]=array_splice($m,0,count($v));print_r($o);

ধন্যবাদ 105 বাইট কমে user59178

আসল উত্তর:

পিএইচপি , 132 বাইট

$i=$_GET['i'];$m=call_user_func_array('array_merge',$i);shuffle($m);foreach($i as$v){$o[]=array_splice($m,0,count($v));}print_r($o);

$m=array_merge(...$i=$_GET[i]);25 বাইটের চেয়ে কম $i=$_GET['i'];$m=call_user_func_array('array_merge',$i);এবং এটি একই কাজ করে। এছাড়াও আপনি আরও 2 টি বাইট সংরক্ষণ করার {}পরে বাদ দিতে পারেন foreach
ব্যবহারকারী59178

1

ব্যাশ, 63, 58 বাইট

সম্পাদনাগুলি:

  • কিছুটা অপ্টিমাইজড শেড এক্সপ্রেশন, -5 বাইট

বিঃদ্রঃ:

বাশ সত্যিকার অর্থে বহুমাত্রিক অ্যারে সমর্থন করে না (এগুলি কেবল কিছু পরিমাণে সিমুলেট করা যেতে পারে), সুতরাং পরিবর্তে, এই প্রোগ্রামটি কোনও রাগযুক্ত অ্যারের "সিরিয়ালাইজড" পাঠ্য উপস্থাপনা গ্রহণ করবে, যেমন টাস্ক বর্ণনায় বর্ণিত, যেমন: [[1,2,3],[4],[9,10]]এবং আউটপুট সরবরাহ করে একই বিন্যাসে।

Golfed

printf `sed 's/\w\+/%d/g'<<<$1` `grep -Po '\d+'<<<$1|shuf`

পরীক্ষা

>./shuffle []
[]

>./shuffle [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
[11,12,9,5,3,6,1,15,14,2,13,7,10,8,4]

>./shuffle [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
[9,15,11,10,7,6,1,14,2,3,12,5,4,13,8]

>./shuffle [[1,2,3],[4],[9,10]]
[[10,2,4],[9],[3,1]]

>./shuffle [[1,2,3],[4],[9,10]]
[[3,4,1],[10],[2,9]]

একটি দুর্দান্ত বোনাস হ'ল আপনি এটিকে একটি স্বেচ্ছাসেবী গভীরতার রাগযুক্ত অ্যারেগুলি খাওয়াতে পারেন:

./shuffle [[1,[2,[3,[99,101]]],[4],[9,10]]
[[9,[4,[1,[101,2]]],[10],[3,99]]

এবং এটি এখনও সঠিকভাবে পরিচালনা করবে।

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


0

অক্টাভা, 60 বাইট

@(a)mat2cell([a{:}](randperm(sum(s=cellfun(@numel,a)))),1,s)

0

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

function b=g(c);a=[c{:}];a=a(randperm(numel(a)));b=mat2cell(a,1,cellfun('length',c))

0

জাভা, 368 বাইট

interface Z{int w(int i);default Z m(int n,int s){return i->w(i)+i>=n?s:0;}static int[][]f(int[][]r){int L=0,o=0,x,d,e=0;Z u=i->0,v=i->i;for(int[]a:r){d=a.length;L+=d;u=u.m(L,1);v=v.m(L,-d);}int[]c=new int[L];for(;e<L;)c[e++]=(int)(L*Math.random());for(int[]a:r){for(x=0;x<a.length;){d=c[x+o];e=v.w(d);d=u.w(d);L=a[x];a[x++]=r[d][e];r[d][e]=L;}o+=a.length;}return r;}}

পদ্ধতিটি static int[][] f( int[][] r ){...}চ্যালেঞ্জ সমাধান করে। কোনও আমদানি এড়াতে এবং ব্যবহারের সুবিধার জন্য একটি ডিফল্ট পদ্ধতিতে যুক্ত করার জন্য আমার নিজের ক্রিয়ামূলক ইন্টারফেসটি রোল করার সিদ্ধান্ত নিয়েছে

interface Z{ //define my own functional interface instead of importing

  int w(int i);

  //return a new lambda
  //where w(int i) adds the value s
  //to the result when i is greater than n
  default Z m(int n,int s){
      return i->w(i)+i>=n?s:0;
  }

  static int[][]f(int[][]r){
      int L=0,o=0,x,d,e=0;
      Z u=i->0, //lambda to convert a flattened index to the input's first dimension index
        v=i->i; //lambda to convert a flattened index to the input's second dimension index
      for(int[]a:r){
          d=a.length;
          L+=d; //running total of the lengths
          u=u.m(L,1); //increment the 1st conversion by 1 at every array length
          v=v.m(L,-d); //decrement the 2nd conversion by the array length after that length
      }
      int[]c=new int[L]; //will contain flattened index swapping positions
      for(;e<L;) //randomize the swap positions
          c[e++]=(int)(L*Math.random());
      for(int[]a:r){ //swap the elements from the input
          for(x=0;x<a.length;){
              d=c[x+o]; //flattened swap index
              e=v.w(d); //convert swap index to 2nd dimension index
              d=u.w(d); //convert swap index to 1st dimension index
              L=a[x];
              a[x++]=r[d][e];
              r[d][e]=L;
          }
          o+=a.length; //increment offset for flattened index array
      }
      return r;
  }

}

0

গণিত, 67 বাইট

ReplacePart[#,Thread[RandomSample@Position[#,_Integer]->Union@@#]]&

ব্যাখ্যা: এটি 2 ডি র‌্যাগড অ্যারেতে সমস্ত পূর্ণসংখ্যার অবস্থানের তালিকাটি বদল করে। Union@@জন্য সংক্ষিপ্তFlatten@

দ্রষ্টব্য: স্কুগলি বন্ধনী বন্ধনীগুলির {}পরিবর্তে ব্যবহৃত হয় []

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