বুলেটস সংঘর্ষের সময়


16

এই চ্যালেঞ্জটি কিছুক্ষণ আগে কিছু বইতে পড়েছিলাম এমন একটি ধাঁধার ভিত্তিতে তৈরি, যা আমি আবার এখানে পেয়েছি । এটি প্রতি সেকেন্ডে একবারে বন্দুক থেকে নিক্ষেপ করা গুলি সম্পর্কে বিভক্ত গতিতে যা চিরতরে একটি সরলরেখায় ভ্রমণ করে। যখন একটি গুলি অন্যকে আঘাত করে, তখন উভয়ই সম্পূর্ণ ধ্বংস হয়ে যায়। ("বুলেট" এর সমস্ত উদাহরণ "ক্ষেপণাস্ত্র" দিয়ে প্রতিস্থাপন করতে নির্দ্বিধায়।)

কাজটি

বুলেট গতির একটি তালিকা দেওয়া হয়েছে যাতে তারা গুলি চালিয়ে যাচ্ছে, নির্ধারণ করুন যে সমস্ত গুলি নষ্ট হয়েছে কিনা।

নিয়ম

  • ইনপুট হ'ল অ-নেতিবাচক পূর্ণসংখ্যার একটি তালিকা, যেকোন ডিলিমিটার দ্বারা পৃথক করা হয় এবং তার আগে এবং পরে একটি alচ্ছিক চরিত্র সহ। এগুলি বৈধ ইনপুট: 1 2 3 4 5 6এবং [1,2,3,4,5,6]। প্রোগ্রামারটি পছন্দ করে।
  • যদি কমপক্ষে একটি গুলি চিরকালের জন্য বেঁচে থাকে এবং অন্যথায় মিথ্যা মান থাকে তবে সত্যবাদী মানটি আউটপুট করুন।
  • বুলেট গতি প্রতি সেকেন্ডে ইউনিট দেওয়া হয়।
  • বুলেটগুলি একই সাথে এবং অবিচ্ছিন্নভাবে চলে।
  • বুলেটগুলি ভগ্নাংশের অফসেটগুলিতে সংঘর্ষ হতে পারে।
  • একাধিক বুলেট যা একই সাথে একই অবস্থানে পৌঁছায়, মূল থেকে অবিচ্ছেদ্য বা ভগ্নাংশের অফসেটে থাকা হোক না কেন, সমস্ত একে অপরের সাথে সংঘর্ষে লিপ্ত হয়।

উদাহরণ

এই চিত্রগুলিতে Gবন্দুকের >গুলি, বুলেটগুলি উপস্থাপন করে এবং *বুলেটগুলির সংঘর্ষ ও বিস্ফোরণ ঘটে times

Truthy

ইনপুট: 0

        0123456789
Time 0 G>
     1 G>
     2 G>
   ...

আউটপুট: 1


ইনপুট: 0 0 0

        0123456789
Time 0 G>
     1 G*
     2 G>
     3 G>
     4 G>
   ...

আউটপুট: 1


ইনপুট: 1

        0123456789
Time 0 G>
     1 G >
     2 G  >
     3 G   >
   ...

আউটপুট: 1


ইনপুট: 2 1

        0123456789
Time 0 G>
     1 G> >
     2 G >  >
     3 G  >   >
     4 G   >    >
   ...

আউটপুট: 1


ইনপুট: 2 3 1

        0123456789
Time 0 G>
     1 G> >
     2 G>  >>
     3 G >    *
     4 G  >
     5 G   >
   ...

আউটপুট: 1


Falsy

ইনপুট: 1 2 3 4 5 6

        Unit      1111111111
        01234567890123456789
Time 0 G>
     1 G>>
     2 G> *
     3 G>  >
     4 G>   > >
     5 G>    >  >>
     6 G      >   > *
     7 G            >  >
     8 G                  > >
     9 G                        >>
    10 G                              *
                  111111111122222222223
        0123456789012345678901234567890

আউটপুট: 0


ইনপুট: 1 0 0 3

        Unit
        0123456789
Time 0 G>
     1 G>>
     2 G* >
     3 G>  >
     4 G   >>
     5 G     *

(দ্বিতীয় সংঘর্ষের সময় 4.5।)
আউটপুট:0


ইনপুট: 2 1 2 3 6 5

        Unit      1111111111
        01234567890123456789
Time 0 G>
     1 G> >
     2 G>>  >
     3 G> *   >
     4 G>  >    >
     5 G>     *   >
     6 G     >      >
     7 G          >   >
     8 G               >>
     9 G                *
                  1111111111
        01234567890123456789

আউটপুট: 0


ইনপুট: 2 3 6

        Unit
        0123456789
Time 0 G>
     1 G> >
     2 G>  >>
     3 G      *

আউটপুট: 0


আমার কি ইনপুটটির মতো সীমিত করা দরকার 1<enter>2<enter>3...?
বিড়াল

@ সিসেরেক: এটি এটিকে চাপ দিচ্ছে, তবে আমি এটি অনুমতি দেব।
এল'েন্ডিয়া স্টারম্যান 21

আমি কুনিটোপিয়ার সাথে একমত - এই চ্যালেঞ্জটি দুষ্কর, তবে আমি একটি সমাধানের জন্য কাজ করছি ...
zmerch

উত্তর:


4

পাইথন 2, 388 392 388 346 342 336 331 বাইট

z=k=input();l=len(k);v=range;u=v(l)
while l<z:
 r="";o=[r]*l;z=l
 for h in v(l):
    if r:o[h-1]=o[m]=r;m=h;r=""
    for j in v(h+1,l):
     p=k[h];q=k[j];t=u[j];n=(1.0*q*t-p*u[h])/(q-p)if q-p else""if p>0 else t
     if t<=n<r<()>o[j]>=n<=o[h]:r=n;m=j
 i=0;s=o and min(o)
 while i<l:
    if o[i]==s!="":del k[i],o[i],u[i];l-=1
    else:i+=1
print l

আমার godশ্বর এই জিনিস বিশাল, কিন্তু আমি বিশ্বাস করি এটি আসলে কাজ করে। আপনি যখন এর সমস্ত জটিলতা দেখতে পান, তখন এই চ্যালেঞ্জটি হাস্যকরভাবে শক্ত।

আমি নিশ্চিত না যে আমি কীভাবে কয়েক ঘন্টা টাইপ না করে বিশদে এটি কাজ করে তা ব্যাখ্যা করতে পারি, তাই আমি কেবল একটি নির্বাহী সংক্ষিপ্তসার দেব।

লুপটি যখন প্রধান ইনপুট তালিকাটি সঙ্কুচিত না হয় ততক্ষণ লুপ হয়।

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

প্রতিটি সংখ্যার জন্য আমরা কোন বুলেটটি শীঘ্রই আঘাত হানবে তা ট্র্যাক করে রাখি এবং তারপরে oজড়িত বুলেটগুলির জন্য ন্যূনতম সংঘর্ষের সময় আপডেট করা হয়।

এই ডাবল লুপটি শেষ হওয়ার পরে, আমরা ইনপুট তালিকাটি নিয়ে পুনরাবৃত্তি করব এবং কোনও বুলেট মুছে ফেলব যা কোনও সংঘর্ষের সময়ে সর্বনিম্ন সময়ে সংঘর্ষিত হবে, যদি কোনও হয়। এটি আমাদের একই সাথে বৃহত সংখ্যক বুলেটগুলি মুছতে দেয় যদি একই মুহুর্তে তারা সংঘর্ষের ঘটনা ঘটায়।

তারপরে আমরা বাকি গুলিগুলিতে পুরো প্রক্রিয়াটি পুনরাবৃত্তি করি, যেহেতু তারা এখনই বুঝতে পারে যে তারা যে বুলেটের সাথে সংঘর্ষে থাকতে পারে তা নষ্ট হয়ে গেছে।

যতক্ষণ না কোনও বুলেট মুছে ফেলা হয় (তালিকাটি সঙ্কুচিত না হওয়া দ্বারা নির্দেশিত), আমরা যখন লুপটি এড়িয়ে চলি এবং অবশিষ্ট তালিকার দৈর্ঘ্য মুদ্রণ করি। সুতরাং, বুলেটগুলি যদি বেঁচে থাকে তবে এই প্রোগ্রামটি কেবল সত্যকেই মুদ্রণ করে না, এটি আসলে বুলেটগুলির টিকে থাকা সংখ্যাগুলিও প্রিন্ট করে।

সম্পাদনা: আমাকে বাগ খুঁজে পেতে সহায়তা করার জন্য পরীক্ষার কেস উত্পন্ন করার জন্য ফেয়ারসামকে বিশেষ ধন্যবাদ।

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

সম্পাদনা 3: পরিসরের নাম পরিবর্তন করে 4 টি বাইট সংরক্ষণ করা হয়েছে

সম্পাদনা 4: ট্যাবগুলির সাথে ডাবল স্পেসগুলি প্রতিস্থাপন করে আরও 6 টি বাইট সংরক্ষণ করা হয়েছে। এছাড়াও, ফেয়ারসাম তার তুলনায় ভগ্নাংশ এবং সেট ব্যবহার করে তার বাস্তবায়ন সরবরাহ করার জন্য যথেষ্ট দয়ালু ছিল। আমি এটি কিছুটা গল্ফ করেছি এবং এটি আমার সমাধানটি বেঁধে 331 বাইটে আসে।

5 সম্পাদনা করুন: একটি অপ্রয়োজনীয় আরম্ভকরণ সরিয়ে শর্তসাপেক্ষে পুনর্লিখন করে 5 বাইট সংরক্ষণ করা হয়েছে


আপনি আবার উদাহরণ ইনপুট পরীক্ষা না? [1, 0, 0, 3] কাজ করে না।
ফেয়ারসাম

@ ফিয়ারসাম কেবলমাত্র আমিই পরীক্ষা করিনি, ডাঙ্গিত। তবে স্থির এই সমস্ত প্রয়োগের সাথে আমি আরও ভালভাবে আবেদন করি। : পি
কুইন্টোপিয়া

এখনও কাজ করে না। [1, 16, 18, 20, 30] ফেরত পাঠাবেন 1.
feersum

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