π
<-
Chat plein-écran
[^]

Tri tarot pour les gens qui s'ennuient

Discussions scientifiques et scolaires

Tri tarot pour les gens qui s'ennuient

Message non lude Hayleia » 01 Jan 2021, 10:37

La flemme de réexpliquer après avoir perdu mon post dans une erreur sql quelconque donc je colle juste des trucs qui restent dans mon clipboard :troll:
Si vous connaissez pas le tarot, allez sur wikipedia :troll:

Bon GOG Galaxy met 20 ans à synchroniser mes sauvegardes après que j'aie fait des trucs chelous sur mon ordi donc je rééxplique :troll:
Il y a 4 couleurs, cœurs,trèfles,carreaux,piques (hearts,clubs,diamonds,spades). Chacune a les cartes de 1 à 10, ainsi que les figures (faces) valet,cavalier,reine,roi (jack,knight,queen,king).
En plus de ça il y a les atouts (trumps) de 1 à 21, plus l'excuse qu'on va compter comme l'atout 0.

Bref, ordonner ses cartes d'abord par couleur, et les ordonner de manière croissante à l'intérieur des couleurs est pratique mais ça revient à un tri lexicographique comme disait Bisam hier (donc 0 défi) et ça donne des indications à vos adversaires sur les cartes qu'il vous reste.

Le tri que je propose est
- regrouper par couleur, en triant les couleurs dans l'ordre cœurs, trèfles, carreaux, piques, atouts (ordre arbitraire pour standardiser et valider :P)
- à l'intérieur des couleurs trier les suites dans l'ordre croissant (c'est à dire que la suite 1,2,3,4 est à mettre avant la suite 7,8,9)
- à l'intérieur des suites, trier de manière décroissante (c'est à dire en fait pas 1,2,3,4 mais 4,3,2,1, donc pas 1,2,3,4,7,8,9 mais 4,3,2,1,9,8,7)
- sauf les figures qu'on met toujours dans l'ordre croissant, et sauf excuse et 1 d'atout qu'on met toujours au début des atouts (dans cet ordre) et le 21 à la fin

Exemples rapides :
♥️5 ♥️4 ♥️9 ♥️8 ♠️1 ♠️3 ♠️5
♥️2 ♥️4 ♥️8 ♠️1 ♠️3 ♠️5 (il n'y a pas de suites)

Base de code python.
Code: Tout sélectionner
from enum import Enum, IntEnum, auto
import random

class Faces(IntEnum):
   Jack = 11
   Knight = auto()
   Queen = auto()
   King = auto()

class Colors(Enum):
   hearts = auto()
   clubs = auto()
   diamonds = auto()
   spades = auto()
   trump = auto()

class Card:
   def __init__(self, color, value):
      self.color = color
      self.value = value

   def __lt__(self, other):
      if self.color != other.color:
         return self.color < other.color
      return self.value < other.value

def deckAsString(deck):
   return '\n'.join([f'{c.color.name}-{c.value.name if isinstance(c.value, Faces) else c.value}' for c in deck])
def printDeck(deck):
   print(deckAsString(deck))

# generate the whole deck
fulldeck = []
for color in Colors:
   if color is Colors.trump:
      # generate from 0 to 21 (0 being excuse)
      for i in range(22): fulldeck.append(Card(color, i))
   else:
      # generate from 1 to 10 and the 4 faces
      for i in range(10): fulldeck.append(Card(color, i+1))
      for face in Faces: fulldeck.append(Card(color, face))

#printDeck(fulldeck)

# pick 24
deck = [c for c in fulldeck]
random.shuffle(deck)
while len(deck) != 24:
   deck.pop()

printDeck(deck)

Image
ImageImageImage
Pokemon Topaze (Axe) discussion and download links here
(19:29:36) noelnadal: plus sérieusemen​t, j'ai très peu de problèmes
(22:45:44) Clifward: J'aime rire du malheur des autres :troll:

(2017.11.18 - 17:07:12) Fireworks: Hayleia !!!!!
(2017.11.18 - 17:07:19) TI-Bot: Fireworks has been logged out (Kicked).
(2017.11.18 - 17:07:22) TI-Bot: Ban of user Fireworks revoked.
(2017.11.18 - 17:07:25) TI-Bot: Fireworks logs into the Chat.
(2017.11.18 - 17:07:28) Fireworks: <3
(2017.11.18 - 17:07:31) Fireworks: 208
Avatar de l’utilisateur
HayleiaGénéreux
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Prochain niv.: 43.8%
 
Messages: 2509
Images: 2
Inscription: 30 Aoû 2011, 08:22
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Templar

Re: Tri tarot pour les gens qui s'ennuient

Message non lude Bisam » 01 Jan 2021, 15:57

Voici ce que j'ai pondu pour trier une couleur. Je te laisse le soin de l'utiliser à bon escient.
Code: Tout sélectionner
def tri_chelou(couleur):
    triee = sorted(couleur)
    n = len(triee)
    d, f = 0, 1
    c = triee[0] + 1
    while f < n:
        if triee[f] > c:
            triee[d:f] = triee[d:f][::-1]
            d = f
            c = triee[d]
            if c > 10:
                f = n
        f += 1
        c += 1
    return triee
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.5%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Tri tarot pour les gens qui s'ennuient

Message non lude Hayleia » 01 Jan 2021, 16:03

Suis en train de faire une usine d'un autre genre de mon côté :troll:
Probablement pas très pythonesque mais ça me va.

(Et sinon j'ai corrigé la génération de paquet de 24 cartes qui pouvait sortir des cartes en double -.-)

Image
ImageImageImage
Pokemon Topaze (Axe) discussion and download links here
(19:29:36) noelnadal: plus sérieusemen​t, j'ai très peu de problèmes
(22:45:44) Clifward: J'aime rire du malheur des autres :troll:

(2017.11.18 - 17:07:12) Fireworks: Hayleia !!!!!
(2017.11.18 - 17:07:19) TI-Bot: Fireworks has been logged out (Kicked).
(2017.11.18 - 17:07:22) TI-Bot: Ban of user Fireworks revoked.
(2017.11.18 - 17:07:25) TI-Bot: Fireworks logs into the Chat.
(2017.11.18 - 17:07:28) Fireworks: <3
(2017.11.18 - 17:07:31) Fireworks: 208
Avatar de l’utilisateur
HayleiaGénéreux
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Prochain niv.: 43.8%
 
Messages: 2509
Images: 2
Inscription: 30 Aoû 2011, 08:22
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Templar

Re: Tri tarot pour les gens qui s'ennuient

Message non lude Hayleia » 02 Jan 2021, 10:58

Bon mon usine honteuse fonctionne mais je partage pas parce qu'elle est ridicule :troll:

Sinon pour le tri de Bisam, il suffit presque de rajouter ça.
Code: Tout sélectionner
def BisamSortDeck(deck):
   ret = []
   for color in Colors:
      ret += [Card(color, v) for v in tri_chelou([c.value for c in deck if c.color == color])]
   return ret


"Presque" parce que du coup
- ça ne met pas les atouts 0 et 1 au début, et 21 à la fin
- ça arrête de trier les atouts "dans l'ordre décroissant si nécessaire) à partir de 10

Mais bon, c'est pas compliqué à changer vite fait :P

Image
ImageImageImage
Pokemon Topaze (Axe) discussion and download links here
(19:29:36) noelnadal: plus sérieusemen​t, j'ai très peu de problèmes
(22:45:44) Clifward: J'aime rire du malheur des autres :troll:

(2017.11.18 - 17:07:12) Fireworks: Hayleia !!!!!
(2017.11.18 - 17:07:19) TI-Bot: Fireworks has been logged out (Kicked).
(2017.11.18 - 17:07:22) TI-Bot: Ban of user Fireworks revoked.
(2017.11.18 - 17:07:25) TI-Bot: Fireworks logs into the Chat.
(2017.11.18 - 17:07:28) Fireworks: <3
(2017.11.18 - 17:07:31) Fireworks: 208
Avatar de l’utilisateur
HayleiaGénéreux
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Prochain niv.: 43.8%
 
Messages: 2509
Images: 2
Inscription: 30 Aoû 2011, 08:22
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Templar

Re: Tri tarot pour les gens qui s'ennuient

Message non lude Bisam » 02 Jan 2021, 11:22

Voici la version 2.0 . Attention, j'ai changé les paramètres.
Code: Tout sélectionner
def tri_chelou(hauteurs, couleur):
    """Renvoie une liste de valeurs dans l'ordre 'Hayleia'.
    hauteurs est la liste des numéros des cartes,
    couleur est le nom de la couleur"""
   
    triee = sorted(hauteurs) # on fait un premier tri dans l'ordre croissant
   
    if couleur is Colors.trump:
        pre = [i for i in triee if i<2] # On met à part excuse et petit
        post = [i for i in triee if i>20] # et 21
        triee = [i for i in triee if 1<i<21] # on ne garde que le reste
    else:
        pre = []
        post = [i for i in triee if i>10] # on met à part les figures
        triee = [i for i in triee if i<11] # on ne garde que le reste
   
    n = len(triee)
    d, f = 0, 1
    c = triee[0] + 1
    while f < n:
        if triee[f] > c:
            triee[d:f] = triee[d:f][::-1]
            d = f
            c = triee[d]
        f += 1
        c += 1
   
    return pre + triee + post
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.5%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile


Retourner vers Maths, physique, informatique et autre...

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 12 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2448 utilisateurs:
>2439 invités
>5 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)