Vélo


h1 11/22/2007 11:00:00 PM

Il y a trois ans, mon père m'a légué son vieux vélo de randonnée. J'ai eu envie de le faire retourner en Irlande, puis c'est en Bretagne et aux Pays-Bas que nous sommes partis en cyclotouristes avec Estelle. Malgré notre style très calme (grasses matinées, pauses café et autres douceurs) nous avons pu voir beaucoup de pays. C'est vraiment un chouette genre de vacances, un bon compromis entre la marche et la voiture.


(Sur la photo, moi et le vélo en question, aux Pays-Bas. Au passage, j'ai publié quelques unes des photos de ce voyage sur Flickr.)

En Septembre, un petit soucis technique sur ce vieux vélo m'a décidé à en acheter un nouveau. J'ai passé un bon moment à chercher un vélo qui pourrait le remplacer: léger, rapide, élégant, fonctionnel avec ses portes bagages. Je ne vais pas faire des tartines de ces considérations, de tout ce que j'ai lu et de mon choix final. Toujours est-il que j'ai un nouveau vélo pas mal du tout, que je commence à équiper pour la randonnée, et que ça m'a donné envie de tester le trajet de chez moi à l'École Polytechnique. La distance n'est pas négligeable, avec 20km depuis Montparnasse, mais le parcours presque tout en piste cyclable est très agréable. Plusieurs personnes font cette ballade pour aller au labo, et ils n'ont pas tous l'air de gros stakhanovistes: pourquoi pas moi/vous ?

J'ai mis un petit moment à peaufiner mon trajet. La première fois fut avant les grèves, les deux suivantes pendant: ça tombe bien. Toujours est-il que maintenant que je connais bien la route, j'ai tracé le plan sur Google Maps. Les intéressés cliqueront sur l'image:



Pour finir, quelques liens que j'ai trouvé utiles dans mes recherches.

D'abord les fabricants. Peu font encore de l'acier, pour des raisons économiques déplorables car ce matériau est plus souple donc plus solide, et permet l'utilisation de tubes extrêmement fins donc des vélos beaucoup plus élégants et tout aussi légers qu'en aluminium. Rivendell fait des vélos en acier tout simplement sublimes, mais tellement chers! Surly est plus accessible et son Long Haul Trucker a la côte pour la randonnée, mais reste un gros investissement à mon échelle. Si l'on se résigne à l'aluminium, on découvre quand même de beaux vélos, et on s'aperçoit que Decathlon n'a pas forcément un rapport qualité/prix imbattable (par contre niveau visibilité ils écrasent tout le monde à Paris): par exemple les vélos Trek sont plutôt bien faits et pas aussi chers que le design du site ne le laisse croire. J'ai opté pour le 7.3FX, il n'est pas plus cher que le milieu/haut de gamme Decathlon et correspond mieux à ce que je voulais. Pis quand on le voit, on se dit qu'il vaut son prix :)

Sinon pour la technique du vélo, des anecdotes et des conseil sur le matériel, de l'antique au plus moderne, Sheldon Brown (en anglais) est super bon.

Enfin, n'oublions pas qu'on roule pour voyager. Niveau matériel, deux marques sont omniprésentes: Tubus pour les porte-bagages et Ortlieb pour les sacoches. Le matos est bien foutu (en en voyant aux Pays-Bas j'avais déja commencé à penser à me re-équiper) mais putain qu'est-ce que c'est cher. On pourra admirer des vélos voyageurs bien chargés dans la galerie Fully Loaded Bicycle, du pliant au tandem. Enfin vraiment sur le voyage, le site Crazy Guy on a Bike recense des récits de voyages à vélo (du court au très long) ainsi que de nombreux conseils. Comme très long voyage balisé, la route EuroVelo6 s'illustre avec 4000km de St Nazaire à la Mer Noire par la Loire, le Rhin et le Danube.

Libellés : ,

Enigmes


h1 11/21/2007 03:33:00 PM

Quand on pose une énigme mathématique, à moitié formalisée, on finit toujours par avoir une réponse type: "on enlève le bandeau qu'on a sur les yeux", "on casse la gueule au bourreau", etc. D'où l'idée de formaliser vraiment, sous forme d'un exercice de programmation... (qui a dit "maniaque" ?)

Un groupe de n prisonniers se trouve en mauvaise posture. Ils vont être mis en file indienne, chaque prisonnier voyant seulement les prisonniers devant lui. Puis on leur mettra sur la tête un chapeau bleu, blanc ou rouge, qu'ils ne peuvent voir. Un bourreau procède alors comme suit: en partant du dernier prisonnier il demande "Quelle est la couleur de ton chapeau ?", et le prisonnier n'a le droit qu'à une réponse, qui doit être une couleur. A la fin, les prisonniers qui ont deviné la couleur de leur chapeau sont épargnés, les autres exécutés. Les prisonniers peuvent se concerter avant l'épreuve sur la stratégie à adopter. Quelle est la meilleure stratégie ?

Voici maintenant l'énoncé complètement formalisé. Un prisonnier est représenté par une fonction qui prend deux listes de couleurs (celles qu'il voit devant lui, celles qui ont été prononcées comme réponses derrière lui), et renvoie une couleur (sa réponse). Dans la liste des réponses précédentes, la réponse du dernier de la file est la dernière de la liste. Trouver une fonction prisonniers qui à un entier n associe une liste de n fonctions/prisonniers telle que le nombre de morts calculé par (execution (prisonniers n)) soit le plus petit possible dans le pire cas. La fonction d'exécution est la suivante:
type couleur = Bleu | Blanc | Rouge
type prisonnier = couleur list -> couleur list -> couleur

let random_couleur () =
let n = Random.int 3 in
if n = 0 then Bleu else if n = 1 then Blanc else Rouge

let execution (prisonniers : prisonnier list) =
let prisonniers =
List.map (fun p -> p, random_couleur ()) prisonniers
in
let rec morts avant = function
| (p,c)::l ->
let reponse = p (List.map snd l) avant in
(if reponse = c then 0 else 1) +
(morts (reponse::avant) l)
| [] -> 0
in
morts [] prisonniers

Amusez-vous bien, et postez vos réponses dans le langage de votre choix...

Edit: une autre énigme beaucoup plus étonnante, que Florent et Julien m'ont racontée. Vous avez devant vous sur une table 7 pièces côté pile et 19 pièces côté face. Mais vos yeux sont bandés (et vous portez des moufles) de sorte que vous ne pouvez savoir l'état d'une pièce. Tout ce que vous pouvez faire c'est en retourner certaines, autant que vous voulez, et les déplacer. Il vous faut les séparer en deux groupes qui contiennent le même nombre de pièces côté pile.

La solution sera une fonction qui prend le nombre de piles et le nombre de faces (je vous aide bien en généralisant) et qui renvoie deux tableaux de taille piles+faces: le premier indique les indices des pièces choisies, le second indique les pièces qu'il faut retourner. La fonction sera passée à la fonction de test suivantes:
(** Perfect Fisher-Yates shuffle
* (http://www.nist.gov/dads/HTML/fisherYatesShuffle.html). *)
let randomize a =
let permute i j =
let tmp = a.(i) in
a.(i) <- a.(j);
a.(j) <- tmp
in
let l = Array.length a in
if l>=2 then
for i=0 to l-2 do
permute i (i + Random.int (l-i))
done

let test nb_piles nb_faces joueur =
let choix,retourne = joueur nb_piles nb_faces in
let n = nb_piles + nb_faces in
let a = Array.init n (fun i -> i<nb_piles) in
(* Nombre de piles à gauche - nombre de piles à droite *)
let d = ref 0 in
randomize a ;
for i = 0 to n-1 do
if retourne.(i) then a.(i) <- not a.(i) ;
d := (if choix.(i) then (+) else (-)) !d (if a.(i) then 1 else 0)
done ;
!d = 0

A suivre: les solutions commentées...

Libellés :