openct-tasks/bebras/2014/2014-FR-20-shell/old_index_en.html

250 lines
12 KiB
HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>2014-FR-20</title>
<link class="module" rel="stylesheet" href="../../../_common/modules/pemFioi/taskStyles-0.1.css" id="http://www.france-ioi.org/modules/pemFioi/taskStyles-0.1.css">
<script class="module" type="text/javascript" src="../../../_common/modules/ext/jquery/1.7/jquery.min.js" id="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script class="module" type="text/javascript" src="../../../_common/modules/ext/raphael/2.2.1/raphael.min.js" id="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.2.1/raphael.min.js"></script>
<script class="module" type="text/javascript" src="../../../_common/modules/ext/json/json2.min.js" id="https://github.com/douglascrockford/JSON-js"></script>
<script class="module" type="text/javascript" src="../../../_common/modules/pemFioi/beaver-task.js" id="http://www.france-ioi.org/modules/pemFioi/beaver-task.js"></script>
<script class="remove" type="text/javascript" src="../../../_common/modules/integrationAPI.01/installationAPI.01/pemFioi/installation.js" id="http://www.france-ioi.org/modules/integrationAPI.01/installationAPI.01/pemFioi/installation.js"></script>
<script class="remove" type="text/javascript" src="../../../_common/modules/ext/jschannel/jschannel.js"></script>
<script class="proxy module" type="text/javascript" src="../../../_common/modules/integrationAPI.01/official/platform-pr.js" id="http://www.france-ioi.org/modules/integrationAPI.01/official/platform-pr.js"></script>
<script class="stdButtonsAndMessages module" type="text/javascript" src="../../../_common/modules/integrationAPI.01/installationAPI.01/pemFioi/buttonsAndMessages.js" id="http://www.france-ioi.org/modules/integrationAPI.01/installationAPI.01/pemFioi/buttonsAndMessages.js"></script>
<script class="remove" type="text/javascript" src="../../../_common/modules/integrationAPI.01/official/miniPlatform.js" id="http://www.france-ioi.org/modules/integrationAPI.01/official/miniPlatform.js"></script>
<script class="remove" type="text/javascript">
var json = {
"id": "http://castor-informatique.fr/tasks/2014/2014-FR-20-shell/",
"language": "en",
"version": "en.01",
"authors": "Arthur Chargueraud, France-ioi",
"translators": [],
"license": "CC BY-SA 3.0",
"taskPathPrefix": "",
"modulesPathPrefix": "",
"browserSupport": [],
"fullFeedback": true
};
</script>
<script>
var stringsLanguage = 'en';
var taskStrings = {
lsNotFollowedByText: "The ls command should not be followed by text.\n",
noFilePresent: "No files present.",
kBUnit: "kB",
rmFollowedByFileName: "The rm command must be followed by a filename.",
invalidFileName: "The specified file name is invalid.",
nonexistentFileName: "The specified file does not exist. Unable to delete it.",
fileDeleted: "The file has been deleted.",
commandFollowedByTwoFileNames: function(command) {
return "The " + command + " command must be followed by two file names..";
},
invalidFirstFileName: "The first specified file name is invalid.",
invalidSecondFileName: "The second specified file name is invalid.",
twoFileNamesMustBeDifferent: "The two names provided must be different\n(Uppercase and lowercase are considered equivalent).",
nonexistentFirstFileName: "The first file does not exist.",
fileAlreadyExists: "There is already a file with this name.",
cantCopyIt: "Can not copy it.",
cantCopy: "Unable to copy.",
fileCopied: "The file has been copied.",
cantRenameIt: "Can not rename it.",
cantRename: "Unable to Rename.",
fileRenamed: "The file has been renamed.",
unrecognizedCommand: "Command is not recognized",
unrecognized1s: "Note that 'ls' begins with the letter 'L' and not with the digit '1'.",
success: "Congratulations, you have succeeded!",
failure: "You did not get the required goal. <br />Try again."
};
</script>
<script type="text/javascript" src="task.js"></script>
<style>
.shell, .inline_shell, #shell_input {
font-size: 1.2em; /* line-height: 120%; */
font-family: monospace;
line-height: 140%;
}
.shell,.inline_shell {
color: white;
background: black;
}
.shell {
padding: 5px;
margin-left: 1em;
margin-right: 1em;
}
.inline_shell {
padding: 3px;
}
.commands {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.commands li {
padding-bottom: 0.4em;
line-height: 150%;
}
.objective {
width: 100%;
border-collapse: collapse;
}
.objective td {
vertical-align: top;
width: 50%;
}
.objective span {
margin: 0em 0.6em 0em 0.6em;
display: block;
}
.easy, .hard {
display: none;
}
</style>
</head>
<body>
<div id="task">
<img src="icon.png" style="display:none" >
<h1>Terminal</h1>
<p>
You have an application to edit files with the following commands&nbsp;:
</p>
<div class="easy">
<ul class="commands">
<li><span class="inline_shell">ls</span> Displays the name and size of all files. for example,
display <span class="inline_shell">zora&nbsp;&nbsp;50&nbsp;ko</span> indicates that there is a named file «&nbsp;zora&nbsp;» of size 50&nbsp;kB. </li>
<li><span class="inline_shell">rm</span> to delete a file. for example,
<span class="inline_shell">rm&nbsp;titi</span> deletes the named file «&nbsp;titi&nbsp;».</li>
</ul>
<p>Your goal is to find the two files with the largest sizes and <b> delete </b> these two files and only those.</p>
</div>
<div class="hard">
<ul class="commands">
<li><span class="inline_shell">ls</span> Displays the name and size (in KB) of all the files present.</li>
<li><span class="inline_shell">rm</span> Delete a file. For example,
<span class="inline_shell">rm&nbsp;titi</span> deletes the file named «&nbsp;titi&nbsp;».</li>
<li><span class="inline_shell">mv</span> Rename a file. For example,
<span class="inline_shell">mv&nbsp;titi&nbsp;toto</span> rename the file «&nbsp;titi&nbsp;» to be «&nbsp;toto&nbsp;».</li>
<li><span class="inline_shell">cp</span> Copy a file. for example,
<span class="inline_shell">cp&nbsp;titi&nbsp;toto</span> creates a copy of the file «&nbsp;titi&nbsp;» with name «&nbsp;toto&nbsp;».</li>
</ul>
<table class="objective">
<tr>
<td>
<span>You have two files&nbsp;:</span>
</td>
<td>
<span style="margin-right:0">Your goal is to <b> exchange names </b> of both files, to get&nbsp;:</span>
</td>
<tr>
<td>
<pre class="shell">
momo 50 ko
zora 90 ko
</pre>
</td>
<td>
<pre class="shell">
momo 90 ko
zora 50 ko
</pre>
</td>
</tr>
</table>
</div>
<center>
<div><textarea class="shell" disabled id="shell_output" rows="8" cols="80" style="overflow-y: scroll"></textarea></div>
<div><span>Command&nbsp;: </span>
<input type="text" id="shell_input" maxlength="50" size="50">
<input type="button" onclick="task.executeInput()" value="Enter"></div>
<div><span id="infos"></span></div>
</center>
</div><!-- task -->
<div id="solution">
<!--
<h2>Solution</h2>
<div class="easy">
<p>Il faut tout d'abord découvrir combien de fichiers existent et quels sont leurs tailles. La commande <span class="inline_shell">ls</span> le permet.</p>
<pre class="shell">
$ ls
bibi 90 ko
momo 30 ko
toto 70 ko
zora 50 ko
</pre>
<p>On observe alors que les deux fichiers les plus gros sont : «&nbsp;bibi&nbsp;» et «&nbsp;toto&nbsp;». Commençons par supprimer
le premier, à l'aide de la commande <span class="inline_shell">rm</span>.</p>
<pre class="shell">
$ rm bibi
Le fichier a été supprimé.
</pre>
<p>On peut ensuite supprimer le second, en utilisant à nouveau la commande <span class="inline_shell">rm</span>.</p>
<pre class="shell">
$ rm toto
Le fichier a été supprimé.
</pre>
<p>On peut alors exécuter <span class="inline_shell">ls</span> afin de vérifier qu'il reste bien les deux plus petits fichiers.</p>
<pre class="shell">
$ ls
momo 30 ko
zora 50 ko
</pre>
</div>
<div class="hard">
<p>Une approche qui ne fonctionne pas serait de d'abord essayer de renommer le fichier «&nbsp;momo&nbsp;» en «&nbsp;zora&nbsp;» puis de renommer «&nbsp;zora&nbsp;» en «&nbsp;momo&nbsp;». En effet, à la suite de la première étape on aurait deux fichiers différents portant le même nom «&nbsp;zora&nbsp;», ce que le système n'autorise pas.</p>
<p>Pour pouvoir échanger les noms des deux fichiers, il faut utiliser un troisième nom, utilisé de manière temporaire. Ce nom peut être choisi comme on veut, prenons par exemple «&nbsp;temp&nbsp;». On va donc procéder en trois étapes&nbsp;:</p>
<ol>
<li>on renomme «&nbsp;momo&nbsp;» en «&nbsp;temp&nbsp;»,</li>
<li>on renomme «&nbsp;zora&nbsp;» en «&nbsp;momo&nbsp;»,</li>
<li>on renomme «&nbsp;temp&nbsp;» en «&nbsp;zora&nbsp;».</li>
</ol>
<p>Pour effectuer chacun des trois renommages, on utilise la commande <span class="inline_shell">mv</span>.</p>
<pre class="shell">
$ mv momo temp
Le fichier a été renommé.
</pre>
<pre class="shell">
$ mv zora momo
Le fichier a été renommé.
</pre>
<pre class="shell">
$ mv temp zora
Le fichier a été renommé.
</pre>
<p>On peut alors exécuter <span class="inline_shell">ls</span> afin de vérifier qu'on a bien obtenu le résultat souhaité.</p>
<pre class="shell">
$ ls
momo 90 ko
zora 50 ko
</pre>
</div>
<h2>C'est de l'informatique !</h2>
<p>Tous les ordinateurs se basent sur des «&nbsp;systèmes de fichiers&nbsp;». Même si l'on ne le voit pas toujours, tous les appareils photos numériques, les tablettes, et les téléphones de type «&nbsp;smartphone&nbsp;» s'appuient également sur des fichiers.
</p>
<p>
Un fichier contient des données (par exemple du texte, une image, etc&hellip;) ou bien les instructions d'un programme. Chaque fichier porte un nom. Ce nom est parfois choisi automatiquement, comme lorsqu'on prend une photo avec un appareil photo numérique, mais il peut également être spécifié par l'utilisateur, comme lorsqu'on enregistre un document créé avec un traitement de texte.
</p>
<p>La plupart des systèmes modernes permettent de «&nbsp;renommer&nbsp;» un fichier (changer son nom) à travers ce que l'on appelle une «&nbsp;interface graphique&nbsp;», dans laquelle on peut voir le nom du fichier, cliquer dessus, modifier le nom, puis valider. Cependant, aux débuts de l'informatique, les interfaces graphiques n'existaient pas. La seule manière de renommer, déplacer, copier, ou supprimer des fichiers consistait à utiliser des interfaces en «&nbsp;ligne de commande&nbsp;», comme il fallait le faire dans ce sujet.
</p>
<p>
Les interfaces en «&nbsp;ligne de commande&nbsp;» existent toujours dans les systèmes actuels, même si elles sont souvent cachées<!-- et réservées aux utilisateurs avancés-->. Dans certains cas, l'interface en ligne de commande permet d'effectuer des opérations complexes plus rapidement qu'avec une interface graphique. Surtout, les actions effectuées en ligne de commande peuvent être facilement effectuées de nouveau de manière automatique, ce qui permet de «&nbsp;programmer&nbsp;» des manipulations de fichiers.
</p>
-->
</div> <!-- task-solution -->
</body>
</html>