Schreiben Sie ein Programm, das bei einer kleinen positiven geraden Ganzzahl aus der Standardeingabe die Wahrscheinlichkeit berechnet, dass das Umwerfen so vieler Münzen zu halb so vielen Köpfen führt.
Zum Beispiel sind bei 2 Münzen die möglichen Ergebnisse:
HH HT TH TT
wobei H und T Kopf und Zahl sind. Es gibt 2 Ergebnisse ( HT
und TH
), die halb so viele Köpfe haben wie die Anzahl der Münzen. Es gibt insgesamt 4 Ergebnisse, daher beträgt die Wahrscheinlichkeit 2/4 = 0,5.
Das ist einfacher als es aussieht.
Testfälle:
2 -> 0.5
4 -> 0.375
6 -> 0.3125
8 -> 0.2734375
code-golf
math
probability-theory
david4dev
quelle
quelle
Antworten:
J, 22
19(Killer-Ansatz)Ich bin darauf gekommen, als ich meine Haskell-Antwort gespielt habe.
(gleiche E / A wie meine andere J-Antwort )
quelle
0 1|domain error: script | %/ >:i.&.(".@stdin)_
Pari / GP -
323034 Zeichenquelle
print(binomial(n=input,n\2)/2^n)
.Python 53 Zeichen
quelle
Excel, 25
Nicht ganz nach Spezifikation :)
Benennen Sie eine Zelle
n
und geben Sie Folgendes in eine andere Zelle ein:quelle
Haskell, 39
4346Demonstration:
quelle
Undefined variable "readln"
readLn
ist ein großes .main=do x<-readLn;print$foldr1(/)[1..x]
macht das gleiche und spart 3 Bytes?J, 25 (natürlicher Ansatz)
Beispielverwendung:
Es ist alles selbsterklärend, aber für eine grobe Aufteilung der Verantwortlichkeiten:
!~ -:
könnte als Binomial angesehen werden (x, x / 2)% 2&^
ist "geteilt durch 2 ^ x "&. (". @ stdin) _
für I / O.quelle
GNU Octave - 36 Zeichen
quelle
Ruby, 39 Zeichen
quelle
Golfscript - 30 Zeichen
Einschränkung - funktioniert nur für Eingänge unter 63
Testfälle
Analyse
'0.'
GS macht kein Gleitkomma, also fälschen wir es, indem wir danach eine Ganzzahl schreiben.\~
Ziehen Sie die Eingabe an den Anfang des Stapels und konvertieren Sie sie in eine Ganzzahl. Erstellen..
Sie 2 Kopien der Eingabe.),1>
Erstellen Sie eine Liste aus 1..n Teilen Sie\2//
die Liste in 1..n / 2 und n / 2 + 1..n{{*}*}%
Multipliziere die Elemente der beiden Unterlisten mit (n / 2)! und n! / (n / 2)!~
Extrahieren Sie diese beiden Zahlen auf den Stapel.\
Tauschen Sie die beiden Zahlen um/
Divide5@?*
Multiplizieren Sie mit 5 ** n. Dies ist die Ursache für die oben angegebene Einschränkungquelle
0.
als Dezimalteil der Antwort geschrieben wird. Bei dieser Methode wird jedoch die erforderliche 0 weggelassen, wenn die Chance um weniger als 10% steigt .TI-BASIC, 10
Dies benötigt mehr als zehn Bytes Rechnerspeicher, da ein Programmheader vorhanden ist, aber nur zehn Bytes Code vorhanden sind.
Dies erfolgt in der Form
[number]:[program name]
; Das Hinzufügen eines Eingabebefehls verwendet drei weitere Bytes.~
ist das unäre Minuszeichen.quelle
Ruby -
505754 Zeichenquelle
J, 20
Beispiele:
quelle
APL
2115 ZeichenDenn wo es nicht richtig rendert
Wo alles in {} APL-spezifische Symbole wie hier sind .
quelle
�[token]: � undefined
Windows PowerShell, 45
Meh.
quelle
MATLAB, 29
quelle
PostScript, 77
quelle
Mathematica, 19
quelle
Javascript, 86 Bytes
quelle
Python 3, 99
Ich nehme an, dies ist ein naiver Ansatz, und die Lösung von fR0DDY ist viel cooler, aber zumindest kann ich sie lösen.
Probieren Sie es hier aus
Python 2, 103
quelle
Ziel c:
152148 Bytes nur für die Funktion.Klassenmethoden, Header und Benutzeroberfläche sind nicht im Code enthalten.
Eingabe: Ein
int
Wert, der die Anzahl der Münzen bestimmt.Ausgabe: Ein
float
Wert, der die Wahrscheinlichkeit bestimmt.Ungolfed:
Dies basiert auf der Microsoft Excel-Antwort . In C und Objective-C besteht die Herausforderung darin, die Algorithmen hart zu codieren.
quelle