পার্কিং লট সুপারভাইজার


13

ভূমিকা

আপনি একটি পার্কিং লটের সুপারভাইজার এবং আপনার ম্যানেজার আকারটি সঙ্কুচিত করার জন্য প্রস্তুতি নিচ্ছেন।

এটি গত বছরের পিএটি শীর্ষ-স্তরের সমস্যার একটি সরলীকৃত এবং অভিযোজিত সংস্করণ ।

চ্যালেঞ্জ

আপনি নিরূপণ করা কত গাড়ি একই সময়ে Lot, জিজ্ঞাসা করা হয় সর্বাধিক

স্ট্যান্ডার্ড বিধি প্রয়োগ। এবং এটি একটি কোড-গল্ফ তাই সংক্ষিপ্ততম কোড জয়ী।

প্রথম লাইন এন্ট্রির পরিমাণ (কোন বেশী 100,000, যদি আপনি চান আপনার ইনপুট এই লাইন নাও থাকতে পারে, তা যেখানে ইনপুট প্রান্ত নির্ণয় করার জন্য শুধুমাত্র একটি অস্থায়ী হয় )। নিম্নলিখিত পাঠ্যটিতে প্রতি লাইনে একটি করে প্রবেশ রয়েছে। এবং প্রতিটি প্রবেশের মধ্যে তিনটি সংখ্যা রয়েছে:

<Car plate number> <Time (seconds) since open> <0(In) | 1(Out)>

পরিবর্তন 2: ইনপুট হিসাবে ট্রিপলের অ্যারে ব্যবহার করা ঠিক আছে OK

পরিবর্তন 3: আপনি একটি প্রবেশিকায় সংখ্যার ক্রম পরিবর্তন করতে পারেন। এবং কোনটি ব্যবহার করতে হবে তা চয়ন করতে পারেন। (মন্তব্যসমূহ বিভাগটি দেখুন)

ইনপুটটি বৈধ হওয়ার গ্যারান্টিযুক্ত, ধরে নিই:

  • Car plate number10000~ এর ব্যাপ্তিতে একটি পূর্ণসংখ্যা ~99999
  • Time0~ এর ব্যাপ্তিতে একটি পূর্ণসংখ্যা ~86400

এবং

  • এন্ট্রিগুলি ক্রমানুসারে অর্ডার করা হয় না
  • প্রথম সেকেন্ডের আগে কোনও গাড়ি নেই।
  • নেই অগত্যা গত দ্বিতীয় পরে কোন গাড়ী।
  • গাড়ি getsোকার আগেই ছাড়ত না।
  • Car plate numberঅনন্য. (তবে একই গাড়ি একাধিকবার দেখতে পারে)
  • সুতরাং কোনও গাড়ি যখন এতে ইতিমধ্যে থাকে তখন প্রচুর প্রবেশ করা অসম্ভব।
  • একই গাড়ি একই সাথে ভেতরে outুকতে পারত না time
  • ইন / আউট করার সময় কোনও গাড়ি প্রচুর পরিমাণে বিবেচিত হয়।

উদাহরণ 1

ইনপুট

11
97845 36000 1
75487 16500 1
12345 16 0
75486 3300 0
12345 6500 1
97845 32800 0
12345 16400 0
97846 16501 1
97846 16500 0
75486 8800 1
75487 3300 0

আউটপুট

3

ব্যাখ্যা

16500, গাড়ী 12345এবং 75487পার্কিং লট ছিলেন।

উদাহরণ 2

আমি এটি তৈরি করেছিলাম কারণ আমি এতে অনেকগুলি কোড ব্যর্থ পেয়েছি।

ইনপুট (প্রথম লাইনের বাইরে রেখে)

12345 16400 0
12345 16500 1
75487 16500 0
75487 16600 1

আউটপুট

2

ব্যাখ্যা

16500, গাড়ী 12345এবং 75487পার্কিং লট ছিলেন।

মন্তব্য

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


গাড়ী প্লেট নম্বর সবসময় 5 ডিজিট দীর্ঘ?
তিতাস

1
টাইটাস আমি বিশ্বাস করি 10000 থেকে 99999 পর্যন্ত সংখ্যাগুলি সর্বদা 5 অঙ্কের দীর্ঘ।
কিউ গাং

3
আজ আমি অন্ধ।
তিতাস

আমি ধরে নিই যে প্রথমবারের আগে চলে যাওয়ার আগে কোনও গাড়ি আবার প্রবেশ করতে পারে না? এটি সুস্পষ্টভাবে বলা হয়েছে বলে মনে হয় না।
জন ডিভোরাক

@ জনডভোরাক দুঃখিত না এটা পারে না। এটি কার প্লেট নম্বর দ্বারা বোঝানো হয়েছে এটি অনন্য কারণ বাস্তবে এটি একই গাড়ীর মধ্যে ইতিমধ্যে থাকা অবস্থায় খুব বেশি প্রবেশ করা অসম্ভব।
কিয়ু গান

উত্তর:


7

গণিত, 33 বাইট

-Min@Accumulate[2#2-1&@@@Sort@#]&

সমস্যার স্টেটমেন্টটি আরও ভাল করে বুঝতে হয়েছিল যে বুঝতে পেরেছি যে অনেক সাধারণ অ্যালগরিদম যার জন্য লাইসেন্স প্লেটের তথ্য প্রয়োজন হয় না।

একটি পূর্ণসংখ্যা ফেরত নামহীন ফাংশন; ইনপুট ফর্ম্যাট হ'ল ফর্মের অর্ডারযুক্ত ট্রিপেলের একটি তালিকা {time, 0|1, license plate}। আমরা Sortআইএনজি দিয়ে শুরু করি যা তালিকাকে কালানুক্রমিক করে তোলে এবং 0এর আগে এসকে বাছাই করে সময়-সম্পর্ককেও ভেঙে দেয় 1; তারপরে 2#2-1&@@@আগমন / প্রস্থানের তথ্য রাখে এবং বাকিগুলি ভুলে যায় এবং এসকেও 0এস রূপান্তর করে -1

Accumulateএই তালিকার চলমান মোট গণনা করে; ফলাফলটি প্রতিটি আগমন / প্রস্থানের পরে পার্কিং লটে গাড়ি সংখ্যার নেতিবাচকতার একটি তালিকা । তারপরে Minএগুলির মধ্যে ক্ষুদ্রতম (সবচেয়ে নেতিবাচক) বাছাই করে নেতিবাচক চিহ্নটি ছিনিয়ে নেওয়া হয়।

গণিত, 56 বাইট

Max[<|#|>~Count~0&/@FoldList[List,{},#3->#2&@@@Sort@#]]&

আসল জমা (প্রথম বেশ কয়েকটি মন্তব্য এই জমা দেওয়ার বিষয়ে উল্লেখ করে)। একটি পূর্ণসংখ্যা ফেরত নামহীন ফাংশন; ইনপুট ফর্ম্যাট হ'ল ফর্মের অর্ডারযুক্ত ট্রিপেলের একটি তালিকা {time, 0|1, license plate}

আমরা সময় এন্ট্রিকে প্রথমে এবং ইন / আউট এন্ট্রি দ্বিতীয় রাখার জন্য বেছে নেওয়ার কারণটি হ'ল Sort@#তালিকাটি কালানুক্রমিকভাবে সাজানো এবং প্রস্থান করার আগে আগতদের রেকর্ড করা যদি তারা যুগপত হয়। এর পরে, #3->#2&@@@ফর্মটির "নিয়ম" এর তালিকা দেয় license plate -> 0|1, এখনও কালানুক্রমিকভাবে সাজানো।

তারপরে, FoldList[List,{},...]সেই নিয়মের তালিকার সমস্ত প্রাথমিক বিভাগের একটি তালিকা তৈরি করে। আসলে, এটি সত্যিই সেই প্রাথমিক বিভাগগুলিকে গণ্ডগোল করে; kআপ গভীরতা 2 এক নিয়ম, গভীরতা 3 একটি নিয়ম, ..., এবং গভীরতা এক নিয়ম সঙ্গে একটি তালিকা হচ্ছে তম প্রাথমিক সেগমেন্ট প্রান্ত k+ 1। ( FoldList[Append,{},...]আরও প্রাকৃতিক ফলাফল দেবে)) তবে, <|#|>এই প্রাথমিক বিভাগগুলির প্রত্যেককে একটি "সংঘবদ্ধ" করে তোলে, যার দুটি পছন্দসই প্রভাব রয়েছে: প্রথমত, এটি সবেমাত্র আমাদের তৈরি নেস্টেড-তালিকা কাঠামোটিকে পুরোপুরি ফ্ল্যাট করে; এবং দ্বিতীয়ত, এটি পরে বিধিগুলি পূর্বের নিয়মগুলিকে ওভাররাইড করতে বাধ্য করে, যা আমাদের এখানে ঠিক প্রয়োজন any যে কোনও গাড়ী যা পার্কিং ছেড়ে গেছে, তার প্রাথমিক প্রবেশের রেকর্ডটি এখন পুরোপুরি চলে গেছে (এবং একইভাবে পুনরায় প্রবেশ করা গাড়িগুলির ক্ষেত্রে) ।

যে সব কিছু করার বাকি তাই হয় Countকত 0গুলি আছে এই যোগসূত্র প্রতিটি, এবং নিতে Max


1
গাড়িগুলি একই সাথে আসে এবং যায় তবে এটি কি সর্বদা সঠিক কাজ করবে?
খ্রিস্টান সিভর্স

আপনার উত্তর ভুল হতে পারে। কোনও গাড়ি আবার একবার প্রবেশ করলে সর্বাধিক প্রয়োজন হয় না তাই সমিতি ব্যবহার করে এন্ট্রিগুলি মুছে ফেলা নিরাপদ। এই ছবিটি দেখুন: i.imgur.com/D5xUl3z.png স্পষ্টতই 16500 এ 3 গাড়ি রয়েছে
কিউ গান

@ কেয়ুগান: আমি দাবি করিনি যে কোনও গাড়ি পুনরায় প্রবেশ করলে সর্বাধিক ঘটনা ঘটে। নোট করুন যে আমার দ্রবণটি প্রতিটি একক প্রবেশ / প্রস্থানের সময় পার্কিং লটে গাড়ি সংখ্যা গণনা করে এবং সেগুলির সর্বাধিক গ্রহণ করে।
গ্রেগ মার্টিন

1
আপনি উদাহরণ 2 চেষ্টা করতে পারে।
কিউ গান

1
ব্যক্তিগতভাবে আমি আপনার সাথে একমত। :) আমি যা করেছি তা হ'ল মূল সমস্যা থেকে সংজ্ঞাটি অনুলিপি করা। প্রধান পার্থক্য হ'ল আসলটির জন্য গাড়ি প্লেটগুলি চিত্র থেকে স্বীকৃত হওয়া এবং চূড়ান্ত ফলাফল হিসাবে মুদ্রিত হওয়া প্রয়োজন।
কিউ গান

5

হাস্কেল, 76 63 61 বাইট

@ নিমির পরামর্শ অনুসারে 2 বাইট সংরক্ষণ করা হয়েছে।

f l=maximum$scanl1(+)[(-1)^c|i<-[0..8^6],(_,b,c)<-l,i==2*b+c]

সমস্যার বিবৃতি দ্বারা প্রদত্ত ক্রমে ত্রিগুজের একটি তালিকা হিসাবে যুক্তিটি প্রত্যাশা করে।

প্রতিটি সম্ভাব্য সময়ের জন্য (এবং আরও কিছু), আমরা প্রথমে আসার জন্য অনুসন্ধান করি এবং তারপরে গাড়ির ইভেন্টগুলি রেখে সেগুলি প্লাস বা বিয়োগের তালিকায় পরিণত করি list আমরা এই তালিকার আংশিক অঙ্কগুলি এবং তারপরে এই আংশিক অঙ্কের সর্বাধিক পরিমাণ গ্রহণ করি।


ফেলে দিন importএবং ব্যবহার করুন [(-1)^c|i<-[1..86400],(_,b,c)<-l,i==b]
নিমি

বিদায়ী গাড়িগুলির আগে আমার আগত গাড়িগুলি দরকার, তাই এটি কিছুটা জটিল, তবে আমি আপনার ধারণার সাহায্যে 2 বাইট সংরক্ষণ করতে পারি। ধন্যবাদ!
ক্রিশ্চিয়ান সিভর্স

2

পিএইচপি 7.1, 126 117 বাইট

for(;$s=file(i)[++$i];)$d[+substr($s,6)][$s[-2]]++;ksort($d);foreach($d as$a){$r=max($r,$n+=$a[0]);$n-=$a[1];}echo$r;

ফাইল থেকে ইনপুট নেয় i, প্রথম লাইন উপেক্ষা করে। সাথে চালাও -r
ইনপুটটিতে একটি ট্রিলিং নিউলাইন দরকার। উইন্ডোজের -2সাথে প্রতিস্থাপন করুন -3

ভাঙ্গন

# generate 2-dim array; first index=time, second index=0/1 (in/out);
# values=number of cars arriving/leaging; ignore plate number
for(;$s=file(i)[++$i];) # read file line by line (includes trailing newline)
    $d[+substr($s,6)][$s[-2]]++;    # substring to int=>time, last but one character=>1/0
ksort($d);                      # sort array by 1st index (time)
foreach($d as$a)    # loop through array; ignore time
{
    $r=max($r,                      # 2. update maximum count
        $n+=$a[0]                   # 1. add arriving cars to `$n` (current no. of cars)
    );
    $n-=$a[1];                      # 3. remove leaving cars from `$n`
}
echo$r;                         # print result

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

@ কেয়ুগান: ইঙ্গিতটির জন্য ধন্যবাদ; তবে ইনপুট হিসাবে একটি অ্যারের সাথে, আমার একটি ফাংশন প্রয়োজন, এবং এটির জন্য তিনটি অ্যারে এবং ট্রিপল অ্যারে সহ দুটি বাইটের দাম পড়বে। ফাংশন, অ্যারে ম্যাপিং এবং কাস্টম সাজান পিএইচপি-তে বিশাল। আমি যে কোনও কিছু সঞ্চয় করতে পারতাম তা $dহ'ল আমার ইনপুট বা সাজানো ইনপুট (সময় এবং বাইরে / বাইরে) হিসাবে প্রস্তুত থাকবে। এবং এই চ্যালেঞ্জ থেকে খুব বেশি গ্রহণ করবে। প্রান্তিককরণের ইনপুটটি ttttt i plate17 বাইট সংরক্ষণ করবে, 19 টি প্লেটের সংখ্যাটির সাথে সংযুক্ত গণনা সহ আরও 19 টি।
তিতাস

2

সি, 147 বাইট

একটি সম্পূর্ণ প্রোগ্রাম, থেকে ইনপুট পড়ে stdin

int r[86402]={},u,i,n,t;g(s,o){for(;s<86401;n<r[s]?n=r[s]:0,++s)r[s+o]+=o?-1:1;}main(){for(n=0;scanf("%d%d%d",&u,&t,&i)==3;g(t,i));printf("%d",n);}

আদর্শের উপর চেষ্টা করুন


আমি বিশ্বাস করি যে%d
কিউ গান

উফ, ধন্যবাদ আমি scanfযথেষ্ট ব্যবহার করি না , আমার ধারণা।
owacoder

আমি ভালবাসি cin। উচ্চহাস্য
Keyu সালে Gan


2

অক্টাভ, 50 , 64 38 বাইট

@(A)-min(cumsum(sortrows(A)(:,2)*2-1))

@ গ্রেগ মার্টিনের গণিত উত্তর হিসাবে একই

ফাংশনটি 3 কলাম সহ একটি অ্যারে পায় [time, i/o,plateN]

পূর্ববর্তী উত্তর:

@(A){[t,O]=A{:};max(cumsum(sparse({++t(!O),t}{2},1,!O*2-1)))}{2}

ফাংশনটি কেবল দুটি ইনপুট পায় t: সময় এবং O: Aট্রিপল ইনপুট থাকে এমন একটি সেল অ্যারের প্রথম দুটি উপাদান থেকে I / O !

বিদ্যমান গাড়ির প্রতিটি রেকর্ডকৃত সময়ের সংখ্যার জন্য গণনা করার জন্য তৈরি একটি স্পারস ম্যাট্রিক্স। এটির জন্য বাহিরের সময়টি +1 এর বাইরে গাড়ি প্রস্থান করার জন্য বিবেচিত হয় এবং 1 পরিবর্তনটি -1 এবং 0 থেকে 1 তে পরিবর্তিত হয় 1
.
তারপরে প্রচুর বর্তমান গাড়ির সংখ্যক প্রতিনিধিত্বকারী সংখ্যার সমষ্টি গণনা করা হয় এবং এর সর্বাধিক সন্ধান পাওয়া যায়।


আমি অক্টাভা সমর্থন সেল অ্যারের কথা মনে করি, যার অর্থ আপনি কেবল ইনপুট হিসাবে ট্রিপলের একটি অ্যারে ব্যবহার করতে পারেন। বিধিনিষেধটি এম 5 এর আগে সংস্করণ অনুসারে এবং এটিতে 'ট্রিপেলের একটি অ্যারে' লেখা আছে। আমি এম 5
কিউ গা

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

2

জাভাস্ক্রিপ্ট (ES6), 63 73 71 বাইট

d=>Math.max(...d.sort((a,[b,c])=>a[s=0]-b||a[1]-c).map(e=>s+=1-e[1]*2))

আদেশ দেওয়া এন্ট্রিগুলির অ্যারে হিসাবে এটি ইনপুট গ্রহণ করে [time, inout, plate]। দুর্ভাগ্যক্রমে এই যে অভিন্ন সময়সীমার সময় অর্থ এই যে উভয় গাড়ি সময়মতো এই মুহুর্তে প্রচুর পরিমাণে বিবেচিত হয়, বাছাই করা অ্যালগরিদমকে অবশ্যই 0আগে অর্ডার করতে হবে 1, যা 11 বাইট অর্জন করেছিল।

ক্রেডিট

  • আমি মানচিত্রের কার্যকারিতাটির মধ্যে শিফ্ট এবং গুণটিকে পুরোপুরি সরিয়ে 1 বাইট সংরক্ষণ করেছি (ধন্যবাদ নীল)।
  • আমি বাছাই ফাংশনে একটি কাঠামোগত যুক্তি ব্যবহার করে আরও দুটি বাইট সংরক্ষণ করেছি (ধন্যবাদ edc65)।

ডেমো

// test the two examples
console.log([[[36000,1],[16500,1],[16,0],[3300,0],[6500,1],[32800,0],[16400,0],[16501,1],[16500,0],[8800,1],[3300,0]],[[16400,0],[16500,1],[16500,0],[16600,1]]].map(
// answer submission
d=>Math.max(...d.sort((a,[b,c])=>a[s=0]-b||a[1]-c).map(e=>s+=1-e[1]*2))
));


আপনার কোডটি d=[[16400,75487,0],[16500,75487,1],[16500,99999,0],[16600,99999,1]];2 টি প্রিন্ট করা উচিত বলে মনে হচ্ছে এটি ভাল কাজ করে না বলে মনে হচ্ছে ?
কিয়ু গান

ওয়েল 4-এন্ট্রি পরীক্ষার ক্ষেত্রে, কেবল 2 টি গাড়ি রয়েছে। আপনার ইনপুট অর্ডার পূরণের জন্য আমি এটি ফর্ম্যাট করেছি।
কীউ গান

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

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

1
@ এডসি 65 আসলে, মাত্র 2 বাইট, না 4 This এটি 71 বাইটও রয়েছে:d=>Math.max(...d.sort(([a,b],[c,d])=>a-b||c-d).map(e=>s+=1-e[1]*2,s=0))
প্যাট্রিক রবার্টস

2

জাভাস্ক্রিপ্ট (ES6), 8368 70 বাইট

সম্পাদনা: দ্বিতীয় উদাহরণকে সমর্থন করার জন্য স্থির

অ্যারের [in_out, time, plate]অ্যারে হিসাবে ইনপুট নেয় । কিন্তু plateকলামটি আসলে উপেক্ষা করা হচ্ছে।

a=>a.sort(([a,b],[c,d])=>b-d||a-c).map(v=>a=(n+=1-v[0]*2)<a?a:n,n=0)|a

পরীক্ষা


পড়া in_outকলামের পরিবর্তে plateকলাম আপনি ছয় বাইট সংরক্ষণ করা উচিত: v=>n+=1-v[2]*2
নিল

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

@ পেট্রিকরোবার্টস যখন আমি আবার কোন কম্পিউটারের সামনে ফিরে আসছি তখন তা ঠিক করার চেষ্টা করবে ^^
আরনাউল্ড

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