Profil de Karnaj

  • Inscrit 17/07/14 à 22h10
  • Dernière visite sur le site : il y a 25 secondes

Signature

Assez des salamis, je passe au jambon — Je fais un carnage si ce car nage car je nage, moi, Karnaj ! — Le comble pour un professeur de mathématique ? Mourir dans l’exercice de ses fonctions.

Derniers sujets créés

Derniers tutoriels

Derniers articles

Derniers billets


Biographie

Élève de MP depuis fort fort longtemps. Objectif : intégrer malgré un esprit qui dérive. Objectif accompli, pour le meilleur et surtout pour le pire.

Si vous aviez le pouvoir de changer UNE chose sur ZdS qu’est ce que vous changeriez ? et Pourquoi ? Exprimez vous

Je changerais la manière dont sont traités les auteurs pour qu’ils produisent plus (nous savons grâce à un indic qu’il y en a qui bénéficient d’un régime de faveur).

Donc il faudrait peut-être donner plus d’agrumes frais, et puisqu’il y a quand même beaucoup d’espèces animales, on pourrait même obtenir du lait et de la viande fraîche… En étant bien nourri, il produiront sûrement plus.

À côté de çà, il faut faire attention à ne pas dépasser les frais, et pour les motiver, les châtiments corporels devraient naturellement être plus présents. Il faut cependant faire attention à les garder en bonne santé pour qu’ils continuent à attirer d’autres auteurs

Citations ?

Je fais des rimes, Quand je m’exprime. Je fais des vers, Sans en avoir l’air. Mais le plus fort, C’est que j’en fais encore !

Réflexions ?

Terry Pratchett : « La lumière croit voyager plus vite que tout, mais elle se trompe. Elle aura beau foncer le plus vite possible, elle verra toujours que les ténèbres sont arrivées les premières et qu’elles l’attendent. ».

« Le temps est une drogue. À haute dose, il tue. ». Donc faites attention. Tuez le temps avant qu’il ne vous tue.

Moi : « L’homme est un loup pour l’homme et l’argent est le chef de la meute… ».

Programmation ?

« Ce qui ce conçoit bien s’énonce clairement. ». Si ça ne s’énonce pas clairement, c’est à remplacer.

  • Less code, less error.
  • Less is more.
  • The best code is no code at all.

Mes tutoriels

C

LaTeX

Mathématiques

Python

Ruby

À écrire

Mathématiques et algorithmie

  • Dénombrement et probabilités.
  • Introduction à la recherche de plus court chemin.

LaTeX

  • Beamer (thème Metropolis)
  • Écrire des CV en LaTeX.
  • Bibliographie en LaTeX avec Biber.
  • Indexation en LaTeX avec xindy.
  • Latexmk pour faciliter la compilation.
  • Des liens hypertextes avec hyperref ?

Ruby

  • Le formatage de chaînes en Ruby.

Série de billets - Création d’un Shoot 'em up en C avec la SDL

Avis livre

Ruby

Des avis rapides sur des livres de référence en Ruby. À qui ils s’addressent, de quoi ils traitent, pourquoi ils sont bien, etc.

The Well-Grounded Rubyist
The Ruby Way
The Ruby Programming Language
Practical Object-oriented Design in Ruby
Eloquent Rubt

C

À regarder

  • Simple2D en C (bibliothèque basée sur SDL2 et OpenGL)
  • Ruby2D (basée sur Simple2D)

Parce qu’il faut que ça rime.

  • Prends Ruby, c’est joli.
  • Prends Python, c’est bon.
  • Garde le C, c’est assez.

Un peu d’algo ?

Sous-somme

Soit TTT un tableau d’entiers de taille nnn, et soit rrr un entier. Trouver (s’ils existent) deux éléments du tableau xxx et yyy tels que x+y=nx + y = nx+y=n.

Une solution en O(nln(n)O(n \ln(n)O(nln(n) consiste à d’abord trier le tableau. Ensuite, on considère deux indices ddd (début) et fff (fin) du tableau. Au début de l’algorithme, ddd vaut 000 et fff faut n1n - 1n1.

  • Si T[d]+T[f]=nT[d] + T[f] = nT[d]+T[f]=n, alors c’est fini, on a trouvé deux éléments.
  • Sinon, si T[d]+T[f]<nT[d] + T[f] < nT[d]+T[f]<n, c’est que T[d]T[d]T[d] est trop petit (en le rajoutant au plus grand nombre, on a un nombre trop petit), on incrémente ddd et on recommence.
  • Sinon, si T[d]+T[f]>nT[d] + T[f] > nT[d]+T[f]>n, c’est que T[f]T[f]T[f] est trop grand (en le rajoutant au plus petit nombre, on a un nombre trop grand), on décrémente fff et on recommence.

Et on fait ceci tant que d>fd > fd>f. Si on arrive au point d<=fd <= fd<=f, les éléments n’existent pas.

En fait, on a en fait un deuxième algorithme qui trouve deux indices tels qu’on a la somme dans un tableau trié. On peut l’écrire de manière récursive avec des sous-tableaux ou encore avec les indices.

def f(tab, d, f, r)
  return (-1, -1) if d - b < 1 # Peu importe, on pourrait retourner Faux...
  return (d, f) if tab[d] + tab [f] == r
  return f(tab, d + 1, f) if tab[d] + tab [f] < r    
  return f(tab, d, f - 1)
end

def main(tab, r)
  f(tab, 0, tab.size - 1, r)
end 

Qui a les boules !?

On considère une urne avec nnn boules noires et bbb boules blanches. Tant qu’il reste au moins deux boules dans l’urne, on en tire deux.

  • Si elles ont la même couleur, on les jette.
  • Sinon, on jette la noire et on remet la blanche dans l’urne.

Si l’urne est vide, on remet une boule noire.

Et on veut savoir la couleur de la boule restante dans l’urne.

Le problème peut avoir l’air compliqué. Pourtant, si on s’attarde sur les boules blanches, on se rend compte que leur nombre ne peut diminuer que de deux. On a alors deux cas.

  • Si bbb est pair, alors tant qu’on n’a pas retirer toutes les boules blanches, il reste au moins deux boules blanches dans l’urne. Au moment où on retire les deux dernières boules blanches, l’urne ne contient que des boules noires. Si elle est vide, on remet un boule noire, et bien sûr, avec notre procédé, s’il n’y a que des boules noires, on obtient une boule noire à la fin.
  • Si b=2p+1b = 2p + 1b=2p+1 est impair, alors tant qu’on en a pas retiré 2p2p2p de blanches, il reste au moins 2 boules blanches dans l’urne. Au moment où on retire deux des trois dernières boules de l’urne, il reste une boule blanche dans l’urne et possiblement des boules noires. Mais la boule blanche ne pourra jamais être jetée, tandis que le nombre de boules noires va décroître jusqu’à épuisement. La dernière boule est donc blanche.

Fulcrum

On reprend un tableau TTT. Cette fois, on cherche l’indice du tableau tel que la différence entre la somme des éléments avant cet indice et la somme des éléments après cet indice soit minimum. On cherche donc l’indice iii qui minimise

k=0iT[k]k=i+1n1T[k]. \left| \sum_{k = 0}^i T[k] - \sum_{k = i + 1}^{n - 1} T[k] \right|.k=0iT[k]k=i+1n1T[k].

âne à grammes

On considère une liste de mots LLL (un dictionnaire) de taille NNN et une liste de mots lll. Notre but est de trouver pour chaque mot www présent dans lll, toutes les anagrammes (c’est bien un mot féminin) de www présents dans LLL.

Si on considère un très gros dictionnaire, il apparaît vite qu’une solution trop naïve va être dépassée.

Comme toutes les autres problèmes, les solutions sont multiples. Cependant, la majorité des solutions s’appuieront certainement sur le fait de trouver une prédicat ppp invariant par mélange. L’idée est donc de trouver une fonction ppp tel que ww'w est un anagramme de www si et seulement si p(w)==p(w)p(w) == p(w')p(w)==p(w).

On peut par exemple compter le nombre d’occurrences de chaque lettre (on se convainc assez facilement que deux mots sont des anagrammes l’un de l’autre si et seulement si toutes les lettres apparaissent un même nombre de fois dans chacun d’entre eux).

Et on en fait quoi de ce prédicat ?

On pourrait par exemple stocker tous les mots de LLL dans une table de hachage HHH. On stockerait www dans une liste à la case p(w)p(w)p(w). Ainsi, pour tout mot www, H(p(w))H(p(w))H(p(w)) contiendrait toutes les anagrammes de www. Notre table de hachage est construite une bonne fois pour toute, et on peut ensuite l’utiliser pour avoir les anagrammes de n’importe quel mot.

En fait, il faut juste un prédicat qui se calcule rapidement.

Décomposition en nombres premiers