excelpm.k 915 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. // go over each char and run cur statoe
  23. // cur state; start of pattern; length of pattern <- args
  24. idx::0;
  25. o:(0;(0;0);1) {[a;c]
  26. activeidx: (*|a);
  27. indices: a[activeidx];
  28. s: a[0];
  29. r:{
  30. :$[x[0][y];x[1];0]
  31. }[;c]'states[s];
  32. r: *($[(+/r)>0;r^0;0]);
  33. idx +: 1;
  34. a0: $[s>4;s;r];
  35. :(a0;($[(s=0)&(r>0);idx-1;indices[0]];$[r=5;idx;indices[1]]);activeidx)
  36. }\str;
  37. :o
  38. };