Code Monkey home page Code Monkey logo

prisoner-riddle's Introduction

This CLI application simulates a prisoner's dilemma. It was originally a riddle I came across on YouTube. You can watch it here: https://www.youtube.com/watch?v=iSNsgj1OCLA&t=902s

The riddle goes as such:

  • There are 100 prisoners numbered 1 to 100
  • Slips with their numbers are randomly placed in 100 boxes in a room
  • Each prisoner may enter the room one at a time and check 50 boxes
  • They must leave the room exactly as they found it and can't communicate with the others after
  • If all 100 prisoners find their number during their turn in the room, they will all be freed. But if even one fails, they will all be executed.

What is their best strategy?

The video explains the math behind a random strategy: in which each each prisoner only has a 50% chance of finding their number since they can only open half of the boxes. So the more prisoners there are, the more unlikely of being let free.

Instead, if they utilize a looping strategy, then the group's odds of being let free increase dramatically. Each Individual's chances of finding their number is still 50%, but the group's chances are always about 1/3, regardless of the prison group size.

I coded this up to verify those results -- and they indeed are true!

Example Trials

deno run script.ts --trials 100 --prisoner-count 1000 --strategy loop
0.36

In this case, 100 trials were ran with 1,000 prisoners utilizing the loop strategy. 36% of the trials resulted in the prisoners being left free.

Running

This uses the deno runtime. Third-party libs have been vendored in case they disappear.

The vendored ones can be used by adding the following flags to the deno runtime: --import-map vendor/import_map.json.

prisoner-riddle's People

Contributors

brian-petersen avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.