test.k 802 B

123456789101112131415161718192021222324252627282930
  1. / :`i$"A"; // 65
  2. / :`i$"Z"; // 90
  3. / :`i$"0"; // 48
  4. / :`i$"9"; // 57
  5. / :`i$":"; // 58
  6. / :`i$"$"; // 36
  7. testAtZ: { i:`i$x; $[(i>64) & (i<91);1;0] };
  8. test0t9: { i:`i$x; $[(i>47) & (i<58);1;0] };
  9. testcol: { i:`i$x; $[i=58;1;0] };
  10. testend: { i:`i$x; $[i=36;1;0] };
  11. s0: ((testAtZ; 1);(test0t9; 2));
  12. s1: ((test0t9; 2);(testcol; 3));
  13. s2: ((testend; 7); (testcol;5));
  14. s3: (,(testAtZ; 5));
  15. s4: ((testAtZ; 5); (test0t9; 6));
  16. s5: (,(testend; 7));
  17. s6: (,(testend; 7));
  18. s7: (({`0:"SUCCESS"};7));
  19. // 7 is done
  20. states:: (s0;s1;s2;s3;s4;s5;s6;s7);
  21. i: 1;
  22. run: {[str] str,:"$"; `0:str; s: 0; :o:s {[s;c] r:{t: x[0][y]; o:$[t;x[1];0]; o}[;c]'states[s]; `0:`k@(s;c;ns); ns:states@(&r); ns}\str;};
  23. // todo: don't be using $
  24. // prepare for matching pattern and returning the start index and length
  25. test: "A:A";
  26. run[test]