Wenn Sie eine Liste mit einer Nummer haben, geben Sie die Bereiche wie folgt aus:
Input: [0, 5, 0]
würde werden [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
.
Dies ist die Zuordnung eines Bereichs durch das Array, also müssen wir zuerst den Bereich erstellen [0, 5]
, also [0, 1, 2, 3, 4, 5]
. Danach 5
erstellen wir den Bereich mit [5, 0]
. An unser vorheriges Sortiment angehängt, erhalten wir:
[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
Betrachten wir einen Testfall mit zwei gleichen Ziffern nebeneinander:
[3, 5, 5, 3], ranges:
[3, 5] = 3, 4, 5
[5, 5] = 5 (actually [5, 5] due to overlapping)
[5, 3] = 5, 4, 3
Das würde uns also geben [3, 4, 5, 5, 4, 3]
.
Einige andere Testfälle:
[1, 9] > [1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, -10] > [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
[3, 0, 0, -3] > [3, 2, 1, 0, 0, -1, -2, -3]
[1, 3, 5, 7, 5, 3, 1, -1, -3] > [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3]
Die Eingabe hat immer mindestens 2 Ganzzahlen.
Kürzeste Antwort gewinnt!
code-golf
array-manipulation
Lamaro
quelle
quelle
Antworten:
05AB1E, 1 Byte
Probieren Sie es online!
Wie es funktioniert
Es ist eingebaut.
quelle
Javascript,
999593 Bytes46 Bytes weg danke @Neil .quelle
y<b?b-y:y-b||1
. Speichern Sie ein weiteres Byte mity>b||y-b&&-1
.y<b?-1:y>b
noch besser.JavaScript (SpiderMonkey 30+),
8176 BytesGetestet in Firefox 44. Verwendet die großartigen Argumente von ES6 zur Destrukturierung und das Array-Verständnis von ES7 (das leider aus der ES7-Spezifikation entfernt wurde).
quelle
[3, 0, 0, -3]
. Ich habe den RangeError behoben und 10 Bytes gespeichert, aber es funktioniert immer noch nicht:([n,...a],z=[n])=>z.concat([for(i of a)for(j of[...Array((r=n<i)?i-n-1:n-i-1),0])i=r?++n:--n])
([n,...a])=>[n].concat([for(i of a)for(j of[...Array((r=n<i)?i-n:n-i)])i=r?++n:--n])
natürlich.JavaScript (ES6) 66
72Eine rekursive Funktion, die wiederholt Werte innerhalb des Arrays hinzufügt, um die Lücken zwischen nahen Zahlen zu füllen
Prüfung
quelle
C, 120 + 12 = 132 Bytes
Beispielaufruf:
Teste live auf ideone .
quelle
Python 2, 77 Bytes
Probieren Sie es online aus
Vielen Dank an Neil, DenkerAffe und Erwan für die Hinweise auf Verbesserungen, die ich verpasst habe
quelle
+1
ist das unnötig?lambda n:n[0:1]+sum([range(x,y,[1,-1][y+1<x])[1:]+[y]for(x,y)in zip(n,n[1:])],[])
du nicht mit ? spart einige Bytes.[1,-1][y+1<x]
durch2*(y>x)-1
(auch ich verstehe nicht, warum Siey<=x
und nicht einfachy<x
)n[0:1]
ist äquivalent zun[:1]
.Perl, 47 Bytes
Beinhaltet +3 für
-p
(Code enthält$'
also Platz und-
zählt auch)Geben Sie die Liste der Zahlen auf STDIN an:
fluctuating.pl
:Die temporäre Variable und all diese Klammern fühlen sich suboptimal an ...
quelle
$'
Sie erwähnt haben, ist nicht im Code enthalten ...Haskell,
63-55BytesAnwendungsbeispiel:
g [3,5,5,3]
->[3,4,5,5,4,3]
.Es ist eine Modifikation meiner Antwort auf eine verwandte Herausforderung . Auch hier ist die Hauptarbeit durch Verketten die Liste von getan ,
a
um nach obenb-1
und vona
unten aufb+1
und einem rekursiven Aufruf (wo eine Liste leer sein). Um dena==b
Fall zu bewältigen , dass beide Listen leer sind, stellen wir vor,[a|a==b]
was als[a]
oba==b
und[]
sonst bewertet wird .quelle
R
868275 Bytes4 Bytes mit rep nicht rep.int gespeichert (Code Golf nicht Leistung!) Weitere 7 Bytes wurden mit der eingebauten partiellen Übereinstimmung bei Verwendung von
$
(und Reduzieren der Funktionsdefinition auf 1 Zeile ) gespeichertquelle
(y=...)
eher als(y<-...)
ist auch gültig, und ein Byte weniger.Ruby,
11682 BytesMein allererster Golf.
Edit: Danke manatwork für die tollen Vorschläge.
quelle
map
‚s Codeblock kann das Array als mehrere Parameter erfolgen:->n{o,*m=n;o=[o];m.zip(n).map{|t,u|o+=u==t ?[u]:(u<t ?[*u+1..t]:[*t..u-1].reverse)};o}
. Ansonsten schönes erstes Golfen.[[u],[*u+1..t],[*t..u-1].reverse][t<=>u]
.Japt , 12 Bytes
16 Bytes gespart dank @ETHproductions !
Testen Sie es online
quelle
Perl 6, 94 Bytes
Ich bin momentan nicht besonders glücklich damit, wahrscheinlich mache ich später eine weitere Aufnahme
quelle
PHP 5.4, 86 Bytes
Dies soll als eingeschlossene Datei verwendet werden, die das Ergebnis zurückgibt.
Die Werte werden als Kommandozeilenparameter übergeben.
Nicht gerade hübsch oder so, aber macht den Job.
quelle
Python 3 , 76 Bytes
Erster Versuch einer Python-Antwort. Die Grundidee ist, wiederholt Paare in der Sequenz zu identifizieren, bei denen der Unterschied größer als ein Schritt ist, und ein (und nur ein) zusätzliches Element einzufügen, um die Sequenz in die richtige Richtung zu vervollständigen. Wiederholen, bis alle Unterschiede zwischen aufeinanderfolgenden Elementen zwischen +1 und -1 liegen.
Probieren Sie es online!
quelle
Lua, 156 Bytes
Eine Funktion, die ein Array als Parameter annimmt und das erweiterte Array zurückgibt.
Ungolfed und Erklärungen
Zur Vereinfachung der Verwendung können Sie die folgende Funktion verwenden, um das von zurückgegebene Array zu drucken
f()
.Wenn Sie diesen Beitrag testen, können Sie ihn folgendermaßen aufrufen:
quelle
Mathcad, 62 "Bytes"
Da Mathcad ein 2D-Whiteboard und spezielle Operatoren (z. B. Summationsoperator, Integrationsoperator) verwendet und in einem XML-Format speichert, kann ein tatsächliches Arbeitsblatt mehrere hundert (oder mehr) Zeichen enthalten. Für die Zwecke von Code Golf habe ich die Anzahl der Zeichen oder Operatoren, die der Benutzer eingeben muss, um das Arbeitsblatt zu erstellen, als Mathcad-Bytezahl definiert.
Wenn Sie die Funktionsdefinition in ein einfaches Programm konvertieren und die Variable lst durch einen einzelnen Zeichennamen ersetzen, erhalten Sie insgesamt 62 "Bytes". Mit der Funktion, die ein einzelnes Zeichen anstelle des vollständigen Namens verwendet, erhöht sich dies auf 65 "Bytes" für die Definition und weitere 4 "Bytes" für jeden Aufruf (vorausgesetzt, die Erstellung der Liste selbst ist nicht im Gesamtbyte enthalten count (Die Verwendung der integrierten Tabellen von Mathcad ist eine weitere Möglichkeit, die Liste einzugeben.)
quelle
PHP, 144 Bytes
Explosionszeichnung Eingabe / Funktionsaufruf AusgabeEs ist chaotisch und klobig, und ich werde später versuchen, es zu optimieren. Es erstellt
range()
aus jedem Paar benachbarter Wertepaare ein und setzt sie dann zusammen (nachdempop
das Ende der vorherigen Kumulierung entfernt wurdeArray
).quelle
Perl6, 21
.join ist die Abkürzung für $ _. join
Test (Rakudo)
Ausgabe
quelle
Gelee , 10 Bytes
Probieren Sie es online!
quelle
R 74 Bytes
Eine andere R-Lösung
Probieren Sie es online!
quelle