ব্যবহারকারীর কার্পেট পাইথন এই সমস্যার উপরে একটি নতুন পদক্ষেপ পোস্ট করেছে যা অনুসন্ধানের স্থান বৃদ্ধি করার কারণে তাত্পর্যপূর্ণ সমাধানগুলিতে আরও বেশি ফোকাস দেয়। আমি ব্যক্তিগতভাবে মনে করি যে চ্যালেঞ্জটি আমার চেয়ে অনেক সুন্দর, সুতরাং সেইটিকে চেষ্টা করে দেখুন!
ভেক্টর রেসিং একটি আসক্তিযুক্ত খেলা যা একটি কলম এবং স্কোয়ার-শাসিত কাগজের একটি শীট দিয়ে খেলানো যেতে পারে। আপনি কাগজে একটি স্বেচ্ছাসেবী রেসট্র্যাক আঁকুন, একটি শুরু এবং শেষের সংজ্ঞা দিন এবং তারপরে আপনি আপনার পয়েন্ট-সাইজের গাড়িটি টার্ন ভিত্তিক পদ্ধতিতে চালিত করবেন। যত তাড়াতাড়ি সম্ভব শেষ পর্যন্ত পৌঁছান, তবে কোনও প্রাচীরের মধ্যে না শেষ হওয়ার বিষয়ে সতর্ক হন!
ট্র্যাক
- মানচিত্রটি একটি দ্বিমাত্রিক গ্রিড, যেখানে প্রতিটি ঘরের পূর্ণসংখ্যার স্থানাঙ্ক থাকে।
- আপনি গ্রিড কোষে সরান।
- প্রতিটি গ্রিড সেলটি হয় ট্র্যাকের অংশ বা এটি প্রাচীর।
- ঠিক একটি ট্র্যাক সেল হ'ল সূচনা সমন্বয়।
- কমপক্ষে একটি ট্র্যাক সেল লক্ষ্য হিসাবে মনোনীত করা হয়। এগুলির যে কোনওটিতে অবতরণ রেসটি সম্পূর্ণ করে। একাধিক গোল কক্ষগুলি অগত্যা সংযুক্ত নয়।
গাড়ী চালনা
আপনার গাড়ী একটি নির্দিষ্ট স্থানাঙ্কে এবং বেগ ভেক্টর দিয়ে শুরু হয় (0, 0)
। প্রতিটি ঘুরে আপনি বেগের প্রতিটি উপাদানকে সামঞ্জস্য করতে পারেন ±1
বা এটি যেমন রেখে দিতে পারেন। তারপরে, ফলস্বরূপ বেগ ভেক্টরটি আপনার গাড়ির অবস্থানটিতে যুক্ত করা হবে।
একটি ছবি সাহায্য করতে পারে! লাল বৃত্তটি আপনার অবস্থানটি শেষ বার ছিল। নীল বৃত্তটি আপনার বর্তমান অবস্থান। আপনার বেগটি লাল থেকে নীল বৃত্তের ভেক্টর। এই ঘুরে আপনি কীভাবে আপনার বেগকে সামঞ্জস্য করবেন তার উপর নির্ভর করে আপনি যে কোনও সবুজ চেনাশোনাতে যেতে পারেন move
আপনি যদি কোনও দেয়ালে অবতরণ করেন, আপনি অবিলম্বে হারাবেন।
তোমার কাজ
আপনি এটি অনুমান করেছেন: একটি প্রোগ্রাম লিখুন যা ইনপুট হিসাবে একটি রেসট্র্যাক দিয়ে দেওয়া, গাড়িটি যতটা সম্ভব কয়েকটি টার্নে লক্ষ্যকোষগুলির একটিতে চালিত করে। আপনার সমাধানটি স্বেচ্ছাসেবী ট্র্যাকগুলির সাথে যুক্তিসঙ্গতভাবে ভালভাবে মোকাবেলা করতে সক্ষম হওয়া উচিত এবং প্রদত্ত পরীক্ষার ক্ষেত্রে বিশেষভাবে অনুকূলিত হওয়া উচিত নয়।
ইনপুট
আপনার প্রোগ্রামটি শুরু করা হলে, স্টিডিন থেকে পড়ুন :
target
n m
[ASCII representation of an n x m racetrack]
time
target
ট্র্যাকটি সম্পূর্ণ করতে আপনি সর্বাধিক সংখ্যক টার্ন নেবেন এবং ট্র্যাকের time
জন্য আপনার মোট সময় বাজেট হ'ল সেকেন্ডে (অগত্যা পূর্ণসংখ্যার নয়) not সময় সম্পর্কে বিস্তারিত জানার জন্য নীচে দেখুন।
নতুন লাইন-বিস্মৃত ট্র্যাকের জন্য, নিম্নলিখিত অক্ষরগুলি ব্যবহৃত হয়:
#
- প্রাচীরS
- শুরু*
- একটি লক্ষ্য.
- অন্যান্য সমস্ত ট্র্যাক সেল (যেমন রাস্তা)
n x m
গ্রিডের বাইরের সমস্ত কক্ষ দেয়াল হিসাবে আবদ্ধ।
সমন্বিত উত্স উপরের বাম কোণে is
এখানে একটি সহজ উদাহরণ:
8
4.0
9 6
###...***
###...***
###...***
......###
S.....###
......###
0-ভিত্তিক সূচক ব্যবহার করে, সূচনা সমন্বয় হবে (0,4)
।
প্রতিটি পদক্ষেপের পরে আপনি আরও ইনপুট পাবেন:
x y
u v
time
কোথায় x
, y
, u
, v
সব 0 ভিত্তিক পূর্ণসংখ্যা। (x,y)
আপনার বর্তমান অবস্থান এবং (u,v)
আপনার বর্তমান বেগ। নোট করুন x+u
এবং / অথবা y+v
সীমা ছাড়িয়ে যেতে পারে।
time
আপনার সময় বাজেটের যা কিছু অবশিষ্ট রয়েছে তা সেকেন্ডে। নির্দ্বিধায় এটিকে অবহেলা করুন। এটি কেবলমাত্র তাদের অংশগ্রহণকারীদের জন্য যারা তাদের বাস্তবায়নকে সময়সীমাতে নিতে চান।
গেমটি শেষ হয়ে গেলে (কারণ আপনি কোনও দেয়ালে অবতরণ করেছেন, সীমা ছাড়িয়ে target
গেছেন, পালা ছাড়িয়েছেন , সময় পেরিয়েছেন বা লক্ষ্যে পৌঁছেছেন), আপনি খালি লাইন পাবেন।
আউটপুট
প্রতিটি পরিবর্তনের জন্য, stdout লিখুন :
Δu Δv
যেখানে Δu
এবং Δv
প্রতিটি এক -1
, 0
, 1
। এটি (u,v)
আপনার নতুন অবস্থান নির্ধারণ করতে যুক্ত করা হবে । কেবল পরিষ্কার করার জন্য, দিকনির্দেশগুলি নীচে রয়েছে
(-1,-1) ( 0,-1) ( 1,-1)
(-1, 0) ( 0, 0) ( 1, 0)
(-1, 1) ( 0, 1) ( 1, 1)
উপরের উদাহরণের জন্য একটি অনুকূল সমাধান হবে
1 0
1 -1
1 0
নোট করুন যে কন্ট্রোলার স্টডারারের সাথে নিজেকে সংযুক্ত করে না , সুতরাং আপনার বট বিকাশের সময় আপনার যে ধরণের ডিবাগ আউটপুট প্রয়োজন হতে পারে তার জন্য আপনি এটি ব্যবহার করতে মুক্ত। যদিও আপনার জমা দেওয়া কোডে এই জাতীয় কোনও আউটপুট সরান / মন্তব্য করুন।
আপনার বট প্রতিটি একক পালাতে সাড়া দিতে আধ সেকেন্ড সময় নিতে পারে। যে সময়গুলির জন্য বেশি সময় নেয়, আপনার target/2
সেকেন্ডের একটি সময় বাজেট (প্রতি ট্র্যাক) হবে । প্রতিবার কোনও পালা আধ সেকেন্ডের বেশি সময় নেয়, অতিরিক্ত সময় আপনার সময় বাজেট থেকে বিয়োগ করা হবে। যখন আপনার সময়ের বাজেট শূন্য হিট হয় তখন বর্তমান রেসটি বাতিল করা হবে।
নতুন: ব্যবহারিক কারণে, আমাকে একটি স্মৃতি সীমা নির্ধারণ করতে হবে (যেহেতু মেমরিটি যুক্তিসঙ্গত ট্র্যাক আকারের জন্য সময়ের চেয়ে সীমাবদ্ধ বলে মনে হয়)। অতএব, আমি কোনো পরীক্ষার রান যেখানে নৌকো চেয়ে বেশি ব্যবহার বাতিল করতে হবে 1GB মেমরি হিসাবে দ্বারা পরিমাপ প্রক্রিয়া এক্সপ্লোরার হিসাবে ব্যক্তিগত বাইট ।
স্কোরিং
20 টি ট্র্যাকের একটি মাপদণ্ড রয়েছে। প্রতিটি ট্র্যাকের জন্য:
- আপনি যদি ট্র্যাকটি সম্পূর্ণ করেন তবে আপনার স্কোরটি এমন একটি চলকের সংখ্যা যা আপনার দ্বারা বিভক্ত
target
কোনও লক্ষ্য কক্ষে পৌঁছতে হবে । - সময় / মেমরি ফুরিয়ে গেলে বা লক্ষ্য পৌঁছাতে না সামনে
target
পালাক্রমে অতিবাহিত হয়েছে বা আপনি যে কোনো সময়ে একটি প্রাচীর অবতরণের / সীমার বাইরে, আপনার স্কোর হল2
। - যদি আপনার প্রোগ্রামটি নিয়ন্ত্রক না হয় তবে আপনার স্কোরটি সেই ট্র্যাকটিতে গড়ে 10 টিরও বেশি রান (দয়া করে আপনার উত্তরে এটি বর্ণনা করুন)।
আপনার সামগ্রিক স্কোরটি পৃথক ট্র্যাক স্কোরের যোগফল। সর্বনিম্ন স্কোর জয়!
তদুপরি, প্রতিটি অংশগ্রহণকারী একটি অতিরিক্ত বেঞ্চমার্ক ট্র্যাক সরবরাহ করতে (এবং দৃ strongly়ভাবে উত্সাহিত) হতে পারে, যা অফিসিয়াল তালিকায় যুক্ত হবে। এই নতুন ট্র্যাক সহ পূর্ববর্তী উত্তরগুলি পুনরায় মূল্যায়ন করা হবে। এটি নিশ্চিত করার জন্য যে কোনও সমাধানের সাথে বিদ্যমান পরীক্ষার কেসগুলি খুব কাছাকাছিভাবে তৈরি করা হয়নি এবং আকর্ষণীয় প্রান্তের কেসগুলি আমি মিস করেছি (তবে যা আপনি দেখতে পাচ্ছেন) এর জন্য অ্যাকাউন্ট করতে হবে।
টাই ব্রেকিং
এখন থেকে যেহেতু ইতিমধ্যে একটি সর্বোত্তম সমাধান রয়েছে, এটি সম্ভবত অংশগ্রহণকারীদের স্কোরের প্রধান কারণ factor
যদি কোনও টাই থাকে (বেশ কয়েকটি জবাবের কারণে সমস্ত ট্র্যাকগুলি নিখুঁতভাবে বা অন্যথায় সমাধান করা হয়), আমি টাইটি ভাঙ্গতে অতিরিক্ত (বৃহত্তর) পরীক্ষার কেস যুক্ত করব। এই টাই-ব্রেকার তৈরি করার সময় কোনও মানব পক্ষপাত এড়ানোর জন্য এগুলি একটি নির্দিষ্ট পদ্ধতিতে তৈরি করা হবে :
- আমি পাশ দৈর্ঘ্য বৃদ্ধি হবে
n
দ্বারা10
এই ভাবে উত্পন্ন গত ট্র্যাক তুলনায়। (তারা টাই না ভাঙ্গলে আমি আকারগুলি এড়িয়ে যেতে পারি)) - ভিত্তি হ'ল এই ভেক্টর-গ্রাফিক
- এই গাণিতিক স্নিপেট ব্যবহার করে কাঙ্ক্ষিত রেজোলিউশনে এটি উত্সাহিত করা হবে ।
- শুরুটি উপরের বাম কোণে। বিশেষত, এটি ট্র্যাকের প্রান্তের শীর্ষ-সারিটির বাম-সর্বাধিক ঘর হবে।
- লক্ষ্যটি নীচে ডানদিকে রয়েছে। বিশেষত, এটি ট্র্যাকের প্রান্তের নীচে-সারিটির ডান-সর্বাধিক ঘর হবে।
target
ইচ্ছা4*n
।
প্রাথমিক বেঞ্চমার্কের চূড়ান্ত ট্র্যাকটি ইতিমধ্যে এর সাথে তৈরি হয়েছিল n = 50
।
নিয়ামক
প্রোগ্রামগুলি যা জমা দেওয়ার পরীক্ষা করে তা রুবিতে লেখা হয় এবং আমি ব্যবহার করব এমন মাপদণ্ডের ফাইলের সাথে গিটহাবের উপরও পাওয়া যাবে। সেখানে একটি উদাহরণ বটও বলা randomracer.rb
হয় যা কেবল এলোমেলো পদক্ষেপ গ্রহণ করে। যোগাযোগটি কীভাবে কাজ করে তা দেখতে আপনি আপনার বটের প্রাথমিক বিন্যাস হিসাবে এটির প্রাথমিক কাঠামোটি ব্যবহার করতে পারেন।
আপনি নিজের পছন্দের ট্র্যাক ফাইলের বিরুদ্ধে নিজের বট চালাতে পারেন:
ruby controller.rb track_file_name command to run your racer
যেমন
ruby controller.rb benchmark.txt ruby randomracer.rb
ভান্ডারে দুটি শ্রেণিও রয়েছে Point2D
এবং Track
। যদি আপনার জমাটি রুবিতে লেখা থাকে তবে আপনার সুবিধার জন্য সেগুলি বিনা দ্বিধায় ব্যবহার করুন।
কমান্ড-লাইন সুইচ
আপনি কম্যান্ড-লাইন সুইচ যোগ করতে পারেন -v
, -s
, -t
বেঞ্চমার্ক ফাইল নাম আগে। আপনি যদি একাধিক স্যুইচ ব্যবহার করতে চান তবে উদাহরণস্বরূপ, আপনি এটিও করতে পারেন -vs
। তারা এটাই করে:
-v
(ভার্বোস): কন্ট্রোলার থেকে আরও কিছুটা ডিবাগ আউটপুট উত্পাদন করতে এটি ব্যবহার করুন।
-s
(নিঃশব্দ): আপনি যদি নিজের অবস্থান এবং গতিবেগ নিজেকে ট্র্যাক করে রাখতে পছন্দ করেন এবং সময়ের বাজেটের বিষয়ে চিন্তা না করেন তবে আপনি এই পতাকাটি দিয়ে প্রতিটি পালা (আপনার জমা দেওয়ার জন্য প্রেরিত) তিনটি লাইন আউটপুট বন্ধ করতে পারেন।
-t
(ট্র্যাকস): আপনাকে পরীক্ষার জন্য পৃথক ট্র্যাকগুলি নির্বাচন করতে দেয়। যেমন -t "1,2,5..8,15"
1, 2, 5, 6, 7, 8 এবং 15 কেবল ট্র্যাক পরীক্ষা করে। এই বৈশিষ্ট্য এবং বিকল্পগুলি পার্সার করার জন্য ভেন্তেরোকে অনেক ধন্যবাদ ।
আপনার জমা
সংক্ষেপে, দয়া করে আপনার উত্তরে নিম্নলিখিতটি অন্তর্ভুক্ত করুন:
- তোমার ফলাফল.
- আপনি যদি এলোমেলো ব্যবহার করে থাকেন তবে দয়া করে এটি জানিয়ে দিন, তাই আমি একাধিক রানের তুলনায় আপনার স্কোরকে গড় করতে পারি।
- আপনার জমা দেওয়ার জন্য কোড।
- উইন্ডোজ 8 মেশিনে চলিত আপনার পছন্দের ভাষার জন্য একটি বিনামূল্যে সংকলক বা দোভাষীর অবস্থান।
- প্রয়োজনে সংকলনের নির্দেশাবলী।
- আপনার জমাটি চালানোর জন্য একটি উইন্ডোজ কমান্ড-লাইন স্ট্রিং।
- আপনার জমা দেওয়ার
-s
পতাকাটি দরকার কিনা । - ( allyচ্ছিকভাবে ) একটি নতুন, দ্রবণযোগ্য ট্র্যাক যা মানদণ্ডে যুক্ত করা হবে। আমি
target
নিজেই আপনার ট্র্যাকের জন্য একটি যুক্তিসঙ্গত নির্ধারণ করব । ট্র্যাকটি যখন বেঞ্চমার্কে যুক্ত হবে, আমি আপনার উত্তরের বাইরে এটি সম্পাদনা করব। আমি আপনাকে আলাদা ট্র্যাকের জন্য জিজ্ঞাসা করার অধিকার সংরক্ষণ করি (কেবলমাত্র আপনি যদি অস্বাভাবিকভাবে বড় ট্র্যাক যোগ করেন তবে ট্র্যাকটিতে অশ্লীল ASCII শিল্প অন্তর্ভুক্ত করুন ইত্যাদি)। আমি যখন পরীক্ষার কেসটি বেঞ্চমার্ক সেটে যুক্ত করব, তখন আমি এই পোস্টের বিশৃঙ্খলা হ্রাস করার জন্য আপনার উত্তরের ট্র্যাকটি বেঞ্চমার্ক ফাইলে ট্র্যাকের লিঙ্কের সাথে প্রতিস্থাপন করব।
আপনি দেখতে পাচ্ছেন, আমি উইন্ডোজ 8 মেশিনে সমস্ত জমা দেওয়ার পরীক্ষা করব। যদি উইন্ডোজটিতে আপনার জমা দেওয়ার কোনও উপায় না থাকে তবে আমি উবুন্টু ভিএম-তেও চেষ্টা করতে পারি। এটি যদিও যথেষ্ট ধীর হবে, সুতরাং আপনি যদি সময় সীমাটি সর্বাধিক করতে চান তবে আপনার প্রোগ্রামটি উইন্ডোজে চলছে কিনা তা নিশ্চিত হয়ে নিন।
সেরা ড্রাইভারটি ভেক্টরিয়াস হয়ে উঠুক!
তবে আমি খেলতে চাই!
আপনি যদি গেমটির জন্য আরও ভাল অনুভূতি পেতে নিজেকে চেষ্টা করতে চান তবে এই বাস্তবায়ন রয়েছে । আমার মনে হয় সেখানে ব্যবহৃত নিয়মগুলি কিছুটা পরিশীলিত, তবে এটি কার্যকর হিসাবে যথেষ্ট similar
লিডারবোর্ড
সর্বশেষ আপডেট হয়েছে: 01/09/2014, 21:29 ইউটিসি
বেঞ্চমার্কের ট্র্যাকগুলি: 25
টাই-ব্রেকার আকার: 290, 440
- 6,86688 - Kuroi Neko
- 8.73108 - ব্যবহারকারী 2357112 - দ্বিতীয় জমা
- 9.86627 - নিনেনিও
- 10.66109 - ব্যবহারকারী 2357112 - 1 ম জমা
- 12.49643 - রায়
- 40.0759 - ছদ্মনাম 117 (সম্ভাব্য)
বিস্তারিত পরীক্ষার ফলাফল । (সম্ভাব্য জমা দেওয়ার স্কোরগুলি পৃথকভাবে নির্ধারণ করা হয়েছে।)