Sie sollten ein Programm oder eine Funktion schreiben, die bei einer Liste positiver Ganzzahlen jedes Element mit der kleinstmöglichen positiven Ganzzahl multipliziert, um eine streng ansteigende Liste zu erstellen.
Zum Beispiel, wenn der Eingang ist
5 4 12 1 3
die Multiplikationen werden sein
5*1=5 4*2=8 12*1=12 1*13=13 3*5=15
und die Ausgabe wird die aufsteigende Liste sein
5 8 12 13 15
Eingang
- Eine Liste positiver Ganzzahlen mit mindestens einem Element
Ausgabe
- Eine Liste positiver Ganzzahlen
Beispiele
9 => 9
1 2 => 1 2
2 1 => 2 3
7 3 => 7 9
1 1 1 1 => 1 2 3 4
5 4 12 1 3 => 5 8 12 13 15
3 3 3 8 16 => 3 6 9 16 32
6 5 4 3 2 1 => 6 10 12 15 16 17
9 4 6 6 5 78 12 88 => 9 12 18 24 25 78 84 88
8 9 41 5 12 3 5 6 => 8 9 41 45 48 51 55 60
15 8 12 47 22 15 4 66 72 15 3 4 => 15 16 24 47 66 75 76 132 144 150 153 156
Dies ist Codegolf, also gewinnt das kürzeste Programm oder die kürzeste Funktion.
Unterhaltsame Tatsache: Das letzte Element der Ausgabe für die Eingabe N, N-1, ... ,1
scheint das (N+1)th
Element der Sequenz A007952 zu sein . Wenn Sie einen Beweis finden, können Sie ihn gerne in Ihre Golfantwort aufnehmen oder als Kommentar posten.
code-golf
math
number
arithmetic
randomra
quelle
quelle
Antworten:
Gelee ,
65 BytesErste Gelee-Antwort,
bevor @Dennis aufwacht und mich schlägt.Probieren Sie es online!Erläuterung
Vielen Dank an @Dennis für -1 Byte.
quelle
:‘×µ\
Speichert ein Byte.JavaScript (ES6), 28
Bearbeiten Kann, wie von @Patrick Roberts vorgeschlagen,
p
ein nicht initialisierter Parameter sein. Gleiche Byteanzahl, aber keine globale Variable verwendenPRÜFUNG
quelle
f=a=>a.map(n=>a+=n-a%n,a=0)
. Aber es ist nicht mein Algorithmus (dummes Ich), also behalte ich meinen so wie er ist und stimme abPython 2,
6764 BytesVersuchen Sie zuerst, Code-Golf zu spielen. Tipps sind also willkommen.
quelle
print l
anstatt esreturn l
zu speichern. Gute Arbeit!PHP,
55464241 BytesVerwendet ISO 8859-1-Codierung.
Laufen Sie wie folgt (
-d
nur aus ästhetischen Gründen hinzugefügt):~ß
, um ein Leerzeichen zu ergeben.quelle
$a+0
mit+$a
. Außerdem können Sie davon ausgehen, dass der Eingang niemals einen haben wird0
, so dass Sie Ihren$a+0&&print
einfach durch ersetzen können+$a&print
. Tatsächlich könnte man das sogar machen$a&print
, da in PHP"0" == 0 == 0.0 == false
. Aber es kann nicht erforderlich sein, wenn Sie nur eine verwendenecho
, denke ich.and
wird nicht funktionieren (im Gegensatz zu logisch), noch wird Echo auf diese Weise funktionieren. Da ich Eingaben von CLI nehme, ist das erste Argument-
, das ich abfangen möchte, anstatt eine Null zu drucken. Versuchen Sie esphp -r 'print_r($argv);' foo
. 1 Byte mit Ihrem ersten Vorschlag gespeichert, danke.for(;$a=$argv[++$i];)echo$l+=$a-$l%$a,' ';
? Es ist 42 Byte lang und überspringt das erste Element.a^A
, aber das würde zu viele Warnungen verschütten (Warnungen sind ignorierbar). Es wird den Bytecount in keiner Weise verändern, sieht aber sicher anders aus.Haskell (
302825 Bytes)Erweiterte Version
Erläuterung
scanl1
Mit dieser Option können Sie eine Liste falten und alle Zwischenwerte in einer anderen Liste zusammenfassen. Es ist eine Spezialisierung vonscanl
, die den folgenden Typ hat:Aus diesem Grund benötigen wir nur eine geeignete Funktion, die das letzte Element unserer Liste (
acc
in der erweiterten Version) und das zu verarbeitende Element (next
in der erweiterten Version) enthält und eine geeignete Nummer zurückgibt.Wir können diese Zahl leicht ableiten, indem wir den Akku durch den nächsten teilen und das Ergebnis auswerten.
div
kümmert sich darum. Danach müssen wir nur noch hinzufügen,1
um sicherzustellen, dass die Liste tatsächlich wächst (und dass wir nicht dazu kommen0
).quelle
( ... )
mit ersetzen$ ...
und ich denke, Sie haben eine letzte Newline gezählt, die weggelassen werden kann:,scanl1$\x y->y*div x y+y
24 Bytes.(...)
vs$
, da es$\
als Operator analysiert wird und ich danach ein einzelnes Leerzeichen benötigen würde$
.scanl1(...)
unbenannte Funktionen. Bezüglich$
vs()
.: Du hast recht, mein Fehler.C ++,
636057 BytesFunktioniert in einem bestimmten Bereich
[first, last)
. Ursprünglich als Template-Variante geschrieben, aber das war länger:Erweiterte Version
quelle
CJam, 13 Bytes
Eingabe als CJam-Liste. Der Ausgang ist zeilenweise getrennt.
Teste es hier.
Erläuterung
Der Endwert bleibt auf dem Stapel und wird am Ende automatisch ausgedruckt.
quelle
Mathematica,
3632 BytesPrüfung
quelle
Perl, 17 + 3 = 20 Bytes
Benötigt
-p
und-l
Fahnen:Erläuterung:
quelle
Python (3.5),
6362 BytesPrüfung
Vorherige Lösung
Einige rekursive Lösungen sind jedoch größer
quelle
r+=[…]
können Sie auchr+=…,
r=[0]
in Standardparameter definiertr
werden nicht lokalBrachylog , 12 Bytes
Der seltsame Versuch, jede Variable mit einer Zahl zu multiplizieren, beginnt mit dem Versuch, mit 2 und nicht mit 0 oder 1 zu multiplizieren. Dies scheint jedoch zu funktionieren und schlägt beide anderen Brachylog-Implementierungen
Erläuterung
Probieren Sie es online!
quelle
Brachylog , 54 Bytes
Erläuterung
quelle
Pyth, 11
Test Suite
Führt eine kumulative Reduzierung durch, die alle Zwischenwerte zurückgibt, beginnend mit
0
. Da die Eingabe garantiert nur positive Ganzzahlen enthält, ist dies in Ordnung. In jedem Schritt nehmen wir den alten Wert, dividieren ihn durch den neuen Wert und addieren ihn1
, dann multiplizieren wir ihn mit dem neuen Wert.quelle
C 79 Bytes
Ungolfed
quelle
p=p/x*x+x
funktionierenPowerShell, 26 Byte
Übernimmt Eingaben als explizites Array, z . B.
> .\sort-by-multiplying.ps1 @(6,5,4,3,2,1)
über$args[0]
.Wir durchlaufen dann die Schleife mit
|%{...}
und führen bei jeder Iteration eine Magie aus . Nein, nur ein Scherz, wir verwenden den gleichen Modulo-Trick wie andere Antworten (Requisiten für @aross, weil ich ihn dort zuerst entdeckt habe).Die einkapselnden Parens stellen
(...)
sicher, dass das Ergebnis der mathematischen Operation in der Pipeline platziert und somit ausgegeben wird. Wenn wir diese auslassen, wird nichts ausgegeben, da die$l
Variable nach Abschluss der Ausführung durch Garbage-Collection erfasst wird.Beispiel
quelle
Japt, 11 Bytes
Online testen!
Wie es funktioniert
quelle
05AB1E , 11 Bytes
Code:
Probieren Sie es online!
Erläuterung:
Verwendet die CP-1252-Codierung.
quelle
Minkolang 0,15 , 17 Bytes
Probieren Sie es hier aus!
Erläuterung
Im Wesentlichen behält das Register das neueste Mitglied der aufsteigenden Liste bei, und dieses wird durch die Eingabe geteilt und inkrementiert, um den Multiplikator für das nächste Mitglied zu erhalten. Das toroidale Merkmal von Minkolangs Codefeld bedeutet, dass es horizontal ohne die Notwendigkeit von
()
oder[]
Schleifen geschleift wird .quelle
Brachylog , 21 Bytes
Probieren Sie es online!
Verwendet die Summe der Eingabewerte als Obergrenze für die Koeffizienten C. Ziemlich langsam, Timeout bei TIO für Eingabelistenlängen über 5 oder 6 (auch abhängig von der Summe der Werte). Aber nicht so langsam wie meine ursprüngliche Version, die winzige Listen mit bis zu 3 Elementen mit winzigen Werten erfordert, um keine Zeitüberschreitung zu verursachen:
21 Bytes
Probieren Sie es online!
quelle
C (gcc) , 37 Bytes
Probieren Sie es online!
quelle
Python 2 , 53 Bytes
Probieren Sie es online!
k*x>y
impliziertk>y/x
; so kann das kleinstek
sein istk=floor(y/x)+1
. Da in Python 2.7 die Ganzzahldivision bereits als "wiefloor
gewünscht"k=y/x+1
und " wie gewünscht" angenommen wirdk*x = (y/x+1)*x = y/x*x+x
.quelle
Oracle SQL 11.2, 210 Byte
Nicht golfen
quelle
Chez-Schema (140 Bytes)
Golf Version:
Ungolfed Version:
Probieren Sie es online!
quelle
* m(car l)
kann sein*(car l)m
.K (oK) , 11 Bytes
Probieren Sie es online!
quelle