https://www.zhihu.com/question/307729091
fs = Evaluate[DeleteDuplicatesBy[Groupings[Permutations[{#1, #2, #3, #4}, {4}], {Plus -> {2, Orderless}, Subtract -> 2, Times -> {2, Orderless}, Divide -> 2}, Inactive], Factor@*Activate]]&;
sollutions = Select[Tally[all = Subsets[Flatten@Table[ConstantArray[i, 4], {i, 13}], {4}]], AnyTrue[Quiet[Activate[fs @@ First@#]], # === 24&]&];
TemplateApply["排列的合法组合: ``", {Length@fs[[1]]}]
TemplateApply["所有排列的数量: ``", {Length@all}]
TemplateApply["有解的排列数量: ``", {Tr@sollutions[[All, -1]]}]
没错, 就这么点代码, 元编程就是这么强大
排列的合法组合: 1170
所有排列的数量: 270725
有解的排列数量: 217817
p=1- 217817/270725 = 19.54%
作者:酱紫君
链接:https://www.zhihu.com/question/307729091/answer/1119004801
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这段代码什么原理呢算二十四点可以看成是四个数字外加三个运算符组合确切的说是任意两个数字和一个符号加括号, 从数学上讲就是求卡特兰数treeR[1] = n;
treeR[n_] := treeR[n] = Table[o[treeR[a], treeR[n - a]], {a, 1, n - 1}]
treeC[n_] := Flatten[treeR[n] //. {o[a_List, b_] :> (o[#, b]& /@ a), o[a_, b_List] :> (o[a, #]& /@ b)}]
TreeForm[#, AspectRatio -> 0.618]& /@ treeC[4]
如图所示4个数字 n 外加 3 个符号 o 一共是 5 种二叉生成树牌的总数是13*4任选4张, 然后全排列, 符号的总数是四选n-1个槽轮换所以总的复杂度是 因此对每一对数字需要计算7680个模式, 一共是 1820 种组合, 总的计算量是 1397 7600 次这有点多不过 Mathematica 你可是数学软件, 你难道不知道加法交换律和乘法交换律吗代码的第一行就是通过元编程生成了这 7680 个函数, 然后因为加法和乘法具有交换律, 所以 Mathematica 可以约化这两个算符子树交换的情形, 于是本质上只剩下了 1170 个函数接着对每个排列轮流应用这 1170 个函数, 如果有为24的解就输出, 否则删除最后取补集, 一共得到 458 个无法通过四则运算计算出 24 点的情况:1->{1,1,1,1}
2->{1,1,1,2}
3->{1,1,1,3}
4->{1,1,1,4}
5->{1,1,1,5}
6->{1,1,1,6}
7->{1,1,1,7}
8->{1,1,1,9}
9->{1,1,1,10}
10->{1,1,2,2}
11->{1,1,2,3}
12->{1,1,2,4}
13->{1,1,2,5}
14->{1,1,3,3}
15->{1,1,4,11}
16->{1,1,4,13}
17->{1,1,5,9}
18->{1,1,5,10}
19->{1,1,5,11}
20->{1,1,5,12}
21->{1,1,5,13}
22->{1,1,6,7}
23->{1,1,6,10}
24->{1,1,6,11}
25->{1,1,6,13}
26->{1,1,7,7}
27->{1,1,7,8}
28->{1,1,7,9}
29->{1,1,7,11}
30->{1,1,7,12}
31->{1,1,7,13}
32->{1,1,8,9}
33->{1,1,8,10}
34->{1,1,8,11}
35->{1,1,8,12}
36->{1,1,8,13}
37->{1,1,9,9}
38->{1,1,9,10}
39->{1,1,9,11}
40->{1,1,9,12}
41->{1,1,10,10}
42->{1,1,10,11}
43->{1,2,2,2}
44->{1,2,2,3}
45->{1,2,5,11}
46->{1,2,7,13}
47->{1,2,8,11}
48->{1,2,8,12}
49->{1,2,9,9}
50->{1,2,9,10}
51->{1,2,10,10}
52->{1,3,3,13}
53->{1,3,5,5}
54->{1,3,7,11}
55->{1,3,10,13}
56->{1,3,11,13}
57->{1,4,4,13}
58->{1,4,7,10}
59->{1,4,8,10}
60->{1,4,9,9}
61->{1,4,10,13}
62->{1,4,11,11}
63->{1,4,11,12}
64->{1,4,11,13}
65->{1,4,12,13}
66->{1,4,13,13}
67->{1,5,5,7}
68->{1,5,5,8}
69->{1,5,7,7}
70->{1,5,11,13}
71->{1,5,12,13}
72->{1,5,13,13}
73->{1,6,6,7}
74->{1,6,7,7}
75->{1,6,7,8}
76->{1,6,7,13}
77->{1,6,9,11}
78->{1,6,10,10}
79->{1,6,10,11}
80->{1,6,11,11}
81->{1,6,13,13}
82->{1,7,7,7}
83->{1,7,7,8}
84->{1,7,7,13}
85->{1,7,8,13}
86->{1,7,10,10}
87->{1,7,10,11}
88->{1,7,11,11}
89->{1,7,11,12}
90->{1,7,11,13}
91->{1,8,8,13}
92->{1,8,9,9}
93->{1,8,9,10}
94->{1,8,10,10}
95->{1,8,11,11}
96->{1,8,12,13}
97->{1,8,13,13}
98->{1,9,9,9}
99->{1,9,9,10}
100->{1,9,9,11}
101->{1,9,9,13}
102->{1,9,10,10}
103->{1,9,10,11}
104->{1,9,12,13}
105->{1,9,13,13}
106->{1,10,10,10}
107->{1,10,10,11}
108->{1,10,10,13}
109->{1,10,11,11}
110->{1,10,11,13}
111->{1,10,13,13}
112->{1,11,11,11}
113->{1,13,13,13}
114->{2,2,2,2}
115->{2,2,2,6}
116->{2,2,5,13}
117->{2,2,7,9}
118->{2,2,7,11}
119->{2,2,8,11}
120->{2,2,8,13}
121->{2,2,9,9}
122->{2,2,9,13}
123->{2,2,10,12}
124->{2,3,3,4}
125->{2,3,9,11}
126->{2,3,10,11}
127->{2,4,7,13}
128->{2,4,9,11}
129->{2,4,11,13}
130->{2,4,12,13}
131->{2,5,5,5}
132->{2,5,5,6}
133->{2,5,7,12}
134->{2,5,9,9}
135->{2,5,9,13}
136->{2,5,11,11}
137->{2,5,11,13}
138->{2,5,13,13}
139->{2,6,7,7}
140->{2,6,9,13}
141->{2,6,11,11}
142->{2,6,13,13}
143->{2,7,7,7}
144->{2,7,7,9}
145->{2,7,8,10}
146->{2,7,9,9}
147->{2,7,9,12}
148->{2,7,10,13}
149->{2,7,11,11}
150->{2,7,11,13}
151->{2,7,13,13}
152->{2,8,11,13}
153->{2,9,9,9}
154->{2,9,9,10}
155->{2,9,11,12}
156->{2,9,12,12}
157->{2,10,10,10}
158->{2,10,12,12}
159->{2,10,13,13}
160->{3,3,3,13}
161->{3,3,4,10}
162->{3,3,5,8}
163->{3,3,5,11}
164->{3,3,7,10}
165->{3,3,8,11}
166->{3,3,10,10}
167->{3,3,10,11}
168->{3,3,10,12}
169->{3,3,11,11}
170->{3,3,13,13}
171->{3,4,6,7}
172->{3,4,7,13}
173->{3,4,8,8}
174->{3,4,9,10}
175->{3,4,10,11}
176->{3,4,11,11}
177->{3,4,13,13}
178->{3,5,5,5}
179->{3,5,5,10}
180->{3,5,5,13}
181->{3,5,7,7}
182->{3,5,8,10}
183->{3,5,9,11}
184->{3,5,11,13}
185->{3,6,7,11}
186->{3,6,8,11}
187->{3,6,10,13}
188->{3,7,7,11}
189->{3,7,8,10}
190->{3,7,10,12}
191->{3,7,11,13}
192->{3,8,8,13}
193->{3,8,10,13}
194->{3,8,11,13}
195->{3,10,10,10}
196->{3,10,10,11}
197->{3,10,10,13}
198->{3,10,11,11}
199->{3,10,12,12}
200->{3,10,12,13}
201->{3,10,13,13}
202->{3,11,11,11}
203->{3,11,11,13}
204->{3,11,12,13}
205->{3,11,13,13}
206->{3,13,13,13}
207->{4,4,4,13}
208->{4,4,5,9}
209->{4,4,6,6}
210->{4,4,6,7}
211->{4,4,7,11}
212->{4,4,9,9}
213->{4,4,9,10}
214->{4,4,9,13}
215->{4,4,10,11}
216->{4,4,11,11}
217->{4,4,13,13}
218->{4,5,5,11}
219->{4,5,5,12}
220->{4,5,5,13}
221->{4,5,9,11}
222->{4,6,6,11}
223->{4,6,6,13}
224->{4,6,7,11}
225->{4,6,7,13}
226->{4,6,8,11}
227->{4,6,9,11}
228->{4,6,10,13}
229->{4,6,11,13}
230->{4,7,7,9}
231->{4,7,7,10}
232->{4,7,7,12}
233->{4,7,7,13}
234->{4,7,10,13}
235->{4,8,10,13}
236->{4,9,9,9}
237->{4,9,9,11}
238->{4,9,9,13}
239->{4,9,10,10}
240->{4,9,11,13}
241->{4,9,12,13}
242->{4,9,13,13}
243->{4,10,10,10}
244->{4,10,10,13}
245->{4,10,11,11}
246->{4,10,13,13}
247->{4,11,11,11}
248->{4,11,11,12}
249->{4,11,11,13}
250->{4,11,12,12}
251->{4,11,13,13}
252->{4,12,12,13}
253->{4,12,13,13}
254->{4,13,13,13}
255->{5,5,5,7}
256->{5,5,5,8}
257->{5,5,5,10}
258->{5,5,5,11}
259->{5,5,5,13}
260->{5,5,6,9}
261->{5,5,6,10}
262->{5,5,6,12}
263->{5,5,6,13}
264->{5,5,7,9}
265->{5,5,7,12}
266->{5,5,7,13}
267->{5,5,9,12}
268->{5,5,9,13}
269->{5,5,10,12}
270->{5,6,6,11}
271->{5,6,6,13}
272->{5,6,7,10}
273->{5,6,7,11}
274->{5,6,8,11}
275->{5,7,7,7}
276->{5,7,7,8}
277->{5,7,7,12}
278->{5,7,7,13}
279->{5,7,8,11}
280->{5,7,8,12}
281->{5,7,8,13}
282->{5,7,9,9}
283->{5,7,11,12}
284->{5,7,12,13}
285->{5,8,8,11}
286->{5,8,8,12}
287->{5,8,9,9}
288->{5,8,9,10}
289->{5,8,10,10}
290->{5,8,10,13}
291->{5,8,11,11}
292->{5,8,12,13}
293->{5,8,13,13}
294->{5,9,9,9}
295->{5,9,9,10}
296->{5,9,9,13}
297->{5,9,10,12}
298->{5,9,11,11}
299->{5,9,11,12}
300->{5,9,13,13}
301->{5,10,10,10}
302->{5,10,11,12}
303->{5,10,11,13}
304->{5,10,12,12}
305->{5,11,11,11}
306->{5,11,11,12}
307->{5,11,11,13}
308->{5,11,12,13}
309->{5,11,13,13}
310->{5,12,12,12}
311->{5,12,12,13}
312->{5,12,13,13}
313->{5,13,13,13}
314->{6,6,6,7}
315->{6,6,6,13}
316->{6,6,7,7}
317->{6,6,7,8}
318->{6,6,7,13}
319->{6,6,9,9}
320->{6,6,10,10}
321->{6,6,10,11}
322->{6,6,11,11}
323->{6,6,13,13}
324->{6,7,7,7}
325->{6,7,7,8}
326->{6,7,7,9}
327->{6,7,7,12}
328->{6,7,7,13}
329->{6,7,8,8}
330->{6,7,8,13}
331->{6,7,9,10}
332->{6,7,9,11}
333->{6,7,9,13}
334->{6,7,10,11}
335->{6,7,13,13}
336->{6,8,8,13}
337->{6,8,10,10}
338->{6,8,12,13}
339->{6,9,9,9}
340->{6,9,9,13}
341->{6,9,10,10}
342->{6,9,10,13}
343->{6,9,11,11}
344->{6,9,13,13}
345->{6,10,10,11}
346->{6,10,10,12}
347->{6,10,11,11}
348->{6,10,11,13}
349->{6,10,13,13}
350->{6,11,11,11}
351->{6,11,11,13}
352->{6,11,13,13}
353->{6,13,13,13}
354->{7,7,7,7}
355->{7,7,7,8}
356->{7,7,7,9}
357->{7,7,7,10}
358->{7,7,7,11}
359->{7,7,7,13}
360->{7,7,8,8}
361->{7,7,8,9}
362->{7,7,8,10}
363->{7,7,8,12}
364->{7,7,8,13}
365->{7,7,9,9}
366->{7,7,9,11}
367->{7,7,9,12}
368->{7,7,9,13}
369->{7,7,10,10}
370->{7,7,10,11}
371->{7,7,10,12}
372->{7,7,11,11}
373->{7,7,13,13}
374->{7,8,8,8}
375->{7,8,9,9}
376->{7,8,9,11}
377->{7,8,10,12}
378->{7,8,11,11}
379->{7,8,13,13}
380->{7,9,9,9}
381->{7,9,9,10}
382->{7,9,9,11}
383->{7,9,9,12}
384->{7,9,10,10}
385->{7,9,10,13}
386->{7,9,11,13}
387->{7,9,12,13}
388->{7,10,10,10}
389->{7,10,10,13}
390->{7,10,11,11}
391->{7,10,11,12}
392->{7,10,13,13}
393->{7,11,11,11}
394->{7,11,11,12}
395->{7,11,11,13}
396->{7,11,12,12}
397->{7,11,12,13}
398->{7,11,13,13}
399->{7,12,12,12}
400->{7,12,13,13}
401->{7,13,13,13}
402->{8,8,8,8}
403->{8,8,8,9}
404->{8,8,9,9}
405->{8,8,9,10}
406->{8,8,10,10}
407->{8,8,10,11}
408->{8,8,11,11}
409->{8,8,13,13}
410->{8,9,9,9}
411->{8,9,9,10}
412->{8,9,9,11}
413->{8,9,9,13}
414->{8,9,10,10}
415->{8,9,10,11}
416->{8,9,13,13}
417->{8,10,10,10}
418->{8,10,10,11}
419->{8,10,10,13}
420->{8,10,11,12}
421->{8,10,11,13}
422->{8,11,11,11}
423->{8,11,11,12}
424->{8,11,11,13}
425->{8,11,12,13}
426->{8,11,13,13}
427->{8,12,12,12}
428->{8,12,12,13}
429->{8,12,13,13}
430->{8,13,13,13}
431->{9,9,9,9}
432->{9,9,9,10}
433->{9,9,9,11}
434->{9,9,9,13}
435->{9,9,10,10}
436->{9,9,10,11}
437->{9,9,10,12}
438->{9,9,11,11}
439->{9,9,13,13}
440->{9,10,10,10}
441->{9,10,10,11}
442->{9,10,10,12}
443->{9,10,11,11}
444->{9,10,13,13}
445->{9,11,11,12}
446->{9,11,11,13}
447->{9,12,12,13}
448->{9,12,13,13}
449->{9,13,13,13}
450->{10,10,10,10}
451->{10,10,10,11}
452->{10,10,11,11}
453->{10,10,13,13}
454->{10,11,11,11}
455->{10,11,13,13}
456->{11,11,11,11}
457->{11,11,13,13}
458->{13,13,13,13}