क्रॉसवर्ड की मजबूरियाँ!


14

क्रिस, एक क्रिप्टोकरंसी व्यसनी, के पास उस क्रम के लिए एक सेट एल्गोरिथ्म है जिसमें वह उन्हें हल करता है।

यहाँ छवि विवरण दर्ज करें

हम एक गाइड के रूप में उपरोक्त छवि का उपयोग करेंगे।

  1. क्रिस हमेशा क्लू भर में पहले के साथ शुरू होता है, इस मामले में 1 एक्रॉस। क्रिस एक सक्षम क्रॉसवर्ड उत्साही है, इसलिए यह माना जाता है कि वह हमेशा उस सुराग का जवाब जानता होगा जिस पर वह काम कर रहा है।
  2. एक बार जब क्रिस एक सुराग पूरा कर लेता है, तो वह उन सभी सुरागों की जांच करेगा, जो उन्होंने पूरे किए हैं (पहले मामले में, 1 नीचे, 2 नीचे और 3 नीचे) और फिर सबसे कम संख्या के साथ सुराग पूरा करें। यदि कोई निकटवर्ती सुराग नहीं हैं, तो वह चरण 3 पर जाएगा।
  3. यदि सुराग ऐसा है कि अगले नंबर (जैसा कि चरण 3 में वर्णित है) में एक समग्र और नीचे दोनों सुराग हैं, तो वह पहले सुराग को पूरा करेगा (100% निश्चितता, ओसीडी पर यह सीमाएँ!)
  4. यदि कोई निकटवर्ती सुराग नहीं है, तो वह अगले उपलब्ध सुराग पर जाएगा जो कि संख्या में (अगले या नीचे) है
  5. चरण 2 से दोहराएँ जब तक सभी सुराग पूरा नहीं हो जाता।

और यह वह जगह है जहां यह आपके लिए आता है, प्रिय कोडर। आपको एक ऐसा कोड बनाने का काम सौंपा गया है, जिसे क्रॉसवर्ड टेम्पलेट के साथ प्रदान किया जा सकता है, इसे हल करने के लिए क्रिस के एल्गोरिथ्म पर आधारित सुराग के क्रम का वर्णन करते हुए आउटपुट प्रदान करता है।

कोड एक क्रॉसवर्ड पहेली टेम्पलेट के इनपुट को स्वीकार करेगा, .एक सफेद वर्ग का #प्रतिनिधित्व करने और एक काले वर्ग का प्रतिनिधित्व करने के रूप में।

उदाहरण :

.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....

इनपुट के माध्यम से हो सकता है: क) क्रॉसवर्ड की प्रत्येक पंक्ति के लाइन इनपुट द्वारा क्रॉसवर्ड, या बी) के प्रतिनिधित्व की एक फ़ाइल पढ़ी जाती है, उसके बाद ईओएफ का \nदूसरा \nसंकेत मिलता है।

और फिर यह उस विधि को निर्धारित करेगा जिसके द्वारा क्रिस ने ऊपर वर्णित एल्गोरिदम के अनुसार इसे हल किया होगा।

आउटपुट कॉमा की एक श्रृंखला के प्रारूप में अलग-अलग निर्देशों के रूप में होना चाहिए n(A|D), जहां nक्लू नंबर उसके बाद Aया Dनीचे के लिए है।

तो ऊपर के उदाहरण में (छवि से दोनों, और उदाहरण टेम्पलेट, जो एक और समान हैं), आउटपुट होगा:

1A,1D,2D,3D,9A,10A,4D,5D,6D,7D,8D,11A,12A,13A,15A,14D,15D,16A,17A,18D,19D,20A,21D,23A,22D,24A,25D,27A,28A,26D,29A,30A,31A

सबसे छोटा कोड जीतता है ...

परिक्षण

आपको अपना सबमिशन कोड, एक बाइट काउंट, साथ ही प्रारूप .और #प्रारूप में प्रस्तुत चार परीक्षण मामलों में से एक , साथ ही इस इनपुट से उत्पन्न आउटपुट के साथ प्रदान करना होगा। चार परीक्षण मामले हैं, तीन नीचे और साथ ही ऊपर उदाहरण टेम्पलेट।

उदाहरण परीक्षण मामले:

टेस्ट केस 1

.....#
.#.#.#
...#..
.#.#.#
.....#
##.#..

आउटपुट: 1A,1D,2D,3D,4A,5A,6A,7A

टेस्ट केस 2

.....#..
.#.##..#
.#....#.
...##.#.
.####...
......##

आउटपुट: 1A,1D,2D,5A,4D,4A,3D,3A,7A,8A,6D,9A

टेस्ट केस 3

.........#
#.#.#.#.#.
....#...#.
#...#.#.#.
..###.#.#.
.#....#...
.#####...#
.....###..

आउटपुट: 1A,2D,3D,4D,5D,7A,8A,9A,10A,11A,11D,12A,13A,6D,14D,15A,16A,17A

टेस्ट केस 4

.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....

आउटपुट: 1A,1D,2D,3D,9A,10A,4D,4A,5D,6D,7D,8D,11A,12A,13A,15A,14D,15D,16A,17A,18D,19D,20A,21D,23A,22D,24A,25D,27A,28A,26D,29A,30A,31A

सौभाग्य!


बस यह सुनिश्चित करने के लिए: आपकी उदाहरण छवि में, कौन सा नंबर अनिवार्य रूप से भरा जाने वाला पांचवा सुराग है? (1H, 1V, 2V, 3V के बाद)
डॉ। belisarius

@ सबिसिसरियस इमेज चौथे टेस्ट केस से मेल खाती है। तो भरा जाने वाला पाँचवाँ सुराग 9 एक्रॉस होगा, या जैसा कि आप इसे डालेंगे, 9H :) चौथे सुराग के पूरा होने के बाद एकमात्र आसन्न सुराग 9 और 10 एक्रॉस हैं, क्रिस पहले सबसे कम सुराग भरने के लिए मजबूर हो जाएगा ...
WallyWest

क्या बाइट्स को केवल उस कोड के आधार पर माना जाता है जो सही आउटपुट उत्पन्न करता है। IOW, क्या आप इसमें शामिल हैं, C # नाम स्थान + वर्ग + मुख्य, और जैसा कि इसे संकलित करने के लिए या यह मानने के लिए उचित है कि यदि मैं इसे C #, या इसी तरह लिखता हूं, तो कोड की न्यूनतम राशि की आवश्यकता होगी?
चीफट्विपेंसिल्स

1
@ बॉबीडिजिटल खैर, यह कोड-गोल्फ है ... मुझे उम्मीद है कि अगर आपने इसे सी # में लिखने की योजना बनाई थी तो आप बहुत अधिक बाह्य उपयोग नहीं करने की कोशिश करेंगे ... आपको उन्हें गिनना होगा कि मुझे डर है .. ।
वॉलीवेस्ट

1
@WallyWest मुझे लगता है कि आपका तीसरा उदाहरण 17Aअंत में चूक रहा है । इसके बाद चौथा 4Aअधिकार 4D
हावर्ड

जवाबों:


5

GolfScript, 154 वर्ण

:^,,{.^=46<{;-1}*)}%[.^n?)/zip[0]*]{1,%{,1>},}%:H"AD"1/]zip{~`{1$0=H{{0=}/}%.&$?)\+[\]}+/}%(2/\{0=)[\~\]}$+[]{1${1=1$&},.!{;1$1<}*1<:F~~@|@F-\1$}do;;]','*

एसटीडीआईएन पर इनपुट देना होगा। उदाहरण निम्नलिखित परिणाम देते हैं ( ऑनलाइन चेक करें ):

1A,1D,2D,3D,4A,5A,6A,7A

1A,1D,2D,5A,4D,4A,3D,3A,7A,8A,6D,9A

1A,2D,3D,4D,5D,7A,8D,9A,10A,11A,11D,12A,13A,6D,14D,15A,16A,17A

1A,1D,2D,3D,9A,10A,4D,4A,5D,6D,7D,8D,11A,12A,13A,15A,14D,15D,16A,17A,18D,19D,20A,21D,23A,22D,24A,25D,27A,28A,26D,29A,30A,31A

+1 उल्लेखनीय रूप से रसीला। यह कैसे काम करता है?
डेविड एफसी

वाह, यह स्पष्ट करने के लिए धन्यवाद कि मुझे अपना समय बर्बाद नहीं करना चाहिए। स्पष्ट रूप से एक अधिक उपयुक्त भाषा के शीर्ष पर जाना होगा। votes++
19

@ बॉबीडिजिटल का मेरा मतलब कोई अनादर नहीं था। C # एक बहुत ही क्रियात्मक भाषा है ... यह शायद कोड गोल्फ के लिए सबसे अच्छा नहीं है। कोड-बॉलिंग या लोकप्रियता के लिए प्रतियोगिता यहां पर होती है ... लेकिन कोड गोल्फ मछली की एक नई केतली है।
वैलेस्ट

+1 यहां भी ... संभवत: अब तक देखी गई गोल्फस्क्रिप्ट प्रविष्टियों में से एक ... अच्छी तरह से किया गया।
1

1
@ बॉबीडिजिटल: कार्य स्वयं काफी रोचक है। जिस भाषा से आप परिचित हैं, उसमें उसे आज़माएँ। मुझे लगता है कि आपने पहेली का उतना ही आनंद लिया होगा जितना मैंने किया था - पहेली से निपटने के लिए सभी अलग-अलग तरीकों की जाँच करें। यह अपने आप में मजेदार है भले ही आप इस जवाब के रूप में एक चरित्र गिनती तक नहीं पहुंचते।
हावर्ड

3

गणितज्ञ 806 477

(समाधान चरणों के क्रम में एक गड़बड़ प्रतीत होता है। मैं इस पर गौर कर रहा हूं।)

golfed

फ़ंक्शन qक्रॉसवर्ड समाधानों का क्रम पाता है।

i = Dimensions; v = MemberQ; u = Position; y = ToString; k = Select;
q@t_ :=
 (g@p_ := Characters@StringSplit[p, "\n"];
  w = g@t;
  a[{r_, c_}, z_] := (c != i[z][[2]]) \[And] 
    v[u[z, "."], {r, c + 1}] \[And] ((c == 1) \[Or] 
      v[u[z, "#"], {r, c - 1}]);
  b@z_ := k[u[z, "."], a[#, z] &];
  d[{r_, c_}, z_] := (r != i[z][[2]]) \[And] 
    v[u[z, "."], {r + 1, c}] \[And] ((r == 1) \[Or] 
      v[u[z, "#"], {r - 1, c}]);
  e@z_ := k[u[z, "."], d[#, z] &];
  Cases[Flatten[{
       If[v[b[w], #[[1]]], y[#[[2]]] <> "A"],
       If[v[e[w], #[[1]]], y[#[[2]]] <> "D"]} & /@ (MapIndexed[List, 
        b[w] \[Union] e[w]] /. {{r_, c_}, {i_}} :> ({r, c} -> i))], 
   Except[Null]])

Ungolfed

q[t7_]:=
Module[{d,acrossSquareQ,acrossSquares,downSquareQ,downSquares,m,numberedCells},
(*w=g[t7];*)
g[p2_]:=Characters@StringSplit[p2,"\n"];
w=g[t7];
acrossSquareQ[{r_,c_},z_]:=(c!=Dimensions[z][[2]])\[And]MemberQ[Position[z,"."],{r,c+1}] \[And]((c==1)\[Or]MemberQ[Position[z,"#"],{r,c-1}]);
acrossSquares[z_]:=Select[Position[z,"."],acrossSquareQ[#,z]&];
downSquareQ[{r_,c_},z_]:=(r!=Dimensions[z][[2]])\[And]MemberQ[Position[z,"."],{r+1,c}] \[And]((r==1)\[Or]MemberQ[Position[z,"#"],{r-1,c}]);
downSquares[z_]:=Select[Position[z,"."],downSquareQ[#,z]&];
numberedCells[z_]:=acrossSquares[z]\[Union]downSquares[z];
m=MapIndexed[List,numberedCells[w]]/.{{r_?IntegerQ,c_?IntegerQ},{i_?IntegerQ}}:> ({r,c}-> i);
Cases[Flatten[{
If[MemberQ[acrossSquares[w],#[[1]]],ToString[#[[2]]]<>"A"],
If[MemberQ[downSquares[w],#[[1]]],ToString[#[[2]]]<>"D"]}&/@m],Except[Null]]]

boardपहेली पहेली प्रदर्शित करता है। वर्ण गणना में कोड शामिल नहीं है। qयहाँ से कई उप कार्य उधार लिए गए हैं।

board[p_]:=
Module[{q,g,w,downSquareQ,downSquares,acrossSquareQ,acrossSquares,numberedCells,m},
downSquareQ[{r_,c_},z_]:=(r!=Dimensions[z][[2]])\[And]MemberQ[Position[z,"."],{r+1,c}] \[And]((r==1)\[Or]MemberQ[Position[z,"#"],{r-1,c}]);
downSquares[z_]:=Select[Position[z,"."],downSquareQ[#,z]&];
acrossSquareQ[{r_,c_},z_]:=(c!=Dimensions[z][[2]])\[And]MemberQ[Position[z,"."],{r,c+1}] \[And]((c==1)\[Or]MemberQ[Position[z,"#"],{r,c-1}]);
acrossSquares[z_]:=Select[Position[z,"."],acrossSquareQ[#,z]&];
numberedCells[z_]:=acrossSquares[z]\[Union]downSquares[z];
g[p2_]:=Characters@StringSplit[p2,"\n"];
w=g[p];
m=MapIndexed[List,numberedCells[w]]/.{{r_?IntegerQ,c_?IntegerQ},{i_?IntegerQ}}:> ({r,c}-> i);
Grid[ReplacePart[w,m],Dividers->All,Background->{None,None,(#-> Black)&/@Position[w,"#"]}]]

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

1

t1=".....#
.#.#.#
...#..
.#.#.#
.....#
##.#..";
board[t1]
q[t1]

t1

{"1 ए", "1 डी", "2 डी", "3 डी", "4 ए", "5 ए", "6 ए", "7 ए"}


2

t2=".....#..
.#.##..#
.#....#.
...##.#.
.####...
......##";

board[t2]
q[t2]

t2

{"1 ए", "1 डी", "2 डी", "3 ए", "3 डी", "4 ए", "4 डी", "5 ए", "6 डी", "7 ए", "8 ए", "9 ए"}


3

t3=".........#
#.#.#.#.#.
....#...#.
#...#.#.#.
..###.#.#.
.#....#...
.#####...#
.....###..";

board[t3]

q[t3]

t3

{"1 ए", "2 डी", "3 डी", "4 डी", "5 डी", "6 डी", "7 ए", "8 डी", "9 ए", "10 ए", "11 ए", "11 डी", " 12A "," 13A "," 14D "," 15A "," 16A "," 17A "}


4

t4=".....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....";

board[t4]


q[t4]

टी -4

{"1 ए", "1 डी", "2 डी", "3 डी", "4 ए", "4 डी", "5 डी", "6 डी", "7 डी", "8 डी", "9 ए", "10 ए", " 11A "," 12A "," 13A "," 14D "," 15A "," 15D "," 16A "," 17A "," 18D "," 19D "," 20A "," 21D, "22D" , "23A", "24A", "25D", "26D", "27A", "28A", "29A", "30A", "31A"}


मुझे लगता है कि आपके पास अपने कोड के साथ एक मुद्दा है। उदाहरण के लिए 2 उदाहरण के 3Aबाद सही नहीं होना चाहिए 2Dक्योंकि अभी तक कोई सुराग नहीं है। इसके अलावा अन्य समाधान इस प्रभाव को दिखाते हैं।
हावर्ड

हावर्ड, मैं आपकी बात नहीं समझ रहा हूं। "4. यदि आस-पास के कोई सुराग नहीं हैं, तो वह अगले उपलब्ध सुराग पर जाएगा जो कि संख्या (अगले या नीचे) के बगल में है", ऐसा प्रतीत होता है कि 3 ए 2 डी के बाद हो सकता है।
डेविड एफसी

लेकिन उदाहरण 5Aके लिए एक सुराग है और इसलिए पर एहसान किया जाना चाहिए 3A
हावर्ड

आपने ToStringदो बार शॉर्टहैंड को परिभाषित किया है
डॉ। बेलिसियस

हॉवर्ड, अब मैं आपकी बात समझ गया हूं। धन्यवाद। बाद में सही करेंगे।
डेविड एफसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.