সম্পাদনা করুন:
আরে তাই দেখা যাচ্ছে যে খুব বেশি পুনরাবৃত্তি ঘটছে। লুপ নেই, শাখা নেই।
তবুও ডান ঘোরার জন্য নেতিবাচক এন এবং যে কোনও আকারের বাম রোটেশনের জন্য ধনাত্মক এন, মিউটেশন মুক্ত works
function rotate(A,n,l=A.length) {
const offset = (((n % l) + l) %l)
return A.slice(offset).concat(A.slice(0,offset))
}
গিগলসের জন্য কোড গল্ফ সংস্করণ এখানে
const r = (A,n,l=A.length,i=((n%l)+l)%l)=>A.slice(i).concat(A.slice(0,i))
EDIT1 :: * শাখাবিহীন, মিউটেশনহীন
বাস্তবায়ন।
সুতরাং ওহে, দেখা যাচ্ছে আমার একটি শাখা ছিল যেখানে আমার এটির দরকার ছিল না। এখানে একটি কার্যনির্বাহী সমাধান দেওয়া হল। numণাত্মক num = ডানদিকে ঘুরান | num | ধনাত্মক সংখ্যা = বাম দ্বারা সংখ্যা দ্বারা ঘোরান
function r(A,n,l=A.length) {
return A.map((x,i,a) => A[(((n+i)%l) + l) % l])
}
সমীকরণ ((n%l) + l) % l
মানচিত্রের যেকোন যথেচ্ছ বৃহত মানগুলির ঠিক ধনাত্মক এবং negativeণাত্মক সংখ্যা maps
মূল
বাম এবং ডানদিকে ঘোরান। ধনাত্মক সহ বামদিকে ঘোরান n
, নেতিবাচক দিয়ে ডানদিকে ঘোরান n
।
অশ্লীলভাবে বড় ইনপুটগুলির জন্য কাজ করে n
।
কোনও মিউটেশন মোড নেই। এই উত্তরে খুব বেশি মিউটেশন।
এছাড়াও, বেশিরভাগ উত্তরের চেয়ে কম অপারেশন। কোনও পপ, কোনও ধাক্কা, কোনও ছিটমহল, কোনও শিফট নেই।
const rotate = (A, num ) => {
return A.map((x,i,a) => {
const n = num + i
return n < 0
? A[(((n % A.length) + A.length) % A.length)]
: n < A.length
? A[n]
: A[n % A.length]
})
}
বা
const rotate = (A, num) => A.map((x,i,a, n = num + i) =>
n < 0
? A[(((n % A.length) + A.length) % A.length)]
: n < A.length
? A[n]
: A[n % A.length])
rotate([...Array(5000).keys()],4101)
rotate([...Array(5000).keys()],-4101000)
[...Array(5000).keys()].forEach((x,i,a) => {
console.log(rotate(a,-i)[0])
})
[...Array(5000).keys()].forEach((x,i,a) => {
console.log(rotate(a,i*2)[0])
})
ব্যাখ্যা:
অফসেটের মান হিসাবে A এর প্রতিটি সূচি ম্যাপ করুন। এক্ষেত্রে
offset = num
যদি offset < 0
তারপর offset + index + positive length of A
বিপরীত অফসেট নির্দেশ করবে।
তা হলে offset > 0 and offset < length of A
কেবল এ এর অফসেট সূচকে বর্তমান সূচকটি মানচিত্র করুন
অন্যথায়, অ্যারির সীমানায় অফসেটটি মানচিত্রের অফসেট এবং দৈর্ঘ্যটি মডুলো করুন।
উদাহরণস্বরূপ নিন offset = 4
এবং offset = -4
।
যখন offset = -4
এবং A = [1,2,3,4,5]
প্রতিটি সূচকের offset + index
জন্য, দৈর্ঘ্য (বা Math.abs(offset)
) আরও ছোট করা হবে।
প্রথমে negativeণাত্মক এন এর সূচকের গণনাটি ব্যাখ্যা করি। A[(((n % A.length) + A.length) % A.length)+0]
এবং ভয় দেখানো হয়েছে। হবেনা এটি কাজ করতে আমাকে একটি Repl এ 3 মিনিট সময় লেগেছে।
- আমরা জানি
n
নেতিবাচক কারণ কেস n < 0
। যদি সংখ্যাটি অ্যারের ব্যাপ্তির চেয়ে বড় n % A.length
হয় তবে এটিকে পরিসরে মানচিত্র তৈরি করবে।
n + A.length
A.length
সঠিক পরিমাণে অফসেট করতে সেই সংখ্যাটি যুক্ত করুন ।
- আমরা জানি
n
নেতিবাচক কারণ কেস n < 0
। সঠিক পরিমাণে অফসেট n + A.length
করতে সেই সংখ্যাটি যুক্ত করুন A.length
।
পরবর্তী এটিকে মডুলো ব্যবহার করে এ এর দৈর্ঘ্যের সীমাতে মানচিত্র করুন। দ্বিতীয় মডুলাসের গণনার ফলাফলকে সূচকযোগ্য পরিসরে মানচিত্রের জন্য প্রয়োজনীয়
প্রথম সূচক: -4 + 0 = -4। উঃ দৈর্ঘ্য = 5. দৈর্ঘ্য - 4 = 1. এ 2 2 মানচিত্র সূচক 0 থেকে 2।[2,... ]
- পরবর্তী সূচি, -4 + 1 = -3। 5 + -3 = 2. এ 2 হয় 3. মানচিত্র সূচক 1 থেকে 3।
[2,3... ]
- ইত্যাদি
একই প্রক্রিয়া প্রযোজ্য offset = 4
। প্রতিটি সূচকের জন্য কখন offset = -4
এবং A = [1,2,3,4,5]
, offset + index
এর পরিমাণ আরও বাড়িয়ে তুলবে।
4 + 0 = 0
। A [0] এ মান [4] এ মানচিত্র করুন।[5...]
4 + 1 = 5
, 5 সূচকের বাইরে সীমা ছাড়িয়ে যায়, সুতরাং অবশিষ্ট 2 তে মান 2 এ মানচিত্র করুন 5 / 5
, যা 0 এ। 2 = মান [0] এ [0]।[5,1...]
- পুনরাবৃত্তি
months[new Date().getMonth()]
চলতি মাসের নাম পেতে কেন ব্যবহার করবেন না ?