Der Rundown
Erstellen Sie ein Programm, das ein Array mit zufälliger Länge und Zufallszahlen generiert, und wenden Sie dann eine Reihe von Regeln an, die das Array ändern. Nachdem die Regeln angewendet wurden, drucken Sie die Summe des Arrays, sofern nicht anders angegeben
Array-Setup
Das Array muss eine zufällige Länge zwischen 5 und 10 einschließlich haben, mit zufälligen ganzen Zahlen zwischen 1 und 20 einschließlich. Jede Array-Länge sollte die gleiche Wahrscheinlichkeit haben und jede Ganzzahl sollte die gleiche Wahrscheinlichkeit haben, pro Element ausgewählt zu werden.
Die 7 Regeln
Die Regeln sollten so funktionieren, als ob sie nacheinander angewendet würden (z. B. Regel 1 handelt vor Regel 2) und werden nur einmal angewendet. Zum Nachweis der Regelanwendung muss das Array nach jeder Regelanwendung und einmal vor dem Anwenden von Regeln auf die Konsole gedruckt werden.
- Wenn das Array eine 7 enthält, subtrahieren Sie 1 von jedem Element
- Wenn Regel 1 angewendet wird und das Array jetzt eine 0 enthält, fügen Sie jedem Element 1 hinzu
- Wenn das Array eine 13 enthält, schließen Sie die 13 und alle folgenden Elemente aus dem Array aus
- Wenn das Array eine 2 enthält, schließen Sie alle ungeraden Zahlen aus
- Wenn das Array eine 20 enthält und das dritte Element gerade ist, geben Sie 20 als Summe zurück und beenden Sie dann. Wenn eine 20 vorhanden ist und das dritte Element ungerade ist, geben Sie das 20-fache der Länge des Arrays als Summe zurück und beenden Sie dann.
- Wenn die Summe größer als 50 ist, entfernen Sie das letzte Element wiederholt, bis es kleiner oder gleich 50 ist
- Wenn das Array eine 16 enthält, drucken Sie die Summe sowohl dezimal als auch hexadezimal aus.
Beispiel
Hier ist ein erstes Array:
[20, 2, 5, 7, 14, 8]
Regel 1 kann angewendet werden:
[19, 1, 4, 6, 13, 7]
Als nächstes wird Regel 3 angewendet:
[19, 1, 4, 6]
Es sind keine weiteren Regeln erforderlich, daher gibt das Programm 30 als Summe zurück.
Anmerkungen
- Ich bin kein erfahrener Code-Golfer, obwohl ich sagen kann, dass mein persönlicher Datensatz in Python 3 mit 369 Bytes ist .
- Die Regeln müssen nicht in der richtigen Reihenfolge angewendet werden, sondern müssen so tun, als ob sie es getan hätten.
quelle
[3 3 3 3 4 3]
und[4 4 3 4 4]
, das jeweils mit einer Wahrscheinlichkeit von 50%, in Übereinstimmung mit dem, was unter „Array - Setup“ geschrieben. Also kann ich19
jedes Mal einfach ausgeben ? (Natürlich denke ich wirklich, dass die Definition von "zufällig" geklärt werden muss.)If the array contains a 20, and the third element is even/odd
Was ist, wenn das Array in diesem Schritt weniger als 3 Elemente enthält?Antworten:
Python 3,
294301287356 BytesIch weiß nicht, wie Sie verhindern sollen, dass Leute die Regeln umgehen, aber dieser verwendet das angegebene Verfahren.
+7 Bytes; danke an @YamB für das Speichern einiger Bytes; Es wurde viel mehr hinzugefügt, um einen vorherigen Fehler zu beheben.
-14 Bytes danke an @RootTwo und mich und korrigierte auch den Fehler.
+83 Bytes; Das wird schrecklich lang, weil OP die Regeln ständig ändert. -Einige Anzahl von Bytes dank @ZacharyT
quelle
k=[r(1,20)for _ in'-'*r(5,11)]
. Sie können ein weiteres Byte mit denk=[i+~-(1in k)*(7in k)for i in k]
Regeln 1 und 21
, und Sie können dasprint
in der zweiten und dritten bis letzten Zeile in ändernp
. Und Sie ... haben Ihren Bytecount nicht aktualisiert.05AB1E , 91 Bytes
Probieren Sie es online aus! oder Mit Eingabe
quelle
Javascript (ES6),
344342340342335331333313311305298297290289283279 BytesHuzzah! Endlich
mitBeat Arnauld verbunden !Nach diesem Austausch * in den Kommentaren der Herausforderung und nach langem Überlegen habe ich mich entschieden,
new Date
stattdessen den Startwert für den Zufallszahlengenerator zu verwendenMath.random()
. Dies bedeutet, dass alle Ganzzahlen im Array den gleichen Wert haben.Versuch es
Array(x).fill()
mit[...Array(x)]
.+1
durch a gespeichert~
.0
für ein leeres Array zurückgegeben wird.while
.,
zwischen den letzten 2 Anweisungen durch a ersetzt|
und das Gehäuse entfernt wurden()
.console.log
durchalert
.a.includes()
.includes()
und nurindexOf()
durchgehend gespeichert .s
Variablen an einen Ort verschoben wurde, an dem kein Komma erforderlich war.Math.random()
durchnew Date
.Lesbare und testbare Version
console.log
anstellealert
Ihrer geistigen Gesundheit verwendet! (Am besten in der Konsole Ihres Browsers anzeigen)Code-Snippet anzeigen
* Screenshot, falls gelöscht:
quelle
C (gcc) ,
621619593585570562557552529517500482461444442441438 BytesHier ist eine Menge Golf erforderlich ... Es wurde ein Fehler behoben, durch den das Hexidezimal für jede 16 in der Liste einmal gedruckt wurde ...
Besonderer Dank geht an ZacharyT mit der Golfhilfe
Probieren Sie es online aus!
quelle
JavaScript (ES6),
296295290289 ByteEin vollständiges Programm, das das anfängliche Array, die Zwischenergebnisse und die endgültige Summe in der Konsole protokolliert.
Wie es funktioniert
Dies wurde mit diesem JS-Packer komprimiert .
Nervenzusammenbruch:
226225 Bytes6964 BytesUnten finden Sie den Original-Quellcode mit einigen zusätzlichen Leerzeichen und Zeilenvorschüben zur besseren Lesbarkeit. Anstatt Standard-Golf-Tricks anzuwenden, wurde es so geschrieben, dass so viele sich wiederholende Saiten wie möglich erzeugt werden, um dem Packer zu gefallen. Zum Beispiel wird die Syntax
if(k=~a.indexOf(N))
überall dupliziert, obwohl siek
nur in der 3. Regel verwendet wird.Methoden zum Auspacken
Der ursprüngliche Auspackcode lautet:
Alle folgenden ES6-Varianten haben genau die gleiche Größe:
Der einzige Weg, den ich bisher gefunden habe, um ein paar Bytes zu sparen, ist die Verwendung von
for ... of
:quelle
n&1^1
(es wird überhaupt nicht gepackt, ist aber nur ein Byte kürzer als!(n&1)
). Ich habe irgendwann darüber nachgedacht und vergessen, es aufzunehmen.Versuchen Sie es zuerst mit Code Golf!
Bereits von anderen Javascriptern geschlagen! Dangit! Ich werde mich bessern!!! =)
Javascript ->
550402 BytesKönnte definitiv verbessert werden. Jetzt komprimiert:
Original:
quelle
Java 7,
622619618 Bytes-1 Byte dank @Poke
Erläuterung:
Beispielausgaben:
Kommentare hinter den Beispielausgaben werden nicht gedruckt, aber ich habe sie zur Verdeutlichung hinzugefügt.
Probieren Sie es hier aus.
quelle
List a = new ArrayList()
? Könnte einige Bytes sparen. Möglicherweise müssen Sie jedoch eine Typumwandlung hinzufügen, wenn Sie tatsächlich rechnen. Wenn nicht,Long
ist kürzer alsInteger
List
ich(int)
fünf Mal einen Cast verwenden sowie die for-each-Schleife vonint
auf ändernObject
und einen sechsten Cast hinzufügen. WasLong
: danke, das spart 1 Byte :) (muss noch für jeden vonint
bislong
undr.nextInt(20)+1
bis geändert werdenr.nextInt(20)+1L
).Ruby 2.4, 260 Bytes
Ruby 2.4 wird benötigt für
Enumerable#sum
.Probieren Sie es online aus! (Weder repl.it noch tio.run Unterstützung Ruby - 2.4 noch, so dass diese Online - Version ersetzt
sum
mitinject(:+)
, die das gleiche Verhalten hat.)quelle
R (3.3.1), 325 Bytes
Ziemlich naive Umsetzung; Ich denke, ich kann es wahrscheinlich etwas kürzer machen.
quelle
PowerShell ,
525413 ByteProbieren Sie es online aus!
Ich wollte es versuchen, obwohl ich dachte, ich würde die Antworten hier schon nicht übertreffen: PI hat immer noch versucht, dies zu verbessern, ich bin sicher, dass es mit weniger Bytes möglich ist. Fand eine bessere Methode für Hex, könnte sich aber wahrscheinlich noch verbessern.
Musste
$a
so oft in einen String umwandeln, dass es besser war, einen Filter dafür zu erstellen ...Es gab einige einfache Golfplätze, die ich vermisst habe, wie Klammern und Leerzeichen. Könnte es noch welche geben?
Etwas einfacher zu lesender Code:
quelle
MATLAB, 275 Bytes
Ich hatte ursprünglich eine einzeilige Octave-Antwort geplant, aber die Ausgabe aller angewandten Regeln verlangte meine Pläne. Stattdessen eine ziemlich einfache MATLAB-Antwort mit einigen interessanten Optimierungen, z. B. die Verwendung von
cumsum
anstelle der offensichtlichenwhile
für Regel 6. Dennoch wird ein Großteil der Byteanzahl fürif
s verschwendet , um die Ausgabe zu verhindern, wenn eine Regel nicht angewendet wird.Probieren Sie es online aus!
quelle
Scala 587 Bytes ein Liner
Scala, 763 Bytes wie es ist
quelle
a: Array[T]
benötigt? Sie haben keinen Platz inargs:Array[String]
, was zu meiner Anfrage geführt hat.MATLAB,
228241 ByteDadurch werden alle Regeln der Reihe nach angewendet und der Array-Wert nach jedem Schritt gedruckt.
Das Programm stürzt nach Regel 5 ab, wenn die resultierende Anzahl von Elementen weniger als drei beträgt. Es gibt derzeit nichts zu sagen, was passieren soll, wenn es kein drittes Element gibt, daher gehe ich davon aus, dass ein Absturz akzeptabel ist.Das Programm druckt jetzt 20, wenn weniger als 3 Elemente vorhanden sind und eines oder mehrere eine 20 sind.Interessanterweise kann Schritt 2 angewendet werden, unabhängig davon, ob Schritt 1 war. Dies liegt daran, dass das Eingabearray niemals eine 0 enthält, was bedeutet, dass, wenn das Array 0 enthält, dies das Ergebnis von Schritt 1 sein muss.
Alle Regeln werden nacheinander bis 5 angewendet, auch wenn keine Änderungen vorgenommen wurden. Infolgedessen wird das Array zu Beginn und dann nach jedem Schritt bis 5 gedruckt. Nach Schritt 5 erhalten Sie entweder die Summe, wenn sie angewendet wird, oder erst nach Schritt 6 eine Ausgabe. Eine zusätzliche Zeile mit
a
kann danach hinzugefügt werden die else-Anweisung, um sicherzustellen, dass der Array-Wert nach Schritt 5 auf Kosten von 2 Bytes gedruckt wird.Ich möchte auch erwähnen, dass ich mir die anderen Antworten erst angesehen habe, nachdem ich dies geschrieben hatte. Ich sehe jetzt, dass es eine andere MATLAB-Antwort mit einigen Ähnlichkeiten gibt - die alle zufällig sind.
quelle
Python 3,
297 293 289, 278 BytesWie Arnauld bemerkte, können Sie nur dann 0 erhalten, wenn Regel 1 angewendet wurde, die beim Einrücken gespeichert wurde. Vielen Dank an alle anderen, die ebenfalls Vorschläge gemacht haben.
Probieren Sie es online aus
quelle
and
und brauchen~
.from random import* a=b=sample(range(1,20),randint(5,10))
spart einige Bytes, da Sie Zeile 2 löschen können.Perl 6 , 246 Bytes
Ungolfed:
quelle
Common Lisp, 490 Bytes
Hier wird das Array als Common Lisp-Liste dargestellt.
Wie üblich großer Einsatz von
and
undor
als Kontrollstrukturen.quelle