Sie können das Volumen von Objekten basierend auf einer bestimmten Menge von Dimensionen bestimmen:
- Das Volumen einer Kugel kann mit einer einzigen Zahl, dem Radius (
r
), bestimmt werden. - Das Volumen eines Zylinders kann mit zwei Zahlen bestimmt werden, dem Radius (
r
) und der Höhe (h
). - Das Volumen einer Box kann anhand von drei Zahlen bestimmt werden, der Länge (
l
), der Breite (w
) und der Höhe (h
). - Das Volumen einer unregelmäßigen dreieckigen Pyramide kann anhand von vier Zahlen, den Seitenlängen (
a, b, c
) und der Höhe (h
) bestimmt werden.
Die Herausforderung besteht darin, das Volumen eines Objekts bei einer der folgenden Eingaben zu bestimmen:
- Eine einzelne Zahl
(r)
oder(r, 0, 0, 0)
=>V = 4/3*pi*r^3
- Zwei Zahlen
(r, h)
oder(r, h, 0, 0)
=>V = pi*r^2*h
- Drei Zahlen
(l, w, h)
oder(l, w, h, 0)
=>V = l*w*h
- Vier Zahlen
(a, b, c, h)
=>V = (1/3)*A*h
, wobeiA
durch Herons Formel gegeben ist :A = 1/4*sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))
Regeln und Erläuterungen:
- Die Eingabe kann sowohl Ganzzahlen als auch Dezimalzahlen sein
- Sie können davon ausgehen, dass alle Eingabedimensionen positiv sind
- Wenn Pi hart codiert ist , muss es genau bis zu:
3.14159
. - Die Ausgabe muss aus mindestens 6 signifikanten Ziffern bestehen, mit Ausnahme von Zahlen, die mit weniger Ziffern genau dargestellt werden können. Sie können ausgeben
3/4
als0.75
,4/3
müssen aber sein1.33333
(mehr Ziffern sind OK)- Das Runden von ungenauen Werten ist optional
- Das Verhalten bei ungültiger Eingabe ist undefiniert
- Standardregeln für E / A. Die Eingabe kann eine Liste oder separate Argumente sein
Dies ist Codegolf, daher gewinnt die kürzeste Lösung in Bytes.
Testfälle:
calc_vol(4)
ans = 268.082573106329
calc_vol(5.5, 2.23)
ans = 211.923986429533
calc_vol(3.5, 4, 5)
ans = 70
calc_vol(4, 13, 15, 3)
ans = 24
code-golf
math
arithmetic
geometry
Stewie Griffin
quelle
quelle
Antworten:
MATL ,
57535144 BytesDie Eingabe ist ein Array mit 1, 2, 3 oder 4 Zahlen.
Probieren Sie es online!
Erläuterung
Anstatt verschachtelte
if
Schleifen zu verwenden, die in Bezug auf Bytes teuer sind, werden vier mögliche Ergebnisse für jede Eingabe berechnet und dann das entsprechende Ergebnis in Abhängigkeit von der Eingabelänge ausgewählt.Obwohl nur eines der Ergebnisse gültig sein muss, können die anderen bei der Berechnung keine Fehler melden. Dies bedeutet beispielsweise, dass die Indizierung des vierten Elements der Eingabe nicht zulässig ist, da die Eingabe möglicherweise weniger als vier Elemente enthält.
quelle
Vitsy, 49 Bytes
Ich dachte, Sie gaben mir dieses auf einem Teller, aber ich fand einen ungelösten Fehler, um das Problem zu umgehen. Hat mich aber nicht verletzt.
Da die Eingabe für verschiedene Funktionen eine bestimmte Länge hat, geben Sie mir meine Methodensyntax für diese Aufgaben an. Also ja, Erfolg!
Erläuterung zeilenweise:
Eingaben werden genau umgekehrt wie in der Frage angegeben als Befehlszeilenargumente ohne nachfolgende Nullen akzeptiert.
Probieren Sie es online!
Nebenbei bemerkt, hier ist etwas, das sich derzeit in der Entwicklung befindet.
Java mit Vitsy-Paket
Beachten Sie, dass dieses Paket in Bearbeitung ist. Dies soll nur zeigen, wie dies in Zukunft funktionieren wird (Dokumentation hierfür ist noch nicht hochgeladen) und es wird nicht Golf gespielt und ist eine wörtliche Übersetzung:
quelle
C
10097 Bytesedit 1: entferne unnötige Nachkommastellen
.
, danke Immibis!quelle
4./3.
einfach sein4/3.
? Und kann2.
und12.
ist2
und12
?JavaScript ES6,
12912612511611490 BytesDank Stewie Griffin konnten viele Bytes (9) mit einer wunderbaren Formel gespeichert werden! Da die Eingabe ungleich Null sein muss,
variable?
reicht dies für eine Definitionsprüfung aus.Probieren Sie es aus!
quelle
Uncaught SyntaxError: Unexpected token =
(unter Bezugnahme aufZ=a*a
)h
, der ein bisschen übersehen zu sein scheint.Haskell,
11410910710199 BytesNimmt eine Liste von Zahlen und gibt ein Volumen zurück. Nenne es so
für eine Kugel usw. Die Funktion ist polymorph für jeden Typ, der implementiert
sqrt
(also grundsätzlichFloat
oderDouble
).Es wird keine Wettbewerbe für die Kürze gewinnen. Beachten Sie jedoch, wie lesbar es ist. Auch wenn Sie Haskell nicht wirklich kennen, können Sie leicht sagen, was es tut. Mit der Pattern-Matching-Syntax von Haskell lassen sich auf einfache Weise seltsame Funktionen definieren, die je nach Form der Eingabe etwas völlig anderes bewirken.
quelle
(1/3)*(1/4)*h
,,, warum nichth/12
? Spart Ihnen viele Bytes!.
und ein#
und$
und es wird Mathematica Soup.PowerShell,
165 bis161 ByteAlso ... viele ... Dollar ... (31 der 161 Zeichen entsprechen
$
19,25% des Codes) ... aber dank Stewie Griffin wurden 4 Byte eingespart!Wir nehmen vier Eingaben auf und indexieren sie dann schrittweise in pseudo-ternären Anweisungen in umgekehrter Reihenfolge. ZB
(..., ...)[!$h]
prüft die Außenseite , ob der vierte Eingang vorhanden ist. Wenn ja, ist der!$h
Wille gleich0
und die erste Hälfte wird ausgeführt (das Volumen einer unregelmäßigen dreieckigen Pyramide). Andernfalls wird!$h
mit$h = $null
(da es nicht initialisiert ist) gleich1
, so dass es zur zweiten Hälfte geht, die selbst ein Pseudoternär ist, basierend auf[!$c]
und so weiter.Dies ist wahrscheinlich nahezu optimal, da die angeblich kürzere Formel, die (z. B.) Cᴏɴᴏʀ O'Bʀɪᴇɴ verwendet, in PowerShell aufgrund des Fehlens von a tatsächlich 2 Byte länger ist
^
Bedieners ... Die einzigen wirklichen Einsparungen kommen aus(1/3)*(1/4)*A*$h
GolfenA*$h/12
und Einstellung$p
später, um ein paar Bytes anstelle des langwierigen[math]::PI
Aufrufs zu speichern .quelle
CJam,
6766 BytesIch werde bald daran arbeiten, es zu verkürzen. Probieren Sie es online !
Erklärung zu kommen.
quelle
Im Ernst,
655955 BytesProbieren Sie es online!
Erläuterung
Dieser ist ein Trottel. Ich werde die Erklärung in mehrere Teile aufteilen.
Hauptkörper:
Funktion 0:
Funktion 1:
Funktion 2:
Funktion 3 (21 Bytes; fast die Hälfte der Programmlänge!)
quelle
Matlab, 78 Bytes
Sicher kann es nicht kürzer werden.
~b
,~c
Und~d
sind ,0
wenn jede der Abmessungen ungleich Null ist. Eine Formel mit einer Nulldimension ergibt nur Null. Auf diese Weise kann jede der Formeln einfach summiert werden. Neinif
undelse
erforderlich.Nennen Sie es so (oder versuchen Sie es online hier ):
quelle
Python
32,127119116 BytesKredit jemand und Mego für alle ihre Hilfe bei Golf spielen. Wir danken auch Cᴏɴᴏʀ O'Bʀɪᴇɴ und Josh, als ich Teile ihrer Antworten für diese Frage ausgeliehen habe .
Ungolfed:
quelle
def v(a,b,c,d):z=a*a;p=355/113;return[x for x in[(4*z*b*b-(z+b*b-c*c)**2)**.5*d/12,a*b*c,p*z*b,p*z*a*4/3]if x][0]
Vorausgesetzt, die Eingabe ist mit0
s aufgefüllt .def v(a,b,c,d):z=a*a;P=3.14159;return filter(int,[(4*z*b*b-(z+b*b-c*c)**2)**.5*d/12,a*b*c,P*z*b,P*z*a*4/3])[0]
Mathematica, 114 (103)
Reine Funktion: 114
Ungolfed:
Verwendung:
Wenn benannte Funktionen erlaubt sind: 103
Verwendung:
quelle
#1==#
Ich denkeQuiet[x_]:=Quiet[x,All]
und π (Alt-P auf einem Mac) passt in erweitertes ASCII.#1 #2 #3
durch1##
? Vergiss nicht#==#1
Faktor 783 Bytes
Nun, das hat ewig gedauert.
Rufen Sie an
{ array of numbers } volume
.quelle