-
Notifications
You must be signed in to change notification settings - Fork 1
/
p39.qlb
62 lines (54 loc) · 2.34 KB
/
p39.qlb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
"Create list of perimeters and set most frequent (i.e. best) value to zero with count of zero"
(حدد تواجدات (عدم))
(حدد أفضل-عدد ٠)
(حدد أفضل ٠)
"Count occurrences in list of perimeters"
(حدد احصل-على-العد (لامدا (رقم)
(حدد عد ٠)
(طبق (لامدا (عنصر)
(إذا (يساوي؟ عنصر رقم)
(عدل عد (جمع ١ عد)))
٠)
تواجدات)
عد))
"Prepend a perimeter to the list of perimeters"
(حدد إضافة-تكرار (لامدا (رقم)
(عدل تواجدات (كونس رقم تواجدات))
(حدد عد (احصل-على-العد رقم))
(إذا (أكبر؟ عد أفضل-عدد)
(إفعل
(عدل أفضل-عدد عد)
(عدل أفضل رقم))
٠)))
"Run a lambda n times, supplying n as an argument (note: built-in version seems broken)"
(حدد بديهي (لامدا (رقم دالة)
(حدد صغير ٠)
(كرر رقم (لامدا ()
(عدل صغير (جمع ١ صغير))
(دالة صغير)))))
"Modulus"
(حدد المعامل (لامدا (كبير صغير)
(طرح كبير (ضرب صغير (أرض (قسم كبير صغير))))))
"Is even"
(حدد حتى (لامدا (قيمة)
(يساوي؟ ٠ (المعامل قيمة ٢))))
"Greatest common divisor (recursive Euclid's algorithm)"
(حدد القاسم-المشترك-الأكبر (لامدا (كبير صغير)
(إذا (يساوي؟ صغير ٠)
كبير
(القاسم-المشترك-الأكبر صغير (المعامل كبير صغير)))))
"Loop through m, n (m max of 31 determined via algebra), ensure coprime and one even, then add valid perimeters to list"
(بديهي ٣١ (لامدا (يسار)
(بديهي (طرح يسار ١) (لامدا (يمين)
(إذا (و (أو (حتى يسار) (حتى يمين))
(يساوي؟ ١ (القاسم-المشترك-الأكبر يسار يمين)))
(إفعل
(حدد محيط (ضرب ٢ يسار (جمع يسار يمين)))
(بديهي (قسم ١٠٠٠ محيط) (لامدا (مضاعف)
(حدد حاصل-الضرب (ضرب مضاعف محيط))
(إذا (أصغر-أو-يساوي؟ حاصل-الضرب ١٠٠٠)
(إضافة-تكرار حاصل-الضرب)
٠))))
٠)))))
"Print most frequence perimeter"
(قول أفضل)