excelpm.k 883 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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; 5));
  16. s5: (,(testend; 6));
  17. s7: (({`0:"SUCCESS"};6));
  18. // 7 is done
  19. states:: (s0;s1;s2;s3;s4;s5;s7);
  20. i: 1;
  21. run: {[str]
  22. str,:"$";
  23. // go over each char and run cur statoe
  24. // cur state; start of pattern; length of pattern <- args
  25. idx::0;
  26. o:(0;-1;-1) {[a;c] // TODO, add support for multiple active states
  27. s: a[0];
  28. r:{
  29. :$[x[0][y];x[1];0]
  30. }[;c]'states[s];
  31. r: *($[(+/r)>0;r^0;0]);
  32. idx +: 1;
  33. :(r;$[(s=0)&(r>0);idx-1;a[1]];$[r=5;idx;a[2]])
  34. }\str;
  35. :o
  36. };