Ich habe eine Weile auf dieser Seite geblättert, bin aber erst kürzlich sehr daran interessiert, einige der Herausforderungen auszuprobieren. Ich hatte vor, mich in einigen der bestehenden Code-Golf-Themen zu versuchen, hatte aber gestern eine Weile keinen Internetzugang und habe mir in der Zwischenzeit meine eigene Herausforderung ausgedacht.
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die ein Array von Gleitkommazahlen a
und eine Ganzzahl enthält n
, und dann jeden Wert a
auf den Durchschnitt der beiden daneben stehenden n
Zeiten zu setzen. Bei wiederholter Verwendung mit steigenden Werten von n
wird eine wellenartige Bewegung erzeugt:
Besonderheiten:
- Befindet sich zufällig nur ein Element in
a
odern
ist es 0 oder weniger, sollte das Programm das ursprüngliche Array zurückgeben. - Ein- und Ausgänge können in jedem gewünschten Format vorliegen, sofern sie sichtbar voneinander getrennt sind.
Für jeden Schritt:
- Das erste Element in
a
sollte der Durchschnitt von sich selbst und das nächste Element werden. - Das letzte Element in
a
sollte der Durchschnitt von sich selbst und dem vorherigen Element werden. - Jedes andere Element in
a
sollte der Durchschnitt des vorherigen Elements und des nächsten Elements werden. - Stellen Sie sicher, dass Sie das Array des vorherigen Schritts und nicht das aktuelle Array berechnen!
Testfälle: HINWEIS: Ihre Ein- / Ausgänge müssen nicht in diesem Format vorliegen!
[0, 0, 1, 0, 0], 1 -> [0, 0.5, 0, 0.5, 0]
[0, 0, 1, 0, 0], 2 -> [0.25, 0, 0.5, 0, 0.25]
[0, 0, 1, 0, 0], 0 -> [0, 0, 1, 0, 0]
[0, 0, 1, 0, 0], -39 -> [0, 0, 1, 0, 0]
[0, 16, 32, 16, 0], 1 -> [8, 16, 16, 16, 8]
[0, 1, 2, 3, 4, 5], 1 -> [0.5, 1, 2, 3, 4, 4.5]
[0, 64], 1 -> [32, 32]
[0], 482 -> [0]
[32, 32, 32, 16, 64, 16, 32, 32, 32], 4 -> [33, 27, 40, 22, 44, 22, 40, 27, 33]
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes. Der Gewinner wird in einer Woche (am 1. August) ermittelt. Viel Glück!
Edit: Herzlichen Glückwunsch an den Gewinner, @issacg , mit satten 18 Bytes!
quelle
n
nicht gelieferten unda
nicht gelieferten Fälle loszuwerden - sie tragen nicht wirklich viel dazu bei.n
sollte 4 sein, nicht 5.Antworten:
Pyth,
4618 BytesDieser Code erwartet Eingaben im Formular
iterations, [wave1, wave2, wave3 ...]
, wie unter dem ersten Link unten zu sehen.Demonstration. Testgeschirr.
Das Programm wendet den Code in der
u
Funktion redu ( ) so oft auf die Eingabeliste an, wie es die Anzahl der Iterationen gibt.Ich werde die Wellenausbreitungsfunktion auf der Liste demonstrieren
[0, 1, 2, 3, 4, 5]
, die inG
:+hGG
stelltG
das erste Element vorG
, das sich bildet[0, 0, 1, 2, 3, 4, 5]
.t+GeG
HängtG
das letzte Element anG
das erste Element an und entfernt es[1, 2, 3, 4, 5, 5]
.sV
first bildet Paare aus den Listen, wobei[[0, 1], [0, 2], [1, 3], [2, 4], [3, 5], [4, 5]]
das letzte Element der ersten Liste abgeschnitten wird. Dann werden die Paare über dies
Funktion summiert und ergeben[1, 2, 4, 6, 8, 9]
.cR2
verwendet die Gleitkommadivision, um alle Zahlen durch 2 zu teilen und das gewünschte Ergebnis zu erhalten[0.5, 1.0, 2.0, 3.0, 4.0, 4.5]
.quelle
Schneemann 1.0.0 , 219 Zeichen
Mit Zeilenumbrüchen für "Lesbarkeit":
Ungolfed / Unminified Version:
Beispiel-E / A-Format:
quelle
Pyth -
2524 BytesVerwendet Aufzählen, Reduzieren, um Iterationen durchzuführen.
Probieren Sie es hier online aus .
quelle
Schläger,
164145 BytesUngolfed
Beachten Sie, dass Sie möglicherweise die
#lang racket
Zeile benötigen , um dies auszuführen.quelle
R 109 Bytes
Dadurch wird eine unbenannte Funktion erstellt, die einen Vektor und eine Ganzzahl akzeptiert und einen Vektor zurückgibt. Der Ansatz besteht hier darin, die Eingabe als univariate Zeitreihe zu behandeln und ein lineares Faltungsfilter anzuwenden.
Ungolfed + Erklärung:
Beispiele:
quelle
Haskell, 76 Zeichen
Der Trick besteht darin, die erste Zahl am Anfang der Liste und die letzte Zahl am Ende der Liste hinzuzufügen, anstatt sich mit den Randbedingungen zu befassen.
Tests:
quelle
if then else
, dhc
wirda#n|n<1=a|1<2=iterate f a!!n
unds
wirdx!y=(x+y)/2
(und heißt...zipWith(!)(x:a)...
).c
einen Infixoperator, sagen#
:a#n|n<1=a|1<2=iterate f a!!n
. Nenne es so[0, 0, 1, 0, 0] # 2
.CJam,
2322 BytesProbieren Sie es online aus
Die Eingabe erfolgt im CJam-Listenformat, z. B. für das letzte Beispiel:
Die Ausgabe ist auch eine CJam-Liste:
Der grundlegende Ansatz ist, dass in jedem Schritt der Vektor um eine Position nach links und eine Position nach rechts verschoben wird. Jeder der beiden Vektoren wird mit dem ersten / letzten Element aufgefüllt, und dann wird der Durchschnitt der beiden Vektoren berechnet.
Erläuterung:
quelle
Java, 181 Bytes
Hier ist die Golfversion:
Ungolfed:
Ich habe versucht, Aufgaben und Bedingungen mit Java so weit wie möglich zu verkürzen. Verbesserungen sind natürlich willkommen.
quelle
JavaScript (ES6),
15313267 ZeichenIch komme 6 Monate später auf meine erste Antwort zurück und was mache ich? Golf zu 50%, das ist was. ;)
Diese Version ruft sich wiederholt auf, bis sie
n
kleiner als 1 ist, undn
wird jedes Mal um 1 verringert .Eine nicht rekursive Lösung (
15113078 Zeichen):Ungolfed: (veraltet)
Rekursiv:
Nicht rekursiv:
quelle
if(n<2)return b;return s(b,n-1)
konnte aufreturn n<2?b:s(b,n-1)
Java, 203 Bytes
Ich versuche meinen ersten Versuch mit Java. Verbesserungsvorschläge sind willkommen :)
Schön gedruckt:
quelle
for
Schleife in die Inkrement-Anweisung der Schleife verschieben? Wiefor(i=0;i<n;b[0]=...,b[s-1]=...,a=...,++i)for(...)b[j]=...;
? Dann sollten Sie in der Lage sein, die Zahnspangen loszuwerden.++i
durch Kommas anstelle von Semikolons voneinander getrennt ). Versuch es. :)f(a;b;c){d;e;}
sollte völlig identisch sein mitf{a;b;}{d;e;c;}
und daher auch mitf(a;b;e,c)d;
. Mit Ihrem neu arrangierten Code funktioniert dies jedoch nicht mehr, da Sie den Code nicht mehrfor
in den anderen verschiebenfor
können. Ich denke, all dies spielt keine Rolle mehr. ;)Python 2, 98 Bytes
Nahm den direkten Ansatz, der verwendet wurde
exec
, um eine while-Schleife zu verlassen. Ich denke, es gibt eine bessere Möglichkeit, die Logik zur Ermittlung von Sonderfallpositionen anzuwenden, aber dies funktioniert vorerst. Die Eingabe sollte wie folgt formatiert sein[list], times
.Ungolfed:
quelle
Mathematica, 81 Bytes
Ich habe das Gefühl, es könnte mehr Golf gespielt werden, wenn ich einen besseren Weg finden könnte, mit dem positiven Zustand umzugehen.
Erwähnenswert: Mathematica bietet in seinem Spektrum an Listenverarbeitungs- und Filterfunktionen viele potenzielle integrierte Lösungen
CellularAutomaton
. Ich entschied mich dafür,Nest[... ListConvolve ...]
weil dies der einfachste Weg war, die Knicke am Ende der Liste herauszufinden, aber andere Winkel könnten sich als kürzer herausstellen.quelle
Matlab, 109
Beispiele:
quelle
Scala,
195 Zeichen (186 bei verzögerter Ausgabe187 ZeichenStream
),wahrscheinlich nicht optimal, ist die Zuordnung
sliding(3)
in diesem Fall sehr nützlich.Tests:
quelle
q (27 Zeichen)
Beispiele
quelle
R 93 Bytes
Als unbenannte Funktion
Erweitert
Tests
quelle
Japt,
3937 Bytes (nicht konkurrierend)Diese Antwort ist nicht konkurrierend, da die Sprache neuer ist als die Herausforderung. Ich wollte nur sehen, wie gut meine Golfsprache meiner ersten Herausforderung standhalten kann.
Probieren Sie es online!
quelle
C ++ 14, 158 Bytes
Erfordert die Eingabe eines Containers
value_type==double
wievector<double>
.Ungolfed:
quelle
Schläger 223 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
Jelly , 14 Bytes
Probieren Sie es online!
Volles Programm.
quelle
C # (Visual C # Interactive Compiler) ,
160 bis144 ByteVerwendet eine gute alte Rekursion.
Probieren Sie es online!
quelle