Libraryless. Click here for Pure Java version (949L/7K/21K).
1 | !747 |
2 | !multi-line strings |
3 | |
4 | m {
|
5 | static S input = [[ |
6 | // Dogmas |
7 | |
8 | A "clock time" consists of "minutes" and "seconds". |
9 | "Minutes" is a number between 0 and 99. |
10 | "Seconds" is a number between 0 and 59. |
11 | A "clock time" is usually written in the format "Minutes:Seconds". |
12 | |
13 | // Questions |
14 | |
15 | What are the minutes in the "clock time" "12:35"? |
16 | What are the seconds in the "clock time" "05:12"? |
17 | ]]; |
18 | |
19 | !include #2000515 // unquote |
20 | !include #1000709 // formatSnippetID |
21 | |
22 | static class Struct {
|
23 | new L<S> components; |
24 | S format; |
25 | |
26 | Map<S, O> parse(S s) {
|
27 | L<S> tok = nlTok(s); |
28 | L<S> form = nlTok(format); |
29 | if (l(tok) != l(form)) ret null; |
30 | new Map<S, O> map; |
31 | for (int i = 1; i < l(form); i += 2) {
|
32 | String f = form.get(i), t = tok.get(i); |
33 | if (components.contains(simplifyName(f))) {
|
34 | map.put(simplifyName(f), t); |
35 | } else |
36 | if (!eq(f, t)) |
37 | ret null; |
38 | } |
39 | ret map; |
40 | } |
41 | } |
42 | |
43 | static class Number {
|
44 | int min, max; |
45 | |
46 | boolean checkString(S s) {
|
47 | int i = parseInt(s); |
48 | ret i >= min && i <= max; |
49 | } |
50 | } |
51 | |
52 | static new Map<S, O> concepts; |
53 | |
54 | p {
|
55 | for (S line : toLinesFullTrim(input)) |
56 | print(answer(line)); |
57 | } |
58 | |
59 | static S answer(S line) {
|
60 | L<S> tok = nlTok(line); |
61 | if (l(tok) == 1) ret "..."; |
62 | simplify(tok); |
63 | S s = join(tok); |
64 | print(" " + s);
|
65 | |
66 | new Matches m; |
67 | |
68 | // Dogmas |
69 | |
70 | if (match3("a * consists of * and *", s, m)) {
|
71 | S name = simplifyName(m.unq(0)); |
72 | S a = simplifyName(m.unq(1)); |
73 | S b = simplifyName(m.unq(2)); |
74 | new Struct st; |
75 | st.components.addAll(litlist(a, b)); |
76 | concepts.put(name, st); |
77 | ret "OK. " + name; |
78 | } |
79 | |
80 | if (match3("* is a number between * and *", s, m)) {
|
81 | new Number n; |
82 | n.min = parseInt(m.get(1)); |
83 | n.max = parseInt(m.get(2)); |
84 | S name = simplifyName(m.unq(0)); |
85 | concepts.put(name, n); |
86 | ret "OK. " + name; |
87 | } |
88 | |
89 | if (match3("A * is written in the format *", s, m)) {
|
90 | S name = simplifyName(m.unq(0)); |
91 | S format = m.unq(1); |
92 | O concept = concepts.get(name); |
93 | setOpt(concept, "format", format); |
94 | ret "OK."; |
95 | } |
96 | |
97 | // Questions |
98 | |
99 | if (match3("What are the * in the * *?", s, m)) {
|
100 | S component = simplifyName(m.unq(0)); |
101 | S name = simplifyName(m.unq(1)); |
102 | S pattern = m.unq(2); |
103 | O concept = concepts.get(name); |
104 | Map<S, O> instance = (Map) call(concept, "parse", pattern); |
105 | ret structureOrText(instance.get(component)); |
106 | } |
107 | |
108 | ret "huh?"; |
109 | } |
110 | |
111 | static S simplifyName(S s) {
|
112 | ret join(" ", codeTokensOnly(tokensToLowerCase(nlTok(s))));
|
113 | } |
114 | |
115 | static void simplify(L<S> tok) {
|
116 | for (int i = 1; i < l(tok); ) |
117 | if (equalsIgnoreCase(tok.get(i), "usually")) {
|
118 | removeToken(tok, i); |
119 | } else |
120 | i += 2; |
121 | } |
122 | } |
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, teubizvjbppd, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1001685 |
| Snippet name: | Clock times (works!) |
| Eternal ID of this version: | #1001685/1 |
| Text MD5: | 65c3b5df6bb2662741c3cd081d5736ab |
| Transpilation MD5: | af715bef68534727f447cf97056b9b5a |
| Author: | stefan |
| Category: | javax |
| Type: | JavaX source code |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2015-11-04 21:05:24 |
| Source code size: | 3024 bytes / 122 lines |
| Pitched / IR pitched: | No / Yes |
| Views / Downloads: | 986 / 1053 |
| Referenced in: | [show references] |