[PYTHON] Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.

Einführung

Ich wollte Algorithmen wie das Blasensortieren lernen, also habe ich versucht, eine zufällige FizzBuzz-Spalte als Ausgangspunkt zu sortieren.

Erstellen Sie eine zufällige FizzBuzz-Spalte von Interesse.

Ich habe eine Funktion fzbz () definiert, die einen numerischen Wert entsprechend in FizzBuzz ändert, und make_random_fizzbuzz (), die ihn in zufälliger Reihenfolge ändert.

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

Insbesondere besteht die Lösung für diesen Artikel darin, die Liste wie die folgende in einem FizzBuzz-Stil zu sortieren. (Liste erstellt mit der obigen Funktion) 001.png

Was ist Blasensortierung überhaupt (zitiert von anderen Seiten)?

Die Blasensortierung ist ein Ausrichtungsalgorithmus, der die Werte des Basiselements und anderer Elemente in einer Liste vergleicht und sie gemäß den Bedingungen austauscht.

Die Bedingung ist die Größenbeziehung des Wertes. Sortieren Sie die Liste in absteigender Reihenfolge des Werts oder in absteigender Reihenfolge des Werts.

Diese Sortierung wird als Blasensortierung bezeichnet, da bei dieser Sortierung Elemente mit höheren oder niedrigeren Werten angezeigt werden.

Algorithmusanalyse Schritte zum Anordnen der Liste in aufsteigender Reihenfolge.

Extrahieren Sie ein Element aus dem Listenbasiselement 'A'. Vergleichen Sie die Werte von Element 'A' und dem nächsten Element 'B' Tauschen Sie die Werte von Element 'A' und Element 'B' aus, wenn Element 'A' größer als Element 'B' ist. Vergleiche / tausche mit jedem Element wie Element 'A' und Element 'C', Element 'A' und Element 'D' bis zum Ende der Liste aus Das Element mit dem höchsten Wert oder das Element mit dem niedrigsten Wert in der Liste wird am Basispunkt angezeigt. Fahren Sie mit dem Basiselement (Element 'B') fort und wiederholen Sie die Schritte 2 bis 6 bis zum Ende der Liste Die Ausrichtung wird abgeschlossen, indem ein Round-Robin-Vergleich wie oben beschrieben durchgeführt und ein Austausch ausgeführt wird, der den Bedingungen entspricht. http://www.codereading.com/algo_and_ds/algo/bubble_sort.html

Ich habe eine Blasensorte in Python geschrieben, die sich vielleicht geringfügig von der oben genannten unterscheidet, aber wahrscheinlich dieselbe ist.

Erstens eine Funktion, die eine zufällige Folge von Zahlen erzeugt.

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

Eine Funktion, die die durch die obige Funktion erzeugte Zahlenfolge sortiert und deren Bedeutung nicht gut verstanden wird.

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

Zu korrigierende Punkte

Das Problem mit der zufälligen FizzBuzz-Sequenz scheint die Größenbeziehung zu sein.

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

Mit anderen Worten, es scheint, dass wir etwas gegen diesen Bereich unternehmen sollten, in dem die Größe beurteilt wird.

Zusammenfassung der Korrektur

Daher der Code, der die Zähler f, b, fb zum Digitalisieren der Zeichenketten Fizz, Buzz, FizzBuzz und definiert

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

Eine Funktion, die Fizz, Buzz, FizzBuzz basierend auf dem Zähler quantifiziert.

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, eine Funktion, die den Zähler aktualisiert, wenn FizzBuzz angezeigt wird

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
  

Ich habe gemacht und versucht, jedes Element zu vergleichen und den Zähler mit diesen zu aktualisieren.

    (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())

Ergebnis

Das zufällige FizzBuzz wurde sortiert! !! 002.png

Recommended Posts

Ich habe versucht, eine zufällige FizzBuzz-Spalte mit Blasensortierung zu sortieren.
Ich habe versucht, die Blasensortierung nach Sprache zu programmieren
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Ich habe versucht, mit Quantx eine Linie mit gleitendem Durchschnitt des Volumens zu implementieren
Sortieren Sie zufällige FizzBuzz-Spalten mit schneller Sortierung
Ich habe versucht, das Problem der Kombinationsoptimierung mit Qiskit zu lösen
Ich habe versucht, mit Hy ・ Define a class zu beginnen
Ich habe versucht, Harry Potters Gruppierungshut mit CNN umzusetzen
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ein Memorandum beim automatischen Erwerb mit Selen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Lernen Sie das schnelle Sortieren, um zufällige FizzBuzz-Spalten zu sortieren
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe eine Web-API erstellt
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe versucht, eine Blockchain zu implementieren, die tatsächlich mit ungefähr 170 Zeilen funktioniert
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich habe ein Systemkonfigurationsdiagramm mit Diagrams on Docker geschrieben
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Ausführung] (3/3) zu erstellen.
Ich habe versucht, mit django eine E-Mail zum Abschluss der Registrierung von Google Mail zu senden.
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe versucht, alle Entscheidungsbäume des zufälligen Waldes mit SVG zu visualisieren
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Setup] (1/3) zu erstellen.
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
Ich habe versucht, eine Super-Resolution-Methode / ESPCN zu erstellen
Ich habe versucht, das Lesen von Dataset mit PyTorch zu implementieren
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Ich habe versucht, GAN (mnist) mit Keras zu bewegen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, mit OpenCV Bewegungen schnell zu erkennen
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich möchte ein Spiel mit Python machen
Ich habe versucht, CloudWatch-Daten mit Python abzurufen