गणितज्ञ, 180 बाइट्स
(f=Flatten@#;p=Partition)[If[Tr[1^VertexComponent[r~Graph~Cases[##&@@p[#,2,1]&/@Join[g=p[r,5],g],{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ":>a<->b],#]]<3,f[[#]],"x"]&/@(r=Range@25),5]&
स्पष्टीकरण:
(f=Flatten@#;p=Partition)[
If[
Tr[1^VertexComponent[
r~Graph~Cases[
##&@@p[#,2,1]&/@Join[g=p[r,5],g],
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ":>a<->b
],
#
]]<3,
f[[#]],
"x"
]&/@(r=Range@25),
5
]&
शुद्ध कार्य जो एक 5x5सरणी को स्वीकार करता है । 3-बाइट निजी-उपयोग चरित्र है U+F3C7जो पोस्टफ़िक्स ट्रांसपोज़ ऑपरेटर का प्रतिनिधित्व करता है \[Transpose]।
(f=Flatten@#;p=Partition): इनपुट सूची को समतल करता है और इसमें संग्रहीत करता है f। सेट करता है p = Partitionऔर उसे लौटाता है।
g=p[r,5]: सरणी {{1,2,3,4,5}, ..., {21,22,23,24,25}}(यह इसलिए है क्योंकि rसेट हो जाता है Range@25)।
Join[g=p[r,5],g]: पंक्तियों और स्तंभों की सूची g।
p[#,2,1]&: शुद्ध कार्य जो ओवरलैप के साथ #लंबाई के उप सूची में विभाजन को विभाजित करता 2है 1; यानी, आसन्न जोड़े की सूची #।
##&@@p[#,2,1]&: ऊपर के रूप में एक ही इसे छोड़कर एक Sequence।
##&@@p[#,2,1]&/@Join[g=p[r,5],g]: gआसन्न प्रविष्टियों में से सभी की एक सूची प्राप्त करने के लिए पंक्तियों और स्तंभों के पिछले फ़ंक्शन को मैप करें g। मेरा पेट कहता है कि ऐसा करने का एक छोटा तरीका है।
r~Graph~Cases[...]: ग्राफ़ जिनके कोने पूर्णांक हैं 1, ..., 25और जिनके किनारे आसन्न प्रविष्टियों के बीच के किनारे हैं gजिनमें इनपुट सरणी में समान अनुवर्ती प्रविष्टियाँ हैं (अन्य के अलावा " ")
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ": पैटर्न जो {a,b}इस तरह से मेल खाता है f[[a]] == f[[b]](इनपुट सरणी में समान मूल्य) और जो इसके बराबर नहीं हैं " "। बाइट A = f[[a]]बचाने के लिए सेट करें 1।
...:>a<->b: हर मैच को एक अप्रत्यक्ष रूप से किनारे से b में बदलें।
VertexComponent: पहले तर्क (एक ग्राफ) में दूसरे तर्क (एक शीर्ष) के जुड़े घटक देता है।
Tr[1^VertexComponent[...]]: जुड़े घटक का आकार। 1से बाइट बचाता है Length@VertexComponent[...]।
If[Tr[...]<3,f[[#]],"x"]&: शुद्ध कार्य जो एक प्रविष्टि लेता #है g। यदि इसके जुड़े घटक का आकार इससे कम है 3, तो इसे इनपुट में संबंधित प्रविष्टि के साथ बदलें। अन्यथा, इसके साथ बदलें "x"।
(f=Flatten@#;p=Partition)[...,5]: और अंत में परिणाम को एक 5x5सरणी के रूप में बदल दें।