एबीसी सॉल्वर के रूप में आसान


11

एबीसी के रूप में आसान, जिसे "एंड व्यू" के रूप में भी जाना जाता है, एक पहेली है जहां आपको इसके चारों ओर अक्षरों के साथ एक खाली ग्रिड दिया जाता है; आपको ग्रिड में आंशिक रूप से भरना चाहिए ताकि प्रत्येक अक्षर और पंक्ति में से एक अक्षर ठीक एक हो; इसके अलावा, एक पंक्ति के अंत में अक्षर (या स्तंभ) उस दिशा में उस पंक्ति (या स्तंभ) में दिखाई देने वाला पहला अक्षर होना चाहिए। इस कोड गोल्फ में आपका लक्ष्य एक आसान एबीसी पहेली को हल करना होगा।

उदाहरण के लिए, यहाँ इस वर्ष के एमआईटी मिस्ट्री हंट से एमआईसी का उपयोग करते हुए एक आसान एबीसी पहेली है :

पहेली

समाधान है:

समाधान

(Cs पर कलाकृतियों के बारे में क्षमा करें; मैंने शेष पहेली से अप्रासंगिक सूचनाओं को संपादित करने की कोशिश की।)

आई / ओ

इनपुट स्ट्रिंग के एक सरणी या संभवतः सीमांकक के साथ एक स्ट्रिंग होगा। यह शीर्ष बाएं कोने में शुरू होगा और दक्षिणावर्त जाएगा। उदाहरण के लिए, उपरोक्त पहेली इस तरह इनपुट हो सकती है:

".CMM.M|....IM|.....I|C.ICI."

आउटपुट को हल ग्रिड होना चाहिए, सीमा के साथ या उसके बिना। यह वर्णों की एक सरणी, तार की सरणी या किसी अन्य सुविधाजनक प्रारूप के रूप में हो सकता है। उसी "रिक्त" वर्ण को इनपुट के रूप में स्वीकार किया जाना चाहिए और आउटपुट के रूप में प्रदर्शित किया जाना चाहिए, लेकिन वह रिक्त चरित्र कुछ भी हो सकता है। यदि वे एकल तार हैं, तो इनपुट और आउटपुट दोनों में एक ही विभाजक होना चाहिए (इनपुट के लिए पक्षों और आउटपुट के लिए पंक्तियों के बीच) या बिल्कुल भी विभाजक नहीं।

अकल्पनीय पहेलियों के लिए, आपको किसी ऐसी चीज़ का उत्पादन करना चाहिए जो किसी समाधान के लिए गलत न हो। आप मान सकते हैं कि किसी भी पहेली का एक से अधिक समाधान नहीं है।

आपको किसी भी अक्षर और किसी भी आकार के ग्रिड की अनुमति देनी चाहिए; सभी प्रयुक्त पत्र ग्रिड की सीमा में दिखाई देंगे।

यह : हमेशा की तरह, सबसे छोटा कोड जीतता है!

परीक्षण के मामलों

"T.AA..|.T.TSS|..TST.|A...SS"
"R.RU..|B.B..B|.UR.UB|UR..B."
"N...NK|E.NK.K|..KK..|....EK"
"CA..DBD|.B..CC.|.D.DEB.|DB.A..A"
"...DDEBE|DC..EBBD|BA..ABF.|E..FECDE"

2
स्पष्ट होना: पूरी वर्णमाला सीमा पर दी गई है? (अर्थात ऐसा कोई पत्र नहीं दिखेगा जो सीमा पर न हो?)
क्विंटोपिया

@ क्विंटोपिया: हाँ। सीमा में हर प्रयुक्त पत्र शामिल होगा।
देउसोवी

जवाबों:


1

PHP, 1111 बाइट्स

माइनस बाइट्स को हटाकर नईलाइन्स

ऑनलाइन संस्करण 6 की लंबाई के साथ testcases के साथ ही काम करता है

कम वर्कअराउंड

सभी क्रमपरिवर्तन करें

क्रमोन्नति के साथ $ 2 $ $ 2 सरणियों को भरें

दो कार्यों के बीच इतनी देर तक परिवर्तन एक्स एक्सरे लाइन लाइन में केवल 1 समाधान मौजूद है

फ़ंक्शन i: ग्रिड और ड्रॉप क्रमपरिवर्तन में अंतर देखें

फंक्शन c: यूनीक चार्जर्स के प्रत्येक एरे में कॉलम्स की जाँच करें और एरे $ x और $ y के लिए अन्य लाइनों में क्रमपरिवर्तन को हटा दें।

$p=[];p(array_pad(($s="str_split")(substr(count_chars($a=$argn,3),1,-1)),$l=(strlen($a)-3)/4," "));
$e=explode("|",$a);$e[3]=strrev($e[3]);$e[2]=strrev($e[2]);
$x=$y=array_fill(0,$l,$p);$g="preg_grep";$c="array_column";$o="join";
foreach($q=range(0,$l-1)as$i){
$e[0][$i]=="."?:$y[$i]=$g("#^\s*{$e[0][$i]}#",$y[$i]);
$e[2][$i]=="."?:$y[$i]=$g("#{$e[2][$i]}\s*$#",$y[$i]);
$e[3][$i]=="."?:$x[$i]=$g("#^\s*{$e[3][$i]}#",$x[$i]);
$e[1][$i]=="."?:$x[$i]=$g("#{$e[1][$i]}\s*$#",$x[$i]);}
for(;array_sum(($m="array_map")("count",$x))>$l;){
foreach($q as$i)foreach($q as$j){
$k=array_intersect($c($m($s,$x[$i]),$j),$c($m($s,$y[$j]),$i));
$y[$j]=$g("#^.{{$i}}(".$o("|",$k).")#",$y[$j]);
$x[$i]=$g("#^.{{$j}}(".$o("|",$k).")#",$x[$i]);
foreach(["x","y"]as$z){
$u=array_unique($c($m($s,${"$z"}[$i]),$j));
if(count($u)==1&&end($u)!=" "){$w=end($u);
foreach($q as$h){
if($i!=$h)${"$z"}[$h]=$g("#^.{{$j}}{$w}#",${"$z"}[$h],1);}}
}}}
echo$o("\n",$m($o,$x));
function p($c,$b=[]){global$p;
if(($c)){$n=[];while($c){
$e=array_pop($c);
p(($m="array_merge")($c,$n),$m($b,[$e]));
$n[]=$e;
}}else in_array($b=join($b),$p)?:$p[]=$b;}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.