জলি গ্রাইমারেন্ডারিং


26

পটভূমি

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

পৌরসভার একটি আয়তক্ষেত্রাকার মানচিত্র দেওয়া (2 ডি অ্যারে), আপনি আপনার দলকে সর্বাধিক প্রতিনিধিত্ব পেতে সহায়তা করার জন্য জেলা লাইন আঁকবেন। অর্থাৎ, আপনি গ্রাইমারেন্ডার করবেন। প্রতিটি পৌরসভার দুটি পক্ষ রয়েছে, 0এবং 1। মানচিত্রটি হয় 0বা 1তাদের সাথে স্কোয়ার নিয়ে গঠিত । এখানে একটি উদাহরণ মানচিত্র:

চ্যালেঞ্জ

আপনি জেলাগুলিতে মানচিত্রটি গোষ্ঠীভূত করবেন যাতে 1পার্টি কমপক্ষে ইনপুট দ্বারা নির্দিষ্ট জেলাগুলির সংখ্যা পায় get

ইনপুট

ইনপুটটিতে একটি মানচিত্র, অঙ্কনের জন্য জেলা সংখ্যা এবং 1দলের জয়ের ন্যূনতম সংখ্যার (ন্যূনতম স্কোর) অন্তর্ভুক্ত থাকবে।

আউটপুট

আউটপুট জেলাগুলির মানচিত্র হবে। প্রতিটি জেলা বর্ণমালার মূলধন বর্ণের সমন্বয়ে স্বতন্ত্রভাবে গঠিত হবে। হ্যাঁ, এর অর্থ হল 26 টিরও বেশি জেলা থাকবে না।

যদি কোনও সম্ভাব্য আউটপুট না থাকে যেখানে ইনপুটেড পার্টি যথেষ্ট জেলাগুলি জয়ী হয়:

  1. "আমরা চেষ্টা করেছি ..." মুদ্রণ করুন
  2. মারাত্মক ত্রুটি কারণ দলটি নির্বাচনের ফলাফল দ্বারা অপূরণীয়ভাবে আহত হয়েছিল
  3. অথবা উভয়

বিধি (খুব গুরুত্বপূর্ণ)

  1. সমস্ত জেলা অবশ্যই স্বচ্ছল হতে হবে
  2. জেলাগুলির মধ্যে অন্য জেলা নাও থাকতে পারে
  3. প্রতিটি জেলায় অবশ্যই কমপক্ষে চারটি নোড থাকতে হবে। ইনপুটটি নিয়মের সাথে সামঞ্জস্যপূর্ণ হবে, এর অর্থ number_of_districts * 4ম্যাপে কমপক্ষে নোড থাকবে
  4. প্রতিটি দলের স্কোর হ'ল এটির সংখ্যাগরিষ্ঠ জেলাগুলির সংখ্যা
  5. যদি কোনও জেলার একই সংখ্যা 0এবং 1গুলি থাকে তবে কোনও পক্ষই এটিকে উপকৃত করে না
  6. সাধারণ কোনও প্রতারণার নিয়ম
  7. এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড।

পরীক্ষার মামলা

1. Input       1. Output       2. Input       2. Output     3. Input      3. Output
districts: 5   Image and map   districts: 3   Image below   districts: 3  fatal error
min wins: 3                    min wins: 3                  min wins: 3
map:                           map:                         map:
00000110000    AAAAAAAAAAA     101101                       101101
10000010000    AAAAAAAAAAA     100000                       100000
10010000011    AAAAAAAAAAA     011011                       011011
11001110000    BBBBBBBAAAA     111111                       100111
00111111000    BBBBBBBAAAA     
01111111000    CCCCCDDDAAA     
01111111001    CCCCCDDDAAA     
01000111100    EEEEEDDDDDD     
00000001000    EEEEEDDDDDD     

অবশ্যই, আপনার প্রোগ্রামটি কেবল এইগুলি নয়, কোনও বৈধ পরীক্ষার ক্ষেত্রে কাজ করা উচিত ।


@ আরনাউল্ড, হ্যাঁ তারা কেবল চিত্রিত। আসল আউটপুট বর্ণমালার অক্ষরের সাথে প্রথম পরীক্ষার ক্ষেত্রে হওয়া উচিত। আমি এটি প্রতিফলিত করতে ট্যাগ পরিবর্তন করেছি।
ড্যানিয়েল

প্রথম টেস্টে মামলার একটি সরল পার্টিশন কিছু হবে ভালো । এটা কি ঠিক?
আর্নল্ড

@ আরনল্ড, হ্যাঁ, এটি বৈধ।
ড্যানিয়েল

সুতরাং তৃতীয় উদাহরণস্বরূপ, আমরা যদি এটি অনুভূমিক সারিগুলিতে ভাগ করি, প্রতিটি 1 টি জেলা লম্বা, তবে 1 গুলি 3 থেকে 1 হ্যাঁ জিতবে?
মাইকেল ডরগান

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

উত্তর:


6

আর , 938 896 858 952 বাইট

function(N,M,m){U="We tried...
"
L=length
A=matrix
W=which
K=sum
S=sample
G=unique
H=function(s,p=s-1){Y=S(c(s-j,s+j,p*(p%%j>0),(s+1)*(s%%j>0)))
Y[Y>0&Y<=k]}
C=function(v,z=W(r==v))K(z%%j<2,z-j<0,(z+j)>k)
m=A(strsplit(m,"")[[1]],1)
i=W(m<0)[1]-1
m=((t(A(m,i+1))[,1:i]>0)-.5)*2
if((K(m)<M&(N-M)<1)|K(m>0)<(3*M))cat(U) else{j=max(1,nrow(m))
k=i*j;w=g=T
while(w<9&g){Z=R=N;Q=M;b=0
r=A(0,j,i)
while(b<9&g){s=W(r<1)
s=s[S(L(s))][1:min(L(s),R)]
r[s]=1:L(s);a=0
while(K(r<1)>0&a<(k^2)){a=a+1
s=S(W(r>0&r<=R),1);p=r[s]
Y=H(s)
Y=Y[r[Y]<1]
if(L(Y)){Y=Y[order(m[Y])]
if(K(m[r==p]>1))r[Y[1]]=p else r[Y[L(Y)]]=p}}
if(a<(k^2)){for(v in 1:R){if(K(m[r==v])>0){r[r==v]=max(k,max(r))+1
Q=Q-1;Z=Z-1}}
if(Q<1){g=F
for(v in 1:R)r[r==v]=max(k,max(r))+1
for(v in G(c(r)))g=g|(K(r==v)<4)|(L(G(r[H(W(r==v))]))+C(v))<3}}
b=b+1;r[r<=R]=0;R=Z}
w=w+1}
if(g)cat(U) else{u=G(c(r))
for(v in 1:L(u))r[r==u[v]]=v
cat(paste(apply(A(LETTERS[r],j,i),1,paste,collapse=""),collapse="
"))}}}

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

একটি বিশাল > 900 > 800 (না!)> 900 বাইট সমাধান। কোড নিম্নলিখিত হিসাবে কাজ করে। এন নির্বাচনী জেলাগুলির সংখ্যা এবং এম সর্বনিম্ন জেলার যেখানে সর্বনিম্ন 1 জন ইচ্ছুক নূন্যতম সংখ্যার জবাবদিহি করুন।

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

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

কোডগুলি কয়েকবার চেষ্টা করে (9 বার)। যদি এটি ব্যর্থ হয় তবে এটি সবকিছু পুনরায় সেট করে এবং আবার শুরু হয়। "আমরা চেষ্টা করেছি ..." ছাড়ার আগে এবং মুদ্রণের আগে এটি অন্যান্য 9 বার এটি করে।

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

সম্পাদনা: নিয়ন্ত্রণটি যোগ করেছে যে কোনও জেলা গ্রুপ পুরোপুরি অন্য একটি দ্বারা ঘেরাও যাবে না, যদি না প্রদত্ত বর্গাকার কিনারায় জেলা গোষ্ঠীর জেলা থাকে districts আমার মনে হয় আমি প্রথমে এটি মিস করেছি।


আপনি কোনও নতুনলাইন সরাতে পারেন?
NoOneIs এখানে

আমি করেছিলাম. আমি একক বর্ণগুলিতে দীর্ঘ ক্রিয়াকলাপের নামও অর্পণ করেছি এবং যখন ভেরিয়েবলটি কঠোরভাবে পূর্ণসংখ্যা এবং ধনাত্মক ছিল তখন কয়েকটি ==0দিয়ে প্রতিস্থাপন করেছি <1
NofP

1
এখানে প্রচুর স্টাফ রয়েছে যা তুচ্ছভাবে গল্ফ করা যেতে পারে তবে একটি উত্তরের এটি প্রথম চেষ্টা, সুতরাং +1, এবং আমি আমার ফোনে না থাকলে কয়েক ঘন্টা চেষ্টা করে আমি সম্পাদনাগুলি প্রস্তাব করব!
জিউসেপ

1
858 বাইট - "নিয়মিত" গল্ফ, if...elseবিবৃতি দিয়ে ধনুর্বন্ধনী ব্যবহার পরিষ্কার করা , cজন্য অদলবদল করা as.vector, "\n"আক্ষরিক নিউলাইনগুলির সাথে পরিবর্তিত হওয়া এবং এমনটি ব্যবহার করে যেগুলি >স্বয়ংক্রিয়ভাবে সংখ্যাকে নীরবে অক্ষরে অক্ষরে চাপিয়ে তুলবে এবং তাদের কোডপয়েন্টগুলি তুলনা করবে। আমার সম্ভবত আরও কিছু গল্ফ রয়েছে যা আমি মনে করতে পারি না তবে এটি একটি শুরু। আমার মনে হয় আমরা আরও কয়েকটি জিনিস ঝাপট করতে পারি তবে আমি কোডটি বুঝতে 100% নিশ্চিত নই ...
জিউসেপে

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