Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

241
LINES

< > BotCompany Repo | #1008139 // Demo 2 (deutsch): Fibonacci-Zahlen - translation of #1007765

JavaX source code (desktop) [tags: use-pretranspiled] - run with: x30.jar

Download Jar. Uses 4489K of libraries. Click here for Pure Java version (13723L/99K).

1  
!7
2  
3  
sS theFacts = [[
4  
5  
  Fibonacci-Zahl n ist Fibonacci-Zahl n-1 plus Fibonacci-Zahl n-2 falls n > 2.
6  
  Es gibt keine Fibonacci-Zahl 0.
7  
  Fibonacci-Zahl 1 ist 1.
8  
  Fibonacci-Zahl 2 ist 1.
9  
10  
  // Technisches Zeug
11  
  gmtzfidalveipfyx feyhbrhdeovmbvaw amcmxkgwhivbouqs
12  
  pqnfhkzxoqkaoyqk sppxbuuqeetjmzuo
13  
]];
14  
15  
sS theRiddle = [[
16  
  Was ist Fibonacci-Zahl 0?
17  
  Was ist Fibonacci-Zahl 1?
18  
  Was ist Fibonacci-Zahl 2?
19  
  Was ist Fibonacci-Zahl 3?
20  
  Was ist Fibonacci-Zahl 4?
21  
]];
22  
23  
static S concepts = [[
24  
  ["feyhbrhdeovmbvaw", "Es gibt keine X."],
25  
  ["mtsrzasaoxrmicch", "X ist Y falls Z."],
26  
  ["fgvvrzypbkqomktd", "X ist Y."],
27  
  ["sppxbuuqeetjmzuo", "X plus Y"],
28  
  ["rgsamtbrhpcqowko", "Fibonacci-Zahl X"],
29  
  ["urfkhwfasdaqqqse", "Was ist X?"],
30  
  ["jxcubqjtqykhfvyo", "X - Y", "as in minus"],
31  
  ["wdbphzfoxwlrhdyl", "X > Y"],
32  
  ["pqnfhkzxoqkaoyqk", "Operation X should be expanded."],
33  
  ["amcmxkgwhivbouqs", "Etwas nicht existentes"],
34  
  ["yissyloatogavyuu", "Fibonacci-Zahl"],
35  
  ["gmtzfidalveipfyx", "Marker X implies label Y."],
36  
  ["wvuyakuvuelmxpwp", "X on this"],
37  
]];
38  
39  
!include #1007689 // Web v2
40  
41  
static int saveInterval = 60000;
42  
static volatile new Web web;
43  
static L<Lisp> facts;
44  
static long lastSave, sizeSaved;
45  
46  
extend Web {
47  
  volatile transient bool cancelled, calculating;
48  
}
49  
50  
p-tt {
51  
  setConsoleTitle(programTitle());
52  
  load("web"); lastSave = sysNow();
53  
  setFrameHeight(consoleFrame(), 400);
54  
  centerConsole();
55  
  //magellan();
56  
  //graphite();
57  
  //mistAqua();
58  
  //moderateTheme();
59  
  sahara();
60  
  swing {
61  
    setConsoleInput("Was ist Fibonacci-Zahl 500?");
62  
    consoleAddAskButton();
63  
    focusConsole();
64  
    final JLabel lblBrainSize = jRightAlignedLabel();
65  
    addToConsole2(withMargin(centerAndEast(lblBrainSize,
66  
      withLeftMargin(jbutton("Reset", "reset")))));
67  
    awtEvery(lblBrainSize, 1000, r {
68  
      lblBrainSize.setText("Brain Size: " + toM(fileSize(programFile("web.structure")), 1) + " MB");
69  
    });
70  
    awtCalcEvery(lblBrainSize, 1000, 1000, r {
71  
      if (web.calculating) ret;
72  
      int webSize = web.count();
73  
      if (shouldSave(webSize, false)) saveWeb(webSize);
74  
    });
75  
  }
76  
77  
  aiEnhancements();
78  
  aiConcepts_noAutoClear();
79  
  useConceptsDump(concepts);
80  
  set englishToConceptLanguage_useBrackets;
81  
  facts = clParse(linesToCL(theFacts));
82  
  print(theFacts);
83  
  useFacts(theFacts);
84  
  printNumberedLines(facts); // print parsed facts
85  
  
86  
  firstRiddle();
87  
  
88  
  makeBot();
89  
  notDone();
90  
}
91  
92  
svoid firstRiddle {
93  
  print();
94  
  for (S rid : toLinesFullTrim(theRiddle)) {
95  
    print("? " + rid);
96  
    print("  " + answer(rid));
97  
  }
98  
  print();
99  
}
100  
101  
static int webSize() { ret web.count(); }
102  
103  
sbool shouldSave(int webSize, bool checkInterval) {
104  
  ret webSize != sizeSaved &&
105  
    (!checkInterval || sysNow() >= lastSave+saveInterval);
106  
}
107  
108  
svoid saveWeb(int webSize) {
109  
  save("web");
110  
  sizeSaved = webSize;
111  
  lastSave = sysNow();
112  
}
113  
114  
static S answer(S rid) {
115  
  web.calculating = true;
116  
  try {
117  
    ret answerImpl(rid);
118  
  } finally {
119  
    web.calculating = false;
120  
  }
121  
}
122  
123  
static S answerImpl(S rid) {
124  
  if (match("web", rid)) { print(web); ret "OK"; }
125  
  if (match("visualize", rid)) { webToCAL(web).show(); ret "OK"; }
126  
  Web web = main.web;
127  
  Lisp riddle = clParse(englishToConceptLanguage(rid));
128  
  //print("# " + riddle);
129  
  
130  
  if (!riddle.is("urfkhwfasdaqqqse", "mrhggsmuykeceghd")) ret "huh?"; // Was ist X? // Was ist the decimal representation of X?
131  
  Lisp mainConcept = riddle.get(0);
132  
133  
  // Make web
134  
  web.node(mainConcept);
135  
  web.relations(facts);
136  
  
137  
  int webSize = web.count();
138  
  int cursor = 0;
139  
  while licensed {
140  
    if (web.cancelled) ret "cancelled";
141  
    //print("Web size: " + webSize);
142  
    if (shouldSave(webSize, true)) {
143  
      printWithoutNL("S");
144  
      saveWeb(webSize);
145  
    } else
146  
      printWithoutNL(".");
147  
    if ((++cursor % 60) == 0) print();
148  
    
149  
    CriticalAction action = beginCriticalAction("Web Update");
150  
    try {
151  
      web_expandMarkers2(web);
152  
      web_expandOperations2(web);
153  
154  
      for (LispStatement ls : lispStatementsByHead("mtsrzasaoxrmicch")) {
155  
        if (web.cancelled) ret "cancelled";
156  
        Lisp rule = ls.term, x = rule.get(0);
157  
        //print("Pot size: " + l(web.getPot(ls.globalID)));
158  
        for (WebNode node : web.clearPot(ls.globalID)) {
159  
          for (Lisp lbl : cloneList(node.labels)) {
160  
            //print("Matching " + x + " and " + lbl);
161  
            Map<S, Lisp> matches = lispMatch(x, lbl, ll("n"));
162  
            if (matches != null) {
163  
              //print("Rule match: " + struct(matches));
164  
              Lisp bla = lispReplaceVars(rule.get(2), matches);
165  
              if (checkACondition(bla)) {
166  
                bla = lispReplaceVars(rule.get(1), matches);
167  
                bla = lispCalculateDeep(bla);
168  
                bla = web_insertNumbers(web, bla);
169  
                //print("bla: " + bla);
170  
                bla = lispCalculateDeep(bla);
171  
                if (lispIsInt(bla)) {
172  
                  node.addLabel(bla); // Found!
173  
                  //pot.remove(node);
174  
                } else {
175  
                  //print("Condition OK! Evaluating: " + bla);
176  
                  web.node(bla);
177  
                  // Place into pot again
178  
                  web.getPot(ls.globalID).add(node);
179  
                }
180  
              }
181  
            }
182  
          }
183  
        }
184  
        //print("Node: " + node + ", condition: " + condition);
185  
      }
186  
    } finally {
187  
      action.done();
188  
    }
189  
    
190  
    int n = web.count();
191  
    if (n == webSize) break;
192  
    webSize = n;
193  
  }
194  
  print();
195  
  
196  
  // print question again
197  
  if (cursor / 60 >= 10)
198  
    print("? " + rid);
199  
    
200  
  // Answer question
201  
  L<Lisp> l = listWithout(web.findNode(mainConcept).labels, mainConcept);
202  
  //print("Labels: " + l);
203  
  S s = chooseALabelToReturn(l);
204  
  s = or2(conceptLanguageToEnglish(unquote(s)), "I don't know");
205  
  ret s;
206  
}
207  
208  
sS chooseALabelToReturn(L<Lisp> ll) {
209  
  L<S> l = map(f clUnparse, ll);
210  
  //print("  Labels: " + l);
211  
  S s = findInteger(l);
212  
  if (s == null) s = firstGlobalID(l);
213  
  //if (s == null) s = random(l);
214  
  if (s == null) ret s = first(l);
215  
  ret s;
216  
}
217  
218  
sbool checkACondition(Lisp l) false on exception {
219  
  ret lispCalculateDeep(l).is("true");
220  
}
221  
222  
svoid cleanMeUp {
223  
  while (criticalActionsInFlight()) sleep(5);
224  
  if (sizeSaved != web.count())
225  
    save("web");
226  
}
227  
228  
svoid reset {
229  
  if (!confirmOKCancel("Really clear the Fibonacci brain?")) ret;
230  
  web.cancelled = true;
231  
  CriticalAction action = beginCriticalAction("Resetting Brain");
232  
  try {
233  
    web = new Web;
234  
    sizeSaved = 0;
235  
    save("web");
236  
  } finally {
237  
    action.done();
238  
  }
239  
  clearConsole();
240  
  firstRiddle();
241  
}

Author comment

Began life as a copy of #1007765

download  show line numbers  debug dex  old transpilations   

Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, unoaxrwscvea, vouqrxazstgt

No comments. add comment

Snippet ID: #1008139
Snippet name: Demo 2 (deutsch): Fibonacci-Zahlen - translation of #1007765
Eternal ID of this version: #1008139/9
Text MD5: 1a40a03c1f6de29664b886616b7e086e
Transpilation MD5: 450757b3a7b99ed1129e840e9a910934
Author: stefan
Category: javax / a.i.
Type: JavaX source code (desktop)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2017-04-26 12:25:02
Source code size: 6713 bytes / 241 lines
Pitched / IR pitched: No / No
Views / Downloads: 565 / 1135
Version history: 8 change(s)
Referenced in: [show references]