স্লেইং প্যাকিংয়ের সমস্যা


11

স্যান্টের ধনুকরা তাদের বর্তমানের উপহারগুলির ব্যাচটি সান্তার দীর্ঘায়িত হবে কিনা তা নির্ধারণে সহায়তা প্রয়োজন। আপনার পছন্দের ভাষাতে তাদের সাহায্য করার জন্য সংক্ষিপ্ততম প্রোগ্রামটি লিখুন।

সীমাবদ্ধতাসমূহ

  • সান্টা এর স্লাইঘটি 12 ফুটের দৈর্ঘ্যে 6 ফিট প্রশস্ত এবং 4 ফিট গভীর।
  • উপহারগুলি ভঙ্গুর হতে পারে, সুতরাং সেগুলি একে অপরের উপরে সজ্জিত নাও হতে পারে।
  • আপনি নিজের ইচ্ছামতো উপহারগুলি ঘোরান এবং ফ্লিপ করতে পারেন, তবে সান্তা বেশ অবসন্ন-বাধ্যতামূলক চ্যাপ তাই ঘূর্ণনগুলি 90 ডিগ্রির গুণকে রাখুন।
  • উত্তর মেরু স্বাস্থ্য এবং সুরক্ষা সংক্রান্ত আইনগুলি শর্ত করে যে উপস্থাগুলি একটি sleigh শীর্ষের উপর 1 ফুটের বেশি আটকাতে পারে না (সুতরাং তারা 5ফুট বেশি হতে পারে না)।

ইনপুট

ইনপুট চালু থাকবে STDINএবং ব্যাচের উপস্থাপিত সংখ্যার প্রতিনিধিত্বকারী একটি পূর্ণসংখ্যা হবে তারপরে উপহারের মাত্রাগুলির একটি তালিকা - প্রতি লাইনে 1 টি উপস্থিত, 3 টি মাত্রা (পায়ে) ফাঁক দিয়ে পৃথক হবে।

উদাহরণ:

1
6 12 5

6
1 12 3
1 12 4
1 12 1
1 12 5
1 12 3
1 12 5

1
4 3 13

1
6 12 6

আউটপুট

উপহারগুলি স্লিহ বা যদি না পারে তবে 'না' এ প্যাক করা যেতে পারে তবে আউটপুটটিতে কেবল 'হ্যাঁ' শব্দটি হওয়া উচিত।

উপরোক্ত উদাহরণগুলির জন্য আউটপুট:

YES

YES

NO

NO

পরীক্ষা স্ক্রিপ্ট

আগের মতোই, আমি এই কাজের জন্য কিছু পরীক্ষা তৈরির জন্য জো এবং ভেন্টোরোর লেখা কয়েকটি পরীক্ষার স্ক্রিপ্টগুলি বরাদ্দ করেছি : -

ব্যবহার: ./test [your program and its arguments]

পুরস্কার

প্রতিটি এন্ট্রি যা আমি যাচাই করতে পারি যা পরীক্ষাটি পূরণ করে, পরীক্ষাগুলি পাস করে এবং গল্ফ করার জন্য স্পষ্টতই কিছু চেষ্টা করেছিল তা আমার কাছ থেকে উত্সাহ গ্রহণ করবে (সুতরাং দয়া করে আপনার উত্তর সহ ব্যবহারের নির্দেশাবলী সরবরাহ করুন)। ২০১১ সালের মধ্যে সংক্ষিপ্ততম সমাধানটি বিজয়ী হিসাবে স্বীকৃত হবে।


আমাদের কি উপহারগুলি ঘোরানোর অনুমতি দেওয়া হচ্ছে? তাদের পাশে ফ্লিপ করবেন? এগুলিকে এমন একটি কোণে ঘোরান যা 90 ° এর একক নয়?
ইলমারি করোনেন

@ ইলমারিকারোনেন হ্যাঁ, আপনি যতক্ষণ ইচ্ছা ফিটগুলি উপহারগুলি ঘোরান। আমি মনে করি যে 90 টির বেশি নয় এমন একটি কোণে ফিট করা বাক্সগুলিতে জড়িত গণিতগুলি কি জটিল হবে না? আমি পরীক্ষার জন্য কেবল 90 ডিগ্রির ঘূর্ণন ধরেছি।
গ্যারেথ

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

উদাহরণ 3 হ্যাঁ হয় যখন উদাহরণ 1 হ্যাঁ? 6x12x5 6x12x4 এর চেয়েও বড় তাই শীর্ষগুলি ছুঁড়ে মারার অনুমতি রয়েছে কি? কোন ক্ষেত্রে 3 নং এর পরেও শীর্ষটি আটকে রাখতে পারে?
স্কিজ

1
@ স্কিজ: এটি বিভ্রান্তিকরভাবে বাক্যযুক্ত, তবে চতুর্থ প্রতিবন্ধকতা দেখুন: উপস্থাপনগুলি শীর্ষে 1 ফিট থাকতে পারে। সুতরাং স্লিঘের কার্যকর গভীরতা 4 ফুটের নয়, 5 ফুটের।
ইলমারি করোনেন

উত্তর:


3

হাস্কেল, 312 318 অক্ষর rs

import Data.List
s(ξ:υ:_,λ:σ:η:_)(x:y:_,l:w:_)=(ξ+λ<=x||ξ>=x+l||υ+σ<=y||υ>=y+w)&&ξ+λ<7&&υ+σ<13&&η<6
y p l=[(v,r):l|v<-[[x,y,0]|x<-[0..5],y<-[0..11]],r<-permutations p,all(s(v,r))l]
main=do
 n<-readLn
 p<-mapM(fmap(map read.words).const getLine)[1..n]
 putStr.r$foldr((=<<).y)[[([9,0],[0..])]]p
r[]="NO"
r _="YES"

কিছু কারণে যা আমি এই মুহুর্তে পুরোপুরি বুঝতে পারি না, এটি আপনার পরীক্ষাগুলি যুক্তিসঙ্গত সময়ে শেষ করে না # 9 এবং # 16। তবে আপনি পারফরম্যান্স সম্পর্কে কিছু বলেননি, তাই না?


373 383 অক্ষর

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

import Data.List
s(ξ:υ:_,λ:σ:η:_)(x:y:_,l:w:_)=(ξ+λ<=x||ξ>=x+l||υ+σ<=y||υ>=y+w)&&ξ+λ<7&&υ+σ<13&&η<6
y p l=[(v,r):l|v<-[[x,y,0]|x<-[0..5],y<-[0..11]],r<-permutations p,all(s(v,r))l]
π=product
main=do
 n<-readLn
 p<-mapM(fmap(map read.words).const getLine)[1..n]
 putStr$if sum(map(π.init)p)>72||null(foldr((=<<).y)[[([9,0],[0..])]].sortBy((.π).compare.π)$p)then"NO"else"YES"

না, আমি পারফরম্যান্স নিয়ে উদ্বিগ্ন ছিলাম না, তবে প্রোগ্রামটি আমার উত্সাহ পেতে সমস্ত পরীক্ষা পাস করতে হবে। এটি বর্তমানে 9 টেস্টে কাজ করছে এটি শেষ হয়েছে কিনা তা দেখার জন্য আমি এটি কিছুক্ষণ রেখে দেব।
গ্যারেথ

@ গ্যারেথ আমাকে এটিকে আরও কিছুটা অপ্টিমাইজ করতে হবে।
পাল্টা

ঠিক আছে. এটি এখনও এখানে 9 টেস্টে কাজ করছে।
গ্যারেথ

2

পাইথন, 461 অক্ষর

import sys
def L(P,z):
 if not P:return 1
 for w,h in[P[0],P[0][::-1]]:
  m=sum((2**w-1)<<i*6for i in range(h))
  for x in range(7-w):
   for y in range(13-h):
    n=m<<y*6+x
    if z&n==0and L(P[1:],z|n):return 1
 return 0
for G in sys.stdin.read().split('\n\n'):
 S=[(x,y)if z<6 else(x,z)if y<6 else(y,z)if x<6 else(9,9)for x,y,z in[sorted(eval(g.replace(' ',',')))for g in G.split('\n')[1:]if g]]
 print'YES\n'if sum(x*y for x,y in S)<73and L(S,0)else'NO\n'

Lআয়তক্ষেত্রগুলি স্লাইটে স্থাপন Pকরা যায় কিনা তা পুনরাবৃত্তভাবে পরীক্ষা করে , যেখানে zইতিমধ্যে দখলকৃত কোষগুলির একটি বিটমাস্ক। Sনিয়োগ নির্ধারণ করে কোন পথে (বৃহত্তম মাত্রা <= 5 উল্লম্বভাবে যায়) প্যাকেজ প্রত্যেকের জন্য আপ।

কোডটি সম্ভাব্য ক্ষতিকারক, তবে এটি সমস্ত পরীক্ষার ইনপুটগুলিতে দ্রুত।


1

গল্ফস্ক্রিপ্ট, ১৩০ টি অক্ষর

"NO":g;~](;3/127{128*64+}12*\{.,0>.!{"YES":g;}*{([{[~@]..[~\]\}3*;]{)6<{~[2\?(]*128base 83,{2\?1$*.4$&0={3$|2$f}*}%;}*}%;}*;;}:f~g

এটি গল্ফস্ক্রিপ্টে চলতে বেশ কিছুটা সময় নিয়েছে। এটি গল্ফ করার যে কোনও প্রচেষ্টা আরও কিছু পরীক্ষার কেস ভেঙেছে।

আপনি যদি খুব বেশি উপহার দিয়ে চালিত হন তবে এই সংস্করণটি অবিশ্বাস্যরকম ধীর হয়ে যেতে পারে দয়া করে সতর্ক করে দেওয়া উচিত।


আমার সর্বদা গল্ফস্ক্রিপ্টগুলি নিয়ে সমস্যা হয়। আমি চেষ্টা করছি ./test ruby golfscript.rb howard.gsকিন্তু এটি আমাকে ত্রুটি দিচ্ছে। আমি কিভাবে এটি প্রার্থনা করা উচিত?
গ্যারেথ

@ গ্যারেথ আপনি কেবলমাত্র সেমিকোলনটি ;"1\n6 12 5"প্রদত্ত স্ক্রিপ্টটিতে ইনপুট (উদাহরণস্বরূপ ) এর পরে প্রস্তুত করতে পারেন।
হাওয়ার্ড

বাহ, আপনি কিছু ক্ষেত্রে এটিকে ধীর করে দেওয়ার বিষয়ে মজা করছেন না। দুটি শেষ পরীক্ষার মামলায় (যথাক্রমে and২ এবং 73 73 টি উপস্থাপনা ;-); আমাকে সারা রাত এটি ছেড়ে দিতে হতে পারে
গ্যারেথ

দুঃখিত, এটি পরীক্ষার স্ক্রিপ্টে 5 টি অতীত পরীক্ষায় যাবে না। যতক্ষণ না এটি সমস্ত পরীক্ষায় উত্তীর্ণ হয় আমি আপগোট করতে পারি না।
গ্যারেথ

@ গ্যারেথ ওয়েল, তারপরে এটি আপনার পক্ষ থেকে উর্ধ্বতন পাবে না ;-) এটি সংক্ষিপ্ত হওয়ার জন্য সম্পূর্ণ ক্ষতিকারক পদ্ধতির প্রয়োগ করে। আমি একটি দ্রুত অ্যালগরিদম নিয়ে কাজ করছি তবে এটি জমা দেওয়ার জন্য এখনও প্রস্তুত নয়। এর জন্য ইতিমধ্যে যথেষ্ট আরও জায়গা প্রয়োজন এবং বাস্তবায়নের জন্য আমার এখনও কিছু কেস বাকি রয়েছে।
হাওয়ার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.