-23 बाइट्स @Doorknob को धन्यवाद।
+42 बाइट्स बैकट्रैकिंग के लिए लेखांकन।
p[m_]:=StringPartition[#,m]&;l=Range@8;f[n_]:=Check[w=(8#2+#1-8)&@@@({LetterNumber@#,FromDigits@#2}&@@@(p@1/@p[UpTo@2]@n));g=Graph[Sort/@UndirectedEdge@@@Position[Outer[EuclideanDistance@##&,#,#,1],N@Sqrt@2]&@GraphEmbedding@GridGraph@{8,8}//Union]~VertexDelete~w;c:=#~Complement~w&;m=0;Do[m+=Length@FindPath[g,i,j],{i,c@l},{j,c[l+56]}];m==0,0>1]
इसे ऑनलाइन आज़माएं!
मैंने इसमें से अधिकांश को पीछे की ओर जाने के लिए फिर से लिखा है, मुझे लगता है कि ग्राफ को परिभाषित करने का एक आसान तरीका हो सकता है g
, गणितज्ञ के पास GraphData[{"bishop",{8,8}}]
जो सभी चालों का ग्राफ है जो एक बिशप एक शतरंजबोर्ड ( बिशप ग्राफ ) पर बना सकता है , लेकिन इस ग्राफ में कनेक्शन शामिल हैं निकटतम विकर्ण पड़ोसी की तुलना में। अगर किसी को यह करने का एक छोटा तरीका पता है तो मुझे बताएं। ग्राफ निर्माण का श्रेय इस गणितज्ञ उत्तर को जाता है ।
True
मजबूत पासवर्ड के लिए रिटर्न , False
कमजोर / बीमार पासवर्ड के लिए। ध्यान दें कि अधिकांश बीमार पासवर्डों के लिए यह त्रुटि संदेशों का एक समूह उत्पन्न करेगा और फिर वापस आ जाएगा False
। यदि यह नियमों के साथ लाइन में नहीं है तो वे बदलते द्वारा दबा दिया जा सकता है f[n_]:=...
के लिए f[n_]:=Quiet@...
6 बाइट्स की लागत।
Ungolfed:
p[m_] := StringPartition[#, m] &;
f[n_] :=
Check[
w = (8 #2 + #1 -
8) & @@@ ({LetterNumber@#, FromDigits@#2} & @@@ (p@1 /@
p[UpTo@2]@n));
r = GridGraph[{8, 8}];
g = Graph[Sort /@ UndirectedEdge @@@
Position[Outer[EuclideanDistance@## &, #, #, 1],N@Sqrt@2] &@
GraphEmbedding@r // Union]~VertexDelete~w;
s = Complement[{1,2,3,4,5,6,7,8},w];
e = Complement[{57,58,59,60,61,62,63,64},w];
m = 0;
Do[m += Length@FindPath[g, i, j], {i, s}, {j, e}];
If[m == 0,True,False]
, False]
टूट - फूट:
p[m_]:=StringPartition[#,m]&
एक स्ट्रिंग तर्क लेता है और इसे प्रत्येक लंबाई के तार की सूची में विभाजित करता है m
।
Check[...,False]
False
यदि कोई त्रुटि संदेश उत्पन्न होता है, तो लौटाता है , जिससे हम अ-निर्मित तारों को पकड़ते हैं (यानी मान लें कि वे अच्छी तरह से निर्मित हैं, अनिवार्य रूप से लाइन के नीचे एक त्रुटि पैदा कर रहे हैं)।
(8*#2 + #1 - 8) & @@@ ({LetterNumber@#, FromDigits@#2} & @@@ (p@1 /@
p[UpTo@2]@n));
प्यादा पदों की स्ट्रिंग लेता है और इसे इस तरह विभाजित करता है कि "a2h5b"
बन जाता है {{"a","2"},{"h","5"},{"b"}}
, फिर LetterNumber
पत्र को एक संख्या में (और a -> 1
,) में FromDigits
बदल देगा और अंक को पूर्णांक में बदल देगा। यदि स्ट्रिंग अच्छी तरह से नहीं बनाई गई है, तो यह चरण एक त्रुटि पैदा करेगा जो कि Check
वापस पकड़ा जाएगा False
। इन दो नंबरों को तब बोर्ड पर एक वर्ग के अनुरूप एक पूर्णांक में बदल दिया जाता है।
r = GridGraph[{8, 8}];
g = Graph[
Sort /@ UndirectedEdge @@@
Position[Outer[EuclideanDistance@## &, #, #, 1],
N@Sqrt@2] &@GraphEmbedding@r // Union]~VertexDelete~w;
हटाए गए मोहरे पदों के साथ सभी निकटतम-पड़ोसी विकर्ण किनारों के ग्राफ का निर्माण करता है।
s = Complement[{1,2,3,4,5,6,7,8},w];
e = Complement[{57,58,59,60,61,62,63,64},w];
ये क्रमशः अव्यवस्थित शुरुआत और समाप्ति की सूची हैं
m=0
Do[m += Length@FindPath[g, i, j], {i, s}, {j, e}];
If[m == 0,True,False]
प्रत्येक जोड़ी के लिए शुरुआती और अंत की छोरों पर छोरों, FindPath
उनके बीच के रास्तों की एक सूची होगी। यदि उनके बीच कोई रास्ता नहीं है, तो यह एक खाली सूची होगी, इसलिए Length@
रिटर्न 0
। यदि रास्ते बिल्कुल नहीं हैं, तो m
शून्य होगा, और हम लौटते हैं True
, अन्यथा वापस लौटते हैं False
।