Sie erhalten eine Reihe von positiven ganzen Zahlen. Sie müssen sie paarweise so anordnen, dass:
- Jedes Paar enthält 2 Zahlen, von denen eine ein Vielfaches einer anderen ist. Beispielsweise ist 8 ein Vielfaches von 4 und 9 ein Vielfaches von 9.
- Wenn die gleiche Zahl im Anfangssatz mehrmals vorkommt, kann sie in den Paaren so oft verwendet werden. Eine Nummer kann sogar mit einem anderen Vorkommen derselben Nummer gepaart werden
- Die maximal mögliche Anzahl von Paaren wird erhalten.
Die Ausgabe muss die Anzahl der Paare sein. Kürzester Code gewinnt.
Beispieldaten
2,3,4,8,9,18
-> 3
7,14,28,42,56
-> 2
7,1,9,9,4,9,9,1,3,9,8,5
-> 6
8,88,888,8888,88888,888888
-> 3
2,6,7,17,16,35,15,9,83,7
-> 2
code-golf
math
number
number-theory
permutations
ghosts_in_the_code
quelle
quelle
2,3,4,8,9,18
. (Jede Zahl in dieser Liste ist ein Faktor und / oder ein Vielfaches von mindestens zwei anderen Zahlen in der Liste, aber es gibt nur eine Lösung.)Antworten:
Haskell,
1091077670 BytesVielen Dank an nimi, der 33 Bytes gespart und mir etwas mehr Haskell beigebracht hat. :)
Danke an xnor für das Speichern weiterer 6 Bytes.
Ja, mein erster Haskell Golf. Es funktioniert genauso wie alle bisherigen Antworten (na ja, nicht ganz: Es zählt nur die Länge des längsten Präfixes von gültigen Paaren in jeder Permutation, aber das ist äquivalent und entspricht tatsächlich dem, was mein ursprünglicher CJam-Code getan hat).
Für mehr Golf ist es auch ineffizient, indem alle Permutationen des Suffix jedes Mal rekursiv generiert werden, wenn die ersten beiden Elemente einer Permutation ein gültiges Paar sind.
quelle
f=
nötig?chunksOf
ist schmerzhaft. Ich kenne die Standardbibliothek von Haskell nicht wirklich, um feststellen zu können, ob es eine kürzere äquivalente Funktion gibt. Ich habe versucht, es selbst zu implementieren, aber es kam zwei oder drei Bytes länger als der Import heraus.[]
und[_]
gleichzeitig deng x=[]
zweiten Platz zu belegen, ist wirklich klug. Ich werde es versuchen. Danke :)f l=maximum$0:[1+f t|(a:b:t)<-permutations l,a`mod`b<1]
.CJam,
2218 BytesProbieren Sie es online aus.
Erwartet Eingaben in Form einer CJam-Liste.
Dies ist für größere Listen ein wenig ineffizient (und Java wird wahrscheinlich keinen Speicher mehr haben, wenn Sie nicht mehr angeben).
Erläuterung
quelle
[1 2 3 4 5 6 7 8 9 10]
Jedoch,[7 1 9 9 4 9 9 1 3 9 8 1]
die eine längere Liste ist, funktioniert ordnungsgemäß. Warum das?10! = 3628800
, aber12! / 5! / 3! = 665280
. Für den ersten Fall ist also kein Speicher mehr verfügbar. Wenn Sie es über die Konsole mit dem Java-Interpreter ausführen, könnten Sie Java anweisen, mehr Speicher zu verwenden, und der erste Fall würde ebenfalls funktionieren (obwohl es eine Weile dauern könnte, weiß nicht).Pyth, 13 Bytes
Der Zeit- und Speicheraufwand ist wirklich schrecklich. Als erstes erstelle ich eine Liste mit allen Permutationen der ursprünglichen Liste. Dies nimmt
n*n!
Speicherplatz in Anspruch. Eingabelisten mit der Länge 9 dauern schon ziemlich lange.Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
quelle
Mathematica,
95938783796058 BytesDauert einige Sekunden für die größeren Beispiele.
quelle
Matlab (120 + 114 = 234)
Main:
Die Topper-Funktion wird vom Hauptteil aufgerufen.
Die Eingabe erfolgt im Formular
[. . .]
quelle
Matlab (365)
Das ist anscheinend länger, aber Oneliner und Executive, und ich habe es geschafft, der
perms
Funktion zu entkommen , weil es ewig dauert.Diese Funktion braucht viele Wiederholungen, um aufgrund anonymer Funktionen ruhig zu laufen, ich bin offen für Vorschläge hier :)
quelle