PasteRack.org
Paste # 17034
2024-09-23 00:37:49

Fork as a new paste.

Paste viewed 112 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.         )
  48.      ]
  49.         [(= (- next-city-num curr-city-num) 1)
  50.                 (cond
  51.                 [(symbol=? curr-fatigue 'rested) 'ready]
  52.                 [(symbol=? curr-fatigue 'ready) 'ready]
  53.                 [else 'invalid]; moving 1 city while exhausted is invalid
  54.         )
  55.      ]
  56.         [(= (- next-city-num curr-city-num) 2)
  57.                 (cond
  58.                 [(symbol=? curr-fatigue 'rested) 'exhausted]
  59.                 [else 'invalid] ; moving 2 cities while ready or exhausted is invalid
  60.         )
  61.      ]
  62.         [else 'invalid] ; moving any other number of cities (forward or backwards) is invalid
  63.    )
  64. )
  65.  
  66. (define (check-plan city1 city2 city3 city4)
  67.   (
  68.         (update-fatigue city3 city4
  69.         (update-fatigue city2 city3
  70.                 (update-fatigue city1 city2 'rested)))
  71.    )
  72. )
  73.  
  74. (check-plan 'Halifax 'Fredericton 'Halifax 'Fredericton)
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  

=>

=: contract violation

  expected: number?

  given: 'Halifax