Skip to content

Instantly share code, notes, and snippets.

@l0llo
Created January 5, 2017 10:49
Show Gist options
  • Save l0llo/c0fbe7b5bd8834387d73241568d9ec43 to your computer and use it in GitHub Desktop.
Save l0llo/c0fbe7b5bd8834387d73241568d9ec43 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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