[PYTHON] J'ai essayé de trier une colonne FizzBuzz aléatoire avec un tri à bulles.

introduction

Je voulais apprendre des algorithmes tels que le tri des bulles, alors j'ai essayé de trier une colonne FizzBuzz aléatoire comme point de départ.

Créez une colonne FizzBuzz aléatoire d'intérêt.

J'ai défini une fonction fzbz () qui change une valeur numérique en FizzBuzz le cas échéant, et make_random_fizzbuzz () qui la change dans un ordre aléatoire.

def fzbz(n):
  if (n%15) == 0:
    return "FizzBuzz"
  elif (n%5) == 0:
    return "Buzz"
  elif (n%3) == 0:
    return "Fizz"
  else:
    return n

import random
def make_random_fizzbuzz(start=1,finish=100):
  seq = range(start,finish+1)
  random_fizzbuzz = []
  while seq:
    random_fizzbuzz.append(fzbz(seq.pop(random.randint(0,len(seq)-1))))
  return random_fizzbuzz

Plus précisément, la solution à cet article est de trier la liste comme celle ci-dessous dans un style FizzBuzz. (Liste créée par la fonction ci-dessus) 001.png

Qu'est-ce que le tri à bulles en premier lieu (cité sur d'autres sites)

Le tri à bulles est un algorithme d'alignement qui compare les valeurs de l'élément de base et d'autres éléments de la liste et les échange en fonction des conditions.

La condition est la relation d'amplitude de la valeur. Triez la liste par ordre décroissant de valeur ou par ordre décroissant de valeur.

Ce tri est appelé un tri à bulles car il semble que des éléments avec des valeurs supérieures ou inférieures émergent lorsque vous effectuez ce tri.

Analyse d'algorithme Étapes pour organiser la liste par ordre croissant.

Extraire un élément de l'élément de base de liste «A» Comparez les valeurs de l'élément 'A' et de l'élément suivant 'B' Échangez les valeurs de l'élément "A" et de l'élément "B" si l'élément "A" est supérieur à l'élément "B" Comparer / échanger avec chaque élément comme élément 'A' et élément 'C', élément 'A' et élément 'D' jusqu'à la fin de la liste L'élément avec la valeur la plus élevée ou l'élément avec la valeur la plus basse dans la liste émerge au point de base. Passez à l'élément de base (élément 'B') et répétez les étapes 2 à 6 jusqu'à la fin de la liste L'alignement est terminé en effectuant une comparaison à tour de rôle comme décrit ci-dessus et en exécutant un échange qui correspond aux conditions. http://www.codereading.com/algo_and_ds/algo/bubble_sort.html

J'ai écrit une sorte de bulle en python qui peut être légèrement différente de ce qui précède, mais probablement de la même nature.

Tout d'abord, une fonction qui génère une séquence aléatoire de nombres.

import random
def make_randoms(start=1,finish=100):
  seq = range(start,finish+1)
  randoms = []
  while seq:
    randoms.append(seq.pop(random.randint(0,len(seq)-1)))
  return randoms

Une fonction qui trie la séquence de nombres créée par la fonction ci-dessus, et dont la signification n'est pas bien comprise.

def bubble_sort(target):
  limit = len(target)-1
  while limit > 0:
    i = 0
    while i<limit:
      if target[i]>target[i+1]:
        target[i], target[i+1] = target[i+1], target[i]
      i += 1
    limit -= 1
  return target

Points à corriger

Il semble que le problème avec les colonnes FizzBuzz aléatoires soit la relation de taille.

    if target[i]>target[i+1]:

En d'autres termes, il semble que nous devrions faire quelque chose à propos de cette zone où la taille est jugée.

Résumé de la correction

Par conséquent, le code qui définit les compteurs f, b, fb pour la numérisation des chaînes de caractères Fizz, Buzz, FizzBuzz et

    (f,b,fb) = (3,5,15)

Une fonction qui numérise Fizz, Buzz, FizzBuzz en fonction du compteur,

def zbzf(n,f,b,fb):
  n = str(n)
  if n == 'FizzBuzz':
    return fb
  elif n == 'Buzz':
    return b
  elif n == "Fizz":
    return f
  else:
    return int(n)

Fizz, Buzz, une fonction qui met à jour le compteur lorsque FizzBuzz apparaît

def next_count(n,f,b,fb):
  if n == 'FizzBuzz':
    fb += 15
  elif n == 'Buzz':
    if (b%15) == 10:
      b += 10
    else:
      b += 5 
  elif n == "Fizz":
    if (f%15) == 12:
      f += 6
    else:
      f += 3
  return f, b, fb
  

J'ai créé et essayé de comparer chaque élément et de mettre à jour le compteur en les utilisant.

    (f,b,fb) = (3,5,15)
    while i<limit:
      if zbzf(target[i],f,b,fb)>zbzf(target[i+1],f,b,fb):
        target[i], target[i+1] = target[i+1], target[i]
      f,b,fb = next_count(target[i],f,b,fb)

code

import random
def fzbz(n):
  if (n%15) == 0:
    return "FizzBuzz"
  elif (n%5) == 0:
    return "Buzz"
  elif (n%3) == 0:
    return "Fizz"
  else:
    return n
    
def zbzf(n,f,b,fb):
  n = str(n)
  if n == 'FizzBuzz':
    return fb
  elif n == 'Buzz':
    return b
  elif n == "Fizz":
    return f
  else:
    return int(n)

def make_random_fizzbuzz(start=1,finish=100):
  seq = range(start,finish+1)
  random_fizzbuzz = []
  while seq:
    random_fizzbuzz.append(fzbz(seq.pop(random.randint(0,len(seq)-1))))
  return random_fizzbuzz

def next_count(n,f,b,fb):
  if n == 'FizzBuzz':
    fb += 15
  elif n == 'Buzz':
    if (b%15) == 10:
      b += 10
    else:
      b += 5 
  elif n == "Fizz":
    if (f%15) == 12:
      f += 6
    else:
      f += 3
  return f, b, fb
  
def fizzbuzz_sort(target):
  limit = len(target)-1
  while limit > 0:
    i = 0
    (f,b,fb) = (3,5,15)
    while i<limit:
      if zbzf(target[i],f,b,fb)>zbzf(target[i+1],f,b,fb):
        target[i], target[i+1] = target[i+1], target[i]
      f,b,fb = next_count(target[i],f,b,fb)
      i += 1
    limit -= 1
  return target
print fizzbuzz_sort(make_random_fizzbuzz())

résultat

Le FizzBuzz aléatoire a été trié! !! 002.png

Recommended Posts

J'ai essayé de trier une colonne FizzBuzz aléatoire avec un tri à bulles.
J'ai essayé de programmer la bulle de tri par langue
J'ai essayé de générer une chaîne de caractères aléatoire
J'ai essayé d'implémenter une ligne moyenne mobile de volume avec Quantx
Trier les colonnes FizzBuzz aléatoires avec un tri rapide
J'ai essayé de résoudre le problème d'optimisation des combinaisons avec Qiskit
J'ai essayé de commencer avec Hy ・ Définir une classe
J'ai essayé de mettre en œuvre le chapeau de regroupement de Harry Potter avec CNN
J'ai essayé d'écrire dans un modèle de langage profondément appris
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
Un mémorandum lors de l'acquisition automatique avec du sélénium
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de créer des taureaux et des vaches avec un programme shell
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai essayé de créer un linebot (implémentation)
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé de créer un linebot (préparation)
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
Apprenez le tri rapide pour trier les colonnes FizzBuzz aléatoires
J'ai essayé un langage fonctionnel avec Python
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai créé une API Web
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé de mettre en œuvre une blockchain qui fonctionne réellement avec environ 170 lignes
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Development] (2/3)
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
J'ai écrit un diagramme de configuration du système avec des diagrammes sur Docker
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Execution] (3/3)
J'ai essayé d'envoyer un e-mail de fin d'inscription depuis Gmail avec django.
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python
J'ai essayé de visualiser tous les arbres de décision de la forêt aléatoire avec SVG
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Setup] (1/3)
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
J'ai essayé de créer un service de raccourcissement d'url sans serveur avec AWS CDK
J'ai essayé de créer une méthode de super résolution / ESPCN
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé d'utiliser lightGBM, xg boost avec Boruta
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
J'ai essayé de déplacer GAN (mnist) avec keras
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de détecter rapidement un mouvement avec OpenCV
J'ai essayé d'intégrer Keras dans TFv1.1
Je veux faire un jeu avec Python
J'ai essayé d'obtenir des données CloudWatch avec Python