Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#276 Le 07/03/2012, à 21:15

kamui57

Re : /* Topic des codeurs [7] */

bortzmeyer sur twitter a écrit :

Message from Github asking me to reset my SSH keys :-( #security


Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console

Hors ligne

#277 Le 08/03/2012, à 20:35

tshirtman

Re : /* Topic des codeurs [7] */

j'ai du les réactiver aussi… je trouve ça normal et sérieux de leur part. ça aurait été mieux de fixer la faille avant, mais bon…

Hors ligne

#278 Le 09/03/2012, à 01:47

Pylades

Re : /* Topic des codeurs [7] */

Dites, les gens, j’ai trois ou quatre entiers de 0 à 11. Actuellement, je teste s’il se suivent, mais pas si j’ai un truc du genre de 10, 11, 0, 1. Est-ce que vous auriez une idée simple pour reconnaître ce cas (en Python) ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#279 Le 09/03/2012, à 07:38

grim7reaper

Re : /* Topic des codeurs [7] */

Gné ? Pas compris là…
Tu veux faire quoi avec tes nombres ?

Si c’est juste pour tester s’ils se suivent tu peux faire un truc du genre (style fonctionnel).

all(itertools.starmap(operator.le, zip(lst, lst[1:])))

Dernière modification par grim7reaper (Le 09/03/2012, à 07:43)

Hors ligne

#280 Le 09/03/2012, à 11:58

Pylades

Re : /* Topic des codeurs [7] */

Ah ouais, c’est pas mal, le style style fonctionnel. Tarabiscoté, mais puissant. Bon, ceci dit, ça ne résout pas mon problème (qui était : comment savoir si ça se suit lorsqu’on a une liste [0, 1, 10, 11]), mais c’est intéressant.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#281 Le 09/03/2012, à 12:23

grim7reaper

Re : /* Topic des codeurs [7] */

Ouais c’est un peu tarabiscoté car Python ce n’est pas un langage fonctionnel à la base. En Haskell c’est un peu plus clair :

and [a < b | (a, b) <- zip lst (tail lst)]

Sinon, pour ton problème ils doivent se suivrent par paire ou c’est juste un exemple ?

Hors ligne

#282 Le 09/03/2012, à 12:27

tshirtman

Re : /* Topic des codeurs [7] */

qu'entends tu par «s'ils se suivent»? qu'ils sont ordonnés ET qu'il n'y a pas d'entiers intermédiaires entre chaque couple d'éléments de la liste?

si oui on peut le faire avec reduce je pense, il s'agit juste de vérifier si x[n+1] = x[n] +1

>>> reduce(lambda x, y: y == x+1 and y, [2]) and True
True
>>> reduce(lambda x, y: y == x+1 and y, [2,3]) and True
True
>>> reduce(lambda x, y: y == x+1 and y, [2,3,6]) and True
False
>>> reduce(lambda x, y: y == x+1 and y, [2,3,4]) and True
True
>>> reduce(lambda x, y: y == x+1 and y, [1,2,3,4]) and True
True
>>> reduce(lambda x, y: y == x+1 and y, [-1,2,3,4]) and True
False

attention cependant:

>>> reduce(lambda x, y: y == x+1 and y, []) and True
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: reduce() of empty sequence with no initial value

Dernière modification par tshirtman (Le 09/03/2012, à 12:39)

Hors ligne

#283 Le 09/03/2012, à 12:48

Pylades

Re : /* Topic des codeurs [7] */

Nan, en fait j’ai une liste d’entiers (ordonnée, d’ailleurs), de 0 à 11, et j’aimerais savoir s’il sont consécutifs à 12 près.
Par exemple, pour [0, 9, 10, 11] c’est OK ; pour [3, 4, 6], ce n’est pas OK.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#284 Le 09/03/2012, à 13:00

grim7reaper

Re : /* Topic des codeurs [7] */

C’est quoi la différence entre la première et la deuxième ?
Dans les 2 cas, tu as un moment où ce n’est plus consécutif.
J’ai du mal à comprendre ton critère de jugement pour OK/pas OK.

Dernière modification par grim7reaper (Le 09/03/2012, à 13:01)

Hors ligne

#285 Le 09/03/2012, à 13:03

Pylades

Re : /* Topic des codeurs [7] */

Si, dans la première, 0 est consécutif à 11. C’est ça, le truc.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#286 Le 09/03/2012, à 13:08

grim7reaper

Re : /* Topic des codeurs [7] */

Ha, tu es en modulaire alors ?
Et c’est pour faire quoi derrière ?

Dernière modification par grim7reaper (Le 09/03/2012, à 13:11)

Hors ligne

#287 Le 09/03/2012, à 13:14

Pylades

Re : /* Topic des codeurs [7] */

Bah, c’est pour mon jeu à la con. Une des façons de gagner la partie est d’aligner tous ses pions sur une couronne (de 12 cases).


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#288 Le 09/03/2012, à 14:23

grim7reaper

Re : /* Topic des codeurs [7] */

Bon, après avoir réalisé l’algo en Haskell et l’avoir porté (avec plus ou moins d’élégance…) en Python j’arrive à ça

from itertools import takewhile, starmap
from operator import sub

def pylade(xs):
    # Calcule la liste des differences.
    diff_list = list(starmap(sub, zip(xs, xs[1:])))
    # Trouve le point de rupture de la monotonicité.
    n = len(list(takewhile(lambda x: x == -1, diff_list)))
    # Reordonne la liste.
    sorted_xs = sorted(xs)
    lst = sorted_xs[(n+1):]
    lst.extend(sorted_xs[0:(n+1)])
    # Teste si les nombres se suivent (modulo 12).
    return all(starmap(is_successive, zip(lst, lst[1:])))

def is_successive(a, b):
    res = abs(b - a)
    return res == 1 or res == 11

Il y a peut-être un moyen plus Python de faire ça (ou tout simplement un meilleur algo).

Dernière modification par grim7reaper (Le 09/03/2012, à 14:24)

Hors ligne

#289 Le 09/03/2012, à 14:56

Pylades

Re : /* Topic des codeurs [7] */

Bah, je crois que c’est encore la meilleure solution… hmm

C’est fou que l’on ne puisse pas faire ça simplement…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#290 Le 09/03/2012, à 15:35

Elzen

Re : /* Topic des codeurs [7] */

J'aurais une solution, j'suis pas sûr qu'elle soit élégante du tout, mais elle me semble relativement simple… je ne connais pas assez les détails du python pour pouvoir la mettre en œuvre proprement, mais voilà l'idée :

# On stocke ici le résultat cherché.
r = [0, 9, 10, 11]

# On constitue une liste deux fois trop grande de zéros.
s = [0] * 24

# Puis on passe à 1 les indices correspondant au résultat.
for i in r:
    s[i] = 1
    s[i+12] = 1 # Ça, ça permet que 0 suive 11.

# Et on n'a plus qu'à rechercher si la liste contient quatre 1 consécutifs.
print '1, 1, 1, 1' in str(s)

# C'est sur la dernière étape qu'il y a sûrement plus propre.

Dernière modification par ArkSeth (Le 09/03/2012, à 15:36)

Hors ligne

#291 Le 09/03/2012, à 15:39

Pylades

Re : /* Topic des codeurs [7] */

Mouais, c’est pas implémenté un peu à la Rache, ton truc ? ^^
Je trouve que la solution de grim7reaper est tout de même plus propre…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#292 Le 09/03/2012, à 15:42

Elzen

Re : /* Topic des codeurs [7] */

Code réalisé pour test au fur et à mesure de ma lecture de ton problème ^^

Au départ, j'pensais faire ça avec une chaîne de caractères (d'où le « "" in str() » de la fin), sauf que j'me suis souvenu qu'on n'avait pas le droit de faire des affectations comme ça dans une chaîne.

(D'ailleurs, y aurait aussi plus propre en faisant un tableau de taille douze et en testant à la fin tableau * 2 plutôt que tableau tout seul).

En tout cas, ma solution a l'avantage d'être plus courte et plus lisible, je trouve tongue

Dernière modification par ArkSeth (Le 09/03/2012, à 15:43)

Hors ligne

#293 Le 09/03/2012, à 15:59

Pylades

Re : /* Topic des codeurs [7] */

OMG, mais oui ! Putain, bien vu le coup du tableau * 2, merci beaucoup !


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#294 Le 09/03/2012, à 17:07

sweetly

Re : /* Topic des codeurs [7] */

Je crois que ça marche, ça :

l = [0, 1, 2, 3]
cnt = 0
s = len(l)
if l[0]%12 != (l[s-1]+1)%12:
    cnt +=1
for i in range(1,s):
    if l[i]%12 != (l[i-1]+1)%12:
        cnt += 1
isconsecutif = cnt < 2

Hors ligne

#295 Le 09/03/2012, à 17:14

Pylades

Re : /* Topic des codeurs [7] */

Ah, ouais, c’est un idée. Et en plus c’est relativement simple. wink

Mais j’ai déjà écrit la solution… Dois-je bencher pour voir si je dois la remplacer ? tongue


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#296 Le 09/03/2012, à 17:24

sweetly

Re : /* Topic des codeurs [7] */

Πυλάδης a écrit :

Ah, ouais, c’est un idée. Et en plus c’est relativement simple. wink

Mais j’ai déjà écrit la solution… Dois-je bencher pour voir si je dois la remplacer ? tongue

Si tu veux construire un tableau deux fois trop grand, faire un test dessus plutôt que d'utiliser 2 entiers, c'est ton problème tongue

Hors ligne

#297 Le 09/03/2012, à 17:37

Pylades

Re : /* Topic des codeurs [7] */

J’ai benché et t’es légèrement devant. T’es intégré. wink

Merci.

Toutefois, c’est une version un peu simplifiée par rapport à la tienne :

def test(listing, length):
    dis = 0
    for i in range(length):
        if listing[i] != (listing[i-1] + 1) % 12:
            dis += 1
    return dis < 2

Dernière modification par Πυλάδης (Le 09/03/2012, à 17:43)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#298 Le 09/03/2012, à 17:48

sweetly

Re : /* Topic des codeurs [7] */

Πυλάδης a écrit :

J’ai benché et t’es légèrement devant. T’es intégré. wink

Merci.

Toutefois, c’est une version un peu simplifiée par rapport à la tienne :

def test(listing, length):
    dis = 0
    for i in range(length):
        if listing[i] != (listing[i-1] + 1) % 12:
            dis += 1
    return dis < 2

Oui, bien vu, je sortais d'une session extrême Fortran 77, j'avais zappé l'indice négatif du python. C'est plus joli comme ça.

Hors ligne

#300 Le 16/03/2012, à 22:58

Rolinh

Re : /* Topic des codeurs [7] */

struct statvfs {
    unsigned long  f_bsize;    /* file system block size */
    unsigned long  f_frsize;   /* fragment size */
    fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */
    fsblkcnt_t     f_bfree;    /* # free blocks */
    fsblkcnt_t     f_bavail;   /* # free blocks for unprivileged users */
    fsfilcnt_t     f_files;    /* # inodes */
    fsfilcnt_t     f_ffree;    /* # free inodes */
    fsfilcnt_t     f_favail;   /* # free inodes for unprivileged users */
    unsigned long  f_fsid;     /* file system ID */
    unsigned long  f_flag;     /* mount flags */
    unsigned long  f_namemax;  /* maximum filename length */
};

Comme le man de statvfs ne me donne pas d'infos sur f_fsid, j'ai été voir le man de statfs et là:

statfs(3) a écrit :

Nobody knows what f_fsid is supposed to contain

Grmmmpf, ça ne m'avance pas vraiment tout ça...

Dernière modification par Rolinh (Le 16/03/2012, à 22:59)

Hors ligne