Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Algo BMP->Multi Drawstat
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Algo BMP->Multi Drawstat

Posté le 15/08/2018 23:40

Le sujet est apparu dans la shout, et je me suis dit qu'il y avait peut être possibilité de faire un algo potable. L'algorithme vise à obtenir la solution optimale (pas juste une solution potable).
On va prendre comme l'exemple le sprite de drak, avec uniquement la plus grosse partie :

(du coup il lui manque un oeil et une partie de sa carapace, mais shh.)

Il fait 32x32 px, et on vise un ordre de magnitude de quelques minutes.
On ne prend que le multi drawstat, car dans le super drawstat on doit aussi prendre en compte l'ordre de dessin.

L'algo fera :

0) Division du sprite en plusieurs parties qui ne se touchent pas, et calcul séparé de chacune de ces parties
1) Recensement de chaque point noir du sprite (à la louche, on va dire qu'il y en a 256, soit 1/4 des pixels)
2) Traçage de chaque ligne existante entre chaque point (soit 256*255 = ~65000 ce qui est faisable)
3) Parmi les lignes tracées, ne retenir que celles qui ne traversent que des pixels noirs

On devrait obtenir environ 1000 lignes (au pif total).

4) Parmi les lignes tracées, enlever celles qui sont totalement incluses dans une et une seule ligne, et qui ne voisinent pas d'autres lignes :
On enlève donc la ligne verte (car totalement incluse dans la ligne rouge) :


Par contre, on n'enlève pas la ligne verte ici, parce qu'elle pourrait faire partie de la solution optimale (elle est voisine à une autre ligne) :





5) Parmi les lignes qui restent, enlever celles qui sont superposées (comme on trace les lignes dans les 2 sens, ce qui est obligé car avec l'algo de brezenham ça ne donne pas les mêmes résultats, on peut avoir des lignes verticales ou horizontales superposées)

6) La partie la plus consommatrice : calculer (avec un algo magique) le nombre de lignes minimum pour couvrir tout le sprite.
On a ensuite uniquement besoin de trouver un groupement de lignes qui est égal au nombre de lignes minimum et qui couvre tout le sprite (ça doit se faire assez simplement).

Pour optimiser cette partie, on ne peut pas enlever les lignes qui se superposent. Par exemple, dans ce sprite, la solution optimale contient deux lignes qui se superposent :


La seule optimisation qui me vient à l'esprit est de ne prendre que les groupements qui couvrent tout le sprite. Par contre pour faire ça sans itérer sur chaque groupement (qui, pour 500 lignes, est de l'ordre de 2^500 = 10^150 = quand même beaucoup) aucune idée.

Du coup faudrait implémenter cet algo afin de voir les lignes qui restent à l'étape 6, voir si c'est faisable


Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 00:57 | # | Fichier joint


Parce que je le vaut bien. Le gif est un peu long, y'a 56 sprites de différents types


Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 01:17 | # | Fichier joint


Et parce que je suis vraiment sympa, voilà l'archive avec : les sprites d'origine, les images du gif (changement de couleur, j'ai du refaire une génération), et le log des résultats

alien1.png processed in 18 lines
Graph(X,Y)=({10-5T, 11+1T, 5+1T, 14-3T, 10-2T, 6-3T, 4-3T, 11-1T, 4+1T, 6-3T, 9+1T, 9+1T, 13+0, 7+2T, 2+0, 8-2T, 11+0, 6+0}, {4+0, 14-4T, 13-4T, 2+0, 15-3T, 7+3T, 2+0, 7-4T, 7-4T, 15-4T, 9+2T, 6+2T, 3-2T, 9+1T, 3-2T, 12+3T, 9+0, 6+0})
=================================================
alien3.png processed in 22 lines
Graph(X,Y)=({12-9T, 11+0, 4+0, 12-9T, 13-3T, 9-3T, 5-3T, 12+2T, 14-1T, 9+0, 6+0, 1+1T, 3-2T, 8-1T, 11-2T, 6-2T, 13+0, 10+0, 10+0, 5+0, 5+0, 2+0}, {13+2T, 7-5T, 7-5T, 15-2T, 9+3T, 0+0, 12-3T, 11-1T, 15-2T, 5-2T, 5-2T, 15-2T, 11-1T, 7+0, 11-2T, 9+2T, 15+0, 8+0, 1+0, 8+0, 1+0, 15+0})
=================================================
alien4.png processed in 25 lines
Graph(X,Y)=({14-8T, 6-6T, 10-5T, 13+0, 12-1T, 3+1T, 2+0, 15+0, 0+4T, 15-1T, 7+1T, 8-1T, 0+1T, 14-3T, 9+0, 6+0, 14-2T, 6-1T, 3-2T, 12+0, 11+0, 10+0, 3+0, 3+0, 0+0}, {14-1T, 15+0, 0+0, 11-4T, 2+4T, 2+4T, 12-4T, 9-3T, 4-3T, 14-2T, 5+2T, 5+2T, 5+2T, 5+0, 3-1T, 3-1T, 9-1T, 14-2T, 12+1T, 11+0, 1+0, 12+0, 8+0, 5+0, 14+0})
=================================================
alien5.png processed in 31 lines
Graph(X,Y)=({12-3T, 11-6T, 10-5T, 6-3T, 10+4T, 13-1T, 1+4T, 7-4T, 3-3T, 15-3T, 7+4T, 2+4T, 14-2T, 9+0, 3+1T, 1+1T, 7+1T, 6+0, 14+0, 12+0, 12+0, 11+0, 11+0, 9+0, 8+0, 5+0, 5+0, 4+0, 2+0, 1+0, 0+0}, {3+6T, 2-2T, 15+0, 9-5T, 0+2T, 9+4T, 0+3T, 13+1T, 6-4T, 7-4T, 9+1T, 10-3T, 8-1T, 7-2T, 13-2T, 9-2T, 3-2T, 7-2T, 3+0, 6+0, 0+0, 14+0, 11+0, 3+0, 14+0, 10+0, 2+0, 0+0, 3+0, 10+0, 1+0})
=================================================
alien6.png processed in 26 lines
Graph(X,Y)=({9-2T, 8-2T, 15-15T, 3+10T, 12-9T, 12-10T, 14-1T, 2-1T, 5+6T, 10-6T, 14+0, 1+0, 10-5T, 15-2T, 0+3T, 9-3T, 7+4T, 5+3T, 10-3T, 8-4T, 13+0, 13+0, 12+0, 2+0, 2+0, 1+0}, {0+15T, 15-15T, 12+0, 1+1T, 9+0, 1+1T, 10+5T, 15-5T, 10-8T, 10-8T, 7-3T, 7-3T, 0+0, 11+4T, 11+4T, 14+0, 6-3T, 9+4T, 9+4T, 6-3T, 8+0, 3+0, 15+0, 8+0, 3+0, 14+0})
=================================================
alien7.png processed in 21 lines
Graph(X,Y)=({8+3T, 11-5T, 7-5T, 12-6T, 13+0, 4+0, 12-4T, 6-4T, 11+2T, 10+0, 7+0, 7-2T, 13-4T, 6-4T, 12+1T, 4+4T, 13+0, 12+0, 11+0, 5+0, 5+0}, {15-6T, 0+0, 13+0, 9-2T, 5-3T, 5-3T, 15+0, 7+3T, 12-1T, 4-2T, 4-2T, 12-1T, 5+3T, 13-2T, 15-2T, 5+3T, 10+0, 1+0, 13+0, 10+0, 1+0})
=================================================
alien8.png processed in 20 lines
Graph(X,Y)=({14-5T, 11-5T, 12-3T, 3+3T, 3+2T, 8-4T, 8-3T, 13+2T, 14-1T, 7+2T, 2+2T, 4-3T, 3+2T, 15-3T, 9-3T, 14+0, 12+0, 10+0, 7+0, 7+0}, {6+5T, 0+0, 11+4T, 7+4T, 5-4T, 15-3T, 8-3T, 11-1T, 4-2T, 6-1T, 12-1T, 8+3T, 6-1T, 10-2T, 11+0, 5+0, 1+0, 6+0, 13+0, 8+0})
=================================================
Arc.bmp processed in 20 lines
Graph(X,Y)=({13-10T, 13-11T, 12-10T, 9-8T, 12-5T, 1+0, 10-7T, 12-6T, 4-2T, 15-3T, 12-3T, 12+1T, 4-3T, 11-2T, 6+1T, 2+2T, 1+0, 14+0, 11+0, 3+0}, {2+11T, 3+10T, 12-11T, 10-8T, 1+0, 12-5T, 9-6T, 4-2T, 12-6T, 12-3T, 15-3T, 14-2T, 1+0, 9+2T, 2+2T, 6+1T, 4-3T, 12+0, 3+0, 11+0})
=================================================
autre.png processed in 20 lines
Graph(X,Y)=({15-2T, 0+3T, 12-5T, 9+4T, 13-1T, 8-4T, 8-4T, 3-2T, 0+3T, 15-1T, 7+2T, 7+2T, 0+1T, 15-3T, 7-2T, 3+0, 12+1T, 11+0, 10+0, 6+0}, {8+6T, 8+6T, 15-5T, 1+3T, 12-4T, 10+4T, 1+1T, 8+4T, 9-6T, 11-2T, 15-1T, 12-1T, 11-2T, 9-6T, 12-2T, 11-3T, 8+6T, 15+0, 10+0, 14+0})
=================================================
autre2.png processed in 20 lines
Graph(X,Y)=({14-5T, 8-5T, 11-1T, 1+4T, 4+0, 14-3T, 9-3T, 8-3T, 4-3T, 14-4T, 2+1T, 9+2T, 8-2T, 11-3T, 14-4T, 11+2T, 10+0, 5+0, 4+0, 3+0}, {10-4T, 10-2T, 11+4T, 4+3T, 14-4T, 3+0, 1+0, 14+1T, 3+0, 4+3T, 11-4T, 9+1T, 7-1T, 15+0, 11+3T, 5+4T, 2+0, 2+0, 5+0, 12+0})
=================================================
AxeOfBrave.png processed in 26 lines
Graph(X,Y)=({4+0, 5+0, 12+0, 10+4T, 8+4T, 9-5T, 5-3T, 5-3T, 15-1T, 10+0, 10-2T, 9-2T, 0+1T, 10-1T, 2-1T, 1-1T, 11+2T, 4+3T, 5-2T, 6-3T, 14+0, 11+0, 10+0, 8+0, 7+0, 3+0}, {15-13T, 14-11T, 8-6T, 9+2T, 0+2T, 7+1T, 8+7T, 8-7T, 3+2T, 6-2T, 10+0, 3+1T, 2+2T, 13-1T, 7+0, 11+1T, 2-1T, 5-4T, 10+5T, 6-5T, 0+0, 8+0, 0+0, 5+0, 9+0, 2+0})
=================================================
AxeOfDestruction.png processed in 26 lines
Graph(X,Y)=({4+0, 5+0, 12+0, 10+4T, 8+4T, 9-5T, 5-3T, 5-3T, 15-1T, 10+0, 10-2T, 9-2T, 0+1T, 10-1T, 2-1T, 1-1T, 11+2T, 4+3T, 5-2T, 6-3T, 14+0, 11+0, 10+0, 8+0, 7+0, 3+0}, {15-13T, 14-11T, 8-6T, 9+2T, 0+2T, 7+1T, 8+7T, 8-7T, 3+2T, 6-2T, 10+0, 3+1T, 2+2T, 13-1T, 7+0, 11+1T, 2-1T, 5-4T, 10+5T, 6-5T, 0+0, 8+0, 0+0, 5+0, 9+0, 2+0})
=================================================
AxeOfTheBarbarian.png processed in 11 lines
Graph(X,Y)=({8-1T, 7+1T, 6+0, 13+0, 9-7T, 9-7T, 13-2T, 13-2T, 10+0, 10+0, 1+0}, {15-15T, 15-14T, 15-14T, 8-6T, 8-2T, 2+2T, 8+2T, 2-2T, 9+0, 1+0, 5+0})
=================================================
AxeOfTheWarrior.png processed in 13 lines
Graph(X,Y)=({9+0, 7+0, 14+0, 2+0, 14-3T, 5-3T, 13-4T, 7-4T, 10+0, 8+0, 8+0, 8+0, 6+0}, {15-14T, 15-14T, 11-10T, 11-10T, 11-5T, 6+5T, 0+4T, 4-4T, 5+0, 15+0, 11+0, 0+0, 5+0})
=================================================
bandit2.png processed in 32 lines
Graph(X,Y)=({13-9T, 5+8T, 11-8T, 11-8T, 4-1T, 0+1T, 8+5T, 14+0, 9-4T, 10+1T, 1+8T, 6-3T, 3+1T, 11-2T, 10-2T, 4-2T, 11+0, 5+2T, 3+1T, 12-2T, 9-1T, 3+1T, 0+2T, 14-3T, 7+4T, 7-4T, 1+8T, 13+0, 10+0, 7+0, 6+0, 1+0}, {12+3T, 9-1T, 5+0, 3+0, 14-6T, 14-6T, 16-6T, 14-4T, 0+0, 12+6T, 12+3T, 18+0, 4+4T, 14-6T, 18-1T, 18-3T, 6-4T, 18-4T, 14-4T, 12-5T, 17+1T, 3-2T, 10+1T, 14+2T, 3+2T, 3+2T, 8+1T, 9+0, 1+0, 4+0, 17+0, 15+0})
=================================================
BarriКre 1.bmp processed in 22 lines
Graph(X,Y)=({13+1T, 5+1T, 9+0, 1+0, 14-2T, 6-2T, 12-1T, 4-1T, 14-5T, 6-5T, 11+2T, 3+2T, 10+4T, 2+4T, 11+1T, 3+1T, 11+0, 11+0, 10+0, 3+0, 3+0, 2+0}, {13-10T, 13-10T, 12-9T, 12-9T, 11-8T, 11-8T, 13-3T, 13-3T, 8-4T, 8-4T, 1+1T, 1+1T, 13-1T, 13-1T, 8-2T, 8-2T, 12+0, 4+0, 2+0, 12+0, 4+0, 2+0})
=================================================
BarriКre 2.bmp processed in 24 lines
Graph(X,Y)=({7+2T, 8-2T, 15+0, 0+0, 14-12T, 13-12T, 12-10T, 10+0, 2+0, 13-3T, 5-3T, 5-3T, 14-4T, 10+4T, 5-5T, 14+0, 13+0, 11+0, 9+0, 6+0, 5+0, 3+0, 1+0, 1+0}, {14-12T, 13-11T, 13-10T, 13-10T, 3+2T, 5-3T, 1+4T, 11-4T, 11-4T, 15+0, 15+0, 1+0, 4+1T, 1+1T, 5-1T, 14+0, 1+0, 13+0, 14+0, 14+0, 2+0, 13+0, 14+0, 3+0})
=================================================
Baton magique.bmp processed in 16 lines
Graph(X,Y)=({2+6T, 7-6T, 7-4T, 4+8T, 10-4T, 11-2T, 4+1T, 13-1T, 12-3T, 8-5T, 2-2T, 3+4T, 11+0, 10+0, 6+0, 6+0}, {15-12T, 3+9T, 6+8T, 3+3T, 1+0, 8-5T, 6-4T, 5-2T, 7-4T, 7-3T, 15-2T, 5+3T, 2+0, 7+0, 10+0, 2+0})
=================================================
Bombe.bmp processed in 13 lines
Graph(X,Y)=({4+8T, 4+8T, 12-7T, 5+6T, 9-6T, 6+4T, 9-6T, 11-4T, 9+2T, 3+6T, 3+2T, 8+0, 8+0}, {11-1T, 7+2T, 8-2T, 12-1T, 5+4T, 13-1T, 2+6T, 9+1T, 6+1T, 10+3T, 9+1T, 9+0, 4+0})
=================================================
Boomerang.bmp processed in 15 lines
Graph(X,Y)=({7+0, 8-6T, 8-6T, 12-4T, 12-5T, 9+2T, 9+2T, 7+2T, 3+2T, 2+2T, 8+1T, 9-3T, 5+4T, 6+0, 3+0}, {11-7T, 15-6T, 1+6T, 3+3T, 13-4T, 15-1T, 1+1T, 13-1T, 9-1T, 8-1T, 1+4T, 12-1T, 4-1T, 12+0, 7+0})
=================================================
copter.png processed in 25 lines
Graph(X,Y)=({13-11T, 14-7T, 11-7T, 1+5T, 14-8T, 9+5T, 2+7T, 7+6T, 1+3T, 8-7T, 9+4T, 5-3T, 10+2T, 3+1T, 0+1T, 7+3T, 8-4T, 15-1T, 5-2T, 8+6T, 12+0, 12+0, 7+0, 5+0, 3+0}, {7+0, 9+2T, 1+0, 6+8T, 3+7T, 14-8T, 2+8T, 7-5T, 8+4T, 4+5T, 13-3T, 8-4T, 15-1T, 13+2T, 5-2T, 4+4T, 13-1T, 4+2T, 10+1T, 7+1T, 13+0, 2+0, 6+0, 15+0, 2+0})
=================================================
Cutlass.png processed in 5 lines
Graph(X,Y)=({6-1T, 8-1T, 7+2T, 9-3T, 6+0}, {15-15T, 12-10T, 15-1T, 13-3T, 1+0})
=================================================
Dallage 2.bmp processed in 35 lines
Graph(X,Y)=({14+0, 14+0, 1+0, 1+0, 13-4T, 13-4T, 2+4T, 2+4T, 13-3T, 13-3T, 10-2T, 9-3T, 8-3T, 5-3T, 5-3T, 12-2T, 12-2T, 3+2T, 3+2T, 10-3T, 7-2T, 14-2T, 14-2T, 4-1T, 4-1T, 14-3T, 11-2T, 13+0, 9+0, 6+0, 6+0, 2+0, 2+0, 2+0, 2+0}, {15-5T, 5-5T, 15-5T, 5-5T, 10+2T, 5-2T, 15-2T, 0+2T, 15-3T, 0+3T, 8-3T, 9-3T, 10-2T, 13-3T, 2+3T, 15-1T, 0+1T, 10+1T, 5-1T, 7-2T, 10-3T, 13-1T, 4-1T, 15-2T, 0+2T, 11-1T, 5-3T, 2+0, 13+0, 12+0, 3+0, 14+0, 12+0, 3+0, 1+0})
=================================================
Dallage 3.bmp processed in 8 lines
Graph(X,Y)=({14-5T, 14-5T, 8+0, 8+0, 6-5T, 6-5T, 0+0, 0+0}, {15+0, 7+0, 14-5T, 6-5T, 15+0, 7+0, 14-5T, 6-5T})
=================================================
Dallage.bmp processed in 24 lines
Graph(X,Y)=({14-5T, 14-5T, 10-5T, 10-5T, 6-5T, 6-5T, 13-3T, 13-3T, 9-3T, 9-3T, 5-3T, 5-3T, 14+0, 14+0, 10+0, 10+0, 9+0, 9+0, 6+0, 6+0, 5+0, 5+0, 1+0, 1+0}, {9+0, 1+0, 13+0, 5+0, 9+0, 1+0, 11+0, 3+0, 15+0, 7+0, 11+0, 3+0, 10+0, 2+0, 14+0, 6+0, 10+0, 2+0, 10+0, 2+0, 14+0, 6+0, 10+0, 2+0})
=================================================
FalchionsOfRunes.png processed in 17 lines
Graph(X,Y)=({10-9T, 5-4T, 15-1T, 4+6T, 0+1T, 14-4T, 15-5T, 15-4T, 1+3T, 5-5T, 14-2T, 7-1T, 15+0, 13+0, 9+0, 2+0, 0+0}, {7+7T, 7-7T, 1+6T, 15-3T, 1+6T, 0+7T, 15+0, 15-4T, 7+4T, 15+0, 6+4T, 10-2T, 0+0, 14+0, 14+0, 14+0, 0+0})
=================================================
Filet.bmp processed in 13 lines
Graph(X,Y)=({11-10T, 12-10T, 1+10T, 14-7T, 15-5T, 13-4T, 9+5T, 9-3T, 12-6T, 14-2T, 14-4T, 11+0, 7+0}, {1+11T, 3+10T, 11-9T, 8+0, 6-6T, 9+0, 1+6T, 0+3T, 9-5T, 6+1T, 4-3T, 6+0, 7+0})
=================================================
Hatchet.png processed in 7 lines
Graph(X,Y)=({5+1T, 6-1T, 11+0, 5+4T, 5+4T, 10+0, 10+0}, {2+12T, 2+12T, 6-3T, 5+3T, 4-3T, 7+0, 2+0})
=================================================
iop.jpg processed in 28 lines
Graph(X,Y)=({10+1T, 11-11T, 15-10T, 4+0, 5+8T, 9-4T, 15-9T, 13-7T, 10+0, 4+5T, 5-3T, 11+4T, 12+0, 6-5T, 8+0, 0+1T, 15-1T, 3+4T, 13-1T, 13-1T, 13-4T, 8+1T, 2+4T, 9-2T, 11-7T, 9+0, 7+0, 3+0}, {15-14T, 15-7T, 9-8T, 9-8T, 0+4T, 0+8T, 8+1T, 12+3T, 6-6T, 1+6T, 15-6T, 15-3T, 5-4T, 6+1T, 15-6T, 10+2T, 11-4T, 3-3T, 11+0, 10+0, 2+4T, 0+4T, 12-3T, 15-6T, 7+8T, 12+0, 2+0, 4+0})
=================================================
LeaderSword.png processed in 11 lines
Graph(X,Y)=({5+0, 9+0, 7+0, 11-8T, 7+2T, 9-3T, 7-2T, 11-3T, 8+0, 6+0, 3+0}, {11-10T, 11-8T, 11-7T, 11+0, 15-1T, 3-3T, 10+4T, 10+2T, 13+0, 15+0, 10+0})
=================================================
longsword.png processed in 6 lines
Graph(X,Y)=({8+0, 6+0, 8-1T, 8-2T, 9-4T, 7+0}, {12-11T, 12-11T, 7+8T, 15+0, 12+0, 0+0})
=================================================
Marteau.bmp processed in 13 lines
Graph(X,Y)=({5+3T, 14-9T, 12-9T, 3+8T, 3+8T, 10-6T, 7-6T, 3+6T, 4-3T, 9+1T, 6-3T, 13+0, 8+0}, {11-10T, 12-9T, 14-9T, 10-5T, 7-3T, 3+3T, 1+6T, 8-1T, 11-3T, 2+4T, 10+0, 13+0, 3+0})
=================================================
Miroir magique.bmp processed in 18 lines
Graph(X,Y)=({3+10T, 3+9T, 0+5T, 11-9T, 14-4T, 6+4T, 6+2T, 5-4T, 10-10T, 1+0, 8-1T, 11-1T, 10+4T, 4+4T, 6-4T, 10+0, 5+0, 3+0}, {5+9T, 4+10T, 5+6T, 11-2T, 12-4T, 0+3T, 3+4T, 0+3T, 10-4T, 8-5T, 5-2T, 5+3T, 12+1T, 3+3T, 11-2T, 4+0, 3+0, 6+0})
=================================================
Ocarina.bmp processed in 14 lines
Graph(X,Y)=({2+12T, 4+10T, 5+8T, 1+8T, 3+8T, 7-6T, 4+5T, 11-3T, 5+2T, 1+2T, 6-2T, 13-3T, 6-5T, 8+1T}, {7+3T, 6+3T, 13-2T, 10+3T, 10-3T, 6+2T, 3+10T, 11-6T, 3+1T, 8+4T, 5+7T, 8+2T, 13-5T, 12-6T})
=================================================
OrcishAxe.png processed in 20 lines
Graph(X,Y)=({8+0, 6+0, 13+0, 1+0, 11-3T, 11-3T, 6-3T, 6-3T, 10-2T, 4+2T, 12+0, 12+0, 12+0, 12+0, 7+0, 7+0, 2+0, 2+0, 2+0, 2+0}, {15-14T, 15-14T, 6-4T, 6-4T, 8-3T, 0+3T, 5+3T, 3-3T, 4+1T, 4+1T, 7+0, 5+0, 3+0, 1+0, 15+0, 1+0, 7+0, 5+0, 3+0, 1+0})
=================================================
panda.jpg processed in 30 lines
Graph(X,Y)=({14-13T, 13-11T, 6+8T, 13-1T, 2+1T, 15-2T, 2-2T, 9+6T, 6-6T, 9-8T, 10-3T, 11-6T, 10-6T, 14-2T, 14-2T, 11-2T, 6+0, 6-2T, 1+2T, 3-2T, 10-1T, 5+1T, 13+0, 12+0, 11+0, 9+0, 7+0, 4+0, 3+0, 2+0}, {15+0, 9+0, 0+1T, 2+8T, 2+8T, 14-6T, 8+6T, 15-3T, 15-3T, 0+1T, 6+1T, 8+2T, 10-2T, 14-1T, 0+0, 11+0, 6-2T, 11+0, 14-1T, 0+0, 5+0, 6-2T, 12+0, 2+0, 10+0, 4+0, 13+0, 10+0, 2+0, 12+0})
=================================================
pinguoin.bmp processed in 18 lines
Graph(X,Y)=({15-7T, 7-7T, 14-9T, 10-9T, 12-7T, 4-1T, 12-1T, 10-7T, 10-5T, 12-1T, 4-1T, 6+4T, 15-3T, 7-3T, 3-3T, 11+0, 8+0, 4+0}, {11-11T, 0+11T, 8-6T, 2+6T, 12+3T, 3+9T, 12-9T, 15-3T, 1+0, 15-3T, 12+3T, 1+3T, 10-1T, 6-3T, 9+1T, 15+0, 6+0, 15+0})
=================================================
pont 1.bmp processed in 21 lines
Graph(X,Y)=({15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 1+10T, 11-4T, 0+3T, 14+0, 14+0, 13-1T, 10+0, 6+0, 6+0, 2+0, 6-6T, 15+0, 10+0, 6+0, 4+0}, {15+0, 12+0, 9+0, 6+0, 3+0, 0+1T, 0+1T, 6-6T, 0+6T, 15-3T, 9-3T, 0+3T, 12-3T, 15-3T, 9-3T, 12-3T, 3-1T, 1+0, 2+0, 2+0, 2+0})
=================================================
pont 1 2.bmp processed in 21 lines
Graph(X,Y)=({15+0, 12+0, 9+0, 6+0, 3+0, 1-1T, 0+1T, 0+6T, 6-6T, 15-3T, 15-3T, 12-3T, 12-3T, 9-3T, 9-3T, 3-3T, 3-1T, 2+0, 2+0, 2+0, 1+0}, {15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 14-10T, 15-3T, 4+4T, 8+2T, 0+2T, 12+2T, 4+2T, 8+2T, 0+2T, 3-1T, 9+6T, 11+0, 9+0, 5+0, 0+0})
=================================================
pont 2.bmp processed in 20 lines
Graph(X,Y)=({15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 1+10T, 12+3T, 9-4T, 6-6T, 14+0, 10+0, 10+0, 6+0, 2+0, 2+0, 0+4T, 15+0, 10+0, 6+0}, {15+0, 12+1T, 9+0, 6+0, 3+0, 0+0, 12+1T, 15-6T, 15-6T, 15-1T, 6-3T, 9-3T, 3-3T, 6-3T, 9-3T, 3-3T, 12+2T, 13+0, 14+0, 14+0})
=================================================
pont 2 2.bmp processed in 20 lines
Graph(X,Y)=({15+0, 13-1T, 9+0, 6+0, 3+0, 0+0, 12+1T, 15-6T, 15-6T, 15-1T, 9-3T, 9-3T, 6-3T, 6-3T, 3-3T, 3-3T, 12+2T, 14+0, 14+0, 13+0}, {15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 14-10T, 7+3T, 3-3T, 9+6T, 12+2T, 4+2T, 8+2T, 0+2T, 12+2T, 4+2T, 15-4T, 9+0, 5+0, 0+0})
=================================================
renard.bmp processed in 24 lines
Graph(X,Y)=({12-10T, 12-7T, 13-3T, 10-6T, 8-6T, 6-5T, 5-4T, 9-3T, 12-4T, 11-1T, 8-7T, 0+1T, 13-3T, 3-3T, 7-1T, 2-1T, 3+0, 12+0, 9+0, 8+0, 6+0, 5+0, 4+0, 2+0}, {10+2T, 0+1T, 9-6T, 13+1T, 9+1T, 13-7T, 5-4T, 15+0, 1+4T, 9+5T, 1-1T, 10+2T, 8-1T, 7+2T, 7+0, 5+0, 13-4T, 5+0, 8+0, 4+0, 12+0, 4+0, 8+0, 4+0})
=================================================
rhino.jpg processed in 25 lines
Graph(X,Y)=({4-4T, 3+8T, 12-9T, 15-7T, 15-5T, 15-4T, 5-1T, 14-4T, 9+4T, 9-1T, 9-2T, 12-3T, 5+0, 5+4T, 5-4T, 7+1T, 0+2T, 14-1T, 11+1T, 11+0, 10+0, 8+0, 4+0, 2+0, 2+0}, {2+10T, 13-2T, 2+1T, 8+2T, 9+5T, 7-6T, 10-4T, 11-5T, 4-1T, 9-2T, 1+1T, 6+0, 6-3T, 11+3T, 9+0, 8+2T, 12-1T, 7+4T, 9-4T, 10+0, 1+0, 4+0, 11+0, 13+0, 5+0})
=================================================
Scimitar.png processed in 11 lines
Graph(X,Y)=({4+6T, 9-5T, 4+3T, 11-1T, 8+0, 6+2T, 6+1T, 4+2T, 11-1T, 4+4T, 9+0}, {15-5T, 14-4T, 15-6T, 7-4T, 8-4T, 0+1T, 1+2T, 15-1T, 6+4T, 11+3T, 2+0})
=================================================
Slimemedical.bmp processed in 19 lines
Graph(X,Y)=({6-4T, 9+3T, 13-4T, 8-1T, 5-4T, 12-2T, 11-5T, 4+4T, 2+1T, 9-4T, 13+0, 1+1T, 6-3T, 9+0, 8+0, 6+0, 6+0, 5+0, 2+0}, {15-7T, 14-6T, 5-5T, 10+5T, 0+5T, 11+4T, 9-1T, 9+2T, 12+2T, 0+0, 7-2T, 6+2T, 12+2T, 7+0, 5+0, 11+0, 5+0, 7+0, 11+0})
=================================================
soucoupe.png processed in 21 lines
Graph(X,Y)=({15-15T, 14-13T, 13-11T, 13-9T, 12-9T, 11-9T, 15-4T, 4-4T, 11-7T, 9-3T, 12-8T, 14+0, 1+1T, 8+0, 7+0, 12-2T, 8+1T, 3+3T, 10+0, 7+0, 4+0}, {11+0, 8+0, 7+0, 14-2T, 3+0, 12+2T, 10-6T, 4+6T, 2+6T, 0+0, 8-6T, 13-2T, 13-2T, 14-3T, 14-3T, 4+4T, 4+4T, 4-4T, 1+0, 6+0, 6+0})
=================================================
SteelAxe.png processed in 10 lines
Graph(X,Y)=({6+0, 4+0, 11+0, 9-3T, 9-3T, 10+0, 10+0, 5+0, 5+0, 5+0}, {15-14T, 15-14T, 6-4T, 8-3T, 0+3T, 7+0, 1+0, 15+0, 12+0, 1+0})
=================================================
SteelScimitar.png processed in 9 lines
Graph(X,Y)=({10-2T, 7+1T, 10-1T, 11-6T, 7+1T, 12-1T, 5-1T, 7+0, 7+0}, {6+9T, 12-8T, 5-4T, 13-2T, 2-2T, 12-1T, 13-1T, 15+0, 3+0})
=================================================
SteelSword.png processed in 10 lines
Graph(X,Y)=({6+0, 9+0, 9-3T, 10-5T, 7+2T, 9-2T, 10-3T, 8+0, 8+0, 8+0}, {12-11T, 12-10T, 15+0, 12+0, 14+1T, 2-2T, 12+1T, 9+0, 6+0, 3+0})
=================================================
SwordOfApollo.png processed in 13 lines
Graph(X,Y)=({11-8T, 8+1T, 6-1T, 7+1T, 9-1T, 5+1T, 6+2T, 6+2T, 11+0, 8+0, 7+0, 6+0, 3+0}, {11+0, 5+6T, 5+6T, 11+4T, 3-2T, 3-2T, 14+1T, 15-1T, 10+0, 4+0, 0+0, 4+0, 10+0})
=================================================
SwordOfBlight.png processed in 13 lines
Graph(X,Y)=({8+0, 6+0, 8-1T, 11-1T, 3+1T, 4-1T, 13-1T, 11-1T, 9+0, 2-1T, 8-2T, 9-4T, 7+0}, {12-9T, 12-9T, 7+8T, 3+2T, 1+2T, 9-2T, 12+0, 8+1T, 1-1T, 11+0, 15+0, 12+0, 2+0})
=================================================
SwordOfLegend.png processed in 17 lines
Graph(X,Y)=({5+0, 9+0, 11-8T, 9-3T, 8-3T, 9-3T, 9-4T, 9-4T, 11+1T, 9-2T, 5+2T, 2+1T, 12+0, 8+0, 6+0, 6+0, 3+0}, {12-11T, 12-9T, 12+0, 15-5T, 10+5T, 3-3T, 5+4T, 3+4T, 12-2T, 8+1T, 4-1T, 10+2T, 11+0, 15+0, 15+0, 2+0, 11+0})
=================================================
SwordsOfBrave.png processed in 23 lines
Graph(X,Y)=({13-13T, 15-11T, 12-11T, 15-6T, 6-6T, 7-4T, 4-4T, 14-1T, 11-3T, 6-4T, 14-1T, 13+2T, 0+1T, 1+2T, 15-6T, 2-1T, 1-1T, 11+1T, 15+0, 3-3T, 11+4T, 9+0, 6+0}, {2+13T, 3+11T, 0+11T, 9+6T, 15-6T, 4-4T, 7-4T, 9+5T, 14-3T, 6-4T, 15-5T, 0+1T, 2-2T, 9+4T, 15-6T, 14-1T, 15-1T, 7+2T, 3-3T, 0+0, 13+1T, 14+0, 14+0})
=================================================
TridentOfPoseidon.png processed in 10 lines
Graph(X,Y)=({8+0, 12+0, 4+0, 10-4T, 12+2T, 8+2T, 8-2T, 4-2T, 11+0, 5+0}, {15-15T, 6-4T, 6-4T, 8+0, 3+1T, 1+1T, 1+1T, 3+1T, 7+0, 7+0})
=================================================
TwilightOfTheGods.png processed in 13 lines
Graph(X,Y)=({6+0, 12-8T, 9+0, 13-1T, 11-2T, 4-1T, 6+3T, 14-1T, 3-1T, 10-1T, 11-2T, 4+4T, 10+0}, {14-10T, 14+0, 11-6T, 13-3T, 3-3T, 10+3T, 4-4T, 10-1T, 9+1T, 12+2T, 0+0, 14+1T, 4+0})
=================================================
Yataghan.png processed in 3 lines
Graph(X,Y)=({6+0, 7+0, 8-3T}, {15-15T, 12-11T, 12+0})
=================================================

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 19/08/2018 08:39 | #


J'ajoute que si je ne me trompe pas, il dessine les lignes les plus longues en premier, ce qui contribue à donner la forme de l'objet très rapidement pour affiner les détails ensuite. Un très joli coup de Multi DrawStat.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 12:21 | # | Fichier joint


J'ai un chouille optimisé l'algo, pour des sprites de 16×16 c'est assez rapide. J'en profite pour calculer le temps d'exécution automatiquement.

autre.png processed in 20 lines (0.316s)
Graph(X,Y)=({15-2T, 0+3T, 12-5T, 9+4T, 13-1T, 8-4T, 8-4T, 3-2T, 0+3T, 15-1T, 7+2T, 7+2T, 0+1T, 15-3T, 7-2T, 3+0, 12+1T, 11+0, 10+0, 6+0}, {8+6T, 8+6T, 15-5T, 1+3T, 12-4T, 10+4T, 1+1T, 8+4T, 9-6T, 11-2T, 15-1T, 12-1T, 11-2T, 9-6T, 12-2T, 11-3T, 8+6T, 15+0, 10+0, 14+0})
==========
autre2.png processed in 20 lines (0.11s)
Graph(X,Y)=({14-5T, 8-5T, 11-1T, 1+4T, 4+0, 14-3T, 9-3T, 8-3T, 4-3T, 14-4T, 2+1T, 9+2T, 8-2T, 11-3T, 14-4T, 11+2T, 10+0, 5+0, 4+0, 3+0}, {10-4T, 10-2T, 11+4T, 4+3T, 14-4T, 3+0, 1+0, 14+1T, 3+0, 4+3T, 11-4T, 9+1T, 7-1T, 15+0, 11+3T, 5+4T, 2+0, 2+0, 5+0, 12+0})
==========
alien1.png processed in 18 lines (0.0794s)
Graph(X,Y)=({10-5T, 11+1T, 5+1T, 14-3T, 10-2T, 6-3T, 4-3T, 11-1T, 4+1T, 6-3T, 9+1T, 9+1T, 13+0, 7+2T, 2+0, 8-2T, 11+0, 6+0}, {4+0, 14-4T, 13-4T, 2+0, 15-3T, 7+3T, 2+0, 7-4T, 7-4T, 15-4T, 9+2T, 6+2T, 3-2T, 9+1T, 3-2T, 12+3T, 9+0, 6+0})
==========
alien3.png processed in 22 lines (0.105s)
Graph(X,Y)=({12-9T, 11+0, 4+0, 12-9T, 13-3T, 9-3T, 5-3T, 12+2T, 14-1T, 9+0, 6+0, 1+1T, 3-2T, 8-1T, 11-2T, 6-2T, 13+0, 10+0, 10+0, 5+0, 5+0, 2+0}, {13+2T, 7-5T, 7-5T, 15-2T, 9+3T, 0+0, 12-3T, 11-1T, 15-2T, 5-2T, 5-2T, 15-2T, 11-1T, 7+0, 11-2T, 9+2T, 15+0, 8+0, 1+0, 8+0, 1+0, 15+0})
==========
alien4.png processed in 25 lines (0.157s)
Graph(X,Y)=({14-8T, 6-6T, 10-5T, 13+0, 12-1T, 3+1T, 2+0, 15+0, 0+4T, 15-1T, 7+1T, 8-1T, 0+1T, 14-3T, 9+0, 6+0, 14-2T, 6-1T, 3-2T, 12+0, 11+0, 10+0, 3+0, 3+0, 0+0}, {14-1T, 15+0, 0+0, 11-4T, 2+4T, 2+4T, 12-4T, 9-3T, 4-3T, 14-2T, 5+2T, 5+2T, 5+2T, 5+0, 3-1T, 3-1T, 9-1T, 14-2T, 12+1T, 11+0, 1+0, 12+0, 8+0, 5+0, 14+0})
==========
alien5.png processed in 31 lines (0.23s)
Graph(X,Y)=({12-3T, 11-6T, 10-5T, 6-3T, 10+4T, 13-1T, 1+4T, 7-4T, 3-3T, 15-3T, 7+4T, 2+4T, 14-2T, 9+0, 3+1T, 1+1T, 7+1T, 6+0, 14+0, 12+0, 12+0, 11+0, 11+0, 9+0, 8+0, 5+0, 5+0, 4+0, 2+0, 1+0, 0+0}, {3+6T, 2-2T, 15+0, 9-5T, 0+2T, 9+4T, 0+3T, 13+1T, 6-4T, 7-4T, 9+1T, 10-3T, 8-1T, 7-2T, 13-2T, 9-2T, 3-2T, 7-2T, 3+0, 6+0, 0+0, 14+0, 11+0, 3+0, 14+0, 10+0, 2+0, 0+0, 3+0, 10+0, 1+0})
==========
alien6.png processed in 26 lines (6.8s)
Graph(X,Y)=({9-2T, 8-2T, 15-15T, 3+10T, 12-9T, 12-10T, 14-1T, 2-1T, 5+6T, 10-6T, 14+0, 1+0, 10-5T, 15-2T, 0+3T, 9-3T, 7+4T, 5+3T, 10-3T, 8-4T, 13+0, 13+0, 12+0, 2+0, 2+0, 1+0}, {0+15T, 15-15T, 12+0, 1+1T, 9+0, 1+1T, 10+5T, 15-5T, 10-8T, 10-8T, 7-3T, 7-3T, 0+0, 11+4T, 11+4T, 14+0, 6-3T, 9+4T, 9+4T, 6-3T, 8+0, 3+0, 15+0, 8+0, 3+0, 14+0})
==========
alien7.png processed in 21 lines (0.122s)
Graph(X,Y)=({8+3T, 11-5T, 7-5T, 12-6T, 13+0, 4+0, 12-4T, 6-4T, 11+2T, 10+0, 7+0, 7-2T, 13-4T, 6-4T, 12+1T, 4+4T, 13+0, 12+0, 11+0, 5+0, 5+0}, {15-6T, 0+0, 13+0, 9-2T, 5-3T, 5-3T, 15+0, 7+3T, 12-1T, 4-2T, 4-2T, 12-1T, 5+3T, 13-2T, 15-2T, 5+3T, 10+0, 1+0, 13+0, 10+0, 1+0})
==========
alien8.png processed in 20 lines (0.0817s)
Graph(X,Y)=({14-5T, 11-5T, 12-3T, 3+3T, 3+2T, 8-4T, 8-3T, 13+2T, 14-1T, 7+2T, 2+2T, 4-3T, 3+2T, 15-3T, 9-3T, 14+0, 12+0, 10+0, 7+0, 7+0}, {6+5T, 0+0, 11+4T, 7+4T, 5-4T, 15-3T, 8-3T, 11-1T, 4-2T, 6-1T, 12-1T, 8+3T, 6-1T, 10-2T, 11+0, 5+0, 1+0, 6+0, 13+0, 8+0})
==========
Arc.bmp processed in 20 lines (1.27s)
Graph(X,Y)=({13-10T, 13-11T, 12-10T, 9-8T, 12-5T, 1+0, 10-7T, 12-6T, 4-2T, 15-3T, 12-3T, 12+1T, 4-3T, 11-2T, 6+1T, 2+2T, 1+0, 14+0, 11+0, 3+0}, {2+11T, 3+10T, 12-11T, 10-8T, 1+0, 12-5T, 9-6T, 4-2T, 12-6T, 12-3T, 15-3T, 14-2T, 1+0, 9+2T, 2+2T, 6+1T, 4-3T, 12+0, 3+0, 11+0})
==========
autre.png processed in 20 lines (0.318s)
Graph(X,Y)=({15-2T, 0+3T, 12-5T, 9+4T, 13-1T, 8-4T, 8-4T, 3-2T, 0+3T, 15-1T, 7+2T, 7+2T, 0+1T, 15-3T, 7-2T, 3+0, 12+1T, 11+0, 10+0, 6+0}, {8+6T, 8+6T, 15-5T, 1+3T, 12-4T, 10+4T, 1+1T, 8+4T, 9-6T, 11-2T, 15-1T, 12-1T, 11-2T, 9-6T, 12-2T, 11-3T, 8+6T, 15+0, 10+0, 14+0})
==========
autre2.png processed in 20 lines (0.115s)
Graph(X,Y)=({14-5T, 8-5T, 11-1T, 1+4T, 4+0, 14-3T, 9-3T, 8-3T, 4-3T, 14-4T, 2+1T, 9+2T, 8-2T, 11-3T, 14-4T, 11+2T, 10+0, 5+0, 4+0, 3+0}, {10-4T, 10-2T, 11+4T, 4+3T, 14-4T, 3+0, 1+0, 14+1T, 3+0, 4+3T, 11-4T, 9+1T, 7-1T, 15+0, 11+3T, 5+4T, 2+0, 2+0, 5+0, 12+0})
==========
AxeOfBrave.png processed in 26 lines (0.945s)
Graph(X,Y)=({4+0, 5+0, 12+0, 10+4T, 8+4T, 9-5T, 5-3T, 5-3T, 15-1T, 10+0, 10-2T, 9-2T, 0+1T, 10-1T, 2-1T, 1-1T, 11+2T, 4+3T, 5-2T, 6-3T, 14+0, 11+0, 10+0, 8+0, 7+0, 3+0}, {15-13T, 14-11T, 8-6T, 9+2T, 0+2T, 7+1T, 8+7T, 8-7T, 3+2T, 6-2T, 10+0, 3+1T, 2+2T, 13-1T, 7+0, 11+1T, 2-1T, 5-4T, 10+5T, 6-5T, 0+0, 8+0, 0+0, 5+0, 9+0, 2+0})
==========
AxeOfDestruction.png processed in 26 lines (0.89s)
Graph(X,Y)=({4+0, 5+0, 12+0, 10+4T, 8+4T, 9-5T, 5-3T, 5-3T, 15-1T, 10+0, 10-2T, 9-2T, 0+1T, 10-1T, 2-1T, 1-1T, 11+2T, 4+3T, 5-2T, 6-3T, 14+0, 11+0, 10+0, 8+0, 7+0, 3+0}, {15-13T, 14-11T, 8-6T, 9+2T, 0+2T, 7+1T, 8+7T, 8-7T, 3+2T, 6-2T, 10+0, 3+1T, 2+2T, 13-1T, 7+0, 11+1T, 2-1T, 5-4T, 10+5T, 6-5T, 0+0, 8+0, 0+0, 5+0, 9+0, 2+0})
==========
AxeOfTheBarbarian.png processed in 11 lines (2.47s)
Graph(X,Y)=({8-1T, 7+1T, 6+0, 13+0, 9-7T, 9-7T, 13-2T, 13-2T, 10+0, 10+0, 1+0}, {15-15T, 15-14T, 15-14T, 8-6T, 8-2T, 2+2T, 8+2T, 2-2T, 9+0, 1+0, 5+0})
==========
AxeOfTheWarrior.png processed in 13 lines (0.309s)
Graph(X,Y)=({9+0, 7+0, 14+0, 2+0, 14-3T, 5-3T, 13-4T, 7-4T, 10+0, 8+0, 8+0, 8+0, 6+0}, {15-14T, 15-14T, 11-10T, 11-10T, 11-5T, 6+5T, 0+4T, 4-4T, 5+0, 15+0, 11+0, 0+0, 5+0})
==========
bandit2.png processed in 32 lines (1.44s)
Graph(X,Y)=({13-9T, 5+8T, 11-8T, 11-8T, 4-1T, 0+1T, 8+5T, 14+0, 9-4T, 10+1T, 1+8T, 6-3T, 3+1T, 11-2T, 10-2T, 4-2T, 11+0, 5+2T, 3+1T, 12-2T, 9-1T, 3+1T, 0+2T, 14-3T, 7+4T, 7-4T, 1+8T, 13+0, 10+0, 7+0, 6+0, 1+0}, {12+3T, 9-1T, 5+0, 3+0, 14-6T, 14-6T, 16-6T, 14-4T, 0+0, 12+6T, 12+3T, 18+0, 4+4T, 14-6T, 18-1T, 18-3T, 6-4T, 18-4T, 14-4T, 12-5T, 17+1T, 3-2T, 10+1T, 14+2T, 3+2T, 3+2T, 8+1T, 9+0, 1+0, 4+0, 17+0, 15+0})
==========
BarriКre 1.bmp processed in 22 lines (0.868s)
Graph(X,Y)=({13+1T, 5+1T, 9+0, 1+0, 14-2T, 6-2T, 12-1T, 4-1T, 14-5T, 6-5T, 11+2T, 3+2T, 10+4T, 2+4T, 11+1T, 3+1T, 11+0, 11+0, 10+0, 3+0, 3+0, 2+0}, {13-10T, 13-10T, 12-9T, 12-9T, 11-8T, 11-8T, 13-3T, 13-3T, 8-4T, 8-4T, 1+1T, 1+1T, 13-1T, 13-1T, 8-2T, 8-2T, 12+0, 4+0, 2+0, 12+0, 4+0, 2+0})
==========
BarriКre 2.bmp processed in 24 lines (1.93s)
Graph(X,Y)=({7+2T, 8-2T, 15+0, 0+0, 14-12T, 13-12T, 12-10T, 10+0, 2+0, 13-3T, 5-3T, 5-3T, 14-4T, 10+4T, 5-5T, 14+0, 13+0, 11+0, 9+0, 6+0, 5+0, 3+0, 1+0, 1+0}, {14-12T, 13-11T, 13-10T, 13-10T, 3+2T, 5-3T, 1+4T, 11-4T, 11-4T, 15+0, 15+0, 1+0, 4+1T, 1+1T, 5-1T, 14+0, 1+0, 13+0, 14+0, 14+0, 2+0, 13+0, 14+0, 3+0})
==========
Baton magique.bmp processed in 16 lines (0.974s)
Graph(X,Y)=({2+6T, 7-6T, 7-4T, 4+8T, 10-4T, 11-2T, 4+1T, 13-1T, 12-3T, 8-5T, 2-2T, 3+4T, 11+0, 10+0, 6+0, 6+0}, {15-12T, 3+9T, 6+8T, 3+3T, 1+0, 8-5T, 6-4T, 5-2T, 7-4T, 7-3T, 15-2T, 5+3T, 2+0, 7+0, 10+0, 2+0})
==========
Bombe.bmp processed in 13 lines (2.36s)
Graph(X,Y)=({4+8T, 4+8T, 12-7T, 5+6T, 9-6T, 6+4T, 9-6T, 11-4T, 9+2T, 3+6T, 3+2T, 8+0, 8+0}, {11-1T, 7+2T, 8-2T, 12-1T, 5+4T, 13-1T, 2+6T, 9+1T, 6+1T, 10+3T, 9+1T, 9+0, 4+0})
==========
Boomerang.bmp processed in 15 lines (0.152s)
Graph(X,Y)=({7+0, 8-6T, 8-6T, 12-4T, 12-5T, 9+2T, 9+2T, 7+2T, 3+2T, 2+2T, 8+1T, 9-3T, 5+4T, 6+0, 3+0}, {11-7T, 15-6T, 1+6T, 3+3T, 13-4T, 15-1T, 1+1T, 13-1T, 9-1T, 8-1T, 1+4T, 12-1T, 4-1T, 12+0, 7+0})
==========
copter.png processed in 25 lines (1.49s)
Graph(X,Y)=({13-11T, 14-7T, 11-7T, 1+5T, 14-8T, 9+5T, 2+7T, 7+6T, 1+3T, 8-7T, 9+4T, 5-3T, 10+2T, 3+1T, 0+1T, 7+3T, 8-4T, 15-1T, 5-2T, 8+6T, 12+0, 12+0, 7+0, 5+0, 3+0}, {7+0, 9+2T, 1+0, 6+8T, 3+7T, 14-8T, 2+8T, 7-5T, 8+4T, 4+5T, 13-3T, 8-4T, 15-1T, 13+2T, 5-2T, 4+4T, 13-1T, 4+2T, 10+1T, 7+1T, 13+0, 2+0, 6+0, 15+0, 2+0})
==========
Cutlass.png processed in 5 lines (0.0419s)
Graph(X,Y)=({6-1T, 8-1T, 7+2T, 9-3T, 6+0}, {15-15T, 12-10T, 15-1T, 13-3T, 1+0})
==========
Dallage 2.bmp processed in 35 lines (0.565s)
Graph(X,Y)=({14+0, 14+0, 1+0, 1+0, 13-4T, 13-4T, 2+4T, 2+4T, 13-3T, 13-3T, 10-2T, 9-3T, 8-3T, 5-3T, 5-3T, 12-2T, 12-2T, 3+2T, 3+2T, 10-3T, 7-2T, 14-2T, 14-2T, 4-1T, 4-1T, 14-3T, 11-2T, 13+0, 9+0, 6+0, 6+0, 2+0, 2+0, 2+0, 2+0}, {15-5T, 5-5T, 15-5T, 5-5T, 10+2T, 5-2T, 15-2T, 0+2T, 15-3T, 0+3T, 8-3T, 9-3T, 10-2T, 13-3T, 2+3T, 15-1T, 0+1T, 10+1T, 5-1T, 7-2T, 10-3T, 13-1T, 4-1T, 15-2T, 0+2T, 11-1T, 5-3T, 2+0, 13+0, 12+0, 3+0, 14+0, 12+0, 3+0, 1+0})
==========
Dallage 3.bmp processed in 8 lines (0.0591s)
Graph(X,Y)=({14-5T, 14-5T, 8+0, 8+0, 6-5T, 6-5T, 0+0, 0+0}, {15+0, 7+0, 14-5T, 6-5T, 15+0, 7+0, 14-5T, 6-5T})
==========
Dallage.bmp processed in 24 lines (0.125s)
Graph(X,Y)=({14-5T, 14-5T, 10-5T, 10-5T, 6-5T, 6-5T, 13-3T, 13-3T, 9-3T, 9-3T, 5-3T, 5-3T, 14+0, 14+0, 10+0, 10+0, 9+0, 9+0, 6+0, 6+0, 5+0, 5+0, 1+0, 1+0}, {9+0, 1+0, 13+0, 5+0, 9+0, 1+0, 11+0, 3+0, 15+0, 7+0, 11+0, 3+0, 10+0, 2+0, 14+0, 6+0, 10+0, 2+0, 10+0, 2+0, 14+0, 6+0, 10+0, 2+0})
==========
FalchionsOfRunes.png processed in 17 lines (0.196s)
Graph(X,Y)=({10-9T, 5-4T, 15-1T, 4+6T, 0+1T, 14-4T, 15-5T, 15-4T, 1+3T, 5-5T, 14-2T, 7-1T, 15+0, 13+0, 9+0, 2+0, 0+0}, {7+7T, 7-7T, 1+6T, 15-3T, 1+6T, 0+7T, 15+0, 15-4T, 7+4T, 15+0, 6+4T, 10-2T, 0+0, 14+0, 14+0, 14+0, 0+0})
==========
Filet.bmp processed in 13 lines (1.14s)
Graph(X,Y)=({11-10T, 12-10T, 1+10T, 14-7T, 15-5T, 13-4T, 9+5T, 9-3T, 12-6T, 14-2T, 14-4T, 11+0, 7+0}, {1+11T, 3+10T, 11-9T, 8+0, 6-6T, 9+0, 1+6T, 0+3T, 9-5T, 6+1T, 4-3T, 6+0, 7+0})
==========
Hatchet.png processed in 7 lines (0.225s)
Graph(X,Y)=({5+1T, 6-1T, 11+0, 5+4T, 5+4T, 10+0, 10+0}, {2+12T, 2+12T, 6-3T, 5+3T, 4-3T, 7+0, 2+0})
==========
iop.jpg processed in 28 lines (4.76s)
Graph(X,Y)=({10+1T, 11-11T, 15-10T, 4+0, 5+8T, 9-4T, 15-9T, 13-7T, 10+0, 4+5T, 5-3T, 11+4T, 12+0, 6-5T, 8+0, 0+1T, 15-1T, 3+4T, 13-1T, 13-1T, 13-4T, 8+1T, 2+4T, 9-2T, 11-7T, 9+0, 7+0, 3+0}, {15-14T, 15-7T, 9-8T, 9-8T, 0+4T, 0+8T, 8+1T, 12+3T, 6-6T, 1+6T, 15-6T, 15-3T, 5-4T, 6+1T, 15-6T, 10+2T, 11-4T, 3-3T, 11+0, 10+0, 2+4T, 0+4T, 12-3T, 15-6T, 7+8T, 12+0, 2+0, 4+0})
==========
LeaderSword.png processed in 11 lines (0.0962s)
Graph(X,Y)=({5+0, 9+0, 7+0, 11-8T, 7+2T, 9-3T, 7-2T, 11-3T, 8+0, 6+0, 3+0}, {11-10T, 11-8T, 11-7T, 11+0, 15-1T, 3-3T, 10+4T, 10+2T, 13+0, 15+0, 10+0})
==========
longsword.png processed in 6 lines (0.0627s)
Graph(X,Y)=({8+0, 6+0, 8-1T, 8-2T, 9-4T, 7+0}, {12-11T, 12-11T, 7+8T, 15+0, 12+0, 0+0})
==========
Marteau.bmp processed in 13 lines (2.5s)
Graph(X,Y)=({5+3T, 14-9T, 12-9T, 3+8T, 3+8T, 10-6T, 7-6T, 3+6T, 4-3T, 9+1T, 6-3T, 13+0, 8+0}, {11-10T, 12-9T, 14-9T, 10-5T, 7-3T, 3+3T, 1+6T, 8-1T, 11-3T, 2+4T, 10+0, 13+0, 3+0})
==========
Miroir magique.bmp processed in 18 lines (0.855s)
Graph(X,Y)=({3+10T, 3+9T, 0+5T, 11-9T, 14-4T, 6+4T, 6+2T, 5-4T, 10-10T, 1+0, 8-1T, 11-1T, 10+4T, 4+4T, 6-4T, 10+0, 5+0, 3+0}, {5+9T, 4+10T, 5+6T, 11-2T, 12-4T, 0+3T, 3+4T, 0+3T, 10-4T, 8-5T, 5-2T, 5+3T, 12+1T, 3+3T, 11-2T, 4+0, 3+0, 6+0})
==========
==========
Ocarina.bmp processed in 14 lines (3.01s)
Graph(X,Y)=({2+12T, 4+10T, 5+8T, 1+8T, 3+8T, 7-6T, 4+5T, 11-3T, 5+2T, 1+2T, 6-2T, 13-3T, 6-5T, 8+1T}, {7+3T, 6+3T, 13-2T, 10+3T, 10-3T, 6+2T, 3+10T, 11-6T, 3+1T, 8+4T, 5+7T, 8+2T, 13-5T, 12-6T})
==========
OrcishAxe.png processed in 20 lines (0.195s)
Graph(X,Y)=({8+0, 6+0, 13+0, 1+0, 11-3T, 11-3T, 6-3T, 6-3T, 10-2T, 4+2T, 12+0, 12+0, 12+0, 12+0, 7+0, 7+0, 2+0, 2+0, 2+0, 2+0}, {15-14T, 15-14T, 6-4T, 6-4T, 8-3T, 0+3T, 5+3T, 3-3T, 4+1T, 4+1T, 7+0, 5+0, 3+0, 1+0, 15+0, 1+0, 7+0, 5+0, 3+0, 1+0})
==========
panda.jpg processed in 30 lines (1.9s)
Graph(X,Y)=({14-13T, 13-11T, 6+8T, 13-1T, 2+1T, 15-2T, 2-2T, 9+6T, 6-6T, 9-8T, 10-3T, 11-6T, 10-6T, 14-2T, 14-2T, 11-2T, 6+0, 6-2T, 1+2T, 3-2T, 10-1T, 5+1T, 13+0, 12+0, 11+0, 9+0, 7+0, 4+0, 3+0, 2+0}, {15+0, 9+0, 0+1T, 2+8T, 2+8T, 14-6T, 8+6T, 15-3T, 15-3T, 0+1T, 6+1T, 8+2T, 10-2T, 14-1T, 0+0, 11+0, 6-2T, 11+0, 14-1T, 0+0, 5+0, 6-2T, 12+0, 2+0, 10+0, 4+0, 13+0, 10+0, 2+0, 12+0})
==========
pinguoin.bmp processed in 18 lines (2.24s)
Graph(X,Y)=({15-7T, 7-7T, 14-9T, 10-9T, 12-7T, 4-1T, 12-1T, 10-7T, 10-5T, 12-1T, 4-1T, 6+4T, 15-3T, 7-3T, 3-3T, 11+0, 8+0, 4+0}, {11-11T, 0+11T, 8-6T, 2+6T, 12+3T, 3+9T, 12-9T, 15-3T, 1+0, 15-3T, 12+3T, 1+3T, 10-1T, 6-3T, 9+1T, 15+0, 6+0, 15+0})
==========
pont 1.bmp processed in 21 lines (2.07s)
Graph(X,Y)=({15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 1+10T, 11-4T, 0+3T, 14+0, 14+0, 13-1T, 10+0, 6+0, 6+0, 2+0, 6-6T, 15+0, 10+0, 6+0, 4+0}, {15+0, 12+0, 9+0, 6+0, 3+0, 0+1T, 0+1T, 6-6T, 0+6T, 15-3T, 9-3T, 0+3T, 12-3T, 15-3T, 9-3T, 12-3T, 3-1T, 1+0, 2+0, 2+0, 2+0})
==========
pont 1 2.bmp processed in 21 lines (3.26s)
Graph(X,Y)=({15+0, 12+0, 9+0, 6+0, 3+0, 1-1T, 0+1T, 0+6T, 6-6T, 15-3T, 15-3T, 12-3T, 12-3T, 9-3T, 9-3T, 3-3T, 3-1T, 2+0, 2+0, 2+0, 1+0}, {15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 14-10T, 15-3T, 4+4T, 8+2T, 0+2T, 12+2T, 4+2T, 8+2T, 0+2T, 3-1T, 9+6T, 11+0, 9+0, 5+0, 0+0})
==========
pont 2.bmp processed in 20 lines (2.41s)
Graph(X,Y)=({15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 1+10T, 12+3T, 9-4T, 6-6T, 14+0, 10+0, 10+0, 6+0, 2+0, 2+0, 0+4T, 15+0, 10+0, 6+0}, {15+0, 12+1T, 9+0, 6+0, 3+0, 0+0, 12+1T, 15-6T, 15-6T, 15-1T, 6-3T, 9-3T, 3-3T, 6-3T, 9-3T, 3-3T, 12+2T, 13+0, 14+0, 14+0})
==========
pont 2 2.bmp processed in 20 lines (3.33s)
Graph(X,Y)=({15+0, 13-1T, 9+0, 6+0, 3+0, 0+0, 12+1T, 15-6T, 15-6T, 15-1T, 9-3T, 9-3T, 6-3T, 6-3T, 3-3T, 3-3T, 12+2T, 14+0, 14+0, 13+0}, {15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 15-15T, 14-10T, 7+3T, 3-3T, 9+6T, 12+2T, 4+2T, 8+2T, 0+2T, 12+2T, 4+2T, 15-4T, 9+0, 5+0, 0+0})
==========
renard.bmp processed in 24 lines (0.359s)
Graph(X,Y)=({12-10T, 12-7T, 13-3T, 10-6T, 8-6T, 6-5T, 5-4T, 9-3T, 12-4T, 11-1T, 8-7T, 0+1T, 13-3T, 3-3T, 7-1T, 2-1T, 3+0, 12+0, 9+0, 8+0, 6+0, 5+0, 4+0, 2+0}, {10+2T, 0+1T, 9-6T, 13+1T, 9+1T, 13-7T, 5-4T, 15+0, 1+4T, 9+5T, 1-1T, 10+2T, 8-1T, 7+2T, 7+0, 5+0, 13-4T, 5+0, 8+0, 4+0, 12+0, 4+0, 8+0, 4+0})
==========
==========
rhino.jpg processed in 25 lines (0.635s)
Graph(X,Y)=({4-4T, 3+8T, 12-9T, 15-7T, 15-5T, 15-4T, 5-1T, 14-4T, 9+4T, 9-1T, 9-2T, 12-3T, 5+0, 5+4T, 5-4T, 7+1T, 0+2T, 14-1T, 11+1T, 11+0, 10+0, 8+0, 4+0, 2+0, 2+0}, {2+10T, 13-2T, 2+1T, 8+2T, 9+5T, 7-6T, 10-4T, 11-5T, 4-1T, 9-2T, 1+1T, 6+0, 6-3T, 11+3T, 9+0, 8+2T, 12-1T, 7+4T, 9-4T, 10+0, 1+0, 4+0, 11+0, 13+0, 5+0})
==========
Scimitar.png processed in 11 lines (0.116s)
Graph(X,Y)=({4+6T, 9-5T, 4+3T, 11-1T, 8+0, 6+2T, 6+1T, 4+2T, 11-1T, 4+4T, 9+0}, {15-5T, 14-4T, 15-6T, 7-4T, 8-4T, 0+1T, 1+2T, 15-1T, 6+4T, 11+3T, 2+0})
==========
Slimemedical.bmp processed in 19 lines (0.14s)
Graph(X,Y)=({6-4T, 9+3T, 13-4T, 8-1T, 5-4T, 12-2T, 11-5T, 4+4T, 2+1T, 9-4T, 13+0, 1+1T, 6-3T, 9+0, 8+0, 6+0, 6+0, 5+0, 2+0}, {15-7T, 14-6T, 5-5T, 10+5T, 0+5T, 11+4T, 9-1T, 9+2T, 12+2T, 0+0, 7-2T, 6+2T, 12+2T, 7+0, 5+0, 11+0, 5+0, 7+0, 11+0})
==========
soucoupe.png processed in 21 lines (3.96s)
Graph(X,Y)=({15-15T, 14-13T, 13-11T, 13-9T, 12-9T, 11-9T, 15-4T, 4-4T, 11-7T, 9-3T, 12-8T, 14+0, 1+1T, 8+0, 7+0, 12-2T, 8+1T, 3+3T, 10+0, 7+0, 4+0}, {11+0, 8+0, 7+0, 14-2T, 3+0, 12+2T, 10-6T, 4+6T, 2+6T, 0+0, 8-6T, 13-2T, 13-2T, 14-3T, 14-3T, 4+4T, 4+4T, 4-4T, 1+0, 6+0, 6+0})
==========
SteelAxe.png processed in 10 lines (0.118s)
Graph(X,Y)=({6+0, 4+0, 11+0, 9-3T, 9-3T, 10+0, 10+0, 5+0, 5+0, 5+0}, {15-14T, 15-14T, 6-4T, 8-3T, 0+3T, 7+0, 1+0, 15+0, 12+0, 1+0})
==========
SteelScimitar.png processed in 9 lines (0.0535s)
Graph(X,Y)=({10-2T, 7+1T, 10-1T, 11-6T, 7+1T, 12-1T, 5-1T, 7+0, 7+0}, {6+9T, 12-8T, 5-4T, 13-2T, 2-2T, 12-1T, 13-1T, 15+0, 3+0})
==========
SteelSword.png processed in 10 lines (0.101s)
Graph(X,Y)=({6+0, 9+0, 9-3T, 10-5T, 7+2T, 9-2T, 10-3T, 8+0, 8+0, 8+0}, {12-11T, 12-10T, 15+0, 12+0, 14+1T, 2-2T, 12+1T, 9+0, 6+0, 3+0})
==========
SwordOfApollo.png processed in 13 lines (0.054s)
Graph(X,Y)=({11-8T, 8+1T, 6-1T, 7+1T, 9-1T, 5+1T, 6+2T, 6+2T, 11+0, 8+0, 7+0, 6+0, 3+0}, {11+0, 5+6T, 5+6T, 11+4T, 3-2T, 3-2T, 14+1T, 15-1T, 10+0, 4+0, 0+0, 4+0, 10+0})
==========
SwordOfBlight.png processed in 13 lines (0.0628s)
Graph(X,Y)=({8+0, 6+0, 8-1T, 11-1T, 3+1T, 4-1T, 13-1T, 11-1T, 9+0, 2-1T, 8-2T, 9-4T, 7+0}, {12-9T, 12-9T, 7+8T, 3+2T, 1+2T, 9-2T, 12+0, 8+1T, 1-1T, 11+0, 15+0, 12+0, 2+0})
==========
SwordOfLegend.png processed in 17 lines (0.23s)
Graph(X,Y)=({5+0, 9+0, 11-8T, 9-3T, 8-3T, 9-3T, 9-4T, 9-4T, 11+1T, 9-2T, 5+2T, 2+1T, 12+0, 8+0, 6+0, 6+0, 3+0}, {12-11T, 12-9T, 12+0, 15-5T, 10+5T, 3-3T, 5+4T, 3+4T, 12-2T, 8+1T, 4-1T, 10+2T, 11+0, 15+0, 15+0, 2+0, 11+0})
==========
SwordsOfBrave.png processed in 23 lines (0.707s)
Graph(X,Y)=({13-13T, 15-11T, 12-11T, 15-6T, 6-6T, 7-4T, 4-4T, 14-1T, 11-3T, 6-4T, 14-1T, 13+2T, 0+1T, 1+2T, 15-6T, 2-1T, 1-1T, 11+1T, 15+0, 3-3T, 11+4T, 9+0, 6+0}, {2+13T, 3+11T, 0+11T, 9+6T, 15-6T, 4-4T, 7-4T, 9+5T, 14-3T, 6-4T, 15-5T, 0+1T, 2-2T, 9+4T, 15-6T, 14-1T, 15-1T, 7+2T, 3-3T, 0+0, 13+1T, 14+0, 14+0})
==========
TridentOfPoseidon.png processed in 10 lines (0.0713s)
Graph(X,Y)=({8+0, 12+0, 4+0, 10-4T, 12+2T, 8+2T, 8-2T, 4-2T, 11+0, 5+0}, {15-15T, 6-4T, 6-4T, 8+0, 3+1T, 1+1T, 1+1T, 3+1T, 7+0, 7+0})
==========
TwilightOfTheGods.png processed in 13 lines (0.0824s)
Graph(X,Y)=({6+0, 12-8T, 9+0, 13-1T, 11-2T, 4-1T, 6+3T, 14-1T, 3-1T, 10-1T, 11-2T, 4+4T, 10+0}, {14-10T, 14+0, 11-6T, 13-3T, 3-3T, 10+3T, 4-4T, 10-1T, 9+1T, 12+2T, 0+0, 14+1T, 4+0})
==========
Yataghan.png processed in 3 lines (0.214s)
Graph(X,Y)=({6+0, 7+0, 8-3T}, {15-15T, 12-11T, 12+0})
==========


Et ça marche nickel sur des images plus grosses (mais ça prend des plombes…). Entre 3 et 5 minutes pour celle-ci :



Ajouté le 19/08/2018 à 12:47 :
J'ai mis à jour le dépôt, l'outil est directement utilisable dans un autre soft. Exemple : python process.py image.png retourne uniquement le code à copier.
Les autres options me paraissent claires, au pire python process.py -h pour afficher l'aide
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 15:32 | # | Fichier joint


J'avais du temps, alors…
Je vous met au défi de faire mieux, à la main ou non d'ailleurs



2672 black pixels over 8976 (29.8%)
Get lines: complete
94296 lines found
Remove double lines: complete
53942 lines kept
Remove useless lines: complete
6983 lines kept
Draw: complete
Solution found in 514 lines
test.png processed in 514 lines (7.23e+03s)
Graph(X,Y)=({131-131T, 131-131T, 131+0, 0+0, 105-38T, 42-29T, 117-27T, 101+28T, 43+20T, 74-19T, 59-18T, 73-17T, 20-17T, 118-19T, 87+16T, 73-16T, 73-16T, 72-15T, 18-15T, 103+14T, 99-14T, 11+1T, 8+1T, 98+20T, 22-13T, 16-13T, 105+14T, 105+14T, 59-6T, 89+12T, 54-12T, 36-12T, 55-13T, 53-13T, 51-13T, 114-15T, 105-15T, 116-11T, 57-11T, 55-11T, 13-4T, 14-11T, 58+12T, 62+2T, 80-10T, 70-10T, 66-10T, 13+3T, 23-10T, 73+1T, 63+6T, 81-1T, 78-9T, 50-1T, 39-9T, 38-9T, 12-9T, 67-1T, 45+0, 43+0, 100-1T, 86+8T, 81+5T, 76-8T, 46+1T, 41-1T, 38-8T, 28-8T, 14+4T, 24-8T, 11+2T, 53+0, 51+0, 112-11T, 57-1T, 87-5T, 77+0, 74-7T, 60-7T, 40-3T, 44-7T, 35-4T, 28-7T, 26-7T, 10-7T, 39+7T, 93-9T, 68-9T, 53+0, 82-12T, 48+12T, 11+1T, 102+1T, 101+1T, 100-5T, 92+1T, 84+0, 75-1T, 73-3T, 69-1T, 66-3T, 59-4T, 38+1T, 32+1T, 6+5T, 102-7T, 81-7T, 79-7T, 101-8T, 73-8T, 64-8T, 17-6T, 8+1T, 79-3T, 72-2T, 72-5T, 60-5T, 60-5T, 39-2T, 34-5T, 31-5T, 24-5T, 13-5T, 8-5T, 116-6T, 99-6T, 67-5T, 35+0, 24+1T, 14-7T, 62-9T, 22-9T, 97-10T, 107-20T, 95+1T, 89+4T, 86+4T, 82+1T, 63+4T, 67-4T, 46+4T, 52-4T, 32+4T, 31+4T, 31-1T, 30-4T, 26-4T, 18+2T, 18-3T, 6+4T, 12-4T, 3+3T, 107-5T, 106-5T, 106-5T, 105-5T, 97-5T, 96-5T, 79-5T, 66-5T, 56-5T, 51-5T, 43-5T, 42-5T, 37-5T, 36-5T, 6-1T, 70+5T, 51-6T, 119-2T, 78-6T, 58-7T, 111+8T, 106+8T, 9+5T, 100-12T, 94-3T, 79-2T, 62+0, 64-3T, 55-1T, 53-3T, 28-2T, 5+0, 6-3T, 102+4T, 101+4T, 92+4T, 89+0, 63+4T, 63+4T, 64+3T, 70-4T, 54+4T, 46+4T, 48+1T, 38+4T, 41+1T, 34+3T, 32+4T, 34-4T, 27+1T, 28-4T, 17+4T, 94-1T, 61-5T, 32-2T, 15-5T, 112-6T, 60-6T, 33+6T, 14-7T, 46+0, 66-5T, 101-10T, 77-5T, 113-12T, 107+1T, 106+1T, 103+1T, 104-1T, 101+0, 97+1T, 91+0, 92-2T, 84+1T, 84+1T, 80+0, 80+0, 81-2T, 77+0, 75-2T, 69+0, 66+1T, 66-2T, 65-1T, 61+0, 58+2T, 52-2T, 43+1T, 46-2T, 39+1T, 38+2T, 37+1T, 37-2T, 28-2T, 24-2T, 21+1T, 22-1T, 18+2T, 13+1T, 12+1T, 9+2T, 85-3T, 82-1T, 72-3T, 9-3T, 6-3T, 109+1T, 97+1T, 68-4T, 54+4T, 43-4T, 33+4T, 41-4T, 12+4T, 15-4T, 14-4T, 57-2T, 88+3T, 62+1T, 59-7T, 106+12T, 128+0, 127+0, 125+0, 125+0, 124+0, 123+0, 123+0, 123+0, 121+0, 119+0, 117+0, 116+0, 114+0, 113+0, 112+0, 111+0, 111+0, 110+0, 108+0, 105-1T, 104-1T, 100+0, 95-1T, 93+0, 93+0, 90+0, 89+0, 89+0, 88+0, 84+0, 82+0, 80+0, 79+0, 79+0, 76+0, 75+0, 75+0, 71+0, 69+0, 61+0, 59+0, 57+0, 55+0, 55+0, 54+0, 51+0, 51+0, 46+0, 43+0, 43+0, 41-1T, 35+0, 35-1T, 27+0, 25+0, 23+0, 17+0, 16+0, 15+0, 14+0, 11-1T, 7+0, 6+0, 4+0, 4+0, 4-1T, 4-1T, 106+1T, 105+1T, 103+2T, 102+2T, 96+1T, 93+2T, 94-1T, 87+2T, 89-2T, 82+2T, 83+1T, 84-1T, 77-2T, 72+1T, 65+2T, 65+2T, 60+2T, 59+1T, 57+1T, 58+0, 56-2T, 48+2T, 47-1T, 42+1T, 39+2T, 36+1T, 39-2T, 34+2T, 37-1T, 33+2T, 29+1T, 25-2T, 13+2T, 4+2T, 8-2T, 8-2T, 5-2T, 107-3T, 106-3T, 97-3T, 64+0, 66-3T, 57-3T, 47-2T, 43-3T, 41-3T, 37-3T, 32-1T, 31-1T, 13-3T, 113+3T, 95+0, 73+4T, 66+2T, 58+2T, 56-3T, 45+4T, 49-3T, 36-3T, 88-3T, 84-3T, 98-7T, 18-7T, 126+0, 125+0, 124+0, 124+0, 118+0, 116+0, 116+0, 113+0, 110+0, 107+0, 106+0, 106+0, 105+0, 105+0, 105+0, 101+0, 100+0, 100+0, 99+0, 98+0, 97+0, 97+0, 93+0, 93+0, 93+0, 91+0, 89+0, 86+0, 86+0, 85+0, 83+0, 83+0, 83+0, 81+0, 81+0, 80+0, 80+0, 80+0, 77+0, 77+0, 74+0, 74+0, 73+0, 72+0, 71+0, 71+0, 67+0, 67+0, 65+0, 64+0, 64+0, 63+0, 63+0, 63+0, 61+0, 60+0, 59+0, 58+0, 54+0, 53+0, 52+0, 49+0, 48+0, 47+0, 46+0, 43+0, 43+0, 42+0, 41+0, 40+0, 40+0, 39+0, 39+0, 37+0, 37+0, 37+0, 37+0, 33+0, 31+0, 31+0, 30+0, 30+0, 29+0, 29+0, 28+0, 28+0, 28+0, 27+0, 25+0, 25+0, 24+0, 22+0, 21+0, 20+0, 19+0, 17+0, 16+0, 15+0, 15+0, 11+0, 11+0, 8+0, 8+0, 6+0, 6+0, 6+0, 5+0, 4+0, 4+0, 3+0, 3+0}, {67+0, 0+0, 67-67T, 67-67T, 64-1T, 63+0, 25+3T, 64-2T, 64-1T, 38-1T, 16+0, 37+1T, 3+17T, 17+13T, 8-2T, 51+0, 45+0, 32-1T, 3+15T, 15+1T, 8-1T, 54-14T, 49+14T, 30-7T, 3+13T, 3+13T, 23-1T, 17+3T, 30+16T, 3+1T, 28+1T, 16+0, 16-13T, 16-13T, 16-13T, 26-3T, 29+0, 15-1T, 14-11T, 14-11T, 31+11T, 3+11T, 32-1T, 59-12T, 3+10T, 39+0, 7-2T, 42-10T, 20+3T, 50-12T, 22+12T, 49-9T, 3+9T, 40+9T, 49+0, 45+0, 3+9T, 50+10T, 29-10T, 29-10T, 3+11T, 6-2T, 4+8T, 3+8T, 47-8T, 26-8T, 43+1T, 3+8T, 26+8T, 22+2T, 26+8T, 28-9T, 28-9T, 22-9T, 48-12T, 17-7T, 51-7T, 3+7T, 12-3T, 31-7T, 11-7T, 25-7T, 5+7T, 3+7T, 3+7T, 9+8T, 3+3T, 30+0, 51-9T, 42-6T, 42-6T, 50+12T, 51-6T, 39-6T, 15+6T, 47-6T, 48-6T, 28-6T, 30-6T, 21-6T, 18+6T, 21+6T, 41-6T, 61-6T, 24-6T, 5+0, 4+7T, 45-2T, 30+0, 31-4T, 11-8T, 34+8T, 54-14T, 10+5T, 19-5T, 3+5T, 17+2T, 9-3T, 16+5T, 18+1T, 25-3T, 3+5T, 24+0, 3+5T, 17+4T, 23-4T, 9-6T, 25-6T, 13+6T, 26+0, 5+5T, 37-6T, 10-6T, 27+1T, 13+4T, 15+3T, 21+3T, 38+4T, 42+2T, 42+1T, 19-1T, 7-4T, 37-2T, 26+3T, 4+4T, 32-4T, 9+4T, 14+4T, 8+4T, 35-2T, 20-1T, 33-4T, 51+0, 47+0, 39+0, 35+0, 47+0, 43+0, 51+1T, 29+0, 52-1T, 19-1T, 41+0, 37+0, 61+0, 57+0, 17+5T, 31+6T, 23+1T, 23-7T, 43-7T, 43+2T, 14+7T, 16-2T, 26+8T, 3+0, 24+1T, 15+3T, 14-3T, 14+3T, 21-3T, 6-3T, 36-3T, 42-3T, 3+3T, 46-1T, 34-1T, 42-1T, 15-4T, 48+1T, 49-1T, 18+4T, 3+4T, 32+2T, 13+3T, 38+4T, 36-1T, 15+4T, 13+4T, 56-1T, 19+2T, 16-4T, 18+4T, 24+3T, 7+5T, 10+1T, 42+5T, 38+0, 14+4T, 5+0, 48+1T, 42+0, 48-8T, 25+9T, 5+3T, 46-11T, 22+5T, 49-2T, 37-2T, 17+2T, 7+2T, 20-2T, 45-2T, 14-2T, 22-2T, 23-2T, 5-2T, 27-2T, 20-2T, 29+0, 27-2T, 14+2T, 43-2T, 12+2T, 41+0, 17+2T, 43-2T, 27-1T, 32+1T, 39-2T, 33-1T, 47-2T, 33-1T, 59-2T, 8-1T, 39+1T, 40+1T, 28+2T, 56+2T, 42-1T, 22-2T, 17+2T, 18+1T, 41-3T, 42-3T, 23-2T, 62+3T, 29-3T, 21-4T, 14+4T, 3+4T, 42+3T, 25+4T, 43+1T, 18+1T, 36-1T, 30-1T, 28-1T, 11+5T, 3+6T, 57+6T, 36+7T, 25-1T, 41-1T, 58-1T, 19-1T, 12-1T, 22-1T, 50-1T, 32-1T, 11-1T, 51-1T, 27-1T, 60-1T, 41-1T, 11-1T, 33-1T, 12-1T, 60-1T, 54-1T, 32-1T, 5-1T, 49+0, 37+0, 60-1T, 45+0, 51-1T, 15-1T, 61-1T, 45-1T, 37-1T, 62-1T, 54-1T, 35-1T, 36-1T, 60-1T, 48-1T, 55-1T, 50-1T, 47-1T, 48-1T, 48-1T, 48-1T, 48-1T, 58-1T, 50-1T, 47-1T, 57-1T, 48-1T, 36-1T, 37-1T, 59-1T, 49-1T, 39+0, 40-1T, 59+0, 56-1T, 44-1T, 49-1T, 53-1T, 19-1T, 59-1T, 46-1T, 22+0, 61-1T, 49-1T, 64-1T, 58-1T, 23-1T, 3+1T, 44+2T, 32+2T, 45+1T, 33+1T, 40+2T, 41+1T, 17+2T, 13-1T, 27+1T, 49-1T, 46+2T, 23+2T, 29-1T, 19+2T, 47+1T, 25-1T, 15+1T, 5-2T, 49+2T, 13-2T, 5-2T, 49+1T, 46+2T, 34+2T, 35+1T, 54+2T, 44+2T, 47+1T, 23+2T, 55+1T, 20-2T, 12+2T, 13-1T, 39-1T, 29+0, 20-1T, 42-1T, 51-1T, 39-1T, 47-1T, 14-3T, 3+3T, 19-1T, 44-3T, 41-1T, 19-3T, 61-1T, 46-3T, 10-3T, 24-1T, 18+4T, 15-4T, 42+3T, 59+4T, 35+4T, 8-4T, 11+3T, 39+4T, 31-4T, 19-5T, 13-5T, 26+3T, 34+0, 34+0, 16+0, 59+0, 3+0, 4+0, 29+0, 20+0, 54+0, 5+0, 50+0, 38+0, 28+0, 58+0, 21+0, 9+0, 26+0, 21+0, 14+0, 56+0, 60+0, 46+0, 12+0, 35+0, 27+0, 9+0, 27+0, 9+0, 32+0, 20+0, 28+0, 44+0, 29+0, 3+0, 44+0, 41+0, 50+0, 23+0, 4+0, 22+0, 20+0, 56+0, 30+0, 11+0, 58+0, 41+0, 36+0, 43+0, 34+0, 36+0, 21+0, 3+0, 44+0, 34+0, 28+0, 4+0, 25+0, 41+0, 3+0, 22+0, 35+0, 3+0, 44+0, 33+0, 49+0, 60+0, 51+0, 40+0, 32+0, 50+0, 14+0, 9+0, 48+0, 19+0, 60+0, 33+0, 22+0, 3+0, 39+0, 52+0, 3+0, 48+0, 38+0, 54+0, 22+0, 62+0, 31+0, 4+0, 18+0, 33+0, 11+0, 20+0, 38+0, 11+0, 47+0, 9+0, 60+0, 42+0, 50+0, 25+0, 65+0, 40+0, 23+0, 16+0, 63+0, 56+0, 25+0, 32+0, 46+0, 21+0, 38+0, 34+0})

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 19/08/2018 15:34 | #


Question au passage : pourquoi ça t'a pris des plombes pour éliminer les doubles lignes alors qu'il suffit de convertir ta liste en dico puis de nouveau en liste ?

def removing_doubles(lines):
    return list(dict(lines))

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 15:35 | #


Ah putain, en dico ça marche ? J'ai essayé avec les set mais vu qu'une liste peut pas être hashée, ça me foutais une erreur… Je teste
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/08/2018 15:38 | #


Vu que ton algo m'a dépassé sur le sprite de drak (75 lignes mais si on enlève les petits trucs ça fait moins), je tiens ma promesse et je vais tenter de l'implémenter dans BIDE

GG dark, ton algo m'impressionne
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 15:41 | #


Ouais, je me disais aussi, c'était trop beau :
>>> l = [[(1, 2), (2, 3)], [(2, 3), (1, 2)], [(4, 5)]]
>>> dict(l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #2 has length 1; 2 is required
>>> l = [[(1, 2), (2, 3)], [(2, 3), (1, 2)]]
>>> dict(l)
{(1, 2): (2, 3), (2, 3): (1, 2)}

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 19/08/2018 15:41 | #


Dark storm a écrit :
Ah putain, en dico ça marche ? J'ai essayé avec les set mais vu qu'une liste peut pas être hashée, ça me foutais une erreur… Je teste

C'est exact. Voilà mieux :

>>> a = [1, 2, 3]
>>> b = [2, 7, 6]
>>> c = [1, 2, 3]
>>> d = [1, 3, 2]
>>> e = [1, 8, 6, 4]
>>> set(map(tuple, [a, b, c, d, e]))
{(2, 7, 6), (1, 3, 2), (1, 8, 6, 4), (1, 2, 3)}

Edit : ça marche aussi si tes éléments ne sont pas des entiers mais des points.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 15:42 | #


Zezombye a écrit :
GG dark, ton algo m'impressionne

Qu'on soit bien d'accord, j'ai juste implémenté ce qui est dit dans le topic, donc t'as une partie du mérite
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Drak Hors ligne Rédacteur Points: 1925 Défis: 40 Message

Citer : Posté le 19/08/2018 15:48 | #


Dark storm a écrit :
J'avais du temps, alors…
Je vous met au défi de faire mieux, à la main ou non d'ailleurs



2672 black pixels over 8976 (29.8%)
Get lines: complete
94296 lines found
Remove double lines: complete
53942 lines kept
Remove useless lines: complete
6983 lines kept
Draw: complete
Solution found in 514 lines
test.png processed in 514 lines (7.23e+03s)
Graph(X,Y)=({131-131T, 131-131T, 131+0, 0+0, 105-38T, 42-29T, 117-27T, 101+28T, 43+20T, 74-19T, 59-18T, 73-17T, 20-17T, 118-19T, 87+16T, 73-16T, 73-16T, 72-15T, 18-15T, 103+14T, 99-14T, 11+1T, 8+1T, 98+20T, 22-13T, 16-13T, 105+14T, 105+14T, 59-6T, 89+12T, 54-12T, 36-12T, 55-13T, 53-13T, 51-13T, 114-15T, 105-15T, 116-11T, 57-11T, 55-11T, 13-4T, 14-11T, 58+12T, 62+2T, 80-10T, 70-10T, 66-10T, 13+3T, 23-10T, 73+1T, 63+6T, 81-1T, 78-9T, 50-1T, 39-9T, 38-9T, 12-9T, 67-1T, 45+0, 43+0, 100-1T, 86+8T, 81+5T, 76-8T, 46+1T, 41-1T, 38-8T, 28-8T, 14+4T, 24-8T, 11+2T, 53+0, 51+0, 112-11T, 57-1T, 87-5T, 77+0, 74-7T, 60-7T, 40-3T, 44-7T, 35-4T, 28-7T, 26-7T, 10-7T, 39+7T, 93-9T, 68-9T, 53+0, 82-12T, 48+12T, 11+1T, 102+1T, 101+1T, 100-5T, 92+1T, 84+0, 75-1T, 73-3T, 69-1T, 66-3T, 59-4T, 38+1T, 32+1T, 6+5T, 102-7T, 81-7T, 79-7T, 101-8T, 73-8T, 64-8T, 17-6T, 8+1T, 79-3T, 72-2T, 72-5T, 60-5T, 60-5T, 39-2T, 34-5T, 31-5T, 24-5T, 13-5T, 8-5T, 116-6T, 99-6T, 67-5T, 35+0, 24+1T, 14-7T, 62-9T, 22-9T, 97-10T, 107-20T, 95+1T, 89+4T, 86+4T, 82+1T, 63+4T, 67-4T, 46+4T, 52-4T, 32+4T, 31+4T, 31-1T, 30-4T, 26-4T, 18+2T, 18-3T, 6+4T, 12-4T, 3+3T, 107-5T, 106-5T, 106-5T, 105-5T, 97-5T, 96-5T, 79-5T, 66-5T, 56-5T, 51-5T, 43-5T, 42-5T, 37-5T, 36-5T, 6-1T, 70+5T, 51-6T, 119-2T, 78-6T, 58-7T, 111+8T, 106+8T, 9+5T, 100-12T, 94-3T, 79-2T, 62+0, 64-3T, 55-1T, 53-3T, 28-2T, 5+0, 6-3T, 102+4T, 101+4T, 92+4T, 89+0, 63+4T, 63+4T, 64+3T, 70-4T, 54+4T, 46+4T, 48+1T, 38+4T, 41+1T, 34+3T, 32+4T, 34-4T, 27+1T, 28-4T, 17+4T, 94-1T, 61-5T, 32-2T, 15-5T, 112-6T, 60-6T, 33+6T, 14-7T, 46+0, 66-5T, 101-10T, 77-5T, 113-12T, 107+1T, 106+1T, 103+1T, 104-1T, 101+0, 97+1T, 91+0, 92-2T, 84+1T, 84+1T, 80+0, 80+0, 81-2T, 77+0, 75-2T, 69+0, 66+1T, 66-2T, 65-1T, 61+0, 58+2T, 52-2T, 43+1T, 46-2T, 39+1T, 38+2T, 37+1T, 37-2T, 28-2T, 24-2T, 21+1T, 22-1T, 18+2T, 13+1T, 12+1T, 9+2T, 85-3T, 82-1T, 72-3T, 9-3T, 6-3T, 109+1T, 97+1T, 68-4T, 54+4T, 43-4T, 33+4T, 41-4T, 12+4T, 15-4T, 14-4T, 57-2T, 88+3T, 62+1T, 59-7T, 106+12T, 128+0, 127+0, 125+0, 125+0, 124+0, 123+0, 123+0, 123+0, 121+0, 119+0, 117+0, 116+0, 114+0, 113+0, 112+0, 111+0, 111+0, 110+0, 108+0, 105-1T, 104-1T, 100+0, 95-1T, 93+0, 93+0, 90+0, 89+0, 89+0, 88+0, 84+0, 82+0, 80+0, 79+0, 79+0, 76+0, 75+0, 75+0, 71+0, 69+0, 61+0, 59+0, 57+0, 55+0, 55+0, 54+0, 51+0, 51+0, 46+0, 43+0, 43+0, 41-1T, 35+0, 35-1T, 27+0, 25+0, 23+0, 17+0, 16+0, 15+0, 14+0, 11-1T, 7+0, 6+0, 4+0, 4+0, 4-1T, 4-1T, 106+1T, 105+1T, 103+2T, 102+2T, 96+1T, 93+2T, 94-1T, 87+2T, 89-2T, 82+2T, 83+1T, 84-1T, 77-2T, 72+1T, 65+2T, 65+2T, 60+2T, 59+1T, 57+1T, 58+0, 56-2T, 48+2T, 47-1T, 42+1T, 39+2T, 36+1T, 39-2T, 34+2T, 37-1T, 33+2T, 29+1T, 25-2T, 13+2T, 4+2T, 8-2T, 8-2T, 5-2T, 107-3T, 106-3T, 97-3T, 64+0, 66-3T, 57-3T, 47-2T, 43-3T, 41-3T, 37-3T, 32-1T, 31-1T, 13-3T, 113+3T, 95+0, 73+4T, 66+2T, 58+2T, 56-3T, 45+4T, 49-3T, 36-3T, 88-3T, 84-3T, 98-7T, 18-7T, 126+0, 125+0, 124+0, 124+0, 118+0, 116+0, 116+0, 113+0, 110+0, 107+0, 106+0, 106+0, 105+0, 105+0, 105+0, 101+0, 100+0, 100+0, 99+0, 98+0, 97+0, 97+0, 93+0, 93+0, 93+0, 91+0, 89+0, 86+0, 86+0, 85+0, 83+0, 83+0, 83+0, 81+0, 81+0, 80+0, 80+0, 80+0, 77+0, 77+0, 74+0, 74+0, 73+0, 72+0, 71+0, 71+0, 67+0, 67+0, 65+0, 64+0, 64+0, 63+0, 63+0, 63+0, 61+0, 60+0, 59+0, 58+0, 54+0, 53+0, 52+0, 49+0, 48+0, 47+0, 46+0, 43+0, 43+0, 42+0, 41+0, 40+0, 40+0, 39+0, 39+0, 37+0, 37+0, 37+0, 37+0, 33+0, 31+0, 31+0, 30+0, 30+0, 29+0, 29+0, 28+0, 28+0, 28+0, 27+0, 25+0, 25+0, 24+0, 22+0, 21+0, 20+0, 19+0, 17+0, 16+0, 15+0, 15+0, 11+0, 11+0, 8+0, 8+0, 6+0, 6+0, 6+0, 5+0, 4+0, 4+0, 3+0, 3+0}, {67+0, 0+0, 67-67T, 67-67T, 64-1T, 63+0, 25+3T, 64-2T, 64-1T, 38-1T, 16+0, 37+1T, 3+17T, 17+13T, 8-2T, 51+0, 45+0, 32-1T, 3+15T, 15+1T, 8-1T, 54-14T, 49+14T, 30-7T, 3+13T, 3+13T, 23-1T, 17+3T, 30+16T, 3+1T, 28+1T, 16+0, 16-13T, 16-13T, 16-13T, 26-3T, 29+0, 15-1T, 14-11T, 14-11T, 31+11T, 3+11T, 32-1T, 59-12T, 3+10T, 39+0, 7-2T, 42-10T, 20+3T, 50-12T, 22+12T, 49-9T, 3+9T, 40+9T, 49+0, 45+0, 3+9T, 50+10T, 29-10T, 29-10T, 3+11T, 6-2T, 4+8T, 3+8T, 47-8T, 26-8T, 43+1T, 3+8T, 26+8T, 22+2T, 26+8T, 28-9T, 28-9T, 22-9T, 48-12T, 17-7T, 51-7T, 3+7T, 12-3T, 31-7T, 11-7T, 25-7T, 5+7T, 3+7T, 3+7T, 9+8T, 3+3T, 30+0, 51-9T, 42-6T, 42-6T, 50+12T, 51-6T, 39-6T, 15+6T, 47-6T, 48-6T, 28-6T, 30-6T, 21-6T, 18+6T, 21+6T, 41-6T, 61-6T, 24-6T, 5+0, 4+7T, 45-2T, 30+0, 31-4T, 11-8T, 34+8T, 54-14T, 10+5T, 19-5T, 3+5T, 17+2T, 9-3T, 16+5T, 18+1T, 25-3T, 3+5T, 24+0, 3+5T, 17+4T, 23-4T, 9-6T, 25-6T, 13+6T, 26+0, 5+5T, 37-6T, 10-6T, 27+1T, 13+4T, 15+3T, 21+3T, 38+4T, 42+2T, 42+1T, 19-1T, 7-4T, 37-2T, 26+3T, 4+4T, 32-4T, 9+4T, 14+4T, 8+4T, 35-2T, 20-1T, 33-4T, 51+0, 47+0, 39+0, 35+0, 47+0, 43+0, 51+1T, 29+0, 52-1T, 19-1T, 41+0, 37+0, 61+0, 57+0, 17+5T, 31+6T, 23+1T, 23-7T, 43-7T, 43+2T, 14+7T, 16-2T, 26+8T, 3+0, 24+1T, 15+3T, 14-3T, 14+3T, 21-3T, 6-3T, 36-3T, 42-3T, 3+3T, 46-1T, 34-1T, 42-1T, 15-4T, 48+1T, 49-1T, 18+4T, 3+4T, 32+2T, 13+3T, 38+4T, 36-1T, 15+4T, 13+4T, 56-1T, 19+2T, 16-4T, 18+4T, 24+3T, 7+5T, 10+1T, 42+5T, 38+0, 14+4T, 5+0, 48+1T, 42+0, 48-8T, 25+9T, 5+3T, 46-11T, 22+5T, 49-2T, 37-2T, 17+2T, 7+2T, 20-2T, 45-2T, 14-2T, 22-2T, 23-2T, 5-2T, 27-2T, 20-2T, 29+0, 27-2T, 14+2T, 43-2T, 12+2T, 41+0, 17+2T, 43-2T, 27-1T, 32+1T, 39-2T, 33-1T, 47-2T, 33-1T, 59-2T, 8-1T, 39+1T, 40+1T, 28+2T, 56+2T, 42-1T, 22-2T, 17+2T, 18+1T, 41-3T, 42-3T, 23-2T, 62+3T, 29-3T, 21-4T, 14+4T, 3+4T, 42+3T, 25+4T, 43+1T, 18+1T, 36-1T, 30-1T, 28-1T, 11+5T, 3+6T, 57+6T, 36+7T, 25-1T, 41-1T, 58-1T, 19-1T, 12-1T, 22-1T, 50-1T, 32-1T, 11-1T, 51-1T, 27-1T, 60-1T, 41-1T, 11-1T, 33-1T, 12-1T, 60-1T, 54-1T, 32-1T, 5-1T, 49+0, 37+0, 60-1T, 45+0, 51-1T, 15-1T, 61-1T, 45-1T, 37-1T, 62-1T, 54-1T, 35-1T, 36-1T, 60-1T, 48-1T, 55-1T, 50-1T, 47-1T, 48-1T, 48-1T, 48-1T, 48-1T, 58-1T, 50-1T, 47-1T, 57-1T, 48-1T, 36-1T, 37-1T, 59-1T, 49-1T, 39+0, 40-1T, 59+0, 56-1T, 44-1T, 49-1T, 53-1T, 19-1T, 59-1T, 46-1T, 22+0, 61-1T, 49-1T, 64-1T, 58-1T, 23-1T, 3+1T, 44+2T, 32+2T, 45+1T, 33+1T, 40+2T, 41+1T, 17+2T, 13-1T, 27+1T, 49-1T, 46+2T, 23+2T, 29-1T, 19+2T, 47+1T, 25-1T, 15+1T, 5-2T, 49+2T, 13-2T, 5-2T, 49+1T, 46+2T, 34+2T, 35+1T, 54+2T, 44+2T, 47+1T, 23+2T, 55+1T, 20-2T, 12+2T, 13-1T, 39-1T, 29+0, 20-1T, 42-1T, 51-1T, 39-1T, 47-1T, 14-3T, 3+3T, 19-1T, 44-3T, 41-1T, 19-3T, 61-1T, 46-3T, 10-3T, 24-1T, 18+4T, 15-4T, 42+3T, 59+4T, 35+4T, 8-4T, 11+3T, 39+4T, 31-4T, 19-5T, 13-5T, 26+3T, 34+0, 34+0, 16+0, 59+0, 3+0, 4+0, 29+0, 20+0, 54+0, 5+0, 50+0, 38+0, 28+0, 58+0, 21+0, 9+0, 26+0, 21+0, 14+0, 56+0, 60+0, 46+0, 12+0, 35+0, 27+0, 9+0, 27+0, 9+0, 32+0, 20+0, 28+0, 44+0, 29+0, 3+0, 44+0, 41+0, 50+0, 23+0, 4+0, 22+0, 20+0, 56+0, 30+0, 11+0, 58+0, 41+0, 36+0, 43+0, 34+0, 36+0, 21+0, 3+0, 44+0, 34+0, 28+0, 4+0, 25+0, 41+0, 3+0, 22+0, 35+0, 3+0, 44+0, 33+0, 49+0, 60+0, 51+0, 40+0, 32+0, 50+0, 14+0, 9+0, 48+0, 19+0, 60+0, 33+0, 22+0, 3+0, 39+0, 52+0, 3+0, 48+0, 38+0, 54+0, 22+0, 62+0, 31+0, 4+0, 18+0, 33+0, 11+0, 20+0, 38+0, 11+0, 47+0, 9+0, 60+0, 42+0, 50+0, 25+0, 65+0, 40+0, 23+0, 16+0, 63+0, 56+0, 25+0, 32+0, 46+0, 21+0, 38+0, 34+0})


Est-il aussi possible de savoir combien d'octets prendra le MDS dans le code même ? Si ça prend moins de 1024 octets pour une image comme ça, ça peut peut-être valoir le coup de faire ça !
Eon the Dragon : version 1.2
Let's have a look!
Marre de ces RPGs qui t'imposent des classes, des compétences et des sorts ? Crée tes propres capacités sur Eon the Dragon ! Des monstres, des dragons et des combats aussi épiques que difficiles t'attendent !
Un RPG unique et immense t'attend ! Joue dès maintenant à Aventura, le Royaume Poudingue !
Vous aussi, soyez swag et rejoignez Planète Casio !
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/08/2018 15:50 | #


Qu'on soit bien d'accord, j'ai juste implémenté ce qui est dit dans le topic, donc t'as une partie du mérite


Est ce que ton algo fait l'étape 0 ?

Parce que ça aurait pu mettre beaucoup moins de temps pour le sprite de 128x64
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 15:52 | #


Là y'a 7000 caractères. T'en retire 1/4 pour les espaces, 1/5 parce que j'ai pas optmisé la sortie (genre tu peux trouver des 0+1T), ça donne 4200 octets à la louche. Nan, sur des images complexes, c'est bien mieux de faire des pictures

Ajouté le 19/08/2018 à 15:53 :
Zezombye a écrit :
Est ce que ton algo fait l'étape 0 ?

Nope. Je teste tout, mais une fois que l'étape 1 est faite, ça change pas grand chose.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/08/2018 15:57 | #


Ouais mais ça ferait pas une diminution dans le nombre de lignes inutiles ? Vu qu'il y a moins de points à calculer.

Question au passage : pourquoi ça t'a pris des plombes pour éliminer les doubles lignes alors qu'il suffit de convertir ta liste en dico puis de nouveau en liste ?


Je pense que par "doubles lignes" il veut dire les lignes horizontales/verticales qui se superposent mais qui vont dans des sens différents (à moins que son algo est chelou et génère plusieurs fois la même ligne), du coup un dico marchera pas si ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 16:05 | #


Zezombye a écrit :
Ouais mais ça ferait pas une diminution dans le nombre de lignes inutiles ? Vu qu'il y a moins de points à calculer.

Non, le nombre de lignes utiles est une constante. Le découpage permettrait juste de déterminer l'ensemble des lignes plus vite : on teste pas une ligne si on est sûr qu'il n'y ai pas de pixels entre les deux. Mais comme je quitte la boucle dès qu'un pixel non conforme est trouvé, je suis pas sûr que tu gagnerais tant de temps que ça, sauf si le sprite a deux parties complètement distinctes et complexes, mais c'est rare.

Je pense que par "doubles lignes" il veut dire les lignes horizontales/verticales qui se superposent mais qui vont dans des sens différents (à moins que son algo est chelou et génère plusieurs fois la même ligne), du coup un dico marchera pas si ?

C'est presque ça : je vire les lignes qui sont symétriques, qu'elles soient horizontales, verticales ou non d'ailleurs. Attention, ce n'est pas parce que a = b' et b = a' que F(a, b) = F(a', b'), à cause du sens de Bresenham.
De plus, je ne peux pas perdre l'ordre des listes de pixels des lignes, car ensuite je récupère les premier et dernier éléments pour avoir les extrémités du segment. (Ou si je perds l'ordre, ça fait des calculs en plus pour le retrouver)

Ajouté le 19/08/2018 à 16:09 :
Par contre, y'a un truc con mais chiant à faire, c'est d'optimiser la sortie. À savoir passer de 0+1T à T par exemple. Pour le coup je ne le ferai pas, parce que j'ai pas de solution triviale ou élégante en tête
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/08/2018 16:12 | #


Tu peux regarder la fonction qui fait ça dans BIDE
https://git.planet-casio.com/Zezombye/BIDE/blob/master/src/zezombye/BIDE/MultiDrawstatGenerator.java#L287
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 16:19 | #


Parfait, c'est modifié : https://git.planet-casio.com/Dark-Storm/sprite-optimizer/blob/master/sprite-optimizer.py#L141
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 19/08/2018 16:20 | #


Dark storm a écrit :
Par contre, y'a un truc con mais chiant à faire, c'est d'optimiser la sortie. À savoir passer de 0+1T à T par exemple. Pour le coup je ne le ferai pas, parce que j'ai pas de solution triviale ou élégante en tête

Tu fais un coup de regex pour remplacer 1T par T (pourvu que le 1 ne soit pas précédé d'un chiffre), 0+ et +0 par rien (pourvu que le 0 soit le seul chiffre).

(?<!\d)1T devient 1T
(?<!\d)0+ est supprimé
+0(?!\d) est supprimé

Ajouté le 19/08/2018 à 16:20 :
Oh, il y avait plus joli donc. Tant mieux si c'est fait. :3
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 19/08/2018 16:21 | #


Nan, c'est un truc dégueux à coup de conditions. À vrai dire j'avais la flemme de faire des regex
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/08/2018 16:25 | #


Par contre il faudrait si possible mettre ça dans un exécutable (que ce soit en exe ou en elf) : je vais pas demander aux utilisateurs d'installer python ainsi que les modules complémentaires
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 226 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd