Über die Serie
Dies ist ein Gastbeitrag für die Random Golf of the Day-Serie.
Zunächst einmal können Sie dies wie jede andere Code-Golf-Herausforderung behandeln und beantworten, ohne sich Gedanken über die Serie zu machen. Es gibt jedoch eine Rangliste für alle Herausforderungen. Sie finden die Rangliste zusammen mit einigen weiteren Informationen über die Serie im ersten Beitrag .
Eingang
Es werden keine Eingaben gemacht.
Ausgabe
Ein einzelner Buchstabe des Alphabets (Groß- / Kleinschreibung ist irrelevant) mit optionalem abschließendem Zeilenumbruch. Jeder Buchstabe muss mit einer Wahrscheinlichkeit ungleich Null ausgewählt werden, und alle 26 Wahrscheinlichkeiten müssen unterschiedlich sein . Um alle Mehrdeutigkeiten zu beseitigen: Unterscheiden bedeutet, dass es nicht zwei Wahrscheinlichkeiten geben darf, die einander gleich sind.
Wertung
Das ist Code Golf. Kürzester Code in Bytes gewinnt.
Ein gültiger Eintrag ist ein vollständiges Programm oder eine vollständige Funktion mit einer Wahrscheinlichkeit von Null, dass sie nicht beendet wird.
Alphabet
Um Verwechslungen zu vermeiden, ist das verwendete Alphabet das lateinische Alphabet:
Entweder
ABCDEFGHIJKLMNOPQRSTUVWXYZ
oder
abcdefghijklmnopqrstuvwxyz
Sie können zwischen Groß- und Kleinschreibung wählen. Alternativ können Sie verschiedene Fälle in verschiedenen Läufen ausgeben, wenn dies hilfreich ist. Die Wahrscheinlichkeit für einen bestimmten Buchstaben ist die Wahrscheinlichkeit, dass dieser Buchstabe in beiden Fällen (oben oder unten) erscheint.
Erläuterung
Bitte erläutern Sie anhand der Ausgabe genau, wie Sie die 26 verschiedenen Wahrscheinlichkeiten erreicht haben.
Bestenliste
(von hier )
Der erste Beitrag der Serie generiert auch eine allgemeine Rangliste.
Um sicherzustellen, dass Ihre Antworten angezeigt werden, beginnen Sie jede 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
(Die Sprache wird derzeit nicht angezeigt, das Snippet erfordert sie jedoch und analysiert sie. Ich füge möglicherweise in Zukunft eine Bestenliste nach Sprachen hinzu.)
A
eher als65
.Antworten:
Pyth, 5
Probieren Sie es hier aus
Berechnet die Präfixe des Alphabets
["a", "ab", "abc", ..., "abcdefghijklmnopqrstuvwxyz"]
. Dann wird die Liste geglättet und ein zufälliges Element einheitlich ausgewählt. Dies bedeutet, dass seit dema
26-fachen und demb
25-fachenz
Auftreten jedes Buchstabens eine andere Chance hat, auftauchen zu können. Die Gesamtzeichenfolge hat 351 Zeichen.quelle
MATL, 6 Zeichen
Erläuterung:
Xr
Nehmen Sie eine normalverteilte Zufallszahl.)
Verwenden Sie diese, um ...1Y2
das Alphabet zu indizierenDie Verteilung ist symmetrisch um 0 und die Übersetzung von Zahl zu Zeichen ist symmetrisch um 0,5. Daher sollten die Wahrscheinlichkeiten unterschiedlich sein.
quelle
05AB1E , 6 Bytes
Code
Erläuterung
Wir haben jetzt die folgende Zeichenfolge:
Danach wählen wir ein Zufallselement verwenden
.R
.Die Wahrscheinlichkeiten
Probieren Sie es online! .
quelle
Gelee , 5 Bytes
Probieren Sie es online!
Wie es funktioniert
Hintergrund
Let L 0 , ..., L 25 die Buchstaben des Alphabets Bezeichnet in ihrer natürlichen Reihenfolge, und S 0 , ..., S 25 eine gleichmäßig zufällig ausgewählt Permutation von L . Definieren Sie die endliche Folge M durch M n = max (L n , S n ) .
Fixiere n in 0,… 25 und definiere k als Index, so dass L n = S k ist .
Mit der Wahrscheinlichkeit 1/26 , L n = S n und n = k , so M n = L n und L n occurrs einmal in M .
Mit der Wahrscheinlichkeit 25/26 sind L n ≤ S n und n ≤ k . In diesem Fall geschieht Folgendes.
Mit der Wahrscheinlichkeit n / 25 ist S n einer von L 0 ,…, L n - 1 , so dass L n > S n und M n = L n .
Unabhängig davon wird auch mit einer Wahrscheinlichkeit von n / 25 , k ist ein von 0, ... N - 1 , also S k > L k und M k = S k = L n .
Somit kann die erwartete Anzahl der Vorkommen von L n in M ist 1/26 + 25/26 · (n / 25 + N / 25) = (2n + 1) / 26 .
Wenn wir nun einen Term m von M gleichmäßig zufällig auswählen , wird der Buchstabe L n mit der Wahrscheinlichkeit (2n + 1) / 26/26 = (2n + 1) / 676 ausgewählt .
Dies ergibt die folgende Wahrscheinlichkeitsverteilung.
Sie können die Verteilung empirisch überprüfen, indem Sie den Link 100.000 Mal aufrufen (dies dauert einige Sekunden).
quelle
MATL , 10 Bytes
Probieren Sie es online!
Der Code generiert eine einheitliche Zufallsvariable für das Intervall (0,1) (
r
) und berechnet sein Quadrat (U
). Dies führt zu einer ungleichmäßigen, abnehmenden Wahrscheinlichkeitsdichte. Das Multiplizieren mit 26 (26*
) stellt sicher, dass das Ergebnis im Intervall (0,26) liegt, und das Abrunden (k
) ergibt die Werte 0,1, ..., 25 mit abnehmender Wahrscheinlichkeit. Der Wert wird als Index ()
) für das Großbuchstaben (1Y2
) verwendet. Da MATL 1-basierte modulare Indizierung verwendet, entspricht 0 Z, 1 bis A, 2 bis B usw.Zur Veranschaulichung, dass die Wahrscheinlichkeiten unterschiedlich sind, ist hier ein diskretes Histogramm, das aus 1000000 zufälligen Realisierungen resultiert. Das Diagramm wird erstellt, indem Folgendes in Matlab ausgeführt wird:
quelle
k
! Bemerkte, dass beim Versuch codegolf.stackexchange.com/a/89648/11159Java 7,
625756 Bytes5 Bytes dank Poke.
1 Byte dank Trichoplax.
Ideone es!
Frequenzdiagramm (1e6 läuft, Skalierungsfaktor 1/1000)
quelle
sqrt(x*y*y) = sqrt(x)*y
Perl, 24 Bytes
-4 Bytes dank @Martin Ender
-1 Bytes dank @Dom Hastings
Notwendig
-M5.010
oder-E
zu laufen:Wenn Sie den folgenden Code ausführen, wird das Vorkommen jedes Buchstabens angezeigt:
Wie es funktioniert : Ich denke, der Code ist ziemlich explizit, aber dennoch: Er wählt eine Zufallszahl zwischen
0
undrand 26
. Daher ist die Wahrscheinlichkeit, dass Zahlen in der Nähe von0
(BuchstabenA
) ausgewählt werden, sehr viel höher .quelle
say+(A..Z)[rand rand 26]
(A..Z)[...]
und es hat nicht funktioniert, also dachte ich, ich könnte ein anonymes Array wie dieses verwenden, aber das lag nur an demsay
... Danke! :)PHP,
44362927 BytesDurchgestrichen 44 ist immer noch regulär 44; (
Vielen Dank an insertusernamehere, Petah und Crypto für die Hilfe
Es wählt eine Zufallszahl zwischen 0 und 675 (= 26 2 -1), verwendet die Quadratwurzel und fasst sie zusammen (die
chr
Funktion wandelt ihr Argument in eine Ganzzahl um). Da die Quadrate unterschiedliche Intervalle haben, ist die Wahrscheinlichkeit, dass eine Zahl ausgewählt wird, unterschiedlich. Jedes n wird mit Wahrscheinlichkeit (2n + 1) / 676 gewählt.Wenn Sie dieser Zahl 65 hinzufügen, erhalten Sie ein zufälliges Zeichen von
A
bisZ
.Ideone des Codes läuft 1.000.000 mal
quelle
range(A,Z)
.chr()
.<s> 44 </s>
<?=chr(65+sqrt(rand(0,675)));
R,
4027 BytesDies nimmt die
1
Zahl von26
Zahlen, die mit zunehmender Wahrscheinlichkeit erzeugt wurdenZ
, ohne sie zu ersetzen, und zeigt einen Buchstaben aus der Liste der Großbuchstaben an, dessen Index diese Zahl istLETTERS
.Die Argumente der
sample
Funktion sind:quelle
> <> , 14 Bytes
> <> ist eine toroidale 2D-Sprache, und der Teil mit den unterschiedlichen Wahrscheinlichkeiten geschieht auf natürliche Weise aufgrund der einzigen Zufallsquelle der Sprache. Probieren Sie es online!
Die relevanten Befehle sind:
Somit sind die Ausgabewahrscheinlichkeiten:
quelle
Python 2,
5857 BytesErläuterung: Dadurch wird eine zufällige Gleitkommazahl im Intervall generiert
[0, 676)
, die Quadratwurzel wird gezogen und anschließend auf den Boden gelegt. Dann addiert es 65 (den ASCII-Wert von "A"), konvertiert ihn in ein Zeichen und druckt ihn aus.Dies gibt jeder Zahl von 0 bis 25 eine unterschiedliche Wahrscheinlichkeit. Um zu verstehen warum, denken Sie so darüber nach. Wie viele Zahlen, die Nicht-Ganzzahlen ignorieren, wenn Sie die Quadratwurzel nehmen und den Boden mit 0 angeben? Nur eine Zahl wird (Null). Dies bedeutet, dass Null eine Wahrscheinlichkeit von hat
1/676
. Wie viele Zahlen ergeben 1? 3 wird, 1, 2 und 3. Dies bedeutet, man hat eine Wahrscheinlichkeit von3/676
. Eine Zwei kann mit einer 4, 5, 6, 7 oder 8 erzeugt werden, was eine Wahrscheinlichkeit von 5 ergibt, eine Drei eine Wahrscheinlichkeit von 7 usw., und da die Differenz zwischen aufeinanderfolgenden Quadraten stetig um zwei zunimmt, setzt sich dieses Muster für jede aufsteigende Zahl fort bis 25 (Z).1 Byte gespart dank undichter Nonne!
quelle
chr(int(65+randint(676)**.5))
chr(int(65+random()**.5*26))
. Es ist das gleiche, algebraisch, weil 26 == √676. und jetzt ist die Reihenfolge der Operationen auf Ihrer Seite**2*26
die inverse Verteilung könnte ein anderes Byte verwendet werden.1/random()%26
sollte auch funktionieren.PowerShell v2 +,
33 bis31 ByteNimmt einen Bereich von
65
bis90
(dh ASCIIA
nachZ
) und leitet ihn durch eine Schleife. Bei jeder Iteration verwenden wir den Komma-Operator, um ein Array dieses Elements multipliziert mit dieser Zahl zu erstellen. Dies ergibt zum Beispiel 6565
s, 6666
s, 6767
s usw. Das große Array, zuGet-Random
dem geleitet wird, wählt (einheitlich PRNG) ein Element aus. Da es für jedes Element unterschiedliche Mengen gibt, hat jeder Charakter eine leicht unterschiedliche prozentuale Chance, ausgewählt zu werden. Wir kapseln das dann in parens und gießen es alschar
. Das bleibt in der Pipeline und die Ausgabe ist implizit.(Danke an @LeakyNun für das Golfen ein paar Bytes, noch bevor es gepostet wurde.: D)
Die Wahrscheinlichkeiten
(leichte Rundung, damit ich die
P
Option des-f
Ormat-Operators demonstrieren kann )quelle
gal
output ([char[]]"uz$(gal|out-string)"-cmatch'[a-z]'|random
) aufzubauen, bekam 50 Zeichen, dann 48, wechselte zu Zahlen und bekam 42, dann 31 und blieb dort stehen; schaute auf die Rangliste, um zu sehen, wohin mich das führen würde. Genau hier. Zeichen für Zeichen identisch. Welp, das kann ich wohl nicht übertreffen.CJam,
211712 BytesVielen Dank an Martin Ender, der mir 5 Bytes gespart hat!
Neue Version
Dies bildet einen Array von Strings nach dem Muster
A
,AB
,ABC
, und so weiter. Es flacht es ab und wählt einen zufälligen Charakter. Da diese Zeichenfolge 26 A-, 25 B-, 24 C-Zeichen usw. enthält, hat jeder Buchstabe eine unterschiedliche Wahrscheinlichkeit, ausgewählt zu werden.Probieren Sie es online!
Erläuterung
Alte Version
Ruft unterschiedliche Wahrscheinlichkeiten ab, indem eine Zeichenfolge erstellt wird, in der jeder Buchstabe so oft vorkommt, wie er im Alphabet enthalten ist.
quelle
R, 23 Bytes
Probieren Sie einfach einen Brief von einem eingebauten Gerät aus. Dies
1:26
ist ein Vektor von Gewichten, die jedem Buchstaben eine andere Wahrscheinlichkeit geben.quelle
1:26
ist ein Vektor der Gewichte für jeden BuchstabenC 35 Bytes
Dieses Programm geht von
RAND_MAX
(2 ^ 32/2) - 1 aus, da es standardmäßig auf gcc läuft. Kompilieren Sie mit dem-lm
Flag, um diesqrt
Funktion zu verknüpfen . Die Ausgabe wird als Großbuchstaben ohne Zeilenumbruch auf stdout geschrieben.Wenn
RAND_MAX
(2 ^ 16/2) - 1 ist, kann optional eine kürzere 32-Byte-Version verwendet werden:Aus Spaß habe ich auch eine Version erstellt, die die
sqrt
Funktion nicht verwendet oder die enthaltene Mathematikbibliothek nicht benötigt (diese mussRAND_MAX
als (2 ^ 32/2) - 1 vorliegen ), aber sie ist länger geworden, obwohl ich dachte, dass dies der Fall ist ziemlich cool:Erläuterung
[Erstes Programm]
Bei den ersten beiden Anwendungen
sqrt
ordnet die Funktion den Bereich einfach[0, RAND_MAX)
einer[0, 25]
durchgehenden Division zu und addiert dann 65 (ASCIIA
) zu dem Wert, um ihn vor der Ausgabe in das ASCII-Alphabet zu verschieben.[Zweites Programm]
Das zweite Programm ist etwas komplexer, da es eine ähnliche Strategie ausführt, jedoch ohne den
sqrt
Bediener. Da die Exponentenbits eines Gleitkommas beim Zuweisen einer Ganzzahl automatisch berechnet werden, können sie effektiv als grobe Methode verwendet werden, um den Logarithmus der Basis 2 einer Zahl zu erhalten.Da wir nur wollen, dass der Bereich bis zu
RAND_MAX
einem codierten Exponentenwert von 25 reicht, ergibt die Berechnung (2 ^ 32/2 - 1) / (2 ^ 25) nur ungefähr 64, die während der Division von verwendet wirdrand
, um ihn abzubilden zu diesem neuen Bereich. Ich habe auch 1 zum Wert hinzugefügt, da die Gleitkommadarstellung von 0 ziemlich seltsam ist und diesen Algorithmus zerstören würde.Als nächstes wird der Gleitkommawert auf eine Ganzzahl typisiert, um Bitverschiebung und andere derartige Operationen zu ermöglichen. Da in IEEE 754-Gleitkommazahlen die Exponentenbits die Bits 30 bis 23 sind, wird die Zahl um 23 Bits nach rechts verschoben, wodurch die Mantisse abgeschnitten wird und der rohe Exponentenwert als Ganzzahl gelesen werden kann. Beachten Sie, dass das Vorzeichenbit auch jenseits der Exponentenbits liegt, aber da es nie irgendwelche Negative gibt, muss es nicht ausgeblendet werden.
Anstatt wie zuvor 65 zu diesem Ergebnis zu addieren, werden Gleitkomma-Exponenten als vorzeichenlose 8-Bit-Ganzzahlen von 0 bis 255 dargestellt, wobei der Exponentenwert 127 ist ). Da 127 - 65 62 ist, subtrahieren wir stattdessen einfach 62, um es sowohl aus diesem Gleitkomma-Exponentenbereich als auch in den ASCII-Alphabet-Bereich zu verschieben, und das alles in einer Operation.
Verteilung
Ich bin kein Mathe-Experte, daher kann ich die genaue Formel für diese Verteilungen nicht genau sagen, aber ich kann (und habe) jeden Wert im Bereich testen, um
[0, RAND_MAX)
zu zeigen, dass der Abstand zwischen dem Ende des Bereichs eines Buchstabens und dem Beginn des anderen niemals der gleiche ist gleich. (Beachten Sie, dass diese Tests das (2 ^ 32/2) - 1) Zufallsmaximum annehmen.)[Erstes Programm]
[Zweites Programm]
quelle
char
es sich bei C um einen ganzzahligen Typ handelt, sollte dies akzeptabel sein.Python 2, 72 Bytes
Multipliziert das Zeichen mit seinem ASCII-Wert und wählt dann zufällig ein Zeichen aus der resultierenden Zeichenfolge aus.
Hier sind die Wahrscheinlichkeiten für jeden ausgewählten Buchstaben in Prozent:
Probieren Sie es aus: https://repl.it/Cm0x
quelle
Gelee , 5 Bytes
(Gleiche Punktzahl, aber eine andere Methode als bei einer vorhandenen Jelly-Lösung von Dennis.)
Die Wahrscheinlichkeit, einen Buchstaben zu erhalten, ist der auf 1 basierende Index im Alphabet geteilt durch 351 - die 26. dreieckige Zahl:
A
) = 1/351, P (B
) = 2/351, ..., P (Z
) = 26/351.Da 1 + 2 + ... + 26 = 351 ist, ist P (Buchstabe) = 1.
Implementierung:
Testen Sie es auf TryItOnline oder erhalten Sie die Verteilung von 100K-Läufen (Code-Gutschrift an Dennis)
quelle
q, 38 Bytes
Nicht besonders kurz, aber ...
Die diskrete kumulative Verteilungsfunktion ist die Sequenz
0.9 ^ 26, 0.9 ^ 25, ..., 0.9 ^ 0
Und wir probieren nur aus der Distribution.
quelle
JavaScript (ES6), 45 Byte
Erzielt eine ungleichmäßige Verteilung durch Quadrieren des Zufallswerts.
Math.random()
Gibt einen Gleitkommawert des Bereichs zurück,[0,1)
sodass das Ergebnis der Quadratur in Richtung0
(odera
) tendiert .Prüfung
Code-Snippet anzeigen
quelle
(n=Math.random(),10+26*n+n|0).toString(36)
Oracle SQL 11.2, 212 Byte
Zeichenposition im Alphabet als Wahrscheinlichkeit verwenden
Nicht golfen
quelle
TI-Basic, 39 Bytes
rand
erzeugt einen einheitlichen Wert in (0,1]. Dies gibt 26 ^ rand eine andere Wahrscheinlichkeit, um die ganzen Zahlen von 1 bis 26 zu gleichen.Ältere Version, 45 Bytes
Die eingeschränkte Genauigkeit der TI-Basic-Ganzzahlen beschränkt die Normalverteilungen auf die Erzeugung von Zahlen innerhalb von µ ± 7,02σ (siehe
randNorm(
). Wir erhalten also den absoluten Wert einer Zufallszahl mit µ 0 und σ 1, multipliziert mit vier, um den oben erwähnten praktischen Bereich auf µ ± 28,08σ zu erhöhen. Dann untermauern wir den Wert und addieren 1, dasub(
1-indiziert, was uns einen Bereich von 1 bis 29 mit jeweils unterschiedlichen Wahrscheinlichkeiten gibt.quelle
PHP,
9284 BytesErstellt eine Zeichenfolge aus allen Buchstaben, wiederholt die Schleife so oft, wie wir es sind, und wählt dann zufällig einen Buchstaben aus dieser Zeichenfolge aus. Buchstaben später im Alphabet haben daher eine höhere Wahrscheinlichkeit
Danke an insertusernamehere für das Abschneiden von Bytes
Ergebniswahrscheinlichkeiten (geordnet nach%)
quelle
$x=0
was offensichtlich notwendig ist. Hier ist eine 84-Byte- Version:for($i=65,$x=0;$i<91;$a.=str_repeat(chr($i++),$x))$x++;echo substr($a,rand(0,$x),1);
Haben Sie es jemals geschafft, einen höheren WertG
als beim Ausführen Ihres Codes zu erhalten? Wie auch immer, Sie könnennotice
s beim Golfen immer ignorieren .strlen
von$a
ist 351, aber Sie wählen nur ein zufälliges Zeichen aus den ersten$x
(26) Zeichen aus. Sie können das Problem beheben und Ihre Wahrscheinlichkeiten halten mit einer Änderung des endgültigen$x
auf350
für 1 Byte. Hier ist eine 77-Byte-Version, die das Problem behebt, aber auch die Wahrscheinlichkeiten viel näher zusammenbringt:for($i=65;$i<91;$a.=str_repeat(chr($i),$i++));echo substr($a,rand(0,2014),1);
Befunge,
168164 BytesKompakt Mehr als die erste, mit ein wenig unterschiedlichen Wahrscheinlichkeiten: Die erste
?
einen haben 1/4 ein A von Druck auf „ersten Versuch“ Chance, 2/4 Chance auf das gleiche wieder zu kommen?
, und ein Viertel bis die bewegen Nächster. Die restlichen?
s haben jeweils eine 1/4 Chance, den darunter liegenden Buchstaben zu drucken, 1/4 , um es erneut zu versuchen, 1/4 , um zum nächsten Buchstaben zu gelangen, 1/4 , um zum vorherigen zu gelangen. Auch hier ist die Wahrscheinlichkeit, ein A zu drucken, viel höher als die eines Z.Befunge, 186 Bytes
Natürlich wird ich damit nicht gewinnen, aber ich denke, es ist trotzdem eine interessante Antwort :)
v
und>
lenkt den Cursor jeweils nach unten und rechts. Der?
Bediener schickt den Cursor nach dem Zufallsprinzip in eine von vier Richtungen. Die erste?
ist durchv
und>
in zwei Richtungen "blockiert" , so dass nur zwei Möglichkeiten bestehen: Entweder um das A auszudrucken, oder bis zur nächsten?
. Ab dem ersten Mal?
besteht also eine 50% ige Chance, ein A zu drucken.Die nächste
?
hat eine 1/3- Chance, ein B zu drucken, 1 /3- Chance , wieder nach oben und 1 / 3- Chance , weiter nach unten zu gehen. Usw.Es sollte ziemlich offensichtlich sein, dass die höheren Buchstaben eine viel größere Chance haben, gedruckt zu werden als die niedrigeren, aber ich bin nicht genau sicher, wie die Chancen jedes Buchstabens sind.
Etwas Hilfe bei der genauen Berechnung wäre dankbar :)
Zumindest besteht eine Chance von 1/2 * 1/3 ^ 25, dass sich der Cursor beim ersten Versuch bis zum Z nach unten bewegt, aber ich bin mir nicht sicher, wie sich die Wahrscheinlichkeit, dass sich der Cursor nach oben und unten bewegt, auf jeden Buchstaben auswirkt.
,@
druckt und beendet.quelle
J,
20 bis18 BytesOnline-Dolmetscher
Großbuchstaben.
Die Wahrscheinlichkeit jedes Buchstabens ist sein 1-basierter Index im Alphabet.
quelle
zsh, 63 Bytes
Es funktioniert, indem Sie diese Zeichenfolge erstellen:
aka 65 mal A, 66 mal B, 67 mal C ...
und dann wählt es ein zufälliges Zeichen darin
quelle
A
in ASCII. Sie können von 1 beginnen, aber dann wird die innere Schleife,{65..$[#i]}
die 1CJam, 11 Bytes
oder
Probieren Sie es online!
Diese Lösung ähnelt Luis 'Idee und erzeugt eine ungleichmäßige Verteilung, indem die Quadratwurzel der Zufallsvariablen verwendet wird.
quelle
Batch, 116 Bytes
Arbeitet durch Auswählen der größeren oder kleineren (ich vergesse welche) von zwei Zufallsvariablen.
quelle
Matlab, 22
Gibt oft frühe Briefe zurück, kann sie aber theoretisch alle berühren!
Nimmt eine durch eine Zufallszahl geteilte Zahl, begrenzt diese auf 26 und wandelt sie in eine Figur um.
Natürlich nicht sehr kurz, aber vielleicht kann das Konzept andere Antworten inspirieren.
quelle
rand
einen Wert in [0, 1) zurück? Das heißt, einschließlich Null, aber nicht einschließlich Eins. Wenn dies gelegentlich zu 1/0 führt, werdenmin(1/0,26)
trotzdem 26 oder ein Fehler zurückgegeben?rand
ein Wert in (0,1) zurückgegeben, daher sollte es kein Problem gebenrand
in der Praxis keine 0 angezeigt wird , wirdmin(1/0,26)
tatsächlich 26 zurückgegeben.CJam, 10 Bytes
CJam Ansatz # 3 ...
Probieren Sie es online!
Dies erzeugt eine einheitliche Zufallszahl
x
zwischen 1 und 26 und verwendet diese dann, um eine einheitliche Zufallszahl zwischen0
und zu erzeugen,x-1
die addiert wirdA
. Dies führt zu einer Tendenz zu kleineren Zeichen.quelle
Labyrinth , 19 Bytes
Probieren Sie es online!
Dies ist eine Schleife, die bei jeder Iteration entweder a) einen Zähler erhöht, der bei Null beginnt, oder b) mit einer Wahrscheinlichkeit von 50% beendet. Am Ende der Schleife wird der Zähler modulo 26 genommen und zu 65 addiert, um einen Buchstaben zwischen
A
und zu ergebenZ
.Dies ergibt eine Wahrscheinlichkeit für
A
etwas mehr als 50%,B
etwas mehr als 25% usw. bisZ
etwas mehr als 1/2 26 . Theoretisch besteht die Möglichkeit, dass dies für immer abläuft, aber dieses Ereignis hat die von der Herausforderung geforderte Wahrscheinlichkeit Null (in der Praxis ist dies wahrscheinlich ohnehin nicht möglich, da der PRNG zu einem bestimmten Zeitpunkt im Laufe seines Zeitraums beide möglichen Ergebnisse zurückgibt).quelle