Guest User

Untitled

a guest
Oct 18th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. const EMPTY = null;
  2. const isEmpty = (node) => node === EMPTY;
  3.  
  4. const pair = (first, rest = EMPTY) => ({first, rest});
  5.  
  6. const list = (...elements) => {
  7. const [first, ...rest] = elements;
  8. return elements.length === 0
  9. ? EMPTY
  10. : pair(first, list(...rest))
  11. }
  12.  
  13. const forceAppend = (list1, list2) => {
  14. if(isEmpty(list1)) {
  15. return 'FAIL!'
  16. }
  17. if(isEmpty(list1.rest)) {
  18. list1.rest = list2;
  19. }
  20. else {
  21. forceAppend(list1.rest, list2);
  22. }
  23. }
  24.  
  25. const tortoiseAndHare = (aPair) => {
  26. let tortoisePair = aPair,
  27. harePair = aPair.rest;
  28.  
  29. while(true){
  30. if(isEmpty(tortoisePair) ||
  31. isEmpty(harePair)) {
  32. return false;
  33. }
  34. if(tortoisePair.first === harePair.first){
  35. return true;
  36. }
  37.  
  38. harePair = harePair.rest;
  39.  
  40. if(isEmpty(harePair)) {
  41. return false;
  42. }
  43.  
  44. if(tortoisePair.first === harePair.first){
  45. return true;
  46. }
  47.  
  48. tortoisePair = tortoisePair.rest;
  49. harePair = harePair.rest;
  50. }
  51. };
  52.  
  53. const aList = list(1,2,3,4,5);
  54.  
  55. console.log(aList);
  56. console.log(tortoiseAndHare(aList));
Add Comment
Please, Sign In to add comment