Inscription / Connexion Nouveau Sujet
Niveau exercices
Partager :

algorithme

Posté par
flight
19-02-25 à 23:52

Bonsoir ,

je vous propose l'exercice suivant à faire dans le language de votre choix : soit une sequence de chiffres en "0" et "1" , par  exemple 01110101101001111   , le but est de transformer toutes les séquences de "1" de la facon suivante 01230101201001234, les "0" etant conservés , plus clairement si on tombe sur un paquet de "1" dans la chaine , comme par exemple "11111",   celui ci deviendra 12345.

Posté par
Zormuche
re : algorithme 20-02-25 à 01:17

Bonsoir

Voici un code simple en python
il prend en entrée une liste d'entiers 0 et 1

 Cliquez pour afficher

Posté par
Zormuche
re : algorithme 20-02-25 à 03:10

Pour le plaisir voici une version récursive

 Cliquez pour afficher

Posté par
dpi
re : algorithme 20-02-25 à 08:43

Bonjour,

Trop tard pour me mettre à la programmation (regrets éternels).

Comme j'avais un bidule pour écrire en binaire,j'ai rajouté des formules pour le transformer en"flight"
Voici un extrait :

algorithme

Posté par
candide2
re : algorithme 20-02-25 à 11:11

Bonjour,

 Cliquez pour afficher

Posté par
candide2
re : algorithme 21-02-25 à 11:27

Bonjour,

Programme alternatif (toujours en python)

 Cliquez pour afficher

Posté par
dpi
re : algorithme 21-02-25 à 14:03

Grace à mon bidule on peut trouver des cas "amusants"
    n                                  binaire                                        "fltght"
130430 -->11111111011111110-->1234567012345670

Posté par
dpi
re : algorithme 21-02-25 à 14:13

Et la réciproque...
le nombre binaire de l'exercice correspond  à120 399

Posté par
sanantonio312
re : algorithme 21-02-25 à 16:46

Pour info, voici un échange que je viens d'avoir avec ChatGPT:

Citation :
Vous avez dit :
transformer une séquence de chiffres en "0" et "1" en une nombre de "1" consécutifs en laissant les "0"

ChatGPT a dit :
Si vous avez une séquence binaire composée de "0" et "1" et que vous souhaitez remplacer chaque suite consécutive de "1" par le nombre de "1" qu'elle contient (tout en laissant les "0" inchangés), voici un exemple de transformation :
Exemple :

Entrée :
001110011100011

Sortie :
003300440011
Algorithme :

    Parcourir la séquence en comptant les "1" consécutifs.
    Lorsqu'un "0" est rencontré ou que la séquence se termine, remplacer la suite de "1" par leur nombre.
    Conserver les "0" inchangés.

Implémentation en Python :

Voici un code pour effectuer cette transformation :

def transformer_sequence(sequence):
    resultat = ""
    compteur = 0  # Compte les '1' consécutifs
    
    for i, char in enumerate(sequence):
        if char == '1':
            compteur += 1  # On compte les "1"
        else:
            if compteur > 0:
                resultat += str(compteur) * compteur  # Remplacer les "1" par leur nombre
                compteur = 0  # Réinitialiser le compteur
            resultat += '0'  # Garder les "0" inchangés
    
    # Gérer le cas où la séquence se termine par des "1"
    if compteur > 0:
        resultat += str(compteur) * compteur

    return resultat

# Exemple d'utilisation
sequence = "001110011100011"
print(transformer_sequence(sequence))  # Résultat : "003300440011"

Si tu veux une autre version (comme afficher juste un chiffre par groupe au lieu de le répéter), dis-moi !

Vous avez dit :
La sortie de l'exemple proposé devrait être 0030030002

ChatGPT a dit :
D'accord ! Tu veux remplacer chaque groupe de "1" par un seul chiffre indiquant la taille du groupe, tout en laissant les "0" intacts.

Voici le code Python qui fait exactement ça :

def transformer_sequence(sequence):
    resultat = ""
    compteur = 0  # Pour compter les "1" consécutifs

    for i, char in enumerate(sequence):
        if char == '1':
            compteur += 1  # On compte les "1"
        else:
            if compteur > 0:
                resultat += str(compteur)  # Ajouter la taille du groupe de "1"
                compteur = 0  # Réinitialiser le compteur
            resultat += '0'  # Ajouter le "0" inchangé
    
    # Gérer le cas où la séquence se termine par des "1"
    if compteur > 0:
        resultat += str(compteur)

    return resultat

# Exemple d'utilisation
sequence = "001110011100011"
print(transformer_sequence(sequence))  # Résultat : "0030030002"

Explication :

    On parcourt la chaîne et on compte les "1" consécutifs.
    Lorsqu'on rencontre un "0" ou la fin de la chaîne :
        Si un groupe de "1" a été compté, on ajoute sa taille au résultat.
        On ajoute les "0" inchangés.
    Si la séquence se termine par un groupe de "1", on ajoute aussi sa taille à la fin.

Test :

Entrée :
001110011100011
Sortie attendue :
0030030002 ✅

Dis-moi si tu veux encore ajuster quelque chose ! 😊

Reconnaissons que même si la première réponse est étrange, le résultat est impressionnant en moins d'une minute tous échanges compris.

Posté par
verdurin
re : algorithme 21-02-25 à 18:32

Bonsoir à tous.
@sanantonio312 : je ne trouve pas le résultat impressionnant, finalement tu n'obtiens pas le résultat voulu.

J'ai écris une fonction python, mais elle ressemble tellement à celle de Zormuche que je ne comptais pas la poster.
Comme je participe au fil je la mets quand même.

 Cliquez pour afficher

Posté par
dpi
re : algorithme 22-02-25 à 07:30

Perso ,j'ai trouvé en1 minute..

a)  écrire  une suite de 1 et de 0 (comme j'avais déjà un tableur en binaire  18 colonnes de B à S)  5sec.

b) formule ( dans la colonne U  par exemple :
si( B n =0;0;1)

c)dans la colonne V
si (Un=0;0;Un+1) recopiée jusqu'à  AL

d) recopie sur toutes les lignes disponibles

Posté par
sanantonio312
re : algorithme 22-02-25 à 10:11

Citation :
je ne trouve pas le résultat impressionnant

Moi, si:
J'exprime mon attente en français.
J'obtiens une réponse qui ne me satisfait pas.
Je précise ma demande.
Et paf! En si peu de temps.
En fait, je suis impressionné parce que je ne parviens pas à imaginer comment fonctionne une IA. Je suis un ignare dans ce domaine comme dans bien d'autres
Ceci dit, en vérité, je suis encore plus impressionné par le volume, la diversité et la qualité des réponses de vanoise sur l'île de la physique pour ne citer personne sur l'île des maths.

Posté par
candide2
re : algorithme 22-02-25 à 11:13

sanantonio312 @ 22-02-2025 à 10:11

Citation :
je ne trouve pas le résultat impressionnant

Moi, si:
J'exprime mon attente en français.
J'obtiens une réponse qui ne me satisfait pas.
Je précise ma demande.
Et paf! En si peu de temps.
En fait, je suis impressionné parce que je ne parviens pas à imaginer comment fonctionne une IA. Je suis un ignare dans ce domaine comme dans bien d'autres
Ceci dit, en vérité, je suis encore plus impressionné par le volume, la diversité et la qualité des réponses de vanoise sur l'île de la physique pour ne citer personne sur l'île des maths.


"Et paf! En si peu de temps..."

On reçoit une nouvelle réponse aussi fausse que la précédente


Chat GPT ne peut pas résoudre fiablement des problèmes de logique, il n'est pas fait pour cela.
Il y a de nouvelles évolutions qui améliorent le "raisonnement logique", mais je n'en sais guère plus.

Le hic, est que ChatGPT répond aux problèmes tels qu'il les a interprété et souvent erronément (sur les problèmes de logique, ou même sur des problèmes simplissimes d'électricité générale par exemple), mais il le fait de manière tellement "jolie" dans la forme qu'il trompe ainsi les non avertis.

Mais ce n'est que mon avis.

Posté par
dpi
re : algorithme 22-02-25 à 11:16

Le plus impressionnant   c'est l'impression de parler à une personne
qui en plus est polie.....sans être vexée le moins du monde.

Posté par
flight
re : algorithme 23-02-25 à 00:32

Bonjour et merci pour vos participations ...pas difficile à faire finalement...
de mon coté en une poignée de ligne avec vba :

Sub transformation_chaine()
Dim w As String
chaine = "0111010111001001111"
j = 1
 For i = 1 To Len(chaine)
  If Mid(chaine, i, 1) = "1" Then
   w = w & j
   j = j + 1
   Else
   j = 1
   w = w & "0"
  End If
 Next
Debug.Print w ' retourne 0123010123001001234

End Sub

Posté par
Zormuche
re : algorithme 23-02-25 à 02:57

Voici une version "en une ligne" dérivée de ma proposition récursive, pour rigoler :


def TRS(l):
    return l if len(l)==1 else TRS(l[:-1]) + [0 if l[-1]==0 else TRS(l[:-1])[-1]+1]


ça marche  



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !