Skip to content

Instantly share code, notes, and snippets.

@jackhftang
Last active March 18, 2018 15:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jackhftang/8a6c2ea5a9091529d1f16fe727db0e07 to your computer and use it in GitHub Desktop.
Save jackhftang/8a6c2ea5a9091529d1f16fe727db0e07 to your computer and use it in GitHub Desktop.
2018 年刑偵科推理試題 https://photos.app.goo.gl/suY5DO8ozd8HtvGj1
lis = {1, 2, 3, 4};
all = Flatten[
Outer[ List,
lis, lis, lis, lis, lis,
lis, lis, lis, lis, lis
], 9
];
q2[l_] :=
l[[2]] == 1 && l[[5]] == 3 ||
l[[2]] == 2 && l[[5]] == 4 ||
l[[2]] == 3 && l[[5]] == 1 ||
l[[2]] == 4 && l[[5]] == 2;
q3[l_] :=
l[[3]] == 1 && (l[[6]] == l[[2]] == l[[4]] != l[[3]]) ||
l[[3]] == 2 && (l[[3]] == l[[4]] == l[[2]] != l[[6]] ) ||
l[[3]] == 3 && (l[[3]] == l[[6]] == l[[4]] != l[[2]] ) ||
l[[3]] == 4 && (l[[3]] == l[[2]] == l[[6]] != l[[4]]);
q4[l_] :=
l[[4]] == 1 && l[[1]] == l[[5]] ||
l[[4]] == 2 && l[[2]] == l[[7]] ||
l[[4]] == 3 && l[[1]] == l[[9]] ||
l[[4]] == 4 && l[[6]] == l[[10]];
q5[l_] :=
l[[5]] == 1 == l[[8]] ||
l[[5]] == 2 == l[[4]] ||
l[[5]] == 3 == l[[9]] ||
l[[5]] == 4 == l[[7]];
q6[l_] :=
l[[6]] == 1 && (l[[8]] == l[[2]] == l[[4]]) ||
l[[6]] == 2 && (l[[8]] == l[[1]] == l[[6]]) ||
l[[6]] == 3 && (l[[8]] == l[[3]] == l[[10]]) ||
l[[6]] == 4 && (l[[8]] == l[[5]] == l[[9]]);
q7[l_] := Module[{cnt, mi},
cnt = BinCounts[l, {1, 5, 1}];
mi = MinimalBy[Range[4], cnt[[#]] &] // First;
l[[7]] == 1 && mi == 3 ||
l[[7]] == 2 && mi == 2 ||
l[[7]] == 3 && mi == 1 ||
l[[7]] == 4 && mi == 4
];
q8[l_] :=
l[[8]] == 1 && Abs[l[[7]] - l[[1]]] > 1 ||
l[[8]] == 2 && Abs[l[[5]] - l[[1]]] > 1 ||
l[[8]] == 3 && Abs[l[[2]] - l[[1]]] > 1 ||
l[[8]] == 4 && Abs[l[[10]] - l[[1]]] > 1;
q9[l_] :=
l[[9]] == 1 && Xor[l[[1]] == l[[6]], l[[6]] == l[[5]]] ||
l[[9]] == 2 && Xor[l[[1]] == l[[6]], l[[10]] == l[[5]]] ||
l[[9]] == 3 && Xor[l[[1]] == l[[6]], l[[2]] == l[[5]]] ||
l[[9]] == 4 && Xor[l[[1]] == l[[6]], l[[9]] == l[[5]]];
q10[l_] := Module[{cnt, mx, mi},
cnt = BinCounts[ l, {1, 5, 1}];
mx = Max[cnt];
mi = Min[cnt];
l[[10]] == 1 && mx - mi == 3 ||
l[[10]] == 2 && mx - mi == 2 ||
l[[10]] == 3 && mx - mi == 4 ||
l[[10]] == 4 && mx - mi == 1
]
sat[lis_] := Module[{},
q2[lis] &&
q5[lis] &&
q3[lis] &&
q4[lis] &&
q6[lis] &&
q7[lis] &&
q8[lis] &&
q9[lis] &&
q10[lis]
];
ans = Select[all, sat]
(* {{2, 3, 1, 3, 1, 3, 4, 1, 2, 1}} *)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment