সব আলো সব আলো সব আলো!


13

এই চ্যালেঞ্জটি সম্পূর্ণরূপে অল লাইট দ্বারা অনুপ্রাণিত হয়ে সলজিট গেমস দ্বারা বিকশিত হয়।

চ্যালেঞ্জ

আপনি একজন ইলেক্ট্রিশিয়ান এবং সমস্ত ব্যাটারির বাতি জ্বালিয়ে দেওয়া আপনার কাজ।

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

ব্যাটারির অবস্থান এবং প্রতিটি আলোর অবস্থান এবং প্রতিটি আলোকে যে সংযোগের প্রয়োজন হয় তার সংখ্যা দেওয়া হয় এবং এই বৈশিষ্ট্যগুলিকে স্বীকার করে এমন তাদের মধ্যে সংযোগগুলি আউটপুট দেয়।

উইন কন্ডিশন

এটি , তাই প্রতিটি ভাষার সংক্ষিপ্ততম কোডটি জয়ী হয়।

পরীক্ষার কেস

I / O যথারীতি নমনীয়।

ইনপুটটির জন্য আমি গ্রিডের আকারের 2 ডি অ্যারে ব্যবহার করব যা আলোর জন্য ধনাত্মক পূর্ণসংখ্যা, ফাঁকা জায়গাগুলির জন্য শূন্য এবং ব্যাটারির জন্য -1 সঞ্চয় করে। আর একটি ভাল পছন্দ লাইটের একটি তালিকা হতে পারে, যেখানে একটি আলো আলোর অবস্থান এবং প্রয়োজনীয় সংযোগগুলির সংখ্যা সম্বলিত একটি টুপল।

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

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

এখানে পরীক্ষার কেসগুলির একটি গ্রাফিকাল ভিউ রয়েছে: টেস্টগুলি 1-12

পরীক্ষা 1:

[-1 | 0 | 1 ] => [{(0, 0), (0, 2)}]

পরীক্ষা 2:

[-1 | 0 | 2 ] => [{(0, 0), (0, 2)}, {(0, 0), (0, 2)}]

পরীক্ষা 3:

[-1 ] [ 0 ] => [{(0, 0), (2, 0)), ((0, 0), (2, 0)}] [ 2 ]

পরীক্ষা 4:

[ 1 | 0 |-1 | 0 | 2 ] => [{(0, 0), (0, 2)}, {(0, 2), (0, 4)}, {(0, 2), (0, 4)}]

পরীক্ষা 5:

[ 2 ] [ 0 ] [-1 ] => [{(0, 0), (2, 0)}, {(0, 0), (2, 0)}, {(2, 0), (4, 0)}] [ 0 ] [ 1 ]

পরীক্ষা 6:

[ 1 | 0 | 0 ] [ 0 | 0 | 0 ] => [{(0, 0), (2, 0)}, {(2, 0), (2, 2)}] [ 2 | 0 |-1 ]

পরীক্ষা 7:

[ 4 | 0 | 0 |-1 ] [ 0 | 0 | 0 | 0 ] => [{(0, 0), (0, 3)}, {(0, 0), (0, 3)}, [ 2 | 0 | 0 | 0 ] {(0, 0), (3, 0)}, {(0, 0), (3, 0)}]

পরীক্ষা 8:

[ 2 | 0 |-1 | 0 | 2 ] [{(0, 0), (0, 2)}, {(0, 0), (0, 2)}, [ 0 | 0 | 0 | 0 | 0 ] => {(0, 2), (0, 4)}, {(0, 2), (0, 4)}, [ 0 | 0 | 1 | 0 | 0 ] {(0, 2), (2, 2)}]

পরীক্ষা 9:

[ 0 | 0 | 2 | 0 | 0 ] [ 0 | 0 | 0 | 0 | 0 ] [ 1 | 0 |-1 | 0 | 1 ] => [{(0, 2), (2, 2)}, {(0, 2), (2, 2)}, {(2, 0), (2, 2)}, [ 0 | 0 | 0 | 0 | 0 ] {(4, 2), (2, 2)}, {(2, 4), (2, 2)}, {(2, 4), (2, 2)}] [ 0 | 0 | 2 | 0 | 0 ]

পরীক্ষা 10:

[-1 | 2 | 3 | 2 ] => [{(0, 0), (0, 3)}, {(0, 0), (0, 3)}, {(0, 0), (0, 3)}, {(0, 0), (0, 3)}]

পরীক্ষা 11:

[-1 | 0 | 0 | 0 ] [ 3 | 0 | 0 | 0 ] [ 3 | 0 | 0 | 3 ] => [{(0, 0), (1, 0)}, {(1, 0), (2, 0)}, {(1, 0), (2, 0)}, [ 0 | 0 | 0 | 0 ] {(2, 0), (2, 3)}, {(2, 3), (4, 3)}, {(2, 3), (4, 3)}] [ 0 | 0 | 0 | 2 ]

পরীক্ষা 12:

[ 2 | 0 | 0 ] [{(0, 0), (1, 0)}, {(0, 0), (1, 0)}, {(1, 0), (1, 1)}, [ 3 |-1 | 0 ] => {(1, 1), (2, 1)}, {(1, 1), (2, 1)}, {(2, 0), (2, 1)}, [ 2 | 5 | 1 ] {(2, 0), (2, 1)}, {(2, 1), (2, 2)}]



আমি একটি পরীক্ষার কেস থাকার পরামর্শ দিই যে এখানে একটি সমাধান বিদ্যমান রয়েছে যা "প্রতিটি আলোক থেকে ব্যাটারির দিকে যেতে হবে" ব্যতীত প্রতিটি শর্ত পূরণ করে। উদাহরণস্বরূপ [1 | -1] [1 1]
ব্যবহারকারী 202729

কিছুটা আমাকে ব্লসম অ্যালগরিদমের কথা মনে করিয়ে দেয়।
ব্যবহারকারী 202729

2
@ user202729 আমি গ্যারান্টি ইনপুট একটি সমাধান সব শর্ত পরিতৃপ্ত আছে
musicman523

1
এটি একটি হাসি ধাঁধাটির মতো বলে মনে হচ্ছে। আমি তাদের উভয় সমাধান করার একই পদক্ষেপ অনেক একই মনে করি।
5urous

উত্তর:


2

জাভাস্ক্রিপ্ট (নোড.জেএস) , 393 391 378 বাইট

a=>(R=[],f=(a,[x,...y],z,Y)=>x?f(a.map(t=>[...t]),y,z,Y)||f(a,y,[...z,x],Y.map(p=>p.map(q=>q-Y[x[0]][x[1]]?q:Y[x[2]][x[3]])),--a[x[0]][x[1]],--a[x[2]][x[3]]):/[1-9]/.test(a)|Y.some(t=>t.some(u=>u-Y[I][J]&&u))?0:z)(a=a.map(A=(b,i)=>b.map((x,j)=>x&&(A[i]+1&&R.push([i,A[i],i,j]),f[j]+1&&R.push([f[j],j,i,j]),A[I=i]=j,f[J=j]=i,x/=x>0))),[...R,...R],C=[],a.map(p=>p.map(q=>q&&++C)))

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

a=>(
    a=a.map(
        A=(b,i)=>
            b.map(
                (x,j)=>
                    x&&(                                  // A[i]+1 <==> A[i] is NOT NaN
                        A[i]+1&&R.push([i,A[i],i,j]),     // Use A and f to store last
                        f[j]+1&&R.push([f[j],j,i,j]),     // existance of row and column
                        A[I=i]=j,f[J=j]=i,x/=x>0          // -1 => -Inf, +n => n
                    )
            ),
            R=[],
            f=([x,...y],z,Y)=>
                x?
                    f(
                        y,[...z,x],
                        Y.map(p=>p.map(q=>q-Y[x[0]][x[1]]?q:Y[x[2]][x[3]])), // merge
                        --a[x[0]][x[1]],--a[x[2]][x[3]]
                    )||
                    f(y,z,Y,++a[x[0]][x[1]],++a[x[2]][x[3]])
                :
                    /[1-9]/.test(a)|
                    Y.some(t=>t.some(u=>u-Y[I][J]&&u)) // not totally merged
                    ?0:z
    ),f)([...R,...R],[],a.map(p=>p.map(q=>q&&++C),C=0)
)


জাভাস্ক্রিপ্ট রেজেক্সে / [1-9] / এর জন্য একটি শর্টকাট আছে?
জাকারি

@ জ্যাচারý আমি এটি মনে করি না। সাধারণত [0-9]ব্যবহৃত হয়
l4m2

বোকা আমাকে! আমি ভেবেছিলাম আপনি যা লিখেছেন
জাকারি

@ জাচারý কি ??
l4m2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.