একাধিক ফাইল ডিফ্র্যাগ করতে খুব কম ডিস্ক লিখেছে


18

ভূমিকা

একটি ডিস্ক একটি লিনিয়ার ধারক যা ব্লকগুলির 0মাধ্যমে সূচকযুক্ত size-1

একটি ফাইল হ'ল সেই ফাইল দ্বারা ব্যবহৃত ব্লক সূচকগুলির একটি তালিকাভুক্ত তালিকা।

একটি উদাহরণ ফাইল সিস্টেম যেমন প্রকাশ করা হয়:

15 ALPHA=3,5 BETA=11,10,7

"ডিস্কটির 15 টি ব্লক রয়েছে, ALPHA ফাইলের প্রথম ব্লকটি সূচক 3 এ ডিস্ক ব্লক ..."

ডিস্ক মানচিত্রটি এভাবে আঁকতে পারে:

Block Index  00  01  02  03  04  05  06  07  08  09  10  11  12  13  14
Contents    |   |   |   |A0 |   |A1 |   |B2 |   |   |B1 |B0 |   |   |   |

যখন তার মধ্যে থাকা সমস্ত ফাইল স্বচ্ছতার সাথে সংরক্ষণ করা হয় তখন একটি ডিস্কটিকে ডিফ্রেজড হিসাবে বিবেচনা করা হয়।

তোমার লক্ষ্য:

আইনী পদক্ষেপের একটি সংক্ষিপ্ততম ক্রম প্রেরণ করুন যা প্রদত্ত ডিস্কটিকে অগ্রাহ্য করবে।

আইনী পদক্ষেপ

একটি পদক্ষেপ তথ্য তিন টুকরা রয়েছে: নাম একটি ফাইলের, ব্লক একটি সূচক ফাইলে সরানো হবে, এবং সূচক ডিস্ক ব্লক এটি চলে আসে।

উদাহরণ স্বরূপ

ALPHA:1>4

"ডিস্কের 4 টি ব্লক করতে ALPHA ফাইলের 1 টি ব্লককে সরান" "

এই পদক্ষেপের পরে, উদাহরণস্বরূপ ফাইল সিস্টেমটি এটি এখন

15 ALPHA=3,4 BETA=11,10,7

Block Index  00  01  02  03  04  05  06  07  08  09  10  11  12  13  14
Contents    |   |   |   |A0 |A1 |   |   |B2 |   |   |B1 |B0 |   |   |   |

পূর্বে-বাসিন্দা ডিস্ক ব্লক সুস্পষ্টভাবে পরিষ্কার করা হয়েছে। সমানভাবে, আপনি এটি ডিস্কে দুটি ব্লক অদলবদল হিসাবে দেখতে পারেন তবে অদলবদলের একটি ব্লক অবশ্যই খালি থাকতে হবে

ডেটা ধ্বংস হতে পারে না। ফাইলগুলি কোনও পর্যায়ে ব্লক ভাগ করতে পারে না এবং চলাফেরাগুলি অবশ্যই ডিস্কের মধ্যে থাকতে পারে। নিম্নলিখিত পদক্ষেপগুলি অবৈধ : ALPHA:0>10(বিটা-র মালিকানাধীন), ALPHA:3>0( এএলএফএ-তে কোনও ব্লক নেই), ALPHA:0>-1(কোনও ডিস্ক সূচক নেই), ALPHA:0>15(ডিস্ক সূচকটি খুব বড় নয়)

উদাহরণ 1

উপরোক্ত উদাহরণটি পুরোপুরি সমাধান করা।

ALPHA:0>4
BETA:0>9
BETA:2>11

ফাইলগুলি সমাধানের সাথে সংলগ্ন হতে হবে না, কেবল নিজের মধ্যে অবিচ্ছিন্ন।

উদাহরণ 2

এখানে আরও বাধিত মামলা রয়েছে

ইনপুট:

10 A=1,2,3 B=6,7,8 C=4,5,0

আউটপুট:

B:2>9
B:1>8
B:0>7
C:2>6

এই ফাইল সিস্টেমের অগ্রগতি হ'ল:

Block Index  00  01  02  03  04  05  06  07  08  09
Contents    |C2 |A0 |A1 |A2 |C0 |C1 |BO |B1 |B2 |   |
            |C2 |A0 |A1 |A2 |C0 |C1 |BO |B1 |   |B2 |
            |C2 |A0 |A1 |A2 |C0 |C1 |BO |   |B1 |B2 |
            |C2 |A0 |A1 |A2 |C0 |C1 |   |B0 |B1 |B2 |
            |   |A0 |A1 |A2 |C0 |C1 |C2 |B0 |B1 |B2 |

এটিকে ডিগ্র্যাগ করার একটি বিকল্প উপায় হ'ল C:2>9তারপরে Aএকটি পদক্ষেপ নামিয়ে আনা, তারপরে Cএকটি পদক্ষেপ নামিয়ে আনুন , তবে এটি করুন C:2>5তবে এটি কোনও আইনি সমাধান হবে না কারণ এতে বিকল্পের চেয়ে আরও বেশি পদক্ষেপ রয়েছে

প্রতিনিধিত্ব

আপনি ইনপুটটির জন্য যেকোন উপস্থাপনা ব্যবহার করতে পারবেন যতক্ষণ না এটি যুক্তিসঙ্গতভাবে কোনও মৌলিক স্ট্রিংয়ের কাছাকাছি থাকে। আপনার ভাষার উপর নির্ভর করে, প্রথম উদাহরণে ইনপুট হিসাবে চিহ্নিত হতে পারে

"15 ALPHA=3,5 BETA=11,10,7"
[15," ","ALPHA","=",3,",",5," ","BETA","=",11,",",10,",",7]
(15,(("ALPHA",(3,5)),("BETA",(11,10,7))))
etc

একইভাবে, আউটপুট আপনার ভাষার জন্য লগ হিসাবে প্রিন্ট করা, মানব-পঠনযোগ্য এবং আইনী পদক্ষেপের আদেশিত তালিকার প্রতিনিধিত্ব করে, যা প্রতিটি পদক্ষেপকে 1) ফাইল-নাম, 2) ফাইল-ব্লক-সূচক হিসাবে বর্ণনা করা হতে পারে be , 3) নতুন-ডিস্ক-ব্লক-সূচক

"ALPHA:1>6 BETA:2>9"
(0=>(0=>"ALPHA",1=>"1",2=>"6"), 1=>(0=>"BETA",1=>"2",2=>"9"))
["ALPHA",1,6,"BETA",2,9]
etc

আবশ্যকতা

আপনার কোড অবশ্যই কোনও আকারের ডিস্ক, এবং কোনও ফাইল এবং আকার এবং আকার গ্রহণ করবে।

বৈধ প্রাথমিক ফাইল সিস্টেমের রাজ্যগুলিকে বর্ণনা করে না এমন ইনপুটগুলি অপরিজ্ঞাত আচরণের দিকে নিয়ে যেতে পারে।

আপনার কোড কোনও সংজ্ঞায়িত ইনপুট জন্য অবশ্যই একটি সংক্ষিপ্ততম চলন সমাধান উত্পাদন করতে হবে ।

আপনার উত্পন্ন সমস্ত পদক্ষেপ অবশ্যই আইনী হতে হবে; আপনার উত্পাদিত প্রতিটি পদক্ষেপ প্রয়োগের পরে ফাইল সিস্টেমটি অবশ্যই একটি বৈধ অবস্থায় থাকতে হবে।

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

যেখানে একাধিক সংক্ষিপ্ত সমাধান রয়েছে সেখানে বৈধ হিসাবে যে কোনও নির্বাচন করা যেতে পারে।

সংক্ষিপ্ততম কোড জিতেছে। আপনার কোড সহ কমপক্ষে একটি নতুন অযৌক্তিক উদাহরণ ইনপুট এবং এর আউটপুট পোস্ট করুন।


একটি স্বেচ্ছাসেবক ডিস্কের জন্য "সংক্ষিপ্ততর সিক্যুয়েন্স" কত দিন হয় তা আমরা কীভাবে খুঁজে পাব? (জিজ্ঞাসা করা কারণ যদি উত্তর এ বলে যে সবচেয়ে সংক্ষিপ্ততম 6 টি পদক্ষেপ এবং উত্তর বি বলেছেন যে সংক্ষিপ্ততম 5 হয় তবে উত্তর এ কি অযোগ্য হয়ে যায়?)
শে

প্রস্থ-প্রথম-অনুসন্ধান প্রয়োজন হলে একটি রেফারেন্স সমাধান সরবরাহ করতে পারে।
স্প্রেফ

2
এটি সম্ভবত [পারমাণবিক কোড-গল্ফ] চ্যালেঞ্জ হিসাবে আরও ভাল কাজ করবে। আপনি আরও উত্তর পাবেন। সংক্ষিপ্ততম কোডের পরিবর্তে, সবচেয়ে কম ডিস্ক লেখার সাথে বিজয়ীরই উত্তর হবে।
mbomb007

উত্তর:


1

পাইথন 3 , 295 বাইট

S,F=eval(input());d=[0]*S;E=enumerate
for n,P in F:
 for j,p in E(P):d[int(p)]=n,j
Z=[(d,())]
while Z:d,p=Z.pop(0);any(e and(e[0],e[1]+1)in d and(S<j+2or(e[0],e[1]+1)!=d[j+1])for j,e in E(d))or print(p).q;{d[j]or exec("D=d[:];D[j]=e;D[k]=0;Z+=(D,p+(e,j)),")for j,_ in E(d)for k,e in E(d)if d[k]}

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


আরেকটি পরীক্ষার মামলা

ইনপুট:
   7 এএলএফ = 6,4,0 বিইটি = 5,1 জিমেল = 3

প্রাথমিক ডিস্কের অবস্থা:
   এ 2 বি 1 __ জি0 এ 1 বি 0 এ 0

সমাধান:
   আলেফ: 2> 2
   আলেফ: 0> 0
   বাজি: 1> 6
   আলেফ: 1> 1

ভিজ্যুয়ালাইজড সমাধান:
   এ 2 বি 1 __ জি0 এ 1 বি 0 এ 0
   __ B1 A2 G0 A1 B0 A0
   A0 B1 A2 G0 A1 B0 __
   A0 __ A2 G0 A1 B0 B1
   A0 A1 A2 G0 __ B0 B1

Ungolfed সংস্করণ

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