Aufgabe A3 des Putnam-Wettbewerbs 2008 lautet:
Beginnen Sie mit einer endlichen Folge positiver Ganzzahlen. Wenn möglich, wählen Sie zwei Indizes so dass nicht dividiert , und ersetzen Sie und durch bzw. \ text {lcm} (a_j, a_k) . Beweisen Sie, dass dieser Vorgang, wenn er wiederholt wird, irgendwann beendet werden muss und die endgültige Reihenfolge nicht mehr von den getroffenen Entscheidungen abhängt.
Ihr Ziel bei dieser Herausforderung ist es, eine endliche Folge positiver Ganzzahlen als Eingabe zu verwenden und das Ergebnis der Wiederholung dieses Prozesses auszugeben, bis kein Fortschritt mehr möglich ist. (Das heißt, bis jede Zahl in der resultierenden Folge alle nachfolgenden Zahlen dividiert.) Sie müssen das Putnam-Problem nicht lösen.
Das ist Code-Golf : Die kürzeste Lösung in jeder Programmiersprache gewinnt.
Testfälle
[1, 2, 4, 8, 16, 32] => [1, 2, 4, 8, 16, 32]
[120, 24, 6, 2, 1, 1] => [1, 1, 2, 6, 24, 120]
[97, 41, 48, 12, 98, 68] => [1, 1, 2, 4, 12, 159016368]
[225, 36, 30, 1125, 36, 18, 180] => [3, 9, 18, 90, 180, 900, 4500]
[17, 17, 17, 17] => [17, 17, 17, 17]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [1, 1, 1, 1, 1, 2, 2, 6, 60, 2520]
quelle
Antworten:
Gelee , 9 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Pari / GP , 33 Bytes
Berechnen Sie die Elementarteiler der Diagonalmatrix.
Probieren Sie es online!
quelle
J , 17 Bytes
Probieren Sie es online!
Wahrscheinlich die erste J-Antwort auf PPCG, die
&.
zweimal verwendet wurde. Nach diesem und jenem fühle ich mich allmählich wie ein seltsamer J-Hacker.Grundsätzlich eine Übersetzung aus Dennis 'Jelly Antwort .
Wie es funktioniert
quelle
Wolfram Language (Mathematica) , 44 Byte
Probieren Sie es online!
quelle
Python 3 , 103 Bytes
Probieren Sie es online!
Erläuterung
Dieses Problem ist im Wesentlichen eine parallele Sortierung der Primfaktoren, und (gcd (a, b), lcm (a, b)) ist analog zu (min (a, b), max (a, b)). Reden wir also über das Sortieren.
Wir werden durch Induktion beweisen, dass a [i] nach f (i, j) der kleinste Wert in (dem alten Wert von) L ist, wobei L der Bereich zwischen a [i] und a [j] ist, einschließlich beider Enden . Und wenn j = -1 ist, sortiert f (i, j) den Bereich L.
Der Fall, dass L ein Element enthält, ist trivial. Beachten Sie für die erste Behauptung, dass das kleinste von L nach dem Tausch nicht in a [j] bleiben kann, so dass f (i, j-1) es in a [i] setzt und f (i + 1, - 1) wird es nicht beeinflussen.
Beachten Sie für die zweite Behauptung, dass a [i] der kleinste Wert ist und f (i + 1, -1) die verbleibenden Werte sortiert, sodass L nach f (i, j) sortiert wird.
quelle
Netzhaut , 65 Bytes
Probieren Sie es online! Link enthält die schnelleren Testfälle. Erläuterung:
In Unary konvertieren.
Wiederholt übereinstimmen: Jede Zahl mit einem Faktor, dann eine spätere Zahl, die nicht durch die erste Zahl, sondern durch den Faktor teilbar ist.
$1
ist die erste Nummer.$2
ist der Faktor. Da Regex gierig ist, ist dies der größte Faktor, dh der GCD.$4
ist der Teil der Übereinstimmung zwischen den ursprünglichen Zahlen.$5
ist die zweite Zahl.$#3
(dezimal statt unär) ist eine Zahl$1
, durch$2
die nicht geteilt wird , da das Original nicht enthalten ist$2
. Dies bedeutet, dass wir zur Berechnung der lcm$5
mit eins mehr multiplizieren müssen, als$#3
am genauesten als die Summe von$5
und das Produkt von$#3
und geschrieben wird$5
.In Dezimalzahl konvertieren.
quelle
05AB1E , 10 Bytes
Kredit für die Annäherung geht an Alephalpha .
Probieren Sie es online!
quelle
Perl 6 , 53 Bytes
Probieren Sie es online!
Port of Alephalphas Mathematica Antwort.
quelle
JavaScript (SpiderMonkey) , 69 Byte
Probieren Sie es online!
l
zuweisenlcm(p,q)
zua[j]
und zuweisengcd(p, q)
zuq
wennj > i
, sonst bleibt alles unverändert.lcm(p,q) = if p%q=0 then p else p*lcm(q,p%q)/(p%q)
Alte Antwort:
JavaScript (SpiderMonkey) , 73 Byte
Probieren Sie es online!
g
berechnengcd(u, v)
und Rückgabewert zuweisenu
.quelle
05AB1E ,
151413 BytesPort von @ Dennis ♦ 'Jelly Antwort , aber leider hat 05AB1E kein Unexponents-Builtin, so dass das Programm mehr als halbiert wird .. :(
-1 Byte dank @ Mr.Xcoder .
-1 Byte dank @Enigma .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
¾
und Entfernen von0ï
+1. (Ich habe das schon einmal versucht, weil ich versucht habe, Dennis 'Antwort ebenfalls zu portieren, lol)εgÅpymP
die Verwendung von würde ein weiteres Byte gegenüber dem von Mr. Xcoder angegebenen Byte gespeichert0
und gibt¾
. Muss mich daran erinnern! Tatsächlich werde ich es jetzt zu meinen kleinen 05AB1E-Tipps hinzufügen. :)