Commit 0b07a331 authored by Arnaud Legrand's avatar Arnaud Legrand

This notebook was quickly shown in sequence 6

parent 6fe7d46b
...@@ -18,17 +18,23 @@ org-files. These documents depend on many other external data files ...@@ -18,17 +18,23 @@ org-files. These documents depend on many other external data files
and are not meant to lead to reproducible documents but it will give and are not meant to lead to reproducible documents but it will give
you an idea of how it can be organized: you an idea of how it can be organized:
1. [[file:journal.org][journal.org]]: an excerpt (I've only left a few code samples and links 1. [[file:td2_PS.ipynb][td2_PS.ipynb]]: this is a practical session (in French) on random
number generation for 1st year master students in computer
science. It uses the R language. In this teaching context, the main
advantage of using a jupyter notebook over other environments is
that students can use the University jupyterhub and thus do not
have to install anything on their laptop.
2. [[file:journal.org][journal.org]]: an excerpt (I've only left a few code samples and links
to some resources on R, Stats, ...) from my own journal. This is a to some resources on R, Stats, ...) from my own journal. This is a
personal document where everything (meeting notes, hacking, random personal document where everything (meeting notes, hacking, random
thoughts, ...) goes by default. Entries are created with the =C-c c= thoughts, ...) goes by default. Entries are created with the =C-c c=
shortcut. shortcut.
2. [[file:labbook_single.org][labbook_single.org]]: this is an excerpt from the laboratory notebook 3. [[file:labbook_single.org][labbook_single.org]]: this is an excerpt from the laboratory notebook
[[https://cornebize.net/][Tom Cornebize]] wrote during his Master thesis internship under my [[https://cornebize.net/][Tom Cornebize]] wrote during his Master thesis internship under my
supervision. This a personal labbook. I consider this notebook to be supervision. This a personal labbook. I consider this notebook to be
excellent and was the ideal level of details for us to communicate excellent and was the ideal level of details for us to communicate
without any ambiguity and for him to move forward with confidence. without any ambiguity and for him to move forward with confidence.
3. [[file:paper.org][paper.org]]: this is an ongoing paper based on the previous labbook of 4. [[file:paper.org][paper.org]]: this is an ongoing paper based on the previous labbook of
Tom Cornebize. As such it is not reproducible as there are hardcoded Tom Cornebize. As such it is not reproducible as there are hardcoded
paths and uncleaned dependencies but writing it from the labbook was paths and uncleaned dependencies but writing it from the labbook was
super easy as we just had to cut and paste the parts we super easy as we just had to cut and paste the parts we
...@@ -38,7 +44,7 @@ you an idea of how it can be organized: ...@@ -38,7 +44,7 @@ you an idea of how it can be organized:
commands that are automatically executed when opening the file. It commands that are automatically executed when opening the file. It
is an effective way to depend less on the =.emacs/init.el= which is is an effective way to depend less on the =.emacs/init.el= which is
generally customized by everyone. generally customized by everyone.
4. [[file:labbook_several.org][labbook_several.org]]: this is a labbook for a specific project shared 5. [[file:labbook_several.org][labbook_several.org]]: this is a labbook for a specific project shared
by several persons. As a consequence it starts with information by several persons. As a consequence it starts with information
about installation, common scripts, has section with notes about all about installation, common scripts, has section with notes about all
our meetings, a section with information about experiments and an our meetings, a section with information about experiments and an
...@@ -47,7 +53,7 @@ you an idea of how it can be organized: ...@@ -47,7 +53,7 @@ you an idea of how it can be organized:
available in git so we did not bother. In such labbook, it is common available in git so we did not bother. In such labbook, it is common
to find annotations indicating that such experiment was =:FLAWED:= as to find annotations indicating that such experiment was =:FLAWED:= as
it had some issues. it had some issues.
5. [[file:technical_report.org][technical_report.org]]: this is a short technical document I wrote 6. [[file:technical_report.org][technical_report.org]]: this is a short technical document I wrote
after a colleague sent me a PDF describing an experiment he was after a colleague sent me a PDF describing an experiment he was
conducting and asked me about how reproducible I felt it was. It conducting and asked me about how reproducible I felt it was. It
turned out I had to cut and paste the C code from the PDF, then turned out I had to cut and paste the C code from the PDF, then
......
...@@ -20,7 +20,13 @@ fichiers externes et ne sont pas prévu pour permettre de produire ...@@ -20,7 +20,13 @@ fichiers externes et ne sont pas prévu pour permettre de produire
directement des documents reproductibles mais ils peuvent vous donner directement des documents reproductibles mais ils peuvent vous donner
une idée de la façon dont ils peuvent être organisés: une idée de la façon dont ils peuvent être organisés:
1. [[file:journal.org][journal.org]]: ceci est un extrait (je n'ai laissé que quelques 1. [[file:td2_PS.ipynb][td2_PS.ipynb]]: ceci est une feuille de TD (en français) sur la
génération de nombres aléatoires à destination d'étudiants de
première année de Master en informatique. Elle utilise le langage
R. Dans ce contexte d'enseignement, l'intérêt du notebook jupyter
est qu'ils peuvent utiliser le jupyterhub de l'université et n'ont
donc rien à installer sur leur machine.
2. [[file:journal.org][journal.org]]: ceci est un extrait (je n'ai laissé que quelques
exemples de programmes et de liens vers des ressources sur R, les exemples de programmes et de liens vers des ressources sur R, les
statistiques, etc.) de mon propre journal. C'est un document statistiques, etc.) de mon propre journal. C'est un document
personnel dans lequel tout ce que je peux faire (notes prises personnel dans lequel tout ce que je peux faire (notes prises
...@@ -28,14 +34,14 @@ une idée de la façon dont ils peuvent être organisés: ...@@ -28,14 +34,14 @@ une idée de la façon dont ils peuvent être organisés:
variées, notes bibliographiques, ...) atterrit par défaut. Les variées, notes bibliographiques, ...) atterrit par défaut. Les
entrées avec la date sont créées automatiquement à l'aide du entrées avec la date sont créées automatiquement à l'aide du
raccourci =C-c c=. raccourci =C-c c=.
2. [[file:labbook_single.org][labbook_single.org]]: ceci est un extrait du cahier de laboratoire 3. [[file:labbook_single.org][labbook_single.org]]: ceci est un extrait du cahier de laboratoire
tenu par [[https://cornebize.net/][Tom Cornebize]] pendant son stage de Master sous ma tenu par [[https://cornebize.net/][Tom Cornebize]] pendant son stage de Master sous ma
direction. C'est un cahier de laboratoire personnel et que je direction. C'est un cahier de laboratoire personnel et que je
considère comme excellent car il a le niveau de détail idéal pour considère comme excellent car il a le niveau de détail idéal pour
nous permettre à la fois de communiquer sans aucune ambiguïté, pour nous permettre à la fois de communiquer sans aucune ambiguïté, pour
moi, de bien suivre ses avancées, et pour lui, d'avancer dans ses moi, de bien suivre ses avancées, et pour lui, d'avancer dans ses
travaux avec confiance. travaux avec confiance.
3. [[file:paper.org][paper.org]]: ceci est un article en cours basé sur le cahier de 4. [[file:paper.org][paper.org]]: ceci est un article en cours basé sur le cahier de
laboratoire précédent. En l'état, il n'est pas reproductible car il laboratoire précédent. En l'état, il n'est pas reproductible car il
y a plusieurs chemins absolus en dur et des dépendances logicielles y a plusieurs chemins absolus en dur et des dépendances logicielles
non explicitées mais sa rédaction à partir du cahier de laboratoire non explicitées mais sa rédaction à partir du cahier de laboratoire
...@@ -50,7 +56,7 @@ une idée de la façon dont ils peuvent être organisés: ...@@ -50,7 +56,7 @@ une idée de la façon dont ils peuvent être organisés:
qui sont exécutées par emacs à l'ouverture du fichier. C'est une qui sont exécutées par emacs à l'ouverture du fichier. C'est une
façon simple mais efficace de dépendre le moins possible du façon simple mais efficace de dépendre le moins possible du
=.emacs/init.el= que chacun personnalise à sa convenance. =.emacs/init.el= que chacun personnalise à sa convenance.
4. [[file:labbook_several.org][labbook_several.org]]: ceci est un petit exemple de cahier de 5. [[file:labbook_several.org][labbook_several.org]]: ceci est un petit exemple de cahier de
laboratoire partagé par plusieurs personnes. Il commence donc par laboratoire partagé par plusieurs personnes. Il commence donc par
des informations sur les dépendances logicielles à installer, les des informations sur les dépendances logicielles à installer, les
scripts les plus utiles. On y trouve ensuite une section avec des scripts les plus utiles. On y trouve ensuite une section avec des
...@@ -70,7 +76,7 @@ une idée de la façon dont ils peuvent être organisés: ...@@ -70,7 +76,7 @@ une idée de la façon dont ils peuvent être organisés:
nouvelle date) est en général alors ajoutée. L'annotation =:FLAWED:= nouvelle date) est en général alors ajoutée. L'annotation =:FLAWED:=
nous permet de conserver l'ensemble des expériences tout en sachant nous permet de conserver l'ensemble des expériences tout en sachant
d'un coup d'oeil lesquelles ne doivent pas être prises en compte. d'un coup d'oeil lesquelles ne doivent pas être prises en compte.
5. [[file:technical_report.org][technical_report.org]]: ceci est un petit document technique que j'ai 6. [[file:technical_report.org][technical_report.org]]: ceci est un petit document technique que j'ai
écrit après qu'un collègue m'ai envoyé un document PDF décrivant écrit après qu'un collègue m'ai envoyé un document PDF décrivant
une expérience qu'il avait réalisé et souhaitait mon avis sur si une expérience qu'il avait réalisé et souhaitait mon avis sur si
c'était suffisant d'un point de vue reproductibilité. Il s'est c'était suffisant d'un point de vue reproductibilité. Il s'est
......
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TD2: Générateurs pseudo-aléatoires (RICM4, 2013)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"L'objectif de cette fiche est de présenter les méthodes principales de génération de nombres pseudo-aléatoires, de comprendre leurs limitations, d'apprendre à s'en méfier et de voir comment éventuellement les corriger...\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Générateurs à base de congruence"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"congruent_random <- function(n = 100, a=4, b=2, m=9, x1=1) {\n",
" res = c(x1)\n",
" for(i in 2:n) {\n",
" res[i] = (a * res[i-1] + b) %% m\n",
" }\n",
" res\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Regardons les premières valeurs"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>6</li>\n",
"\t<li>8</li>\n",
"\t<li>7</li>\n",
"\t<li>3</li>\n",
"\t<li>5</li>\n",
"\t<li>4</li>\n",
"\t<li>0</li>\n",
"\t<li>2</li>\n",
"\t<li>1</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item 6\n",
"\\item 8\n",
"\\item 7\n",
"\\item 3\n",
"\\item 5\n",
"\\item 4\n",
"\\item 0\n",
"\\item 2\n",
"\\item 1\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. 6\n",
"3. 8\n",
"4. 7\n",
"5. 3\n",
"6. 5\n",
"7. 4\n",
"8. 0\n",
"9. 2\n",
"10. 1\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 6 8 7 3 5 4 0 2 1"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"congruent_random(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Regardons maintenant graphiquement ces valeurs"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU\nlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm\npqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4\nuLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK\nysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc\n3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u\n7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i\nsF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3dCZhU1Znw8be6oWkb2URAkEUb\ng4i4RBEbJMRPMSC474i7BjSjMS6JUaPRkM3RSUzGMc7EBYMzSdRkcEaNCigTcde4Mm4RDC5g\n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",
"text/plain": [
"Plot with title “Histogram of X”"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"graphical_check <- function(X) {\n",
" par(mfrow=c(1,2))\n",
" hist(X)\n",
" plot(X[1:length(X)-1],X[2:length(X)])\n",
"}\n",
"graphical_check(congruent_random(100))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Évidemment, l'espace d'état est trop petit. Essayons avec d'autres paramètres."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAADAFBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OU\nlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWm\npqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4\nuLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnK\nysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc\n3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u\n7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////i\nsF19AAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2dCXwTRfvHnyS9aEspR4EWWk6x\nVECQqyCXgByVGwSRS174cygICt6+iOKBgjf64gGi4In6oq+AiAKKCqKCgqggAiKnIFAECpR2\n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\nAAAAAElFTkSuQmCC",
"text/plain": [
"Plot with title “Histogram of X”"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"graphical_check(congruent_random(n=100,a=11,b=1,m=71))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cela parait mieux mais en s'intéressant à la corrélation et à la covariance entre $X_n$ et $X_{n+1}$, le fait que nos nombres ne sont pas indépendants les uns des autres est plus évident."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"0.0457750907128348"
],
"text/latex": [
"0.0457750907128348"
],
"text/markdown": [
"0.0457750907128348"
],
"text/plain": [
"[1] 0.04577509"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"19.0913087436134"
],
"text/latex": [
"19.0913087436134"
],
"text/markdown": [
"19.0913087436134"
],
"text/plain": [
"[1] 19.09131"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X <- congruent_random(n=1000,a=11,b=1,m=71)\n",
"cor(X[1:length(X)-1],X[2:length(X)])\n",
"cov(X[1:length(X)-1],X[2:length(X)])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il faut donc être suspicieux avec les générateurs de nombres alétaoires et leur faire subir plusieurs tests."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Générateurs à décalage de registres"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] 4\n"
]
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. 0\n",
"3. 1\n",
"4. 0\n",
"5. 0\n",
"6. 0\n",
"7. 1\n",
"8. 0\n",
"9. 1\n",
"10. 0\n",
"11. 0\n",
"12. 0\n",
"13. 1\n",
"14. 0\n",
"15. 1\n",
"16. 0\n",
"17. 0\n",
"18. 0\n",
"19. 1\n",
"20. 0\n",
"21. 1\n",
"22. 0\n",
"23. 0\n",
"24. 0\n",
"25. 1\n",
"26. 0\n",
"27. 1\n",
"28. 0\n",
"29. 0\n",
"30. 0\n",
"31. 1\n",
"32. 0\n",
"33. 1\n",
"34. 0\n",
"35. 0\n",
"36. 0\n",
"37. 1\n",
"38. 0\n",
"39. 1\n",
"40. 0\n",
"41. 0\n",
"42. 0\n",
"43. 1\n",
"44. 0\n",
"45. 1\n",
"46. 0\n",
"47. 0\n",
"48. 0\n",
"49. 1\n",
"50. 0\n",
"51. 1\n",
"52. 0\n",
"53. 0\n",
"54. 0\n",
"55. 1\n",
"56. 0\n",
"57. 1\n",
"58. 0\n",
"59. 0\n",
"60. 0\n",
"61. 1\n",
"62. 0\n",
"63. 1\n",
"64. 0\n",
"65. 0\n",
"66. 0\n",
"67. 1\n",
"68. 0\n",
"69. 1\n",
"70. 0\n",
"71. 0\n",
"72. 0\n",
"73. 1\n",
"74. 0\n",
"75. 1\n",
"76. 0\n",
"77. 0\n",
"78. 0\n",
"79. 1\n",
"80. 0\n",
"81. 1\n",
"82. 0\n",
"83. 0\n",
"84. 0\n",
"85. 1\n",
"86. 0\n",
"87. 1\n",
"88. 0\n",
"89. 0\n",
"90. 0\n",
"91. 1\n",
"92. 0\n",
"93. 1\n",
"94. 0\n",
"95. 0\n",
"96. 0\n",
"97. 1\n",
"98. 0\n",
"99. 1\n",
"100. 0\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1\n",
" [38] 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0\n",
" [75] 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] 4\n"
]
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. 0\n",
"3. 0\n",
"4. 1\n",
"5. 1\n",
"6. 1\n",
"7. 1\n",
"8. 0\n",
"9. 0\n",
"10. 1\n",
"11. 1\n",
"12. 1\n",
"13. 1\n",
"14. 0\n",
"15. 0\n",
"16. 1\n",
"17. 1\n",
"18. 1\n",
"19. 1\n",
"20. 0\n",
"21. 0\n",
"22. 1\n",
"23. 1\n",
"24. 1\n",
"25. 1\n",
"26. 0\n",
"27. 0\n",
"28. 1\n",
"29. 1\n",
"30. 1\n",
"31. 1\n",
"32. 0\n",
"33. 0\n",
"34. 1\n",
"35. 1\n",
"36. 1\n",
"37. 1\n",
"38. 0\n",
"39. 0\n",
"40. 1\n",
"41. 1\n",
"42. 1\n",
"43. 1\n",
"44. 0\n",
"45. 0\n",
"46. 1\n",
"47. 1\n",
"48. 1\n",
"49. 1\n",
"50. 0\n",
"51. 0\n",
"52. 1\n",
"53. 1\n",
"54. 1\n",
"55. 1\n",
"56. 0\n",
"57. 0\n",
"58. 1\n",
"59. 1\n",
"60. 1\n",
"61. 1\n",
"62. 0\n",
"63. 0\n",
"64. 1\n",
"65. 1\n",
"66. 1\n",
"67. 1\n",
"68. 0\n",
"69. 0\n",
"70. 1\n",
"71. 1\n",
"72. 1\n",
"73. 1\n",
"74. 0\n",
"75. 0\n",
"76. 1\n",
"77. 1\n",
"78. 1\n",
"79. 1\n",
"80. 0\n",
"81. 0\n",
"82. 1\n",
"83. 1\n",
"84. 1\n",
"85. 1\n",
"86. 0\n",
"87. 0\n",
"88. 1\n",
"89. 1\n",
"90. 1\n",
"91. 1\n",
"92. 0\n",
"93. 0\n",
"94. 1\n",
"95. 1\n",
"96. 1\n",
"97. 1\n",
"98. 0\n",
"99. 0\n",
"100. 1\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1\n",
" [38] 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0\n",
" [75] 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X=xor_random <- function(n = 100, filter=c(1,0,1,0), seed=c(1,0,1,0)) {\n",
" res = seed\n",
" m = length(filter)\n",
" print(m)\n",
" for(i in (length(seed)):(n-1)) { # Yes, you need to put parenthesis around n-1 :(\n",
" res[i+1] = sum(filter*(res[(i-m+1):i]))%%2 # Yes, you need to put parenthesis around i-m+1 :(\n",
" }\n",
" res\n",
"}\n",
"xor_random()\n",
"xor_random(seed=c(1,0,0,1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ouh là, tout ceci n'a rien d'aléatoire. Il y a deux séquences entrelacées et la longueur du cycle est 8. Essayons avec d'autres paramètres."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] 4\n"
]
},
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>1</li>\n",
"\t<li>0</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 0\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 1\n",
"\\item 0\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. 1\n",
"3. 0\n",
"4. 1\n",
"5. 0\n",
"6. 1\n",
"7. 1\n",
"8. 1\n",
"9. 1\n",
"10. 0\n",
"11. 0\n",
"12. 0\n",
"13. 1\n",
"14. 0\n",
"15. 0\n",
"16. 1\n",
"17. 1\n",
"18. 0\n",
"19. 1\n",
"20. 0\n",
"21. 1\n",
"22. 1\n",
"23. 1\n",
"24. 1\n",
"25. 0\n",
"26. 0\n",
"27. 0\n",
"28. 1\n",
"29. 0\n",
"30. 0\n",
"31. 1\n",
"32. 1\n",
"33. 0\n",
"34. 1\n",
"35. 0\n",
"36. 1\n",
"37. 1\n",
"38. 1\n",
"39. 1\n",
"40. 0\n",
"41. 0\n",
"42. 0\n",
"43. 1\n",
"44. 0\n",
"45. 0\n",
"46. 1\n",
"47. 1\n",
"48. 0\n",
"49. 1\n",
"50. 0\n",
"51. 1\n",
"52. 1\n",
"53. 1\n",
"54. 1\n",
"55. 0\n",
"56. 0\n",
"57. 0\n",
"58. 1\n",
"59. 0\n",
"60. 0\n",
"61. 1\n",
"62. 1\n",
"63. 0\n",
"64. 1\n",
"65. 0\n",
"66. 1\n",
"67. 1\n",
"68. 1\n",
"69. 1\n",
"70. 0\n",
"71. 0\n",
"72. 0\n",
"73. 1\n",
"74. 0\n",
"75. 0\n",
"76. 1\n",
"77. 1\n",
"78. 0\n",
"79. 1\n",
"80. 0\n",
"81. 1\n",
"82. 1\n",
"83. 1\n",
"84. 1\n",
"85. 0\n",
"86. 0\n",
"87. 0\n",
"88. 1\n",
"89. 0\n",
"90. 0\n",
"91. 1\n",
"92. 1\n",
"93. 0\n",
"94. 1\n",
"95. 0\n",
"96. 1\n",
"97. 1\n",
"98. 1\n",
"99. 1\n",
"100. 0\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1\n",
" [38] 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0\n",
" [75] 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xor_random(filter=c(1,1,0,0),seed=c(1,1,0,1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cela semble mieux, la longueur du cycle est de 16. Est-ce satisfaisant pour autant ? À vous de voir... À vous de concevoir de nouveaux algorithmes de génération et d'imaginer des tests d'aléa.."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![Well, maybe those numbers are just intrinsically better!](http://imgs.xkcd.com/comics/ayn_random.png)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.4.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment