Created
January 5, 2017 10:49
-
-
Save l0llo/c0fbe7b5bd8834387d73241568d9ec43 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Il carcere sovrafollato\n", | |
"Ci sono 100 prigionieri in un carcere. I loro nomi sono su dei pezzi di carta in un'urna. Il direttore estrae un biglietto alla volta chiama il prigioniero e rimette il biglietto nell'urna. Il prigioniero viene mandato in una stanza con una lampada che può essere accesa o spenta. A sua volta lui può accenderla o spegnerla. Poi esce può dire al direttore se tutti sono stati estratti almeno una volta, oppure può tornare in cella. Se decide di indovinare, se dice giusto il gioco finisce e tutti sono vivi, se sbaglia allora tutti vengono eliminati. Prima che cominci il gioco i prigionieri sono informati del gioco e possono mettersi d'accordo, poi non possono più comunicare. Prima che cominci il gioco la luce viene spenta." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"import random" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"solved = False\n", | |
"counter = 0 # select which player will be the counter\n", | |
"counted = set()\n", | |
"count = 1 # the counter must count himself\n", | |
"light_is_on = False # light is turned off\n", | |
"prisoners_number = 100" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"def extract_a_prisoner():\n", | |
" return random.randint(0, prisoners_number)\n", | |
"\n", | |
"\n", | |
"def turn_off():\n", | |
" global light_is_on\n", | |
" light_is_on = False\n", | |
"\n", | |
"\n", | |
"def turn_on():\n", | |
" global light_is_on\n", | |
" light_is_on = True\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Everybody has been extracted!\n", | |
"Game solved after 9801 extractions\n" | |
] | |
} | |
], | |
"source": [ | |
"i = 0\n", | |
"while not solved:\n", | |
" i += 1\n", | |
" prisoner = extract_a_prisoner() # extract a prisoner\n", | |
" if prisoner == counter: # the counter only count when he sees the light on\n", | |
" if light_is_on: # someone new has been extracted!\n", | |
" turn_off()\n", | |
" count += 1\n", | |
" if count == prisoners_number:\n", | |
" print(\"Everybody has been extracted!\")\n", | |
" solved = True\n", | |
" else:\n", | |
" # a prisoner can turn on the light only once\n", | |
" if not light_is_on and prisoner not in counted:\n", | |
" turn_on()\n", | |
" # add the prisoner to the ones that have already been counted\n", | |
" counted.add(prisoner) \n", | |
"print(\"Game solved after \" + str(i) + \" extractions\")" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.5.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment