Archives mensuelles : janvier 2009

Minuterie

Minuterie Web

Pizza + Geek = Minuterie Web 🙂

Si comme moi vous restez devant votre PC pendant que votre pizza est en train de cuire dans le four, j’ai l’outil qu’il vous faut ! Une petite minuterie toute simple (en XHTML/CSS/Javascript) :

http://pas-bien.net/divers/decompte/

Bien sĂ»r vous pouvez recopier et modifier les sources Ă  votre guise. Aussi il suffit d’enregistrer la page pour avoir la minuterie sur votre disque dur (index.html contient tout).

Nombres premiers

Liste des nombres premiers

Je sais pas pourquoi mais les nombres premiers m’ont toujours un peu fascinĂ©s. J’avais donc rĂ©alisĂ© il y a un certain temps, un petit script Python qui cherche tous les nombres premiers. Ca sert Ă  rien mais quelqu’un d’autre s’amusera peut ĂȘtre avec :

from math import sqrt;
def tester (aTester):
	global tab
	index = 0
	racine = sqrt( aTester )
	while tab[index] <= sqrt( aTester ):
		index += 1
		if( (aTester % tab[index]) == 0):
			return 0
	tab += [aTester]
	print aTester
	return 1
tab,mod,max = [2,3,5,7],10,1
print 2
print 3
print 5
print 7
while (mod != max):
	tester(mod + 1)
	tester(mod + 3)
	tester(mod + 7)
	tester(mod + 9)
	mod += 10

Conjecture de Goldbach

Aussi quelqu’un m’a parlĂ© un jour de la conjecture de Goldbach. Voici ce qu’en dit l’article Wikipedia :

La conjecture de Goldbach stipule que tout nombre entier pair strictement supĂ©rieur Ă  2 peut ĂȘtre Ă©crit comme la somme de deux nombres premiers (le mĂȘme nombre premier pouvant ĂȘtre utilisĂ© plusieurs fois). C’est l’un des plus vieux problĂšmes non rĂ©solus de la thĂ©orie des nombres et des mathĂ©matiques.

J’ai donc encore fait un script Python. Il s’arrĂȘtera quand il ne trouvera pas de somme de deux nombre premiers pour un nombre pair.

from math import sqrt;
def MaJpremiers ():
	global tab,i;
	index,suivant = 0,tab[ len(tab) - 1 ] + 2;
	while (tab[ len(tab) - 1 ] <= i):
		while tab[index] <= sqrt( suivant ):
			index += 1;
			if( (suivant % tab[index]) == 0):
				suivant , index = suivant + 2 , 0;
		tab,suivant,index = tab + [suivant] , suivant + 2 , 0;
	return 1;
def testSomme ():
	global tab,i;
	a,b,t = 0,0,len(tab);
	for a in range(0,t):
		for b in range(t-1,a-1,-1):
			if ((tab[a]+tab[b])==i):
				print i,"=",tab[a],"+",tab[b];
				return 1;
			elif ((tab[a]+tab[b])<= max)):
	i += 2;
	MaJpremiers();

Limites

Ces scripts n’iront pas plus loin que ce que les super-calculateurs ont dĂ©montrĂ© jusque lĂ . La simplicitĂ© du code fait que ces scripts vont ĂȘtre de plus en plus lent au fur et Ă  mesure qu’ils tournent Ă  cause des listes de premiers qui s’agrandissent. Pensez donc Ă  faire Ctrl+C pour stopper ces scripts puisque les nombres premiers sont rĂ©putĂ©s infinis et la conjecture de Goldbach n’a toujours pas Ă©tĂ© infirmĂ©es.

Creative Commons GNU GPL

Programmes sous Creative Commons GNU GPL

Sudoku

RĂ©solveur de Sudoku en C++

Je souhaite vous faire profiter d’un petit projet personnel que j’avais rĂ©alisĂ© en 2006 : un rĂ©solveur de sudoku (9×9) en C++. Vous trouverez dans l’archive :

  • les sources,
  • quelques grilles,
  • le fichier de projet Dev-C++.

Les grilles Ă  rĂ©soudre sont reprĂ©sentĂ©e dans les fichiers par une suite de chiffre qui peuvent ĂȘtre mis en forme (les caractĂšre qui ne sont pas numĂ©riques sont ignorĂ©s, les zĂ©ros reprĂ©sentent les inconnues). Les deux exemples suivants sont deux reprĂ©sentations de la mĂȘme grille :

  • 907500006006009007001002000
    000004130000000000038090000
    004700200500400800070003605
  • 9 0 7|5 0 0|0 0 6
    0 0 6|0 0 9|0 0 7
    0 0 1|0 0 2|0 0 0
    -----------------
    0 0 0|0 0 4|1 3 0
    0 0 0|0 0 0|0 0 0
    0 3 8|0 9 0|0 0 0
    -----------------
    0 0 4|7 0 0|2 0 0
    5 0 0|4 0 0|8 0 0
    0 7 0|0 0 3|6 0 5

Je sais qu’il existe dĂ©jĂ  plein de rĂ©solveurs sur le Web mais celui lĂ , il pense comme moi 🙂 : il applique mes mĂ©thodes de rĂ©solutions et il se trouve bloquĂ© au mĂȘmes endroits que moi sur les grilles complexes…

Télécharger le résolveur (version 0.0.1)

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL

Google Reader

Filtrez vos flux RSS avec ce qui vous intéresse

Pour quoi faire ?

J’utilise pas mal les flux RSS pour me simplifier certaines choses. Comme par exemple l’arrivĂ©e d’un nouvel Ă©pisode d’une des sĂ©ries que je suis. Un de mes « problĂšmes » Ă©tait que je recevais des actualitĂ©s dont je n’avais rien Ă  faire. Je me suis donc crĂ©Ă© un petit outil PHP qui rĂ©cupĂšre les flux RSS de diffĂ©rents sites, les filtre et les regroupe en un seul.

Comment ça marche ?

Il y a deux moyens d’utiliser cet outil.

PremiĂšre utilisation

Avec des paramĂštres GET :

  • feeds : la liste des flux sĂ©parĂ©s par une virgule.
  • filters : la liste des filtres d’inclusions aussi sĂ©parĂ©s par une virgule.
  • excludes (optionnel) : encore une liste sĂ©parĂ©e par des virgule pour forcer l’exclusion d’items qui sont passĂ©s.
  • debug  (optionnel) : pour recevoir dans le flux gĂ©nĂ©rĂ© les erreurs qui se sont produites.

Exemple :

http://example.com/rss-filter/rssfilter.php?feeds=http://www.toto.com/rssfr.xml,http://www.tata.fr/rss.xml&filters=CSI,CSI Miami,House&exclude=Desperate&debug=1

DeuxiĂšme utilisation

Avec un fichier XML dans le sous dossier files qui contient la configuration. Les filtres sont des expréssions réguliÚres. Exemle de fichier XML :

http://example.com/rss-filter/files/series.xml

<!--?xml version="1.0" encoding="UTF-8" ?-->
 
	[EZTV+VTV+subs] Filtrés
	SĂ©ries : Dexter, Dirty Sexy Money, Fringe, Grey's Anatomy, Heroes, House, How I Met Your Mother, Lost, My Name Is Earl, Naruto Shippuuden, The IT Crowd, The United State Of Tara, True Blood, Weeds.
 
		<!-- sous titres -->
		http://www.tvsubtitles.net/rssfr.xml
		http://www.sub-way.fr/rss.xml
		http://feeds.feedburner.com/seriessub
		<!-- séries -->
		http://www.mininova.org/rss.xml?user=VTV
		http://www.mininova.org/rss.xml?user=EZTV
		<!-- naruto -->
		http://www.dattebayo-fr.com/rss-news.php
 
		/\bDexter\b/i
		/\bDirty Sexy Money\b/i
		/\bFringe\b/i
		/\bGrey'?s? Anatomy\b/i
		/\bHeroes\b/i
		/\bHouse\b/i
		/\bHow I Met Your Mother\b/i
		/\bLost\b/i
		/\bMy Name Is Earl\b/i
		/\bNaruto Shippuuden\b/i
		/\bThe Mentalist\b/i
		/\bThe IT Crowd\b/i
		/\bSons of Anarchy\b/i
		/\bUnited States Of Tara\b/i
		/\bTrue Blood\b/i
		/\bWeeds\b/i
 
		/\bCrooked House\b/i
		/\bDesperate Housewives\b/i
		/\bx264\b/i

Le flux correspondant sera disponnible comme ceci :

http://example.com/rss-filter/rssfilter.php?file=series

http://example.com/rss-filter/rssfilter.php?file=series&debug=1 (pour avoir le debug en plus)

Installation

Votre navigateur risque d’essayer de parser le fichier rssfilter.txt en tant que flux RSS.

Posez le fichier rssfilter.php sur un serveur Web qui dispose de :

  • PHP 5,
  • la fonction file_get_contents,
  • L’extension SimpleXML.

Télécharger rssfilter.php

Questions ?

En cas de problĂšme n’Ă©sitez pas Ă  me poser des questions dans les commentaire 😉

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL

Taquin

RĂ©solveur de taquin

Je ne sais pas si quand vous vous lancez dans une Ă©nigme et que vous ne trouvez pas la solution, vous finissez par juste vouloir la rĂ©ponse pour passer Ă  autre chose. Ce fĂ»t mon cas rĂ©cemment avec : l’Ă©nigme 135 du jeu Professeur Layton et l’Ă©trange village sur Nintendo DS.

Quand je suis bloquĂ© comme ça, j’aime pas non plus qu’on me donne la solution bĂȘtement. Je prĂ©fĂšre un compromis (un peu geek certe) : faire un programme qui va rĂ©soudre l’Ă©nigme Ă  ma place.

Solution

Pour ceux qui viennent de Google et qui en ont rien Ă  faire de mon code, la liste des Ă©tapes pour rĂ©soudre l’Ă©nigme est lĂ  :

Solution Ă©nigme 135

Pour comprendre la représentation du taquin :

Énigme 135

<->
<><>@
12^@
34v@
<><>@

Code

Pour ceux qui sont intĂ©ressĂ©s par comment j’ai fait, voici une brĂšve explication :

  1. Il y a trois listes importantes : celle des taquins générés, celle des taquins à explorer et celle des taquin qui sont dans la position finale (juste avant la sortie).
  2. On insÚre la position de départ dans les listes.
  3. On explore : c’est Ă  dire qu’on gĂ©nĂšre tous les taquins possibles Ă  partir d’un autre.
  4. Les nouveaux taquins ne doivent pas correspondre à  un autre dĂ©jĂ  existant. Si ce n’est pas le cas, on ajoute le nouveau Ă  la liste des taquins trouvĂ©s et Ă  celle Ă  explorer.
  5. Si certains sont en position finale on les ajoute Ă  la liste de taquins finaux.
  6. Si il y a un taquin (ou plus) dans la liste Ă  explorer, on prend le premier et on retourne Ă  l’Ă©tape 3.
  7. Quand il n’y a plus rien Ă  explorer, c’est qu’on a fait le tour des possibilitĂ©s de mouvements. On prend le premier des finaux et on affiches les Ă©tapes qui ont conduit Ă  sa crĂ©ation.

DĂ©fauts du scripts :

  • La reprĂ©sentation du taquin est un tableau de caractĂšre ce qui n’est pas trĂšs propre mais ça marche.
  • La mĂ©thode n’est pas trĂšs intelligente, c’est du brute force qui tĂąche mais pour une fois j’ai fait un brute en itĂ©ratif et non en rĂ©cursif.
  • Les solutions ne sont pas forcement les plus courtes.

Pour le dernier point, j’essairai d’y remĂ©dier si j’en ai la motivation car ça va prendre du temps (pour rien, ça on peut le dire).

Voici la source du programme, c’est du python.

enigme-135.py

Creative Commons GNU GPL

Programme sous Creative Commons GNU GPL