Ich habe die Anzahl der Taxis mit Ruby überprüft

Der zweite Teil einer Reihe von Überprüfungen mysteriöser Zahlen mit Ruby! (Wie oft wird es noch weitergehen?)

Klicken Sie hier für das vorherige 1. ↓ Ich habe bei Ruby nachgefragt, ob eine Ganzzahl in einem bestimmten Bereich eine Capreca-Zahl enthält

Diesmal ist es ** Anzahl der Taxis **. Wie beim letzten Mal habe ich das Material von Youtube erhalten.

"Mathematik und Physik der Universität" lernte an der Vorbereitungsschule Vertraut mit Ramanujans genialer Episode [Anzahl der Taxis]

Wie viele Taxis gibt es?

Die n-te Taxinummer (bezeichnet als Taxinummer, Ta (n) oder Taxicab (n)) ist das kleinste Positiv, das auf n Arten als Summe von ** zwei kubischen Zahlen ** dargestellt wird. Definiert als Ganzzahl von. Der Name "Anzahl der Taxis" stammt aus einer Episode, in der Shrinivasa Ramanujan darauf hinwies, dass es Ta (2) für die Steuernummer 1729 war, die Hardy nahm.

Quelle: Wikipedia

** Gesetzliche Nummer ** ist eine Nummer, die der Würfel einer bestimmten Nummer ist **. Da die quadratische Zahl quadratisch ist, handelt es sich um ein Evolutionssystem.

スクリーンショット 2020-07-04 18.31.02.png

Und die Anzahl der Taxis scheint auf verschiedene Weise durch die Summe der gesetzgebenden Zahlen ausgedrückt zu werden (Addition)

Ich habe es nachgeschlagen

Inhalt: Die kleinste positive ganze Zahl, die auf n Arten durch "x ^ 3 + y ^ 3" dargestellt wird (einschließlich der Ausgabe der Kombination von "x, y"). Bedingung: "(1 ≤ x ≤ y ≤ 500)"

taxi.rb


def safe_invert(orig_hash)
  orig_hash.each_key.group_by { |key| orig_hash[key] }.sort.to_h
end

hash = {}

(1..500).each do |y|
  (1..500).each do |x|
    hash.store([x, y], x ** 3 + y ** 3)
    if x == y
      break
    end
  end
end

taxi = []
n = 1

safe_invert(hash).each do |k, v|
  if v.size == n
    taxi.push("Ta(#{n}) => #{k}: #{v}")
    n += 1
  end
end

puts taxi
Ta(1) => 2: [[1, 1]]
Ta(2) => 1729: [[9, 10], [1, 12]]
Ta(3) => 87539319: [[255, 414], [228, 423], [167, 436]]

Die Mindestzahl, die auf drei Arten als Summe der Gesetzgebungszahlen ausgedrückt werden kann, beträgt bereits 87,53 Millionen, was eine ziemlich große Zahl ist.

Codebeschreibung

Ich werde Schritt für Schritt erklären Versuchen wir der Einfachheit halber, die Reichweite zu verringern

Bedingung: "(1 ≤ x ≤ y ≤ 5)"

taxu.rb


hash = {}

(1..5).each do |y|
  (1..5).each do |x|
    hash.store([x, y], x ** 3 + y ** 3)
  end
end

p hash
{[1, 1]=>2, [2, 1]=>9, [3, 1]=>28, [4, 1]=>65, [5, 1]=>126,
[1, 2]=>9, [2, 2]=>16, [3, 2]=>35, [4, 2]=>72, [5, 2]=>133,
[1, 3]=>28, [2, 3]=>35, [3, 3]=>54, [4, 3]=>91, [5, 3]=>152,
[1, 4]=>65, [2, 4]=>72, [3, 4]=>91, [4, 4]=>128, [5, 4]=>189,
[1, 5]=>126, [2, 5]=>133, [3, 5]=>152, [4, 5]=>189, [5, 5]=>250}

Geben Sie zuerst x und y eine ganze Zahl von 1 bis 5.

Lassen Sie uns die Antwort (Summe) nachschlagen, die die Summe der gewürfelten Zahlen ist, und sie zu "Hash" hinzufügen. Die store -Methode der Hash-Klasse ist eine Methode, die ein Element mit dem Schlüssel als erstem Argument und dem Wert als zweitem Argument hinzufügt.

Es gibt 5 x 5 = 25 verschiedene Längen für "Hash".

スクリーンショット 2020-07-04 18.43.14.png

Wie Sie der Tabelle entnehmen können, ist die Antwort, die Sie durch Vertauschen von x und y erhalten, dieselbe. Die Antwort lautet "133", sowohl wenn "(x, y) = (2, 5)" als auch wenn "(x, y) = (5, 2)". Dies zählt nicht als zwei Möglichkeiten. Es gibt einen Weg. Es ist also dieser Bereich, der in der Tabelle gefunden werden muss

スクリーンショット 2020-07-04 18.57.40.png

Wenn also "x" und "y" gleich sind, fügen Sie "hash" und "break" ein Element hinzu, um die Schleife zu unterbrechen.

taxu.rb


hash = {}

(1..5).each do |y|
  (1..5).each do |x|
    hash.store([x, y], x ** 3 + y ** 3)
    if x == y
      break
    end
  end
end

p hash
{[1, 1]=>2,
[1, 2]=>9, [2, 2]=>16,
[1, 3]=>28, [2, 3]=>35, [3, 3]=>54,
[1, 4]=>65, [2, 4]=>72, [3, 4]=>91, [4, 4]=>128,
[1, 5]=>126, [2, 5]=>133, [3, 5]=>152, [4, 5]=>189, [5, 5]=>250}

Dann die zweite Hälfte Insbesondere das Innere der Methode ist kompliziert.

Im Hash enthielt der Schlüssel das Array "[x, y]" und der Wert das Element "Summe der kanonischen Zahlen". Wenn Sie die Methode "safe_invert" durchlaufen, wird ein Hash erstellt, bei dem Schlüssel und Wert unter Berücksichtigung der Duplizierung umgekehrt werden.

taxi.rb


def safe_invert(orig_hash)
  orig_hash.each_key.group_by { |key| orig_hash[key] }.sort.to_h
end

p safe_invert(hash)
{2=>[[1, 1]], 9=>[[1, 2]], 16=>[[2, 2]], 28=>[[1, 3]], 35=>[[2, 3]],
54=>[[3, 3]], 65=>[[1, 4]], 72=>[[2, 4]], 91=>[[3, 4]], 126=>[[1, 5]],
128=>[[4, 4]], 133=>[[2, 5]], 152=>[[3, 5]], 189=>[[4, 5]], 250=>[[5, 5]]}

each_key.group_by { |key| orig_hash[key] }Mit jedem Schlüssel als Wert, Erstellen Sie einen Hash mit "orig_hash [Schlüssel]" (dh Wert) als Schlüssel. Inversion des Schlüsselwerts.

Es ist eine schwierige Idee, aber ich habe darauf hingewiesen Hash # invert (Ruby 2.7.0 Referenzhandbuch)

Und da es in aufsteigender Reihenfolge des Schlüssels mit "sort" sortiert und gleichzeitig in ein Array konvertiert wird, Kehren Sie mit .to_h zum Hash zurück.

Ich denke, dass der Wert dieser Verarbeitung nicht zum Vorschein kommt, wenn "x, y" 1 bis 5 ist. Wenn Sie den Bereich von 1 bis 12 erweitern, sodass ** 1729 ** (Ta (2)) angezeigt wird, sieht das Ausgabeergebnis folgendermaßen aus ...

{ ......, 1729=>[[9, 10], [1, 12]], ......}

Sie können sehen, dass die Länge des Wertearrays jetzt zwei beträgt, und es gibt zwei Möglichkeiten, es als Summe der Gesetzgebungszahlen von 1729 auszudrücken.

taxi.rb


taxi = []
n = 1

safe_invert(hash).each do |k, v|
  if v.size == n
    taxi.push("Ta(#{n}) => #{k}: #{v}")
    n += 1
  end
end

puts taxi

Mit "jedem" für den letzten Hash Fügen Sie die erste Übereinstimmung der Wertarraylänge von 1 zum leeren Array "Taxi" hinzu Das Ergebnis ausgeben und fertig.

Beiseite

Das habe ich bei Wikipedia herausgefunden Ta (4) wird erst angezeigt, wenn der Bereich von ** 1 auf 19000 ** erweitert wurde.

Ich habe versucht, es mit (1..19000) auszuführen, Selbst nachdem ich einige Minuten gewartet hatte, endete der Prozess nicht und ich gab auf.

Schließlich ist Ruby möglicherweise nicht für eine umfassende Überprüfung geeignet: Schweiß:

Wenn Sie eine bessere Möglichkeit haben, es zu schreiben, lassen Sie es uns in den Kommentaren wissen!

** (Hinzugefügt am 05.07.2020) ** Sie haben in den Kommentaren eine verbesserte Version vorgeschlagen!

Recommended Posts

Ich habe die Anzahl der Taxis mit Ruby überprüft
Ich habe den Teil von java.net.URL # getPath überprüft
Verwalten Sie die Version von Ruby selbst mit rbenv
Ich habe DI mit Ruby versucht
[Ruby] Fragen und Überprüfung der Anzahl der Methodenargumente
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
[Ruby] Ich möchte die Reihenfolge der Hash-Tabelle umkehren
Finden Sie mit Kotlin die Anzahl der Tage in einem Monat
Über das Verhalten von Ruby Hash # ==
Ich habe die Quelle von ArrayList gelesen, die ich gelesen habe
Programmieren mit Ruby (unterwegs)
Ich habe die Quelle von Integer gelesen
Ich habe die Quelle von Long gelesen
Eindrücke von Black Jack-Cli mit Ruby
Ich habe die Quelle von Short gelesen
Ich habe die Quelle von Byte gelesen
[Ruby] Zeigt den Inhalt von Variablen an
Ich habe das automatische Tool zum Erstellen von Komponententests überprüft (Version Ende 2019).
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe nachgesehen, weil die Antwort beim Debuggen mit Tomcat 8 seltsam war
[Illustration] Finden der Summe von Münzen mit einer rekursiven Funktion [Ruby]
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
Erstellen Sie mit der Datei Ruby on Rails seeds.rb eine große Anzahl von Datensätzen mit einem einzigen Befehl
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Ich habe versucht, mit Ruby festzustellen, ob eine Ganzzahl innerhalb eines bestimmten Bereichs eine Capreca-Zahl enthält
Ich habe die Bibliothek "junit-quickcheck" überprüft, die eigenschaftsbasierte Tests mit JUnit durchführen kann.
Überprüfen Sie den Inhalt der Parameter mit pry
Ich habe die interne Verarbeitung von Retrofit untersucht
So bestimmen Sie die Anzahl der Parallelen
[Ruby] 4-stellige Zufallszahlengenerierung mit Sprintf
Ich habe den Ablauf der TCP-Kommunikation mit Spring Integration (Client Edition) untersucht.
Ich habe den Ablauf der TCP-Kommunikation mit Spring Integration (Server Edition) untersucht.
[Ruby] Schneiden Sie den Inhalt von Twitter-Anzeigen ab
Ich habe mit Ruby einen riskanten Würfel gemacht
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby mit Wiederholung zu lösen.
Extrahieren Sie einen Teil einer Zeichenfolge in Ruby
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
Über die Behandlung von BigDecimal (mit Reflexion)
Ich habe versucht, den Zugriff von Lambda → Athena mit AWS X-Ray zu visualisieren
Über die Anzahl der Threads von Completable Future
Beim Formatieren mit SimpleDateFormat blieb ich beim Umgang mit Zeitzonen
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter
[Java] Überprüfen Sie die Anzahl der Zeichen
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
Immerhin wollte ich den Inhalt von MySQL mit Docker in der Vorschau anzeigen ...
So fügen Sie die Verarbeitung mit einer beliebigen Anzahl von Elementen in die iterative Verarbeitung in Ruby ein
Ich habe versucht, die Infrastrukturtechnologie der Ingenieure heutzutage mit dem Kochen zu vergleichen.
Ich habe es verwendet, ohne die O / R-Zuordnung der Schienen zu kennen, also habe ich es überprüft.
Herbst 2017 Sicherheitsspezialist Ich habe die Häufigkeit der Wörter überprüft, die am Morgen 2 erschienen sind
So finden Sie die Ursache des Ruby-Fehlers
[Ruby] Zusammenfassung der Klassendefinitionen. Beherrsche die Grundlagen.