ম্যাজিক বক্স সমস্যা


15

আপনার কাছে এম * এন সাইজের একটি ইনপুট অ্যারে রয়েছে। অ্যারের প্রতিটি কক্ষই পি বা টি দিয়েই পপুলিটেড হয় on অ্যারেটিতে কেবলমাত্র অপারেশনটি আপনি করতে পারবেন ফ্লিপ কলাম। আপনি যখন কোনও কলামটি ফ্লিপ করবেন, তখন column কলামের স্যুইচের সমস্ত কক্ষে অক্ষরগুলি (পি টি এবং বিপরীতমুখী হয়ে যায়)। যদি আপনার একই অক্ষর (যেমন পিপিপিপি) সহ 'x' নম্বর সারি থাকে তবে আপনি একটি পয়েন্ট পাবেন get একটি অ্যালগরিদম ডিজাইন করুন যা অ্যারে নেয় এবং একটি সমাধান দেয় (কোন কলামগুলি ফ্লিপ করতে পারে) যেমন ফলস্বরূপ অ্যারে সর্বাধিক সংখ্যক পয়েন্ট সম্ভব থাকে।

দ্রষ্টব্য: একাধিক সমাধান রয়েছে যা সর্বাধিক স্কোর অর্জন করে, সর্বনিম্ন সংখ্যক ফ্লিপযুক্ত একটি বেছে নিন। উদাহরণ:

ইনপুট অ্যারে:

PPTPP
PPTPP
PPTTP
PPPTT
PPPTT

আউটপুট:

3

ব্যাখ্যা:
একটি সমাধান যা সর্বাধিক পয়েন্ট দেয়: নং ফ্লিপ করুন। 3
তারপরে আসল অ্যারেটি হ'ল:

PPPPP // 1 point
PPPPP // 1 point
PPPTP
PPTTT
PPTTT

//Total: 2 points

নোট করুন যে দু'এর স্কোর পেতে একজন 4 এবং 5 কলামগুলিও ফ্লিপ করতে পারে তবে তার জন্য অতিরিক্ত ফ্লিপ দরকার।

আপনি দুটি মাত্রিক অ্যারে প্রতিনিধিত্ব করতে কোনো সুবিধাজনক ইনপুট ফর্ম্যাট ব্যবহার হতে পারে, এবং আপনি যে কোনো দুটি স্বতন্ত্র কিন্তু সংশোধন, মান প্রতিনিধিত্ব করতে পারে Pএবং T

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।


6
পিপিসিজিতে আপনাকে স্বাগতম। এটি একটি দুর্দান্ত চ্যালেঞ্জ, তবে বিষয়টিতে থাকতে এটির একটি বিজয়ী মানদণ্ড প্রয়োজন।
Ypnypn

আমি কি ইনপুট ফর্ম্যাটটি নিয়ন্ত্রণ করতে পারি? আমি কি বলতে পারি যে পি মিথ্যা এবং টি সত্য? যদি না হয় তবে ইনপুট ফর্ম্যাটটি কী?
গর্বিত হাস্কেলর

অবশ্যই, ইনপুট ফর্ম্যাটটি কোনও ব্যাপার নয়। বলুন আপনার কাছে চর বা ইনটস বা বুলিয়ান বা আপনার পছন্দ মতো যে দুটি ধরণের অ্যারে রয়েছে।
bruhhhhh

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

1
আমি পিটারের প্রথম পরামর্শে কাজ করেছি। শব্দ পছন্দ না হলে নির্দ্বিধায়।
মার্টিন এন্ডার

উত্তর:



1

পাইথ , 28

f@eo+/QN/Qm!dN_osZ^U2lhQTUhQ

নেস্টেড তালিকার আকারে ইনপুট নেয়, যেমন

[[0,0,1,0,0],[0,0,1,0,0],[0,0,1,1,0],[0,0,0,1,1],[0,0,0,1,1]]

আউটপুট 0-সূচকযুক্ত দেয়, যেমন

[2]

^U2lhQ: 0 এবং 1 এর দৈর্ঘ্যের সঠিক দৈর্ঘ্যের সমস্ত সম্ভাব্য তালিকা তৈরি করে।

_osZ: বেশিরভাগ 1 টি থেকে কমপক্ষে এই তালিকাগুলিকে অর্ডার করুন।

+/QN/Qm!dN: ইনপুটটিতে প্রতিটি তালিকা ( N) এবং এর বিপরীতমুখী, 0 ও 1 এর অদলবদল ( m!dN) কতবার গণনা করে । প্রাক্তনটি সমস্ত শূন্যগুলি ছেড়ে যাওয়ার পরে একের পর এক ফ্লিপের সাথে সামঞ্জস্য হয় the

eo: উপরের কী অনুসারে তালিকাকে অর্ডার করে এবং এর শেষ উপাদানটি গ্রহণ করে, যা সর্বাধিক মেলানো কলামগুলির সাথে ফলাফল হবে এবং এর মধ্যে একটিতে স্বল্পতমগুলির সাথে একটি রয়েছে।

f@ ... TUhQ: 1s এবং 0 এর এই তালিকাটি উল্টানো হবে সূচকগুলির তালিকায় রূপান্তর করে।

1-ইন্ডেক্স জন্য, পরিবর্তন dএকটি থেকে k, তারপর করা mhdশুরুতে।


0

সিজেম, 53 51 বাইট

l~z:X,,La\{1$f++}/{,}${X\{_X=:!t}/z{_&,(},,}$0=:)S*

এটি STDIN থেকে 0 এবং 1 এর দ্বিমাত্রিক অ্যারে পড়ে। উদাহরণস্বরূপ প্রশ্নের উদাহরণ হতে হবে

[[0 0 1 0 0] [0 0 1 0 0] [0 0 1 1 0] [0 0 0 1 1] [0 0 0 1 1]]

এটি এখানে পরীক্ষা করুন।

এটি প্রথমে কলামগুলির সমস্ত সম্ভাব্য সাবসেটগুলি পেয়েছে দৈর্ঘ্যের ক্রম অনুযায়ী, তারপরে প্রতিটি উপ-স্তরের জন্য ফ্লিপগুলি সম্পাদন করে এবং কতগুলি সারিতে এখনও 0 এবং 1 উভয় উভয় সারি রয়েছে তা অনুসারে বাছাই করে। অবশেষে, আমরা কেবল এই জাতীয় প্রথম সাবসেটটি ফিরিয়ে দিই। এটি বাছাই স্থিতিশীল হওয়ার উপর নির্ভর করে যেমন বৃদ্ধির দৈর্ঘ্যের প্রাথমিক ক্রম টাই-ব্রেকারের যত্ন নেয়।


0

হাস্কেল, 98

g s=snd$maximum[((sum[1|o<-s,o==r||o==map(1-)r],-sum r),[i|(i,1)<-zip[1..]r])|r<-s++map(map(1-))s]

ইনপুট ফর্ম্যাটটি ইনটগুলির তালিকার একটি তালিকা। আপনি পরীক্ষার জন্য একটি স্ট্রিং সংস্করণ ব্যবহার করতে পারেন:

gg = g . map (map (\c -> case c of 'T' -> 0 ; _ -> 1) ) . lines

ওহ কোন জায়গা নেই! এটা ব্যাথা!

এটি সারিগুলিতে পুনরাবৃত্তি করে এবং পয়েন্টগুলির সংখ্যা গণনা করে কাজ করে যদি আমরা কলামগুলি এমনভাবে ফ্লিপ করি যে এই সারিটি আমাদের একটি পয়েন্ট অর্জন করে।

প্রথমে লক্ষ্য করার বিষয় হ'ল সারিটি সকল Trueবা সকলের কাছে ফ্লিপ করা কোনও Falseবিষয় নয়, কারণ গ্রিডগুলি একে অপরের বিপরীত হবে এবং সুতরাং সঠিক স্কোরটি হবে।

প্রদত্ত সারি যখন একটি বিন্দু লাভ করে তখন আমরা গণনাটি যেভাবে গণনা করি তা হ'ল: আমরা আবার সারিগুলিতে পুনরাবৃত্তি করি এবং প্রতিটি সারি আমাদের যে বিন্দুগুলি দেয় তা যোগ করে সত্যতা ব্যবহার করে যে সারিগুলি অভিন্ন বা সঠিক বিপরীত হয় when

উদাহরণস্বরূপ, আমরা যে সারিটি উল্টিয়ে দিচ্ছি TPPTPএবং বর্তমান সারিতে আমরা পুনরাবৃত্তি করছি তা যদি হয় PTTPTবা TPPTPতারপরে সারিটি আমাদের একটি পয়েন্ট অর্জন করে তবে এটি যখন অন্য কোনও সারি হয়, তখন এটি আমাদের কোনও পয়েন্ট অর্জন করে না।


@ মার্টিনব্যাটনার হ্যাঁ, আমি খুব শীঘ্রই এটি ঠিক করব (আশা করি)
গর্বিত হাসেলেলার

0

সিজেম, 37

q~_{:!}%+:T{T1$a-,\0-+}$0={U):U*}%0-`

ছক পূরণ করা:

[[0 0 1 0 0] [0 0 1 0 0] [0 0 1 1 0] [0 0 0 1 1] [0 0 0 1 1]]

0

গণিত - 76

{
{P, P, T, P, P},
{P, P, T, P, P},
{P, P, T, T, P},
{P, P, P, T, T},
{P, P, P, T, T}
}/.{P -> 1, T -> 0};
First@MaximalBy[
  Subsets@Range@Length[%],
  MapAt[1-#&,%,{All,#}]~Count~{1..}&
]


0

পাইথন 2, 234

from itertools import *
A=input()
n=len(A[0])
R=range(n)
S=(0,)
for p in[q for i in R[:-1] for q in combinations(R,i)]:
    s=[sum([(l[q]+(q in p))%2 for q in R])for l in A]
    m=s.count(n)+s.count(0)
    if m>S[0]:S=(m,p)
print S[1]

ইনপুট হল তালিকার একটি তালিকা:

[[0,0,1,0,0],[0,0,1,0,0],[0,0,1,1,0],[0,0,0,1,1],[0,0,0,1,1]]

আউটপুট হল 0 থেকে পাইথন ইনডেক্সিং ব্যবহার করে ফ্লিপের একটি প্রধান অংশ:

(2,)

যদি আউটপুটটি 1 থেকে ইনডেক্স করা আবশ্যক, তবে কোডটি 272 টি অক্ষরের সাথে 0 টি ফ্লিপ নির্দেশ করে না:

print 0 if len(S[1])==0 else [p+1 for p in S[1]]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.