Ridiculously simple python solution
The idea is to only allow one philosopher to eat at a time, using a single semaphore.  \n\nWhen a philospher acquires the semaphore, they take both forks, eat, 
The idea is to only allow one philosopher to eat at a time, using a single semaphore.  \n\nWhen a philospher acquires the semaphore, they take both forks, eat, and put both forks back, ensuring that when the next philosopher passes the semaphore they can do the same thing.\n\n```\nfrom threading import Semaphore\n\nclass DiningPhilosophers:\n    def __init__(self):\n        #only one person can eat at a time\n        self.dine = Semaphore(value = 1)\n\n    # call the functions directly to execute, for example, eat()\n    def wantsToEat(self,\n                   philosopher: int,\n                   pickLeftFork: \'Callable[[], None]\',\n                   pickRightFork: \'Callable[[], None]\',\n                   eat: \'Callable[[], None]\',\n                   putLeftFork: \'Callable[[], None]\',\n                   putRightFork: \'Callable[[], None]\') -> None:\n        with self.dine:\n            pickLeftFork()\n            pickRightFork()\n            eat()\n            putLeftFork()\n            putRightFork()
[]