Inspiriert von dieser Frage unserer Mitbewerber bei Code Review.
Definitionen
Ein Super-Array ist ein Array, bei dem jedes neue Element im Array größer ist als die Summe aller vorherigen Elemente. {2, 3, 6, 13}
ist ein super Array, weil
3 > 2
6 > 3 + 2 (5)
13 > 6 + 3 + 2 (11)
{2, 3, 5, 11}
ist kein super Array, weil
3 > 2
5 == 3 + 2
11 > 5 + 3 + 2
Ein Duper-Array ist ein Array, bei dem jedes neue Element im Array größer ist als das Produkt aller vorherigen Elemente. {2, 3, 7, 43, 1856}
ist ein Super-Array, aber es ist auch ein Duper- Array da
3 > 2
7 > 3 * 2 (6)
43 > 7 * 3 * 2 (42)
1856 > 43 * 7 * 3 * 2 (1806)
Die Herausforderung
Schreiben Sie eine Funktion oder ein Programm, das ein Array als Eingabe im systemeigenen Listenformat Ihrer Sprache verwendet und festlegt, wie gut das Array ist. Optional können Sie auch eine Eingabe für die Array-Länge vornehmen (für Sprachen wie C / C ++). Sie können auch davon ausgehen, dass alle Zahlen in der Liste ganze Zahlen größer als 0 sind. Wenn es sich um ein Super- Array handelt, müssen Sie drucken. It's a super array!
Wenn es sich um ein Super- Duper- Array handelt, müssen It's a super duper array!
Sie drucken. nicht super. Beispiel: {1, 2, 3}
In diesem Fall sollten Sie drucken. It's a duper array!
Wenn das Array weder super noch duper ist, können Sie einen falschen Wert drucken.
Wie üblich ist dies Codegolf, daher gelten Standardlücken, und die kürzeste Antwort in Bytes gewinnt.
quelle
{1, 2, 3}
Array?2 * 1
gleich3
in meinem Kopf sein.super[space][space]array
es erlaubt ist.Antworten:
Jelly ,
47454̷4̷ 42 BytesDies gibt eine leere Zeichenfolge (falsy) für Arrays aus, die weder super noch duper sind. Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6),
111 -110 ByteDank @ETHproductions ein Byte gespart !
Erläuterung
Nimmt ein Array von Zahlen, gibt eine Zeichenfolge oder die Zahl
0
für false zurück.Prüfung
Code-Snippet anzeigen
quelle
s+=s&&n>s&&n,d*=d&&n>d&&n
s
muss auf diese Weise durchgeführt werden, da es auffalse
if gesetzt werden mussn>s
, aberd*false
den gleichen Effekt hat, damit es funktioniert. Vielen Dank!Java,
183182 BytesIch habe folgende Annahmen getroffen:
""
ist ein falscher Wert.Wenn eines davon falsch ist, sag es mir bitte.
Wie auch immer, ich kann das Gefühl nicht loswerden, dass ich mit der Menge an Variablen über Bord gegangen sein könnte.
Bearbeiten: Dank @UndefinedFunction konnte ein Byte gespeichert werden
quelle
boolean s=true
anboolean s=1<2
?MATL , 66 Bytes
Verwendet die aktuelle Version (10.0.3) , die älter als diese Herausforderung ist.
Die Eingabe erfolgt von stdin. Wenn nicht super oder duper, ist die Ausgabe leer (was falsch ist).
EDIT (7. April 2016) : aufgrund von Änderungen in Release 16.0.0 von der Sprache,
5L
und6L
muß ersetzt werden durch3L
und4L
repectively. Der Link zum Online-Compiler enthält diese Änderungen.Probieren Sie es online !
Erläuterung
quelle
C ++ 14,
178, ..., 161,157 BytesIch kann mir keine Möglichkeit vorstellen, es kürzer zu machen.Es scheint, als gäbe es immer Raum für Verbesserungen!Update 1 : Ich bin alles für sicheren Code, nehme aber ein unformatiertes Array und dessen Größe als Funktionsargumente, 9 Bytes kürzer als einen Vektor :(
Update 2: Gibt jetzt eine leere Zeichenfolge mit einem Wert von 8 Byte als Falschwert zurück.
Update 3: Zurück zu 165 Bytes dank CompuChips Kommentar.
Update 4: Ein weiterer Kommentar von CompuChip, weitere 4 Bytes aus.
Update 5: Mit
auto
anstelle einesstring
anderen Vorschlags von CompuChip werden weitere 4 Byte des Codes gespart.Ungolfed volles Programm mit Testfällen:
Ausgabe:
quelle
It's a array!
ist gemäß unserer Definition auf Meta wahr ( Beweis ) .if ... >=
: Ich denke, dase=r>s?e:0
ist äquivalent zuif(r<=s)e=0
.for(s=p=*a;--n;s+=r,p*=r)r=*++a
? Würden Siei
insgesamt fallen lassenC 150 Bytes
Jede Eingabe wird mit a abgeschlossen
0
. Testleitung:Bonus, wenn wir ein kompakteres Ausgabeformat haben, können wir es auf 107 Bytes reduzieren :
In diesem Fall kehre
Z
zurück3
für Superduper,2
für Super,1
für Duper und0
für niemanden.quelle
Pyth -
5452 BytesDer Teil zur Formatierung der Saiten kann wahrscheinlich Golf gespielt werden, aber ich mag den Super-Duper-Testansatz.
Test Suite .
quelle
c2"superduper"
kann bis+R"uper""sd"
lang-pyth
existiert nicht.Python 3, 127
5 Bytes dank FryAmTheEggman gespart.
Im Moment ziemlich einfache Lösung, nichts Besonderes. Führen Sie einfach eine laufende Summe aus Summe und Produkt aus und überprüfen Sie jedes Element.
Hier sind die Testfälle für den Fall, dass jemand anderes versuchen möchte, meine Punktzahl zu übertreffen.
quelle
AWK - 140 Bytes
Für diejenigen, die AWK nicht kennen, werden Datensätze basierend auf Variablen automatisch in Zeilen und basierend auf Variablen
RS
in Felder analysiertFS
. Nicht zugewiesene Variablen sind auch "" Variablen, die beim Hinzufügen zu einem # wie eine 0 wirken. DerBEGIN
Abschnitt wird genau einmal aufgerufen, bevor Datensätze / Felder analysiert werden. Der Rest der Sprache ist ziemlich C-artig, wobei jeder übereinstimmende Codeblock auf jeden Datensatz angewendet wird. Siehe http://www.gnu.org/software/gawk/manual/gawk.html#Getting-StartedWeitere Informationen finden .Beispiellauf
'code'
wie oben:echo 1 2 6 | 'code'
Sie können das Array auch in eine Datei mit dem Namen Dateiname einfügen und ausführen als:
'code' Filename
Wenn der Code häufig ausgeführt werden soll, kann er in eine ausführbare Skriptdatei eingefügt werden. Dies würde das Einschließen entfernen
' '
und derawk
Befehl würde am Anfang der Datei platziert werden als:#!/bin/awk -f
quelle
It's a array!
für Arrays gedruckt, die weder super noch duper sind. Dies ist eine wahrheitsgemäße Zeichenfolge gemäß unserer Definition für Meta .echo 1 2 6 | <the above code>
PHP,
144...113112 BytesErläuterung:
Ohne Registerglobale wäre das (118 Bytes):
$a
(Umwandlung von Array in String ergibtArray
)$p
auf 1 wurde ein Byte gespeichert, wodurch das Produkt weniger kostet.quelle
$a
. Sie müssen sich keine Sorgen um Mitteilungen und andere Dinge machen - ignorieren Sie sie einfach auf dieser Site.$argv[1]
ist eine gute Alternative. Abgesehen davon ist diese Herausforderung hinsichtlich der Ein- und Ausgabeformate sehr vage. Bei diesem Ansatz werden Sie jedoch möglicherweise vor andere Herausforderungen gestellt. Eine harte Codierung der Eingabe ist tatsächlich nicht akzeptabel - obwohl es einige Ausnahmen gibt, die dies zulassen. Ich weiß, dass das Lesen von Eingaben in PHP sehr teuer ist, deshalb habe ich eine ähnliche Frage zu Meta gestellt .register_globals
, aber ich werde künftige Golfspiele stattdessen als Funktion schreiben. Warum wurde short_closures abgelehnt?R , 115 Bytes
Probieren Sie es online!
Falscher Wert: Hier gibt es
It's a array!
nichts Besonderes , außer die Verwendungsapply
für eine Liste von Funktionen.quelle
Scala, 172 Bytes
Ungolfed (obwohl es wirklich nicht viel Arbeit gibt):
quelle
Haskell, 136 Bytes
f
ist die erforderliche Funktion. Beachten Sie, dass die leere Summe 0 und das leere Produkt 1 ist, weshalb[0]
weder Super noch Duper ist.s
Erfasst die gemeinsame Struktur des Testens von Super oder Duper, indem ein beliebiger Operatoro
und ein beliebiges neutrales Element verwendet werdent
. Dasfoldr
Protokoll verfolgt Tupel, bei(s,b)
denens
das Ergebnis der Verkettung aller angezeigten Elemente mit dem Operator ist,o
undb
gibt an, ob dieses Element für jedes Element, das bisher betrachtet wurde, größer als die zuvor berechnete Summe / das zuvor berechnete Produkt war.Der Output ist nicht sehr gut und ich würde es begrüßen, wenn jemand eine bessere Idee beisteuern würde!
Etwas besser lesbare Version:
quelle
05AB1E ,
5351 BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Hier finden Sie eine Erklärung, wie
.•dwā•
"duper" und wie„¦È!
"array!"quelle
Jelly , 37 Bytes
Probieren Sie es online!
Volles Programm.
Die
Z…P
Idee hatte ich aus Dennis '(alter) Antwort.quelle