Definition und Regeln
Ein Golfy-Array ist ein Array von ganzen Zahlen, wobei jedes Element höher oder gleich dem arithmetischen Mittel aller vorherigen Elemente ist. Ihre Aufgabe ist es zu bestimmen, ob eine Reihe von positiven ganzen Zahlen als Eingabe golfen hat oder nicht.
Sie müssen die leere Liste nicht bearbeiten.
Sie können zwei verschiedene nicht leere Werte auswählen. Sie müssen konsistent sein und allen anderen Regeln für Entscheidungsprobleme entsprechen. Dies ist Code-Golf , der kürzeste Code in jeder Sprache gewinnt!
Testfälle & Beispiel
Zum Beispiel das folgende Array:
[1, 4, 3, 8, 6]
Ist ein Golf-Array, weil jeder Term höher ist als das arithmetische Mittel der vorangegangenen. Lassen Sie es uns Schritt für Schritt ausarbeiten:
Zahl -> Vorgängerelemente -> Durchschnitt -> Folgt die Regel? 1 -> [] -> 0,0 -> 1 ≥ 0,0 (wahr) 4 -> [1] -> 1,0 -> 4 ≥ 1,0 (wahr) 3 -> [1, 4] -> 2,5 -> 3 ≥ 2,5 (Wahr) 8 -> [1, 4, 3] -> 2. (6) -> 8 ≥ 2. (6) (Wahr) 6 -> [1, 4, 3, 8] -> 4,0 -> 6 ≥ 4,0 (Wahr)
Alle Elemente respektieren die Bedingung, also ist dieses eine golfy Reihe. Beachten Sie, dass wir für den Zweck dieser Herausforderung annehmen, dass der Durchschnitt einer leeren Liste ( []
) ist 0
.
Weitere Testfälle:
Eingabe -> Ausgabe [3] -> Richtig [2, 12] -> Richtig [1, 4, 3, 8, 6] -> Wahr [1, 2, 3, 4, 5] -> Wahr [6, 6, 6, 6, 6] -> Richtig [3, 2] -> Falsch [4, 5, 6, 4] -> Falsch [4, 2, 1, 5, 7] -> Falsch [45, 45, 46, 43] -> Falsch [32, 9, 15, 19, 10] -> Falsch
Beachten Sie, dass dies Puzzle 1 von CodeGolf-Hackathon ist und auch auf Anarchy Golf gepostet wird (dieses ist defekt) - Reposted von Histocrat , aber ich bin der ursprüngliche Autor auf beiden Seiten und darf sie daher hier reposten.
Antworten:
Python 2 , 37 Bytes
Probieren Sie es online!
Ausgabe über Exit-Code: Crashes (Exit-Code 1) für Golf-Arrays, Exit-Code 0 für Nicht-Golf-Arrays. ovs und Jonathan Frech sparten 3 Bytes.
Python 2 , 44 Bytes
Probieren Sie es online!
Eine eher traditionelle Variante, die
True
sonst für Golf-Arrays zurückkehrtFalse
. Jonathan Frech hat 2 Bytes gespeichert.quelle
a==[]or
kann seina and
.sum(a)<=len(a)*a.pop()*[]
den Basisfall an, der wie immer giltint < list
!Gelee ,
65 BytesProbieren Sie es online!
Wie es funktioniert
quelle
ÆmƤµ⁼Ṣ
JavaScript (ES6),
3332 BytesCode funktioniert auch mit negativen Werten wie
[-3, -2]
. Gibtfalse
für ein Golf-Array undtrue
für andere Arrays zurück. Bearbeiten: 1 Byte dank @JustinMariner gespeichert.quelle
!
da die Spezifikation nur nach zwei verschiedenen Werten fragt, sofalse
dass es in Ordnung ist , zurückzukehren, wenn es sich um ein Golf-Array handelt.Wolfram Language (Mathematica) , 35 Byte
Probieren Sie es online!
Ausgänge
False
für Golf-Arrays undTrue
sonstiges.quelle
MATL ,
98 Bytes0
Ansonsten Ausgänge für Golf-Arrays1
.Probieren Sie es online!
Erläuterung
Betrachten Sie die Eingabe
[1, 4, 3, 8, 6]
.quelle
Haskell ,
535048 BytesProbieren Sie es online!
Edit: -3 Bytes dank Zgarb!
Erläuterung
Die obige punktfreie Version entspricht dem folgenden Programm:
Bei einem gegebenen Eingangs
s=[1,4,3,8,6]
,scanl1(+)s
berechnet die Präfixsumme[1,5,8,16,22]
undzipWith(*)[1..](tail s)
fällt auf das erste Element und multipliziert alle anderen Elemente mit ihren Index:[4,6,24,24]
. Die Liste ist jetzt golfen, wenn die Präfixsummen paarweise kleiner oder gleich dem Index für die Anzahl der Elemente(<=)
sind . Dies kann überprüft werden, indem Sie beide Listen mit komprimieren und überprüfen, ob alle ErgebnisseTrue
mit sindand
.quelle
C # (Visual C # -Compiler) , 71 + 18 = 89 Byte
zusätzliche 18 Bytes für
using System.Linq;
Probieren Sie es online!
quelle
using System.Linq;
es tatsächlich 89 Bytes, manchmal ausgedrückt als "71 + 18 = 89", um zu zeigen, dass 18 Bytes erforderlich sind, aber nicht Teil der Lösung sind, während die endgültige Zählung immer noch die letzte Zahl in der Titelzeile ist ( das ist hilfreich für einige automatische Parser).APL (Dyalog) , 10 Bytes
Dies ist eine anonyme implizite Präfixfunktion (in APL-Begriffen als monadischer Zug bezeichnet).
Probieren Sie alle Testfälle auf TIO!
Ist es
∧/
alles wahr, dass⊢
die Elemente≥
sind größer als oder gleich+\
die kumulierten Summen÷
geteilt durch⍳
die ganzen Zahlen von 1 bis∘
das≢
Anzahl der Elemente?
quelle
∘
bindet Dinge auf dieselbe Weise zusammen, wie "the" in "count the cats" zusammenhält. Es heißt wirklich Compose .C (gcc) ,
626062 Bytesb=
).Probieren Sie es online!
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
Umfassende Hilfe von Dennis und Adnan zu dieser reduzierten Version. Es wurde auch ein Fehler behoben, um dies zu ermöglichen. Nochmals vielen Dank, Leute. Ich nehme diese Antwort kaum zur Kenntnis.
05AB1E , 10 Bytes
Probieren Sie es online!
Lange, weilDgsO/
ist das Äquivalent von "Mittelwert" in 05AB1E.Anscheinend
ÅA
ist arithmetisches Mittel.quelle
+\÷J
in Jelly verwenden (kumulative Summe durch Indizes teilen). Ist es nicht so einfach in 05AB1E? Bearbeiten: Nevermind.ü+
dann wirklich keine Division durch Indizes gibt, außerg
Array-Länge zu erhalten,L
zu pushen1,2,...,n
und zu dividieren, um den Mittelwert zu erhalten, der immer noch im Wesentlichen 5 Bytes beträgt..S_
ist ein langer Weg<=
, wenn jemand irgendwelche Ideen hat.÷W
funktionieren stattü.S_P
?ÅA
,ηÅA÷W
funktioniert also jetzt.APL (Dyalog) , 15 Bytes
Probieren Sie es online!
Wie?
quelle
PowerShell , 60 Byte
Probieren Sie es online!
Übernimmt Eingaben als literales Array (zB
@(1, 4, 3, 8, 6)
) in$a
. Setzt unsere$o
Ausgangsvariable auf1
. Dann durchschleift$a
. Bei jeder Iteration verwenden wir (ab) das implizite Casting von PowerShell, um*=
das Ergebnis eines Booleschen Vergleichs mit unserer$o
Ausgabe zu erhalten. Die Boolesche ist , ob der aktuelle Wert$_
ist-g
rößere-als-oder -e
qual zu den bisherigen Bedingungen$a[0..$i++]
addiert (-join'+'|iex
) dividiert durch , wie viele Begriffe , die wir bereits gesehen haben$i
. Wenn also ein Schritt auf dem Weg falsch ist,$o
wird er mit multipliziert0
. Ansonsten bleibt es1
durchgehend erhalten.Wir platzieren dann einfach
$o
in der Pipeline und die Ausgabe ist implizit.1
für wahr und0
für falsch.quelle
Perl 5, 27 +2 (-ap) Bytes
Probieren Sie es online
quelle
C # (.NET Core) , 74 Byte
Probieren Sie es online!
Gibt 0 für falsch und 1 für wahr zurück.
3 Bytes länger als der Kern der Chryslovelaces antworten . Insgesamt aber einige Bytes kürzer, da meine Variante keine
using
Anweisungen benötigt.quelle
Cubix , 35 Bytes
Probieren Sie es online!
Nicht die effizienteste Nutzung des Speicherplatzes (6 No-Ops im Code) Erzeugt keine Ausgabe für ein Golf-Array,
1
für ein Nicht-Golf-Array.Wird auf den folgenden Würfel erweitert:
Erklärung in Kürze, aber es enthält im Grunde genommen so etwas wie Luis Mendos MATL-Antwort oder Dennis ' Julia-Antwort .
Schau es dir an!
quelle
Matlab und Octave,
4136 Bytes5 Bytes gespeichert dank Luis Mendo
Probieren Sie es online!
quelle
a
Null ist. Aber das ist ein praktischer Trick, den man sich in ähnlichen Situationen merken muss.SQL (MySQL), 68 Byte
Probieren Sie es online!
Gibt 1 für Golf-Arrays und 0 für andere Arrays zurück . Nimmt eine Eingabe von einem benannten Tabelle ,
t
.t
Führen Sie zum Erstellen Folgendes aus:und um die Werte zu laden:
quelle
Ruby , 30 Bytes
Probieren Sie es online!
Inspiriert von Lynns Antwort . Würfe
NoMethodError
zum Golfen, kehrtnil
sonst zurück.quelle
Python 2 , 52 Bytes
Probieren Sie es online!
Python 2 ,
50484442 Bytesand
.S=k=0
.or
und dem booleschen Wert des Vergleichs alsk
Inkrementwert wurden zwei Bytes gespeichert .NameError
durch Verwenden einer undefinierten Variablen anstelle von aZeroDivisionError
.Probieren Sie es online!
quelle
q / kdb + 14 Bytes
Lösung:
Beispiele:
Erläuterung:
Ziemlich einfach mit dem
avgs
eingebauten:quelle
Julia 0,6 , 29 Bytes
Gibt false oder true zurück .
Probieren Sie es online!
quelle
R ,
3834 BytesProbieren Sie es online!
quelle
y
in den Funktionsargumenten zu definieren , ist die Verwendung voncumsum(x)
direkt 4 Byte kürzer. Es ist eine Schandecummean
, nicht in der Basis R.Add ++ , 54 Bytes
Probieren Sie es online!
Unoriginal Version, 30 Bytes
Probieren Sie es online!
Beide geben 1 für Golf-Arrays und 0 sonst aus
Wie sie arbeiten
Die erste Version wurde von mir erstellt, ohne andere Lösungen zu prüfen. Der zweite wurde von Dennis ' Kommentar inspiriert , daher bin ich weniger zufrieden damit.
Die erste Version
dbLR$
#
BF
B
€
g
k
{...}
I
K
U
Y
Z
g
k
l
u
w
¦+
AbL
/
0b]$
ABcB]
Bc
zip
ª!
Die zweite Version
¬+
J
Jellys indiciesBcB/
@0@B]
quelle
Pyth ,
1110 Bytes-1 Byte danke an Herrn Xcoder
Probieren Sie es online!
quelle
SI.OM._
(Port von cairdcoinheringaahing's Lösung von Jelly, von Erik the Outgolfer) oder 10 Bytes mit Ihrem Ansatz:.A.egb.O<Q
Java (OpenJDK 8) , 96 Byte
Ich weiß, dass es keine gute Golfsprache ist, aber ich habe es trotzdem versucht!
Eingabearray als erstes Argument der zu testenden kommagetrennten Ints.
Gibt 1 für wahr, 0 für falsch zurück.
Probieren Sie es online!
quelle
Java 7, 100 Bytes
Golf gespielt:
Ungolfed:
Probieren Sie es online aus
Gibt 0 für ungolfy und 1 für golfy Arrays zurück. Etwas länger als Java 8 Antwort.
quelle
PHP, 44 Bytes
0
Nimmt Eingaben von Befehlszeilenargumenten entgegen, beendet sich mit (ok) für ein Golf-Array, mit1
else.Laufen Sie mit
-nr
oder versuchen Sie es online .quelle
J, 19 Bytes
+/\ % #\
Durchschnittswerte der Präfixe:#\
Erzeugt 1..n.}:0,
füge am Anfang 0 hinzu und entferne die letzte[>:
ist die ursprüngliche Liste Element für Element> = zur verschobenen Liste der Durchschnitte?*/
Sind alle Elemente größer, dh ist die vorherige Liste alle1
s?Probieren Sie es online!
quelle
AWK , 39 Bytes
Probieren Sie es online!
Beachten Sie, dass die TIO-Verbindung über 5 zusätzliche Bytes verfügt
i=s=0
, um eine mehrzeilige Eingabe zu ermöglichen.quelle
Japt , 10 Bytes
Ich bin auf zwei 10-Byte-Lösungen gekommen und kann mich anscheinend nicht verbessern.
Versuch es
Erläuterung
Alternative
Versuch es
quelle