[plm] 04/13: these patches are integrated upstream

Martin Quinson mquinson at moszumanska.debian.org
Sat Jan 2 21:09:10 UTC 2016


This is an automated email from the git hooks/post-receive script.

mquinson pushed a commit to branch master
in repository plm.

commit 686e067208634daca26bebe6791b2d325965e4f0
Author: Martin Quinson <martin.quinson at loria.fr>
Date:   Fri Jan 1 12:52:02 2016 +0100

    these patches are integrated upstream
---
 debian/patches/no-github |  209 --
 debian/patches/series    |    2 -
 debian/patches/translate | 6519 ----------------------------------------------
 3 files changed, 6730 deletions(-)

diff --git a/debian/patches/no-github b/debian/patches/no-github
deleted file mode 100644
index acde146..0000000
--- a/debian/patches/no-github
+++ /dev/null
@@ -1,209 +0,0 @@
----
- src/plm/core/ui/FeedbackDialog.java |  161 ------------------------------------
- src/plm/core/ui/MainFrame.java      |   13 --
- 2 files changed, 1 insertion(+), 173 deletions(-)
-
-Index: b/src/plm/core/ui/FeedbackDialog.java
-===================================================================
---- a/src/plm/core/ui/FeedbackDialog.java
-+++ /dev/null
-@@ -1,161 +0,0 @@
--package plm.core.ui;
--
--import java.awt.BorderLayout;
--import java.awt.Color;
--import java.awt.Dimension;
--import java.awt.Label;
--import java.awt.event.ActionEvent;
--import java.awt.event.ActionListener;
--import java.io.IOException;
--
--import javax.swing.JButton;
--import javax.swing.JDialog;
--import javax.swing.JEditorPane;
--import javax.swing.JOptionPane;
--import javax.swing.JPanel;
--import javax.swing.JScrollPane;
--import javax.swing.JTextField;
--import javax.swing.ScrollPaneConstants;
--
--import org.eclipse.egit.github.core.Issue;
--import org.eclipse.egit.github.core.client.GitHubClient;
--import org.eclipse.egit.github.core.service.IssueService;
--import org.xnap.commons.i18n.I18n;
--import org.xnap.commons.i18n.I18nFactory;
--
--import plm.core.model.Game;
--import plm.core.model.lesson.Exercise;
--import plm.core.model.lesson.Exercise.WorldKind;
--import plm.core.model.tracking.GitUtils;
--import plm.universe.World;
--
--public class FeedbackDialog extends JDialog {
--
--	private static final long serialVersionUID = 0;
--	private static FeedbackDialog instance = null;
--
--	public I18n i18n = I18nFactory.getI18n(getClass(), "org.plm.i18n.Messages", getLocale(), I18nFactory.FALLBACK);
--	final JEditorPane feedback = new JEditorPane();
--	final JTextField title = new JTextField();
--
--	public static FeedbackDialog getInstance() {
--		if (FeedbackDialog.instance == null) {
--			FeedbackDialog.instance = new FeedbackDialog();
--		}
--		StringBuffer worldInfo = new StringBuffer();
--		for (World w:((Exercise)Game.getInstance().getCurrentLesson().getCurrentExercise()).getWorlds(WorldKind.ANSWER)) {
--			String s = w.getDebugInfo();
--			if (s != "") 
--				worldInfo.append("World: "+s+"\n");
--		}
--
--		FeedbackDialog.instance.feedback.setText(FeedbackDialog.instance.i18n.tr(
--				  "Please write your suggestion here, with all necessary details\n"
--				+ "(if possible in English or French).\n\n"
--				+ "When you find a typo or a sentence that is hard to understand, \n"
--				+ "it really helps to suggest a new wording.\n\n"
--				+ "If you encounter a technical bug, please tell us what you did,\n"
--				+ "which outcome you were expecting and what happened instead.\n\n"
--				+ "  but DO NEVER DISCLOSE A PASSWORD to a bug tracker. Never."
--				+ "\n\n--------------------[ Technical Information ]--------------------\n"
--				+ "(This can help us fixing your problem, please don't erase)\n"
--				) /* The rest is not translated */
--				+ "\nLesson: "+Game.getInstance().getCurrentLesson().getId() + "\n"
--				+ "Exercise: "+Game.getInstance().getCurrentLesson().getCurrentExercise().getId() + "\n"
--				+ worldInfo.toString()
--				+ "Programming Language: "+Game.getProgrammingLanguage().getLang() + "\n"
--				+ "Locale: "+Game.getInstance().getLocale().getDisplayName() + "\n"
--				+ "Java version: " + System.getProperty("java.version") + " (VM: " + System.getProperty("java.vm.name") + "; version: " + System.getProperty("java.vm.version") + ")" + "\n"
--				+ "OS: " + System.getProperty("os.name") + " (version: " + System.getProperty("os.version") + "; arch: " + System.getProperty("os.arch") + ")" + "\n"
--				+ "PLM version: " + Game.getProperty("plm.major.version", "internal", false) + " (" + Game.getProperty("plm.minor.version", "internal", false) + ")" + "\n"
--				+ "Public user ID: PLM"+GitUtils.sha1(Game.getInstance().getUsers().getCurrentUser().getUserUUIDasString())+ "\n");
--		
--		FeedbackDialog.instance.title.setText(FeedbackDialog.instance.i18n.tr("Please describe the problem in a few words"));
--		FeedbackDialog.instance.pack();
--		return FeedbackDialog.instance;
--	}
--
--	private FeedbackDialog() {
--		super(MainFrame.getInstance(), "Report your feedback", false);
--		this.setTitle(i18n.tr("Report your feedback"));
--		initComponent();
--	}
--
--	public void initComponent() {
--
--		setLayout(new BorderLayout());
--		JPanel headerToolbar = new JPanel();
--		headerToolbar.add(new Label(i18n.tr("Issue title:")));
--		headerToolbar.add(title);
--		add(headerToolbar, BorderLayout.NORTH);
--
--		feedback.setBackground(Color.white);
--		feedback.setOpaque(true);
--		feedback.setEditable(true);
--		JScrollPane jsp = new JScrollPane(feedback);
--		jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
--		jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
--		add(jsp, BorderLayout.CENTER);
--
--		feedback.setContentType("text/plain");
--
--		final JButton cancelBtn = new JButton(i18n.tr("Cancel"));
--		cancelBtn.addActionListener(new ActionListener() {
--			@Override
--			public void actionPerformed(ActionEvent e) {
--				int dialogResult = JOptionPane.showConfirmDialog(cancelBtn,
--																 i18n.tr("Do you really want to cancel your feedback and lose any edit?"),
--																 i18n.tr("are you sure?"),
--																 JOptionPane.YES_NO_OPTION);
--				if (dialogResult == JOptionPane.YES_OPTION) {
--					dispose();
--				}
--			}
--		});
--
--		final JButton sendBtn = new JButton(i18n.tr("Send feedback"));
--		sendBtn.addActionListener(new ActionListener() {
--			GitHubClient client = new GitHubClient();
--
--			@Override
--			public void actionPerformed(ActionEvent e) {
--				client.setOAuth2Token(Game.getProperty("plm.github.oauth"));
--				Issue issue = new Issue();
--				issue.setTitle(title.getText());
--				issue.setBody(feedback.getText());
--				IssueService issueService = new IssueService(client);
--				try {
--					Issue i = issueService.createIssue(Game.getProperty("plm.github.owner"), Game.getProperty("plm.github.repo"), issue);
--					JOptionPane.showMessageDialog(sendBtn, i18n.tr(
--							  "Thank you for your remark, we will do our best to integrate it.\n"
--							+ "Follow our progress at {0}.",i.getHtmlUrl()), i18n.tr("Thanks for your suggestion"), JOptionPane.INFORMATION_MESSAGE);
--					dispose();
--				} catch (IOException ex) {
--					StringBuffer ctn = new StringBuffer(ex.getLocalizedMessage() + "\n");
--					for (StackTraceElement elm : ex.getStackTrace()) {
--						ctn.append(elm.toString()).append("\n");
--					}
--					JOptionPane.showMessageDialog(cancelBtn,
--												  ctn.toString(),
--												  i18n.tr("Error while uploading your feedback"),
--												  JOptionPane.ERROR_MESSAGE);
--					ex.printStackTrace();
--				}
--			}
--		});
--
--		JPanel toolbar = new JPanel();
--		toolbar.add(cancelBtn);
--		toolbar.add(sendBtn);
--		add(toolbar, BorderLayout.SOUTH);
--
--		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
--		pack();
--		setMinimumSize(new Dimension(200, 600));
--		setPreferredSize(new Dimension(500, 800));
--		setResizable(true);
--
--		setLocationRelativeTo(getParent());
--	}
--
--}
-Index: b/src/plm/core/ui/MainFrame.java
-===================================================================
---- a/src/plm/core/ui/MainFrame.java
-+++ b/src/plm/core/ui/MainFrame.java
-@@ -93,7 +93,7 @@ public class MainFrame extends JFrame im
- 
-     private JMenu menuLanguage, menuLangHuman, menuLangProg;
-     private JMenu menuHelp;
--    private JMenuItem miHelpFeedback, miHelpLesson,miHelpWorld,miHelpAbout;
-+    private JMenuItem miHelpLesson,miHelpWorld,miHelpAbout;
-         
- 	private LoggerPanel outputArea;
- 	private MissionEditorTabs met;
-@@ -388,16 +388,6 @@ public class MainFrame extends JFrame im
- 		menuHelp = new JMenu(i18n.tr("Help"));
- 		menuHelp.setMnemonic(KeyEvent.VK_H);
- 		menuBar.add(menuHelp);
--
--		miHelpFeedback = new JMenuItem(new AbstractGameAction(g, i18n.tr("Provide feedback")) {
--			private static final long serialVersionUID = 1L;
--
--			public void actionPerformed(ActionEvent arg0) {
--				FeedbackDialog.getInstance().setVisible(true);
--			}			
--		});
--		miHelpFeedback.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, ActionEvent.CTRL_MASK));
--		menuHelp.add(miHelpFeedback);
- 		
- 		miHelpLesson = new JMenuItem(new AbstractGameAction(g, i18n.tr("About this lesson")) {
- 			private static final long serialVersionUID = 1L;
-@@ -760,7 +750,6 @@ public class MainFrame extends JFrame im
- 		menuLangProg.setText(i18n.tr("Computer"));
- 		
- 		menuHelp.setText(i18n.tr("Help"));
--		miHelpFeedback.setText(i18n.tr("Provide feedback"));
- 		miHelpLesson.setText(i18n.tr("About this lesson"));
- 		miHelpWorld.setText(i18n.tr("About this world"));
- 		if (miHelpAbout != null)
diff --git a/debian/patches/series b/debian/patches/series
index 135fdba..79b92f8 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1 @@
 system-ant-tasks
-no-github
-translate
diff --git a/debian/patches/translate b/debian/patches/translate
deleted file mode 100644
index ebac2b7..0000000
--- a/debian/patches/translate
+++ /dev/null
@@ -1,6519 +0,0 @@
----
- l10n/engine/fr.po                                                   |  215 +
- l10n/engine/pt_BR.po                                                |   43 
- l10n/missions/fr.po                                                 | 1289 +++++----
- l10n/missions/it.po                                                 |  444 ---
- l10n/missions/plm.pot                                               |  371 --
- l10n/missions/pt_BR.po                                              | 1290 ++++++----
- po4a.conf                                                           |    6 
- src/lessons/maze/island/IslandMaze.pt_BR.html                       |   75 
- src/lessons/maze/short_desc.pt_BR.html                              |    7 
- src/lessons/recursion/cons/AllDifferent.fr.html                     |   11 
- src/lessons/recursion/cons/ButLast.fr.html                          |    8 
- src/lessons/recursion/cons/ButNfirst.fr.html                        |    8 
- src/lessons/recursion/cons/ButNlast.fr.html                         |   14 
- src/lessons/recursion/cons/Concat.fr.html                           |   14 
- src/lessons/recursion/cons/Increasing.fr.html                       |    9 
- src/lessons/recursion/cons/IsMember.fr.html                         |    8 
- src/lessons/recursion/cons/Last.fr.html                             |    7 
- src/lessons/recursion/cons/Length.fr.html                           |    8 
- src/lessons/recursion/cons/Main.fr.html                             |   32 
- src/lessons/recursion/cons/Main.pt_BR.html                          |   24 
- src/lessons/recursion/cons/Min.fr.html                              |    9 
- src/lessons/recursion/cons/Nfirst.fr.html                           |   11 
- src/lessons/recursion/cons/Nlast.fr.html                            |   14 
- src/lessons/recursion/cons/Nth.fr.html                              |    9 
- src/lessons/recursion/cons/Occurrence.fr.html                       |    9 
- src/lessons/recursion/cons/PlusOne.fr.html                          |    8 
- src/lessons/recursion/cons/Remove.fr.html                           |    9 
- src/lessons/recursion/cons/Reverse.fr.html                          |   15 
- src/lessons/recursion/cons/universe/ConsWorld.fr.html               |   36 
- src/lessons/recursion/koch/Koch.fr.html                             |   19 
- src/lessons/recursion/short_desc.pt_BR.html                         |    7 
- src/lessons/recursion/tree/Tree.fr.html                             |   18 
- src/lessons/sort/baseball/Main.pt_BR.html                           |   50 
- src/lessons/sort/basic/Main.pt_BR.html                              |   24 
- src/lessons/sort/basic/bubble/AlgBubbleSort1.pt_BR.html             |   17 
- src/lessons/sort/basic/cocktail/AlgCocktailSort1.pt_BR.html         |   27 
- src/lessons/sort/basic/cocktail/AlgCocktailSort2.pt_BR.html         |   19 
- src/lessons/sort/basic/cocktail/AlgCocktailSort3.pt_BR.html         |   10 
- src/lessons/sort/basic/comb/AlgCombSort.pt_BR.html                  |   37 
- src/lessons/sort/basic/comb/AlgCombSort11.pt_BR.html                |    9 
- src/lessons/sort/basic/gnome/AlgGnomeSort.pt_BR.html                |   17 
- src/lessons/sort/basic/insertion/AlgInsertionSort.pt_BR.html        |   60 
- src/lessons/sort/basic/selection/AlgSelectionSort.pt_BR.html        |   23 
- src/lessons/sort/basic/shell/AlgShellSort.pt_BR.html                |   48 
- src/lessons/sort/basic/short_desc.pt_BR.html                        |    8 
- src/lessons/sort/dutchflag/DutchFlagAlgo.pt_BR.html                 |   33 
- src/lessons/sort/dutchflag/Main.pt_BR.html                          |   22 
- src/lessons/sort/dutchflag/short_desc.pt_BR.html                    |    6 
- src/lessons/sort/dutchflag/universe/DutchFlagWorld.pt_BR.html       |    2 
- src/lessons/sort/pancake/BasicPancake.fr.html                       |    7 
- src/lessons/sort/pancake/Main.pt_BR.html                            |    6 
- src/lessons/turmites/Main.pt_BR.html                                |   36 
- src/lessons/turmites/helloturmite/HelloTurmite.pt_BR.html           |    2 
- src/lessons/turmites/langton/Langton.pt_BR.html                     |   49 
- src/lessons/turmites/langtoncolors/LangtonColors.pt_BR.html         |   43 
- src/lessons/turmites/short_desc.pt_BR.html                          |    7 
- src/lessons/turtleart/Main.pt_BR.html                               |   28 
- src/lessons/welcome/traversal/column/TraversalByColumn.pt_BR.html   |   17 
- src/lessons/welcome/traversal/diagonal/TraversalDiagonal.pt_BR.html |   10 
- src/lessons/welcome/traversal/line/TraversalByLine.pt_BR.html       |   14 
- src/lessons/welcome/traversal/zigzag/TraversalZigZag.pt_BR.html     |    5 
- 62 files changed, 2999 insertions(+), 1936 deletions(-)
-
---- a/l10n/missions/fr.po
-+++ b/l10n/missions/fr.po
-@@ -6,7 +6,7 @@
- msgid ""
- msgstr ""
- "Project-Id-Version: PLM mission texts\n"
--"POT-Creation-Date: 2014-10-06 17:06+0200\n"
-+"POT-Creation-Date: 2014-11-13 13:47+0100\n"
- "PO-Revision-Date: 2014-10-08 00:04+0200\n"
- "Last-Translator: Martin Quinson\n"
- "Language-Team: French <>\n"
-@@ -5807,7 +5807,6 @@
- 
- #. type: Content of: <p>
- #: src/lessons/welcome/methods/picture/PatternPicture.html:11
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:41
- msgid "Good luck!"
- msgstr "Bon courage !"
- 
-@@ -9593,7 +9592,6 @@
- 
- #. type: Content of: <h2>
- #: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:9
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:8
- msgid "Provided functions"
- msgstr "Fonctions fournies"
- 
-@@ -9904,16 +9902,10 @@
- 
- #. type: Content of: <p>
- #: src/lessons/sort/pancake/BasicPancake.html:13
--#, fuzzy
--#| msgid ""
--#| "Your work is to help this poor guy sorting his stack by flipping the "
--#| "pancakes. Each pancake is defined by its radius and rank within the "
--#| "stack, with the top-most pancake is at rank 0, and the one below at rank "
--#| "1."
- msgid ""
- "Your work is to help this poor guy sorting his stack by flipping the "
- "pancakes. Each pancake is defined by its radius and rank within the stack, "
--"where the bottom pancake is at rank 0, and the one above at rank 1."
-+"with the top-most pancake is at rank 0, and the one below at rank 1."
- msgstr ""
- "Vous devez aider ce pauvre homme à trier sa pile en retournant des crêpes. "
- "Chaque crêpe est définie par son rayon et son rang dans la pile. La pile la "
-@@ -11264,7 +11256,6 @@
- 
- #. type: Content of: <pre>
- #: src/plm/universe/turtles/TurtleWorld.html:22
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:10
- #, no-wrap
- msgid ""
- "[!java|c]double [/!]getX()[!scala]:Double[/!]\n"
-@@ -11572,6 +11563,15 @@
- "tail</code>. Of course, the empty list has no head nor the tail, so trying "
- "to access these elements will result in an (unpleasant) error message."
- msgstr ""
-+"Une telle liste peut être soit la liste vide (notée <code>[!scala]Nil[/!][!"
-+"java]null[/!][!python]None[/!]</code>), soit un entier suivi d'une liste. Si "
-+"une liste n'est pas vide, vous pouvez retrouver son premier entier avec "
-+"<code>list.head</code>. On dit qu'on extrait alors la tête de la liste.La "
-+"liste contenant ses autres éléments (tous sauf la tête) peut être retrouvée "
-+"avec <code>list.tail</code>. On dit qu'on extrait la suite de la liste.Bien "
-+"entendu, la liste vide n'a ni tête ni suite, et vous ne devriez pas tenter "
-+"d'accéder à ces éléments sous peine d'obtenir un message d'erreur "
-+"(particulièrement déplaisant)."
- 
- #. type: Content of: <p>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:20
-@@ -11581,6 +11581,10 @@
- "tail</code> Note that <code>::</code> is a generic operator in Scala to "
- "build lists.[/!]"
- msgstr ""
-+"Pour construire votre propre liste, vous devez concaténer une tête et une "
-+"suite comme suit : [!java|python]<code>cons(tête, suite)</code>[/!] [!"
-+"scala]<code>tête::suite</code>. Il se trouve que <code>::</code> est un "
-+"opérateur générique du langage Scala pour construire des listes.[/!]"
- 
- #. type: Content of: <p>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:26
-@@ -11588,6 +11592,8 @@
- "So, in summary, you can solve every exercises of this lesson with the "
- "following constructs."
- msgstr ""
-+"En résumé, vous pouvez résoudre tous les exercices de cette leçon avec les "
-+"constructions suivantes :"
- 
- #. type: Content of: <ul><li>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:30
-@@ -11603,24 +11609,24 @@
- #. type: Content of: <ul><li>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:31
- msgid "<b>Get the first element of <code>l</code></b>"
--msgstr ""
-+msgstr "<b>Obtenir le premier élément de <code>l</code></b>"
- 
- #. type: Content of: <ul><li><pre>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:31
- #, no-wrap
- msgid "l.head"
--msgstr ""
-+msgstr "l.head"
- 
- #. type: Content of: <ul><li>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:32
- msgid "<b>Get the rest of the list</b>, when the first element is removed:"
--msgstr ""
-+msgstr "<b>Obtenir la suite de la liste</b>, privée de son premier élément:"
- 
- #. type: Content of: <ul><li><pre>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:32
- #, no-wrap
- msgid "l.tail"
--msgstr ""
-+msgstr "l.tail"
- 
- #. type: Content of: <ul><li>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:33
-@@ -11628,18 +11634,20 @@
- "<b>Build a list</b> from a <code>value</code> and a <code>list</code>: [!"
- "java|python]"
- msgstr ""
-+"<b>Construire une liste</b> à partir d'une <code>valeur</code> et d'une "
-+"<code>liste</code>: [!java|python]"
- 
- #. type: Content of: <ul><li><pre>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:34
- #, no-wrap
- msgid "cons(value, list)"
--msgstr ""
-+msgstr "cons(valeur, liste)"
- 
- #. type: Content of: <ul><li><pre>
- #: src/lessons/recursion/cons/universe/ConsWorld.html:35
- #, no-wrap
- msgid "value::list"
--msgstr ""
-+msgstr "valeur::liste"
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Main.html:2
-@@ -11653,6 +11661,10 @@
- "is certainly not the most pleasant lesson to do, but I think that it is the "
- "easiest of the PLM lessons dealing with recursion."
- msgstr ""
-+"Cette leçon propose un paquet d'exercices classiques sur les listes "
-+"récursives. Il ne s'agit certainement pas de la leçon la plus drôle de la "
-+"PLM, mais il s'agit certainement de la plus simple des leçons PLM sur la "
-+"récursivité."
- 
- #. type: Content of: <ul><li>
- #: src/lessons/recursion/cons/Main.html:10
-@@ -11661,6 +11673,10 @@
- "Teaching/TOP/02-td-recursivite-enonce.pdf If you know some others, please "
- "report them as an issue."
- msgstr ""
-+"De nouveaux exercices pourraient être proposés, par exemple inspirés de "
-+"http://webloria.loria.fr/~quinson/Teaching/TOP/02-td-recursivite-enonce.pdf "
-+"Si vous en connaissez d'autres, nous vous serions reconnaissant de nous en "
-+"parler dans un rapport d'anomalie."
- 
- #. type: Content of: <ul><li>
- #: src/lessons/recursion/cons/Main.html:13
-@@ -11675,11 +11691,22 @@
- "pass a given threshold, but that sounds very difficult too. Any idea is "
- "welcome."
- msgstr ""
-+"Il serait intéressant de vérifier la complexité algorithmique du code "
-+"proposé par les étudiants, mais cela semble assez difficile à faire. En "
-+"Python et Java, nous proposons un type de donnée spécifique (les "
-+"<code>RecList</code>) alors nous pourrions compter le nombre de cons "
-+"réalisés dans chaque exercice, mais il risque d'être compliqué de trouver le "
-+"test auquel rattacher chaque opération. En Scala, cela s'annonce encore plus "
-+"difficile car nous utilisons directement des mots-clés du langage. Il serait "
-+"probablement difficile d'y injecter un mécanisme comptant les opérations. On "
-+"pourrait vouloir assurer que la pile d'appel ne dépasse pas une profondeur "
-+"donnée, mais cela semble également difficile à implémenter. Si vous avez des "
-+"idées, merci de nous en faire part."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Length.html:2
- msgid "Length"
--msgstr ""
-+msgstr "Longueur"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/Length.html:3
-@@ -11687,6 +11714,9 @@
- "Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return its "
- "length[!scala] (without using its <code>size</code> method, of course)[/!]."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] "
-+"retournez sa longueur[!scala], sans utiliser la méthode <code>size</code> de "
-+"la liste, bien entendu[/!]."
- 
- #. type: Content of: <p>
- #: src/lessons/recursion/cons/Length.html:5
-@@ -11700,12 +11730,12 @@
- #: src/lessons/recursion/cons/Remove.html:8
- #: src/lessons/recursion/cons/ButNfirst.html:6
- msgid "Your solution should be linear in time."
--msgstr ""
-+msgstr "Votre solution devrait être linéaire en temps."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/IsMember.html:2
- msgid "IsMember"
--msgstr ""
-+msgstr "EstMembre"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/IsMember.html:3
-@@ -11714,6 +11744,9 @@
- "integer, return true if the given integer is one of the elements of the "
- "list, or false if it cannot be found."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un "
-+"entier,retournez <code>true</code> si cet entier fait partie des éléments de "
-+"la liste, et <code>false</code> sinon."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Occurrence.html:2
-@@ -11728,6 +11761,9 @@
- "If the integer is not a member of the list, the function should thus return "
- "0."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un "
-+"entier,retournez le nombre d'occurences de cet entier dans la liste. Si "
-+"l'entier n'est pas membre de la liste, la fonction doit renvoyer 0."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Last.html:2
-@@ -11740,11 +11776,14 @@
- "Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return its "
- "last element.  You can assume that the list is not empty."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!],"
-+"retournez son dernier élément. Vous pouvez supposer que la liste n'est pas "
-+"vide."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Min.html:2
- msgid "Min"
--msgstr ""
-+msgstr "Min"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/Min.html:3
-@@ -11753,11 +11792,15 @@
- "smallest of its values.  You will probably need an extra function, even if "
- "you can assume that the list is not empty."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!],"
-+"retournez la plus petite de ses valeurs. Vous aurez probablement besoin "
-+"d'une fonction supplémentaire, mais vous pouvez supposer que la liste n'est "
-+"pas vide."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Increasing.html:2
- msgid "Increasing"
--msgstr ""
-+msgstr "Croissante"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/Increasing.html:3
-@@ -11766,6 +11809,9 @@
- "whether its elements form an increasing sequence (i.e., if the elements are "
- "sorted from the smallest to the largest one)."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!],"
-+"retournez <code>true</code> si ses éléments forment une suite croissante "
-+"(c'est-à-dire si ses éléments sont classés du plus petit au plus grand)."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/ButLast.html:2
-@@ -11779,11 +11825,14 @@
- "list containing every elements but the last one.  You can assume that the "
- "list is not empty."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!],"
-+"retournez la liste contenant tous ses éléments sauf le dernier. Vous pouvez "
-+"supposer que la liste n'est pas vide."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/PlusOne.html:2
- msgid "PlusOne"
--msgstr ""
-+msgstr "PlusUn"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/PlusOne.html:3
-@@ -11791,11 +11840,14 @@
- "Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return a new "
- "list containing all elements of your parameter incremented by one."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!],"
-+"retournez une nouvelle liste dont les éléments sont ceux de votre paramètre, "
-+"incrémentés de un."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Remove.html:2
- msgid "Remove"
--msgstr ""
-+msgstr "Retire"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/Remove.html:4
-@@ -11808,7 +11860,7 @@
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Nth.html:2
- msgid "Nth"
--msgstr ""
-+msgstr "Nième"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/Nth.html:3
-@@ -11824,11 +11876,14 @@
- "You can assume that the list is long enough, i.e. that there is at least "
- "<code>N</code> elements.  Your solution should be linear in time."
- msgstr ""
-+"Vous pouvez supposer que la liste est suffisamment longue, c'est à dire "
-+"qu'elle contient au moins <code>N</code> éléments. Votre solution devrait "
-+"être linéaire en temps."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Nfirst.html:2
- msgid "Nfirst"
--msgstr ""
-+msgstr "nPremiers"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/Nfirst.html:3
-@@ -11838,11 +11893,15 @@
- "elements. You can assume that the list is long enough, i.e. that there is at "
- "least <code>N</code> elements."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un "
-+"entier <code>N</code>, retournez la liste constituée de ses <code>N</code> "
-+"premiers éléments. Vous pouvez supposer que la liste est suffisamment "
-+"longue, c'est à dire qu'elle contient au moins <code>N</code> éléments."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Nlast.html:2
- msgid "Nlast"
--msgstr ""
-+msgstr "nDerniers"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/Nlast.html:3
-@@ -11850,6 +11909,9 @@
- "Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
- "<code>N</code>, return the list with only the <code>N</code> last elements."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un "
-+"entier <code>N</code>, retournez la liste constituée de ses <code>N</code> "
-+"derniers éléments. "
- 
- #. type: Content of: <p>
- #: src/lessons/recursion/cons/Nlast.html:6
-@@ -11858,6 +11920,8 @@
- "Your solution should be linear in time, but you will probably need to define "
- "several functions to achieve that complexity."
- msgstr ""
-+"Votre solution devrait être linéaire en temps, mais vous aurez probablement "
-+"besoin de définir plusieurs fonctions pour atteindre cette complexité."
- 
- #. type: Attribute 'alt' of: <div>
- #: src/lessons/recursion/cons/Nlast.html:8
-@@ -11865,7 +11929,7 @@
- #: src/lessons/recursion/cons/Reverse.html:8
- #: src/lessons/recursion/cons/Concat.html:8
- msgid "I cannot do it in linear time"
--msgstr ""
-+msgstr "Je n'arrive pas à le faire en temps linéaire"
- 
- #. type: Content of: <div>
- #: src/lessons/recursion/cons/Nlast.html:9
-@@ -11874,11 +11938,13 @@
- "The trick is to compute only once (and beforehand) how many elements you "
- "should keep."
- msgstr ""
-+"L'astuce est de calculer une seule fois (et à l'avance) combien d'éléments "
-+"il faut garder."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/ButNfirst.html:2
- msgid "But Nfirst"
--msgstr ""
-+msgstr "Sauf nPremiers"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/ButNfirst.html:3
-@@ -11886,11 +11952,14 @@
- "Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
- "<code>N</code>, return the list without the <code>N</code> first elements."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un "
-+"entier <code>N</code>, retournez la liste privée de ses <code>N</code> "
-+"premiers éléments. "
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/ButNlast.html:2
- msgid "But Nlast"
--msgstr ""
-+msgstr "Sauf nDerniers"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/ButNlast.html:3
-@@ -11898,6 +11967,9 @@
- "Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
- "<code>N</code>, return the list without the <code>N</code> last elements."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un "
-+"entier <code>N</code>, retournez la liste privée de ses <code>N</code> "
-+"derniers éléments."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Reverse.html:2
-@@ -11910,6 +11982,8 @@
- "Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return a new "
- "list with all elements in reverse order."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!], "
-+"retournez la liste constituée de ses éléments en ordre inverse."
- 
- #. type: Content of: <p>
- #: src/lessons/recursion/cons/Reverse.html:5
-@@ -11917,6 +11991,9 @@
- "This function is very important and you should not pass that challenge.  "
- "Your solution should be linear in time, with the help of helper functions."
- msgstr ""
-+"Cette fonction est très importante et vous ne devriez pas passer ce défi "
-+"sans trouver la réponse, qui doit être linéaire grâce à l'aide de fonctions "
-+"supplémentaires."
- 
- #. type: Content of: <div>
- #: src/lessons/recursion/cons/Reverse.html:9
-@@ -11924,11 +12001,13 @@
- "You need an helper function in which the result is accumulated (built) at "
- "each step."
- msgstr ""
-+"Il faut réaliser une fonction d'aide dont le résultat est accumulé "
-+"(construit) à chaque étape."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/Concat.html:2
- msgid "Concat"
--msgstr ""
-+msgstr "Concaténation"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/Concat.html:3
-@@ -11937,6 +12016,10 @@
- "code> and <code>l2</code>, return a new list with all elements of <code>l1</"
- "code> followed by the elements of <code>l2</code>."
- msgstr ""
-+"Étant donnée deux [!scala]List[Int][/!][java|python]listes récursives[/!] "
-+"<code>l1</code> et <code>l2</code>, retournez la liste constituée de tous "
-+"les éléments de <code>l1</code> suivis de tous les éléments de <code>l2</"
-+"code>."
- 
- #. type: Content of: <p>
- #: src/lessons/recursion/cons/Concat.html:6
-@@ -11950,11 +12033,13 @@
- "You need to modify <code>l1</code> beforehand so that the computations at "
- "each step of the recursion are in constant time."
- msgstr ""
-+"Il faut modifier <code>l1</code> au préalable pour s'assurer que chaque "
-+"étape récursive soit en temps constant."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/cons/AllDifferent.html:2
- msgid "All Different"
--msgstr ""
-+msgstr "Tous différents"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/recursion/cons/AllDifferent.html:3
-@@ -11963,6 +12048,9 @@
- "if any two elements of the list are different (ie, if no element appears "
- "more than once in the list)."
- msgstr ""
-+"Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!], "
-+"retournez <code>false</code> si deux éléments ont la même valeur, et "
-+"<code>true</code> si tous les éléments sont différents deux à deux."
- 
- #. type: Content of: <p>
- #: src/lessons/recursion/cons/AllDifferent.html:6
-@@ -11971,6 +12059,10 @@
- "You will probably have to define one extra function for that.  Another much "
- "more complex solution runs in O(n log(n))."
- msgstr ""
-+"La solution la plus simple est en O(n²), ce qui veut dire qu'elle s'exécute "
-+"en temps quadratique. Vous aurez probablement besoin de définir une fonction "
-+"supplémentaire pour cela. Une autre solution bien plus complexe s'exécute en "
-+"O(n log(n))."
- 
- #. type: Content of: <h1>
- #: src/lessons/recursion/Main.html:2
-@@ -12312,6 +12404,13 @@
- "  Turn 60 degrees to the left\n"
- "  Draw recursively a smaller segment\n"
- msgstr ""
-+"Dessiner récursivement un segment plus petit\n"
-+"Tourner à 60 degrés vers la gauche\n"
-+"Dessiner récursivement un segment plus petit\n"
-+"Tourner à 120 degrés vers la droite\n"
-+"Dessiner récursivement un segment plus petit\n"
-+"Tourner à 60 degrés vers la gauche\n"
-+"Dessiner récursivement un segment plus petit\n"
- 
- #. type: Content of: <p>
- #: src/lessons/recursion/koch/Koch.html:30
-@@ -12319,6 +12418,9 @@
- "As you can see, the function forward() is not called from the recursive "
- "case, only in the base case when there is no recursive call."
- msgstr ""
-+"Comme vous pouvez le constater, la fonction avance() n'est pas appelée dans "
-+"le cas récursif, mais seulement dans le cas de base, quand il n'y a plus "
-+"d'appel récursif."
- 
- #. type: Attribute 'alt' of: <p><div>
- #: src/lessons/recursion/koch/Koch.html:34
-@@ -12552,6 +12654,8 @@
- "At the end, here is the pseudo-code of the general case (you should add the "
- "base case yourself):"
- msgstr ""
-+"Au final, voici le pseudo-code du cas général de la récursivité (il manque "
-+"bien sûr le cas de base, laissé en exercice)."
- 
- #. type: Content of: <p><p><p><p><pre>
- #: src/lessons/recursion/tree/Tree.html:18
-@@ -12562,6 +12666,10 @@
- "  Draw (recursively) the left subtree\n"
- "  Move back to your initial position\n"
- msgstr ""
-+"Avancer de la longueur désirée\n"
-+"Dessiner (récursivement) le sous-arbre de droite\n"
-+"Dessiner (récursivement) le sous-arbre de gauche\n"
-+"Reculer de la longueur désirée pour retourner au point de départ\n"
- 
- #. type: Content of: <p><p><p><p><p>
- #: src/lessons/recursion/tree/Tree.html:23
-@@ -12570,6 +12678,9 @@
- "infinite loop.  Then, drawing the right subtree comes down to turn right and "
- "then draw the subtree."
- msgstr ""
-+"N'oubliez pas d'ajouter le cas de base dans votre code, ou la buggle va "
-+"entrer en boucle infinie. De plus, dessiner le sous-arbre droit revient à "
-+"tourner à droite puis dessiner un sous-arbre."
- 
- #. type: Content of: <p><p><p><p><p>
- #: src/lessons/recursion/tree/Tree.html:26
-@@ -15274,506 +15385,6 @@
- "à la place du 'a'). Les différentes chaînes \"yak\" ne se chevauchent pas."
- 
- #. type: Content of: <h2>
--#: src/lessons/lander/Main.html:2 src/lessons/lander/short_desc.html:2
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:2
--msgid "Lunar Lander"
--msgstr "Alunisseur"
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:4 src/lessons/lander/short_desc.html:4
--msgid ""
--"In this lesson you pilot a lunar landing module in increasingly complex "
--"situations."
--msgstr ""
--"Dans cette leçon, vous pilotez un alunisseur dans des situations de plus en "
--"plus complexes."
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:7
--msgid ""
--"At each step of the simulation, the player issues a command controlling how "
--"much the angle and thrust of the lander should change"
--msgstr ""
--"À chaque pas de la simulation, le joueur donne des commandes contrôlant "
--"l'angle et la poussée du module d'alunissage."
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:10
--msgid "Ideas concerning the progression of exercises:"
--msgstr "Idées d'exercices à ajouter à la progression proposée :"
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:12
--msgid ""
--"A lander in vertical position above flat ground, the player can only control "
--"thrust (done)"
--msgstr ""
--"Un alunisseur en position verticale au dessus d'un sol plat. Le joueur ne "
--"peut régler que la poussée (c'est fait)."
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:14
--msgid ""
--"A lander in vertical position not above flat ground, the player control "
--"thrust and angle (done)"
--msgstr ""
--"Un alunisseur en position verticale pas au dessus d'un sol plat. Le joueur "
--"peut régler la poussée et l'angle (c'est fait)."
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:16
--msgid ""
--"A lander with difficult angle and speed not above flat ground, the player "
--"control thrust and angle"
--msgstr ""
--"Un alunisseur avec un angle et une vitesse difficile, pas au dessus d'un sol "
--"plat. Le joueur contrôle la poussée et l'angle."
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:18
--msgid ""
--"A lander with difficult angle and speed not above flat ground, with "
--"difficult ground, the player control thrust and angle"
--msgstr ""
--"Un alunisseur avec un angle et une vitesse difficile, pas au dessus d'un sol "
--"plat dans une configuration difficile. Le joueur contrôle la poussée et "
--"l'angle."
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:20
--msgid "Same with wind?"
--msgstr "La même chose avec du vent ?"
--
--#. type: Content of: <p>
--#: src/lessons/lander/short_desc.html:7
--msgid "This lesson assumes some basic programming and physics skills."
--msgstr ""
--"Vous êtes supposé maîtriser les bases de la programmation et posséder "
--"quelques notions de mécanique du point avant de tenter cette leçon."
--
--#. type: Content of: <p>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:4
--msgid ""
--"In this universe you pilot a lunar lander. At each simulation step you're "
--"given the lander's position, speed, angle and thrust and must issue a "
--"command adjusting its angle and thrust."
--msgstr ""
--"Dans cet univers, vous contrôlez un module d'alunissage. À chaque pas de la "
--"simulation, vous avez accès à la position du module, sa vitesse, son angle "
--"et la poussée de son moteur. Vous devez alors décider de l'angle et de la "
--"poussée pour l'étape suivante. "
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:12
--msgid "Get the X and Y position of the lander."
--msgstr "Retourne la position en X et Y du module d'alunissage."
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:13
--#, no-wrap
--msgid ""
--"[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
--"[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"
--msgstr ""
--"[!java|c]double [/!]getVitesseX()[!scala]:Double[/!]\n"
--"[!java|c]double [/!]getVitesseY()[!scala]:Double[/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:15
--msgid "Get the horizontal and vertical speed of the lander."
--msgstr "Obtenir les vitesses horizontale et verticale du module."
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:17
--#, no-wrap
--msgid ""
--"[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
--"[!java|c]void [/!]setDesiredAngle([!java|c]double [/!]desiredAngle[!scala]:Double[/!])"
--msgstr ""
--"[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
--"[!java|c]void [/!]setAngleDesire([!java|c]double [/!]angle[!scala]:Double[/!])"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:19
--msgid "Get or set the angle of the lander."
--msgstr "Retourne ou fixe l'angle du module d'alunissage."
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:20
--msgid ""
--"An angle of 0° denotes a vertical position where the \"head\" of the lander "
--"points up.  This is the angle you must land with. A positive angle denotes a "
--"left-leaning lander, a negative angle a right-leaning one. You cannot lean "
--"more than by ±90°, and the angle can vary by at most ±5° in one step."
--msgstr ""
--"Un angle de O° dénote une position verticale, avec le sommet du module "
--"dirigé vers le haut. C'est l'angle avec lequel vous devez vous poser. Un "
--"angle positif indique que le module penche vers la gauche tandis qu'un angle "
--"négatif indique au contraire qu'il penche à droite. Il est impossible de se "
--"pencher à plus de ±90°, et on ne peut pas pencher le module de plus de ±5° "
--"en une fois."
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:25
--#, no-wrap
--msgid ""
--"[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
--"[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"
--msgstr ""
--"[!java|c]int [/!]getPoussee()[!scala]:Int[/!]\n"
--"[!java|c]void [/!]setPousseeDesiree([!java|c]int [/!]poussée[!scala]:Int[/!])"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
--msgid "Get or set the thrust of the lander."
--msgstr "Retourne ou fixe la poussée du module."
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
--msgid ""
--"You can only increment or decrement the thrust by 1 between two simulation "
--"steps, so if the current thrust is 2 and you ask for 4, you'll only get 3 in "
--"the next step. If you ask for less than 0 (resp. more than 4), everything "
--"will be as if you had asked for 0 (resp. 4)."
--msgstr ""
--"Vous ne pouvez incrémenter ou décrémenter la poussée que d'une unité à "
--"chaque fois. Si votre poussée actuelle est de 2 et que vous demandez une "
--"poussée de 4, vous n'obtiendrez que 3 au prochain pas de temps. Si vous "
--"demandez moins que 0 (ou plus que 4), tout se passera comme si vous "
--"demandiez 0 (ou 4)."
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:33
--#, no-wrap
--msgid "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
--msgstr "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:34
--msgid ""
--"Get the remaining fuel in the lander.  At each step of the simulation the "
--"lander consumes as many fuel units as the current thrust. Once you run out "
--"of fuel you're in free fall so beware!"
--msgstr ""
--"Obtient la quantité de fuel restant dans le réservoir. À chaque pas de "
--"simulation, le module consomme entre 0 et 4 unités de fuel, en fonction de "
--"sa poussée. Une fois que vous avez utilisé tout votre carburant, vous êtes "
--"en chute libre alors prenez garde !"
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:38
--#, no-wrap
--msgid "[!java]List<Point> [/!]getGround()[! scala]:List[Point][/!]"
--msgstr "[!java]List<Point> [/!]getSol()[! scala]:List[Point][/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:39
--msgid ""
--"Get the vertices of the ground's profile from left to right.  [!java|"
--"scala]You can retrieve the X and Y coordinates of each point with the "
--"corresponding methods of your point: <code>p.x()</code> and <code>p.y()</"
--"code>.[!/] [!python]Each point is an array of two integers denoting "
--"respectively the X and Y coordinates of that point.[/!]"
--msgstr ""
--"Obtenir les points du sol de gauche à droite. [!java|scala]Vous pouvez "
--"retrouver les coordonnées X et Y de chaque point avec les méthodes "
--"correspondantes de votre point : <code>p.x()</code> et <code>p.y()</code>."
--"[/!] [!python]Chaque point est un tableau de deux entiers représentant "
--"respectivement les coordonnées X et Y de chaque point.[/!]"
--
--#. type: Content of: <h1>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:2
--msgid "Lander 101"
--msgstr "Se poser pour les nuls"
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:4
--msgid ""
--"Congratulations! You won a (one-way) trip to Mars in a cereal box. NASA was "
--"kind enough to donate the Lunar Excursion Module for this mission, so that's "
--"what you'll be flying."
--msgstr ""
--"Bravo ! Vous avez gagné dans une boîte de céréales un voyage (aller simple) "
--"pour Mars. La NASA vous a même fourni un module d'excursion lunaire pour "
--"l'occasion, et c'est donc avec ce véhicule que vous voyagerez."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:8
--msgid ""
--"Before you take off, you must go through some basic landing simulation. You "
--"shouldn't have to fly the lander if all goes as planned but, as they say, "
--"\"better safe than sorry\"."
--msgstr ""
--"Avant le décollage, vous devez vous entraîner sur simulateur aux bases de "
--"l'alunissage. Si tout se passe comme prévu, vous ne devriez pas avoir à "
--"voler en mode manuel, mais mieux vaut prévenir que guérir, comme ils disent."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:12
--msgid ""
--"Your mission is to <b>land the lander with a vertical speed of at most 10 m/"
--"s.</b> There are two ways you can influence the lander's course: by "
--"adjusting its angle or by adjusting its thrust. In this simulation we only "
--"care about adjusting the thrust, expressed in m/s²."
--msgstr ""
--"Votre mission est de <b>poser le module avec une vitesse verticale "
--"inférieure à 10 m/s</b>. Il y a deux façons d'influer sur la trajectoire du "
--"module : en modifiant son angle, ou en réglant la poussée de son moteur. "
--"Dans cette simulation, nous ne nous intéressons qu'à la poussée, exprimée en "
--"m/s²."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:17
--msgid ""
--"The [!python]<code>step()</code> function[/!][!scala|java|c]code[/!] that "
--"you should write now will be called every 0.1 second during the simulation. "
--"It should set the desired thrust of the next simulation step, by calling "
--"<code>[!java]void [/!]setDesiredThrust([!java]int [/!]desiredThrust[!scala]:"
--"Integer[/!])</code> where <code>desiredThrust</code> is some integer between "
--"0 and 4 (that is, a thrust between 0 m/s² and 4 m/s²). You can only "
--"increment or decrement the thrust by 1 between two simulation steps, so if "
--"the current thrust is 2 and you ask for 4, you'll only get 3 in the next "
--"step. If you ask for less than 0 (resp. more than 4), everything will be as "
--"if you had asked for 0 (resp. 4)."
--msgstr ""
--"Vous devez écrire le [!python]corps de la fonction <code>step()</code>, qui "
--"sera appelée[/!][!scala|java|c]code qui sera appellé[/!] tous les dixièmes "
--"de seconde pendant la simulation. Il faut ajuster la poussée du moteur en "
--"utilisant la fonction <code>[!java]void [/!]setPousseeDesiree([!java]int "
--"[/!]poussee[!scala]:Integer[/!])</code> où <code>poussee</code> est un "
--"entier entre 0 et 4 (représentant une poussée entre 0 m/s² et 4 m/s²). Vous "
--"ne pouvez incrémenter ou décrémenter la poussée que de 1 entre deux pas de "
--"la simulation. Ainsi, si la poussée du moteur est actuellement de 2 et que "
--"vous demandez 4, vous n'aurez que 3 à la prochaine étape. Si vous demandez "
--"une valeur inférieure à 0 (ou supérieure à 4), tout se passera comme si vous "
--"aviez demandé 0 (ou 4)."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:27
--msgid ""
--"In order to take informed decisions, you can query the lander's state. In "
--"this simulation you'll probably be interested in its vertical position: "
--"<code>[!java]double [/!]getY()[!scala]:Double[/!]</code>, and its vertical "
--"speed: <code>[!java]double [/!]getSpeedY()[!scala]:Double[/!]</code>. You "
--"can also ask for the thrust via <code>[!java]int [/!]getThrust()[!scala]:"
--"Integer[/!]</code> in case you don't remember what you asked for. Remember "
--"that Mars' gravity is 3.711 m/s², it might come in handy."
--msgstr ""
--"Afin de prendre des décisions informées, vous pouvez demander des "
--"informations sur l'état actuel du module. Dans cette simulation, vous ne "
--"serez probablement intéressé que par sa position verticale (accessible grâce "
--"à <code>[!java]double [/!]getY()[!scala]:Double[/!]</code>) et sa vitesse "
--"verticale (accessible grâce à <code>[!java]double [/!]getVitesseY()[!scala]:"
--"Double[/!]</code>). Vous pouvez également demander la poussée actuelle du "
--"moteur (avec <code>[!java]int [/!]getPoussee()[!scala]:Integer[/!]</code>) "
--"si vous avez oublié ce que vous avez demandé. Rappelez vous que la gravité "
--"martienne est de 3.711 m/s², cela peut vous être utile."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:35
--msgid ""
--"One last thing: the lander is pretty small so you don't have much fuel. At "
--"each step of the simulation the lander consumes as many fuel units as the "
--"current thrust. Once you run out of fuel you're in free fall so beware! You "
--"can consult the remaining amount of available fuel units using <code>[!"
--"java]int [/!]getFuel()[!scala]:Integer[/!]</code>."
--msgstr ""
--"Une dernière chose : le module est plutôt petit, et vous n'avez pas tant de "
--"carburant que cela. À chaque pas de simulation, il consomme autant d'unité "
--"de carburant que la poussée actuelle du moteur. Si vous tombez en panne "
--"sèche, vous serez en chute libre alors attention ! Vous pouvez consulter le "
--"niveau du réservoir avec <code>[!java]int [/!]getFuel()[!scala]:Integer[/!]</"
--"code>."
--
--#. type: Content of: <h2>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:2
--msgid "Locate a Landing Zone"
--msgstr "Repérer une zone plate"
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:4
--msgid ""
--"After 200 days of traveling space and eating cereals you finally reach Mars. "
--"Time to land at last!"
--msgstr ""
--"Après 200 jours de voyage intersidéral à manger des céréales, vous êtes "
--"enfin parvenu à la planète rouge. Il est enfin temps de se poser !"
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:7
--msgid ""
--"The lander is on autopilot and all you have to do is look around and tell it "
--"where to land. The lander must <b>land on a flat zone</b> it you want to "
--"remain in one piece. You indicate the lander where to land by modifying the "
--"<code>getLandingZone</code> function so that it returns a [!java|"
--"scala]<code>Segment</code> representing the zone of your choice."
--msgstr ""
--"Le module est en pilote automatique, et vous n'avez qu'à regarder autour de "
--"vous pour sélectionner une zone d'alunissage. Vous devez vous poser sur "
--"<b>une zone plate</b> si vous ne voulez pas vous scratcher. Vous indiquez au "
--"pilote automatique où se poser en modifiant la fonction "
--"<code>getLandingZone</code> de façon à ce qu'elle retourne [!java|scala]un "
--"Segment représentant la zone de votre choix."
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:13
--msgid ""
--"A segment is composed of two <code>Point</code>s, each of them composed of "
--"two <code>double</code>s. A segment is built via the <code>Segment([!"
--"java]Point [/!]start[!scala]:Point[/!], [!java]Point [/!]end[!scala]:"
--"Point[/!])</code> constructor.  A point is built via the <code>Point([!"
--"java]double [/!]x[!scala]:Double[/!], [!java]double [/!]y[!scala]:"
--"Double[/!])</code> constructor. A point's coordinates are accessible via its "
--"<code>[!java]double [/!]x()[!scala]:Double[/!]</code> and <code>[!"
--"java]double [/!]y()[!scala]:Double[/!]</code> methods."
--msgstr ""
--"Un Segment est composé de deux <code>Point</code>s, chacun composé de deux "
--"doubles. On construit un nouveau segment de la façon suivante : "
--"<code>Segment([!java]Point [/!]debut[!scala]:Point[/!], [!java]Point "
--"[/!]fin[!scala]:Point[/!])</code>. Pour créer de nouveaux points, il faut "
--"utiliser le constructeur <code>Point([!java]double [/!]x[!scala]:Double[/!], "
--"[!java]double [/!]y[!scala]:Double[/!])</code>. Les coordonnées d'un point "
--"sont accessibles grâce à ses méthodes <code>[!java]double [/!]x()[!scala]:"
--"Double[/!]</code> et <code>[!java]double [/!]y()[!scala]:Double[/!]</code>."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:18
--msgid ""
--"[/!] [!python]tuple of two X coordinates representing the zone of your "
--"choice.[/!]"
--msgstr ""
--"[/!] [!python]tuple de deux coordonnées X délimitant la zone de votre choix."
--"[/!]"
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:22
--msgid ""
--"In order to determine which zone to return, you'll need to call <code>[!"
--"java]List<Point> [/!]getGround()[!scala]List[Point][/!]</code>, which "
--"returns the vertices of the ground's profile as a list of [!java|"
--"scala]<code>Point</code>[/!] [!python]tuples (x,y)[/!]."
--msgstr ""
--"Pour déterminer la zone cible, vous devez appeler <code>[!java]List<"
--"Point> [/!]getSol()[!scala]:List[Point][/!]</code>, qui retourne les "
--"points qui composent la surface sous la forme d'une list de [!java|"
--"scala]<code>Point</code>[/!] [!python]tuples (x,y)[/!]."
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:27
--msgid ""
--"One more thing: your function should return a valid flat zone in any kind of "
--"situation, not just for the currently visualized one. That's because it will "
--"be not only tested against that world, but also against the one we had in "
--"the previous exercise. As usual, you can see the other existing worlds with "
--"the appropriate combobox."
--msgstr ""
--"Une dernière chose : votre fonction doit retourner une zone valide dans "
--"toutes les situations, pas seulement celle que l'on voit en ce moment. C'est "
--"que votre code sera utilisé dans ce cas, mais également dans la "
--"configuration que nous avions dans l'exercice précédent. Comme d'habitude, "
--"vous pouvez voir les autres mondes en les sélectionnant dans le combobox au "
--"dessus de la vue du monde."
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:33
--msgid ""
--"Have a safe landing! Don't forget to put on your space suit on your way out."
--msgstr ""
--"Bon alunissage ! N'oubliez pas de mettre votre combinaison spatiale en "
--"sortant."
--
--#. type: Content of: <h1>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:2
--msgid "Fly the Lander!"
--msgstr "Aux commandes du module"
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:4
--msgid ""
--"After 30 days of staring at rocks and eating cereals you decide it's time to "
--"go explore other parts of the planet."
--msgstr ""
--"Après 30 jours à regarder des cailloux en mangeant des céréales, vous "
--"décidez qu'il est temps d'aller explorer d'autres coins de cette planète."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:7
--msgid ""
--"You fly for a while and suddenly realize you're almost out of fuel.  "
--"Unfortunately you're in a delicate situation and the autopilot is helpless.  "
--"You will have to pilot the lander yourself. Your mission is to <b>land the "
--"lander on a flat zone with a vertical speed less than 10 m/s, an horizontal "
--"speed less than 5 m/s and an angle of 0°.</b>"
--msgstr ""
--"Vous volez un moment, avant de réaliser soudain que vous êtes presque à "
--"court d'essence. Le pilote automatique est malheureusement inutile dans ce "
--"genre de situation périlleuse, et vous allez devoir vous poser en mode "
--"manuel. Votre mission et de vous <b>poser sur une zone plate, avec une "
--"vitesse verticale inférieure à 10 m/s, une vitesse horizontale inférieure à "
--"5 m/s et un angle de 0°</b>."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:13
--msgid ""
--"You must define two functions: <code>[!java]void [/!]initialize()</code> and "
--"<code>[!java]void [/!]step()</code>. <code>initialize()</code> is called "
--"once just after you press \"Run\". You can use it to chose some flat zone. "
--"As before, <code>step()</code> is called every 0.1 second and is used for "
--"adjusting the lander's thrust and angle. As in the first exercise the "
--"lander's thrust is adjusted via <code>[!java]void [/!]setDesiredThrust([!"
--"java]int [/!]desiredThrust[!scala]:Integer[/!])</code>.  But you can also "
--"control its angle via <code>[!java]void [/!]setDesiredAngle([!java]double "
--"[/!]desiredAngle[!scala]:Double[/!])</code>.  An angle of 0° denotes a "
--"vertical position where the \"head\" of the lander points up.  This is the "
--"angle you must land with. A positive angle denotes a left-leaning lander, a "
--"negative angle a right-leaning one. You cannot lean more than by ±90°, and "
--"the angle can vary by at most ±5° in one step."
--msgstr ""
--"Vous devez définir deux fonctions : <code>[!java]void [/!]initialize()</"
--"code> et <code>[!java]void [/!]step()</code>. <code>initialize()</code> est "
--"appelée au moment où l'on appuie sur le bouton «Exécuter». Vous pouvez "
--"l'utiliser pour choisir une zone plate. Comme avant, <code>step()</code> est "
--"appelée tous les dixièmes de seconde pour vous permettre d'ajuster la "
--"poussée (avec la fonction  <code>[!java]void [/!]setPousseedesiree([!"
--"java]int [/!]poussee[!scala]:Integer[/!])</code>). Vous pouvez également "
--"contrôler l'angle du module avec la fonction <code>[!java]void "
--"[/!]setAngleDesire([!java]double [/!]angle[!scala]:Double[/!])</code>. Un "
--"angle de O° dénote une position verticale, avec le sommet du module dirigé "
--"vers le haut. C'est l'angle avec lequel vous devez vous poser. Un angle "
--"positif indique que le module penche vers la gauche tandis qu'un angle "
--"négatif indique au contraire qu'il penche à droite. Il est impossible de se "
--"pencher à plus de ±90°, et on ne peut pas pencher le module de plus de ±5° "
--"en une fois."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:26
--msgid ""
--"As in the previous exercise, <code>[!java]List<Point> [/!]getGround()[!"
--"scala]:List[Point][/!]</code> returns the vertices of the ground's profile "
--"from left to right.  Please refer to the documentation (Help/About this "
--"world) for a reference manual of your lunar lander."
--msgstr ""
--"Comme dans les exercices précédents, <code>[!java]List<Point> "
--"[/!]getSol()[!scala]:List[Point][/!]</code> retourne les points qui "
--"composent l'horizon. Le manuel de référence de votre module est disponible "
--"dans la documentation (Aide/À propos de ce monde)."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:30
--msgid ""
--"As before, your program must safely land the lander in all the situations "
--"encountered so far in addition to this new one."
--msgstr ""
--"Comme d'habitude, votre programme doit se poser sans heurt dans toutes les "
--"situations que nous avons rencontré jusqu'à présent, ainsi que dans ce "
--"nouveau cas."
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:33
--msgid "Good luck, try not to crash!"
--msgstr "Bonne chance. Essayez de ne pas vous scratcher ;)"
--
--#. type: Content of: <h2>
- #: lib/doc/MainWindow.html:1
- msgid "The PLM Main Window"
- msgstr "La fenêtre principale de PLM"
-@@ -16012,6 +15623,620 @@
- "Le bouton <b>marquer</b> demande à votre buggle de faire un trait au sol "
- "quand elle avance."
- 
-+#, fuzzy
-+#~| msgid ""
-+#~| "Your work is to help this poor guy sorting his stack by flipping the "
-+#~| "pancakes. Each pancake is defined by its radius and rank within the "
-+#~| "stack, with the top-most pancake is at rank 0, and the one below at rank "
-+#~| "1."
-+#~ msgid ""
-+#~ "Your work is to help this poor guy sorting his stack by flipping the "
-+#~ "pancakes. Each pancake is defined by its radius and rank within the "
-+#~ "stack, where the bottom pancake is at rank 0, and the one above at rank 1."
-+#~ msgstr ""
-+#~ "Vous devez aider ce pauvre homme à trier sa pile en retournant des "
-+#~ "crêpes. Chaque crêpe est définie par son rayon et son rang dans la pile. "
-+#~ "La pile la plus haute est de rang 0, et celle placée au dessous d'elle "
-+#~ "est de rang 1."
-+
-+#~ msgid "Lunar Lander"
-+#~ msgstr "Alunisseur"
-+
-+#~ msgid ""
-+#~ "In this lesson you pilot a lunar landing module in increasingly complex "
-+#~ "situations."
-+#~ msgstr ""
-+#~ "Dans cette leçon, vous pilotez un alunisseur dans des situations de plus "
-+#~ "en plus complexes."
-+
-+#~ msgid ""
-+#~ "At each step of the simulation, the player issues a command controlling "
-+#~ "how much the angle and thrust of the lander should change"
-+#~ msgstr ""
-+#~ "À chaque pas de la simulation, le joueur donne des commandes contrôlant "
-+#~ "l'angle et la poussée du module d'alunissage."
-+
-+#~ msgid "Ideas concerning the progression of exercises:"
-+#~ msgstr "Idées d'exercices à ajouter à la progression proposée :"
-+
-+#~ msgid ""
-+#~ "A lander in vertical position above flat ground, the player can only "
-+#~ "control thrust (done)"
-+#~ msgstr ""
-+#~ "Un alunisseur en position verticale au dessus d'un sol plat. Le joueur ne "
-+#~ "peut régler que la poussée (c'est fait)."
-+
-+#~ msgid ""
-+#~ "A lander in vertical position not above flat ground, the player control "
-+#~ "thrust and angle (done)"
-+#~ msgstr ""
-+#~ "Un alunisseur en position verticale pas au dessus d'un sol plat. Le "
-+#~ "joueur peut régler la poussée et l'angle (c'est fait)."
-+
-+#~ msgid ""
-+#~ "A lander with difficult angle and speed not above flat ground, the player "
-+#~ "control thrust and angle"
-+#~ msgstr ""
-+#~ "Un alunisseur avec un angle et une vitesse difficile, pas au dessus d'un "
-+#~ "sol plat. Le joueur contrôle la poussée et l'angle."
-+
-+#~ msgid ""
-+#~ "A lander with difficult angle and speed not above flat ground, with "
-+#~ "difficult ground, the player control thrust and angle"
-+#~ msgstr ""
-+#~ "Un alunisseur avec un angle et une vitesse difficile, pas au dessus d'un "
-+#~ "sol plat dans une configuration difficile. Le joueur contrôle la poussée "
-+#~ "et l'angle."
-+
-+#~ msgid "Same with wind?"
-+#~ msgstr "La même chose avec du vent ?"
-+
-+#~ msgid "This lesson assumes some basic programming and physics skills."
-+#~ msgstr ""
-+#~ "Vous êtes supposé maîtriser les bases de la programmation et posséder "
-+#~ "quelques notions de mécanique du point avant de tenter cette leçon."
-+
-+#~ msgid ""
-+#~ "In this universe you pilot a lunar lander. At each simulation step you're "
-+#~ "given the lander's position, speed, angle and thrust and must issue a "
-+#~ "command adjusting its angle and thrust."
-+#~ msgstr ""
-+#~ "Dans cet univers, vous contrôlez un module d'alunissage. À chaque pas de "
-+#~ "la simulation, vous avez accès à la position du module, sa vitesse, son "
-+#~ "angle et la poussée de son moteur. Vous devez alors décider de l'angle et "
-+#~ "de la poussée pour l'étape suivante. "
-+
-+#~ msgid "Get the X and Y position of the lander."
-+#~ msgstr "Retourne la position en X et Y du module d'alunissage."
-+
-+#~ msgid ""
-+#~ "[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
-+#~ "[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"
-+#~ msgstr ""
-+#~ "[!java|c]double [/!]getVitesseX()[!scala]:Double[/!]\n"
-+#~ "[!java|c]double [/!]getVitesseY()[!scala]:Double[/!]"
-+
-+#~ msgid "Get the horizontal and vertical speed of the lander."
-+#~ msgstr "Obtenir les vitesses horizontale et verticale du module."
-+
-+#~ msgid ""
-+#~ "[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
-+#~ "[!java|c]void [/!]setDesiredAngle([!java|c]double [/!]desiredAngle[!scala]:Double[/!])"
-+#~ msgstr ""
-+#~ "[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
-+#~ "[!java|c]void [/!]setAngleDesire([!java|c]double [/!]angle[!scala]:Double[/!])"
-+
-+#~ msgid "Get or set the angle of the lander."
-+#~ msgstr "Retourne ou fixe l'angle du module d'alunissage."
-+
-+#~ msgid ""
-+#~ "An angle of 0° denotes a vertical position where the \"head\" of the "
-+#~ "lander points up.  This is the angle you must land with. A positive angle "
-+#~ "denotes a left-leaning lander, a negative angle a right-leaning one. You "
-+#~ "cannot lean more than by ±90°, and the angle can vary by at most ±5° in "
-+#~ "one step."
-+#~ msgstr ""
-+#~ "Un angle de O° dénote une position verticale, avec le sommet du module "
-+#~ "dirigé vers le haut. C'est l'angle avec lequel vous devez vous poser. Un "
-+#~ "angle positif indique que le module penche vers la gauche tandis qu'un "
-+#~ "angle négatif indique au contraire qu'il penche à droite. Il est "
-+#~ "impossible de se pencher à plus de ±90°, et on ne peut pas pencher le "
-+#~ "module de plus de ±5° en une fois."
-+
-+#~ msgid ""
-+#~ "[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
-+#~ "[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"
-+#~ msgstr ""
-+#~ "[!java|c]int [/!]getPoussee()[!scala]:Int[/!]\n"
-+#~ "[!java|c]void [/!]setPousseeDesiree([!java|c]int [/!]poussée[!scala]:Int[/!])"
-+
-+#~ msgid "Get or set the thrust of the lander."
-+#~ msgstr "Retourne ou fixe la poussée du module."
-+
-+#~ msgid ""
-+#~ "You can only increment or decrement the thrust by 1 between two "
-+#~ "simulation steps, so if the current thrust is 2 and you ask for 4, you'll "
-+#~ "only get 3 in the next step. If you ask for less than 0 (resp. more than "
-+#~ "4), everything will be as if you had asked for 0 (resp. 4)."
-+#~ msgstr ""
-+#~ "Vous ne pouvez incrémenter ou décrémenter la poussée que d'une unité à "
-+#~ "chaque fois. Si votre poussée actuelle est de 2 et que vous demandez une "
-+#~ "poussée de 4, vous n'obtiendrez que 3 au prochain pas de temps. Si vous "
-+#~ "demandez moins que 0 (ou plus que 4), tout se passera comme si vous "
-+#~ "demandiez 0 (ou 4)."
-+
-+#~ msgid "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
-+#~ msgstr "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
-+
-+#~ msgid ""
-+#~ "Get the remaining fuel in the lander.  At each step of the simulation the "
-+#~ "lander consumes as many fuel units as the current thrust. Once you run "
-+#~ "out of fuel you're in free fall so beware!"
-+#~ msgstr ""
-+#~ "Obtient la quantité de fuel restant dans le réservoir. À chaque pas de "
-+#~ "simulation, le module consomme entre 0 et 4 unités de fuel, en fonction "
-+#~ "de sa poussée. Une fois que vous avez utilisé tout votre carburant, vous "
-+#~ "êtes en chute libre alors prenez garde !"
-+
-+#~ msgid "[!java]List<Point> [/!]getGround()[! scala]:List[Point][/!]"
-+#~ msgstr "[!java]List<Point> [/!]getSol()[! scala]:List[Point][/!]"
-+
-+#~ msgid ""
-+#~ "Get the vertices of the ground's profile from left to right.  [!java|"
-+#~ "scala]You can retrieve the X and Y coordinates of each point with the "
-+#~ "corresponding methods of your point: <code>p.x()</code> and <code>p.y()</"
-+#~ "code>.[!/] [!python]Each point is an array of two integers denoting "
-+#~ "respectively the X and Y coordinates of that point.[/!]"
-+#~ msgstr ""
-+#~ "Obtenir les points du sol de gauche à droite. [!java|scala]Vous pouvez "
-+#~ "retrouver les coordonnées X et Y de chaque point avec les méthodes "
-+#~ "correspondantes de votre point : <code>p.x()</code> et <code>p.y()</code>."
-+#~ "[/!] [!python]Chaque point est un tableau de deux entiers représentant "
-+#~ "respectivement les coordonnées X et Y de chaque point.[/!]"
-+
-+#~ msgid "Lander 101"
-+#~ msgstr "Se poser pour les nuls"
-+
-+#~ msgid ""
-+#~ "Congratulations! You won a (one-way) trip to Mars in a cereal box. NASA "
-+#~ "was kind enough to donate the Lunar Excursion Module for this mission, so "
-+#~ "that's what you'll be flying."
-+#~ msgstr ""
-+#~ "Bravo ! Vous avez gagné dans une boîte de céréales un voyage (aller "
-+#~ "simple) pour Mars. La NASA vous a même fourni un module d'excursion "
-+#~ "lunaire pour l'occasion, et c'est donc avec ce véhicule que vous "
-+#~ "voyagerez."
-+
-+#~ msgid ""
-+#~ "Before you take off, you must go through some basic landing simulation. "
-+#~ "You shouldn't have to fly the lander if all goes as planned but, as they "
-+#~ "say, \"better safe than sorry\"."
-+#~ msgstr ""
-+#~ "Avant le décollage, vous devez vous entraîner sur simulateur aux bases de "
-+#~ "l'alunissage. Si tout se passe comme prévu, vous ne devriez pas avoir à "
-+#~ "voler en mode manuel, mais mieux vaut prévenir que guérir, comme ils "
-+#~ "disent."
-+
-+#~ msgid ""
-+#~ "Your mission is to <b>land the lander with a vertical speed of at most 10 "
-+#~ "m/s.</b> There are two ways you can influence the lander's course: by "
-+#~ "adjusting its angle or by adjusting its thrust. In this simulation we "
-+#~ "only care about adjusting the thrust, expressed in m/s²."
-+#~ msgstr ""
-+#~ "Votre mission est de <b>poser le module avec une vitesse verticale "
-+#~ "inférieure à 10 m/s</b>. Il y a deux façons d'influer sur la trajectoire "
-+#~ "du module : en modifiant son angle, ou en réglant la poussée de son "
-+#~ "moteur. Dans cette simulation, nous ne nous intéressons qu'à la poussée, "
-+#~ "exprimée en m/s²."
-+
-+#~ msgid ""
-+#~ "The [!python]<code>step()</code> function[/!][!scala|java|c]code[/!] that "
-+#~ "you should write now will be called every 0.1 second during the "
-+#~ "simulation. It should set the desired thrust of the next simulation step, "
-+#~ "by calling <code>[!java]void [/!]setDesiredThrust([!java]int "
-+#~ "[/!]desiredThrust[!scala]:Integer[/!])</code> where <code>desiredThrust</"
-+#~ "code> is some integer between 0 and 4 (that is, a thrust between 0 m/s² "
-+#~ "and 4 m/s²). You can only increment or decrement the thrust by 1 between "
-+#~ "two simulation steps, so if the current thrust is 2 and you ask for 4, "
-+#~ "you'll only get 3 in the next step. If you ask for less than 0 (resp. "
-+#~ "more than 4), everything will be as if you had asked for 0 (resp. 4)."
-+#~ msgstr ""
-+#~ "Vous devez écrire le [!python]corps de la fonction <code>step()</code>, "
-+#~ "qui sera appelée[/!][!scala|java|c]code qui sera appellé[/!] tous les "
-+#~ "dixièmes de seconde pendant la simulation. Il faut ajuster la poussée du "
-+#~ "moteur en utilisant la fonction <code>[!java]void [/!]setPousseeDesiree([!"
-+#~ "java]int [/!]poussee[!scala]:Integer[/!])</code> où <code>poussee</code> "
-+#~ "est un entier entre 0 et 4 (représentant une poussée entre 0 m/s² et 4 m/"
-+#~ "s²). Vous ne pouvez incrémenter ou décrémenter la poussée que de 1 entre "
-+#~ "deux pas de la simulation. Ainsi, si la poussée du moteur est "
-+#~ "actuellement de 2 et que vous demandez 4, vous n'aurez que 3 à la "
-+#~ "prochaine étape. Si vous demandez une valeur inférieure à 0 (ou "
-+#~ "supérieure à 4), tout se passera comme si vous aviez demandé 0 (ou 4)."
-+
-+#~ msgid ""
-+#~ "In order to take informed decisions, you can query the lander's state. In "
-+#~ "this simulation you'll probably be interested in its vertical position: "
-+#~ "<code>[!java]double [/!]getY()[!scala]:Double[/!]</code>, and its "
-+#~ "vertical speed: <code>[!java]double [/!]getSpeedY()[!scala]:Double[/!]</"
-+#~ "code>. You can also ask for the thrust via <code>[!java]int "
-+#~ "[/!]getThrust()[!scala]:Integer[/!]</code> in case you don't remember "
-+#~ "what you asked for. Remember that Mars' gravity is 3.711 m/s², it might "
-+#~ "come in handy."
-+#~ msgstr ""
-+#~ "Afin de prendre des décisions informées, vous pouvez demander des "
-+#~ "informations sur l'état actuel du module. Dans cette simulation, vous ne "
-+#~ "serez probablement intéressé que par sa position verticale (accessible "
-+#~ "grâce à <code>[!java]double [/!]getY()[!scala]:Double[/!]</code>) et sa "
-+#~ "vitesse verticale (accessible grâce à <code>[!java]double "
-+#~ "[/!]getVitesseY()[!scala]:Double[/!]</code>). Vous pouvez également "
-+#~ "demander la poussée actuelle du moteur (avec <code>[!java]int "
-+#~ "[/!]getPoussee()[!scala]:Integer[/!]</code>) si vous avez oublié ce que "
-+#~ "vous avez demandé. Rappelez vous que la gravité martienne est de 3.711 m/"
-+#~ "s², cela peut vous être utile."
-+
-+#~ msgid ""
-+#~ "One last thing: the lander is pretty small so you don't have much fuel. "
-+#~ "At each step of the simulation the lander consumes as many fuel units as "
-+#~ "the current thrust. Once you run out of fuel you're in free fall so "
-+#~ "beware! You can consult the remaining amount of available fuel units "
-+#~ "using <code>[!java]int [/!]getFuel()[!scala]:Integer[/!]</code>."
-+#~ msgstr ""
-+#~ "Une dernière chose : le module est plutôt petit, et vous n'avez pas tant "
-+#~ "de carburant que cela. À chaque pas de simulation, il consomme autant "
-+#~ "d'unité de carburant que la poussée actuelle du moteur. Si vous tombez en "
-+#~ "panne sèche, vous serez en chute libre alors attention ! Vous pouvez "
-+#~ "consulter le niveau du réservoir avec <code>[!java]int [/!]getFuel()[!"
-+#~ "scala]:Integer[/!]</code>."
-+
-+#~ msgid "Locate a Landing Zone"
-+#~ msgstr "Repérer une zone plate"
-+
-+#~ msgid ""
-+#~ "After 200 days of traveling space and eating cereals you finally reach "
-+#~ "Mars. Time to land at last!"
-+#~ msgstr ""
-+#~ "Après 200 jours de voyage intersidéral à manger des céréales, vous êtes "
-+#~ "enfin parvenu à la planète rouge. Il est enfin temps de se poser !"
-+
-+#~ msgid ""
-+#~ "The lander is on autopilot and all you have to do is look around and tell "
-+#~ "it where to land. The lander must <b>land on a flat zone</b> it you want "
-+#~ "to remain in one piece. You indicate the lander where to land by "
-+#~ "modifying the <code>getLandingZone</code> function so that it returns a [!"
-+#~ "java|scala]<code>Segment</code> representing the zone of your choice."
-+#~ msgstr ""
-+#~ "Le module est en pilote automatique, et vous n'avez qu'à regarder autour "
-+#~ "de vous pour sélectionner une zone d'alunissage. Vous devez vous poser "
-+#~ "sur <b>une zone plate</b> si vous ne voulez pas vous scratcher. Vous "
-+#~ "indiquez au pilote automatique où se poser en modifiant la fonction "
-+#~ "<code>getLandingZone</code> de façon à ce qu'elle retourne [!java|"
-+#~ "scala]un Segment représentant la zone de votre choix."
-+
-+#~ msgid ""
-+#~ "A segment is composed of two <code>Point</code>s, each of them composed "
-+#~ "of two <code>double</code>s. A segment is built via the <code>Segment([!"
-+#~ "java]Point [/!]start[!scala]:Point[/!], [!java]Point [/!]end[!scala]:"
-+#~ "Point[/!])</code> constructor.  A point is built via the <code>Point([!"
-+#~ "java]double [/!]x[!scala]:Double[/!], [!java]double [/!]y[!scala]:"
-+#~ "Double[/!])</code> constructor. A point's coordinates are accessible via "
-+#~ "its <code>[!java]double [/!]x()[!scala]:Double[/!]</code> and <code>[!"
-+#~ "java]double [/!]y()[!scala]:Double[/!]</code> methods."
-+#~ msgstr ""
-+#~ "Un Segment est composé de deux <code>Point</code>s, chacun composé de "
-+#~ "deux doubles. On construit un nouveau segment de la façon suivante : "
-+#~ "<code>Segment([!java]Point [/!]debut[!scala]:Point[/!], [!java]Point "
-+#~ "[/!]fin[!scala]:Point[/!])</code>. Pour créer de nouveaux points, il faut "
-+#~ "utiliser le constructeur <code>Point([!java]double [/!]x[!scala]:"
-+#~ "Double[/!], [!java]double [/!]y[!scala]:Double[/!])</code>. Les "
-+#~ "coordonnées d'un point sont accessibles grâce à ses méthodes <code>[!"
-+#~ "java]double [/!]x()[!scala]:Double[/!]</code> et <code>[!java]double "
-+#~ "[/!]y()[!scala]:Double[/!]</code>."
-+
-+#~ msgid ""
-+#~ "[/!] [!python]tuple of two X coordinates representing the zone of your "
-+#~ "choice.[/!]"
-+#~ msgstr ""
-+#~ "[/!] [!python]tuple de deux coordonnées X délimitant la zone de votre "
-+#~ "choix.[/!]"
-+
-+#~ msgid ""
-+#~ "In order to determine which zone to return, you'll need to call <code>[!"
-+#~ "java]List<Point> [/!]getGround()[!scala]List[Point][/!]</code>, "
-+#~ "which returns the vertices of the ground's profile as a list of [!java|"
-+#~ "scala]<code>Point</code>[/!] [!python]tuples (x,y)[/!]."
-+#~ msgstr ""
-+#~ "Pour déterminer la zone cible, vous devez appeler <code>[!java]List<"
-+#~ "Point> [/!]getSol()[!scala]:List[Point][/!]</code>, qui retourne les "
-+#~ "points qui composent la surface sous la forme d'une list de [!java|"
-+#~ "scala]<code>Point</code>[/!] [!python]tuples (x,y)[/!]."
-+
-+#~ msgid ""
-+#~ "One more thing: your function should return a valid flat zone in any kind "
-+#~ "of situation, not just for the currently visualized one. That's because "
-+#~ "it will be not only tested against that world, but also against the one "
-+#~ "we had in the previous exercise. As usual, you can see the other existing "
-+#~ "worlds with the appropriate combobox."
-+#~ msgstr ""
-+#~ "Une dernière chose : votre fonction doit retourner une zone valide dans "
-+#~ "toutes les situations, pas seulement celle que l'on voit en ce moment. "
-+#~ "C'est que votre code sera utilisé dans ce cas, mais également dans la "
-+#~ "configuration que nous avions dans l'exercice précédent. Comme "
-+#~ "d'habitude, vous pouvez voir les autres mondes en les sélectionnant dans "
-+#~ "le combobox au dessus de la vue du monde."
-+
-+#~ msgid ""
-+#~ "Have a safe landing! Don't forget to put on your space suit on your way "
-+#~ "out."
-+#~ msgstr ""
-+#~ "Bon alunissage ! N'oubliez pas de mettre votre combinaison spatiale en "
-+#~ "sortant."
-+
-+#~ msgid "Fly the Lander!"
-+#~ msgstr "Aux commandes du module"
-+
-+#~ msgid ""
-+#~ "After 30 days of staring at rocks and eating cereals you decide it's time "
-+#~ "to go explore other parts of the planet."
-+#~ msgstr ""
-+#~ "Après 30 jours à regarder des cailloux en mangeant des céréales, vous "
-+#~ "décidez qu'il est temps d'aller explorer d'autres coins de cette planète."
-+
-+#~ msgid ""
-+#~ "You fly for a while and suddenly realize you're almost out of fuel.  "
-+#~ "Unfortunately you're in a delicate situation and the autopilot is "
-+#~ "helpless.  You will have to pilot the lander yourself. Your mission is to "
-+#~ "<b>land the lander on a flat zone with a vertical speed less than 10 m/s, "
-+#~ "an horizontal speed less than 5 m/s and an angle of 0°.</b>"
-+#~ msgstr ""
-+#~ "Vous volez un moment, avant de réaliser soudain que vous êtes presque à "
-+#~ "court d'essence. Le pilote automatique est malheureusement inutile dans "
-+#~ "ce genre de situation périlleuse, et vous allez devoir vous poser en mode "
-+#~ "manuel. Votre mission et de vous <b>poser sur une zone plate, avec une "
-+#~ "vitesse verticale inférieure à 10 m/s, une vitesse horizontale inférieure "
-+#~ "à 5 m/s et un angle de 0°</b>."
-+
-+#~ msgid ""
-+#~ "You must define two functions: <code>[!java]void [/!]initialize()</code> "
-+#~ "and <code>[!java]void [/!]step()</code>. <code>initialize()</code> is "
-+#~ "called once just after you press \"Run\". You can use it to chose some "
-+#~ "flat zone. As before, <code>step()</code> is called every 0.1 second and "
-+#~ "is used for adjusting the lander's thrust and angle. As in the first "
-+#~ "exercise the lander's thrust is adjusted via <code>[!java]void "
-+#~ "[/!]setDesiredThrust([!java]int [/!]desiredThrust[!scala]:Integer[/!])</"
-+#~ "code>.  But you can also control its angle via <code>[!java]void "
-+#~ "[/!]setDesiredAngle([!java]double [/!]desiredAngle[!scala]:Double[/!])</"
-+#~ "code>.  An angle of 0° denotes a vertical position where the \"head\" of "
-+#~ "the lander points up.  This is the angle you must land with. A positive "
-+#~ "angle denotes a left-leaning lander, a negative angle a right-leaning "
-+#~ "one. You cannot lean more than by ±90°, and the angle can vary by at most "
-+#~ "±5° in one step."
-+#~ msgstr ""
-+#~ "Vous devez définir deux fonctions : <code>[!java]void [/!]initialize()</"
-+#~ "code> et <code>[!java]void [/!]step()</code>. <code>initialize()</code> "
-+#~ "est appelée au moment où l'on appuie sur le bouton «Exécuter». Vous "
-+#~ "pouvez l'utiliser pour choisir une zone plate. Comme avant, <code>step()</"
-+#~ "code> est appelée tous les dixièmes de seconde pour vous permettre "
-+#~ "d'ajuster la poussée (avec la fonction  <code>[!java]void "
-+#~ "[/!]setPousseedesiree([!java]int [/!]poussee[!scala]:Integer[/!])</"
-+#~ "code>). Vous pouvez également contrôler l'angle du module avec la "
-+#~ "fonction <code>[!java]void [/!]setAngleDesire([!java]double [/!]angle[!"
-+#~ "scala]:Double[/!])</code>. Un angle de O° dénote une position verticale, "
-+#~ "avec le sommet du module dirigé vers le haut. C'est l'angle avec lequel "
-+#~ "vous devez vous poser. Un angle positif indique que le module penche vers "
-+#~ "la gauche tandis qu'un angle négatif indique au contraire qu'il penche à "
-+#~ "droite. Il est impossible de se pencher à plus de ±90°, et on ne peut pas "
-+#~ "pencher le module de plus de ±5° en une fois."
-+
-+#~ msgid ""
-+#~ "As in the previous exercise, <code>[!java]List<Point> "
-+#~ "[/!]getGround()[!scala]:List[Point][/!]</code> returns the vertices of "
-+#~ "the ground's profile from left to right.  Please refer to the "
-+#~ "documentation (Help/About this world) for a reference manual of your "
-+#~ "lunar lander."
-+#~ msgstr ""
-+#~ "Comme dans les exercices précédents, <code>[!java]List<Point> "
-+#~ "[/!]getSol()[!scala]:List[Point][/!]</code> retourne les points qui "
-+#~ "composent l'horizon. Le manuel de référence de votre module est "
-+#~ "disponible dans la documentation (Aide/À propos de ce monde)."
-+
-+#~ msgid ""
-+#~ "As before, your program must safely land the lander in all the situations "
-+#~ "encountered so far in addition to this new one."
-+#~ msgstr ""
-+#~ "Comme d'habitude, votre programme doit se poser sans heurt dans toutes "
-+#~ "les situations que nous avons rencontré jusqu'à présent, ainsi que dans "
-+#~ "ce nouveau cas."
-+
-+#~ msgid "Good luck, try not to crash!"
-+#~ msgstr "Bonne chance. Essayez de ne pas vous scratcher ;)"
-+
-+#~ msgid ""
-+#~ "Note that the point (0,0) is on the top left corner, as it is often the "
-+#~ "case in Computer Science."
-+#~ msgstr ""
-+#~ "L'origine (0, 0) est dans le coin en haut à gauche, comme c'est souvent "
-+#~ "le cas en informatique."
-+
-+#~ msgid ""
-+#~ "Look at the documentation (in \"Help/About this world\") for the full "
-+#~ "list of buggles' methods."
-+#~ msgstr ""
-+#~ "Référez-vous à la documentation (dans le menu \"Aide/À propos de ce monde"
-+#~ "\") pour la liste complète des méthodes comprises par les buggles."
-+
-+#~ msgid ""
-+#~ "This exercise was converted to PLM from the excellent exercising site "
-+#~ "http://codingbat.com/"
-+#~ msgstr ""
-+#~ "Cet exercice a été extrait pour PLM depuis l'excellent site d'exercices "
-+#~ "http://codingbat.com/"
-+
-+#~ msgid ""
-+#~ "We will now write our own methods. It somehow comes down to extending the "
-+#~ "buggle vocabulary by teaching it new tricks."
-+#~ msgstr ""
-+#~ "Nous allons maintenant voir comment écrire nos propres méthodes. Il "
-+#~ "s'agit en quelque sorte d'étendre le vocabulaire de la buggle en lui "
-+#~ "apprenant à faire de nouvelles choses."
-+
-+#~ msgid ""
-+#~ "We now would like to teach the buggle to build a doghouse. The naive "
-+#~ "approach consists in directly writing the needed code as follows.  This "
-+#~ "works because the buggle of this exercise leaves a red path as it moves."
-+#~ msgstr ""
-+#~ "Nous souhaitons maintenant apprendre à la buggle à se faire une niche.  "
-+#~ "La première approche, la plus simple au premier abord, est d'écrire "
-+#~ "directement le code permettant de le faire, comme ci-dessous (cela marche "
-+#~ "car la buggle de cet exercice laisse une traînée rouge dans son sillage "
-+#~ "quand elle se déplace)."
-+
-+#~ msgid ""
-+#~ "After these races, it's time to party! For that, we will teach the "
-+#~ "buggles to play Dance Revolution, this game beloved of some students: The "
-+#~ "player has to move the feet on the carpet according to the instructions "
-+#~ "presented on the screen, and following the music. But before that, we "
-+#~ "have some details to study first."
-+#~ msgstr ""
-+#~ "Après toutes ces courses, il est temps de faire la fête ! Pour cela, nous "
-+#~ "allons apprendre à nos buggles à jouer à Dance Revolution, ce jeu très "
-+#~ "prisé de certains étudiants où le joueur doit bouger sur un tapis prévu à "
-+#~ "cet effet en fonction des consignes présentées à l'écran en rythme avec "
-+#~ "la musique. Mais avant cela, nous avons quelques détails à étudier."
-+
-+#~ msgid ""
-+#~ "The goal is then to organize a BDR game between the buggles by teaching "
-+#~ "them to move according to the instructions written on the ground. These "
-+#~ "instructions are messages written on the ground, with the following "
-+#~ "signification:"
-+#~ msgstr ""
-+#~ "L'objectif est donc d'organiser une partie de BDR entre les buggles en "
-+#~ "leur apprenant à bouger en fonction des indications écrites par terre.  "
-+#~ "Ces indications sont des messages au sol, avec le code suivant:"
-+
-+#~ msgid ""
-+#~ "Beware, the first line and column are numbered 0 and not 1, and the point "
-+#~ "(0,0)  is on the top left corner. This may seem surprising, but it is "
-+#~ "very often so in Computer Science."
-+#~ msgstr ""
-+#~ "Attention, la première ligne et la première colonne sont numérotées 0 au "
-+#~ "lieu de 1, et l'origine (0, 0) est dans le coin en haut à gauche. Cela "
-+#~ "peut sembler étonnant, mais ces choses sont traditionnelles en "
-+#~ "informatique."
-+
-+#~ msgid ""
-+#~ "Gnome Sort is based on the technique used by the standard Dutch Garden "
-+#~ "Gnome (Du.: tuinkabouter). Here is how a garden gnome sorts a line of "
-+#~ "flower pots. Basically, he looks at the flower pot next to him and the "
-+#~ "one immediately after ; if they are in the right order he steps one pot "
-+#~ "forward, otherwise he swaps them and steps one pot backwards. Boundary "
-+#~ "conditions: if there is no previous pot, he steps forwards; if there is "
-+#~ "no pot next to him, he is done.  <i>—Dick Grune</i>"
-+#~ msgstr ""
-+#~ "L'algorithme de tri du gnome repose sur la manière habituelle de "
-+#~ "travailler des nains de jardin pour trier une ligne de pots de fleurs: Le "
-+#~ "nain regarde le pot de fleur qui est à côté de lui et il regarde "
-+#~ "également le pot de fleurs juste après ; si ces deux pots sont "
-+#~ "alignés dans le bon ordre, le nain se déplace en avant d'un pot de "
-+#~ "fleurs, sinon il les échange et se déplace en arrière d'un pot de fleur. "
-+#~ "Condition aux limites : si il n'y a pas de pot de fleurs précédent, "
-+#~ "le nain avance ; si il n'y a pas de pot suivant alors il a terminé sa "
-+#~ "tâche."
-+
-+#~ msgid ""
-+#~ "Returns the current position of the turtle.  Note that the point (0,0) is "
-+#~ "on the top left corner, as it is often the case in Computer Science."
-+#~ msgstr ""
-+#~ "Renvoie la position courante de la tortue. L'origine (0; 0) est dans le "
-+#~ "coin en haut à gauche, comme c'est souvent le cas en informatique."
-+
-+#~ msgid ""
-+#~ "This world allows you to experiment with the recursive lists, as they "
-+#~ "were first introduced in Lisp. It is very similar to the BatWorld, but "
-+#~ "you are supposed to write recursive functions working on [!python|"
-+#~ "java]recursive strings. Since [!thelang] does not provide such a "
-+#~ "construct natively, the ConsWorld defines recursive lists of type "
-+#~ "<code>RecList</code>.[/!] [!scala]lists of integers (<code>List[Int]</"
-+#~ "code>).[/!]"
-+#~ msgstr ""
-+#~ "Ce monde vous permettra d'expérimenter avec les listes récursives, telles "
-+#~ "qu'elles ont été définies en Lisp à l'origine. Ce monde est assez "
-+#~ "similaire au BatWorld, mais vous êtes supposé écrire des fonctions "
-+#~ "récursives agissant sur des [!python|java]listes récursives. Comme [!"
-+#~ "thelang] ne propose rien de tel en natif, ce monde défini un nouveau type "
-+#~ "nommé <code>RecList</code> pour cela.[/!] [!scala]listes d'entiers "
-+#~ "(<code>List[Int]</code>).[/!]"
-+
-+#~ msgid "<b>The empty list:</b>"
-+#~ msgstr "<b>La liste vide:</b>"
-+
-+#~ msgid ""
-+#~ "Given a [!scala]List[Int][/!][!java|python]recursive list[/!] <code>L</"
-+#~ "code>and an integer, return a new list containing all elements of "
-+#~ "<code>L</code> that are not equal to the value received as parameter."
-+#~ msgstr ""
-+#~ "Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] "
-+#~ "<code>L</code> et un entier,retournez une nouvelle liste contenant tous "
-+#~ "les éléments de <code>L</code> n'étant pas égaux à l'entier passé en "
-+#~ "paramètre."
-+
-+#~ msgid ""
-+#~ "Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an "
-+#~ "integer <code>N</code>, return the <code>N</code>th element of the list."
-+#~ msgstr ""
-+#~ "Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et "
-+#~ "un entier <code>N</code>, retournez le <code>N</code>ième élément de la "
-+#~ "liste."
-+
-+#~ msgid ""
-+#~ "A very good introduction to this type is available here: http://codingbat."
-+#~ "com/doc/java-if-boolean-logic.html"
-+#~ msgstr ""
-+#~ "Une très bonne introduction à ce type est disponible ici : http://"
-+#~ "codingbat.com/doc/java-if-boolean-logic.html"
-+
-+#~ msgid ""
-+#~ "Strings are the simplest of the complex data types :) They provide "
-+#~ "several operations, such as getting the length of the string, or a "
-+#~ "substring of it."
-+#~ msgstr ""
-+#~ "Les chaînes de caractères (\"String\") sont les plus simples des types de "
-+#~ "données complexes :) Elles fournissent différentes opérations, comme "
-+#~ "obtenir la longueur de la chaîne ou une sous-chaîne."
-+
-+#~ msgid ""
-+#~ "A very good introduction to this type is available here: http://codingbat."
-+#~ "com/doc/java-string-introduction.html"
-+#~ msgstr ""
-+#~ "Une très bonne introduction à ce type est disponible ici : http://"
-+#~ "codingbat.com/doc/java-string-introduction.html"
-+
-+#~ msgid ""
-+#~ "The [!python]<code>step()</code> function[/!][!scala|java|c]code[/!] that "
-+#~ "you should write now will be called every 0.1 second during the "
-+#~ "simulation. Make sure that your code does not last too long, with no "
-+#~ "while loop! It should only set the desired thrust of the next simulation "
-+#~ "step, by calling <code>[!java]void [/!]setDesiredThrust([!java]int "
-+#~ "[/!]desiredThrust[!scala]:Integer[/!])</code> where <code>desiredThrust</"
-+#~ "code> is some integer between 0 and 4 (that is, a thrust between 0 m/s² "
-+#~ "and 4 m/s²). You can only increment or decrement the thrust by 1 between "
-+#~ "two simulation steps, so if the current thrust is 2 and you ask for 4, "
-+#~ "you'll only get 3 in the next step. If you ask for less than 0 (resp. "
-+#~ "more than 4), everything will be as if you had asked for 0 (resp. 4)."
-+#~ msgstr ""
-+#~ "Vous devez écrire le [!python]corps de la fonction <code>step()</code>, "
-+#~ "qui sera appelée[/!][!scala|java|c]code qui sera appellé[/!] tous les "
-+#~ "dixièmes de seconde pendant la simulation. Assurez vous que votre code ne "
-+#~ "dure pas trop longtemps, et évitez en particulier les boucles "
-+#~ "<code>while</code>. Il faut juste ajuster la poussée du moteur en "
-+#~ "utilisant la fonction <code>[!java]void [/!]setPousseeDesiree([!java]int "
-+#~ "[/!]poussee[!scala]:Integer[/!])</code> où <code>poussee</code> est un "
-+#~ "entier entre 0 et 4 (représentant une poussée entre 0 m/s² et 4 m/s²). "
-+#~ "Vous ne pouvez incrémenter ou décrémenter la poussée que de 1 entre deux "
-+#~ "pas de la simulation. Ainsi, si la poussée du moteur est actuellement de "
-+#~ "2 et que vous demandez 4, vous n'aurez que 3 à la prochaine étape. Si "
-+#~ "vous demandez une valeur inférieure à 0 (ou supérieure à 4), tout se "
-+#~ "passera comme si vous aviez demandé 0 (ou 4)."
-+
- #~ msgid ""
- #~ "When you don't want to follow the proposed exercises but draw your own "
- #~ "stuff, the \"you failed\" message really gets annoying.  We should have a "
---- a/l10n/missions/pt_BR.po
-+++ b/l10n/missions/pt_BR.po
-@@ -6,7 +6,7 @@
- msgid ""
- msgstr ""
- "Project-Id-Version: PLM mission texts\n"
--"POT-Creation-Date: 2014-09-16 17:00+0200\n"
-+"POT-Creation-Date: 2014-11-13 13:47+0100\n"
- "PO-Revision-Date: 2014-10-05 10:25-0300\n"
- "Last-Translator: Fred maranhão <fred.maranhao at gmail.com>\n"
- "Language-Team: none\n"
-@@ -808,7 +808,7 @@
- 
- #. type: Content of: <h2>
- #: src/lessons/welcome/Main.html:229
--#: src/lessons/welcome/methods/picture/PictureMono.html:2
-+#: src/lessons/welcome/methods/picture/PictureMono1.html:2
- msgid "Methodically drawing"
- msgstr "desenhando metodicamente"
- 
-@@ -1113,6 +1113,7 @@
- #: src/lessons/turmites/langton/Langton.html:32
- #: src/lessons/turmites/helloturmite/HelloTurmite.html:65
- #: src/lessons/sort/basic/comb/AlgCombSort.html:39
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:35
- #: src/lessons/recursion/square/FourSquare.html:46
- #: src/lessons/maze/pledge/PledgeMaze.html:68
- #: src/lessons/welcome/bat/bool1/Max1020.html:6
-@@ -2144,10 +2145,11 @@
- msgid "x = 5"
- msgstr "x = 5"
- 
--#. type: Content of: outside any tag (error?)
-+#. type: Content of: <ul><li>
- #: src/lessons/welcome/variables/Variables.html:40
- #: src/lessons/welcome/loopfor/LoopFor.html:68
- #: src/lessons/welcome/bdr/BDR2.html:83
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:34
- msgid "[/!] [!scala]"
- msgstr "[/!] [!scala]"
- 
-@@ -4981,7 +4983,7 @@
- "construir várias casas de cachorro neste mundo."
- 
- #. type: Content of: outside any tag (error?)
--#: src/lessons/welcome/methods/picture/PictureMono.html:4
-+#: src/lessons/welcome/methods/picture/PictureMono1.html:4
- #: src/lessons/welcome/methods/picture/MethodsPicture.html:4
- msgid ""
- "In this exercise, we will reproduce the geometric drawing that you can see "
-@@ -4991,7 +4993,7 @@
- "aba \"Objetivo\"."
- 
- #. type: Content of: <p>
--#: src/lessons/welcome/methods/picture/PictureMono.html:7
-+#: src/lessons/welcome/methods/picture/PictureMono1.html:7
- #: src/lessons/welcome/methods/picture/MethodsPicture.html:7
- msgid ""
- "Your goal (here and in any well written program) is to write the simplest "
-@@ -5003,7 +5005,7 @@
- "passos e escrever métodos específicos para cada sub-passo."
- 
- #. type: Content of: <p>
--#: src/lessons/welcome/methods/picture/PictureMono.html:11
-+#: src/lessons/welcome/methods/picture/PictureMono1.html:11
- msgid ""
- "If you observe carefully the picture to draw, it is constituted of four "
- "parts depicting a sort of V. A possible decomposition is to write a method "
-@@ -5016,7 +5018,7 @@
- "Seu protótipo pode ser: <code>[!java|c]void [/!]fazerV()</code>"
- 
- #. type: Content of: <p>
--#: src/lessons/welcome/methods/picture/PictureMono.html:16
-+#: src/lessons/welcome/methods/picture/PictureMono1.html:16
- msgid ""
- "In this method, you should use the methods <code>brushUp()</code> and "
- "<code>brushDown()</code> to mark the ground (you may want to factorize this "
-@@ -5030,7 +5032,7 @@
- "para o próximo V."
- 
- #. type: Content of: <p>
--#: src/lessons/welcome/methods/picture/PictureMono.html:21
-+#: src/lessons/welcome/methods/picture/PictureMono1.html:21
- msgid ""
- "Your turn. Your code should not be longer than 4 lines (not counting "
- "<code>makeV</code>)..."
-@@ -5740,7 +5742,6 @@
- 
- #. type: Content of: <p>
- #: src/lessons/welcome/methods/picture/PatternPicture.html:11
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:41
- msgid "Good luck!"
- msgstr "Boa Sorte!"
- 
-@@ -7049,7 +7050,8 @@
- #. type: Content of: <p>
- #: src/lessons/welcome/traversal/Snake.html:17
- msgid "We reached the final position if and only if both conditions are true:"
--msgstr "Chegamos na posição final se e apenas se ambas as condições são verdadeiras:"
-+msgstr ""
-+"Chegamos na posição final se e apenas se ambas as condições são verdadeiras:"
- 
- #. type: Content of: <ul><li>
- #: src/lessons/welcome/traversal/Snake.html:19
-@@ -7103,10 +7105,16 @@
- 
- #. type: Content of: <p>
- #: src/lessons/welcome/traversal/Snake.html:33
-+#, fuzzy
-+#| msgid ""
-+#| "Hint: the main loop of your code must continue while the testing function "
-+#| "returns false. Their is thus two way of writing it:"
- msgid ""
- "Hint: the main loop of your code must continue while the testing function "
--"returns false. Their is thus two way of writing it:"
--msgstr "Dica: o loop principal do seu código deve continuar enquanto a função de teste retorna falso. Existe portanto entretanto duas formas de fazer isto:"
-+"returns false. There is two ways of writing it:"
-+msgstr ""
-+"Dica: o loop principal do seu código deve continuar enquanto a função de "
-+"teste retorna falso. Existe portanto entretanto duas formas de fazer isto:"
- 
- #. type: Content of: <pre>
- #: src/lessons/welcome/traversal/Snake.html:35
-@@ -7237,6 +7245,11 @@
- "by one at each step (for example with <code>counter += 1;</code>).  Then, "
- "you have to use <code>writeMessage()</code> to write the value on the ground."
- msgstr ""
-+"Agora é hora de escrever os números das células. Para isto, você vai\n"
-+"precisar de um contador iniciando em zero no começo do seu código, e\n"
-+"incrementar de um em cada passo (por exemplo com <code>counter +=\n"
-+"1;</code>).  Então, você terá que usar <code>escreverMensagem()</code>\n"
-+"para escrever o valor no chão."
- 
- #. type: Content of: <p>
- #: src/lessons/welcome/traversal/column/TraversalByColumn.html:45
-@@ -7245,6 +7258,10 @@
- "the main loop [!java|scala|c], depending on whether you prefer to use a "
- "<code>while</code> or a <code>do/while</code> one[/!]."
- msgstr ""
-+"Você provavelmente vai precisar escrever o primeiro [!java|scala|c]ou\n"
-+"último [/!]valor fora do loop principal [!java|scala|c], dependendo se\n"
-+"você prefere usar um <code>while</code> ou um\n"
-+"<code>do/while</code>[/!]."
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/welcome/traversal/line/TraversalByLine.html:4
-@@ -7256,6 +7273,14 @@
- "correctly updated: if you are at the right of a line, you have to go to the "
- "beginning of the next one. If not, you have to go to the right cell."
- msgstr ""
-+"Mais uma vez você terá que deixar o buggle percorrer o mundo numerando\n"
-+"as células no caminho, mas o objetivo do exercício é escrever uma\n"
-+"linha transversal. A maioria do código que você escreveu para\n"
-+"exercícios anteriores continua útil aqui. Simplesmente, o método\n"
-+"calculando as coordenadas da próxima posição do buggle tem que ser\n"
-+"atualizado corretamente: se você estiver a direita de uma linha, você\n"
-+"terá que ir para o começo da próxima. Senão, você terá que ir para a\n"
-+"célula da direita."
- 
- #. type: Content of: <p>
- #: src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:4
-@@ -7264,6 +7289,9 @@
- "Have a look at the objective world for more details on the requested "
- "traversal order."
- msgstr ""
-+"Agora é para você atravessar o mundo uma diagonal depois da outra. Dê\n"
-+"uma olhada no mundo objetivo para maiores detalhes quanto à ordem a\n"
-+"percorrer pedida."
- 
- #. type: Content of: <p>
- #: src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:8
-@@ -7271,6 +7299,8 @@
- "You may find useful to use an integer variable <code>diag</code> storing the "
- "number of the diagonal you are traversing."
- msgstr ""
-+"Pode ser útil usar uma variável inteira <code>diag</code> guardando o\n"
-+"número da diagonal que você está atravessando."
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/welcome/traversal/zigzag/TraversalZigZag.html:4
-@@ -7278,11 +7308,14 @@
- "This time, you have to zigzag on the way up. Have a look at the objective "
- "world for more details on the requested traversal order."
- msgstr ""
-+"Desta vez, você vai ter que fazer um zigzag no caminho para cima. Dê\n"
-+"uma olhada no mundo objetivo para mais detalhes da ordem a percorrer\n"
-+"pedida."
- 
- #. type: Content of: <h3>
- #: src/lessons/turmites/Main.html:2 src/lessons/turmites/short_desc.html:2
- msgid "The turmites"
--msgstr ""
-+msgstr "Os turmites"
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/Main.html:4
-@@ -7291,6 +7324,10 @@
- "machines. They constitute very simple application problems, achievable by "
- "beginners, and open the door to an amazing world."
- msgstr ""
-+"Este conjunto de atividades é para você brincar com formigas de\n"
-+"Langton, que são máquinas de Turing 2D. Elas constituem problemas bem\n"
-+"simples, bons para iniciantes, e abrem as portas para um mundo\n"
-+"fantástico."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/Main.html:8
-@@ -7302,6 +7339,14 @@
- "universal computation. Put simply, any possible computation can be achieved "
- "using a turmite as a computing device. Yet another subject of fascination..."
- msgstr ""
-+"Este mecanismo foi inventado em 1986 por Chris Langton, e depois\n"
-+"generalizado em várias formas (como veremos nos próximos\n"
-+"exercícios). Foi provado que Turmites e máquinas de Turing têm o mesmo\n"
-+"poder: Uma trajetória de formiga pode ser usada para calcular qualquer\n"
-+"circuito booleano, e logo uma formiga é capaz de qualquer cálculo\n"
-+"universal. resumindo, qualquer cálculo possível pode ser alcançado\n"
-+"usando uma turmite como dispocitivo computacional. Ainda outro assunto\n"
-+"fascinante..."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/Main.html:14
-@@ -7311,6 +7356,10 @@
- "identical letters (LL and RR) produce symmetric patterns. This fact was even "
- "formally proved."
- msgstr ""
-+"formigas de Langton multicoloridas foram descobertas em 1995 por Propp\n"
-+"et Al. Outro fato divertido é que as formigas cujos nomes é uma lista\n"
-+"de pares consecutivos de letras idênticas (LL e RR) produzem padrões\n"
-+"simétricos. Este fato foi até mesmo provado formalmente."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/Main.html:19
-@@ -7318,6 +7367,8 @@
- "Check the corresponding wikipedia web page, of which this exercise is "
- "inspired, for further details."
- msgstr ""
-+"Verifique a página da wikipédia correspondente, na qual este exercício\n"
-+"é inspirado, para maiores detalhes."
- 
- #. type: Content of: <h3>
- #: src/lessons/turmites/Main.html:22 src/lessons/sort/basic/Main.html:15
-@@ -7325,17 +7376,20 @@
- #: src/lessons/sort/pancake/Main.html:30
- #: src/lessons/sort/baseball/Main.html:28 src/lessons/turtleart/Main.html:12
- msgid "What can I do to improve this PLM universe?"
--msgstr ""
-+msgstr "O que eu posso fazer para melhorar este universo do PLM?"
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/Main.html:24 src/lessons/sort/basic/Main.html:17
- #: src/lessons/sort/dutchflag/Main.html:11
- #: src/lessons/sort/pancake/Main.html:32
- #: src/lessons/sort/baseball/Main.html:30 src/lessons/turtleart/Main.html:14
-+#: src/lessons/recursion/cons/Main.html:7
- msgid ""
- "As usual, there are several things that could be done in the code of this "
- "universe to improve it:"
- msgstr ""
-+"Como sempre, existem várias coisas que podem ser feitas no código\n"
-+"deste universo para melhorá-lo:"
- 
- #. type: Content of: <ul><li>
- #: src/lessons/turmites/Main.html:26
-@@ -7343,16 +7397,19 @@
- "We are probably missing some good exercises. The turmite creator exercise is "
- "a bit harsh: we could introduce the patterns in a more friendly manner."
- msgstr ""
-+"Alguns bons exercícios estão provavelmente faltando. O exercício de\n"
-+"criador de turmite é um pouco pé-duro: podemos introduzir os padrões\n"
-+"de uma forma mais amigável."
- 
- #. type: Content of: <ul><li>
- #: src/lessons/turmites/Main.html:28
- msgid "We may want to write an exercise on the busy beaver, maybe?"
--msgstr ""
-+msgstr "Quem sabe não escrevemos um exercício sobre os busy beavers?"
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/short_desc.html:3
- msgid "Discover the Langton's ants, that are 2D turing machines."
--msgstr ""
-+msgstr "Descubra as formigas de Langton, que são máquinas de Turing 2D."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/short_desc.html:5
-@@ -7360,11 +7417,13 @@
- "These activities are very simple application problems, achievable by "
- "beginners, and open the door to an amazing world."
- msgstr ""
-+"Estas atividades são problemas bem simples, bons para iniciantes, e\n"
-+"abrema a porta para um mundo fantástico."
- 
- #. type: Content of: <h2>
- #: src/lessons/turmites/langton/Langton.html:2
- msgid "Langton's ant"
--msgstr ""
-+msgstr "formiga de Langton"
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/langton/Langton.html:4
-@@ -7374,6 +7433,11 @@
- "simple rules that depend only on their local environment, and after a period "
- "of apparent chaotic behavior, a general pattern <i>emerges</i>."
- msgstr ""
-+"Neste exercício, você vai transformar seu buggle numa <i>formiga de\n"
-+"Langton</i>. Estes pequenos animais artificiais são bastante\n"
-+"interessantes por que eles recebem regras simples que dependem apenas\n"
-+"do seu ambiente local, e depois de um período de aparente\n"
-+"comportamento caótico, um padrão geral <i>surge</i>."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/langton/Langton.html:9
-@@ -7384,6 +7448,11 @@
- "right and move forward by one cell. If the ground is currently black, change "
- "it to white, turn left and move forward by one cell."
- msgstr ""
-+"As regras são absolutamente triviais: para calcular qual o próximo\n"
-+"passo, você verifica a cor atual do chão (usando\n"
-+"<code>getGroundColor()</code>). Se for branco, mude para preto, vire à\n"
-+"direita e mova uma célula. Se for preto mude para branco, vire a\n"
-+"esquerda e ande uma célula."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/langton/Langton.html:15
-@@ -7403,6 +7472,9 @@
- "are not scalar values but objects. Instead, you need to write something like "
- "the following:"
- msgstr ""
-+"Para comparar cores, você não pode usar o símbolo de igualdade (==),\n"
-+"pois estas coisas não são valores escalares, mas objetos. Ao invés\n"
-+"disto, você precisa escrever algo como o seguinte:"
- 
- #. type: Content of: <pre>
- #: src/lessons/turmites/langton/Langton.html:25
-@@ -7415,6 +7487,12 @@
- "  /* that was not equal */\n"
- "}\n"
- msgstr ""
-+"Cor c /* = alguma inicialização */;\n"
-+"if (c.equals(Cor.preto)) {\n"
-+"  /* é igual */\n"
-+"} else {\n"
-+"  /* não é igual */\n"
-+"}\n"
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/langton/Langton.html:34
-@@ -7444,11 +7522,17 @@
- "from the chaos is rather fascinating, isn't it? Move on to the next exercise "
- "to see more of them."
- msgstr ""
-+"Como você pode ver da execução deste exercício, o interessante neste\n"
-+"algoritmo é que depois de uns 10000 passos de comportamento\n"
-+"relativamente caótico, a formiga começa a construir um padrão\n"
-+"regular. O surgimento deste padrão regular em meio ao caos é bastante\n"
-+"fascinante, não acha? Mova para o próximo exercício para ver mais\n"
-+"disto."
- 
- #. type: Content of: <h2>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:2
- msgid "Multicolor Langton's ant"
--msgstr ""
-+msgstr "formiga de Langton multicolorida"
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:4
-@@ -7472,6 +7556,11 @@
- "a square, LLRRRLRLRLLR draws a convoluted regular pattern after a period of "
- "seemingly chaotic behavior, and RRLLLRLLLRRR seems to fill a hour glass..."
- msgstr ""
-+"Algumas destas formigas desenham padrões fascinantes (alterne o mundo\n"
-+"para vê-los): LLRR constrói uma figura simétrica semelhante a uma\n"
-+"bola, LRRRRRLLR desenha um quadrado, LLRRRLRLRLLR desenha um padrão\n"
-+"regular convolucionado depois de um período de aparente caos, e\n"
-+"RRLLLRLLLRRR parece preencher uma ampulheta..."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:18
-@@ -7487,16 +7576,28 @@
- "'L')</code> and <code>Array(Color.white, Color.black)</code>[/!] as "
- "arguments."
- msgstr ""
-+"Transformar seu buggle numa formiga de Langton genérica não é muito\n"
-+"complicado, embora não seja totalmente trivial. Como anteriormente,\n"
-+"você tem que escrever uma função <code>step</code>. Mas desta vez, ela\n"
-+"recebe duas arrays como parâmetros. A primeira define as regras para\n"
-+"seguir dependendo da cor do chão enquanto a segunda dá a sequência de\n"
-+"cores a usar. Por exemplo, a formiga básica deve ter\n"
-+"[!java]<code>{'R', 'L'}</code> e <code>{Cor.branco,\n"
-+"Cor.preto}</code>[/!] [!python]<code>['R', 'L']</code> e\n"
-+"<code>[Cor.branco, Cor.preto]</code>[/!] [!scala]<code>Array('R',\n"
-+"'L')</code> e <code>Array(Cor.branco, Cor.preto)</code>[/!] como\n"
-+"argumentos."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:29
- msgid "At each step, you thus have to apply the following pseudo-code:"
- msgstr ""
-+"Em cada passo, você deve então ter que aplicar o seguinte pseudo-código:"
- 
- #. type: Content of: <ul><li>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:31
- msgid "Find the position of the ground color in the color sequence;"
--msgstr ""
-+msgstr "Encontre a posição da cor do chão na sequência de cores;"
- 
- #. type: Content of: <ul><li>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:32
-@@ -7504,6 +7605,8 @@
- "Turn left or right depending on the content of the rule array at that "
- "position;"
- msgstr ""
-+"Vire a esquerda ou direita dependendo do conteúdo da array de regras\n"
-+"nesta posição;"
- 
- #. type: Content of: <ul><li>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:33
-@@ -7515,18 +7618,18 @@
- #. type: Content of: <ul><li>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:34
- msgid "Move forward by one step."
--msgstr ""
-+msgstr "ande um passo para frente."
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/langtoncolors/LangtonColors.html:37
- #: src/lessons/turmites/helloturmite/HelloTurmite.html:67
- msgid "You now should have enough information to succeed."
--msgstr ""
-+msgstr "Você agora tem informação o suficiente para conseguir."
- 
- #. type: Content of: <h2>
- #: src/lessons/turmites/helloturmite/HelloTurmite.html:2
- msgid "Turmites"
--msgstr ""
-+msgstr "Turmites"
- 
- #. type: Content of: <p>
- #: src/lessons/turmites/helloturmite/HelloTurmite.html:4
-@@ -7681,7 +7784,7 @@
- #: src/lessons/turmites/turmitecreator/TurmiteCreator.html:42
- #: src/lessons/turmites/turmitecreator/TurmiteCreator.html:43
- msgid "0"
--msgstr ""
-+msgstr "0"
- 
- #. type: Content of: <table><tr><td>
- #: src/lessons/turmites/turmitecreator/TurmiteCreator.html:15
-@@ -7691,7 +7794,7 @@
- #: src/lessons/turmites/turmitecreator/TurmiteCreator.html:38
- #: src/lessons/turmites/turmitecreator/TurmiteCreator.html:45
- msgid "1"
--msgstr ""
-+msgstr "1"
- 
- #. type: Content of: <table><tr><th>
- #: src/lessons/turmites/turmitecreator/TurmiteCreator.html:19
-@@ -8210,7 +8313,7 @@
- #. type: Content of: <h3>
- #: src/lessons/sort/basic/Main.html:2 src/lessons/sort/basic/short_desc.html:2
- msgid "Sorting Algorithms"
--msgstr ""
-+msgstr "Algoritmos de Ordenação"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/sort/basic/Main.html:4
-@@ -8222,6 +8325,13 @@
- "\"races\" between these algorithms to experiment in practice what the "
- "different asymptotical complexity mean."
- msgstr ""
-+"Esta lição permite a experimentação com alguns algoritmos de ordenação\n"
-+"clássicos (e algumas variações menos comuns deles). E temos um duplo\n"
-+"objetivo: você pode primeiro compreender melhor a ideia destes\n"
-+"algoritmos escrevendo eles por si só. Mas mesmo se você não codificar\n"
-+"os algoritmos, você pode usar o modo de demonstração para organizar\n"
-+"\"corridas\" entre os algoritmos para experimentar na prática o que\n"
-+"significam diferentes complexidades assintóticas."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/Main.html:11
-@@ -8230,6 +8340,9 @@
- "(such as QuickSort and MergeSort) or using other microworlds to apply these "
- "algorithms to other contexts."
- msgstr ""
-+"Mais exercícios estão previstos para o futuro, sobre os algoritmos de\n"
-+"ordenação recursivos (como o QuickSort e o MergeSort) ou usando outros\n"
-+"micromundos para aplicar estes algoritmos a outros contextos."
- 
- #. type: Content of: <ul><li>
- #: src/lessons/sort/basic/Main.html:19
-@@ -8237,6 +8350,8 @@
- "Other graphical representations could be proposed, such as the ones "
- "presented at <a href=\"http://sorting.at/\">http://sorting.at/</a>."
- msgstr ""
-+"Outras representações gráficas podem ser propostas, como aquelas\n"
-+"apresentadas em <a href=\"http://sorting.at/\">http://sorting.at/</a>."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/short_desc.html:4
-@@ -8244,18 +8359,20 @@
- "This lesson allows to experiment with some classical sorting algorithms (and "
- "some less common variant of them :)"
- msgstr ""
-+"Esta lição permite a experimentação com alguns algotimos de ordenação\n"
-+"clássicos (e algumas variantes menos comuns deles :)"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/short_desc.html:7
- #: src/lessons/recursion/short_desc.html:6 src/lessons/maze/short_desc.html:6
- msgid ""
- "You are supposed to master the bases of programming to take this lesson."
--msgstr ""
-+msgstr "Para fazer esta lição você deve dominar as bases da programação."
- 
- #. type: Content of: <h1>
- #: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:2
- msgid "BubbleSort"
--msgstr ""
-+msgstr "BubbleSort"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:4
-@@ -8265,6 +8382,10 @@
- "algorithms is available in the world reference documentation (\"Help\"->"
- "\"About this world\")."
- msgstr ""
-+"Bem vindo ao universo da ordenação. Ele permite que você experimente\n"
-+"os algoritmos de ordenação existentes. A lista de \"buildins\" que você\n"
-+"pode usar nos seus algoritmos está disponível na documentação de\n"
-+"referência do mundo (\"Ajuda\"->\"Sobre este mundo\")."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:8
-@@ -8274,6 +8395,11 @@
- "checking that your algorithm needs the same amount of read and write "
- "operations to sort the array."
- msgstr ""
-+"Não é suficiente ordenar a array para passar nos exercícios. Sua\n"
-+"solução deve seguir estritamente o comportamento esperado em cada\n"
-+"exercício. Isto é reforçado verificando que seu algoritmo precisa da\n"
-+"mesma quantidade de operações de escrita e leitura para ordenar a\n"
-+"array."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:13
-@@ -8437,6 +8563,12 @@
- "thus traditionally referred to as \"rabbits\" and \"turtles\" respectively "
- "for big fast values and small slow ones."
- msgstr ""
-+"Para melhorar ainda mais o algoritmo BubbleSort, precisamos ver seu\n"
-+"comportamente bem de perto. Você pode perceber que os elementos\n"
-+"grandes se movem bem rápido enquanto os pequenos se movem lentamente\n"
-+"para seus destinos. Eles são então tradicionalmente chamados de\n"
-+"\"coelhos\" e \"tartarugas\" respectivamente para valores grandes e\n"
-+"rápidos e valores pequenos e lentos."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/cocktail/AlgCocktailSort1.html:10
-@@ -8444,6 +8576,9 @@
- "To help the turtles moving faster, the cocktail sort traverse alternatively "
- "the array from right to left and from left to right. Here is the pseudo-code:"
- msgstr ""
-+"Para ajudar as tartarugas a se mover rápido, o cocktail sort percorre\n"
-+"alternativamente a array da direita para a esquerda e da esquerda para\n"
-+"a direita. Aqui está o pseudo-código:"
- 
- #. type: Content of: <pre>
- #: src/lessons/sort/basic/cocktail/AlgCocktailSort1.html:15
-@@ -8468,7 +8603,7 @@
- #. type: Content of: <h1>
- #: src/lessons/sort/basic/cocktail/AlgCocktailSort2.html:2
- msgid "CocktailSort (take 2)"
--msgstr ""
-+msgstr "CocktailSort (take 2)"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/cocktail/AlgCocktailSort2.html:4
-@@ -8478,6 +8613,10 @@
- "sorted yet, and traverse it alternatively from left to right and from right "
- "to left:"
- msgstr ""
-+"Vamos agora aplicar ao CocktailSort a mesma otimização que o\n"
-+"BubbleSort2 faz no BubbleSort. Devemos lembrar que os limites da parte\n"
-+"do array que não está ordenada ainda, e percorrer ela alternativamente\n"
-+"da esquerda para a direita e da diretia para a esquerda:"
- 
- #. type: Content of: <pre>
- #: src/lessons/sort/basic/cocktail/AlgCocktailSort2.html:9
-@@ -8497,7 +8636,7 @@
- #. type: Content of: <h1>
- #: src/lessons/sort/basic/cocktail/AlgCocktailSort3.html:2
- msgid "CocktailSort (take 3)"
--msgstr ""
-+msgstr "CocktailSort (3o tempo)"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/cocktail/AlgCocktailSort3.html:4
-@@ -8509,11 +8648,17 @@
- "can stop if the upward traversal found something to swap, but not the "
- "downwards one."
- msgstr ""
-+"Mesmo se a complexidade assintótica de CocktailSort2 for a mesma do\n"
-+"BubbleSort, Ele parece melhor na prática. É até mesmo possível\n"
-+"melhorar um pouco mais parando ele na primeira rodada que não\n"
-+"encontrar nada para trocar, se realizar a rodada para baixo. Da mesma\n"
-+"forma, podemos parar se a rodade para cima encontrar algo para trocar\n"
-+"mas a rodada para baixo não."
- 
- #. type: Content of: <h1>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:2
- msgid "InsertionSort"
--msgstr ""
-+msgstr "InsertionSort"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:5
-@@ -8523,6 +8668,11 @@
- "it is more efficient in practice (linear in best case, ie when the array is "
- "already sorted, and N2/4 on average)."
- msgstr ""
-+"Este algoritmo de ordenação é muito simples de entender e escrever,\n"
-+"mesmo se não for o mais eficiente possível. Sua complexidade\n"
-+"assintótica é O(n2), mas ele é mais eficiente na prática (linear no\n"
-+"melhor caso, ie quando a array já está ordenada, e N2/4 no caso\n"
-+"médio)."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:10
-@@ -8533,16 +8683,21 @@
- "left of the array are already sorted, and we have to insert x at its "
- "position in the array."
- msgstr ""
-+"A ideia é percorrer todos os elementos da array, e inserir cada um\n"
-+"deles em sua posição correta numa parte já ordenada da array. Quando\n"
-+"nós olhamos para um elemento x, a situação é a seguinte: qualquer\n"
-+"elemento da esquerda da array já está ordenado, e temos que inserir x\n"
-+"na sua posição na array."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:18
- msgid "Once this is done, the situation is the following:"
--msgstr ""
-+msgstr "Uma vez isto feito, a situação é a seguinte:"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:22
- msgid "The pseudo-code of this algorithm is thus the following:"
--msgstr ""
-+msgstr "O pseudo-código deste algoritmo é então o seguinte:"
- 
- #. type: Content of: <pre>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:23
-@@ -8564,6 +8719,9 @@
- "Naturally, you should use a loop to write the big permutation within the "
- "given loop. Writing it this way would be really ... counter-productive."
- msgstr ""
-+"Naturalmente, você deve usar um loop para escrever a grande permutação\n"
-+"dentro do loop. Escrever ela desta forma deve ser na verdade\n"
-+"... improdutivo."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:36
-@@ -8572,11 +8730,15 @@
- "here is part of the answer: They improve fundamental algorithms so that "
- "others can write efficient programs."
- msgstr ""
-+"Se você já se perguntou o que cientistas da computação fazem nos dias\n"
-+"de hoje, aqui está uma parte da resposta: Eles melhoram algoritmos\n"
-+"fundamentais para que outras pessoas possam escrever programas\n"
-+"eficientes."
- 
- #. type: Content of: <h2>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:40
- msgid "Other variation of insertion sort"
--msgstr ""
-+msgstr "Outra variação do insertion sort"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:42
-@@ -8586,6 +8748,11 @@
- "algorithm here since understanding its behavior requires to know what a "
- "binary tree is, what is beyond our present goals."
- msgstr ""
-+"TreeSort constrói uma árvore de busca binária para ordená-la. Ele\n"
-+"consegue O(n log(n)) no caso médio, mas O(n^2) nos piores casos. Não\n"
-+"vamos estudar este algoritmo aqui pois para entendê-lo temos que\n"
-+"entender o que uma árvore binária é, o que está além de nossos\n"
-+"objetivos atuais."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:47
-@@ -8597,6 +8764,12 @@
- "since it provide a time complexity of O(n log(n)) but needs to store some "
- "more data."
- msgstr ""
-+"Existem variações do insertion sort, tais como o PatienceSort que\n"
-+"constrói pilhas de valores e ordena cada pilha depois. Este algoritmo\n"
-+"apresenta um tempo 0(n log(n)) no pior caso e uma complexidade de\n"
-+"espaço de 0(n). LibrarySort (proposto em 2004) também troca um pouco\n"
-+"de espaço por tempo já que tem uma complexidade de tempo de O(n\n"
-+"log(n)) mas precisa armazenar um pouco mais de dados."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/insertion/AlgInsertionSort.html:54
-@@ -8604,14 +8777,28 @@
- "Wikipedia provides a detailled description of all these algorithms we cannot "
- "present here because of time constraints."
- msgstr ""
-+"A Wikipédia fornece uma descrição detalhada de cada um destes\n"
-+"algoritmos que não apresentamos aqui devido a limitações de tempo."
- 
- #. type: Content of: <h2>
- #: src/lessons/sort/basic/shell/AlgShellSort.html:2
- msgid "ShellSort"
--msgstr ""
-+msgstr "ShellSort"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/sort/basic/shell/AlgShellSort.html:4
-+#, fuzzy
-+#| msgid ""
-+#| "This algorithm is named after its author, Donald Shell, who published it "
-+#| "in 1959. It can be seen as an application of the CombSort idea (let "
-+#| "elements having a long path to travel take shortcuts) to the insertion "
-+#| "sort (CombSort is a variation of BubbleSort). Instead of comparing "
-+#| "adjacent values during the insertion sort, it compares values separated "
-+#| "by a bigger gap. The bigger the gap, the faster the elements are moved to "
-+#| "their final destination, but also the less precise is this move. It is "
-+#| "thus mandatory to apply the algorithm with a serie of decreasing gaps. At "
-+#| "the last step, when the gap is 1, InsertionSort is used, but onto an "
-+#| "array which is almost already sorted by previous steps."
- msgid ""
- "This algorithm is named after its author, Donald Shell, who published it in "
- "1959. It can be seen as an application of the CombSort idea (let elements "
-@@ -8621,9 +8808,21 @@
- "the gap, the faster the elements are moved to their final destination, but "
- "also the less precise is this move. It is thus mandatory to apply the "
- "algorithm with a serie of decreasing gaps. At the last step, when the gap is "
--"1, InsertionSort is used, but onto an array which is almost already sorted "
-+"one, InsertionSort is used, but onto an array which is almost already sorted "
- "by previous steps."
- msgstr ""
-+"Este algoritmo é batizado em homenagem a seu autor, Donald Shell, que\n"
-+"o publicou em 1959. Ele pode ser visto como uma aplicação da ideia do\n"
-+"CombSort (faça com que elementos que tem um longo caminho pegarem\n"
-+"atalhos) ao insertion sort (CombSort é uma variação do BubbleSort). Ao\n"
-+"invés de comparar valores adjacentes durante o insertion sort, ele\n"
-+"compara valores separados por um intervalo maior. Quanto maior o\n"
-+"intervalo, mais rápido os elementos se movem para seu destino final,\n"
-+"mas também menos preciso fica o movimento. É portanto essencial que o\n"
-+"algoritmo vá sendo aplicado numa série de intervalos cada vez\n"
-+"menor. No último passo, quando o intervalo for 1, o InsertionSort será\n"
-+"usado, mas numa array que estará praticamente ordenada pelos passos\n"
-+"anteriores."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/shell/AlgShellSort.html:15
-@@ -8631,6 +8830,9 @@
- "Donald Shell propose <code>len/2</code> as initial value of the gap, and "
- "then to divide it by 2 at each step. The pseudo-code is thus the following:"
- msgstr ""
-+"Donald Shell propôs <code>len/2</code> como o valor inicial do\n"
-+"intervalo, e ir dividindo por 2 a cada passo. O pseudo-código é o\n"
-+"seguinte:"
- 
- #. type: Content of: <p><pre>
- #: src/lessons/sort/basic/shell/AlgShellSort.html:18
-@@ -8654,6 +8856,16 @@
- "ShellSort is a valid candidate for array of several hundred thousands when "
- "correctly implemented."
- msgstr ""
-+"Assim como no CombSort, a sequência de valores pega pelo intervalo é\n"
-+"crucial para a performance do Shell sort. Em alguns casos patológicos\n"
-+"raros, a sequência que usamos pode levar a uma performance\n"
-+"O(n^2). Outras sequências foram propostas: os incrementos de Hibbard\n"
-+"de 2k − 1 levam a uma complexidade de O(n^(3/2)) em casos\n"
-+"ruins. incrementos de Pratt 2^i3^j levam a uma performance de\n"
-+"O(nlog(n)log(n) nos piores casos. A existência de uma sequência\n"
-+"levando a O(n log(n)) foi excluída por Poonen, Plaxton e Suel. Graças\n"
-+"a esta performance, ShellSort é um candidato válido para arrays de\n"
-+"várias centenas de milhares quando corretamente implementado."
- 
- #. type: Content of: <p><p>
- #: src/lessons/sort/basic/shell/AlgShellSort.html:33
-@@ -8663,6 +8875,10 @@
- "targeted serie still smaller than the array size, and then use decreasing "
- "values of the serie."
- msgstr ""
-+"No nosso caso, a array é pequena demais para se beneficiar destas\n"
-+"otimizações. Se você ainda assim quiser, tome o intervalo inicial como\n"
-+"o maior valor da série alvo ainda menor que o tamanho do array, e\n"
-+"então use valores decrescentes da série."
- 
- #. type: Content of: <p><p>
- #: src/lessons/sort/basic/shell/AlgShellSort.html:38
-@@ -8675,11 +8891,19 @@
- "International Symposium on Fundamentals of Computation Theory, LNCS 2001; "
- "Vol. 2138)."
- msgstr ""
-+"Determinar a melhor sequência de intervalos para o shell sort se\n"
-+"tornou um tema de pesquisa de nosso século em ciência da\n"
-+"computação. Por exemplo, um artigo de 2001 introduz a seguinte\n"
-+"sequência, que parece ser a melhor na prática para arrays de tamanho\n"
-+"até 10^5: {1, 4, 10, 23, 57, 132, 301, 701, 1750} (Marcin Ciura, Best\n"
-+"Increments for the Average Case of Shellsort, 13th International\n"
-+"Symposium on Fundamentals of Computation Theory, LNCS 2001;\n"
-+"Vol. 2138)."
- 
- #. type: Content of: <h1>
- #: src/lessons/sort/basic/selection/AlgSelectionSort.html:2
- msgid "Selection Sort"
--msgstr ""
-+msgstr "Selection Sort"
- 
- #. type: Content of: outside any tag (error?)
- #: src/lessons/sort/basic/selection/AlgSelectionSort.html:4
-@@ -8687,42 +8911,69 @@
- "In this exercise we will implement another classical algorithm: selection "
- "sort."
- msgstr ""
-+"Neste exercício vamos implementar outro algoritmo clássico: selection sort."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/selection/AlgSelectionSort.html:7
-+#, fuzzy
-+#| msgid ""
-+#| "The idea is simply to select for each cell of the array the smallest "
-+#| "value from the part not already sorted. Thus for the first cell, it takes "
-+#| "the smallest value over the whole array. For the second one, it takes the "
-+#| "second smallest value, which is the smallest value from the cell not "
-+#| "already sorted."
- msgid ""
- "The idea is simply to select for each cell of the array the smallest value "
- "from the part not already sorted. Thus for the first cell, it takes the "
- "smallest value over the whole array. For the second one, it takes the second "
--"smallest value, which is the smallest value from the cell not already sorted."
--msgstr ""
-+"smallest value, which is the smallest value from the cell not already "
-+"sorted. You of course don't have to sort the last cell of the array, that is "
-+"already sorted when you consider it."
-+msgstr ""
-+"A ideia é simplesmente selecionar para cada célula da array o menor\n"
-+"valor da parte ainda não ordenada. Então para a primeira célula,\n"
-+"pegamos o menor valor da array toda. Para a segunda, pegamos o segundo\n"
-+"menor valor, que é o menor valor da célula ainda não ordenado."
- 
- #. type: Content of: <p><p>
--#: src/lessons/sort/basic/selection/AlgSelectionSort.html:13
-+#: src/lessons/sort/basic/selection/AlgSelectionSort.html:14
-+#, fuzzy
-+#| msgid ""
-+#| "More generally, for the cell N, it looks the cell M in [n;len] containing "
-+#| "the smallest possible value of the interval. Then, it swaps the content "
-+#| "of cell N with the one of cell M."
- msgid ""
--"More generally, for the cell N, it looks the cell M in [n;len] containing "
-+"More generally, for the cell N, it looks the cell M in [N;len] containing "
- "the smallest possible value of the interval. Then, it swaps the content of "
- "cell N with the one of cell M."
- msgstr ""
-+"De forma mais geral, para a célula N, ele busca a célula M em [n;len]\n"
-+"contendo o menor valor possível do intervalo. Então, troca o conteúdo\n"
-+"da célula N com o da célula M."
- 
- #. type: Content of: <p><p><h2>
--#: src/lessons/sort/basic/selection/AlgSelectionSort.html:17
-+#: src/lessons/sort/basic/selection/AlgSelectionSort.html:18
- msgid "Existing variations"
--msgstr ""
-+msgstr "Variações existentes"
- 
- #. type: Content of: <p><p>
--#: src/lessons/sort/basic/selection/AlgSelectionSort.html:18
-+#: src/lessons/sort/basic/selection/AlgSelectionSort.html:19
- msgid ""
- "Another classical algorithm which idea is based on the selection of good "
- "elements is HeapSort, but it uses a heap data structure which we did not see "
- "yet. Simply remember that HeapSort provides a O(n log n) performance in "
- "worst case, which is why it is a very interesting algorithm in practice."
- msgstr ""
-+"Outro algoritmo clássico cuja ideia é baseada na seleção de bons\n"
-+"elementos é o HeapSort, mas ele usa uma estrutura de dados heap que\n"
-+"ainda não vimos. Simplesmente lembre que o HeapSort fornece um\n"
-+"desempenho O(n log n) no pior caso, que é o motivo para ele ser bem\n"
-+"interessante na prática."
- 
- #. type: Content of: <h1>
- #: src/lessons/sort/basic/comb/AlgCombSort.html:2
- msgid "CombSort"
--msgstr ""
-+msgstr "CombSort"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/comb/AlgCombSort.html:4
-@@ -8759,7 +9010,7 @@
- #: src/lessons/maze/island/IslandMaze.html:67
- #: src/lessons/welcome/bat/bool1/Max1020.html:6
- msgid "[!scala]"
--msgstr ""
-+msgstr "[!scala]"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/comb/AlgCombSort.html:27
-@@ -8771,12 +9022,19 @@
- "the operation, and then convert the result back to Int to store it into gap. "
- "This should be written this way:"
- msgstr ""
-+"Um detalhe perigoso é que temos que dividir o intervalo, que é um\n"
-+"inteiro (ou do tipo Int), por 1.3, que é um Double. O sistema de tipos\n"
-+"do scala não nos deixa fazer isto, por que tal discrepância\n"
-+"normalmente significa um erro de programação. Como isto não é um erro\n"
-+"neste caso, vamos ter que converter o intervalo para Double para o\n"
-+"momento da operação, e então converter o resultado de volta para Int\n"
-+"para armazená-lo no intervalo. Isto deve ser escrito desta forma:"
- 
- #. type: Content of: <pre>
- #: src/lessons/sort/basic/comb/AlgCombSort.html:31
- #, no-wrap
- msgid "gap = (gap.asInstanceOf[Double] / 1.3).asInstanceOf[Int]"
--msgstr ""
-+msgstr "gap = (gap.asInstanceOf[Double] / 1.3).asInstanceOf[Int]"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/comb/AlgCombSort.html:32
-@@ -8787,12 +9045,18 @@
- "been a pain to debug if not catch by the type checker. And since the Scala's "
- "authors are pragmatic, the previous expression can be simplified:"
- msgstr ""
-+"Isto é meio exagerado, mas na verdade, esta notação não é muito\n"
-+"complexa. E lembre que o verificador de sintaxe é seu amigo. Ele às\n"
-+"vezes é chato e irritante (como neste caso), mas frequentemente pega\n"
-+"bugs esquisitos que seriam trabalhosos para depurar se não fosse o\n"
-+"verificador de sintaxe. E como os autores do Scala são pragmáticos, a\n"
-+"expressão anterior pode ser simplificada:"
- 
- #. type: Content of: <pre>
- #: src/lessons/sort/basic/comb/AlgCombSort.html:36
- #, no-wrap
- msgid "gap = (gap.toDouble / 1.3).toInt"
--msgstr ""
-+msgstr "gap = (gap.toDouble / 1.3).toInt"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/comb/AlgCombSort.html:37
-@@ -8801,6 +9065,10 @@
- "corresponding expressions <code>asInstanceOf[Double]</code> and "
- "<code>asInstanceOf[Int]</code>. It's not very generic, but it's very handy."
- msgstr ""
-+"<code>toDouble</code> e <code>toInt</code> são apenas atalhos para as\n"
-+"expressões correspondentes <code>asInstanceOf[Double]</code> e\n"
-+"<code>asInstanceOf[Int]</code>. Não é muito genérico, mas é bem\n"
-+"prático."
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/comb/AlgCombSort.html:41
-@@ -8809,11 +9077,14 @@
- "rediscovered and popularized by Stephen Lacey and Richard Box, who described "
- "it in Byte Magazine in April 1991."
- msgstr ""
-+"Este algoritmo foi inventanndo por Wlodek Dobosiewicz em 1980, e\n"
-+"depois redescoberto e popularizado por Stephen Lacey e Richard Box,\n"
-+"que o descreveram na Byte Magazine em Abril de 1991."
- 
- #. type: Content of: <h1>
- #: src/lessons/sort/basic/comb/AlgCombSort11.html:2
- msgid "CombSort11"
--msgstr ""
-+msgstr "CombSort11"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/comb/AlgCombSort11.html:4
-@@ -8824,11 +9095,16 @@
- "CombSort to ensure just after the gap update that if it is 9 or 10, we "
- "should use 11 instead."
- msgstr ""
-+"Os autores deste algoritmo observaram que o desempenho é aumentado se\n"
-+"nos certificarmos que os últimos valores do intervalo são (11, 8, 6,\n"
-+"4, 3, 2, 1) ao invés de (9, 6, 4, 3, 2, 1) ou (10, 7, 5, 3, 2,\n"
-+"1). Retrabalhar o código do CombSort para garantir apenas que depois\n"
-+"da atualização do intervalo que se ele for 9 ou 10, devemos usar 11."
- 
- #. type: Content of: <h1>
- #: src/lessons/sort/basic/gnome/AlgGnomeSort.html:2
- msgid "GnomeSort"
--msgstr ""
-+msgstr "GnomeSort"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/gnome/AlgGnomeSort.html:4
-@@ -8838,6 +9114,11 @@
- "supposed behavior of garden gnomes when they sort flower pots. Here is a "
- "description of the algorithm by its author:"
- msgstr ""
-+"O Gnome sort é similar ao insertion sort, mas os elementos são movidos\n"
-+"de poisção por uma série de trocas que se parecem com o bubble sort. O\n"
-+"nome veio do suposto comportamento que gnomos de jardim tem quando\n"
-+"ordenam vasos de flores. Aqui está uma descrição do algoritmo por seu\n"
-+"autor:"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/basic/gnome/AlgGnomeSort.html:9
-@@ -8857,7 +9138,7 @@
- #: src/lessons/sort/dutchflag/DutchFlagAlgo.html:2
- #: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:2
- msgid "The Dutch Flag Problem"
--msgstr ""
-+msgstr "O problema da bandeira holandesa"
- 
- #. type: Content of: <p>
- #: src/lessons/sort/dutchflag/Main.html:4
-@@ -8869,11 +9150,18 @@
- "complexity is not trivial, but not complex either.  It can easily be "
- "formally proven, but it's not absolutely trivial either."
- msgstr ""
-+"Este problema foi proposto primeiro por E.W Dijkstra em 1976 (no\n"
-+"capítulo 14 de seu livro \"A Discipline of Programming\"). É uma\n"
-+"variação clássica de algoritmos de ordenação desde então. Ele é às\n"
-+"vezes útil em vida real, mas se tornou famosos por suas propriedades\n"
-+"pedagógicas: sua complexidade não é trivial, mas não é muito\n"
-+"complexo. Pode ser provados formalmente com facilidade, mas não é de\n"
-+"forma alguma trivial."
- 
- #. type: Content of: <ul><li>
- #: src/lessons/sort/dutchflag/Main.html:13
- msgid "A temporal view could be welcomed."
--msgstr ""
-+msgstr "Uma visão temporal pode ser bem-vinda."
- 
- #. type: Content of: <ul><li>
- #: src/lessons/sort/dutchflag/Main.html:14
-@@ -8881,6 +9169,8 @@
- "Other exercises, for example with 2 colors only or with more than 3 colors, "
- "could generalize the proposed approach."
- msgstr ""
-+"Outros exercícios, por exemplo com 2 cores apenas ou com mais de 3\n"
-+"cores, podem generalizar a abordagem proposta."
- 
- #. type: Content of: <ul><li>
- #: src/lessons/sort/dutchflag/Main.html:15
-@@ -8974,7 +9264,6 @@
- 
- #. type: Content of: <h2>
- #: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:9
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:8
- msgid "Provided functions"
- msgstr ""
- 
-@@ -9227,7 +9516,7 @@
- msgid ""
- "Your work is to help this poor guy sorting his stack by flipping the "
- "pancakes. Each pancake is defined by its radius and rank within the stack, "
--"where the bottom pancake is at rank 0, and the one above at rank 1."
-+"with the top-most pancake is at rank 0, and the one below at rank 1."
- msgstr ""
- 
- #. type: Content of: <p>
-@@ -10207,7 +10496,6 @@
- 
- #. type: Content of: <pre>
- #: src/plm/universe/turtles/TurtleWorld.html:22
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:10
- #, no-wrap
- msgid ""
- "[!java|c]double [/!]getX()[!scala]:Double[/!]\n"
-@@ -10465,6 +10753,439 @@
- msgstr ""
- 
- #. type: Content of: <h1>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:2
-+#, fuzzy
-+#| msgid "Sorting World"
-+msgid "ConsWorld"
-+msgstr "Mundo da ordenação"
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:4
-+msgid ""
-+"This world allows you to experiment with the recursive strings, as they were "
-+"first defined in Lisp. It is very similar to the BatWorld, but you are "
-+"supposed to write recursive functions working on [!python|java]recursive "
-+"strings. Since [!thelang] does not provide such a construct natively, the "
-+"ConsWorld defines recursive lists of type <code>RecList</code>.[/!] [!"
-+"scala]lists of integers (<code>List[Int]</code>)."
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:12
-+msgid ""
-+"Any given such list is either the empty list (noted <code>[!scala]Nil[/!][!"
-+"java]null[/!][!python]None[/!]</code>), or an integer followed by a list. If "
-+"a list is not empty, you can retrieve its first integer with <code>list."
-+"head</code> and the list containing its other parameters with <code>list."
-+"tail</code>. Of course, the empty list has no head nor the tail, so trying "
-+"to access these elements will result in an (unpleasant) error message."
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:20
-+msgid ""
-+"To build your own list, you need to concatenate a head and a tail as "
-+"follows: [!java|python]<code>cons(head, tail)</code>[/!] [!scala]<code>head::"
-+"tail</code> Note that <code>::</code> is a generic operator in Scala to "
-+"build lists.[/!]"
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:26
-+msgid ""
-+"So, in summary, you can solve every exercises of this lesson with the "
-+"following constructs."
-+msgstr ""
-+
-+#. type: Content of: <ul><li>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:30
-+msgid "<b>The empty string:</b>"
-+msgstr ""
-+
-+#. type: Content of: <ul><li><pre>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:30
-+#, fuzzy, no-wrap
-+#| msgid "[!java|c]'R'[/!][!scala|python]\"R\"[/!]"
-+msgid "[!java]null[/!][!scala]Nil[/!][!python]None[/!]"
-+msgstr "[!java|c]'R'[/!][!scala|python]\"R\"[/!]"
-+
-+#. type: Content of: <ul><li>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:31
-+msgid "<b>Get the first element of <code>l</code></b>"
-+msgstr ""
-+
-+#. type: Content of: <ul><li><pre>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:31
-+#, no-wrap
-+msgid "l.head"
-+msgstr ""
-+
-+#. type: Content of: <ul><li>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:32
-+msgid "<b>Get the rest of the list</b>, when the first element is removed:"
-+msgstr ""
-+
-+#. type: Content of: <ul><li><pre>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:32
-+#, no-wrap
-+msgid "l.tail"
-+msgstr ""
-+
-+#. type: Content of: <ul><li>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:33
-+msgid ""
-+"<b>Build a list</b> from a <code>value</code> and a <code>list</code>: [!"
-+"java|python]"
-+msgstr ""
-+
-+#. type: Content of: <ul><li><pre>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:34
-+#, no-wrap
-+msgid "cons(value, list)"
-+msgstr ""
-+
-+#. type: Content of: <ul><li><pre>
-+#: src/lessons/recursion/cons/universe/ConsWorld.html:35
-+#, no-wrap
-+msgid "value::list"
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Main.html:2
-+msgid "Recursive Lists"
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/Main.html:3
-+msgid ""
-+"This lesson contains a bunch of classical exercises on recursive lists.  It "
-+"is certainly not the most pleasant lesson to do, but I think that it is the "
-+"easiest of the PLM lessons dealing with recursion."
-+msgstr ""
-+
-+#. type: Content of: <ul><li>
-+#: src/lessons/recursion/cons/Main.html:10
-+msgid ""
-+"New exercises could be proposed, such as http://webloria.loria.fr/~quinson/"
-+"Teaching/TOP/02-td-recursivite-enonce.pdf If you know some others, please "
-+"report them as an issue."
-+msgstr ""
-+
-+#. type: Content of: <ul><li>
-+#: src/lessons/recursion/cons/Main.html:13
-+msgid ""
-+"It would be interesting to check the asymptotic complexity of the student's "
-+"code, but that does not sound easy to do. In Python and Java (where we "
-+"provide a hand-made RecList class), we could count the amount of cons per "
-+"exercise, but it won't be easy to relate this to the right BatTest. For "
-+"Scala, it sounds even more difficult as we use the classical :: operators of "
-+"the language. That will be difficult to override to add a counting "
-+"mechanism. Another solution would be to ensure that the call stack does not "
-+"pass a given threshold, but that sounds very difficult too. Any idea is "
-+"welcome."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Length.html:2
-+msgid "Length"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Length.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return its "
-+"length[!scala] (without using its <code>size</code> method, of course)[/!]."
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/Length.html:5
-+#: src/lessons/recursion/cons/IsMember.html:7
-+#: src/lessons/recursion/cons/Occurrence.html:7
-+#: src/lessons/recursion/cons/Last.html:6
-+#: src/lessons/recursion/cons/Min.html:6
-+#: src/lessons/recursion/cons/Increasing.html:6
-+#: src/lessons/recursion/cons/ButLast.html:6
-+#: src/lessons/recursion/cons/PlusOne.html:5
-+#: src/lessons/recursion/cons/Remove.html:8
-+#: src/lessons/recursion/cons/ButNfirst.html:6
-+msgid "Your solution should be linear in time."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/IsMember.html:2
-+msgid "IsMember"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/IsMember.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an "
-+"integer, return true if the given integer is one of the elements of the "
-+"list, or false if it cannot be found."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Occurrence.html:2
-+#, fuzzy
-+#| msgid "Occurrence of a value"
-+msgid "Occurrences"
-+msgstr "Ocorrência de um valor"
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Occurrence.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an "
-+"integer, return the amount of occurrences of the given integer in the list. "
-+"If the integer is not a member of the list, the function should thus return "
-+"0."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Last.html:2
-+msgid "Last"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Last.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return its "
-+"last element.  You can assume that the list is not empty."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Min.html:2
-+msgid "Min"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Min.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return the "
-+"smallest of its values.  You will probably need an extra function, even if "
-+"you can assume that the list is not empty."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Increasing.html:2
-+msgid "Increasing"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Increasing.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return "
-+"whether its elements form an increasing sequence (i.e., if the elements are "
-+"sorted from the smallest to the largest one)."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/ButLast.html:2
-+msgid "But Last"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/ButLast.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return the "
-+"list containing every elements but the last one.  You can assume that the "
-+"list is not empty."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/PlusOne.html:2
-+msgid "PlusOne"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/PlusOne.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return a new "
-+"list containing all elements of your parameter incremented by one."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Remove.html:2
-+msgid "Remove"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Remove.html:4
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] <code>L</"
-+"code>and an integer, return a new list containing all elements of L that are "
-+"not equal to the value received as parameter."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Nth.html:2
-+msgid "Nth"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Nth.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
-+"<code>N</code>, return its <code>N</code>th element."
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/Nth.html:6
-+#: src/lessons/recursion/cons/Nfirst.html:7
-+msgid ""
-+"You can assume that the list is long enough, i.e. that there is at least "
-+"<code>N</code> elements.  Your solution should be linear in time."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Nfirst.html:2
-+msgid "Nfirst"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Nfirst.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
-+"<code>N</code>, return the list constituted of the first <code>N</code> "
-+"elements. You can assume that the list is long enough, i.e. that there is at "
-+"least <code>N</code> elements."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Nlast.html:2
-+msgid "Nlast"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Nlast.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
-+"<code>N</code>, return the list with only the <code>N</code> last elements."
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/Nlast.html:6
-+#: src/lessons/recursion/cons/ButNlast.html:6
-+msgid ""
-+"Your solution should be linear in time, but you will probably need to define "
-+"several functions to achieve that complexity."
-+msgstr ""
-+
-+#. type: Attribute 'alt' of: <div>
-+#: src/lessons/recursion/cons/Nlast.html:8
-+#: src/lessons/recursion/cons/ButNlast.html:8
-+#: src/lessons/recursion/cons/Reverse.html:8
-+#: src/lessons/recursion/cons/Concat.html:8
-+msgid "I cannot do it in linear time"
-+msgstr ""
-+
-+#. type: Content of: <div>
-+#: src/lessons/recursion/cons/Nlast.html:9
-+#: src/lessons/recursion/cons/ButNlast.html:9
-+msgid ""
-+"The trick is to compute only once (and beforehand) how many elements you "
-+"should keep."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/ButNfirst.html:2
-+msgid "But Nfirst"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/ButNfirst.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
-+"<code>N</code>, return the list without the <code>N</code> first elements."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/ButNlast.html:2
-+msgid "But Nlast"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/ButNlast.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
-+"<code>N</code>, return the list without the <code>N</code> last elements."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Reverse.html:2
-+#, fuzzy
-+#| msgid "Inverse"
-+msgid "Reverse"
-+msgstr "Inversa"
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Reverse.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return a new "
-+"list with all elements in reverse order."
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/Reverse.html:5
-+msgid ""
-+"This function is very important and you should not pass that challenge.  "
-+"Your solution should be linear in time, with the help of helper functions."
-+msgstr ""
-+
-+#. type: Content of: <div>
-+#: src/lessons/recursion/cons/Reverse.html:9
-+msgid ""
-+"You need an helper function in which the result is accumulated (built) at "
-+"each step."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/Concat.html:2
-+msgid "Concat"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/Concat.html:3
-+msgid ""
-+"Given two [!scala]List[Int][/!][!java|python]recursive list[/!] <code>l1</"
-+"code> and <code>l2</code>, return a new list with all elements of <code>l1</"
-+"code> followed by the elements of <code>l2</code>."
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/Concat.html:6
-+msgid ""
-+"Your solution should be linear in time, with the help of helper functions."
-+msgstr ""
-+
-+#. type: Content of: <div>
-+#: src/lessons/recursion/cons/Concat.html:9
-+msgid ""
-+"You need to modify <code>l1</code> beforehand so that the computations at "
-+"each step of the recursion are in constant time."
-+msgstr ""
-+
-+#. type: Content of: <h1>
-+#: src/lessons/recursion/cons/AllDifferent.html:2
-+msgid "All Different"
-+msgstr ""
-+
-+#. type: Content of: outside any tag (error?)
-+#: src/lessons/recursion/cons/AllDifferent.html:3
-+msgid ""
-+"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return true "
-+"if any two elements of the list are different (ie, if no element appears "
-+"more than once in the list)."
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/cons/AllDifferent.html:6
-+msgid ""
-+"The simplest solution is in O(n²), meaning that it runs in quadratic time.  "
-+"You will probably have to define one extra function for that.  Another much "
-+"more complex solution runs in O(n log(n))."
-+msgstr ""
-+
-+#. type: Content of: <h1>
- #: src/lessons/recursion/Main.html:2
- msgid "Recursive algorithms"
- msgstr ""
-@@ -10707,19 +11428,46 @@
- "two sides of an equilateral triangle."
- msgstr ""
- 
--#. type: Attribute 'alt' of: <p><div>
-+#. type: Content of: <p>
- #: src/lessons/recursion/koch/Koch.html:20
-+#, fuzzy
-+#| msgid "The pseudo-code of this algorithm is thus the following:"
-+msgid "The pseudo-code of the general case is the following:"
-+msgstr "O pseudo-código deste algoritmo é então o seguinte:"
-+
-+#. type: Content of: <pre>
-+#: src/lessons/recursion/koch/Koch.html:22
-+#, no-wrap
-+msgid ""
-+"  Draw recursively a smaller segment\n"
-+"  Turn 60 degrees to the left\n"
-+"  Draw recursively a smaller segment  \n"
-+"  Turn 120 degrees to the right\n"
-+"  Draw recursively a smaller segment\n"
-+"  Turn 60 degrees to the left\n"
-+"  Draw recursively a smaller segment\n"
-+msgstr ""
-+
-+#. type: Content of: <p>
-+#: src/lessons/recursion/koch/Koch.html:30
-+msgid ""
-+"As you can see, the function forward() is not called from the recursive "
-+"case, only in the base case when there is no recursive call."
-+msgstr ""
-+
-+#. type: Attribute 'alt' of: <p><div>
-+#: src/lessons/recursion/koch/Koch.html:34
- msgid "Too much letters. Please picture it."
- msgstr ""
- 
- #. type: Content of: <p><div><p>
--#: src/lessons/recursion/koch/Koch.html:21
-+#: src/lessons/recursion/koch/Koch.html:35
- #: src/lessons/recursion/koch/SquareKoch.html:9
- msgid "Here are the results of the first levels of recursion."
- msgstr ""
- 
- #. type: Content of: <p>
--#: src/lessons/recursion/koch/Koch.html:25
-+#: src/lessons/recursion/koch/Koch.html:39
- msgid ""
- "You must write the <code>snowSide()</code> method, which is recursive but "
- "<b>do not call snowFlake from snowSide</b>, or you will get very strange and "
-@@ -10884,6 +11632,31 @@
- #. type: Content of: <p><p><p><p><p>
- #: src/lessons/recursion/tree/Tree.html:16
- msgid ""
-+"At the end, here is the pseudo-code of the general case (you should add the "
-+"base case yourself):"
-+msgstr ""
-+
-+#. type: Content of: <p><p><p><p><pre>
-+#: src/lessons/recursion/tree/Tree.html:18
-+#, no-wrap
-+msgid ""
-+"  Move forward of the desired length\n"
-+"  Draw (recursively) the right subtree\n"
-+"  Draw (recursively) the left subtree\n"
-+"  Move back to your initial position\n"
-+msgstr ""
-+
-+#. type: Content of: <p><p><p><p><p>
-+#: src/lessons/recursion/tree/Tree.html:23
-+msgid ""
-+"Don't forget to add the base case to your code, or your buggle will enter an "
-+"infinite loop.  Then, drawing the right subtree comes down to turn right and "
-+"then draw the subtree."
-+msgstr ""
-+
-+#. type: Content of: <p><p><p><p><p>
-+#: src/lessons/recursion/tree/Tree.html:26
-+msgid ""
- "As you can see, each recursion level is represented by a distinctive color. "
- "For that, you have to call the <code>current(step)</code>, passing the "
- "current recursion level as a parameter. This will pick the right color for "
-@@ -10892,7 +11665,7 @@
- msgstr ""
- 
- #. type: Content of: <p><p><p><p><p>
--#: src/lessons/recursion/tree/Tree.html:20
-+#: src/lessons/recursion/tree/Tree.html:30
- msgid ""
- "If you get your function wrong, this can easily become hairly to debug as "
- "your errors will appear at each level of the recursion, completely changing "
-@@ -11017,12 +11790,12 @@
- msgid ""
- "Here are some of the figures that you can produce with your <code>Spiral</"
- "code> function, provided that you come with the right parameters. You can "
--"switch to the creative mode (from the Session menu)  to disable the world "
-+"switch to the creative mode (from the Exercise menu)  to disable the world "
- "comparison when you explore with these spirals."
- msgstr ""
- 
- #. type: Content of: <p>
--#: src/lessons/recursion/spiral/SpiralUse.html:19
-+#: src/lessons/recursion/spiral/SpiralUse.html:21
- msgid ""
- "If you discover a cool figure, don't forget to send your parameters (menu "
- "Help/feedback) so that we can add it to the list!"
-@@ -12954,370 +13727,6 @@
- msgstr ""
- 
- #. type: Content of: <h2>
--#: src/lessons/lander/Main.html:2 src/lessons/lander/short_desc.html:2
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:2
--msgid "Lunar Lander"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:4 src/lessons/lander/short_desc.html:4
--msgid ""
--"In this lesson you pilot a lunar landing module in increasingly complex "
--"situations."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:7
--msgid ""
--"At each step of the simulation, the player issues a command controlling how "
--"much the angle and thrust of the lander should change"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:10
--msgid "Ideas concerning the progression of exercises:"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:12
--msgid ""
--"A lander in vertical position above flat ground, the player can only control "
--"thrust (done)"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:14
--msgid ""
--"A lander in vertical position not above flat ground, the player control "
--"thrust and angle (done)"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:16
--msgid ""
--"A lander with difficult angle and speed not above flat ground, the player "
--"control thrust and angle"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:18
--msgid ""
--"A lander with difficult angle and speed not above flat ground, with "
--"difficult ground, the player control thrust and angle"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:20
--msgid "Same with wind?"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/short_desc.html:7
--msgid "This lesson assumes some basic programming and physics skills."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:4
--msgid ""
--"In this universe you pilot a lunar lander. At each simulation step you're "
--"given the lander's position, speed, angle and thrust and must issue a "
--"command adjusting its angle and thrust."
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:12
--msgid "Get the X and Y position of the lander."
--msgstr "Obter (Get) as posições X e Y do \"lander\"."
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:13
--#, no-wrap
--msgid ""
--"[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
--"[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"
--msgstr ""
--"[!java|c]double [/!]getVelocidadeX()[!scala]:Double[/!]\n"
--"[!java|c]double [/!]getVelocidadeY()[!scala]:Double[/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:15
--msgid "Get the horizontal and vertical speed of the lander."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:17
--#, no-wrap
--msgid ""
--"[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
--"[!java|c]void [/!]setDesiredAngle([!java|c]double [/!]desiredAngle[!scala]:Double[/!])"
--msgstr ""
--"[!java|c]double [/!]getÂngulo()[!scala]:Double[/!]\n"
--"[!java|c]void [/!]setÂnguloDesejado([!java|c]double [/!]ÂnguloDesejado[!scala]:Double[/!])"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:19
--msgid "Get or set the angle of the lander."
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:20
--msgid ""
--"An angle of 0° denotes a vertical position where the \"head\" of the lander "
--"points up.  This is the angle you must land with. A positive angle denotes a "
--"left-leaning lander, a negative angle a right-leaning one. You cannot lean "
--"more than by ±90°, and the angle can vary by at most ±5° in one step."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:25
--#, no-wrap
--msgid ""
--"[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
--"[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"
--msgstr ""
--"[!java|c]int [/!]getImpulso()[!scala]:Int[/!]\n"
--"[!java|c]void [/!]setImpulsoDesejado([!java|c]int [/!]thrust[!scala]:Int[/!])"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
--msgid "Get or set the thrust of the lander."
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
--msgid ""
--"You can only increment or decrement the thrust by 1 between two simulation "
--"steps, so if the current thrust is 2 and you ask for 4, you'll only get 3 in "
--"the next step. If you ask for less than 0 (resp. more than 4), everything "
--"will be as if you had asked for 0 (resp. 4)."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:33
--#, no-wrap
--msgid "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
--msgstr "[!java|c]int [/!]getCombustível()[!scala]:Int[/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:34
--msgid ""
--"Get the remaining fuel in the lander.  At each step of the simulation the "
--"lander consumes as many fuel units as the current thrust. Once you run out "
--"of fuel you're in free fall so beware!"
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:38
--#, no-wrap
--msgid "[!java]List<Point> [/!]getGround()[! scala]:List[Point][/!]"
--msgstr "[!java]List<Point> [/!]getChão()[! scala]:List[Point][/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:39
--msgid ""
--"Get the vertices of the ground's profile from left to right.  [!java|"
--"scala]You can retrieve the X and Y coordinates of each point with the "
--"corresponding methods of your point: <code>p.x()</code> and <code>p.y()</"
--"code>.[!/] [!python]Each point is an array of two integers denoting "
--"respectively the X and Y coordinates of that point.[/!]"
--msgstr ""
--
--#. type: Content of: <h1>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:2
--msgid "Lander 101"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:4
--msgid ""
--"Congratulations! You won a (one-way) trip to Mars in a cereal box. NASA was "
--"kind enough to donate the Lunar Excursion Module for this mission, so that's "
--"what you'll be flying."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:8
--msgid ""
--"Before you take off, you must go through some basic landing simulation. You "
--"shouldn't have to fly the lander if all goes as planned but, as they say, "
--"\"better safe than sorry\"."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:12
--msgid ""
--"Your mission is to <b>land the lander with a vertical speed of at most 10 m/"
--"s.</b> There are two ways you can influence the lander's course: by "
--"adjusting its angle or by adjusting its thrust. In this simulation we only "
--"care about adjusting the thrust, expressed in m/s²."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:17
--msgid ""
--"The [!python]<code>step()</code> function[/!][!scala|java|c]code[/!] that "
--"you should write now will be called every 0.1 second during the simulation. "
--"It should set the desired thrust of the next simulation step, by calling "
--"<code>[!java]void [/!]setDesiredThrust([!java]int [/!]desiredThrust[!scala]:"
--"Integer[/!])</code> where <code>desiredThrust</code> is some integer between "
--"0 and 4 (that is, a thrust between 0 m/s² and 4 m/s²). You can only "
--"increment or decrement the thrust by 1 between two simulation steps, so if "
--"the current thrust is 2 and you ask for 4, you'll only get 3 in the next "
--"step. If you ask for less than 0 (resp. more than 4), everything will be as "
--"if you had asked for 0 (resp. 4)."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:27
--msgid ""
--"In order to take informed decisions, you can query the lander's state. In "
--"this simulation you'll probably be interested in its vertical position: "
--"<code>[!java]double [/!]getY()[!scala]:Double[/!]</code>, and its vertical "
--"speed: <code>[!java]double [/!]getSpeedY()[!scala]:Double[/!]</code>. You "
--"can also ask for the thrust via <code>[!java]int [/!]getThrust()[!scala]:"
--"Integer[/!]</code> in case you don't remember what you asked for. Remember "
--"that Mars' gravity is 3.711 m/s², it might come in handy."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:35
--msgid ""
--"One last thing: the lander is pretty small so you don't have much fuel. At "
--"each step of the simulation the lander consumes as many fuel units as the "
--"current thrust. Once you run out of fuel you're in free fall so beware! You "
--"can consult the remaining amount of available fuel units using <code>[!"
--"java]int [/!]getFuel()[!scala]:Integer[/!]</code>."
--msgstr ""
--
--#. type: Content of: <h2>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:2
--msgid "Locate a Landing Zone"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:4
--msgid ""
--"After 200 days of traveling space and eating cereals you finally reach Mars. "
--"Time to land at last!"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:7
--msgid ""
--"The lander is on autopilot and all you have to do is look around and tell it "
--"where to land. The lander must <b>land on a flat zone</b> it you want to "
--"remain in one piece. You indicate the lander where to land by modifying the "
--"<code>getLandingZone</code> function so that it returns a [!java|"
--"scala]<code>Segment</code> representing the zone of your choice."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:13
--msgid ""
--"A segment is composed of two <code>Point</code>s, each of them composed of "
--"two <code>double</code>s. A segment is built via the <code>Segment([!"
--"java]Point [/!]start[!scala]:Point[/!], [!java]Point [/!]end[!scala]:"
--"Point[/!])</code> constructor.  A point is built via the <code>Point([!"
--"java]double [/!]x[!scala]:Double[/!], [!java]double [/!]y[!scala]:"
--"Double[/!])</code> constructor. A point's coordinates are accessible via its "
--"<code>[!java]double [/!]x()[!scala]:Double[/!]</code> and <code>[!"
--"java]double [/!]y()[!scala]:Double[/!]</code> methods."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:18
--msgid ""
--"[/!] [!python]tuple of two X coordinates representing the zone of your "
--"choice.[/!]"
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:22
--msgid ""
--"In order to determine which zone to return, you'll need to call <code>[!"
--"java]List<Point> [/!]getGround()[!scala]List[Point][/!]</code>, which "
--"returns the vertices of the ground's profile as a list of [!java|"
--"scala]<code>Point</code>[/!] [!python]tuples (x,y)[/!]."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:27
--msgid ""
--"One more thing: your function should return a valid flat zone in any kind of "
--"situation, not just for the currently visualized one. That's because it will "
--"be not only tested against that world, but also against the one we had in "
--"the previous exercise. As usual, you can see the other existing worlds with "
--"the appropriate combobox."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:33
--msgid ""
--"Have a safe landing! Don't forget to put on your space suit on your way out."
--msgstr ""
--
--#. type: Content of: <h1>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:2
--msgid "Fly the Lander!"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:4
--msgid ""
--"After 30 days of staring at rocks and eating cereals you decide it's time to "
--"go explore other parts of the planet."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:7
--msgid ""
--"You fly for a while and suddenly realize you're almost out of fuel.  "
--"Unfortunately you're in a delicate situation and the autopilot is helpless.  "
--"You will have to pilot the lander yourself. Your mission is to <b>land the "
--"lander on a flat zone with a vertical speed less than 10 m/s, an horizontal "
--"speed less than 5 m/s and an angle of 0°.</b>"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:13
--msgid ""
--"You must define two functions: <code>[!java]void [/!]initialize()</code> and "
--"<code>[!java]void [/!]step()</code>. <code>initialize()</code> is called "
--"once just after you press \"Run\". You can use it to chose some flat zone. "
--"As before, <code>step()</code> is called every 0.1 second and is used for "
--"adjusting the lander's thrust and angle. As in the first exercise the "
--"lander's thrust is adjusted via <code>[!java]void [/!]setDesiredThrust([!"
--"java]int [/!]desiredThrust[!scala]:Integer[/!])</code>.  But you can also "
--"control its angle via <code>[!java]void [/!]setDesiredAngle([!java]double "
--"[/!]desiredAngle[!scala]:Double[/!])</code>.  An angle of 0° denotes a "
--"vertical position where the \"head\" of the lander points up.  This is the "
--"angle you must land with. A positive angle denotes a left-leaning lander, a "
--"negative angle a right-leaning one. You cannot lean more than by ±90°, and "
--"the angle can vary by at most ±5° in one step."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:26
--msgid ""
--"As in the previous exercise, <code>[!java]List<Point> [/!]getGround()[!"
--"scala]:List[Point][/!]</code> returns the vertices of the ground's profile "
--"from left to right.  Please refer to the documentation (Help/About this "
--"world) for a reference manual of your lunar lander."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:30
--msgid ""
--"As before, your program must safely land the lander in all the situations "
--"encountered so far in addition to this new one."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:33
--msgid "Good luck, try not to crash!"
--msgstr "Boa sorte, tente não cair!"
--
--#. type: Content of: <h2>
- #: lib/doc/MainWindow.html:1
- msgid "The PLM Main Window"
- msgstr "A Janela Principal do PLM"
-@@ -13553,6 +13962,39 @@
- "O botão <b>Marcar</b> pede que o seu \"buggle\" deixe uma marca atrás dele "
- "depois que sair."
- 
-+#~ msgid "Get the X and Y position of the lander."
-+#~ msgstr "Obter (Get) as posições X e Y do \"lander\"."
-+
-+#~ msgid ""
-+#~ "[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
-+#~ "[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"
-+#~ msgstr ""
-+#~ "[!java|c]double [/!]getVelocidadeX()[!scala]:Double[/!]\n"
-+#~ "[!java|c]double [/!]getVelocidadeY()[!scala]:Double[/!]"
-+
-+#~ msgid ""
-+#~ "[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
-+#~ "[!java|c]void [/!]setDesiredAngle([!java|c]double [/!]desiredAngle[!scala]:Double[/!])"
-+#~ msgstr ""
-+#~ "[!java|c]double [/!]getÂngulo()[!scala]:Double[/!]\n"
-+#~ "[!java|c]void [/!]setÂnguloDesejado([!java|c]double [/!]ÂnguloDesejado[!scala]:Double[/!])"
-+
-+#~ msgid ""
-+#~ "[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
-+#~ "[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"
-+#~ msgstr ""
-+#~ "[!java|c]int [/!]getImpulso()[!scala]:Int[/!]\n"
-+#~ "[!java|c]void [/!]setImpulsoDesejado([!java|c]int [/!]thrust[!scala]:Int[/!])"
-+
-+#~ msgid "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
-+#~ msgstr "[!java|c]int [/!]getCombustível()[!scala]:Int[/!]"
-+
-+#~ msgid "[!java]List<Point> [/!]getGround()[! scala]:List[Point][/!]"
-+#~ msgstr "[!java]List<Point> [/!]getChão()[! scala]:List[Point][/!]"
-+
-+#~ msgid "Good luck, try not to crash!"
-+#~ msgstr "Boa sorte, tente não cair!"
-+
- #~ msgid "This code is then perfectly equivalent to the following one."
- #~ msgstr "Este código é então complemtamente equivalente ao seguinte."
- 
---- a/l10n/engine/fr.po
-+++ b/l10n/engine/fr.po
-@@ -20,12 +20,12 @@
- 
- #: src/lessons/lightbot/universe/LightBotExercise.java:56
- msgid "A light is still off."
--msgstr ""
-+msgstr "Une lumière est encore éteinte."
- 
- #: src/lessons/lightbot/universe/LightBotExercise.java:58
- #, java-format
- msgid "{0} lights (out of {1}) are still off."
--msgstr ""
-+msgstr "{0} lampes (sur {1}) sont encore éteintes."
- 
- #: src/lessons/maze/island/IslandMazeEntity.java:10
- #: src/lessons/maze/pledge/PledgeMazeEntity.java:10
-@@ -337,6 +337,8 @@
- "Sorry Dave, you cannot run backward that way. Exercising is hard enough -- "
- "please don't overplay."
- msgstr ""
-+"Désolé Dave, je ne peux pas te laisser courir à reculons. Faire du footing "
-+"est déjà assez dur comme ça, pas besoin de sur-jouer de la sorte."
- 
- #: src/lessons/welcome/loopfor/LoopCourseForestEntity.java:39
- msgid "You fall into water."
-@@ -439,12 +441,22 @@
- "within the\n"
- "provided method."
- msgstr ""
-+"Votre entité n'a pas démarré. Auriez-vous oublié de placer votre code dans "
-+"une méthode ? Ce problème survient souvent quand l'exercice s'attend à ce "
-+"que vous placiez votre code dans une méthode (nommée run() ou autrement) "
-+"mais que vous placez malgré tout des instructions comme avance() en dehors "
-+"de toute méthode. La solution la plus simple pour corriger ce problème est "
-+"de copier tout votre code (Ctrl-A Ctrl-C) puis d'utiliser la fonctionnalité "
-+"\"Exercice / réinitialiser\" du menu pour rétablir le code proposé. Ensuite, "
-+"collez votre code (Ctrl-V) à l'intérieur de la méthode fournie."
- 
- #: src/plm/core/lang/JVMCompiledLang.java:60
- msgid ""
- "Your entity failed to start. Your constructor seems to be broken, but I have "
- "no clue."
- msgstr ""
-+"Votre entité n'a pas démarré. Votre constructeur semble cassé, mais je ne "
-+"sais pas du tout pourquoi."
- 
- #: src/plm/core/lang/JVMCompiledLang.java:83
- #: src/plm/core/lang/LangLightbot.java:39
-@@ -501,13 +513,13 @@
- "Utilisez les touches TAB et majuscule-TAB pour nettoyer votre indentation.\n"
- 
- #: src/plm/core/lang/LangPython.java:66
--#, fuzzy
- msgid ""
- "You interrupted the execution, did you fall into an infinite loop ?\n"
- "Your program must stop by itself to successfully pass the exercise.\n"
- msgstr ""
--"Vous avez interrompu l'exécution.\n"
--"Votre programme doit s'arrêter de lui-même pour réussir l'exercice.\n"
-+"Vous avez interrompu l'exécution. Seriez-vous tombé dans une \n"
-+"boucle infinie ? Votre programme doit s'arrêter de lui-même pour \n"
-+"réussir l'exercice.\n"
- 
- #: src/plm/core/lang/LangPython.java:72
- msgid ""
-@@ -722,10 +734,9 @@
- msgid "The lesson "
- msgstr "Sélectionner une leçon"
- 
--#: src/plm/core/model/Game.java:379
--#, fuzzy
-+#: src/plm/core/model/Game.java:380
- msgid "Broken lesson"
--msgstr "Charger une leçon"
-+msgstr "Leçon cassée"
- 
- #: src/plm/core/model/Game.java:504
- #, java-format
-@@ -828,9 +839,8 @@
- msgstr "L''utilisateur est maintenant {0}"
- 
- #: src/plm/core/model/Users.java:175
--#, fuzzy
- msgid "A new PLM user has been created for you!"
--msgstr "Un nouvel utilisateur a été créé pour vous !"
-+msgstr "Un nouvel utilisateur PLM a été créé pour vous !"
- 
- #: src/plm/core/model/lesson/Exercise.java:78
- #, java-format
-@@ -919,9 +929,10 @@
- msgstr "Le monde {0} est cassé ({1}). Recalcule tous les mondes solutions."
- 
- #: src/plm/core/model/lesson/ExerciseTemplated.java:410
--#, fuzzy, java-format
-+#, java-format
- msgid "Cache file {0} is missing. Recompute all answer worlds."
--msgstr "Le monde {0} est cassé ({1}). Recalcule tous les mondes solutions."
-+msgstr ""
-+"Le fichier de cache {0} est manquant. Recalcule tous les mondes solutions."
- 
- #: src/plm/core/model/lesson/ExerciseTemplated.java:414
- #, java-format
-@@ -970,6 +981,8 @@
- "Something weird happened. Your session was not created/reloaded properly. "
- "Please report this issue."
- msgstr ""
-+"Il s'est passé quelque chose de bizarre. Votre session n'a pas été créée et "
-+"rechargée correctement. Merci de faire un rapport d'anomalie."
- 
- #: src/plm/core/model/session/ZipSessionKit.java:252
- msgid "Ok, quit and lose my data"
-@@ -1048,42 +1061,44 @@
- "Vous avez trouvé un bogue dans la PLM. Veuillez faire un rapport avec tous "
- "les détails possibles (y compris la pile d'exécution ci-dessous)."
- 
--#: src/plm/core/model/tracking/GitSpy.java:139
-+#: src/plm/core/model/tracking/GitSpy.java:160
- msgid "Pushing to the remote repository before exiting"
--msgstr ""
-+msgstr "Envoi de vos changements sur le serveur avant de quitter."
- 
--#: src/plm/core/model/tracking/GitUtils.java:74
-+#: src/plm/core/model/tracking/GitUtils.java:76
- msgid "Retrieving your session from the servers..."
--msgstr ""
-+msgstr "Récupération de votre session depuis le serveur..."
- 
--#: src/plm/core/model/tracking/GitUtils.java:117
-+#: src/plm/core/model/tracking/GitUtils.java:119
- msgid "Can't retrieve data stored on server."
--msgstr ""
-+msgstr "Impossible de récupérer les données sauvegardées sur le serveur."
- 
--#: src/plm/core/model/tracking/GitUtils.java:125
--#, fuzzy
-+#: src/plm/core/model/tracking/GitUtils.java:127
- msgid "last session data successfully retrieved"
--msgstr "L''utilisateur {0} a été supprimé avec succès"
-+msgstr "Les données de la session précédente ont été récupérées."
- 
--#: src/plm/core/model/tracking/GitUtils.java:128
--#, fuzzy
-+#: src/plm/core/model/tracking/GitUtils.java:130
- msgid "last session data successfully merged"
--msgstr "L''utilisateur {0} a été supprimé avec succès"
-+msgstr "Les données de la session précédente ont été fusionnées avec succès."
- 
--#: src/plm/core/model/tracking/GitUtils.java:131
-+#: src/plm/core/model/tracking/GitUtils.java:133
- msgid ""
- "Conflicts have been detected while synchronizing with last session data, "
- "trying to resolve it..."
- msgstr ""
-+"Des conflits d'édition ont été détectés lors de la synchronisation de vos "
-+"données. Tentative de résolution en cours..."
- 
- #. TODO: handle this case
- #: src/plm/core/model/tracking/GitUtils.java:159
- msgid "Cancelled the merge operation because of the following failures:"
- msgstr ""
- 
--#: src/plm/core/model/tracking/GitUtils.java:166
-+#: src/plm/core/model/tracking/GitUtils.java:168
- msgid "Can't merge data retrieved from server with local session data."
- msgstr ""
-+"Impossible de fusionner les données reçues du serveur avec votre session "
-+"locale."
- 
- #: src/plm/core/model/tracking/GitUtils.java:201
- msgid "Cannot synchronize your session with the servers (network down)."
-@@ -1091,27 +1106,31 @@
- "Impossible de synchroniser votre session avec les serveurs (le réseau est "
- "inutilisable)."
- 
--#: src/plm/core/model/tracking/GitUtils.java:224
-+#: src/plm/core/model/tracking/GitUtils.java:226
- msgid "Your session has been successfully saved into the clouds."
--msgstr ""
-+msgstr "Votre session a été sauvegardée avec succès dans les nuages."
- 
- #. An error occurred while pushing
- #. Try to synchronize with the remote branch before pushing again
--#: src/plm/core/model/tracking/GitUtils.java:229
-+#: src/plm/core/model/tracking/GitUtils.java:231
- msgid "Fetching the server's last version..."
--msgstr ""
-+msgstr "Récupération de la dernière version depuis le serveur..."
- 
--#: src/plm/core/model/tracking/GitUtils.java:233
-+#: src/plm/core/model/tracking/GitUtils.java:235
- msgid ""
- "Fetching the data's last version didn't solve the issue, please report this "
- "bug."
- msgstr ""
-+"Récupérer la dernière version depuis le serveur n'a pas suffit. Merci de "
-+"faire un rapport d'anomalie."
- 
--#: src/plm/core/model/tracking/GitUtils.java:236
-+#: src/plm/core/model/tracking/GitUtils.java:238
- msgid ""
- "A bug occurred while synchronizing your data with the server, please report "
- "the following error:"
- msgstr ""
-+"Un bug est apparu lors de la synchronisation de vos données avec le serveur. "
-+"Merci de rapporter l'erreur suivante :"
- 
- #: src/plm/core/ui/AboutLessonDialog.java:20
- msgid "About lesson - "
-@@ -1387,36 +1406,33 @@
- msgstr "Bravo"
- 
- #: src/plm/core/ui/ExercisePassedDialog.java:46
--#, fuzzy, java-format
-+#, java-format
- msgid ""
- "<html>Congratulations, you passed this exercise.<br>{0} tests passed.</html>"
- msgstr ""
--"Félicitations, vous avez réussi cet exercice.\n"
--"{0} tests passés."
-+"<html>Félicitations, vous avez réussi cet exercice.<br>{0} tests passés.</"
-+"html>"
- 
- #: src/plm/core/ui/ExercisePassedDialog.java:49
--#, fuzzy
- msgid "<html>Congratulations, you passed this exercise.</html>"
--msgstr "Félicitations, vous avez réussi cet exercice."
-+msgstr "<html>Félicitations, vous avez réussi cet exercice.</html>"
- 
- #: src/plm/core/ui/ExercisePassedDialog.java:59
--#, fuzzy, java-format
-+#, java-format
- msgid ""
- "<html>Congratulations, you passed this exercise.<br>({0} tests "
- "passed)<br>Which exercise will you do now?</html>"
- msgstr ""
--"Félicitations, vous avez réussi cet exercice.\n"
--"({0} tests passés)\n"
--"Par quel exercice voulez vous continuer ?"
-+"<html>Félicitations, vous avez réussi cet exercice.<bbr>({0} tests "
-+"passés)<br>Par quel exercice voulez vous continuer ?</html>"
- 
- #: src/plm/core/ui/ExercisePassedDialog.java:62
--#, fuzzy
- msgid ""
- "<html>Congratulations, you passed this exercise.<br>Which exercise will you "
- "do now?</html>"
- msgstr ""
--"Félicitations, vous avez réussi cet exercice.\n"
--"Par quel exercice voulez vous continuer ?"
-+"<html>Félicitations, vous avez réussi cet exercice.<br>Par quel exercice "
-+"voulez vous continuer ?</html>"
- 
- #: src/plm/core/ui/ExercisePassedDialog.java:72
- msgid "Give feedback"
-@@ -1929,28 +1945,30 @@
- msgid "World cannot be reset right now"
- msgstr "Le monde ne peut être réinitialisé pour l'instant"
- 
--#: src/plm/core/ui/action/RevertExercise.java:25
-+#: src/plm/core/ui/action/RevertExercise.java:20
- msgid "OK"
--msgstr ""
-+msgstr "OK"
- 
--#: src/plm/core/ui/action/RevertExercise.java:28
-+#: src/plm/core/ui/action/RevertExercise.java:23
- msgid ""
- "Reverting this exercise will erase all your work and cannot be undone.\n"
- " Are you sure that you want to proceed?"
- msgstr ""
-+"Réinitialiser cet exercice effacera tout votre travail et ne peut pas être "
-+"annulé. Êtes vous sûr de vouloir le faire ?"
- 
--#: src/plm/core/ui/action/RevertExercise.java:29
-+#: src/plm/core/ui/action/RevertExercise.java:24
- msgid "Warning"
--msgstr ""
-+msgstr "Attention"
- 
--#: src/plm/core/ui/action/RevertExercise.java:33
-+#: src/plm/core/ui/action/RevertExercise.java:28
- msgid "Revert canceled on user request -- your work was preserved."
- msgstr ""
-+"Réinitialisation annulée à votre demande -- votre travail a été préservé."
- 
--#: src/plm/core/ui/action/RevertExercise.java:51
--#, fuzzy
-+#: src/plm/core/ui/action/RevertExercise.java:39
- msgid "Exercise reverted"
--msgstr "Exercice"
-+msgstr "Exercice réinitialisé"
- 
- #: src/plm/core/ui/action/StartExecution.java:32
- msgid "Launch the execution of your code"
-@@ -2179,29 +2197,27 @@
- #: src/plm/universe/bat/BatEntity.java:38
- #, java-format
- msgid "Exception {0}: {1}"
--msgstr ""
-+msgstr "Exception {0} : {1}"
- 
- #: src/plm/universe/bugglequest/AbstractBuggle.java:156
- #: src/plm/universe/bugglequest/SimpleBuggle.java:31
- #: src/plm/universe/turtles/Turtle.java:216
--#, fuzzy
- msgid ""
- "Sorry Dave, I cannot let you use Left() with an uppercase. Use left() "
- "instead."
- msgstr ""
--"Désolé Dave, je ne peux pas pouvoir te laisser utiliser droite() dans cet "
--"exercice. Utilise plutôt gauche()."
-+"Désolé Dave, je ne peux pas pouvoir te laisser utiliser Left() avec une "
-+"majuscule. Utilise plutôt left() ou gauche()."
- 
- #: src/plm/universe/bugglequest/AbstractBuggle.java:159
- #: src/plm/universe/bugglequest/SimpleBuggle.java:36
- #: src/plm/universe/turtles/Turtle.java:219
--#, fuzzy
- msgid ""
- "Sorry Dave, I cannot let you use Right() with an uppercase. Use right() "
- "instead."
- msgstr ""
--"Désolé Dave, je ne peux pas pouvoir te laisser utiliser droite() dans cet "
--"exercice. Utilise plutôt gauche()."
-+"Désolé Dave, je ne peux pas pouvoir te laisser utiliser Right() avec une "
-+"majuscule. Utilise plutôt right() ou droite()."
- 
- #: src/plm/universe/bugglequest/AbstractBuggle.java:179
- #, java-format
-@@ -2398,10 +2414,10 @@
- msgid "  In ({0},{1})"
- msgstr "  En ({0},{1})"
- 
--#: src/plm/universe/bugglequest/BuggleWorld.java:563
--#, fuzzy, java-format
-+#: src/plm/universe/bugglequest/BuggleWorld.java:567
-+#, java-format
- msgid "  There is {0} entities where {1} were expected."
--msgstr "  Il n''y a que {0} formes là où {1} formes étaient attendues\n"
-+msgstr "  Il y a {0} formes là où {1} formes étaient attendues"
- 
- #: src/plm/universe/bugglequest/BuggleWorld.java:567
- #, java-format
-@@ -2614,48 +2630,99 @@
- msgstr "Je ne vois pas de différence (merci de rapporter cette anomalie)."
- 
- #: src/plm/universe/turtles/Line.java:120
--#, fuzzy
- msgid "That's not a line (please report this bug)."
--msgstr "Je ne vois pas de différence (merci de rapporter cette anomalie)."
-+msgstr "Ce n'est pas une ligne (merci de rapporter cette anomalie)."
- 
- #: src/plm/universe/turtles/Turtle.java:401
- #, java-format
- msgid "The turtle {0} is not heading to the right direction."
--msgstr ""
-+msgstr "La tortue {0} n''a pas la bonne orientation."
- 
- #: src/plm/universe/turtles/Turtle.java:403
- #, java-format
- msgid "The turtle {0} is at the right location."
--msgstr ""
-+msgstr "La tortue {0} est à l''emplacement attendu."
- 
- #: src/plm/universe/turtles/TurtleWorld.java:359
--#, fuzzy, java-format
-+#, java-format
- msgid "  There is {0} entities, but {1} entities were expected\n"
--msgstr "  Il n''y a que {0} formes là où {1} formes étaient attendues\n"
-+msgstr "  Il y a {0} entités là où {1} entités étaient attendues\n"
- 
- #: src/plm/universe/turtles/TurtleWorld.java:388
--#, fuzzy, java-format
-+#, java-format
- msgid "  There is {0} shapes, but only {1} shapes were expected\n"
--msgstr "  Il n''y a que {0} formes là où {1} formes étaient attendues\n"
-+msgstr "  Il y a {0} formes là où seulement {1} formes étaient attendues\n"
- 
- #: src/plm/universe/turtles/TurtleWorld.java:390
--#, fuzzy, java-format
-+#, java-format
- msgid "  There is only {0} shapes, but {1} shapes were expected\n"
- msgstr "  Il n''y a que {0} formes là où {1} formes étaient attendues\n"
- 
- #: src/plm/universe/turtles/TurtleWorld.java:417
- msgid "Superflous shapes in your solution:\n"
--msgstr ""
-+msgstr "Formes superflues dans votre solution : \n"
- 
- #: src/plm/universe/turtles/TurtleWorld.java:422
- msgid "Missing shapes in your solution:\n"
--msgstr ""
-+msgstr "Formes manquantes dans votre solution : \n"
- 
- #: src/plm/universe/turtles/TurtleWorld.java:433
- #, java-format
- msgid "  {0} (got {1} instead of {2})\n"
- msgstr "  {0} (trouvé {1} au lieu de {2})\n"
- 
-+#: src/plm/core/model/Game.java:379
-+#, java-format
-+msgid ""
-+"The lesson {0} encountered an issue while loading its exercises, please "
-+"report the issue and choose another lesson."
-+msgstr ""
-+"La leçon {0} a rencontré un problème lors du chargement de ses exercices. "
-+"Veuillez faire un rapport d'anomalie et choisir une autre leçon."
-+
-+#. TODO: handle this case
-+#: src/plm/core/model/tracking/GitUtils.java:161
-+msgid "Canceled the merge operation because of the following failures:"
-+msgstr "L'opération de fusion a rencontré les problèmes suivants :"
-+
-+#: src/plm/core/ui/FeedbackDialog.java:154
-+msgid ""
-+"Your feedback needs some little changes before being send,\n"
-+"please fix the following issue(s):\n"
-+"\n"
-+msgstr ""
-+"Votre rapport d'anomalie doit être légèrement modifié avant \n"
-+"de pouvoir l'envoyer. Merci de corriger les points suivants : \n"
-+"\n"
-+
-+#: src/plm/core/ui/FeedbackDialog.java:155
-+msgid "Incorrect feedback"
-+msgstr "Rapport d'anomalie invalide"
-+
-+#: src/plm/core/ui/FeedbackDialog.java:180
-+msgid ""
-+"The feedback's title is still the default one, please specify a relevant "
-+"one.\n"
-+msgstr ""
-+"Le titre est encore celui par défaut. Merci de résumer votre problème dans "
-+"le titre. \n"
-+
-+#: src/plm/core/ui/FeedbackDialog.java:184
-+msgid "The current title is empty, please specify a relevant title.\n"
-+msgstr "Le titre est vide. Merci de résumer votre problème dans le titre. \n"
-+
-+#: src/plm/core/ui/FeedbackDialog.java:188
-+msgid ""
-+"The feedback still contains the explanatory text (above the line of "
-+"---------), please remove it.\n"
-+msgstr ""
-+"Le corps du message contient encore le texte explicatif (au dessus de la "
-+"ligne de -------------), merci de le retirer. \n"
-+
-+#: src/plm/core/ui/MainFrame.java:619
-+msgid "Please wait, while the PLM is saving your session data."
-+msgstr "Veuillez patienter pendant que la PLM sauvegarde votre session."
-+
- #, fuzzy
- #~ msgid "Don't save code remotely, as the network seems unreachable."
- #~ msgstr ""
---- a/l10n/engine/pt_BR.po
-+++ b/l10n/engine/pt_BR.po
-@@ -2343,3 +2343,46 @@
- #, java-format
- msgid "  {0} (got {1} instead of {2})\n"
- msgstr ""
-+
-+#: src/plm/core/model/Game.java:379
-+#, java-format
-+msgid ""
-+"The lesson {0} encountered an issue while loading its exercises, please "
-+"report the issue and choose another lesson."
-+msgstr ""
-+
-+#. TODO: handle this case
-+#: src/plm/core/model/tracking/GitUtils.java:161
-+msgid "Canceled the merge operation because of the following failures:"
-+msgstr ""
-+
-+#: src/plm/core/ui/FeedbackDialog.java:154
-+msgid ""
-+"Your feedback needs some little changes before being send,\n"
-+"please fix the following issue(s):\n"
-+"\n"
-+msgstr ""
-+
-+#: src/plm/core/ui/FeedbackDialog.java:155
-+msgid "Incorrect feedback"
-+msgstr ""
-+
-+#: src/plm/core/ui/FeedbackDialog.java:180
-+msgid ""
-+"The feedback's title is still the default one, please specify a relevant "
-+"one.\n"
-+msgstr ""
-+
-+#: src/plm/core/ui/FeedbackDialog.java:184
-+msgid "The current title is empty, please specify a relevant title.\n"
-+msgstr ""
-+
-+#: src/plm/core/ui/FeedbackDialog.java:188
-+msgid ""
-+"The feedback still contains the explanatory text (above the line of "
-+"---------), please remove it.\n"
-+msgstr ""
-+
-+#: src/plm/core/ui/MainFrame.java:619
-+msgid "Please wait, while the PLM is saving your session data."
-+msgstr ""
---- a/l10n/missions/it.po
-+++ b/l10n/missions/it.po
-@@ -7,7 +7,7 @@
- msgid ""
- msgstr ""
- "Project-Id-Version: PACKAGE VERSION\n"
--"POT-Creation-Date: 2014-10-06 17:06+0200\n"
-+"POT-Creation-Date: 2014-11-13 13:47+0100\n"
- "PO-Revision-Date: 2014-07-07 23:00+0200\n"
- "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
- "Language-Team: LANGUAGE <LL at li.org>\n"
-@@ -6215,7 +6215,6 @@
- 
- #. type: Content of: <p>
- #: src/lessons/welcome/methods/picture/PatternPicture.html:11
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:41
- msgid "Good luck!"
- msgstr "Buona fortuna!"
- 
-@@ -9687,7 +9686,6 @@
- 
- #. type: Content of: <h2>
- #: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:9
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:8
- msgid "Provided functions"
- msgstr ""
- 
-@@ -9974,7 +9972,7 @@
- msgid ""
- "Your work is to help this poor guy sorting his stack by flipping the "
- "pancakes. Each pancake is defined by its radius and rank within the stack, "
--"where the bottom pancake is at rank 0, and the one above at rank 1."
-+"with the top-most pancake is at rank 0, and the one below at rank 1."
- msgstr ""
- 
- #. type: Content of: <p>
-@@ -10967,7 +10965,6 @@
- 
- #. type: Content of: <pre>
- #: src/plm/universe/turtles/TurtleWorld.html:22
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:10
- #, fuzzy, no-wrap
- #| msgid ""
- #| "[!java]double [/!]divideByTwo([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
-@@ -14437,389 +14434,6 @@
- msgstr ""
- 
- #. type: Content of: <h2>
--#: src/lessons/lander/Main.html:2 src/lessons/lander/short_desc.html:2
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:2
--msgid "Lunar Lander"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:4 src/lessons/lander/short_desc.html:4
--msgid ""
--"In this lesson you pilot a lunar landing module in increasingly complex "
--"situations."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:7
--msgid ""
--"At each step of the simulation, the player issues a command controlling how "
--"much the angle and thrust of the lander should change"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:10
--msgid "Ideas concerning the progression of exercises:"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:12
--msgid ""
--"A lander in vertical position above flat ground, the player can only control "
--"thrust (done)"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:14
--msgid ""
--"A lander in vertical position not above flat ground, the player control "
--"thrust and angle (done)"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:16
--msgid ""
--"A lander with difficult angle and speed not above flat ground, the player "
--"control thrust and angle"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:18
--msgid ""
--"A lander with difficult angle and speed not above flat ground, with "
--"difficult ground, the player control thrust and angle"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:20
--msgid "Same with wind?"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/short_desc.html:7
--msgid "This lesson assumes some basic programming and physics skills."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:4
--msgid ""
--"In this universe you pilot a lunar lander. At each simulation step you're "
--"given the lander's position, speed, angle and thrust and must issue a "
--"command adjusting its angle and thrust."
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:12
--msgid "Get the X and Y position of the lander."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:13
--#, fuzzy, no-wrap
--#| msgid ""
--#| "[!java]double [/!]divideByTwo([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
--#| "     return x / 2[!java];[/!]\n"
--#| "[!scala|java]}[/!]"
--msgid ""
--"[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
--"[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"
--msgstr ""
--"[!java]double [/!]divisionePerDue([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
--"     return x / 2[!java];[/!]\n"
--"[!scala|java]}[/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:15
--msgid "Get the horizontal and vertical speed of the lander."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:17
--#, fuzzy, no-wrap
--#| msgid ""
--#| "[!java]double [/!]divideByTwo([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
--#| "     return x / 2[!java];[/!]\n"
--#| "[!scala|java]}[/!]"
--msgid ""
--"[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
--"[!java|c]void [/!]setDesiredAngle([!java|c]double [/!]desiredAngle[!scala]:Double[/!])"
--msgstr ""
--"[!java]double [/!]divisionePerDue([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
--"     return x / 2[!java];[/!]\n"
--"[!scala|java]}[/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:19
--#, fuzzy
--#| msgid "One letter before the end of the alphabet"
--msgid "Get or set the angle of the lander."
--msgstr "Ultima lettera dell'alfabeto"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:20
--msgid ""
--"An angle of 0° denotes a vertical position where the \"head\" of the lander "
--"points up.  This is the angle you must land with. A positive angle denotes a "
--"left-leaning lander, a negative angle a right-leaning one. You cannot lean "
--"more than by ±90°, and the angle can vary by at most ±5° in one step."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:25
--#, fuzzy, no-wrap
--#| msgid ""
--#| "[!java]double [/!]divideByTwo([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
--#| "     return x / 2[!java];[/!]\n"
--#| "[!scala|java]}[/!]"
--msgid ""
--"[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
--"[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"
--msgstr ""
--"[!java]double [/!]divisionePerDue([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
--"     return x / 2[!java];[/!]\n"
--"[!scala|java]}[/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
--msgid "Get or set the thrust of the lander."
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
--msgid ""
--"You can only increment or decrement the thrust by 1 between two simulation "
--"steps, so if the current thrust is 2 and you ask for 4, you'll only get 3 in "
--"the next step. If you ask for less than 0 (resp. more than 4), everything "
--"will be as if you had asked for 0 (resp. 4)."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:33
--#, fuzzy, no-wrap
--#| msgid "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
--msgid "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
--msgstr "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:34
--msgid ""
--"Get the remaining fuel in the lander.  At each step of the simulation the "
--"lander consumes as many fuel units as the current thrust. Once you run out "
--"of fuel you're in free fall so beware!"
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:38
--#, fuzzy, no-wrap
--#| msgid "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
--msgid "[!java]List<Point> [/!]getGround()[! scala]:List[Point][/!]"
--msgstr "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:39
--msgid ""
--"Get the vertices of the ground's profile from left to right.  [!java|"
--"scala]You can retrieve the X and Y coordinates of each point with the "
--"corresponding methods of your point: <code>p.x()</code> and <code>p.y()</"
--"code>.[!/] [!python]Each point is an array of two integers denoting "
--"respectively the X and Y coordinates of that point.[/!]"
--msgstr ""
--
--#. type: Content of: <h1>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:2
--msgid "Lander 101"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:4
--msgid ""
--"Congratulations! You won a (one-way) trip to Mars in a cereal box. NASA was "
--"kind enough to donate the Lunar Excursion Module for this mission, so that's "
--"what you'll be flying."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:8
--msgid ""
--"Before you take off, you must go through some basic landing simulation. You "
--"shouldn't have to fly the lander if all goes as planned but, as they say, "
--"\"better safe than sorry\"."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:12
--msgid ""
--"Your mission is to <b>land the lander with a vertical speed of at most 10 m/"
--"s.</b> There are two ways you can influence the lander's course: by "
--"adjusting its angle or by adjusting its thrust. In this simulation we only "
--"care about adjusting the thrust, expressed in m/s²."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:17
--msgid ""
--"The [!python]<code>step()</code> function[/!][!scala|java|c]code[/!] that "
--"you should write now will be called every 0.1 second during the simulation. "
--"It should set the desired thrust of the next simulation step, by calling "
--"<code>[!java]void [/!]setDesiredThrust([!java]int [/!]desiredThrust[!scala]:"
--"Integer[/!])</code> where <code>desiredThrust</code> is some integer between "
--"0 and 4 (that is, a thrust between 0 m/s² and 4 m/s²). You can only "
--"increment or decrement the thrust by 1 between two simulation steps, so if "
--"the current thrust is 2 and you ask for 4, you'll only get 3 in the next "
--"step. If you ask for less than 0 (resp. more than 4), everything will be as "
--"if you had asked for 0 (resp. 4)."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:27
--msgid ""
--"In order to take informed decisions, you can query the lander's state. In "
--"this simulation you'll probably be interested in its vertical position: "
--"<code>[!java]double [/!]getY()[!scala]:Double[/!]</code>, and its vertical "
--"speed: <code>[!java]double [/!]getSpeedY()[!scala]:Double[/!]</code>. You "
--"can also ask for the thrust via <code>[!java]int [/!]getThrust()[!scala]:"
--"Integer[/!]</code> in case you don't remember what you asked for. Remember "
--"that Mars' gravity is 3.711 m/s², it might come in handy."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:35
--msgid ""
--"One last thing: the lander is pretty small so you don't have much fuel. At "
--"each step of the simulation the lander consumes as many fuel units as the "
--"current thrust. Once you run out of fuel you're in free fall so beware! You "
--"can consult the remaining amount of available fuel units using <code>[!"
--"java]int [/!]getFuel()[!scala]:Integer[/!]</code>."
--msgstr ""
--
--#. type: Content of: <h2>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:2
--msgid "Locate a Landing Zone"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:4
--msgid ""
--"After 200 days of traveling space and eating cereals you finally reach Mars. "
--"Time to land at last!"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:7
--msgid ""
--"The lander is on autopilot and all you have to do is look around and tell it "
--"where to land. The lander must <b>land on a flat zone</b> it you want to "
--"remain in one piece. You indicate the lander where to land by modifying the "
--"<code>getLandingZone</code> function so that it returns a [!java|"
--"scala]<code>Segment</code> representing the zone of your choice."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:13
--msgid ""
--"A segment is composed of two <code>Point</code>s, each of them composed of "
--"two <code>double</code>s. A segment is built via the <code>Segment([!"
--"java]Point [/!]start[!scala]:Point[/!], [!java]Point [/!]end[!scala]:"
--"Point[/!])</code> constructor.  A point is built via the <code>Point([!"
--"java]double [/!]x[!scala]:Double[/!], [!java]double [/!]y[!scala]:"
--"Double[/!])</code> constructor. A point's coordinates are accessible via its "
--"<code>[!java]double [/!]x()[!scala]:Double[/!]</code> and <code>[!"
--"java]double [/!]y()[!scala]:Double[/!]</code> methods."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:18
--msgid ""
--"[/!] [!python]tuple of two X coordinates representing the zone of your "
--"choice.[/!]"
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:22
--msgid ""
--"In order to determine which zone to return, you'll need to call <code>[!"
--"java]List<Point> [/!]getGround()[!scala]List[Point][/!]</code>, which "
--"returns the vertices of the ground's profile as a list of [!java|"
--"scala]<code>Point</code>[/!] [!python]tuples (x,y)[/!]."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:27
--msgid ""
--"One more thing: your function should return a valid flat zone in any kind of "
--"situation, not just for the currently visualized one. That's because it will "
--"be not only tested against that world, but also against the one we had in "
--"the previous exercise. As usual, you can see the other existing worlds with "
--"the appropriate combobox."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:33
--msgid ""
--"Have a safe landing! Don't forget to put on your space suit on your way out."
--msgstr ""
--
--#. type: Content of: <h1>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:2
--msgid "Fly the Lander!"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:4
--msgid ""
--"After 30 days of staring at rocks and eating cereals you decide it's time to "
--"go explore other parts of the planet."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:7
--msgid ""
--"You fly for a while and suddenly realize you're almost out of fuel.  "
--"Unfortunately you're in a delicate situation and the autopilot is helpless.  "
--"You will have to pilot the lander yourself. Your mission is to <b>land the "
--"lander on a flat zone with a vertical speed less than 10 m/s, an horizontal "
--"speed less than 5 m/s and an angle of 0°.</b>"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:13
--msgid ""
--"You must define two functions: <code>[!java]void [/!]initialize()</code> and "
--"<code>[!java]void [/!]step()</code>. <code>initialize()</code> is called "
--"once just after you press \"Run\". You can use it to chose some flat zone. "
--"As before, <code>step()</code> is called every 0.1 second and is used for "
--"adjusting the lander's thrust and angle. As in the first exercise the "
--"lander's thrust is adjusted via <code>[!java]void [/!]setDesiredThrust([!"
--"java]int [/!]desiredThrust[!scala]:Integer[/!])</code>.  But you can also "
--"control its angle via <code>[!java]void [/!]setDesiredAngle([!java]double "
--"[/!]desiredAngle[!scala]:Double[/!])</code>.  An angle of 0° denotes a "
--"vertical position where the \"head\" of the lander points up.  This is the "
--"angle you must land with. A positive angle denotes a left-leaning lander, a "
--"negative angle a right-leaning one. You cannot lean more than by ±90°, and "
--"the angle can vary by at most ±5° in one step."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:26
--msgid ""
--"As in the previous exercise, <code>[!java]List<Point> [/!]getGround()[!"
--"scala]:List[Point][/!]</code> returns the vertices of the ground's profile "
--"from left to right.  Please refer to the documentation (Help/About this "
--"world) for a reference manual of your lunar lander."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:30
--msgid ""
--"As before, your program must safely land the lander in all the situations "
--"encountered so far in addition to this new one."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:33
--msgid "Good luck, try not to crash!"
--msgstr ""
--
--#. type: Content of: <h2>
- #: lib/doc/MainWindow.html:1
- msgid "The PLM Main Window"
- msgstr ""
-@@ -14993,6 +14607,60 @@
- "it goes."
- msgstr ""
- 
-+#, fuzzy
-+#~| msgid ""
-+#~| "[!java]double [/!]divideByTwo([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
-+#~| "     return x / 2[!java];[/!]\n"
-+#~| "[!scala|java]}[/!]"
-+#~ msgid ""
-+#~ "[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
-+#~ "[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"
-+#~ msgstr ""
-+#~ "[!java]double [/!]divisionePerDue([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
-+#~ "     return x / 2[!java];[/!]\n"
-+#~ "[!scala|java]}[/!]"
-+
-+#, fuzzy
-+#~| msgid ""
-+#~| "[!java]double [/!]divideByTwo([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
-+#~| "     return x / 2[!java];[/!]\n"
-+#~| "[!scala|java]}[/!]"
-+#~ msgid ""
-+#~ "[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
-+#~ "[!java|c]void [/!]setDesiredAngle([!java|c]double [/!]desiredAngle[!scala]:Double[/!])"
-+#~ msgstr ""
-+#~ "[!java]double [/!]divisionePerDue([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
-+#~ "     return x / 2[!java];[/!]\n"
-+#~ "[!scala|java]}[/!]"
-+
-+#, fuzzy
-+#~| msgid "One letter before the end of the alphabet"
-+#~ msgid "Get or set the angle of the lander."
-+#~ msgstr "Ultima lettera dell'alfabeto"
-+
-+#, fuzzy
-+#~| msgid ""
-+#~| "[!java]double [/!]divideByTwo([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
-+#~| "     return x / 2[!java];[/!]\n"
-+#~| "[!scala|java]}[/!]"
-+#~ msgid ""
-+#~ "[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
-+#~ "[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"
-+#~ msgstr ""
-+#~ "[!java]double [/!]divisionePerDue([!java]double [/!]x[!scala]: Double[/!])[!scala]: Double =[/!] [!java|scala]{[/!][!python]:[/!]\n"
-+#~ "     return x / 2[!java];[/!]\n"
-+#~ "[!scala|java]}[/!]"
-+
-+#, fuzzy
-+#~| msgid "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
-+#~ msgid "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
-+#~ msgstr "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
-+
-+#, fuzzy
-+#~| msgid "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
-+#~ msgid "[!java]List<Point> [/!]getGround()[! scala]:List[Point][/!]"
-+#~ msgstr "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
-+
- #~ msgid "This code is then perfectly equivalent to the following one."
- #~ msgstr ""
- #~ "Il codice precedente è perfettamente equivalente a quello che segue:"
---- a/l10n/missions/plm.pot
-+++ b/l10n/missions/plm.pot
-@@ -7,7 +7,7 @@
- msgid ""
- msgstr ""
- "Project-Id-Version: PACKAGE VERSION\n"
--"POT-Creation-Date: 2014-10-06 17:06+0200\n"
-+"POT-Creation-Date: 2014-11-13 13:47+0100\n"
- "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
- "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
- "Language-Team: LANGUAGE <LL at li.org>\n"
-@@ -4175,7 +4175,7 @@
- msgstr ""
- 
- #. type: Content of: <p>
--#: src/lessons/welcome/methods/picture/PatternPicture.html:11 src/lessons/lander/lvl1_lander_101/Lander101.html:41
-+#: src/lessons/welcome/methods/picture/PatternPicture.html:11
- msgid "Good luck!"
- msgstr ""
- 
-@@ -6932,7 +6932,7 @@
- msgstr ""
- 
- #. type: Content of: <h2>
--#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:9 src/lessons/lander/universe/DelegatingLanderWorld.html:8
-+#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:9
- msgid "Provided functions"
- msgstr ""
- 
-@@ -7188,7 +7188,7 @@
- msgid ""
- "Your work is to help this poor guy sorting his stack by flipping the "
- "pancakes. Each pancake is defined by its radius and rank within the stack, "
--"where the bottom pancake is at rank 0, and the one above at rank 1."
-+"with the top-most pancake is at rank 0, and the one below at rank 1."
- msgstr ""
- 
- #. type: Content of: <p>
-@@ -8151,7 +8151,7 @@
- msgstr ""
- 
- #. type: Content of: <pre>
--#: src/plm/universe/turtles/TurtleWorld.html:22 src/lessons/lander/universe/DelegatingLanderWorld.html:10
-+#: src/plm/universe/turtles/TurtleWorld.html:22
- #, no-wrap
- msgid ""
- "[!java|c]double [/!]getX()[!scala]:Double[/!]\n"
-@@ -11345,367 +11345,6 @@
- msgstr ""
- 
- #. type: Content of: <h2>
--#: src/lessons/lander/Main.html:2 src/lessons/lander/short_desc.html:2 src/lessons/lander/universe/DelegatingLanderWorld.html:2
--msgid "Lunar Lander"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:4 src/lessons/lander/short_desc.html:4
--msgid ""
--"In this lesson you pilot a lunar landing module in increasingly complex "
--"situations."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:7
--msgid ""
--"At each step of the simulation, the player issues a command controlling how "
--"much the angle and thrust of the lander should change"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/Main.html:10
--msgid "Ideas concerning the progression of exercises:"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:12
--msgid ""
--"A lander in vertical position above flat ground, the player can only control "
--"thrust (done)"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:14
--msgid ""
--"A lander in vertical position not above flat ground, the player control "
--"thrust and angle (done)"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:16
--msgid ""
--"A lander with difficult angle and speed not above flat ground, the player "
--"control thrust and angle"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:18
--msgid ""
--"A lander with difficult angle and speed not above flat ground, with "
--"difficult ground, the player control thrust and angle"
--msgstr ""
--
--#. type: Content of: <ul><li>
--#: src/lessons/lander/Main.html:20
--msgid "Same with wind?"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/short_desc.html:7
--msgid "This lesson assumes some basic programming and physics skills."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:4
--msgid ""
--"In this universe you pilot a lunar lander. At each simulation step you're "
--"given the lander's position, speed, angle and thrust and must issue a "
--"command adjusting its angle and thrust."
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:12
--msgid "Get the X and Y position of the lander."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:13
--#, no-wrap
--msgid ""
--"[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
--"[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:15
--msgid "Get the horizontal and vertical speed of the lander."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:17
--#, no-wrap
--msgid ""
--"[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
--"[!java|c]void [/!]setDesiredAngle([!java|c]double "
--"[/!]desiredAngle[!scala]:Double[/!])"
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:19
--msgid "Get or set the angle of the lander."
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:20
--msgid ""
--"An angle of 0° denotes a vertical position where the \"head\" of the lander "
--"points up.  This is the angle you must land with. A positive angle denotes a "
--"left-leaning lander, a negative angle a right-leaning one. You cannot lean "
--"more than by ±90°, and the angle can vary by at most ±5° in one step."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:25
--#, no-wrap
--msgid ""
--"[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
--"[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
--msgid "Get or set the thrust of the lander."
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
--msgid ""
--"You can only increment or decrement the thrust by 1 between two simulation "
--"steps, so if the current thrust is 2 and you ask for 4, you'll only get 3 in "
--"the next step. If you ask for less than 0 (resp. more than 4), everything "
--"will be as if you had asked for 0 (resp. 4)."
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:33
--#, no-wrap
--msgid "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:34
--msgid ""
--"Get the remaining fuel in the lander.  At each step of the simulation the "
--"lander consumes as many fuel units as the current thrust. Once you run out "
--"of fuel you're in free fall so beware!"
--msgstr ""
--
--#. type: Content of: <pre>
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:38
--#, no-wrap
--msgid "[!java]List<Point> [/!]getGround()[! scala]:List[Point][/!]"
--msgstr ""
--
--#. type: Content of: outside any tag (error?)
--#: src/lessons/lander/universe/DelegatingLanderWorld.html:39
--msgid ""
--"Get the vertices of the ground's profile from left to right.  "
--"[!java|scala]You can retrieve the X and Y coordinates of each point with the "
--"corresponding methods of your point: <code>p.x()</code> and "
--"<code>p.y()</code>.[!/] [!python]Each point is an array of two integers "
--"denoting respectively the X and Y coordinates of that point.[/!]"
--msgstr ""
--
--#. type: Content of: <h1>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:2
--msgid "Lander 101"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:4
--msgid ""
--"Congratulations! You won a (one-way) trip to Mars in a cereal box. NASA was "
--"kind enough to donate the Lunar Excursion Module for this mission, so that's "
--"what you'll be flying."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:8
--msgid ""
--"Before you take off, you must go through some basic landing simulation. You "
--"shouldn't have to fly the lander if all goes as planned but, as they say, "
--"\"better safe than sorry\"."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:12
--msgid ""
--"Your mission is to <b>land the lander with a vertical speed of at most 10 "
--"m/s.</b> There are two ways you can influence the lander's course: by "
--"adjusting its angle or by adjusting its thrust. In this simulation we only "
--"care about adjusting the thrust, expressed in m/s²."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:17
--msgid ""
--"The [!python]<code>step()</code> function[/!][!scala|java|c]code[/!] that "
--"you should write now will be called every 0.1 second during the "
--"simulation. It should set the desired thrust of the next simulation step, by "
--"calling <code>[!java]void [/!]setDesiredThrust([!java]int "
--"[/!]desiredThrust[!scala]:Integer[/!])</code> where "
--"<code>desiredThrust</code> is some integer between 0 and 4 (that is, a "
--"thrust between 0 m/s² and 4 m/s²). You can only increment or decrement the "
--"thrust by 1 between two simulation steps, so if the current thrust is 2 and "
--"you ask for 4, you'll only get 3 in the next step. If you ask for less than "
--"0 (resp. more than 4), everything will be as if you had asked for 0 "
--"(resp. 4)."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:27
--msgid ""
--"In order to take informed decisions, you can query the lander's state. In "
--"this simulation you'll probably be interested in its vertical position: "
--"<code>[!java]double [/!]getY()[!scala]:Double[/!]</code>, and its vertical "
--"speed: <code>[!java]double [/!]getSpeedY()[!scala]:Double[/!]</code>. You "
--"can also ask for the thrust via <code>[!java]int "
--"[/!]getThrust()[!scala]:Integer[/!]</code> in case you don't remember what "
--"you asked for. Remember that Mars' gravity is 3.711 m/s², it might come in "
--"handy."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl1_lander_101/Lander101.html:35
--msgid ""
--"One last thing: the lander is pretty small so you don't have much fuel. At "
--"each step of the simulation the lander consumes as many fuel units as the "
--"current thrust. Once you run out of fuel you're in free fall so beware! You "
--"can consult the remaining amount of available fuel units using "
--"<code>[!java]int [/!]getFuel()[!scala]:Integer[/!]</code>."
--msgstr ""
--
--#. type: Content of: <h2>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:2
--msgid "Locate a Landing Zone"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:4
--msgid ""
--"After 200 days of traveling space and eating cereals you finally reach "
--"Mars. Time to land at last!"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:7
--msgid ""
--"The lander is on autopilot and all you have to do is look around and tell it "
--"where to land. The lander must <b>land on a flat zone</b> it you want to "
--"remain in one piece. You indicate the lander where to land by modifying the "
--"<code>getLandingZone</code> function so that it returns a "
--"[!java|scala]<code>Segment</code> representing the zone of your choice."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:13
--msgid ""
--"A segment is composed of two <code>Point</code>s, each of them composed of "
--"two <code>double</code>s. A segment is built via the "
--"<code>Segment([!java]Point [/!]start[!scala]:Point[/!], [!java]Point "
--"[/!]end[!scala]:Point[/!])</code> constructor.  A point is built via the "
--"<code>Point([!java]double [/!]x[!scala]:Double[/!], [!java]double "
--"[/!]y[!scala]:Double[/!])</code> constructor. A point's coordinates are "
--"accessible via its <code>[!java]double [/!]x()[!scala]:Double[/!]</code> and "
--"<code>[!java]double [/!]y()[!scala]:Double[/!]</code> methods."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:18
--msgid ""
--"[/!] [!python]tuple of two X coordinates representing the zone of your "
--"choice.[/!]"
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:22
--msgid ""
--"In order to determine which zone to return, you'll need to call "
--"<code>[!java]List<Point> "
--"[/!]getGround()[!scala]List[Point][/!]</code>, which returns the vertices of "
--"the ground's profile as a list of [!java|scala]<code>Point</code>[/!] "
--"[!python]tuples (x,y)[/!]."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:27
--msgid ""
--"One more thing: your function should return a valid flat zone in any kind of "
--"situation, not just for the currently visualized one. That's because it will "
--"be not only tested against that world, but also against the one we had in "
--"the previous exercise. As usual, you can see the other existing worlds with "
--"the appropriate combobox."
--msgstr ""
--
--#. type: Content of: <p><p>
--#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:33
--msgid "Have a safe landing! Don't forget to put on your space suit on your way out."
--msgstr ""
--
--#. type: Content of: <h1>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:2
--msgid "Fly the Lander!"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:4
--msgid ""
--"After 30 days of staring at rocks and eating cereals you decide it's time to "
--"go explore other parts of the planet."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:7
--msgid ""
--"You fly for a while and suddenly realize you're almost out of fuel.  "
--"Unfortunately you're in a delicate situation and the autopilot is helpless.  "
--"You will have to pilot the lander yourself. Your mission is to <b>land the "
--"lander on a flat zone with a vertical speed less than 10 m/s, an horizontal "
--"speed less than 5 m/s and an angle of 0°.</b>"
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:13
--msgid ""
--"You must define two functions: <code>[!java]void [/!]initialize()</code> and "
--"<code>[!java]void [/!]step()</code>. <code>initialize()</code> is called "
--"once just after you press \"Run\". You can use it to chose some flat "
--"zone. As before, <code>step()</code> is called every 0.1 second and is used "
--"for adjusting the lander's thrust and angle. As in the first exercise the "
--"lander's thrust is adjusted via <code>[!java]void "
--"[/!]setDesiredThrust([!java]int "
--"[/!]desiredThrust[!scala]:Integer[/!])</code>.  But you can also control its "
--"angle via <code>[!java]void [/!]setDesiredAngle([!java]double "
--"[/!]desiredAngle[!scala]:Double[/!])</code>.  An angle of 0° denotes a "
--"vertical position where the \"head\" of the lander points up.  This is the "
--"angle you must land with. A positive angle denotes a left-leaning lander, a "
--"negative angle a right-leaning one. You cannot lean more than by ±90°, and "
--"the angle can vary by at most ±5° in one step."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:26
--msgid ""
--"As in the previous exercise, <code>[!java]List<Point> "
--"[/!]getGround()[!scala]:List[Point][/!]</code> returns the vertices of the "
--"ground's profile from left to right.  Please refer to the documentation "
--"(Help/About this world) for a reference manual of your lunar lander."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:30
--msgid ""
--"As before, your program must safely land the lander in all the situations "
--"encountered so far in addition to this new one."
--msgstr ""
--
--#. type: Content of: <p>
--#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:33
--msgid "Good luck, try not to crash!"
--msgstr ""
--
--#. type: Content of: <h2>
- #: lib/doc/MainWindow.html:1
- msgid "The PLM Main Window"
- msgstr ""
---- a/po4a.conf
-+++ b/po4a.conf
-@@ -242,11 +242,5 @@
- [type: html] src/lessons/bat/string1/StringX.html       $lang:src/lessons/bat/string1/StringX.$lang.html
- [type: html] src/lessons/bat/string1/StringYak.html     $lang:src/lessons/bat/string1/StringYak.$lang.html
- 
--[type: html] src/lessons/lander/Main.html        			$lang:src/lessons/lander/Main.$lang.html
--[type: html] src/lessons/lander/short_desc.html  			$lang:src/lessons/lander/short_desc.$lang.html
--[type: html] src/lessons/lander/universe/DelegatingLanderWorld.html     $lang:src/lessons/lander/universe/DelegatingLanderWorld.$lang.html
--[type: html] src/lessons/lander/lvl1_lander_101/Lander101.html		$lang:src/lessons/lander/lvl1_lander_101/Lander101.$lang.html
--[type: html] src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html $lang:src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.$lang.html
--[type: html] src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html	$lang:src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.$lang.html
- 
- [type: html] lib/doc/MainWindow.html	$lang:lib/doc/MainWindow.$lang.html
---- /dev/null
-+++ b/src/lessons/maze/island/IslandMaze.pt_BR.html
-@@ -0,0 +1,75 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h2>Lost between islands</h2>
-+
-+<p>You thought that your algorithm was enough to escape mazes? Well, not every
-+mazes...
-+</p>
-+
-+<p>The <i>wall follower algorithm</i> we used so far only works if the entry
-+and the exit are placed near to walls connected to the external wall. But if
-+the buggle begins in the middle of the maze, it may exist wall sections
-+disconnected from the external wall.
-+
-+<p>That is why the previous strategy would let the buggle round around for
-+ever. Indeed, the maze you should now escape from contains islands, and the
-+buggle does not start along one of the external walls. Just give it a try if
-+you want: copy your code over, push the run button and see your previous
-+solution failing miserabily.</p>
-+
-+<p>The method of following a wall is still good and allow to escape very
-+efficiently some sections of the maze, so we do not want to remove it
-+entierely. Instead, we want to stop following the wall under some
-+conditions. Notice that the baggle lays near to the external border of the
-+maze. So, we want to reach the border and then follow that wall. We need for
-+example to search for the north wall before following it to the baggle.
-+
-+<p>To find the north wall, you simply run to the north as long as it's
-+possible, and when facing an obstacle, you avoid it (using previous method).</p>
-+
-+<div class="tip" id="tip-1" alt="I'm lost now, please give me some extra indications">
-+	Our new run() method will consist in two modes: our buggle will alternate
-+between the "north runner mode" and the "left follower mode". You begin in
-+"north runner mode", and switch to "left follower" when you have a wall at
-+the north (do not forget to make sure you have a wall at your left before
-+switching to "left follower" mode). You switch to "north runner" as soon as
-+your buggle is facing north and is not in front of a wall during its trip
-+around its left wall. The easiest way to write such a state machine is
-+something like 
-+<pre>[!scala]var state=0;
-+state match  {
-+  case 0 => // North runner
-+     ...
-+     state = 1;
-+  case 1 => // Left follower
-+     ...
-+     state = 0;
-+  case _ => println("This case should not happen. Please fix me")
-+}[/!][!java|c]int state=0;
-+switch (state) {
-+  case 0: // North runner
-+     ...
-+     state = 1;
-+     break;
-+  case 1: // Left follower
-+     ...
-+     state = 0;
-+     break;
-+}[/!][!python]northRunner = True
-+if northRunner:
-+     ...
-+     northRunner = False
-+else: # left follower
-+     ...
-+     northRunner = True[/!]</pre>
-+     
-+[!scala]<br/>Don't forget the default case (matching _), or scala will issue an error
-+since your matching would be incomplete.[/!]
-+</div>
-+	
-+<p>Don't forget to let the buggle pick the baggle at the end of your code.</p>
-+	
-+	
-+<p>You're up. That should be enough for you to figure out how to escape this
-+maze, but if not, you can always request for the tip. But you do not need
-+any more help, do you?</p>
---- /dev/null
-+++ b/src/lessons/maze/short_desc.pt_BR.html
-@@ -0,0 +1,7 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h3>Labyrinths</h3>
-+
-+<p>This lesson proposes several exercises about labyrinths in the buggle world.</p>
-+
-+<p>Para fazer esta lição você deve dominar as bases da programação.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/AllDifferent.fr.html
-@@ -0,0 +1,11 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Tous différents</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!],
-+retournez <code>false</code> si deux éléments ont la même valeur, et
-+<code>true</code> si tous les éléments sont différents deux à deux.
-+
-+<p>La solution la plus simple est en O(n²), ce qui veut dire qu'elle s'exécute
-+en temps quadratique. Vous aurez probablement besoin de définir une fonction
-+supplémentaire pour cela. Une autre solution bien plus complexe s'exécute en
-+O(n log(n)).</p>
---- a/src/lessons/recursion/cons/ButLast.fr.html
-+++ b/src/lessons/recursion/cons/ButLast.fr.html
-@@ -1,8 +1,8 @@
- 
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h1>Sauf Dernier</h1>
--Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return the
--list containing every elements but the last one.  You can assume that the
--list is not empty.
-+Étant donnée une [!scala]List[Int][/!][java|python]liste
-+récursive[/!],retournez la liste contenant tous ses éléments sauf le
-+dernier. Vous pouvez supposer que la liste n'est pas vide.
- 
--<p>Your solution should be linear in time.</p>
-+<p>Votre solution devrait être linéaire en temps.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/ButNfirst.fr.html
-@@ -0,0 +1,8 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Sauf nPremiers</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un
-+entier <code>N</code>, retournez la liste privée de ses <code>N</code>
-+premiers éléments. 
-+
-+<p>Votre solution devrait être linéaire en temps.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/ButNlast.fr.html
-@@ -0,0 +1,14 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Sauf nDerniers</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un
-+entier <code>N</code>, retournez la liste privée de ses <code>N</code>
-+derniers éléments.
-+
-+<p>Votre solution devrait être linéaire en temps, mais vous aurez probablement
-+besoin de définir plusieurs fonctions pour atteindre cette complexité.</p>
-+
-+<div class="tip" id="tip-1" alt="Je n'arrive pas à le faire en temps linéaire">
-+L'astuce est de calculer une seule fois (et à l'avance) combien d'éléments
-+il faut garder.
-+</div>
-\ No newline at end of file
---- /dev/null
-+++ b/src/lessons/recursion/cons/Concat.fr.html
-@@ -0,0 +1,14 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Concaténation</h1>
-+Étant donnée deux [!scala]List[Int][/!][java|python]listes récursives[/!]
-+<code>l1</code> et <code>l2</code>, retournez la liste constituée de tous
-+les éléments de <code>l1</code> suivis de tous les éléments de
-+<code>l2</code>. 
-+
-+<p>Your solution should be linear in time, with the help of helper functions.</p>
-+
-+<div class="tip" id="tip-1" alt="Je n'arrive pas à le faire en temps linéaire">
-+Il faut modifier <code>l1</code> au préalable pour s'assurer que chaque
-+étape récursive soit en temps constant.
-+</div>
-\ No newline at end of file
---- /dev/null
-+++ b/src/lessons/recursion/cons/Increasing.fr.html
-@@ -0,0 +1,9 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Croissante</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste
-+récursive[/!],retournez <code>true</code> si ses éléments forment une suite
-+croissante (c'est-à-dire si ses éléments sont classés du plus petit au plus
-+grand). 
-+
-+<p>Votre solution devrait être linéaire en temps.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/IsMember.fr.html
-@@ -0,0 +1,8 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>EstMembre</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un
-+entier,retournez <code>true</code> si cet entier fait partie des éléments de
-+la liste, et <code>false</code> sinon.
-+
-+<p>Votre solution devrait être linéaire en temps.</p>
---- a/src/lessons/recursion/cons/Last.fr.html
-+++ b/src/lessons/recursion/cons/Last.fr.html
-@@ -1,7 +1,8 @@
- 
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h1>Dernier</h1>
--Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return its
--last element.  You can assume that the list is not empty.
-+Étant donnée une [!scala]List[Int][/!][java|python]liste
-+récursive[/!],retournez son dernier élément. Vous pouvez supposer que la
-+liste n'est pas vide.
- 
--<p>Your solution should be linear in time.</p>
-+<p>Votre solution devrait être linéaire en temps.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/Length.fr.html
-@@ -0,0 +1,8 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Longueur</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!]
-+retournez sa longueur[!scala], sans utiliser la méthode <code>size</code> de
-+la liste, bien entendu[/!].
-+
-+<p>Votre solution devrait être linéaire en temps.</p>
---- a/src/lessons/recursion/cons/Main.fr.html
-+++ b/src/lessons/recursion/cons/Main.fr.html
-@@ -1,24 +1,28 @@
- 
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h1>Algorithmes récursifs</h1>
--<p>This lesson contains a bunch of classical exercises on recursive lists.  It
--is certainly not the most pleasant lesson to do, but I think that it is the
--easiest of the PLM lessons dealing with recursion.</p>
-+<p>Cette leçon propose un paquet d'exercices classiques sur les listes
-+récursives. Il ne s'agit certainement pas de la leçon la plus drôle de la
-+PLM, mais il s'agit certainement de la plus simple des leçons PLM sur la
-+récursivité.</p>
- 
- <p>Comme souvent, plusieurs points pourraient être améliorés dans le code de
- cet univers pour l'améliorer :</p>
- 
- <ul>
--<li>New exercises could be proposed, such as
-+<li>De nouveaux exercices pourraient être proposés, par exemple inspirés de
- http://webloria.loria.fr/~quinson/Teaching/TOP/02-td-recursivite-enonce.pdf
--If you know some others, please report them as an issue.</li>
--<li>It would be interesting to check the asymptotic complexity of the student's
--code, but that does not sound easy to do. In Python and Java (where we
--provide a hand-made RecList class), we could count the amount of cons per
--exercise, but it won't be easy to relate this to the right BatTest. For
--Scala, it sounds even more difficult as we use the classical :: operators of
--the language. That will be difficult to override to add a counting
--mechanism. Another solution would be to ensure that the call stack does not
--pass a given threshold, but that sounds very difficult too. Any idea is
--welcome.</li>
-+Si vous en connaissez d'autres, nous vous serions reconnaissant de nous en
-+parler dans un rapport d'anomalie.</li>
-+<li>Il serait intéressant de vérifier la complexité algorithmique du code
-+proposé par les étudiants, mais cela semble assez difficile à faire. En
-+Python et Java, nous proposons un type de donnée spécifique (les
-+<code>RecList</code>) alors nous pourrions compter le nombre de cons
-+réalisés dans chaque exercice, mais il risque d'être compliqué de trouver le
-+test auquel rattacher chaque opération. En Scala, cela s'annonce encore plus
-+difficile car nous utilisons directement des mots-clés du langage. Il serait
-+probablement difficile d'y injecter un mécanisme comptant les opérations. On
-+pourrait vouloir assurer que la pile d'appel ne dépasse pas une profondeur
-+donnée, mais cela semble également difficile à implémenter. Si vous avez des
-+idées, merci de nous en faire part.</li>
- <ul>
---- /dev/null
-+++ b/src/lessons/recursion/cons/Main.pt_BR.html
-@@ -0,0 +1,24 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Recursive Lists</h1>
-+<p>This lesson contains a bunch of classical exercises on recursive lists.  It
-+is certainly not the most pleasant lesson to do, but I think that it is the
-+easiest of the PLM lessons dealing with recursion.</p>
-+
-+<p>Como sempre, existem várias coisas que podem ser feitas no código
-+deste universo para melhorá-lo:</p>
-+
-+<ul>
-+<li>New exercises could be proposed, such as
-+http://webloria.loria.fr/~quinson/Teaching/TOP/02-td-recursivite-enonce.pdf
-+If you know some others, please report them as an issue.</li>
-+<li>It would be interesting to check the asymptotic complexity of the student's
-+code, but that does not sound easy to do. In Python and Java (where we
-+provide a hand-made RecList class), we could count the amount of cons per
-+exercise, but it won't be easy to relate this to the right BatTest. For
-+Scala, it sounds even more difficult as we use the classical :: operators of
-+the language. That will be difficult to override to add a counting
-+mechanism. Another solution would be to ensure that the call stack does not
-+pass a given threshold, but that sounds very difficult too. Any idea is
-+welcome.</li>
-+<ul>
---- /dev/null
-+++ b/src/lessons/recursion/cons/Min.fr.html
-@@ -0,0 +1,9 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Min</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste
-+récursive[/!],retournez la plus petite de ses valeurs. Vous aurez
-+probablement besoin d'une fonction supplémentaire, mais vous pouvez supposer
-+que la liste n'est pas vide. 
-+
-+<p>Votre solution devrait être linéaire en temps.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/Nfirst.fr.html
-@@ -0,0 +1,11 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>nPremiers</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un
-+entier <code>N</code>, retournez la liste constituée de ses <code>N</code>
-+premiers éléments. Vous pouvez supposer que la liste est suffisamment
-+longue, c'est à dire qu'elle contient au moins <code>N</code> éléments.
-+
-+<p>Vous pouvez supposer que la liste est suffisamment longue, c'est à dire
-+qu'elle contient au moins <code>N</code> éléments. Votre solution devrait
-+être linéaire en temps.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/Nlast.fr.html
-@@ -0,0 +1,14 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>nDerniers</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un
-+entier <code>N</code>, retournez la liste constituée de ses <code>N</code>
-+derniers éléments. 
-+
-+<p>Votre solution devrait être linéaire en temps, mais vous aurez probablement
-+besoin de définir plusieurs fonctions pour atteindre cette complexité.</p>
-+
-+<div class="tip" id="tip-1" alt="Je n'arrive pas à le faire en temps linéaire">
-+L'astuce est de calculer une seule fois (et à l'avance) combien d'éléments
-+il faut garder.
-+</div>
-\ No newline at end of file
---- /dev/null
-+++ b/src/lessons/recursion/cons/Nth.fr.html
-@@ -0,0 +1,9 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Nième</h1>
-+Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer
-+<code>N</code>, return its <code>N</code>th element. 
-+
-+<p>Vous pouvez supposer que la liste est suffisamment longue, c'est à dire
-+qu'elle contient au moins <code>N</code> éléments. Votre solution devrait
-+être linéaire en temps.</p>
---- a/src/lessons/recursion/cons/Occurrence.fr.html
-+++ b/src/lessons/recursion/cons/Occurrence.fr.html
-@@ -1,9 +1,8 @@
- 
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h1>Occurrences</h1>
--Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an
--integer, return the amount of occurrences of the given integer in the
--list. If the integer is not a member of the list, the function should thus
--return 0.
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!] et un
-+entier,retournez le nombre d'occurences de cet entier dans la liste. Si
-+l'entier n'est pas membre de la liste, la fonction doit renvoyer 0.
- 
--<p>Your solution should be linear in time.</p>
-+<p>Votre solution devrait être linéaire en temps.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/PlusOne.fr.html
-@@ -0,0 +1,8 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>PlusUn</h1>
-+Étant donnée une [!scala]List[Int][/!][java|python]liste
-+récursive[/!],retournez une nouvelle liste dont les éléments sont ceux de
-+votre paramètre, incrémentés de un.
-+
-+<p>Votre solution devrait être linéaire en temps.</p>
---- /dev/null
-+++ b/src/lessons/recursion/cons/Remove.fr.html
-@@ -0,0 +1,9 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Retire</h1>
-+
-+Given a [!scala]List[Int][/!][!java|python]recursive list[/!]
-+<code>L</code>and an integer, return a new list containing all elements of L
-+that are not equal to the value received as parameter. 
-+
-+<p>Votre solution devrait être linéaire en temps.</p>
---- a/src/lessons/recursion/cons/Reverse.fr.html
-+++ b/src/lessons/recursion/cons/Reverse.fr.html
-@@ -1,13 +1,14 @@
- 
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h1>Inverse</h1>
--Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return a new
--list with all elements in reverse order. 
-+Étant donnée une [!scala]List[Int][/!][java|python]liste récursive[/!],
-+retournez la liste constituée de ses éléments en ordre inverse. 
- 
--<p>This function is very important and you should not pass that challenge.
--Your solution should be linear in time, with the help of helper functions.</p>
-+<p>Cette fonction est très importante et vous ne devriez pas passer ce défi
-+sans trouver la réponse, qui doit être linéaire grâce à l'aide de fonctions
-+supplémentaires.</p>
- 
--<div class="tip" id="tip-1" alt="I cannot do it in linear time">
--You need an helper function in which the result is accumulated (built) at
--each step.
-+<div class="tip" id="tip-1" alt="Je n'arrive pas à le faire en temps linéaire">
-+Il faut réaliser une fonction d'aide dont le résultat est accumulé
-+(construit) à chaque étape.
- </div>
-\ No newline at end of file
---- a/src/lessons/recursion/cons/universe/ConsWorld.fr.html
-+++ b/src/lessons/recursion/cons/universe/ConsWorld.fr.html
-@@ -9,26 +9,28 @@
- ConsWorld defines recursive lists of type <code>RecList</code>.[/!]
- [!scala]lists of integers (<code>List[Int]</code>).</p>
- 
--<p>Any given such list is either the empty list (noted
--<code>[!scala]Nil[/!][!java]null[/!][!python]None[/!]</code>), or an integer
--followed by a list. If a list is not empty, you can retrieve its first
--integer with <code>list.head</code> and the list containing its other
--parameters with <code>list.tail</code>. Of course, the empty list has no
--head nor the tail, so trying to access these elements will result in an
--(unpleasant) error message.</p>
-+<p>Une telle liste peut être soit la liste vide (notée
-+<code>[!scala]Nil[/!][!java]null[/!][!python]None[/!]</code>), soit un
-+entier suivi d'une liste. Si une liste n'est pas vide, vous pouvez retrouver
-+son premier entier avec <code>list.head</code>. On dit qu'on extrait alors
-+la tête de la liste.La liste contenant ses autres éléments (tous sauf la
-+tête) peut être retrouvée avec <code>list.tail</code>. On dit qu'on extrait
-+la suite de la liste.Bien entendu, la liste vide n'a ni tête ni suite, et
-+vous ne devriez pas tenter d'accéder à ces éléments sous peine d'obtenir un
-+message d'erreur (particulièrement déplaisant).</p>
- 
--<p>To build your own list, you need to concatenate a head and a tail as
--follows: [!java|python]<code>cons(head, tail)</code>[/!]
--[!scala]<code>head::tail</code> Note that <code>::</code> is a generic
--operator in Scala to build lists.[/!]</p>
-+<p>Pour construire votre propre liste, vous devez concaténer une tête et une
-+suite comme suit : [!java|python]<code>cons(tête, suite)</code>[/!]
-+[!scala]<code>tête::suite</code>. Il se trouve que <code>::</code> est un
-+opérateur générique du langage Scala pour construire des listes.[/!]</p>
- 
--<p>So, in summary, you can solve every exercises of this lesson with the
--following constructs.</p>
-+<p>En résumé, vous pouvez résoudre tous les exercices de cette leçon avec les
-+constructions suivantes :</p>
- 
- <ul>
- <li><b>The empty string:</b> <pre>[!java|c]null[/!][!scala]Nil[/!][python]None[/!]</pre></li>
--<li><b>Get the first element of <code>l</code></b> <pre>l.head</pre></li>
--<li><b>Get the rest of the list</b>, when the first element is removed: <pre>l.tail</pre></li>
--<li><b>Build a list</b> from a <code>value</code> and a <code>list</code>:
--[!java|python]<pre>cons(value, list)</pre>[/!] [!scala]<pre>value::list</pre>[/!]</li>
-+<li><b>Obtenir le premier élément de <code>l</code></b> <pre>l.head</pre></li>
-+<li><b>Obtenir la suite de la liste</b>, privée de son premier élément: <pre>l.tail</pre></li>
-+<li><b>Construire une liste</b> à partir d'une <code>valeur</code> et d'une
-+<code>liste</code>: [!java|python]<pre>cons(valeur, liste)</pre>[/!] [!scala]<pre>valeur::liste</pre>[/!]</li>
- </ul>
---- a/src/lessons/recursion/koch/Koch.fr.html
-+++ b/src/lessons/recursion/koch/Koch.fr.html
-@@ -25,16 +25,17 @@
- 
- <p>Le pseudo-code du cas général est le suivant :</p>
- <pre>
--  Draw recursively a smaller segment
--  Turn 60 degrees to the left
--  Draw recursively a smaller segment  
--  Turn 120 degrees to the right
--  Draw recursively a smaller segment
--  Turn 60 degrees to the left
--  Draw recursively a smaller segment
-+Dessiner récursivement un segment plus petit
-+Tourner à 60 degrés vers la gauche
-+Dessiner récursivement un segment plus petit
-+Tourner à 120 degrés vers la droite
-+Dessiner récursivement un segment plus petit
-+Tourner à 60 degrés vers la gauche
-+Dessiner récursivement un segment plus petit
- </pre>
--<p>As you can see, the function forward() is not called from the recursive
--case, only in the base case when there is no recursive call.</p>
-+<p>Comme vous pouvez le constater, la fonction avance() n'est pas appelée dans
-+le cas récursif, mais seulement dans le cas de base, quand il n'y a plus
-+d'appel récursif.</p>
- 
- 
- <p><div class="tip" id="tip-1" alt="TL;DR. Vous pouvez me dessiner tout ça ?">
---- /dev/null
-+++ b/src/lessons/recursion/short_desc.pt_BR.html
-@@ -0,0 +1,7 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h3>Bases of recursion</h3>
-+<p>Discover the recursive way of thinking by drawing trees and other figures
-+with the Logo turtle.</p>
-+
-+<p>Para fazer esta lição você deve dominar as bases da programação.</p>
---- a/src/lessons/recursion/tree/Tree.fr.html
-+++ b/src/lessons/recursion/tree/Tree.fr.html
-@@ -15,17 +15,17 @@
- <p>Si le tronc d'un arbre mesure length à l'étage N, il mesure shrink*length à
- l'étage N+1.<p>
- 
--<p>At the end, here is the pseudo-code of the general case (you should add the
--base case yourself):</p>
-+<p>Au final, voici le pseudo-code du cas général de la récursivité (il manque
-+bien sûr le cas de base, laissé en exercice).</p>
- <pre>
--  Move forward of the desired length
--  Draw (recursively) the right subtree
--  Draw (recursively) the left subtree
--  Move back to your initial position
-+Avancer de la longueur désirée
-+Dessiner (récursivement) le sous-arbre de droite
-+Dessiner (récursivement) le sous-arbre de gauche
-+Reculer de la longueur désirée pour retourner au point de départ
- </pre> 
--<p>Don't forget to add the base case to your code, or your buggle will enter an
--infinite loop.  Then, drawing the right subtree comes down to turn right and
--then draw the subtree.</p>
-+<p>N'oubliez pas d'ajouter le cas de base dans votre code, ou la buggle va
-+entrer en boucle infinie. De plus, dessiner le sous-arbre droit revient à
-+tourner à droite puis dessiner un sous-arbre.</p>
- 
- <p>Comme vous pouvez le voir, chaque étage de la récursion est représenté par
- une couleur distinctive. Pour cela, appelez la fonction
---- /dev/null
-+++ b/src/lessons/sort/baseball/Main.pt_BR.html
-@@ -0,0 +1,50 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>The Rainbow Baseball Game</h1>
-+
-+<p>This activity is inspired from the orange game, from the "Computer Science
-+Unplugged" activities repository.  It was however heavily since then, first
-+for the CSIRL (my repository of <i>free</i> unplugged activities to
-+introduce computer science, available at
-+http://www.loria.fr/~quinson/Mediation/SMN/) and now for PLM.</p>
-+
-+<p>In the literature, the generalized form of this problem is known as the
-+pebble motion problem (the bases can be connected by any kind of graph, and
-+the affinity of pebbles with bases may be different). Another variant of
-+this problem is the well known 15-puzzle, with one player per base, and a
-+two dimensional square grid. Much more information about these problems can
-+be found on wikipedia, as usual.</p>
-+
-+<h3>How do you know that the naive algorithm won't loop on that initial
-+situation?</h3>
-+
-+<p>Well, we simply tested all possible situations to see when this algorithm
-+loops and when it finds the correct solution. We found that it works for all
-+situations where no player is at home (there is 84 such situations for 4
-+bases, once you take the symmetries into account). It obviously works for
-+some situations that do not respect this criteria (such as all situations it
-+encounters from one of those 84 boards to the final state), but that's
-+another story. Having such a criteria allows us to generate pseudo-random
-+initial situations for the first exercise for which the algorithm we propose
-+is guarenteed to work.</p>
-+
-+<p>We also explored bigger instances of the problem, and unfortunately, we have
-+no such criteria for them.  With 5 bases, the algorithm wrongly loops for 24
-+of the 1824 possible boards where no player is home (that's 1.31%).  With 6
-+bases, it fails on 1251 of the 58860 such boards (2.12%). With 7 bases, it
-+fails for 84444 out of 2633940 (that's 3.2%). I am still looking for a
-+criteria ensuring that the algorithm won't loop. If you discover one, please
-+report it. Ideally, it would be simple to enforce manually so that we can
-+use it during our unplugged activities.</p>
-+
-+<h3>O que eu posso fazer para melhorar este universo do PLM?</h3>
-+
-+<p>Como sempre, existem várias coisas que podem ser feitas no código
-+deste universo para melhorá-lo:</p>
-+<ul>
-+  <li>Other graphical representations could be proposed, such as a linear one (for
-+the existing exercises) or other ones (such as a grid or a tree, if an
-+exercise on this kind of graph proves interesting).</li>
-+  <li>Other exercises on other algorithms on this variant, or on other variants
-+such as the 15-puzzle.</li>
-+</ul>
---- /dev/null
-+++ b/src/lessons/sort/basic/Main.pt_BR.html
-@@ -0,0 +1,24 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Algoritmos de Ordenação</h1>
-+
-+Esta lição permite a experimentação com alguns algoritmos de ordenação
-+clássicos (e algumas variações menos comuns deles). E temos um duplo
-+objetivo: você pode primeiro compreender melhor a ideia destes
-+algoritmos escrevendo eles por si só. Mas mesmo se você não codificar
-+os algoritmos, você pode usar o modo de demonstração para organizar
-+"corridas" entre os algoritmos para experimentar na prática o que
-+significam diferentes complexidades assintóticas. 
-+
-+<p>Mais exercícios estão previstos para o futuro, sobre os algoritmos de
-+ordenação recursivos (como o QuickSort e o MergeSort) ou usando outros
-+micromundos para aplicar estes algoritmos a outros contextos.</p>
-+
-+<h3>O que eu posso fazer para melhorar este universo do PLM?</h3>
-+
-+<p>Como sempre, existem várias coisas que podem ser feitas no código
-+deste universo para melhorá-lo:</p>
-+<ul>
-+  <li>Outras representações gráficas podem ser propostas, como aquelas
-+apresentadas em <a href="http://sorting.at/">http://sorting.at/</a>.</li>
-+</ul>
---- a/src/lessons/sort/basic/bubble/AlgBubbleSort1.pt_BR.html
-+++ b/src/lessons/sort/basic/bubble/AlgBubbleSort1.pt_BR.html
-@@ -2,15 +2,16 @@
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h1>BubbleSort</h1>
- 
--<p>Welcome to the sorting universe. It allows you to experiment with the
--existing sorting algorithms. The list of buildins that you can use in your
--algorithms is available in the world reference documentation
--("Help"->"About this world").</p>
-+<p>Bem vindo ao universo da ordenação. Ele permite que você experimente
-+os algoritmos de ordenação existentes. A lista de "buildins" que você
-+pode usar nos seus algoritmos está disponível na documentação de
-+referência do mundo ("Ajuda"->"Sobre este mundo").</p>
- 
--<p>It is not enough to sort the array to pass the exercises. Your solution must
--strictly follow the expected behavior of each exercise. This is enforced by
--checking that your algorithm needs the same amount of read and write
--operations to sort the array. </p>
-+<p>Não é suficiente ordenar a array para passar nos exercícios. Sua
-+solução deve seguir estritamente o comportamento esperado em cada
-+exercício. Isto é reforçado verificando que seu algoritmo precisa da
-+mesma quantidade de operações de escrita e leitura para ordenar a
-+array. </p>
- 
- <p>When your algorithm diverges from the expectation, understanding the
- difference between your code and the expected solution can reveal very
---- /dev/null
-+++ b/src/lessons/sort/basic/cocktail/AlgCocktailSort1.pt_BR.html
-@@ -0,0 +1,27 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>CocktailSort</h1>
-+
-+<p>Para melhorar ainda mais o algoritmo BubbleSort, precisamos ver seu
-+comportamente bem de perto. Você pode perceber que os elementos
-+grandes se movem bem rápido enquanto os pequenos se movem lentamente
-+para seus destinos. Eles são então tradicionalmente chamados de
-+"coelhos" e "tartarugas" respectivamente para valores grandes e
-+rápidos e valores pequenos e lentos.</p>
-+
-+<p>Para ajudar as tartarugas a se mover rápido, o cocktail sort percorre
-+alternativamente a array da direita para a esquerda e da esquerda para
-+a direita. Aqui está o pseudo-código:</p>
-+
-+<pre>
-+Do
-+  For all i in [0,len-2], do:
-+    if i and i+1 must be swapped, do it
-+  For all i in [len-2,0] (downward), do:
-+    if i and i+1 must be swapped, do it
-+while at least one of the traversal swapped an element
-+</pre>
-+
-+<p>One can see that cocktail sort achieves exactly the same amount of swaps
-+than the bubble sort, but improves slightly on read amount. It is however
-+still worse than BubbleSort2 to that extend.</p> 
---- /dev/null
-+++ b/src/lessons/sort/basic/cocktail/AlgCocktailSort2.pt_BR.html
-@@ -0,0 +1,19 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>CocktailSort (take 2)</h1>
-+
-+<p>Vamos agora aplicar ao CocktailSort a mesma otimização que o
-+BubbleSort2 faz no BubbleSort. Devemos lembrar que os limites da parte
-+do array que não está ordenada ainda, e percorrer ela alternativamente
-+da esquerda para a direita e da diretia para a esquerda:</p>
-+<pre>
-+beg=0; end=len-2
-+do
-+  For all Pour i in [beg,end], do:
-+      If cells i and i+1 must be swapped, do it    
-+  end -= 1 (this means end = end - 1)
-+  For all Pour i in [beg,end] (downwards), do:
-+      If cells i and i+1 must be swapped, do it    
-+  beg += 1 (this means beg = beg + 1)
-+while at least one of the traversal swapped an element
-+</pre>
---- /dev/null
-+++ b/src/lessons/sort/basic/cocktail/AlgCocktailSort3.pt_BR.html
-@@ -0,0 +1,10 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>CocktailSort (3o tempo)</h1>
-+
-+<p>Mesmo se a complexidade assintótica de CocktailSort2 for a mesma do
-+BubbleSort, Ele parece melhor na prática. É até mesmo possível
-+melhorar um pouco mais parando ele na primeira rodada que não
-+encontrar nada para trocar, se realizar a rodada para baixo. Da mesma
-+forma, podemos parar se a rodade para cima encontrar algo para trocar
-+mas a rodada para baixo não.</p> 
---- a/src/lessons/sort/basic/comb/AlgCombSort.pt_BR.html
-+++ b/src/lessons/sort/basic/comb/AlgCombSort.pt_BR.html
-@@ -25,24 +25,27 @@
- while the gap is bigger than 1 or the last traversal swapped at least one pair
- </pre>
- 
--[!scala]<p>One tricky part is that we want to divide gap, that is an integer (of type
--Int), by 1.3, that is a Double.  The type system of scala won't let us do
--this, because such discrepancy usually denotes a programmer error.  As this
--is not an error this time, we have to convert gap to Double for the time of
--the operation, and then convert the result back to Int to store it into
--gap. This should be written this way:</p>
-+[!scala]<p>Um detalhe perigoso é que temos que dividir o intervalo, que é um
-+inteiro (ou do tipo Int), por 1.3, que é um Double. O sistema de tipos
-+do scala não nos deixa fazer isto, por que tal discrepância
-+normalmente significa um erro de programação. Como isto não é um erro
-+neste caso, vamos ter que converter o intervalo para Double para o
-+momento da operação, e então converter o resultado de volta para Int
-+para armazená-lo no intervalo. Isto deve ser escrito desta forma:</p>
- <pre>gap = (gap.asInstanceOf[Double] / 1.3).asInstanceOf[Int]</pre>
--<p>This is rather verbose, but actually, this notation is not very complex. And
--remember that the type checker is your friend. It's picky and sometimes
--annoying (as on this one), but it often catches weird bugs that would have
--been a pain to debug if not catch by the type checker. And since the Scala's
--authors are pragmatic, the previous expression can be simplified:</p>
-+<p>Isto é meio exagerado, mas na verdade, esta notação não é muito
-+complexa. E lembre que o verificador de sintaxe é seu amigo. Ele às
-+vezes é chato e irritante (como neste caso), mas frequentemente pega
-+bugs esquisitos que seriam trabalhosos para depurar se não fosse o
-+verificador de sintaxe. E como os autores do Scala são pragmáticos, a
-+expressão anterior pode ser simplificada:</p>
- <pre>gap = (gap.toDouble / 1.3).toInt</pre>
--<p><code>toDouble</code> and <code>toInt</code> are just shortcuts for the
--corresponding expressions <code>asInstanceOf[Double]</code> and
--<code>asInstanceOf[Int]</code>. It's not very generic, but it's very handy.</p>
-+<p><code>toDouble</code> e <code>toInt</code> são apenas atalhos para as
-+expressões correspondentes <code>asInstanceOf[Double]</code> e
-+<code>asInstanceOf[Int]</code>. Não é muito genérico, mas é bem
-+prático.</p>
- [/!]
- 
--<p>This algorithm was invented by Wlodek Dobosiewicz in 1980, and later
--rediscovered and popularized by Stephen Lacey and Richard Box, who described
--it in Byte Magazine in April 1991.</p>
-+<p>Este algoritmo foi inventanndo por Wlodek Dobosiewicz em 1980, e
-+depois redescoberto e popularizado por Stephen Lacey e Richard Box,
-+que o descreveram na Byte Magazine em Abril de 1991.</p>
---- /dev/null
-+++ b/src/lessons/sort/basic/comb/AlgCombSort11.pt_BR.html
-@@ -0,0 +1,9 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>CombSort11</h1>
-+ 
-+<p>Os autores deste algoritmo observaram que o desempenho é aumentado se
-+nos certificarmos que os últimos valores do intervalo são (11, 8, 6,
-+4, 3, 2, 1) ao invés de (9, 6, 4, 3, 2, 1) ou (10, 7, 5, 3, 2,
-+1). Retrabalhar o código do CombSort para garantir apenas que depois
-+da atualização do intervalo que se ele for 9 ou 10, devemos usar 11.</p> 
---- /dev/null
-+++ b/src/lessons/sort/basic/gnome/AlgGnomeSort.pt_BR.html
-@@ -0,0 +1,17 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>GnomeSort</h1>
-+
-+<p>O Gnome sort é similar ao insertion sort, mas os elementos são movidos
-+de poisção por uma série de trocas que se parecem com o bubble sort. O
-+nome veio do suposto comportamento que gnomos de jardim tem quando
-+ordenam vasos de flores. Aqui está uma descrição do algoritmo por seu
-+autor:</p>
-+
-+<p>Gnome Sort is based on the technique used by the standard Dutch Garden Gnome
-+(Du.: tuinkabouter). Here is how a garden gnome sorts a line of flower
-+pots. Basically, he looks at the flower pot next to him and the previous
-+one; if they are in the right order he steps one pot forward, otherwise he
-+swaps them and steps one pot backwards. Boundary conditions: if there is no
-+previous pot, he steps forwards; if there is no pot next to him, he is
-+done.  <i>—Dick Grune</i></p>
---- /dev/null
-+++ b/src/lessons/sort/basic/insertion/AlgInsertionSort.pt_BR.html
-@@ -0,0 +1,60 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>InsertionSort</h1>
-+
-+<p>
-+Este algoritmo de ordenação é muito simples de entender e escrever,
-+mesmo se não for o mais eficiente possível. Sua complexidade
-+assintótica é O(n2), mas ele é mais eficiente na prática (linear no
-+melhor caso, ie quando a array já está ordenada, e N2/4 no caso
-+médio).
-+</p>
-+<p>A ideia é percorrer todos os elementos da array, e inserir cada um
-+deles em sua posição correta numa parte já ordenada da array. Quando
-+nós olhamos para um elemento x, a situação é a seguinte: qualquer
-+elemento da esquerda da array já está ordenado, e temos que inserir x
-+na sua posição na array.</p>
-+<div style="text-align:center">
-+	<img src="lessons/sort/basic/insertion/InsertionsortBefore.png"/>
-+</div>
-+<p>Uma vez isto feito, a situação é a seguinte:</p>
-+<div style="text-align:center">
-+	<img src="lessons/sort/basic/insertion/InsertionsortAfter.png"/>
-+</div>
-+<p>O pseudo-código deste algoritmo é então o seguinte:</p>
-+<pre>For each i in [1,len-1]
-+  store the value of i in a variable v
-+  copy the cell i-1 into i if i-1 contains a value bigger than v
-+  copy the cell i-2 into i-1 if i-2 contains a value bigger than v
-+  copy the cell i-3 into i-2 if i-3 contains a value bigger than v
-+  copy the cell i-4 into i-3 if i-4 contains a value bigger than v
-+  ...
-+  copy v into the last cell copied above
-+</pre>
-+<p>
-+Naturalmente, você deve usar um loop para escrever a grande permutação
-+dentro do loop. Escrever ela desta forma deve ser na verdade
-+... improdutivo.
-+</p>
-+<p>Se você já se perguntou o que cientistas da computação fazem nos dias
-+de hoje, aqui está uma parte da resposta: Eles melhoram algoritmos
-+fundamentais para que outras pessoas possam escrever programas
-+eficientes.</p>
-+
-+<h2>Outra variação do insertion sort</h2>
-+<p>
-+TreeSort constrói uma árvore de busca binária para ordená-la. Ele
-+consegue O(n log(n)) no caso médio, mas O(n^2) nos piores casos. Não
-+vamos estudar este algoritmo aqui pois para entendê-lo temos que
-+entender o que uma árvore binária é, o que está além de nossos
-+objetivos atuais. 
-+</p>
-+<p>Existem variações do insertion sort, tais como o PatienceSort que
-+constrói pilhas de valores e ordena cada pilha depois. Este algoritmo
-+apresenta um tempo 0(n log(n)) no pior caso e uma complexidade de
-+espaço de 0(n). LibrarySort (proposto em 2004) também troca um pouco
-+de espaço por tempo já que tem uma complexidade de tempo de O(n
-+log(n)) mas precisa armazenar um pouco mais de dados.</p>
-+ 
-+<p>A Wikipédia fornece uma descrição detalhada de cada um destes
-+algoritmos que não apresentamos aqui devido a limitações de tempo.</p> 
---- /dev/null
-+++ b/src/lessons/sort/basic/selection/AlgSelectionSort.pt_BR.html
-@@ -0,0 +1,23 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Selection Sort</h1>
-+
-+Neste exercício vamos implementar outro algoritmo clássico: selection sort.
-+
-+<p>The idea is simply to select for each cell of the array the smallest value
-+from the part not already sorted. Thus for the first cell, it takes the
-+smallest value over the whole array. For the second one, it takes the second
-+smallest value, which is the smallest value from the cell not already
-+sorted. You of course don't have to sort the last cell of the array, that is
-+already sorted when you consider it.
-+
-+<p>More generally, for the cell N, it looks the cell M in [N;len] containing
-+the smallest possible value of the interval. Then, it swaps the content of
-+cell N with the one of cell M. 
-+
-+<h2>Variações existentes</h2>
-+Outro algoritmo clássico cuja ideia é baseada na seleção de bons
-+elementos é o HeapSort, mas ele usa uma estrutura de dados heap que
-+ainda não vimos. Simplesmente lembre que o HeapSort fornece um
-+desempenho O(n log n) no pior caso, que é o motivo para ele ser bem
-+interessante na prática. 
---- /dev/null
-+++ b/src/lessons/sort/basic/shell/AlgShellSort.pt_BR.html
-@@ -0,0 +1,48 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h2>ShellSort</h2>
-+ 
-+This algorithm is named after its author, Donald Shell, who published it in
-+1959. It can be seen as an application of the CombSort idea (let elements
-+having a long path to travel take shortcuts) to the insertion sort (CombSort
-+is a variation of BubbleSort). Instead of comparing adjacent values during
-+the insertion sort, it compares values separated by a bigger gap. The bigger
-+the gap, the faster the elements are moved to their final destination, but
-+also the less precise is this move. It is thus mandatory to apply the
-+algorithm with a serie of decreasing gaps. At the last step, when the gap is
-+one, InsertionSort is used, but onto an array which is almost already sorted
-+by previous steps.
-+
-+<p>Donald Shell propôs <code>len/2</code> como o valor inicial do
-+intervalo, e ir dividindo por 2 a cada passo. O pseudo-código é o
-+seguinte:
-+<pre>
-+gap=len/2
-+while gap>0:
-+  apply InsertionSort, comparing i-gap and i, then i-2gap and i-gap, then i-3gap and i-2gap, etc.
-+</pre>
-+
-+<p>Assim como no CombSort, a sequência de valores pega pelo intervalo é
-+crucial para a performance do Shell sort. Em alguns casos patológicos
-+raros, a sequência que usamos pode levar a uma performance
-+O(n^2). Outras sequências foram propostas: os incrementos de Hibbard
-+de 2k − 1 levam a uma complexidade de O(n^(3/2)) em casos
-+ruins. incrementos de Pratt 2^i3^j levam a uma performance de
-+O(nlog(n)log(n) nos piores casos. A existência de uma sequência
-+levando a O(n log(n)) foi excluída por Poonen, Plaxton e Suel. Graças
-+a esta performance, ShellSort é um candidato válido para arrays de
-+várias centenas de milhares quando corretamente implementado.</p>
-+
-+<p>No nosso caso, a array é pequena demais para se beneficiar destas
-+otimizações. Se você ainda assim quiser, tome o intervalo inicial como
-+o maior valor da série alvo ainda menor que o tamanho do array, e
-+então use valores decrescentes da série.</p>
-+
-+<p>Determinar a melhor sequência de intervalos para o shell sort se
-+tornou um tema de pesquisa de nosso século em ciência da
-+computação. Por exemplo, um artigo de 2001 introduz a seguinte
-+sequência, que parece ser a melhor na prática para arrays de tamanho
-+até 10^5: {1, 4, 10, 23, 57, 132, 301, 701, 1750} (Marcin Ciura, Best
-+Increments for the Average Case of Shellsort, 13th International
-+Symposium on Fundamentals of Computation Theory, LNCS 2001;
-+Vol. 2138).</p> 
---- /dev/null
-+++ b/src/lessons/sort/basic/short_desc.pt_BR.html
-@@ -0,0 +1,8 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h3>Algoritmos de Ordenação</h3>
-+
-+<p>Esta lição permite a experimentação com alguns algotimos de ordenação
-+clássicos (e algumas variantes menos comuns deles :)</p>
-+
-+<p>Para fazer esta lição você deve dominar as bases da programação.</p>
---- /dev/null
-+++ b/src/lessons/sort/dutchflag/DutchFlagAlgo.pt_BR.html
-@@ -0,0 +1,33 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>O problema da bandeira holandesa</h1>
-+
-+<p>Your work is to sort all the colors of the Dutch flag, and the only provided
-+primitive is to exchange two given lines.  In addition, you should not
-+create any additional variables (but a few indices).</p>
-+
-+<p>If you think carefully, this can be done in linear time, where you sort a
-+line at each iteration of the loop.  You may want to check again the <a
-+href="plm://lessons.sort.basic/insertion.AlgInsertionSort">insertion
-+sort</a>, of which the Dutch Flag sort is a variation. The main difference
-+is that you have 3 insertion points, not only one...</p>
-+
-+ <div class="tip" id="tip-1" alt="I need an hint to start">
-+ Do a traversal over your data, saving 3 indices:
-+ <ul>
-+  <li><code>afterBlue</code> is initialized to 0. Make sure that every cell below
-+<code>afterBlue</code> is filled with blue elements.</li>
-+  <li><code>whiteRed</code> is initialized to size-1. Make sure that every cell
-+after <code>whiteRed</code> is filled with red elements.</li>
-+  <li><code>beforeWhite</code> is initialized to size-1. Make sure that every cell
-+after <code>beforeWhite</code> and before <code>whiteRed</code> is filled
-+with while elements.</li>
-+ </ul> 
-+ Note that the unsorted cells are always between <code>afterBlue</code> and
-+<code>beforeWhite</code>.<br/>
-+ 
-+ At each step of your traversal, check the color of the cell at
-+<code>afterBlue</code> and do the required exchanges.  The loop ending
-+condition is when <code>afterBlue</code> becomes larger than
-+<code>beforeWhite</code>.<br/>
-+ </div>
---- /dev/null
-+++ b/src/lessons/sort/dutchflag/Main.pt_BR.html
-@@ -0,0 +1,22 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>O problema da bandeira holandesa</h1>
-+
-+<p>Este problema foi proposto primeiro por E.W Dijkstra em 1976 (no
-+capítulo 14 de seu livro "A Discipline of Programming"). É uma
-+variação clássica de algoritmos de ordenação desde então. Ele é às
-+vezes útil em vida real, mas se tornou famosos por suas propriedades
-+pedagógicas: sua complexidade não é trivial, mas não é muito
-+complexo. Pode ser provados formalmente com facilidade, mas não é de
-+forma alguma trivial. </p>  
-+
-+<h3>O que eu posso fazer para melhorar este universo do PLM?</h3>
-+
-+<p>Como sempre, existem várias coisas que podem ser feitas no código
-+deste universo para melhorá-lo:</p>
-+<ul>
-+  <li>Uma visão temporal pode ser bem-vinda.</li>
-+  <li>Outros exercícios, por exemplo com 2 cores apenas ou com mais de 3
-+cores, podem generalizar a abordagem proposta.</li>
-+  <li>This problem could be solved recursively.</li>
-+</ul> 
---- /dev/null
-+++ b/src/lessons/sort/dutchflag/short_desc.pt_BR.html
-@@ -0,0 +1,6 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h3>O problema da bandeira holandesa</h3>
-+
-+<p>This is a classical sorting problem, constituting a variation over the
-+insertion sort.</p>
---- a/src/lessons/sort/dutchflag/universe/DutchFlagWorld.pt_BR.html
-+++ b/src/lessons/sort/dutchflag/universe/DutchFlagWorld.pt_BR.html
-@@ -1,6 +1,6 @@
- 
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
--<h1>The Dutch Flag Problem</h1>
-+<h1>O problema da bandeira holandesa</h1>
- 
- <h2>Provided values</h2>
- 
---- a/src/lessons/sort/pancake/BasicPancake.fr.html
-+++ b/src/lessons/sort/pancake/BasicPancake.fr.html
-@@ -19,9 +19,10 @@
- sommet
- de la pile.</p>
- 
--<p>Your work is to help this poor guy sorting his stack by flipping the
--pancakes. Each pancake is defined by its radius and rank within the stack,
--with the top-most pancake is at rank 0, and the one below at rank 1.</p>
-+<p>Vous devez aider ce pauvre homme à trier sa pile en retournant des
-+crêpes. Chaque crêpe est définie par son rayon et son rang dans la pile. La
-+pile la plus haute est de rang 0, et celle placée au dessous d'elle est de
-+rang 1.</p>
- 
- <p>Il est conseillé de commencer par jouer physiquement avec des bouts de
- papier ou de carton pour bien comprendre le problème. C'est même l'une des
---- a/src/lessons/sort/pancake/Main.pt_BR.html
-+++ b/src/lessons/sort/pancake/Main.pt_BR.html
-@@ -33,10 +33,10 @@
- run the unplugged activities before implementing these algorithms in PLM.</p>
- 
- 
--<h3>What can I do to improve this PLM universe?</h3>
-+<h3>O que eu posso fazer para melhorar este universo do PLM?</h3>
- 
--<p>As usual, there are several things that could be done in the code of this
--universe to improve it:</p>
-+<p>Como sempre, existem várias coisas que podem ser feitas no código
-+deste universo para melhorá-lo:</p>
- <ul>
-   <li>A temporal view similar to the sorting universe could be helpful</li>
-   <li>Other exercises, for example on the Roti sorting, with a pile of Roti that
---- /dev/null
-+++ b/src/lessons/turmites/Main.pt_BR.html
-@@ -0,0 +1,36 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Os turmites</h1>
-+
-+<p>Este conjunto de atividades é para você brincar com formigas de
-+Langton, que são máquinas de Turing 2D. Elas constituem problemas bem
-+simples, bons para iniciantes, e abrem as portas para um mundo
-+fantástico.</p>
-+
-+<p>Este mecanismo foi inventado em 1986 por Chris Langton, e depois
-+generalizado em várias formas (como veremos nos próximos
-+exercícios). Foi provado que Turmites e máquinas de Turing têm o mesmo
-+poder: Uma trajetória de formiga pode ser usada para calcular qualquer
-+circuito booleano, e logo uma formiga é capaz de qualquer cálculo
-+universal. resumindo, qualquer cálculo possível pode ser alcançado
-+usando uma turmite como dispocitivo computacional. Ainda outro assunto
-+fascinante...</p>
-+
-+<p>formigas de Langton multicoloridas foram descobertas em 1995 por Propp
-+et Al. Outro fato divertido é que as formigas cujos nomes é uma lista
-+de pares consecutivos de letras idênticas (LL e RR) produzem padrões
-+simétricos. Este fato foi até mesmo provado formalmente.</p>
-+
-+<p>Verifique a página da wikipédia correspondente, na qual este exercício
-+é inspirado, para maiores detalhes.</p>
-+
-+<h3>O que eu posso fazer para melhorar este universo do PLM?</h3>
-+
-+<p>Como sempre, existem várias coisas que podem ser feitas no código
-+deste universo para melhorá-lo:</p>
-+<ul>
-+  <li>Alguns bons exercícios estão provavelmente faltando. O exercício de
-+criador de turmite é um pouco pé-duro: podemos introduzir os padrões
-+de uma forma mais amigável.</li>
-+  <li>Quem sabe não escrevemos um exercício sobre os busy beavers?</li>
-+</ul>
---- a/src/lessons/turmites/helloturmite/HelloTurmite.pt_BR.html
-+++ b/src/lessons/turmites/helloturmite/HelloTurmite.pt_BR.html
-@@ -67,7 +67,7 @@
- construct to keep your code readable.  If you can't remember what it is,
- check <a href="plm://lessons.welcome/bdr.BDR2">this exercise</a>.</p>[/!]
- 
--<p>You now should have enough information to succeed.</p>
-+<p>Você agora tem informação o suficiente para conseguir.</p>
- 
- <h2>Bibliographical notes</h2>
- <p>According to wikipedia, turmites were invented independently by the end of
---- a/src/lessons/turmites/langton/Langton.pt_BR.html
-+++ b/src/lessons/turmites/langton/Langton.pt_BR.html
-@@ -1,18 +1,18 @@
- 
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
--<h2>Langton's ant</h2>
-+<h2>formiga de Langton</h2>
- 
--<p>In this exercise, you will turn your buggle into a <i>Langton's
--ant</i>. These artificial little animals are very interesting because they
--are given simple rules that depend only on their local environment, and
--after a period of apparent chaotic behavior, a general pattern
--<i>emerges</i>.</p>
--
--<p>The rules are absolutely trivial: to compute what the next step should be,
--you should check the current color of the ground (using
--<code>getGroundColor()</code>). If it's white, change it to black, turn
--right and move forward by one cell. If the ground is currently black, change
--it to white, turn left and move forward by one cell.</p> 
-+<p>Neste exercício, você vai transformar seu buggle numa <i>formiga de
-+Langton</i>. Estes pequenos animais artificiais são bastante
-+interessantes por que eles recebem regras simples que dependem apenas
-+do seu ambiente local, e depois de um período de aparente
-+comportamento caótico, um padrão geral <i>surge</i>.</p>
-+
-+<p>As regras são absolutamente triviais: para calcular qual o próximo
-+passo, você verifica a cor atual do chão (usando
-+<code>getGroundColor()</code>). Se for branco, mude para preto, vire à
-+direita e mova uma célula. Se for preto mude para branco, vire a
-+esquerda e ande uma célula.</p> 
- 
- <p>It's hard to come up with simpler rules isn't it? Well, let's go and code it
- now. You have to complete the <code>step()</code> method, which encodes the
-@@ -22,15 +22,15 @@
- <code>Color.black</code> and <code>Color.white</code>.</p>
- 
- [!java]
--<p>To compare colors, you cannot use the equal signs (==), because these things
--are not scalar values but objects. Instead, you need to write something like
--the following:</p> 
-+<p>Para comparar cores, você não pode usar o símbolo de igualdade (==),
-+pois estas coisas não são valores escalares, mas objetos. Ao invés
-+disto, você precisa escrever algo como o seguinte:</p> 
- <pre>
--Color c /* = some initialization */;
--if (c.equals(Color.black)) {
--  /* that's equal */
-+Cor c /* = alguma inicialização */;
-+if (c.equals(Cor.preto)) {
-+  /* é igual */
- } else {
--  /* that was not equal */
-+  /* não é igual */
- }
- </pre>
- [/!]
-@@ -43,9 +43,10 @@
- código da forma que quiser, mas você deve querer escrever um método
- <code>setCorDoChão(color)</code> para separar um pouco as coisas.</p>
- 
--<p>As you can see from the execution of this exercise, the interest in this
--algorithm is that after about 10000 steps of relative chaotic behavior, the
--ant start building a regular pattern. This emergence of a regular pattern
--from the chaos is rather fascinating, isn't it? Move on to the next exercise
--to see more of them.</p>   
-+<p>Como você pode ver da execução deste exercício, o interessante neste
-+algoritmo é que depois de uns 10000 passos de comportamento
-+relativamente caótico, a formiga começa a construir um padrão
-+regular. O surgimento deste padrão regular em meio ao caos é bastante
-+fascinante, não acha? Mova para o próximo exercício para ver mais
-+disto.</p>   
- 
---- /dev/null
-+++ b/src/lessons/turmites/langtoncolors/LangtonColors.pt_BR.html
-@@ -0,0 +1,43 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h2>formiga de Langton multicolorida</h2>
-+
-+<p>There is several ways to extend the concept of Langton's ant. In this
-+exercise, we explore first one, using more than two colors. It remains very
-+similar to the base case: the behavior at each step still depends on the
-+ground color, but you have more than 2 possibilities. It allows to have more
-+than one kind of ant, depending on what you decide to do for each color. For
-+example, the ant LRL takes 3 colors. It turns left on the first color, right
-+on the second one and left on the third color. According to this definition,
-+the basic ant is a RL (since it turns right on white cells and left on black
-+ones).</p>
-+
-+<p>Algumas destas formigas desenham padrões fascinantes (alterne o mundo
-+para vê-los): LLRR constrói uma figura simétrica semelhante a uma
-+bola, LRRRRRLLR desenha um quadrado, LLRRRLRLRLLR desenha um padrão
-+regular convolucionado depois de um período de aparente caos, e
-+RRLLLRLLLRRR parece preencher uma ampulheta...</p>  
-+
-+<p>Transformar seu buggle numa formiga de Langton genérica não é muito
-+complicado, embora não seja totalmente trivial. Como anteriormente,
-+você tem que escrever uma função <code>step</code>. Mas desta vez, ela
-+recebe duas arrays como parâmetros. A primeira define as regras para
-+seguir dependendo da cor do chão enquanto a segunda dá a sequência de
-+cores a usar. Por exemplo, a formiga básica deve ter
-+[!java]<code>{'R', 'L'}</code> e <code>{Cor.branco,
-+Cor.preto}</code>[/!] [!python]<code>['R', 'L']</code> e
-+<code>[Cor.branco, Cor.preto]</code>[/!] [!scala]<code>Array('R',
-+'L')</code> e <code>Array(Cor.branco, Cor.preto)</code>[/!] como
-+argumentos.</p>
-+
-+<p>Em cada passo, você deve então ter que aplicar o seguinte pseudo-código:</p>
-+<ul>
-+ <li>Encontre a posição da cor do chão na sequência de cores;</li>
-+ <li>Vire a esquerda ou direita dependendo do conteúdo da array de regras
-+nesta posição;</li>
-+ <li>Mark the current ground with the next color in the sequence (the last color
-+being followed by the first one);</li>
-+ <li>ande um passo para frente.</li>
-+</ul> 
-+
-+<p>Você agora tem informação o suficiente para conseguir.</p>
---- /dev/null
-+++ b/src/lessons/turmites/short_desc.pt_BR.html
-@@ -0,0 +1,7 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h3>Os turmites</h3>
-+<p>Descubra as formigas de Langton, que são máquinas de Turing 2D.</p>
-+
-+<p>Estas atividades são problemas bem simples, bons para iniciantes, e
-+abrema a porta para um mundo fantástico.</p>
---- /dev/null
-+++ b/src/lessons/turtleart/Main.pt_BR.html
-@@ -0,0 +1,28 @@
-+
-+<!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
-+<h1>Turtle Art</h1>
-+
-+<p>Since its inception in the 60's, the LOGO turtle fascinates by its ability
-+to draw nice figures on computer.  This lesson allows you to explore some of
-+the classical figures, and draw your own.</p>
-+
-+<p>The language's syntax is absolutely not presented, but if you know a bit of
-+it or if someone tells you, you can take these exercises even if you are an
-+absolute beginner in programming.</p>
-+
-+<p>Please send us your best contributions so that they get added to this
-+gallery to inspire the next ones.</p>
-+
-+<h3>O que eu posso fazer para melhorar este universo do PLM?</h3>
-+
-+<p>Como sempre, existem várias coisas que podem ser feitas no código
-+deste universo para melhorá-lo:</p>
-+<ul>
-+  <li>Other exercises should be added. A whole lot of exercises are available from
-+<a
-+href="http://neoparaiso.com/logo/#sect4">http://neoparaiso.com/logo/#sect4</a>
-+or from <a
-+href="http://billkerr2.blogspot.fr/2009/08/40-maths-shapes-challenges.html.">http://billkerr2.blogspot.fr/2009/08/40-maths-shapes-challenges.html</a>.</li>
-+  <li>Missing: the built-ins arc() and arcTo(), that draw an arc, either w/o
-+moving or by moving to the end of the arc.</li> 
-+</ul>
---- a/src/lessons/welcome/traversal/column/TraversalByColumn.pt_BR.html
-+++ b/src/lessons/welcome/traversal/column/TraversalByColumn.pt_BR.html
-@@ -41,15 +41,16 @@
- tem que parar. Use oo botão <b>stop</b> se o buggle não parar
- corretamente.</p>
- 
--<p>It is now time to write down the cell numbers. For that, you will need a
--counter initialiser to zero at the beginning of your code, and incremented
--by one at each step (for example with <code>counter += 1;</code>).  Then,
--you have to use <code>writeMessage()</code> to write the value on the
--ground.
-+<p>Agora é hora de escrever os números das células. Para isto, você vai
-+precisar de um contador iniciando em zero no começo do seu código, e
-+incrementar de um em cada passo (por exemplo com <code>counter +=
-+1;</code>).  Então, você terá que usar <code>escreverMensagem()</code>
-+para escrever o valor no chão.
- </p>
- 
--<p>You probably need to write the first [!java|scala|c]or last [/!]value out of
--the main loop [!java|scala|c], depending on whether you prefer to use a
--<code>while</code> or a <code>do/while</code> one[/!].</p>
-+<p>Você provavelmente vai precisar escrever o primeiro [!java|scala|c]ou
-+último [/!]valor fora do loop principal [!java|scala|c], dependendo se
-+você prefere usar um <code>while</code> ou um
-+<code>do/while</code>[/!].</p>
- 
- <p>Sua vez...</p>
---- a/src/lessons/welcome/traversal/diagonal/TraversalDiagonal.pt_BR.html
-+++ b/src/lessons/welcome/traversal/diagonal/TraversalDiagonal.pt_BR.html
-@@ -2,11 +2,11 @@
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h2>Percorrer na diagonal</h2>
- 
--<p>This time, you are asked to traverse the world one diagonal after the
--other. Have a look at the objective world for more details on the requested
--traversal order.</p>
-+<p>Agora é para você atravessar o mundo uma diagonal depois da outra. Dê
-+uma olhada no mundo objetivo para maiores detalhes quanto à ordem a
-+percorrer pedida.</p>
- 	
--<p>You may find useful to use an integer variable <code>diag</code> storing the
--number of the diagonal you are traversing.</p>
-+<p>Pode ser útil usar uma variável inteira <code>diag</code> guardando o
-+número da diagonal que você está atravessando.</p>
- 
- <p>Sua vez...</p>
---- a/src/lessons/welcome/traversal/line/TraversalByLine.pt_BR.html
-+++ b/src/lessons/welcome/traversal/line/TraversalByLine.pt_BR.html
-@@ -2,11 +2,13 @@
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h2>Percorrer pelas linhas</h2>
- 
--You once again have to let the buggle traverse the world numbering the cells
--on its way, but the goal of this exercise is to write a line traversal. Most
--of the code you wrote for previous exercise remains usable here. Simply, the
--method computing the coordinates of the next buggle position has to be
--correctly updated: if you are at the right of a line, you have to go to the
--beginning of the next one. If not, you have to go to the right cell.
-+Mais uma vez você terá que deixar o buggle percorrer o mundo numerando
-+as células no caminho, mas o objetivo do exercício é escrever uma
-+linha transversal. A maioria do código que você escreveu para
-+exercícios anteriores continua útil aqui. Simplesmente, o método
-+calculando as coordenadas da próxima posição do buggle tem que ser
-+atualizado corretamente: se você estiver a direita de uma linha, você
-+terá que ir para o começo da próxima. Senão, você terá que ir para a
-+célula da direita.
- 
- <p>Sua vez...</p>
---- a/src/lessons/welcome/traversal/zigzag/TraversalZigZag.pt_BR.html
-+++ b/src/lessons/welcome/traversal/zigzag/TraversalZigZag.pt_BR.html
-@@ -2,7 +2,8 @@
- <!-- Please don't translate this file but l10n/missions/plm.pot (see https://github.com/oster/PLM/wiki/Working-on-translations) -->
- <h2>Percorrer em zig-zag</h2>
- 
--This time, you have to zigzag on the way up. Have a look at the objective
--world for more details on the requested traversal order.
-+Desta vez, você vai ter que fazer um zigzag no caminho para cima. Dê
-+uma olhada no mundo objetivo para mais detalhes da ordem a percorrer
-+pedida.
- 
- <p>Sua vez...</p>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/plm.git



More information about the pkg-java-commits mailing list