गणितज्ञ, 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
सरणी के रूप में बदल दें।