সান্টাকে তার উপহারগুলি সরবরাহ করতে কত সময় লাগবে?


12

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

জনসংখ্যা বৃদ্ধির কারণে, এই বছরের জন্য সান্তা কিছুটা বেশি চাপে। যদিও অতীতে আমরা খুব অবিচ্ছিন্নভাবে পরিচালনা করেছি, আমরা আরও বেশি সংক্রামিত হয়ে পরীক্ষা-নিরীক্ষা শুরু করেছি। সুতরাং, সান্তাকে জানতে হবে যে একটি নির্দিষ্ট সংখ্যক ধনুকের সঙ্গে প্রতিটি অঞ্চলে উপহার প্রদান করতে কত সময় লাগবে।

কয়লার ওজন গত দুই বছরে পরিবর্তিত হয়নি - এটি উপহারের তুলনায় এখনও ভারী, তাই সান্তার বাড়ির দুষ্টু ব্যক্তির প্রতি তিনটি এলভ এবং বাড়ির প্রতি ভাল লোকের জন্য দুটি এলভ প্রয়োজন needs

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

পরী যে উপহার প্রদান করা হয় ব্যয় করতে হবে চার সেকেন্ড * প্রতিটি উপহার প্রদান, এবং পরী যে ব্যয় কয়লা প্রয়োজন প্রদান করা হয় পাঁচ সেকেন্ডের * প্রতিটি তা প্রদান (প্রতি সান্তা এভিয়েশন অ্যাডমিনিস্ট্রেশন প্রবিধান হিসাবে, তাদের উপর কয়লা ধুলো দিয়ে গ্লাভস পরে অবিলম্বে incinerated করা আবশ্যক স্লাইহে আরোহণ, যা কিছু সময় নেয়)। অতিরিক্তভাবে, ঘরগুলি মানচিত্রে, বাম থেকে ডানদিকে ক্রম হিসাবে অবশ্যই দেখতে হবে এবং এলভেসগুলি বর্তমানে অন্য বাড়িতে যে কোনও উপহার প্রদান করা না হওয়া অবধি অন্য বাড়িতে উপহার সরবরাহ করা শুরু করতে পারে না।

যদি আমরা ধরে নিয়েছিলাম যে এই অঞ্চলের জন্য সান্টার পর্যাপ্ত এলভ রয়েছে, তবে দুষ্টু তালিকার কাউকে উপহার দেওয়ার জন্য যতক্ষণ লাগবে, ঘরে প্রতি 5 সেকেন্ড, বা ঘরে প্রতি 4 সেকেন্ডের মতো লাগবে যদি সবাই সুন্দর হয় is

তবুও, আগের মরসুমের বিপরীতে, আসন্ন ক্রিসমাস সান্টায় প্রতিটি অঞ্চলের জন্য পর্যাপ্ত ধনুকের চেয়ে বেশি নাও থাকতে পারে, সুতরাং 4 সেকেন্ডের সময় নিখুঁত ন্যূনতম পরিমাণ * যা কোনও প্রদত্ত বাড়ীতে উপহার দেওয়ার জন্য সময় লাগবে, যদি না 0 থাকে চমৎকার ব্যক্তি এবং 0 দুষ্টু লোকেরা যে ক্ষেত্রে 0 সেকেন্ড লাগবে।

অতিরিক্তভাবে, এমনকি বাড়ির কোনও একটিতে দুষ্টু তালিকায় কেউ থাকলে সান্তার কমপক্ষে তিনটি এলভের প্রয়োজন হবে। যদি কমপক্ষে কোনও বাড়ির সুন্দর তালিকায় কেউ থাকে এবং তাদের কারও মধ্যে দুষ্টু তালিকায় লোক না থাকে, সান্টাকে কমপক্ষে দুটি ধনুকের প্রয়োজন হবে। যদি বাড়ির কোনওটিই ক্রিসমাসের অনুভূতিতে না থাকে তবে যে কোনও এলভের (0 সহ) 0 সেকেন্ড লাগবে।

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

বাড়ির দুপাশে একটি সংখ্যা থাকবে - বামদিকে একটি ঘরের দুষ্টু লোকের প্রতিনিধিত্ব করে এবং ডানদিকে একটি ঘর বাড়ির সুন্দর লোকের প্রতিনিধিত্ব করে। যদি একদিকে কোনও সংখ্যা না থাকে তবে এটি 0 হিসাবে ব্যাখ্যা করা হয়।

আমি জানি এটি পাগল শোনায় তবে কিছু লোক "ক্রিসমাস পছন্দ করেন না", তাই কখনও কখনও কোনও বাড়ির দু'পাশে নম্বর নাও থাকতে পারে।

সান্তার মানচিত্রগুলির মধ্যে একটিতে এটির মতো দেখতে পাওয়া যেতে পারে।

1*3+2*+*5+*+4*7

ধরা যাক সান্টার ঘুমের মধ্যে নয়টি এলভ রয়েছে।

  1. (0 সে) প্রথম ঘরে 1 দুষ্টু এবং 3 জন সুন্দর মানুষ রয়েছে। তিনটি এলভেল কয়লা সরবরাহ করে, পাঁচ সেকেন্ড সময় নেয় এবং ছয়টি উপহার দেয়, চার সেকেন্ড নেয়। পাঁচ সেকেন্ড পরে, সান্তা এর sleigh পাশের বাড়িতে চলে আসে

  2. (5 এস) দ্বিতীয় বাড়িতে 2 দুষ্টু এবং 0 সুন্দর লোক রয়েছে। এলভের ছয়টি পাঁচ সেকেন্ড সময় নিয়ে কয়লা সরবরাহ করে। পাঁচ সেকেন্ড পরে, সান্তা এর sleigh পাশের বাড়িতে চলে আসে

  3. (10s) তৃতীয় বাড়িতে 0 টি দুষ্টু এবং 5 জন সুন্দর লোক রয়েছে। এইভের আট জন চারটি উপহার বিতরণ করতে যায় (যে পেছনে ফেলেছে সে উপহার উপহার দিতে পারে না)। চার সেকেন্ড পরে, সমস্ত ধনুকগুলি ফিরে এসেছিল এবং তাদের মধ্যে দু'জন আবার অন্যটিকে সরবরাহ করতে যায় (পাশের বাড়ীতে যাওয়ার আগে ধনুকগুলি ফিরে আসতে অপেক্ষা করতে হবে), আরও চার সেকেন্ড সময় নিয়ে

  4. (18s) চতুর্থ বাড়ি ক্রিসমাস স্পিরিটে নয়, সুতরাং 0 দুষ্টু এবং 0 জন সুন্দর লোক রয়েছে এবং এড়িয়ে চলেছে

  5. (18s) পঞ্চম বাড়িতে 4 দুষ্টু এবং 7 জন সুন্দর লোক রয়েছে। এটি কিছুটা জটিল হয়ে পড়ে ...

    I. সব ধরণের এলভ তিনটি কয়লার তিনটি উপহার সরবরাহ করতে যান (টি + 0 এস ছেড়ে যান, টি + 5 এস ছেড়ে যান) II। 5 এর পরে, তারা সকলেই পিছলে ফিরে আসে, এবং তাদের মধ্যে তিনটি কয়লার সর্বশেষ উপস্থিতি সরবরাহ করতে যায় (t + 5s ছেড়ে যান, টি + 10 গুলি ছেড়ে যান) তাদের মধ্যে অন্য ছয়টি তিনটি উপহার উপহার দিতে যান (টি + ছেড়ে যান) 5 এস, টি +9 এস রিটার্ন করুন)।

    তৃতীয়। চার সেকেন্ড পরে, ছয়টি এলভাস ফিরে এসেছে এবং আরও তিনটি ভাল উপহার প্রদান করতে চলে যাবে (টি + 9 এস ছেড়ে দিন, টি +13 ছেড়ে দিন)।

    চতুর্থ। তারা চলে যাওয়ার এক সেকেন্ড পরে, যে তিনটি এলভেল কয়লার উপস্থিতি সরবরাহ করছিল তারা ফিরে আসে এবং তাদের মধ্যে দু'টি শেষ চমৎকার উপহার দেওয়ার জন্য ছেড়ে যায় (প্রস্থান + 10s, টি + 14)

  6. (১৮ + ১৪ = ৩২ সেকেন্ড ) সান্তা সেই অঞ্চলে উপহার প্রদান শেষ করেছেন।

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

1*2+*+*4+1*
2*4+3*+1*6+*
*+*+4*2+1*1
*4+*3+1*+2*3
3*10+2*+*5+*

সঙ্গে 26 পরী (অথবা কোন উচ্চতর পরিমাণ), এটা সান্তা গ্রহণ করা হবে 71 সেকেন্ড
সঙ্গে 20 পরী , এটা সান্তা গ্রহণ করা হবে 76 সেকেন্ড15 এলভাস
সহ এটি সান্টাকে 80 সেকেন্ড সময় লাগবে ।
সঙ্গে 3 পরী , এটা সান্তা লাগবে 288 সেকেন্ড
সঙ্গে 2 পরী (অথবা কোন নিম্ন পরিমাণ), এটি হবে অসম্ভব।

ওহ, এবং আরও একটি বিষয় - এলভগুলি ক্রম সরবরাহ করে এমন ক্রমগুলি (দুষ্টু / সুন্দর লোকদের উপহার দেওয়ার সময়ের পার্থক্যের কারণে), সুতরাং আপনার কোডটি সর্বদা সর্বদা কমপক্ষে সময় আউটপুট করা উচিত যাতে এলভেস উপহার প্রদান করতে পারে।

চ্যালেঞ্জ

সান্টাকে নির্ধারণ করতে যে প্রদত্ত সংখ্যক ধনুকের উপহার সরবরাহ করতে কত সময় লাগবে তা নির্ধারণ করতে সহায়তা করুন।

ঘর

  • একটি ঘর একটি দ্বারা প্রতিনিধিত্ব করা হয় *
  • ঘরগুলি বিভক্ত হয় +
  • ঘরের বামে সংখ্যা দুষ্টু মানুষের সংখ্যার প্রতীক (কোনও সংখ্যা মানে 0 নয়)
  • ডান দিকের সংখ্যাটি সুন্দর মানুষের সংখ্যাকে প্রতীকী করে (কোনও সংখ্যা মানে 0 নয়)
  • ইনপুটটিতে নতুন লাইনগুলি ( \n) থাকতে পারে , যা বিভাজন হিসাবেও পরিচালনা করা উচিত

পরী

  • সান্তা থেকে সাহায্য দরকার তিন দুষ্টু লোকদের জন্য পরী (কয়লা উপহার তুলনায় অনেক গুরুতর), এবং এটা এই পরী লাগবে পাঁচ সেকেন্ডের * উপহার প্রদান করা
  • সান্তাকে সুন্দর লোকের জন্য দুটি এলভের সাহায্য প্রয়োজন এবং উপহারগুলি সরবরাহ করতে এই ধনুকগুলি চার সেকেন্ড সময় লাগবে *
  • বাড়ির দুপাশে যদি সংখ্যা না থাকে তবে সান্তা সেই বাড়িটি দেখতে পাবেন না এবং এর জন্য এটি কোনও সময় নেবে না (ক্রিসমাসের অনুভূতিতে থাকা লোকেরা এমনকি কয়লারও প্রাপ্য নয়)

সান্তা

  • সান্তাকে অবশ্যই ঘরে ঘরে উপহার দিতে হবে
  • যতক্ষণ না সমস্ত ধনুক্ষেত্রগুলি স্লিভে ফিরে না আসে এবং উপহারের সমস্ত উপহার house বাড়িতে পৌঁছে দেওয়া না হওয়া অবধি সান্তা পরবর্তী বাড়ির দিকে যেতে পারে না (আমরা এখন elves ছেড়ে যেতে চাই না, এখন কি আমরা করব?)
  • সান্টা আল্লা ঘরে ঘরে ভ্রমণে কোনও সময় ব্যয় করে না (আবার, যে কারণে আমি ভাগ করে নিতে স্বাধীন নই)

কি করো

একটি বাড়ির একটি মানচিত্র এবং বেশ কিছু এলভস দেওয়া, মুদ্রণ করুন মানচিত্রে বাড়িগুলিতে উপহার দেওয়ার জন্য সান্টাটিকে কত সময় লাগবে।

* (উপহার দেওয়ার জন্য এলভসের যে পরিমাণ সময় লাগে আমি তা ভাগ করতে পারি না this এই চ্যালেঞ্জের অন্তর্ভুক্ত সময়গুলি সঠিক কিনা তাও আমি নিশ্চিত বা অস্বীকার করতে পারি না)

বিধি

  • দুটি ইনপুট রয়েছে - মানচিত্র এবং ধনুকের সংখ্যা। ইনপুটগুলি হয় কোনও ফাংশনে আর্গুমেন্ট হিসাবে নেওয়া যেতে পারে, বা এসটিডিএন বা সমতুল্য থেকে নেওয়া যেতে পারে । যদি দুটি ইনপুট গ্রহণ একটি ইনপুট স্বাভাবিকভাবে না আপনার ভাষায় অসম্ভব, তারপর এবং শুধুমাত্র তারপর আপনি একটি একক ইনপুট স্ট্রিং হিসেবে দুটি ইনপুট, কিছু চরিত্র দ্বারা সীমায়িত গ্রহণ করতে পারে আছে (না এক +*\nবা 0-9- ইনপুট স্ট্রিং দ্ব্যর্থক না হতে পারে) যেমন ,
  • ধনুকের সংখ্যা সর্বদা একটি অ-নেতিবাচক পূর্ণসংখ্যার হবে (0 টি বৈধ)
  • আউটপুট হয় কোনও ফাংশনের রিটার্ন মান হতে পারে, বা STDOUT বা সমতুল্যে মুদ্রিত হতে পারে । যদি সান্তার পক্ষে একটি নির্দিষ্ট সংখ্যক এলভের এলভাসমূহ দিয়ে প্রদত্ত অঞ্চলে উপহার প্রদান করা অসম্ভব হয় তবে আপনাকে অবশ্যই একটি ধারাবাহিক negativeণাত্মক সংখ্যা বা কোনও নম্বর ছাড়াই একটি ধারাবাহিক বার্তা আউটপুট করতে হবে
  • এসটিডিআরআরে মুদ্রিত সমস্ত কিছুই উপেক্ষা করা হবে, সুতরাং আপনি ফলাফল বা ত্রুটি বার্তাটি এসটিডিআরআর প্রিন্ট করতে পারবেন না
  • আপনার প্রোগ্রামটি কোনও অঞ্চলের জন্য একটি অবৈধ সংখ্যক ধনুক দিয়ে দেওয়া ক্রাশ করতে পারে না
  • আউটপুটটি কেবলমাত্র মোট পরিমাণের পরিমাণ হতে হবে যা সান্টাকে প্রদত্ত সংখ্যক এলভের সংখ্যার সাথে উপহারগুলি সরবরাহ করতে সময় নেবে।
  • ধনুকগুলি উপহার প্রদান করতে সর্বদা সর্বনিম্ন সময় হওয়া উচিত
  • ইনপুট শুধুমাত্র সংখ্যা, উপস্থিত থাকবে +, *এবং নতুন লাইন \n(যতক্ষণ না আপনি যা ইনপুট অন্তর্ভুক্ত করা হবে আরেকটি চরিত্র উল্লেখ যদি আপনার ভাষা নয় দুটি ইনপুট নিতে পারেন (বর্ণন প্রথম নিয়ম কোণে) )
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য

পরীক্ষার কেস

"1*1", 5 elves => 5
"1*1", 3 elves => 9
"1*2", 7 elves => 5
"1*2", 5 elves => 10
"1*2", 3 elves => 13
"2*1", 8 elves => 5
"2*1", 5 elves => 9
"2*1", 3 elves => 14
"1*" , 3 elves => 5
"1*" , 2 elves => (error message)
"*1" , 2 elves => 4
"*1" , 0 elves => (error message)
"*"  , 0 elves => 0

"1*1+1*1",   5 elves => 10
"1*1+1*1",   3 elves => 18
"1*1+*+1*1", 3 elves => 18
"1*2+2*1",   8 elves => 10
"1*2+2*1",   7 elves => 14
"1*2+2*1",   6 elves => 18
"1*2+2*1",   3 elves => 27
"1*2+2*1",   2 elves => (error message)
"*+*+*+*",   2 elves => 0
"*+*+*+*",   0 elves => 0

"1*3+2*+*5+*+4*7", 9 elves => 32

(আশা করি আমি সে সব কিছু পেয়েছি)

স্কোরিং

সান্টা প্রতিটি দিন সর্বদা প্রচুর জিনিস দেখে spend অতিবাহিত করে - তিনি যে উপহারগুলি সরবরাহ করতে চলেছেন, তার কাছে যে সমস্ত এলভ রয়েছে, সমস্ত বাড়িতে তিনি উপহার প্রদান করছেন ... সান্তার জন্য, সেরা ক্রিসমাসের উপস্থিতি হবে কিছু কিছু দেখতে সক্ষম। এই কারণে, বাইটস মধ্যে সংক্ষিপ্ততম জমা জিতেছে

লিডারবোর্ড

এটি একটি স্ট্যাক স্নিপেট যা ভাষার দ্বারা লিডারবোর্ড এবং বিজয়ীদের একটি সংক্ষিপ্তসার উভয়ই উত্পন্ন করে।

আপনার উত্তরটি প্রদর্শিত হবে তা নিশ্চিত করতে, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন

## Language Name, N bytes

যেখানে এন আপনার জমা দেওয়ার আকার, বাইটগুলিতে

আপনি যদি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (উদাহরণস্বরূপ, পুরানো স্কোরগুলি ধরে ফেলা, বা বাইট গণনাতে পতাকা সহ) কেবলমাত্র নিশ্চিত হয়ে নিন যে আসল স্কোরটি আপনার শিরোনামের শেষ সংখ্যা is

## Language Name, <s>K</s> X + 2 = N bytes


আমি মনে করি 288 পড়তে হবে 281 : (1+0+0+1+2+3+1+0+0+0+4+1+0+0+1+2+3+2+0+0)*5+(2+0+4+0+4+0+6+0+0+0+2+1+4+3+0+3+10+0+5+0)*4=21*5+44*4=105+176=281(যদিও আমি অবশ্যই বলতে পারি যে আমি পুরো "রচনা" পড়ে নি!)
জোনাথন অ্যালান

@ জোনাথন অ্যালান হ্যাঁ ... আমি দুর্ঘটনাবশত চ্যালেঞ্জটি লেখার জন্য অনেক সময় ব্যয় করেছি ... ওফ ... যাইহোক, মূল বিষয়টি হারাচ্ছে যে সান্তা'র স্লাইডে যাওয়ার জন্য প্রথমে এলভাসের সকলের জন্য অপেক্ষা করতে হয়েছিল। পরের ঘর, সুতরাং যদিও সমস্ত সংখ্যার যোগ করা এবং তাদের গুণ করা কিছু ক্ষেত্রে কাজ করতে পারে তবে এটি বেশিরভাগ ক্ষেত্রে কার্যকর হয় না। উদাহরণস্বরূপ, 9 এলভাসের সাথে ঘর4*7 14 সেকেন্ড নেয় (এটি "রচনা" এর প্রায় অর্ধেকটি পথ দিয়ে covered
াকা আছে

২৮৮ টি মান উদাহরণস্বরূপ 3 টি ধনুক সহ, সুতরাং তাদের সর্বদা সম্পূর্ণ হতাশার কাজটি করতে হবে naughty*5+nice*4 প্রতিটি ঘরে , তাই না? (দ্রষ্টব্য যে 4*7সেই উদাহরণটিতে কোনও নেই )
জোনাথন অ্যালান

এলভেস্টরা কি সর্বদা কয়লাটিকে প্রথমে প্রথমে বের করে দেয় (আপনার উদাহরণের মতো) বা তারা দক্ষতার সাথে সময়সূচী করে? উদাহরণস্বরূপ যদি মানচিত্রটি থাকে 5*15এবং সেখানে 9ধনুকগুলি থাকত তবে এটি (সর্বনিম্ন) 20 সেকেন্ড বা 22 সেকেন্ড সময় নিতে পারে? দেখা এই পাঠগত উপস্থাপনা উদাহরণস্বরূপ একটি চিত্রণ দেখতে।
জোনাথন অ্যালান

উপরে সম্পাদনা করা 5*15উচিত 4*15
জোনাথন অ্যালান

উত্তর:


4

রুবি , 433 400 বাইট

ঠিক আছে, এটি সত্যই শক্ত, কারণ এটি প্রমাণ করে যে এলফের সময়সূচীটি এনপি হার্ড।

এছাড়াও, দয়া করে সুন্দর হোন, এটি আমার প্রথম জমা, সুতরাং আমি কিছু স্পষ্টত অপ্টিমাইজেশন মিস করেছি:

->e,h{h.split(/\+|\n/).map{|h|n,g=h.split(?*).map(&:to_i)+[0,0];return-1if(g>0&&e<2)||(n>0&&e<3);([[3,5]]*n+[[2,4]]*g).permutation.map{|j|c=[0]*e;j.map{|q|w,y=q;k=l=0;r=c.map{|x|a=b=0;c[k..e].map{|r|r<=x ?a+=1:break};(t=k+=1).times{c[t-=1]<=x ?b+=1:break};[a,b]};d=r.inject([]){|v,x|v<<l if x[0]>=w;l+=1;v}.min{|a,b|c[a]<=>c[b]};b=d-r[d][1]+1;z=c[d]+y;(b..(b+w-1)).map{|x|c[x]=z}};c.max}.min||0}.sum}

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

আমার শুরুতে দীর্ঘতর পরীক্ষার কেস ছিল, তবে কারণ আমি কিছু ক্ষেত্রে সময় নির্ধারণের জন্য সমস্ত সম্ভাব্য ক্রমগুলি নিয়ে পুনরায় ঘুরে দেখছি, তাই আমি সেগুলি সরিয়েছি।


2
পিপিসিজিতে আপনাকে স্বাগতম! আপনি অবশ্যই আপনার প্রথম উত্তরের জন্য একটি কঠিন চ্যালেঞ্জটি বেছে নিয়েছেন
জো কিং

2

জাভা (ওপেনজেডিকে 8) , 344 বাইট

এলফের শিডিয়ুলিং আমি যতটুকু ভেবেছিলাম তার চেয়ে বেশি কঠিন তাই এটি কিছুটা সময় নিয়েছে এবং বেশ দীর্ঘ।

তবুও, কোড গল্ফের কাছে এটি অবশ্যই আমার প্রিয় চ্যালেঞ্জ!

(e,d)->{int r=0,x,y,c,p,b,g,m;for(String h:d[0].split("\\+")){d=h.split("\\*",-1);b=new Byte("0"+d[0]);g=new Byte("0"+d[1]);m=-1>>>1;for(y=1;y<=e/3&(x=(e-y*3)/2)>0;c=b/y+(b%y++<1?0:1),p=g/x+(g%x<1?0:1),x=c*5>p*4?c*5:p*4,m=x<m?x:m);for(y=0;b+g>0;b-=c,g-=p){c=e/3<b?e/3:b;x=(e-c*3)/2;p=x<g?x:g;if(c+p<1)return-1;y+=c>0?5:4;}r+=m<y?m:y;}return r;}

এটি অনলাইনে চেষ্টা করুন (সমস্ত পরীক্ষার সাথে)!

ব্যাখ্যা;

নিজেকে বন্ধনীয়: এটি একটি দীর্ঘ

    int r=0,x,y,c,p,b,g,m;               // Define all the variables I need

    for(String h:d[0].split("\\+")){     // Split houses on '+' and loop through them

        d=h.split("\\*",-1);             // Split the current house on '*' using the limit
                                         // to preserve empty strings.

        b=new Byte("0"+d[0]);            // Parse the naughty (b) and nice (g) people
        g=new Byte("0"+d[1]);

        m=-1>>>1;                        // Initialise minimum time as max integer using
                                         // overflow

        for(y=1;y<=e/3&(x=(e-y*3)/2)>0;  // For each number of elves that can concurrently
                                         // deliver coal, and still leave enough elves to
                                         // deliver presents

            c=b/y+(b%y++<1?0:1),         // Determine the number of runs needed to deliver
                                         // all coal using this number of elves

            p=g/x+(g%x<1?0:1),           // Determine the number of runs needed to deliver
                                         // all presents using this number of elves

            x=c*5>p*4?c*5:p*4,           // Get the maximum time required for the
                                         // delivery of coal or presents

            m=x<m?x:m);                  // If this is less than the current minimum time,
                                         // set it as the minimum time


        for(y=0;b+g>0;b-=c,g-=p){        // While there are still people to deliver to;

            c=e/3<b?e/3:b;               // Determine the max amount of coal to deliver

            x=(e-c*3)/2;                 // Determine how many presents can be
                                         // delivered with the remaining elves.

            p=x<g?x:g;                   // If this number is more than nice people
                                         // remaining, just use the nice people remaining

            if(c+p<1)return-1;           // If no presents can be delivered, return the
                                         // error code (-1)

            y+=c>0?5:4;                  // Increase the time by 5 if coal was
                                         // delivered, and 4 if only presents

        }                                // At the end of each loop (see above)
                                         // remove the presents and coal delivered
                                         // from the number of naughty and nice houses

        r+=m<y?m:y;                      // Increment the total time by which ever
                                         // is smaller of the calculated times
    }
    return r;                            // Return the total time

এনবি: এই উত্তরটি পরীক্ষার কেসগুলি সঠিক হওয়ার ক্ষেত্রে আমার সংশোধনের উপর নির্ভর করে


আমি মনে করি (e-y*3)/2-> e-y*3>>1একটি বাইট সংরক্ষণ করে। (সম্ভবত (e-c*3)/2
এটির

runTest("1*4",5,12);ব্যর্থ হয় (আপনি পান "1*4", 5 elves => 13 FAILED। আমি আপনার অ্যালগরিদমটি কীভাবে খুব কম বাইটে সময়সূচী করাতে খুব ভাল ছিল তা দেখে অবাক হয়েছি, তাই 0 থেকে 7 এর সমস্ত সম্ভাব্য সংমিশ্রণের বিরুদ্ধে আমি এটি চালিয়েছি (এলভেস, দুষ্টু এবং সুন্দর) এবং যেখানে এটি ব্যর্থ হয়েছিল সেখানে মাত্র কয়েকটা পেয়েছি সর্বোত্তম সময় দিন This এটি ব্যর্থ হওয়ায় এটি সবচেয়ে ক্ষুদ্রতম সংমিশ্রণ
B বিটিডাব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.