-23 byte nhờ @Doorknob.
+42 byte kế toán để quay lại.
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]
Hãy thử trực tuyến!
Tôi viết lại hầu hết những điều này để giải thích cho việc quay lại, tôi nghĩ có thể có một cách dễ dàng hơn để xác định biểu đồ g
, Mathicala có GraphData[{"bishop",{8,8}}]
biểu đồ cho tất cả các di chuyển mà một giám mục có thể thực hiện trên bàn cờ ( Biểu đồ Giám mục ), nhưng biểu đồ này bao gồm các kết nối hơn nữa hơn hàng xóm chéo gần nhất. Nếu ai biết một cách ngắn hơn để làm điều đó cho tôi biết. Tín dụng cho việc xây dựng đồ thị đi đến câu trả lời MathicalaSE này .
Trả về True
mật khẩu mạnh, False
cho mật khẩu yếu / không đúng định dạng. Lưu ý rằng đối với hầu hết các mật khẩu không đúng định dạng, nó sẽ tạo ra một loạt các thông báo lỗi và sau đó trả về False
. Nếu điều này không phù hợp với các quy tắc thì chúng có thể bị triệt tiêu bằng cách thay đổi f[n_]:=...
thành f[n_]:=Quiet@...
chi phí 6 byte.
Ung dung:
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]
Phá vỡ:
p[m_]:=StringPartition[#,m]&
Đưa ra một đối số chuỗi và chia nó thành một danh sách các chuỗi có độ dài m
.
Check[...,False]
Trả về False
nếu có bất kỳ thông báo lỗi nào được tạo ra, đó là cách chúng tôi bắt được các chuỗi không định dạng (nghĩa là chúng được định dạng tốt, chắc chắn sẽ tạo ra lỗi xuống dòng).
(8*#2 + #1 - 8) & @@@ ({LetterNumber@#, FromDigits@#2} & @@@ (p@1 /@
p[UpTo@2]@n));
Lấy chuỗi các vị trí cầm đồ và tách nó sao cho "a2h5b"
trở thành {{"a","2"},{"h","5"},{"b"}}
, sau đó LetterNumber
sẽ chuyển đổi chữ cái thành một số ( a -> 1
, v.v.) và FromDigits
chuyển đổi số thành số nguyên. Nếu chuỗi không được hình thành tốt, bước này sẽ tạo ra một lỗi sẽ bị bắt bởi Check
, quay trở lại False
. Hai số này sau đó được chuyển đổi thành một số nguyên tương ứng với một hình vuông trên bảng.
r = GridGraph[{8, 8}];
g = Graph[
Sort /@ UndirectedEdge @@@
Position[Outer[EuclideanDistance@## &, #, #, 1],
N@Sqrt@2] &@GraphEmbedding@r // Union]~VertexDelete~w;
Xây dựng biểu đồ của tất cả các cạnh đường chéo lân cận gần nhất với các vị trí cầm đồ đã bị xóa.
s = Complement[{1,2,3,4,5,6,7,8},w];
e = Complement[{57,58,59,60,61,62,63,64},w];
Đây là danh sách các đỉnh bắt đầu và kết thúc không có người ở
m=0
Do[m += Length@FindPath[g, i, j], {i, s}, {j, e}];
If[m == 0,True,False]
Vòng lặp trên các đỉnh bắt đầu và kết thúc, cho mỗi cặp FindPath
sẽ là một danh sách các đường dẫn giữa chúng. Nếu không có đường dẫn giữa chúng, nó sẽ là một danh sách trống, vì vậy Length@
trả về 0
. Nếu không có đường dẫn nào cả, thì m
sẽ bằng không, và chúng ta quay lại True
, nếu không thì quay lại False
.