Eine schöne Eigenschaft einer Turing-complete-Sprache ist, dass damit jedes Programm geschrieben werden kann, einschließlich der Simulation des gesamten Universums.
Ihre Aufgabe ist es, genau das zu tun: Schreiben Sie ein Programm, das das Universum simuliert .
Hinweis: Obwohl ich nicht bezweifle, dass Sie diese Aufgabe ausführen können, habe ich heutzutage nicht genügend Zeit, um zu überprüfen, ob alle 10 90 Partikel in Ihrer Simulation das tun, was sie wirklich tun sollten. Daher ist es nur zur Vereinfachung des Testens und der Auswertung ausreichend, wenn Ihr Universumsimulator nur mit einem einzelnen Startpartikel arbeitet. Nehmen wir an, es handelt sich bei diesem Partikel um das kürzlich entdeckte Higgs-Boson.
Ihr Universum beginnt mit nichts anderem als einem einzelnen Higgs-Boson mit ungefähr 120 GeV in der Mitte. Um die Ausgabe nicht zu lang zu machen, lassen wir dieses Universum mit nur 10 -25 Sekunden anstatt seiner "üblichen Taktrate" von 5,4 × 10 -44 Sekunden ticken .
Dieses Higgs-Boson zerfällt früher oder später, da es eine Halbwertszeit von 1,6 × 10 −22 Sekunden hat. Bei jedem Tick der Simulation besteht also eine Wahrscheinlichkeit von 0,0433%, dass es zerfällt. Sie können hier überprüfen , in was es zerfallen wird . Um eine zentrale und vereinfachte Anforderung zu haben, liste ich die Verzweigungsverhältnisse auf, die Sie verwenden sollten:
Simulation ausführen
Bei jedem Tick der Simulation besteht für das Higgs-Boson eine Wahrscheinlichkeit von 0,0433%, dass es verfällt. In diesem Fall zerfällt es mit den angegebenen Wahrscheinlichkeiten in die folgenden Partikel (Sie sollten diese Namen in der Ausgabe verwenden):
- unterer Quark + unterer Antiquark (64,8%)
- 2 W-Bosonen (14,1%)
- 2 Gluonen (8,82%)
- Tau Lepton + Antitau Lepton (7,04%)
- Charm Quark + Charm Antiquark (3,27%)
- 2 Z-Bosonen (1,59%)
- 2 Photonen (0,223%)
- 1 Z-Boson + 1 Photon (0,111%)
- Myon + Antimuon (0,0244%)
- oberer Quark + oberer Antiquark (0,0216%)
Für insgesamt 100%.
Einige dieser Partikel werden weiter zerfallen.
W Boson : Halbwertszeit von 10 -25 Sekunden, dies bedeutet eine 50% ige Chance, bei gleicher Wahrscheinlichkeit bei jedem Tick in eine der folgenden zu zerfallen:
- Positron + Neutrino
- Antimuon + Neutrino
- Antitau-Lepton + Neutrino
Z-Boson : Halbwertszeit von 10 -25 Sekunden, dies bedeutet eine 50% ige Chance, bei jedem Tick in eine der folgenden zu zerfallen:
- Neutrino + Antineutrino (20,6%)
- Elektron + Positron (3,4%)
- Myon + Antimuon (3,4%)
- Tau Lepton + Antitau Lepton (3,4%)
- Daunenquark + Daunenantiquark (15,2%)
- seltsamer Quark + seltsamer Antiquark (15,2%)
- unterer Quark + unterer Antiquark (15,2%)
- up quark + up antiquark (11,8%)
- Charm Quark + Charm Antiquark (11,8%)
Top-Quark : Halbwertszeit von 5 × 10 -25 Sekunden, dies bedeutet eine 12,95% ige Chance, bei jeder Zecke mit gleicher Wahrscheinlichkeit in die folgenden zu zerfallen:
- W Boson + Down Quark
- W Boson + seltsamer Quark
- W Boson + Bottom Quark
Natürlich wird der W-Boson auch bald zerfallen ...
Das Top-Antiquark verhält sich ähnlich wie das Top-Quark: Es zerfällt in ein W-Boson und ein ad / s / b-Antiquark.
Alle anderen Teilchen (also alle außer den Z- und W-Bosonen und den Top-Quarks) haben eine um viele Größenordnungen längere Halbwertszeit. Damit die Ausgabe nicht gestört wird, werden sie alle für unsere Simulation als stabil angesehen .
Da das Universum weitgehend leer ist, haben alle Teilchen genug Platz für sich und interagieren nicht miteinander. Daher sind alle einzelnen Partikel in jeder Hinsicht unabhängig voneinander, einschließlich der Aufspaltungswahrscheinlichkeiten.
Ausgabe:
Bei jedem Tick der Simulation müssen Sie den Inhalt des simulierten Universums in eine neue Zeile drucken. Zum Beispiel:
The universe contains 1 Higgs boson.
The universe contains 1 Higgs boson.
The universe contains 1 Higgs boson.
The universe contains 1 Higgs boson.
The universe contains 2 W bosons.
The universe contains 2 W bosons.
The universe contains 1 W boson, 1 positron and 1 neutrino.
The universe contains 1 positron, 1 antitau lepton and 2 neutrinos.
Simulation ended after 0.8 yoctoseconds.
Die Reihenfolge der Partikel in der Linie ist nicht wichtig. Die Formatierung muss jedoch genau wie im obigen Beispiel sein , einschließlich Interpunktion und Pluralisierung. Wenn Sie ein ganzes (Mini-) Universum simulieren, sollte es gut aussehen (und ich wollte den Missbrauch einer nicht ausreichend strengen Ausgabeanforderung vermeiden)
Jede Zeile entspricht 0,1 Yoctosekunden, aber es wird Ihnen verziehen, wenn Ihr Programm länger braucht, um die Ausgabe zu drucken.
Die Simulation endet, wenn nur noch "stabile" Partikel übrig sind.
Wertung
Es gelten die Standard-Code-Golfregeln.
Der Zufallszahlengenerator kann pseudozufällig sein, aber Sie müssen ihn setzen, wenn die Sprache ihn nicht standardmäßig setzt. Die Wahrscheinlichkeitsverteilung Ihres RNG muss gleichmäßig sein.
- Sie erhalten einen Bonus von -10% auf die Codegröße, wenn das Programm eine Ganzzahl als Eingabe verwendet und mit so vielen Higgs-Bosonen beginnt.
Ausnahme für Turingmaschinenbegeisterte.
Für diejenigen, die es wagen, ihr Glück mit einer tatsächlichen Turing-Maschine oder einer ähnlichen Sprache (wie Brainfuck) zu versuchen , wird ihre Aufgabe durch die folgenden Regeländerungen erleichtert (nur anwendbar, wenn die Sprache ein Brainfuck-Derivat oder auf andere Weise ein sehr vereinfachtes Turing-Derivat ist). Maschine, nicht zuweisbar, keine ALU, und Werte auf dem Band können nur um eins erhöht und verringert werden) :
- Die Teilchennamen werden vereinfacht zu d, s, b, t, u, c für die Quarks, v für das Neutrino, T für das Tau-Lepton, m für das Myon, g für das Gluon, p für das Photon, Z, W und H für das Bosonen, - für das Elektron und + für das Positron. Bei jedem Tick wird eine Eingabe mit dem Wert 0 oder 1 aus der Standardeingabe bereitgestellt, die angibt, ob das erste instabile Partikel in der Liste zerfällt oder nicht.
Die Beispielausgabe wird daher
H
H
H
H
W W
W W
W + n
+ !T n n
SimulateUniverse
eingebaute Funktion?Antworten:
Pyth , 572 · 0,9 = 514,8 Bytes
Qualifiziert sich für den -10% Bonus. Probieren Sie es hier online aus oder probieren Sie es mit einer Halbwertszeit des Higgs-Bosons, die hier auf 1 ys reduziert ist (dies sorgt für weniger Wiederholungen in der Ausgabe und ein aufregenderes Universum!).
Ich bin davon überzeugt, dass dies alles andere als optimal ist, insbesondere die Wörterbuchkomprimierung, aber ich habe bereits mehr als genug Zeit damit verschwendet. Verbesserungsvorschläge sind daher willkommen.
Das Programm ist in drei Teile unterteilt: Wörterbuchvorbereitung, Definition der Ausgabefunktion und Ausführung der Simulation.
Wörterbuchvorbereitung
Jm?tld,hd,-1^.5c1shced\ sm*]<k2s>k2tced\ dcR\,cu:GhHtHc"A76 !B17 !C1 v!D_top !E00 !F bosR!GmuR_!Ineutrino_!Jtau leptR_!KQ_charm !LQ_strange !MQ_down !NQ_up !OQ_bottom !Panti!Qquark!Ron"\!"HiggsF,16Efg3240Ebb705Epp441Eqr352ER16350 cc7950 ss1115 cs555 tu122 de108_WF,CxCuCr1_ZF,Cw103 yxBtuBqrBjkAlmAfgAhi59 R59DQ,5 bj1 bl1 bf1DPOOPNNPMMPLLPKKPQ_gluR_JPJphotR_GPGIPIpositrR_electrR"\_
Dies ist der größte Abschnitt des fertigen Codes, der 381 Byte belegt. Das Wörterbuch wird mit der folgenden Zeichenfolge erstellt:
Die Zeichenfolge ist eine durch Unterstriche getrennte Liste der Partikel und, wenn das Partikel instabil ist, sein Verhalten - eine durch Leerzeichen getrennte Liste, die aus der Halbwertszeit in Simulationsticks, gefolgt von der Zerfallsrate und den jeweiligen Wahrscheinlichkeiten besteht. Jedem Teilchen ist ein Einzelbuchstabencode zugeordnet, der sich aus seiner Position in der Liste ergibt
a
, die im Kleinbuchstaben-Alphabet indiziert ist. Das Higgs-Boson ist also das W-Bosonb
, bis hin zum Elektronenweseny
.Anstatt die Abklingwahrscheinlichkeiten zu speichern, wird stattdessen die Halbwertszeit gespeichert und die Wahrscheinlichkeit berechnet, wenn das Wörterbuch verarbeitet wird. Die verwendete Formel ist,
P=1-(1/2)^(1/h)
woP
die Wahrscheinlichkeit des Zerfalls pro Tick liegt undh
ist die in Ticks gemessene Halbwertszeit des Partikels.Die instabilen Partikel sind die ersten vier in der Liste. Da die Anzahl dieser Partikel bestimmt, wann die Simulation endet, können Sie diese am Anfang der Liste leicht später überprüfen.
Das Problem ist, dass diese Zeichenfolge sehr groß ist - 436 Bytes! - und die Verwendung von Pyths eingebauter String-Komprimierung erhöht tatsächlich die Byteanzahl, da so viele Multi-Byte-Zeichen verwendet werden. Ich habe mich für ein relativ einfaches iteratives Wörterbuchkomprimierungsschema entschieden. Das Snippet
u:GhHtHc"xxx"\!"yyy"
dekomprimiert es wie folgt:Die Wörterbucheinträge, die ich ausgewählt habe, basieren nur auf meiner Intuition und einigen Versuchen und Irrtümern, daher bin ich sicher, dass es viel Raum für Verbesserungen gibt.
Die dekomprimierte Wörterbuchzeichenfolge wird dann wie folgt interpretiert und gespeichert:
Das Ergebnis ist
J
eine geordnete Liste der Teilchennamen. Wenn sie zerfallen, wird der Name mit ihrer Zerfallswahrscheinlichkeit und einer Menge der Partikel, in die sie zerfallen könnten, gepaart, gewichtet nach ihren relativen Wahrscheinlichkeiten.Definition der Ausgabefunktion
Dies definiert eine Funktion
y(b)
, die den aktuellen Zustand des Universums als Eingabe akzeptiert. Dies ist einfach eine Liste der Nummern der Partikel, sortiert nach ihrem Typ, wie in der im vorherigen Abschnitt beschriebenen Wörterbuchzeichenfolge definiert.Simulationsausführung
K+Q*]Z24Ws<K4yK=+Z1Vs.em?>O1.0he@JkY,kOee@Jkb<K4IN XhNK_1 XRK1xLGeN;yK%"Simulation ended after %s yoctoseconds."cZT
Mit der Vorbereitung kann nun die Simulation ausgeführt werden. Dies besteht aus ein paar Schritten:
Universumsinitialisierung
Da das Teilchen am Index 0 im Universumszustand das Higgs-Boson ist, ist der Anfangszustand des Universums ein Array von Eingangszahlen, gefolgt von 24 Nullen.
Simulationsschleife
Bei jedem Tick in der Simulation muss der aktuelle Zustand des Universums angezeigt, ein Zähler erhöht und jedes flüchtige Partikel überprüft werden, ob es zerfallen soll. Die Ergebnisse müssen auf den Zustand des Universums angewendet werden, sobald jedes Partikel bewertet wurde.
Endgültige Ausgabe
Die Simulation wird beendet, wenn keine instabilen Partikel mehr vorhanden sind. Alles, was bleibt, ist die Ausgabe des Endzustands des Universums und wie lange (wie viele Ticks) die Simulation gedauert hat.
quelle
C ++ (
2420,2243,2353,1860, 1822 * .9 = 1639,8)Ok, das ist wahrscheinlich die schlechteste Code-Einsendung aller Zeiten, aber es ist meine erste und ich hatte Spaß. Ich denke es funktioniert sogar. :)
Schnelle Version
Dieser ist nicht so kurz (9 zusätzliche Bytes), läuft aber viel schneller, um große Zahlen zu testen. Da es nicht kurz genug ist, um an Wettkämpfen teilzunehmen, habe ich auch einen kleinen Code hinzugefügt, um die tatsächliche Ausführungszeit zu messen und ihn direkt nach der simulierten Zeit auszudrucken. Meine ursprüngliche Version hat n = 100k in ca. 8 Minuten. Die obige Version schafft das in ca. 2 Minuten. Diese schnelle Version schafft das in 9 Sekunden. n = 1 Million dauerte 53 Sekunden.
Beispielausgabe (keine Argumente)
Beispielausgabe (universe.exe 10):
Beispielausgabe (universe.exe 1000000)
(nicht ganz 10 ^ 90, aber wir kommen dorthin)
Größere Ausgaben
Wenn Sie die Konsolenausgabe über eine Befehlszeile verwenden, würde ich so etwas vorschlagen,
universe.exe 100 > temp.txt
damit es viel schneller geht. Mit Notepad ++, können Sie dann öffnen temp.txt, schlagenctrl+H
, geben Sie^(.*?)$\s+?^(?=.*^\1$)
in das Suchen nach Feld, geben Sie nichts in das Ersetzen durch Feld, schalten SuchmodusRegular Expression
drehen In Auswahl und . Stimmt mit Newline überein und drückeOFF
dannReplace All
. Jetzt sehen Sie nur, wo die Änderungen statt 8000 Zeilen der Ausgabe aufgetreten sind (ich scheine jedoch Fehler zu bekommen, die mehr als 2000-3000 Zeilen gleichzeitig machen).Fixes / Tweaks
quelle
char t[N]={'d','D','u','U','b','B','l','L','c','C','s','S','n','N','m','M','g','G','p','e','E','T','t','Z','W','H'
zuchar t[]="dDuUbBlLcCsSnNmMgGpeETtZWH"
? Sollte in c funktionieren , nicht sicher über c ++Python 3, 1.247 * 0,9 = 1.122,3
Nun, das ist mit Abstand mein längster Eintrag, aber zumindest bin ich kürzer als C ++.
Jetzt mit zusätzlichem Bonus! Es muss mit einer Nummer als erstes Argument aufgerufen werden.
Mein Universum hat nicht mit anderen zerfallenden Teilchen als Higgs Boson gearbeitet, aber jetzt schon. Außerdem hatte ich keine korrekte Pluralisierung oder Zeichensetzung, aber das tue ich jetzt tatsächlich .
Ich komme so nah an Sub 1k!
quelle
import random
. Soviel zum Determinismus.Perl 6 , (707 Bytes -10%) Ergebnis 636,3
Mit einigen unnötigen Zeilenumbrüchen für ein bisschen mehr Lesbarkeit:
Probieren Sie es online!
Eine Erklärung: Gott und Mensch
Es gibt 2 Datenstrukturen, die die Physik
%p
und die Benennung enthalten%h
. Gott und Mensch sozusagen. Der Physik-Hash gibt eine Reihe von Strings an, die durch den ursprünglichen instabilen Partikelbuchstaben indiziert sind und geteilt, gehasht und in einen Mix umgewandelt werden können:Jedes Partikel erhält einen Buchstaben, und somit gibt jede dieser Mischungen eine Sammlung von Partikelzerfällen an. H zerfällt zu WW mit Wahrscheinlichkeitsgewichtung 14.1. Partikel-Antipartikel-Paare werden mit Klein- und Großbuchstaben wie
c
undC
für Charm Quark und Charm Antiquark codiert .Und der Mensch dachte ein bisschen nach und nannte es Antitau-Lepton
Die Benennung erfolgt in
%h
, wobei jeder Buchstabe nur einem Teilchennamen zugeordnet wird. Es ist bis zu einem gewissen Grad Golf, aber ich vermute, es gibt Raum für Verbesserungen angesichts der Menge an Wiederholungen.Ursprüngliche Zeichenfolge
Mit diesen beiden Strukturen wird das Universum natürlich durch String-Manipulation simuliert. So
"H"
ist ein Universum mit einem einzigen Higgs-Boson. Die Generatorstruktur_,_..._
wird zum Erstellen einer Schleife verwendet und trennt das Entwickeln des Status der Universumszeichenfolge (eingehalten$_
) vom Ausdrucken. Der Druck erfolgt durch Einsacken der Buchstaben in das Universum und Zuordnen der resultierenden Zählungen (mit Plural!).Partikel zum Leben erwecken
Beim Entwickeln von Partikeln werden diese einem Wert zugeordnet, der aus dem Mix für dieses Partikel ausgewählt wurde. So entsteht
t
der Top-Quark alsPerl6 erlaubt es uns, zufällig einen dieser Schlüssel mit den angegebenen Gewichtungen über das Flooring-Simple auszuwählen
.roll
. Also rollen wir fürt
und bekommen, sagenWb
und ersetzen es in unserem Universum "HtT" -> "HWbT". Jedes instabile Teilchen hat sich selbst als eine mögliche Rolle, die es uns ermöglicht, die Struktur zu vereinfachen, anstatt zu prüfen, ob sie verfallen ist oder nicht. Wenn Sie die meiste Zeit für "H" würfeln, erhalten Sie einfach wieder "H".Experimentelle Stringtheorie
Mit dieser modifizierten Version können Sie beobachten, wie sich die Universumszeichenfolge entwickelt .
Performance
Ich habe es mit TIO auf 100 H gebracht. Wenn Sie viel weiter gehen möchten, ist es unweigerlich besser, einige Änderungen vorzunehmen, schließlich ist dies Grand Unified String Theory.
quelle
Groovy,
15061454 - 10% = 1309 BytesAngenommen, die Anzahl der Start-Higgs-Boson-Partikel wird als erstes Argument in der Befehlszeile angegeben:
quelle
PHP, 989 - 10% = 890,1 Bytes
Sub 1K Baby! Danke vsz, das war eine wirklich lustige Herausforderung. Es gibt so viele Möglichkeiten und es ist sehr schwer zu überprüfen, ob Ihre Ausgabe korrekt ist.
Das Programm kann ein Befehlszeilenargument verwenden, um die Startnummer von Higgs-Bosonen anzugeben, z
php universe_simulator.php 5
Hier ist das Gleiche mit Zeilenumbrüchen für ... "Lesbarkeit" ...
Einige Ausgaben:
quelle
QBasic
2161 * .9 = 19452028 * .9 = 18251854 * .9 = 1669 ByteNun, da QBasic das LOTM ist, dachte ich, ich würde meine allererste Antwort auf PPCG jemals überarbeiten. 140 Bytes geschafft, nicht schlecht!
Basierend auf dem Feedback von @TaylorScott und @DLosc habe ich ein komplettes Redesign durchgeführt:
Der Code
Beispielausgabe
quelle
For i=0To 28
x$=Mid$("H00433099979405H004330999550m4H004330998440ZpH004330996210ppH004330980310ZZH004330947610c3H004330877210T2H004330789010ggH004330648010WWH004330000000b12012950666670W12012950333340W82012950000000W70012950666670Wb0012950333340Ws0012950000000WdW0500006666702nW0500003333404nW050000000000+nZ050000882010c3Z050000764010u9Z050000612010b1Z050000460010s8Z050000308010d7Z050000274010T2Z050000240010m4Z050000206010-+Z050000000000n6",15*i+1,15)
...Next
in Funktionf$()
über Arraye$()
s$()
,Next:Next
kann seinNext j,i
, und Sie sollten überprüfen , ob die?
Aussagen alle diese benötigen;
s. Es sieht aber auch so aus, als ob Ihre Ausgabe derzeit nicht den Spezifikationen entsprichtC # 6,
3619361736113586 - 10% = 3227,4 BytesDas Programm verwendet zwei optionale Argumente für die Anzahl der startenden Higgs-Bosonen und den Startwert für die Zufallsklasse.
Ich hätte keine Objekte dafür verwenden sollen. Ich werde wahrscheinlich versuchen, stattdessen eine zweite Lösung mit Arrays zu erstellen, aber sie würde wahrscheinlich der bereits veröffentlichten C ++ - Lösung ähneln. Die Anzahl der Higgs-Bosonen, mit denen ich umgehen kann, ist ebenfalls stark begrenzt. Ich denke, mindestens eine Stunde für H = 1.000.000. Kleinere Zahlen laufen jedoch einigermaßen gut.
Beispielausgabe:
Ich werde die letzten beiden Zeilen für den Lauf h = 1000000 posten, wenn er beendet ist, wahrscheinlich später heute.Wie versprochen:quelle
else {U(new T(0>1))
und mehrere bein < 2 / 3.0
und eins bein <2/3.0
.if (a.Length
und einer umif (N[x]!=1
, der dritte umo+= $
. Außerdem analysieren Siea[0]
eine Ganzzahl zweimal, wenn das Ergebnis in einer Ganzzahl gespeichert werden könnte. Ich denke, dasY==1.0
kann seinY==1.
, aber da bin ich mir nicht sicher.i!=0
könnte seini
. Ich weiß nicht, ob Ihre Variablen tatsächlich negieren können, aber wenn nicht, können Sie==0
s durch ersetzen<1
. Der Titel sollte C # 6 lauten, da Sie die Zeichenfolgeninterpolation verwenden.Mathematica, 950 Bytes - 10% = 855 Bytes
Ausdruckskomprimierung verwenden:
Nicht komprimierter Code (1168 Byte - 10% = 1051,2 Byte):
Der Startparameter kann durch Ändern des Wertes für a gewählt werden.
Mir ist aufgefallen, dass ich die falsche Wahrscheinlichkeit für das Higgs-Boson verwendet habe, aber ich kann sie derzeit nicht ändern (in einigen Stunden oder so). Fügen Sie der aktuellen Lösung 3 oder 4 Bytes hinzu. (Es war ein Testwert)
quelle
Perl,
973986959944 Bytes -10% = 849,6 PunkteEinrückungen und Zeilenumbrüche sind nicht Teil des Codes und werden nur bereitgestellt, damit Sie 30 Jahre lang nicht scrollen, um alles zu lesen.
Es gibt ein paar 0-Byte-Optimierungen, die ich nie rückgängig gemacht habe.
Offensichtlich erstellt der Großteil des Codes die anfänglichen Hashes.
%p
Enthält die Namen aller Partikel, wobei die Bareword-Funktion von Perl ausgenutzt wird.%r
bestimmt die Zerfallsraten. Wenn es hier nicht vorkommt, verfällt es überhaupt nicht.%d
enthält die Zerfallsteilchen.Da die Reihenfolge der Partikel in der Ausgabe keine Rolle spielt, ändere ich sie nicht von der zufälligen Art und Weise, wie Perl auf die Schlüssel im Hash zugreift. Dies führt zu Dingen wie den folgenden:
Dies war wirklich ein aufregendes Abenteuer. Wunderbares Puzzle, ehrlich gesagt, ich hatte viel Spaß! :)
quelle
Python 3.6.1,
11831157...905889 * 0.9 = 800.1 BytesDas erste Mal, als ich eine dieser Aufgaben eingereicht habe, aber diese Herausforderung sah ziemlich lustig aus. Also, los geht's ...
Mit ziemlicher Sicherheit nicht so golfen wie es sein könnte, aber ich bin ziemlich unerfahren darin, also sind alle Tipps willkommen.
Probieren Sie es online!
Edit: Im Interesse der Kürze eine verkürzte Liste der von mir vorgenommenen Änderungen (danke Kommentatoren für die Hilfe!):
random.choices()
werden gewichtete Wahrscheinlichkeiten, keine Prozentsätze, so dass ich ein paar Bytes einsparen konnte, indem ich Dinge um ein paar Zehnerpotenzen nach oben verschob - 28 Bytes gespart! Die Wahrscheinlichkeit des Higgs-Zerfalls war falsch - ich habe 0,43% statt 0,043% gelesen, so dass das zwei Bytes kostete.any()
,+=
anstelle vonlist.extend()
und eine andereimport
Anweisung festlegen .choices(*p[x][1:])
um ein Paar zu retten undx and y or z
zu vermeidenif...else...or
.enumerate()
indem das Universum kopiert undlist.remove()
das Original verwendet wird (dieenumerate
Methode war sowieso kaputt, als es passierte).print()
Aussagen und zusammengeführteif
Aussagen. Einige nicht benötigte Klammern wurden entfernt.Mehr lesbare Version:
Beispielausgabe mit 5000 Higgs-Bosonen - führt möglicherweise später einen größeren Durchlauf durch, um festzustellen, ob ein Top-Quark-Zerfall dies bewirkt:
Wenn ich etwas falsch gemacht habe, lassen Sie es mich bitte wissen und ich werde versuchen, es zu beheben!
quelle
Ruby,
997995 Bytes -10% = 895,5 Punkteedit: 'und' als letztes Trennzeichen hinzugefügt, wie von breadbox bemerkt
Das erste Mal auf PPCG zu posten, ist eine alte Herausforderung, aber ich hatte viel Spaß dabei. Hier ist der Code
Die Zeichenketten werden komprimiert, indem wiederkehrende Wörter (vars
s
undt
) berücksichtigt werden. Zerfallsprodukte werden kompakt als Zeichenkette (varr
) gespeichert. Jeder Buchstabe ist ein Partikel. Eine Funktion gibtf
den Zustand des Universums aus, indem sie das Partikelarray Zeichenfolgen zuordnet. Ich habe das Gefühl, dass in der Statusaktualisierungszeile einige Bytes abgeschnitten werden müssen, aber ich kann nichts Besseres finden.Beispielausgabe
Performance
Es ist nicht so schlecht! Es berechnete 100000 Higgs-Boson in 25 Sekunden
quelle
>
in Ihrer Umgebungwhile
? Es ist schon eine Weile her, dass ich irgendetwas in Ruby gemacht habe.D,
1172 -1101 Bytes - 10% = 990,9 BytesUngolfed
quelle
Kotlin : 1330 - 10% = 1197 Bytes
Meine allererste Code Golf Einreichung; Sehr ineffizient, da Listen golfer sind als Karten, aber anscheinend korrekt! Funktioniert mit JVM- oder JS-Implementierung und verwendet ein (optionales) Argument.
Weniger Golf Version
quelle
Eine ziemlich lange Vorlage.
Nicht so viel Golf, aber immer noch kürzer als die andere Python.
Nehmen Sie die anfängliche Menge von Higgs als Eingabe.
Python 3 ,
1134 -1120 Bytes - 10% =1020,6 -1008 PunkteProbieren Sie es online!
quelle
F #,
19931908 Bytes - 10% = 1718 BytesProbieren Sie es online!
Ungolfed sieht es so aus:
quelle