PasteRack.org
Paste # 2992
2024-09-23 00:48:58

Fork as a new paste.

Paste viewed 63 times.


Embed:

  1. #lang racket
  2.  
  3. ;; INSERT HEADER
  4.  
  5. ;; Note: Indentation for this file may be slightly off
  6. ;; since main laptop broke
  7. ;; so online compiler was used
  8.  
  9. (define StJohns 1)
  10. (define Charlottetown 2)
  11. (define Halifax 3)
  12. (define Fredericton 4)
  13. (define QuebecCity 5)
  14. (define Toronto 6)
  15. (define Waterloo 7)
  16. (define SaultSteMarie 8)
  17. (define ThunderBay 9)
  18. (define Winnipeg 10)
  19. (define Regina 11)
  20. (define Calgary 12)
  21. (define Vancouver 13)
  22.  
  23. (define (city-number city)
  24.   (cond
  25.     [(symbol=? city 'StJohns) StJohns]
  26.     [(symbol=? city 'Charlottetown) Charlottetown]
  27.     [(symbol=? city 'Halifax) Halifax]
  28.     [(symbol=? city 'Fredericton) Fredericton]
  29.     [(symbol=? city 'QuebecCity) QuebecCity]
  30.     [(symbol=? city 'Toronto) Toronto]
  31.     [(symbol=? city 'Waterloo) Waterloo]
  32.     [(symbol=? city 'SaultSteMarie) SaultSteMarie]
  33.     [(symbol=? city 'ThunderBay) ThunderBay]
  34.     [(symbol=? city 'Winnipeg) Winnipeg]
  35.     [(symbol=? city 'Regina) Regina]
  36.     [(symbol=? city 'Calgary) Calgary]
  37.     [(symbol=? city 'Vancouver) Vancouver]
  38.         ))
  39.  
  40. (define (update-fatigue curr-city-num next-city-num curr-fatigue)
  41.   (cond
  42.         [(= curr-city-num next-city-num)
  43.                 (cond
  44.                 [(symbol=? curr-fatigue 'rested) 'rested]
  45.                 [(symbol=? curr-fatigue 'ready) 'rested]
  46.                 [(symbol=? curr-fatigue 'exhausted) 'ready]
  47.                 [else 'invalid]
  48.         )
  49.      ]
  50.         [(= (- next-city-num curr-city-num) 1)
  51.                 (cond
  52.                 [(symbol=? curr-fatigue 'rested) 'ready]
  53.                 [(symbol=? curr-fatigue 'ready) 'ready]
  54.                 [else 'invalid]; moving 1 city while exhausted is invalid
  55.         )
  56.      ]
  57.         [(= (- next-city-num curr-city-num) 2)
  58.                 (cond
  59.                 [(symbol=? curr-fatigue 'rested) 'exhausted]
  60.                 [else 'invalid] ; moving 2 cities while ready or exhausted is invalid
  61.         )
  62.      ]
  63.         [else 'invalid] ; moving any other number of cities (forward or backwards) is invalid
  64.    )
  65. )
  66.  
  67. (define (check-plan city1 city2 city3 city4)
  68.   (
  69.         (update-fatigue (city-number city3) (city-number city4)
  70.         (update-fatigue (city-number city2) (city-number city3)
  71.                 (update-fatigue (city-number city1) (city-number city2) 'rested)
  72.          )
  73.      )
  74.    )
  75. )
  76.  
  77. (check-plan 'Halifax 'Fredericton 'Halifax 'Fredericton)
  78.  
  79.  
  80.  
  81.  

=>

application: not a procedure;

 expected a procedure that can be applied to arguments

  given: 'invalid