Libraryless. Click here for Pure Java version (1542L/9K/32K).
1 | !752 |
2 | |
3 | static class Source { |
4 | S username, slackTS; |
5 | long time; |
6 | } |
7 | |
8 | static class Rel { |
9 | Source source; |
10 | |
11 | S a, b; // the things to relate |
12 | S name; // e.g. "is a" |
13 | |
14 | int score; // -1 (no), 0 (unknown), 1 (yes) |
15 | } |
16 | |
17 | static new L<Rel> relations; |
18 | |
19 | p { |
20 | load("relations"); |
21 | } |
22 | |
23 | answer { |
24 | if "* is a *" { |
25 | saveRel(m.unq(0), m.unq(1), "is a", 1); |
26 | ret "OK, relation saved."; |
27 | } |
28 | |
29 | if "* is not a *" { |
30 | saveRel(m.unq(0), m.unq(1), "is a", -1); |
31 | ret "OK, anti-relation saved."; |
32 | } |
33 | |
34 | if "number of relations" |
35 | ret str(l(relations)); |
36 | |
37 | if "list all relations" |
38 | ret structure(relations); |
39 | |
40 | if "is * a *" { |
41 | S a = m.unq(0), b = m.unq(1); |
42 | int score = relScore(a, b, "is a"); |
43 | S answer = score < 0 ? "No, * is not a *" |
44 | : score > 0 ? "Yes, * is a *" |
45 | : "I'm not sure if * is a *."; |
46 | ret format(answer, a, b); |
47 | } |
48 | |
49 | } |
50 | |
51 | static void saveRel(S a, S b, S name, int score) { |
52 | new Rel r; |
53 | r.source = currentSource(); |
54 | r.a = a; |
55 | r.b = b; |
56 | r.name = name; |
57 | r.score = score; |
58 | relations.add(r); |
59 | save("relations"); |
60 | } |
61 | |
62 | static Source currentSource() { |
63 | new Source s; |
64 | s.username = getUserName(); |
65 | s.slackTS = getSlackTS(); |
66 | s.time = now(); |
67 | ret s; |
68 | } |
69 | |
70 | static int relScore(S a, S b, S name) { |
71 | L<Rel> l = findRels(a, b, name); |
72 | ret listScore(l); |
73 | } |
74 | |
75 | static L<Rel> findRels(S a, S b, S name) { |
76 | new L<Rel> l; |
77 | for (Rel r : relations) |
78 | if (eq(r.a, a) && eq(r.b, b) && eq(r.name, name)) |
79 | l.add(r); |
80 | ret l; |
81 | } |
82 | |
83 | static int listScore(L<Rel> l) { |
84 | int min = 1, max = -1; |
85 | for (Rel r : l) { |
86 | min = min(min, r.score); |
87 | max = max(max, r.score); |
88 | } |
89 | ret min != max ? 0 : min; // default to unknown |
90 | } |
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1002362 |
Snippet name: | Understander Bot (xth attempt) |
Eternal ID of this version: | #1002362/1 |
Text MD5: | 445b48139db3188ae7c2221af1575457 |
Transpilation MD5: | 88c89ac2280c2181f8a8e5e6e622dd73 |
Author: | stefan |
Category: | eleu |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2016-01-09 19:04:40 |
Source code size: | 1742 bytes / 90 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 592 / 870 |
Referenced in: | [show references] |