কীভাবে ফ্লপ করবেন আমাকে বলুন


29

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

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a.flop(4)
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]

ফ্লপ অপারেশন সম্পর্কে দুর্দান্ত জিনিস হ'ল আপনি এটি ব্যবহার করতে পারেন কিছু দুর্দান্ত জিনিসগুলি তালিকায় কিছু সাজান যেমন বাছাই করা । আমরা ফ্লপগুলির সাথে অনুরূপ কিছু করতে যাচ্ছি:

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

এটি ফ্লপ দিয়েও করা যায়! উদাহরণস্বরূপ, নিম্নলিখিত তালিকাটি গ্রহণ করুন:

>>> a = [3, 2, 1, 4, 3, 3, 2]
>>> a.flop(4)
[4, 1, 2, 3, 3, 3, 2]
>>> a.flop(3)
[2, 1, 4, 3, 3, 3, 2]
>>> a.flop(6)
[3, 3, 3, 4, 1, 2, 2]

এটি আমাদের আজকের চ্যালেঞ্জের সংজ্ঞাতে নিয়ে যায়:

পূর্ণসংখ্যার একটি তালিকা দেওয়া হয়েছে, ফ্লপের কোনও সেট আউটপুট করুন যার ফলে তালিকাটি প্রতিবেশী হবে।

উদাহরণ হিসাবে সর্বশেষ তালিকাটি ব্যবহার করে, আপনার আউটপুট করা উচিত:

4
3
6

কারণ তালিকাটি 4 দ্বারা ফ্লপ করা, তারপরে 3 দ্বারা, তারপরে 6 দ্বারা প্রতিবেশী তালিকার ফলস্বরূপ। মনে রাখবেন যে আপনি কি না কম সম্ভব তালিকা প্রিন্ট দরকার প্রতিবেশীদের একটি তালিকা flops। আপনি যদি মুদ্রিত ছিল:

4
4
4
3
1
1
6
2
2

পরিবর্তে, এটি এখনও একটি বৈধ আউটপুট হবে। যাইহোক, আপনি may না তালিকার দৈর্ঘ্যের তুলনায় কি কখনো আউটপুট একটি সংখ্যা বড় করা হয়েছে। এটি কারণ একটি তালিকার জন্য a = [1, 2, 3], কল a.flop(4)করা অযৌক্তিক।

এখানে কিছু উদাহরন:

#Input:
[2, 6, 0, 3, 1, 5, 5, 0, 5, 1]

#Output
[3, 7, 8, 6, 9]


#Input
[1, 2]

#Output
<any list of integers under 3, including an empty list>


#Input
[2, 6, 0, 2, 1, 4, 5, 1, 3, 2, 1, 5, 6, 4, 4, 1, 4, 6, 6, 0]

#Output
[3, 19, 17, 7, 2, 4, 11, 15, 2, 7, 13, 4, 14, 2]


#Input
[1, 1, 1, 1, 2, 2, 2, -1, 4]

#Output
[]


#Input
[4, 4, 8, 8, 15, 16, 16, 23, 23, 42, 42, 15]

#Output
[12, 7]

মনে রাখবেন যে এই প্রতিটি উদাহরণে প্রদত্ত আউটপুটটি কেবল একটি সম্ভাব্য বৈধ আউটপুট। আমি আগেই বলেছি, প্রদত্ত তালিকার প্রতিবেশী যে কোনও ফ্লপই একটি বৈধ আউটপুট । ফ্লপগুলির প্রদত্ত একটি তালিকা সঠিকভাবে প্রতিবেশীর একটি তালিকার কিনা তা যাচাই করতে আপনি এই অজগর স্ক্রিপ্টটি ব্যবহার করতে পারেন ।

আপনি কোনও যুক্তিসঙ্গত ফর্ম্যাটে ইনপুট এবং আউটপুট নিতে পারেন। উদাহরণস্বরূপ, ফাংশন আর্গুমেন্ট / রিটার্ন মান, STDIN / STDOUT, একটি ফাইল পড়া / লেখার ইত্যাদি সমস্ত বৈধ। যথারীতি এটি , তাই আপনি যা করতে পারেন তার সংক্ষিপ্ততম প্রোগ্রামটি তৈরি করুন এবং মজা করুন! :)


3
আমি এটিকে ফ্ল (ওটিং পয়েন্ট) অপ (ইরেশন) হিসাবে শুনেছি।
ওয়েজুন চাউ

3
@ ওয়েইজুনঝৌ এটি গণনার গতির একটি পরিমাপ, গণনা কার্যক্রমের জন্য, পাইওয়াই একটি হার্ডওয়ারের কাজ চালিয়েছিলেন। en.wikipedia.org/wiki/FLOPS
iPhoenix

3
সাবমিশনগুলিকে কি ডিটারমিনিস্টিক হতে হবে বা অ্যারে গ্রুপ করা না হওয়া পর্যন্ত আমি সিউডো-এলোমেলোভাবে ফ্লপ করতে পারি?
ডেনিস

3
আউটপুটে শূন্য ফ্লপগুলি উপস্থিত হওয়ার অনুমতি রয়েছে?
লাইকনি

4
সম্পর্কিত । এনবি এই প্রশ্নের কোনও উত্তরই এইটির একটি উত্তর হতে পারে, তবে যেহেতু সাজানো হচ্ছে "প্রতিবেশী" হওয়ার চেয়ে আরও শক্তিশালী শর্ত এটি তাদের গল্ফের বাইরে বেরিয়ে আসা সম্ভব হতে পারে সুতরাং এটি কোনও সদৃশ হতে পারে না (যদিও সত্য যে একমাত্র এখনও পর্যন্ত উত্তর উত্সাহজনক নয়)।
পিটার টেলর

উত্তর:


7

হাস্কেল , 98 71 বাইট

h.r
h(x:s)|(a,b)<-span(/=x)s=l b:l s:h(b++r a)
h e=e
r=reverse
l=length

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

ব্যাখ্যা

দৈর্ঘ্যের তালিকার জন্য nএই পদ্ধতিটি 2*nফ্লপ তৈরি করে । এটি তালিকার শেষ উপাদানটি দেখে তালিকার একই উপাদানটি অনুসন্ধানের আগে এবং দ্বিতীয় থেকে শেষ অবস্থানে ফিরিয়ে এনে কাজ করে। তারপরে সর্বশেষ উপাদানটি মুছে ফেলা তালিকাটি পুনরাবৃত্তভাবে "প্রতিবেশী" হয়।

তালিকার [1,2,3,1,2]জন্য অ্যালগোরিদম এইভাবে কাজ করে:

[1,2,3,1,2]  flip longest prefix that ends in 2: flop 2
[2,1,3,1,2]  bring first element to second to last position: flop n-1 = flop 4
[1,3,1,2,2]  recursively work on n-1 list
[1,3,1,2]    there is no other 2: flop 0
[1,3,1,2]    flop n-1 = flop 3
[1,3,1,2]    recurse
[1,3,1]      flop 1
[1,3,1]      flop 2
[3,1,1]      recurse
[3,1]        flop 0
[3,1]        flop 1
 ...

সমস্ত মিলে এটি ফ্লপ [2,4,0,3,1,2,0,1,0,0]এবং প্রতিবেশী তালিকা উপার্জন করে [3,1,1,2,2]


6

ওল্ফ্রাম ভাষা (গণিত) , 71 বাইট

If[(n=Tr[1^#])<1,{},{i=Last@Ordering@#,n,n-1,i-1}~Join~#0[#~Drop~{i}]]&

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

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

দৈর্ঘ্যের একটি অ্যারে দেওয়া n, 4nফ্লপগুলির ক্রম আউটপুট দেয় যা ক্রমটিকে ক্রম অনুসারে বাছাই করে: বিশেষত, একে অপরের পাশে সদৃশ উপাদান স্থাপন করে।

ধারণাটি হ'ল একটি অ্যারে বাছাই করার জন্য, আমরা এর বৃহত্তম উপাদানটি প্রান্তে সরিয়ে নিয়ে যাই এবং তারপরে n-1অ্যারের প্রথম উপাদানগুলিকে বাছাই করি । ফ্লপ ক্রিয়াকলাপ বাস্তবায়ন এড়াতে, আমরা বৃহত্তম উপাদানটিকে এমনভাবে সরিয়ে নিয়ে যা যা অন্য উপাদানগুলিকে বিরক্ত করে না:

{3, 2, 1, 5, 3, 3, 2}    starting array, with largest element in position 4
{5, 1, 2, 3, 3, 3, 2}    flop 4 to put the largest element at the beginning
{2, 3, 3, 3, 2, 1, 5}    flop 7 to put the largest element at the end
{1, 2, 3, 3, 3, 2, 5}    flop 6 (7-1) to reverse the effect of flop 7 on other elements
{3, 2, 1, 3, 3, 2, 5}    flop 3 (4-1) to reverse the effect of flop 4 on other elements

সাধারণভাবে, যদি বৃহত্তম উপাদানটি অবস্থানে থাকে iতবে ফ্লপগুলির ক্রম যা এটিকে প্রান্তে নিয়ে যায় i, n, n-1, i-1


আপনি সর্বাধিক উপাদানটিকে শেষের দিকে নিয়ে যেতে পারেন i, n। তাহলে কেন n-1, i-1? স্থিতিশীল বাছাইয়ের প্রয়োজন নেই ।
পিটার টেলর

@ পিটারটেলর আমি মনে করি না যে উত্তরটি আসলে ফ্লপগুলি সম্পাদন করে, বরং এটি প্রতিবারের চেয়ে বড় উপাদানটিকে সরিয়ে দেয় এবং ফ্লপের ক্ষেত্রে এই অপারেশনের সমতুল্য আউটপুট দেয়।
নীল


3

জেলি , 19 17 বাইট

ỤỤạ‘Ḣ
ỤÇÐƤĖµUż’ṚF

তালিকাটি বাছাই করে।

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


আমি মনে করি ỤŒ¿’Æ!‘ṚĖµUż’ṚFযেহেতু বিপরীত ধরনগুলি Œ¿মডুলো L!
জোনাথন অ্যালান

যে কারণেই হোক না কেন, এটি শেষ পরীক্ষার মামলার জন্য কাজ করে না, যার অর্থ সম্ভবত আমার কোডটিও কিছু অস্পষ্ট প্রান্তের ক্ষেত্রে ব্যর্থ হবে ...
ডেনিস

এবং এটি প্রকৃতপক্ষে ইনপুট জন্য ব্যর্থ হয় [4, 3, 2, 1, 3]। হতাশাজনক।
ডেনিস

ওহ, বু; এটা লজ্জার.
জোনাথন অ্যালান

Ụ>Ṫ$ƤSạỤĖµUż’ṚFসহায়ক লিঙ্কটি প্রতিস্থাপন করে 2 বাইট সংরক্ষণ করা।
মাইল

2

পরিষ্কার , 88 বাইট

আমি মনে করি গার্ডদের সাথে সম্ভবত একটি সংক্ষিপ্ততর আছে, তবে আমি এটি এখনও পাইনি।

import StdEnv
$[h:t]#(a,b)=span((<>)h)t
=map length[b,t]++ $(b++r a)
$e=e
r=reverse

$o r

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

আক্ষরিক হিসাবে একটি ফাংশন। লাইকোনির হাস্কেল জবাবের মতো একইভাবে কাজ করে তবে কিছুটা ভিন্নভাবে গল্ফ করেছে এবং অবশ্যই আলাদা ভাষায়।


1

জাভাস্ক্রিপ্ট, 150 বাইট

(a,f=n=>(a=[...a.slice(0, n).reverse(),...a.slice(n)],n),l=a.length,i=0)=>a.reduce(c=>[...c,f(a.indexOf(Math.max(...a.slice(0, l-i)))+1),f(l-i++)],[])

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

জাভাস্ক্রিপ্ট, 151 বাইট

a=>{f=n=>(a=[...a.slice(0,n).reverse(),...a.slice(n)],n),r=[];for(i=a.length+1;--i>0;)r.push(f(a.indexOf(Math.max(...a.slice(0, i)))+1),f(i));return r}

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

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

Ungolfed:

array => {
  let flop = n => {
    array = [...array.slice(0, n).reverse(), ...array.slice(n)]; 
    return n;
  }
  let flops = [];
  for (let i = array.length + 1; --i > 0;) 
  {
    let maxIndex = array.indexOf(Math.max(...array.slice(0, i)));
    flops.push(flop(maxIndex + 1), flop(i));
  }
  return flops;
}

0

পার্ল 5.10 (বা উচ্চতর), 66 বাইট

দ্য এর +3জন্য অন্তর্ভুক্ত থাকে ভাষাটি স্তরকে ৫.১০ স্তরে আনতে বিনামূল্যে বিবেচনা করা হয়-nuse 5.10.0

#!/usr/bin/perl -n
use 5.10.0;
$'>=$&or$.=s/(\S+) \G(\S+)/$2 $1/*say"$. 2 $."while$.++,/\S+ /g

এসটিডিআইএন-এ এক লাইন হিসাবে ইনপুটটি চালান:

flop.pl <<< "1 8 3 -5 6"

বারবার যে কোনও বিবর্তন সন্ধান করে তালিকাটি সাজান, সম্মুখ দিকে ফ্লপ করে তারপরে বিপর্যয়টি ফ্লপ করে এবং সবকিছুকে তার পুরানো অবস্থানে ফিরিয়ে ফেলা।

এই একটিতে অজগর হিসাবে একই বলপার্কে পাওয়া আশ্চর্যজনকভাবে কঠিন ছিল :-)


0

সি (জিসিসি) , 165 160 বাইট

m,j,t;f(A,l)int*A;{for(j=0;j+j<l;A[j]=A[l+~j],A[l+~j++]=t)t=A[j];}F(A,l)int*A;{for(;l;f(A,++m),printf("%d,%d,",m,l),f(A,l--))for(j=m=0;j<l;j++)m=A[j]>A[m]?j:m;}

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