Einführung:
Ich denke, jeder weiß, was eine Lava-Lampe ist, aber für den Fall, dass dies nicht der Fall ist:
Im Grunde handelt es sich um Glasröhren, die Wachs in einer durchscheinenden Flüssigkeit enthalten. Der untere Teil erwärmt sich beim Einschalten der Lampe, wodurch sich die Dichte ändert und das Wachs nach oben schwimmt. Wenn es abkühlt, fällt es wieder ab und verursacht den oben gezeigten Effekt.
Normalerweise dauert es etwa 45 bis 60 Minuten, bis der Lampensockel eine Temperatur erreicht hat, die ausreicht, um das feste Wachs in flüssiges Wachs umzuwandeln (wenn sich die Lampe in einem Raum mit Raumtemperatur befindet).
Herausforderung:
Bei einer positiven Ganzzahl, die n
angibt, wie viele Minuten seit dem Einschalten der Lava-Lampe vergangen sind, wird ein zufälliger Status der Lava-Lampe basierend auf Ganzzahlen auf fünf Ebenen ausgegeben.
Für diese Herausforderung sagen wir, dass die Lava-Lampe insgesamt 1000 Einheiten Wachs enthält, und wir haben fünf Ebenen, in denen das Wachs sein kann.
1) Wenn n
der Wert unter 45 liegt, heizt die Lava-Lampe immer noch auf, sodass der Ausgang vier leere Zeilen mit 1000
unten aufweist:
1000
2) Befindet n
sich [45, 60)
die Lava-Lampe im Bereich, hat sich die Temperatur so weit erhöht, dass sich das Wachs bewegen kann, aber noch nicht sehr hoch. Das Wachs kann bis einschließlich zur dritten Stufe reichen.
3) Wenn n
ist 60
oder höher ist , kann das Wachs bei einem der fünf Stufen sein.
Wenn Sie also eine positive Ganzzahl n
als Eingabe angeben , geben Sie einen zufälligen Zustand unter Berücksichtigung der drei oben genannten Regeln aus.
Hier sind einige Beispielausgaben:
Mögliche Ausgänge für jeden n
, der ist >= 45
:
523
106
371
913
87
Mögliche Ausgänge für jeden n
, der ist >= 60
:
73
113
312
5
497
284
55
637
24
Konstante Ausgabe dafür n
ist <= 44
(und mögliche Ausgabe für jede n
):
1000
Herausforderungsregeln:
- Es kann leere Zeilen geben, auch wenn die darüber liegende Ebene nicht leer ist.
- Nur
0
ist in keiner Zeile erlaubt. Sollte stattdessen leer sein. - Die Ausgabe ist etwas flexibel. Sie können eine Liste / ein Array von Zeichenfolgen / Objekten anstelle des oben beschriebenen Ergebnisses mit Zeilenumbruch ausgeben. Der Grund, warum ich Strings / Objekte sage, liegt in der obigen Regel. Eine leere Zeile sollte sein
""
,null
,[]
usw., kann aber nicht sein0
oder eine negative ganze Zahl ist (noch kann es seinfalse
) (Ie["", "", 913, "", 87]
fürn >= 45
). Sie können auch die Ausgabe umkehren (dh1000\n\n\n\n
anstelle von\n\n\n\n1000
oder[87, null, 913, null, null]
anstelle von[null, null, 913, null, 87]
). - Die Zahlen sollten alle ganze Zahlen sein. Es kann sich um Dezimalstellen mit einem
0
Dezimalwert handeln, aber keine der Zahlen sollte Dezimalstellen haben, und die Ganzzahlen sollten immer exakt summieren1000
. - Alle möglichen zufälligen Ausgaben, die auf basieren,
n
sollten eine Wahrscheinlichkeit ungleich Null haben. - Eine abschließende neue Zeile (also sechs Ausgabezeilen) ist zulässig.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
0
einer negativen Zahl oder seinfalse
.n < 60
?n < 45
ist jedoch nur 1 Ebene gefüllt (oben oder unten, je nachdem, in welcher Reihenfolge Sie es ausgeben)1000
. Mit45 <= n < 60
drei der fünf und mitn >= 60
allen fünf. Die Ausgabe enthält jedoch immer fünf Zeilen.Antworten:
MathGolf ,
2120 BytesProbieren Sie es online!
Dies ist meine erste Antwort in meiner neuen Sprache. Ich habe meine Lösung auf der 05AB1E-Lösung von Emigna aufgebaut, aber einige nette Funktionen von MathGolf verwendet, um sie ein bisschen kürzer zu machen.
Erläuterung
quelle
Python 2 ,
117113108107106105 BytesProbieren Sie es online!
Gibt eine umgekehrte Liste zurück (unten zuerst)
Version inspiriert von der Stackoverflow- Antwort in den Kommentaren (Edgecases sind wahrscheinlicher):
Python 2 , 129 Bytes
Probieren Sie es online!
quelle
333
oder200
für die 3 bzw. 5 Teile. Ich sehe keine Spitzen / Ausreißer in Richtung0
oder1000
. Oder sind die Chancen für diejenigen, die nur astronomisch klein (aber immer noch ungleich Null) sind, im Vergleich zu ganzen Zahlen in der Nähe von333
und200
?0
oder0-2
oder0-4
) gelegt und gezählt. Die Chancen, dass dann keiner von beiden eingeht, sind da, aber sehr gering.JavaScript (ES6), 78 Byte
Gibt ein umgekehrtes Array zurück, in dem leere Ebenen mit einem Leerzeichen gefüllt sind.
Probieren Sie es online!
Kommentiert
quelle
R ,
8584 Bytes-1 Byte dank @Giuseppe
Probieren Sie es online!
Erklärung (ungolfed):
quelle
NA
als leere Zeile / Element erlaubt ist, ist hier eine 77-Byte-Lösung ( OnlineC (gcc) ,
131,116,90,89, 87 BytesProbieren Sie es online!
Update : Ein Fehler im Original wurde behoben. In der Hilfefunktion zusammengeführt, um zusätzliche 15 Byte zu reduzieren.
Update 2 : -25 Bytes dank ErikF.
Update 3 : -1 Byte dank ceilingcat.
Degolf
quelle
puts()
indem Sie den Ausdruck zu einem einzigen kombinierenprintf()
und die Subtraktion in das Schleifenende setzen. Außerdem denke ich, dass Sie diesrand()
Initialisierung in den Anrufer setzen dürfen. Probieren Sie es online!05AB1E ,
272625 BytesEin Byte dank Adnan gespeichert .
Dank Kevin Cruijssen wurde ein weiteres Byte gespeichert .
Probieren Sie es online!
Erläuterung
quelle
5Å0
und Weiseǝ
, wie Sie undε0Û
am Ende verwendet haben. Ich habe versucht, etwas kürzeres zu finden, kann es aber nicht. Ich habe das Gefühl, dass es irgendwie noch Golf spielen kann, aber ich sehe es derzeit nicht (vielleicht kann es nicht und es ist nur ein zufälliges Gefühl).•A–•60в
ist 1 Byte länger als44 59‚
kürzer. Undε0Û
das0
s durch leere Strings zu ersetzen, scheint auch das kürzeste zu sein, da0K
einfach die 0-Items komplett0м
entfernt und alle Ziffern0
in allen Zahlen entfernt werden.44 59‚
, aber ich kann sie nicht finden (das•H|•2ô
ist die gleiche Anzahl). Meine vorherige Lösung (ebenfalls 27 Bytes) wurde verwendet45
und60
ist auf verschiedene Arten einfacher zu generieren, aber ich denke, das war ungültig, da es 1 , 3 oder 5 Pegel je nach Eingabe und nicht immer 5 ausgibt .•H|•2ô
ist ja auch ein kluger Weg, hätte nicht darüber nachgedacht. Und es sollte in der Tat 5 Zeilen ausgeben. Ich habe Ihre vorherige Antwort tatsächlich gesehen und wollte sie kommentieren, gab aber nur 1 Zeile für ausn < 45
, aber dann haben Sie sie gelöscht. Ich bin froh, dass Sie eine weitere 27-Byte-Lösung gefunden haben. :)ŽH|2ô
ist was du suchst?JavaScript (Node.js) ,
87-86ByteProbieren Sie es online!
Die 83-Byte-Lösung (
(n/15-2|0)*s<4
) wird zuerst reserviert, da ich nach größeren suchen mussn
.UPDATE: Ja,
(n/15-2|0)*s<4
nicht , weil für eine größere Arbeit ,n
weiln
groß genug , um die Summe macht 1000 zu erreichen scheitern.quelle
PHP, 92 Bytes
Laufen Sie als Pipe mit
-R
oder probieren Sie es online aus .quelle
Sauber , 215 Bytes
Probieren Sie es online!
So hat mich endlich einen kürzeren Weg zu einem zufälligen Samen als Import gefunden
System._Unsafe
,System.Time
und mittoInt(accUnsafe time)
...Einbetten einen Anrufs zu C, ohne auf den Weltstaat Typen normalerweise verwendet , um sicherzustellen , die Auswertung - Und Junge ist es wirklich im Geist des codegolf Reihenfolge solcher Dinge.
quelle
Java (JDK 10) ,
121117113111 BytesProbieren Sie es online!
Es ist voreingenommen, mehr Wachs in die Nähe der Oberseite zu bringen, aber theoretisch kann jede rechtliche Anordnung von Wachs auftreten.
edit: 4 Bytes wurden von @KevinCruijssen gespeichert
In lesbarem Java:
quelle
Math.random()*(w+1)
kannMath.random()*-~w
für -2 Bytes sein. Hier der relevante Tipp als Hinweis warum. . Gute Antwort! +1 von mir. BEARBEITEN: Tatsächlich können 2 weitere Bytes gespeichert werden, indemj
temporär als Variable für verwendet wirdw+1
(da diese ohnehin direkt nach dem Drucken überschrieben wird) undj*=Math.random()
stattdessen verwendet wird, sodass Sie die Umwandlung in(int)
( 117 Bytes ) nicht benötigen .&i>2
Bedingung nicht notwendig istPowershell ,
188162 BytesProbieren Sie es online!
-2 Bytes von @Kevin Cruijssen
-4 Bytes durch Entfernen des optionalen Getverbs
-20 Bytes durch Verkürzen der Schleife und Entfernen von Leerzeichen
quelle
else{if($t-ne 1e3){Get-Random(1000-$t)}}
zuelseif($t-ne 1e3){Get-Random(1000-$t)}
? Ich sehe, dass Sieelseif
in Ihrem Code eine frühere verwendet haben, so dass Sie 2 Bytes sparen sollten. Vielleicht geben auch Tipps zum Golfen in Powershell oder Tipps zum Golfen in <allen Sprachen> Anregungen für mehr? Genieße deinen Aufenthalt! :)Pascal (FPC) ,
192 -190 ByteProbieren Sie es online!
Unter Verwendung der Methode der Verpackung in Behälter von TFeld . Gibt die unterste Zeile zuerst mit einer nachgestellten Zeile aus.
Es scheint, dass FPC keine Probleme damit hat
random(0)
, also habe ich dort einige ungewöhnliche Ergänzungen.Mein ursprünglicher Beitrag, auf 209 Bytes reduziert:
Probieren Sie es online!
quelle
Kohle , 37 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Schleife zweimal zweimal. Alternativ könnte ich Integer den Schleifenindex durch 2 für die gleiche Byteanzahl geteilt haben.
Wenn der äußere Index plus ein Fünfzehntel der Temperatur größer als drei ist ...
... dann schieben Sie eine zufällige ganze Zahl bis einschließlich 1000 - die bisherige Summe. Leider kann Charcoal die Summe einer leeren Liste nicht berechnen, sodass ich stattdessen die leere Zeichenfolge ersetzen muss.
Schieben Sie den Restbetrag in die Liste.
Konvertieren Sie die Liste in eine Zeichenfolge, verwenden Sie jedoch die leere Zeichenfolge anstelle von Null.
quelle
Gelee , 28 Bytes
Ein vollständiges Programm druckt das Ergebnis aus (auf den Kopf gestellt, wie erlaubt).
7
ȷ
Wie?
quelle
1000\n\n\n\n
statt\n\n\n\n1000
oder[87, null, 913, null, null]
statt[null, null, 913, null, 87]
). " Also ja, Sie dürfen die 28-Byte-Version ohne dieṚ
.Zweig , 126 Bytes
Das war eine wirklich lustige Herausforderung!
Dieser Code erstellt ein Makro, das importiert werden muss.
So importieren Sie es:
Dies sollte den Trick machen.
Sie können es unter https://twigfiddle.com/t4dfgy ausprobieren.
Hinweis : Da die Seite Leerzeichen entfernt, musste ich
-
am Ende der Zeile ein einfügen, um zu beweisen, dass sie die richtige Anzahl von Zeilen ausgibt.Bei einer regulären Installation würden Sie nur die Zeilenumbrüche ohne Probleme sehen.
quelle
Perl 6 , 62 Bytes
Probieren Sie es online!
Ein anonymer Codeblock, der eine Zeichenfolge verwendet und eine Liste mit ganzen Zahlen zurückgibt, wobei anstelle von s
Nil
eine leere Liste ([]
) verwendet wird0
.Erläuterung:
quelle
PHP ,
113108999793 BytesProbieren Sie es online!
-11 Bytes dank @titus
-9 Bytes, weil alles ein String ist
quelle
J ,
565554484340 BytesProbieren Sie es online!
-3 Bytes dank FrownyFrog
Ein weiteres Konzept schöne Methode , die etwas länger ist , aber garantiert vollkommen gleichmäßige Verteilung über alle Möglichkeiten, je das Verfahren hier :
J , 53 Bytes
Probieren Sie es online!
quelle
$!.a:
nur{.
?PowerShell ,
11510598 Byte-17 bytes dank mazzy
Probieren Sie es online!
Ein Golf von Edwins reizender Antwort . Wenn du das magst, stimme ihm zu.
quelle
Ruby ,
62-55BytesProbieren Sie es online!
Tests sind auf 0-99 Grad begrenzt, da Lavalampen bei höheren Temperaturen gefährlich sein können:
quelle
0
für die Leerzeilen. Die Leerzeilen in der Array können alles mit Ausnahme sein0
,false
oder eine negative Zahl. So kann es seinnull
,""
,[]
, etc., aber nicht0
. Ich0
bin mir nicht sicher, ob Ruby über Objekt-Arrays / -Listen verfügt, damit Sie das s in etwas anderes umwandeln können. Andernfalls müssen Sie es drucken, anstatt ein Array / eine Liste zurückzugeben.