অনেক মাত্রা একটি নাচ


19

চ্যালেঞ্জ

nপূর্ণসংখ্যার একটি- মাত্রিক অ্যারে এবং প্রথম nপ্রাকৃতিক সংখ্যার ক্রম দেওয়া, সেই অনুযায়ী অ্যারের মাত্রাগুলি অনুমোদন করুন।

বিস্তারিত

এই চ্যালেঞ্জটি ম্যাটল্যাবগুলি দ্বারা অনুপ্রাণিত permuteবিক্ষোভ পূর্ণসংখ্যা হিসাবে একটি তালিকা দেওয়া হয়, উদাহরণস্বরূপ [1,3,2]মানে 1 টি 1 তে ম্যাপ করা হয়, 2 কে 3 তে ম্যাপ করা হয় এবং 3 তে 2 তে ম্যাপ করা হয় (এখানে iপ্রবেশের মানটি iম্যাপ করা হয়)। তবে আপনি সুবিধাজনক অন্যান্য ফর্ম্যাটগুলি ব্যবহার করতে পারেন, উদাহরণস্বরূপ চক্র হিসাবে বা কোনও ফাংশন হিসাবে। যদি এটি আরও সুবিধাজনক হয় তবে আপনি 0-ভিত্তিক সূচকও ব্যবহার করতে পারেন।

অ্যারেটিকে একটি সম্পূর্ণ "আয়তক্ষেত্রাকার" m1 x m2 x ... x mn-রারি হিসাবে ধরে নেওয়া যেতে পারে (অর্থাত আপনি এটি ধরে নিতে পারেন / জেগে নেই )।

আপনি ধরে নিতে পারেন যে nএটি খুব বেশি বড় নয়, কারণ অনেক ভাষার একটি নেস্টেড অ্যারেতে মাত্রার সংখ্যার সীমা রয়েছে।

যদি আপনার ভাষা বহুমাত্রিক অ্যারে সমর্থন করে না, আপনি একটি স্ট্রিংও নিতে পারেন যা অ্যারেটিকে ইনপুট হিসাবে উপস্থাপন করে।

উদাহরণ

  • nপরিচয়পত্রের আদেশের সাথে যে কোনও- মাত্রিক অ্যারেটি [1,2,3,...,n]অপরিবর্তিত থাকবে।
  • [[10,20,30],[40,50,60]]পরমেশনের সাথে অ্যারে [2,1]ম্যাপ করা হয় [[10,40],[20,50],[30,60]]
  • [[[1,2],[3,4]],[[5,6],[7,8]]]পরমেশনের সাথে অ্যারে [2,3,1]ম্যাপ করা হয় [[[1,3],[5,7]],[[2,4],[6,8]]]

উত্তর:


13

9

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

pএকটি (টাইপ ক্লাস পলিমর্ফিক) ফাংশন যা Intএর তালিকা হিসাবে ক্রমানুসারে গ্রহণ করে এবং একটি নেস্টেড তালিকা যা Intএর বহুমাত্রিক অ্যারে উপস্থাপন করে ।

যেমন কল করুন p [2,1] [[10,20,30],[40,50,60]], তবে টাইপ ডিফল্ট সফল না হলে, আপনাকে :: [[Int]]ফলাফলের ধরণটি দেওয়ার মতো (উপযুক্তভাবে নেস্ট করা) টাইপ টিকা যুক্ত করতে হতে পারে ।

import Data.List
class P a where p::[Int]->[a]->[a]
instance P Int where p _=id
instance P a=>P[a]where p(x:r)m|n<-p r<$>m,y:z<-sort r=last$n:[p(x:z)<$>transpose n|x>y]

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

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

ফলস্বরূপ, এটি অনিবার্য বলে মনে হয় যে প্রোগ্রামটি টাইপ-সম্পর্কিত ঘোষণাগুলি অন্তর্ভুক্ত করা দরকার যা তুলনামূলকভাবে ভার্জোজ। গল্ফযুক্ত অংশের জন্য, আমি একটি ধরণের শ্রেণি সংজ্ঞায়নের উপর স্থির করেছি P, যেমন pঅ্যারের প্রকারের চেয়ে বহুগুণ হতে পারে।

এদিকে, টিআইওর পরীক্ষার জোতা পার্সিংয়ের সমস্যাটি সমাধান করার উপায় দেখায়।

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

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

  • class P aঘোষণার দ্বারা প্রদত্ত হিসাবে , যে কোনও পরিস্থিতিতে pদুটি আর্গুমেন্ট, একটি ক্রমশক্তি (সর্বদা টাইপের [Int]) এবং একটি অ্যারে লাগে ।

  • চ্যালেঞ্জের বিবরণে ফর্মটিতে অনুমতি দেওয়া যেতে পারে, যদিও আলগোরিদিম যেভাবে কাজ করে, সূচকগুলির পছন্দটি তাদের আপেক্ষিক আদেশ ব্যতীত স্বেচ্ছাসেবী। (সুতরাং উভয় 0- এবং 1- ভিত্তিক কাজ।)
  • বেসটি instance P Intমাত্রা 1 এর অ্যারে পরিচালনা করে, যা pকেবল অপরিবর্তিত ফিরে আসে, যেহেতু এক মাত্রা কেবল নিজের মধ্যে ম্যাপ করা যায়।
  • অন্যটি instance P a => P [a]পুনরাবৃত্তভাবে সংজ্ঞায়িত করা হয়, এটি মাত্রা এন + 1 অ্যারেগুলির জন্য সংজ্ঞায়িত করতে ডায়মেনশন এন সাববারিকে pসাথে কল করে।
    • p(x:r)mপ্রথমে p rপ্রতিটি উপাদানকে পুনরাবৃত্তভাবে কলগুলি m, ফলাফল অ্যারে প্রদান করে nযার মধ্যে প্রথমটি ব্যতীত সমস্ত মাত্রা একে অপরের সাথে তুলনামূলকভাবে সঠিকভাবে অনুমতি দেওয়া হয়েছিল।
    • অবশিষ্ট ক্রমুটিশন যা সম্পাদন করা প্রয়োজন nতা দিয়ে দেওয়া হয়েছে x:y:z = x:sort r
    • তবে যদি x<yএর প্রথম মাত্রা nইতিমধ্যে সঠিকভাবে স্থাপন করা হয় এবং nকেবল ফিরে আসে।
    • যদি x>y, তবে প্রথম এবং দ্বিতীয় মাত্রার nঅদলবদল করা দরকার যা transposeফাংশনটি দিয়ে সম্পন্ন হয় । অবশেষে p(x:z)ফলাফলের প্রতিটি উপাদানটিতে পুনরাবৃত্তভাবে প্রয়োগ করা হয়, এটি নিশ্চিত করে যে আসল প্রথম মাত্রাটি সঠিক অবস্থানে স্থানান্তরিত হয়।

3

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

এটি অনুমানের জন্য 0-সূচক ব্যবহার করে

from numpy import*
from itertools import*
z=range
def f(i,r):
	l=array(i).shape;R={b:a for a,b in enumerate(r)};r=len(r);m=eval('['*r+'0'+q('for k in z(l[R[%s]])]',r-1,-1,-1))
	for d in product(*[z(p) for p in l]):exec'm'+q('[d[R[%s]]]',r)+'=i'+q('[d[%s]]',r)
	return m
q=lambda s,*j:''.join(s%(j)for j in z(*j))

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

-২ বাইটস @ জোনাথন ফ্রেঞ্চকে ধন্যবাদ


কল করার জন্য আপনার exec দুটি বন্ধনী দরকার নেই (দুটি বাইট সংরক্ষণ করা) , কারণ এটি পাইথন ২
জোনাথন ফ্রেঞ্চ

একটি অতিরিক্ত অতিরিক্ত স্থান আছে z(p) for
জোনাথন ফ্রেচ

1
ব্যবহৃত হয়েছে map(z,l), s%jএবং print301 বাইটের জন্য it এটি অনলাইনে চেষ্টা করুন!
মিঃ এক্সকোডার

3

পাইথন 2 , 41 25 বাইট

import numpy
numpy.einsum

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

ক্রমবিন্যাস ভেক্টরকে pঅক্ষরের একটি স্ট্রিং হিসাবে দেওয়া হয়। তাই [2,3,1]হিসাবে দেওয়া যেতে পারে 'bca'

@ এরিকথ আউটগল্ফারকে ধন্যবাদ 16 টি বাইট সংরক্ষণ!


এটি 26 টিরও বেশি মাত্রার সমর্থন করে?
এরিক আউটগলফার

আসলে 52 টি মাত্রার বেশি নয়: বড় + ছোট হাতের অক্ষর case
rahnema1

2

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

(a,p,v=[],r=[],g=(a,[d,...p],_,h=(r,[i,...v])=>1/v[0]?h(r[i]=r[i]||[],v):r[i]=a)=>1/d?a.map((e,i)=>g(e,p,v[d]=i)):h(r,v))=>g(a,p)&&r

0-ইন্ডেক্স। ব্যাখ্যা: ক্রমশক্তি ব্যবহার করে পুনরায় সাজানো সূচকের একটি অ্যারের gউপরে অ্যারে aবিল্ডিংয়ের উপরে পুনরাবৃত্তভাবে পুনরাবৃত্তি হয় । একবার নিঃশেষ হয়ে গেলে , পুনরাবৃত্তভাবে অনুমতিপ্রাপ্ত সূচকগুলি ব্যবহার করে ফলাফল অ্যারেতে উপাদানটি সন্নিবেশ করানো হয় ।vpphr

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