Eine Darstellung einer Dezimalstelle mit doppelter Genauigkeit kann nur eine Genauigkeit von 15 Dezimalstellen garantieren, daher wird pi angenähert als:
3.141592653589793
Sie können sehen, dass sich die Ziffer 3
an Positionen befindet 1, 10, 16
, die Ziffer 1
sich an Positionen befindet 2, 4
usw.
Herausforderung
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die eine zufällige doppelte Zahl zwischen 0 und 1 erzeugt und die Werte dieser Zahl auf den Wert von pi abbildet. Sie tun dies, indem Sie die verschiedenen Ziffern in den Zufallszahlen an die Stelle setzen, die diese Ziffer in pi hat. Wenn die Ziffer in pi nicht gefunden wird, überspringen Sie sie und jede Ziffer in pi, die nicht in der Zufallszahl enthalten ist, wird durch ein dargestellt x
. Jeder Wert kann nur einmal verwendet werden, beginnend von links.
Einige Beispiele werden dies wahrscheinlich klarer machen. In den folgenden Beispielen ist die erste Zahl pi, die zweite ist die Zufallszahl und die letzte ist die gewünschte Ausgabe.
3.141592653589793
0.111111111111111
x.1x1xxxxxxxxxxxx
3.141592653589793
0.531000000000000
3.1xx5xxxxxxxxxxx
3.141592653589793
0.123456789123456
3.141592653x8x7xx
3.141592653589793
0.967552381459391
3.14159265358979x
Regeln:
- Die Funktion sollte keine Eingaben annehmen (eine mögliche Ausnahme wird in Aufzählungspunkt 3 erläutert)
- Die Ausgabe darf nur aus der Ausgabezeichenfolge mit optionalem Zeilenumbruch bestehen (ein einzelnes Leerzeichen wird ebenfalls akzeptiert).
- Wenn Ihr Programm keinen integrierten Pi-Wert und / oder RNG hat, können Sie Pi fest codieren und die Zufallszahl als Eingabe verwenden. Sie können die Zufallszahl nicht fest codieren oder Pi als Eingabe verwenden.
- Sowohl der fest codierte Wert für Pi als auch die 15 zufälligen Ziffern (Sie können überspringen,
0.
da Sie wissen, dass er zwischen 0 und 1 liegt) werden in die Byteanzahl einbezogen. - Wenn Ihre Sprache nicht die erforderliche Genauigkeit aufweist, können Sie unter den folgenden Einschränkungen eine geringere Genauigkeit verwenden
- Die Ziffern von Pi müssen bis zu Ihrer Genauigkeit genau sein
- Sie können nicht mehr Werte ausgeben, als Sie garantiert korrekt haben, dh Sie können keine 15 Stellen ausgeben, wenn die Genauigkeit nur 8 genaue Dezimalstellen zulässt.
- Der fest codierte Wert von Pi wird als 16 Byte gezählt (Sie benötigen keinen Dezimalpunkt), auch wenn Ihr Programm nur 8 Ziffern unterstützt.
- Der Eingabewert für die Zufallszahl wird mit 15 Bytes angegeben (das brauchen Sie nicht
0.
. Dies liegt daran, dass Sprachen mit geringer Genauigkeit keinen unfairen Vorteil haben sollten. - Das Programm muss (mindestens) eine Genauigkeit von 5 Dezimalstellen unterstützen.
- Bearbeiten: Um die Antwort zu validieren: Die Zufallszahl sollte irgendwie gedruckt werden, aber diese Operation muss nicht in die Byteanzahl einbezogen werden. Wenn es beispielsweise möglich ist, ein
print r
am Ende des Skripts einzufügen , erhöht dieser Teil die Punktzahl nicht. - Sie können die Bytes nicht subtrahieren, wenn sie Teil einer anderen erforderlichen Operation sind. Dh wenn der Code ist
print pi, r
, dann kann man nur subtrahieren, r
. - Wenn Sie mehrere Orte Teile im Code einfügen müssen, geben Sie bitte beide Versionen (die, das druckt die Zufallszahl und die, die mit einem Kommentar nicht wie:
_p
und_oNo
. Sind die Zufallszahl drucken benötigt_p
tut xxx und_oNo
tut yyy._p
und_oNo
wird nicht in die Byteanzahl einbezogen.
Kürzester Code in Bytes gewinnen.
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0 < random < 1
oder0 <= random <= 1
?Antworten:
Pyth, 25 Bytes
Probieren Sie es online aus: Demonstration oder Test mit der Zufallszahl
Erläuterung:
quelle
LabVIEW, 53 LabVIEW-Grundelemente
Ich passe Strings an und füge die Nummer in einen "leeren" x.xxx String ein und entferne die Nummer von pi, damit sie nicht wieder auftaucht.
Die Zufallszahl und die einzelnen Zeichen hier sind irgendwie sichtbar. Ist das in Ordnung oder muss ich die Aufnahme wiederholen?
quelle
Mathematica, 105 oder 147 Zeichen
Wenn Zufallszahl " zwischen 0 und 1" bedeutet
0 <= random <= 1
, beinhaltet das zB 0 & 1.(105 Zeichen)
Andernfalls bedeutet Zufallszahl " zwischen 0 und 1"
0 < random < 1
.Schleife, um 15 zufällige Ganzzahlen zu erhalten, nicht alle Nullen. Wählen Sie einen Bereich von 0 bis 9, dh die Zahlen von 0 bis 9 sind nicht in der Zufallsliste enthalten. Konvertieren Sie diese Ganzzahlen in Zeichenfolgen und ersetzen Sie die übereinstimmenden Zeichen in einer Pi-Zeichenfolge.
(147 Zeichen)
Zufällige Ziffern: -
quelle
True
ist1>0
,RandomInteger
kann Infixschreibweise verwenden{0,9}~RandomInteger~15
. Sie können wahrscheinlich einige Bytes sparen, indem Sier
einen Wert angeben und tatsächlich die Bedingung von verwenden,While
anstattBreak.
Then zu verwenden, undFor
möglicherweise ein weiteres Byte darüber speichernWhile
. Obwohl ich nicht verstehe, warum Sie die Schleife überhaupt brauchen, wenn Sie stattdessen die Zufallszahl im Bereich annehmen[0,1)
.1>0
:-)JavaScript (ES6),
8987 BytesErläuterung
Bearbeiten: Die zufällige Zeichenfolge wird jetzt nicht mehr abgeschnitten, da dies durch das Poster verdeutlicht wird.
Durchläuft jede Ziffer von pi und entfernt die Ziffer von der Zufallszahl, wenn sie gefunden wurde. Anderenfalls wird die Ziffer in pi durch ersetzt
x
.Prüfung
Test gibt auch die Zufallszahl aus.
Code-Snippet anzeigen
quelle
Math.random()
produziert eine Reihe des Bereichs,[0,1)
so dass es0
aber nie konnte1
. Das OP gab nicht ausdrücklich an, ob der Bereich inklusive oder exklusiv war, und ich ging davon aus, dass alles, was angemessen war, in Ordnung ist. Dies ist auch der Bereich, den die anderen Antworten verwenden. Wie auch immer, Sie haben mich darauf aufmerksam gemacht, dass es, wenn es genau0
ist, scheitern wird, weil das.
in pi nicht übereinstimmt und wirdx
. Dies hat eine 1 zu 2 ^ 53 Chance, aber ich habe mich trotzdem entschlossen, es zu beheben.[0,1]
also in Ordnung (so ist es auch(0,1)
).CJam,
4846423836 BytesTeste es hier.
Und hier ist die Version, die sowohl π als auch die Zufallszahl ausgibt:
Teste es hier.
Ich schneide die Zufallszahl nicht auf 15 Dezimalstellen ab, wie dies vom OP in einem Kommentar erläutert wurde.
Erläuterung
Die Idee ist, jedes Zeichen in der Zeichenfolgendarstellung von π in ein Paar dieses Zeichens und umzuwandeln
x
. Für jedes Zeichen in der Zufallszahl tauschen wir das erste Paar, das mit diesem Zeichen beginnt. Am Ende geben wir das zweite Zeichen jedes Paares aus.quelle
Lua,
231230 BytesErklärungen
Leider hilft mir Lua hier überhaupt nicht. math.pi rund um die letzte Ziffer von pi gibt es zurück:
Ich muss diese Nummer abschneiden:
Der zweite große Standard für diese Herausforderung war das Fehlen von string.replace (). Da ich diese Aktion zweimal durchführe
s:sub(1,l-1)..c..s:sub(l+1)
, wollte ich eine anonyme Funktion ausführen , da ich dachte, sie wäre kürzer. Es ist nicht so, also habe ich es zweimal geschrieben.Der Grund, warum ich auf den Punkt aufpassen muss, ist, wie lua seine Position zurückgibt. In regulären Ausdrücken bedeutet ein Punkt "ein beliebiges Zeichen". Wenn ich also das Zeichen
.
in meiner Schleife auswerte , stimmt es mit dem ersten Zeichen überein:Sie können lua online testen . Da ich den PRNG nicht einsetze, ist hier ein Code, mit dem Sie mehrere Tests durchführen können, während Sie noch Werte beobachten.
quelle
Python 2.7,
117110 BytesGetestet mit der neuesten QPython-Android-App, sollte aber überall funktionieren.
Edit 1: geändert
str(pi)
in Backticks.Zum Prüfen:
quelle
Python, 147 Bytes
Ziemlich selbsterklärend: Lambda-Funktion konvertiert float in list; wir durchlaufen dann die pi-liste und versuchen jede ziffer aus der zufallsliste zu entfernen. Wenn wir es gut können, hängen Sie es an die Antwort an; Wenn nicht, fügen Sie stattdessen ein 'x' hinzu.
quelle
str(t)
gibt Ihnen nur 11 Stellen Genauigkeit abt
,repr(t)
gibt Ihnen allet
15 Stellen.Perl, 70 Bytes
Mit Kommentaren:
Diese Version gibt pi, die Zufallszahl und das Ergebnis aus:
Beispielausgabe:
Ich hoffe das ist okay:
9
) ist korrekt.quelle