বহুমাত্রিক সমন্বয় সূচকের মূল্যায়ন করুন


9

এন মাত্রিক সমন্বয় একটি সংকলন সরবরাহ করা হয়। একটি উদাহরণ নীচে:

{2,3,4}

এটি 2x's, 3y এবং 4z এর সাথে একটি 3 মাত্রিক অ্যারে হিসাবে ভাবা যেতে পারে; মাত্রা সংখ্যক হতে পারে। উদাহরণস্বরূপ, মোট 24 টি নোড রয়েছে। প্রতিটি নোডকে {x, y, z using ব্যবহার করে সূচী করা যায়} 5 ম নোড অ্যাক্সেস করতে, প্রদত্ত সূচকগুলি নীচের টেবিলের উপর ভিত্তি করে {0, 1, 0। হবে।

## | x y z
     0 1 2
-----------
0  | 0 0 0
1  | 0 0 1
2  | 0 0 2
3  | 0 0 3
4  | 0 1 0
5  | 0 1 1
6  | 0 1 2
7  | 0 1 3
8  | 0 2 0
...
23 | 1 2 3

এই অ্যাপ্লিকেশনটির উদ্দেশ্য হ'ল নোড নম্বর দেওয়া থাকলে একটি সূচক নির্ধারণ করতে পিছনের দিকে কাজ করা।

অষ্টম নোডের "y" সূচকের জন্য জিজ্ঞাসা করা হলে, প্রোগ্রামটি "2" মুদ্রণ করা উচিত।

নিম্নলিখিত ইনপুট সরবরাহ করা সহ:

{2,3,4}|8|1
<List of Coordinates>|<Node>|<Index>

নিম্নলিখিত মুদ্রণ করা উচিত:

2

আপনি ধরে নিতে পারেন যে ইনপুটটি আপনার পছন্দের ভাষায় কিছু সুবিধাজনক উপায়ে সরবরাহ করা হবে এবং সীমানা পরীক্ষা করার প্রয়োজন নেই। উদাহরণস্বরূপ আপনি ধরে নিতে পারেন পছন্দের প্রদত্ত সূচক (উদাহরণে "y") সরবরাহিত স্থানাঙ্কের ক্ষেত্রে বৈধ। আপনি 0 বা 1 ভিত্তিক সূচক ব্যবহার করতে পারেন; উদাহরণ 0 ভিত্তিক অনুমান।

এটি এই প্রশ্নের বিপরীত ধরণের: বহুমাত্রিক অ্যারের সূচক


1
সম্ভবত কয়েকটি পরীক্ষার কেস যুক্ত করুন
লুইস মেন্ডো

1
আমরা কি স্থানাঙ্কগুলি 0 থেকে x-1 এর পরিবর্তে 1 থেকে x পর্যন্ত চালাতে পারি? সুতরাং নোড # 0 হবে (1,1,1) এবং নোড # 23 (2,3,4)।
নিমি

@ নিমিমি হ্যাঁ, 1 ভিত্তিক সূচী ঠিক আছে।
মার্ক জনসন

উত্তর:


4

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

PiX[vPi)

এটি নোড এবং মাত্রার জন্য 1-ভিত্তিক সূচক ব্যবহার করে index সুতরাং প্রথম নোডগুলি হ'ল 1, 2ইত্যাদি; এবং "x" মাত্রাটি হল 1, "y" 2ইত্যাদি etc.

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

ব্যাখ্যা

মূলটি হ'ল ফাংশন X[( ind2subমতলব বা অক্টাভাতে অনুরূপ ) ব্যবহার করা, যা লিনিয়ার সূচককে বহুমাত্রিক সূচকগুলিতে রূপান্তর করে। যাইহোক, চ্যালেঞ্জ হিসাবে সংজ্ঞায়িত হিসাবে বিপরীত হিসাবে মাত্রার ক্রম, সুতরাং P( flip) ফাংশন কল করার আগে, এবং আবার ( v) এর আউটপুট কনসেন্টেটিংয়ের পরে প্রয়োজন।

P    % Implicit input: size as a row vector. Flip
i    % Input: node (linear) index
X[   % Convert from linear index to multidimensional indices. Produces
     % as many outputs as entries there are in the size vector
v    % Concatenate all outputs into a column vector
P    % Flip
i    % Input: dimension
)    % Index: select result for that dimension. Implicitly display

3

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

(#)তিনটি আর্গুমেন্ট নেয় এবং একটি পূর্ণসংখ্যা প্রদান করে, হিসাবে ব্যবহার করে [2,3,4]#8$1

l#n=(zipWith mod(scanr(flip div)n$tail l)l!!)

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

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

  • lস্থানাঙ্কগুলির তালিকা, nনোড নম্বর। l#nচূড়ান্ত সূচক গ্রহণ করে এমন একটি ফাংশন i
  • উদাহরণ তালিকা [2,3,4]এবং নোড দেওয়া 8, প্রথমে দেওয়া তালিকার লেজ নেওয়া হয় [3,4]। তারপরে এটি রাইট scanথেকে নেড করা হয় r, divপ্রতিটি উপাদানকে ক্রমাগতভাবে নোড নম্বর বেঁধে তালিকাটি দেয় [0,2,8]
  • তারপর তালিকা [0,2,8]এবং মূল l=[2,3,4]করছে zipPED Ulus অপারেটর, দান ।withmod[0,2,0]
  • সর্বশেষে !!তালিকা সূচক অপারেটর আংশিকভাবে প্রয়োগ করা হয়, ফলস্বরূপ ফাংশনটি চূড়ান্ত সূচক দেওয়ার জন্য প্রস্তুত।

3

এপিএল (ডায়ালগ ক্লাসিক) , 5 বাইট

⎕⌷⎕⊤⎕

না, আপনি একটি ফন্ট মিস করছেন না। এটি দেখতে অনুমিত হয়।

এটি একটি REPL প্রোগ্রাম যা এসটিডিইএন থেকে ইনপুট নেয়: নোড নম্বর, মাত্রা এবং সূচক (সেই ক্রমে)। পরবর্তীটির মান 0- বা 1-ভিত্তিক হতে পারে ⎕IO

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

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

বহুমাত্রিক অ্যারে ইনডেক্সিং মূলত মিশ্র বেস ভিত্তিক রূপান্তর, তাই চ্যালেঞ্জের প্রথম অংশটি যা চাওয়ার তা করে। পড়া এবং প্রতিটি ঘটনা STDIN থেকে একটি লাইন দেখায়, তাই

        
⎕:
      8
⎕:
      2 3 4
0 2 0

শেষ অবধি, নির্দিষ্ট সূচকে উপাদানটি নেয়। বামদিকের stdin থেকে তৃতীয় ও শেষ ইনপুট সার্চ

        (0 2 0)
⎕:
      1
2

মিশ্র বেস রূপান্তর আবার ধর্মঘট!
অ্যাডম

3

হাস্কেল, 38 30 29 28 বাইট

l#n=(mapM(\x->[1..x])l!!n!!)

এটি 0-ভিত্তিক সূচকগুলি এবং 1 থেকে শুরু স্থানাঙ্ক ব্যবহার করে online এটি অনলাইনে চেষ্টা করুন!

ইনপুটটির প্রতিটি মাত্রা xএকটি তালিকায় পরিণত করুন [1..x], যেমন [2,3,4]-> [[1,2],[1,2,3],[1,2,3,4]]mapMসব সম্ভব এন-tuples যেখানে প্রথম উপাদান প্রথম তালিকা থেকে নেওয়া হয়, ইত্যাদি দুই বার একটি তালিকা তোলে !!সূচক এন-tuple এবং আকারের।

সম্পাদনা করুন: @ janrjan জোহানসেন 8 9 বাইট সংরক্ষণ করেছেন । ধন্যবাদ!


ওহ, চালাক! কিন্তু mapM id.map f=mapM f। এবং (`take`[0..])খাটো হয়।
janর্জন জোহানসেন

@ আরজান জোহানসেন: 8 বাইট, এটি বিশাল! অনেক ধন্যবাদ! এখনও যদি 1-ভিত্তিক স্থানাঙ্কের অনুমতি দেওয়া হয় তবে ওপিটির উত্তরের জন্য অপেক্ষা করছেন।
নিমি

এছাড়াও, l#n=(mapM(`take`[0..])l!!n!!)সংক্ষিপ্ত। (উল্লেখ্য আপনার যা দরকার করা হয়নি f=ফাংশন বেনামী হতে পারে ওহ, আমি অনুমান আপনি এটা বেড়ে চলেছে নেই।।)
Orjan Johansen

@ আরজান জোহানসেন: আবারও ধন্যবাদ। f=একটি কপি ছিল এবং Tio থেকে ত্রুটি পেস্ট করুন।
নিমি

2

ব্র্যাচল্যাগ , 25 23 বাইট

tT&bhH&h{>ℕ}ᵐ:H≜ᶠ⁾t:T∋₎

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

দ্বিতীয় আর্গুমেন্টটি 1-ইনডেক্সেড, অন্যান্য 2 টি 0 সূচকযুক্ত।

ব্যাখ্যা

tT                          Input = [_, _, T]
  &bhH                      Input = [_, H, T]
      &h{>ℕ}ᵐ               Create a list where each element is between 0 and the
                              corresponding element in the first element of the Input
             :H≜ᶠ⁾          Find the first H possible labelings of that list
                  t         Take the last one
                   :T∋₎     Output is the T'th element

1

গণিত, 26 23 বাইট

Array[f,#,0,Or][[##2]]&

ইনপুট জন্য 1 ভিত্তিক সূচক এবং আউটপুট জন্য 0-ভিত্তিক সূচক ব্যবহার।

কেন Or? কারণ এটি বৈশিষ্ট্যের সাথে স্বল্পতম অন্তর্নির্মিত ফাংশন Flat

উদাহরণ:

In[1]:= Array[f,#,0,Or][[##2]]&[{2,3,4},9,2]

Out[1]= 2

1

এপিএল (ডায়ালগ) , 6 বাইট

0-ভিত্তিক সূচক পেতে ⎕IO←0, যা অনেক সিস্টেমে ডিফল্ট। মাত্রাগুলির জন্য অনুরোধ জানানো হয়, তারপরে (নোড, স্থানাঙ্ক) তালিকাভুক্ত।

⎕⊃↑,⍳⎕

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

 মাত্রা জন্য প্রম্পট

 প্রতিটি আইটেম সেই আইটেমটির জন্য i ndices হিসাবে সেই আকারের একটি অ্যারে তৈরি করুন

, অভ্যাস (সূচকগুলির তালিকা তৈরি করুন)

 গভীরতার একটি স্তরকে র‌্যাঙ্কের একটি অতিরিক্ত স্তরে রূপান্তর করুন

⎕⊃ সংযুক্ত তালিকা (নোড, সমন্বয়) এর জন্য অনুরোধ করুন এবং এটি থেকে কোনও উপাদান বাছাই করতে এটি ব্যবহার করুন


1

জেলি , 7 6 বাইট

Œp⁴ị⁵ị

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

এটি ইনপুট এবং আউটপুট জন্য 1 ইনডেক্সিং ব্যবহার করে।

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

Œp⁴ị⁵ị
Œp      Cartesian product of the first input
        numbers are converted to 1-based ranges
  ⁴ị    index specified by second input
    ⁵ị  index specified by third input



0

আর, 52 বাইট

function(x,y,z,n,i)expand.grid(1:z,1:y,1:x)[n,4-i]-1

1-ইনডেক্সযুক্ত একটি বেনামী ফাংশন প্রদান করে।

উদাহরণস্বরূপ। expand.gridতালিকাটি উত্পন্ন করে তবে প্রথম যুক্তিটি দ্রুততম পরিবর্তিত হয়, সুতরাং আমাদের সেগুলি বিপরীত ক্রমে ইনপুট করতে হবে, অর্থাত্ z,y,x,। তারপরে আমরা কেবল সূচকগুলি করতে পারি [n,4-i], যেখানে 4-iবিপরীত ক্রমের জন্য প্রয়োজনীয়, এবং সেগুলি চালিত হয় তা নিশ্চিত করতে 1 টি বিয়োগ করতে পারেন 0:(x-1)ইত্যাদি etc.

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



0

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

(a,n,i,g=j=>a[++j]?g(j)/a[j]|0:n)=>g(i)%a[i]

Ungolfed:

(a,n,i)=>a.reduceRight(([n,...a],e)=>[n/e|0,n%e,...a],[n])[i+1]

দুঃখজনকভাবে reduceদুটি বাইট দীর্ঘ:

(a,n,i)=>a.reduce((r,d,j)=>j>i?r/d|0:r,n)%a[i]

দেখে মনে হচ্ছে আমরা একই ধারণা নিয়ে এসেছি \ o /
লিকি নুন

@ ল্যাকিয়ুনুন, সূচকগুলি কীভাবে কাজ করে তা অবাক করা সত্যিই অবাক হওয়ার মতো কিছু নয়।
নিল

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