Vous pouvez déterminer le volume d'objets en fonction d'un ensemble de dimensions donné:
- Le volume d'une sphère peut être déterminé à l'aide d'un seul chiffre, le rayon (
r
) - Le volume d'un cylindre peut être déterminé à l'aide de deux nombres, le rayon (
r
) et la hauteur (h
) - Le volume d'une boîte peut être déterminé à l'aide de trois chiffres, la longueur (
l
), la largeur (w
) et la hauteur (h
) - Le volume d'une pyramide triangulaire irrégulière peut être déterminé à l'aide de quatre nombres, les longueurs latérales (
a, b, c
) et la hauteur (h
).
Le défi consiste à déterminer le volume d'un objet en fonction de l'une des entrées suivantes:
- Un seul numéro
(r)
ou(r, 0, 0, 0)
=>V = 4/3*pi*r^3
- Deux chiffres
(r, h)
ou(r, h, 0, 0)
=>V = pi*r^2*h
- Trois chiffres
(l, w, h)
ou(l, w, h, 0)
=>V = l*w*h
- Quatre nombres
(a, b, c, h)
=>V = (1/3)*A*h
, oùA
est donné par la formule de Heron :A = 1/4*sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))
Règles et clarifications:
- L'entrée peut être à la fois des entiers et / ou des décimales
- Vous pouvez supposer que toutes les dimensions d'entrée seront positives
- Si Pi est codé en dur , il doit être précis jusqu'à:
3.14159
. - La sortie doit avoir au moins 6 chiffres significatifs, à l'exception des nombres qui peuvent être représentés avec précision avec moins de chiffres. Vous pouvez sortir en
3/4
tant que0.75
, mais4/3
doit l'être1.33333
(plus de chiffres sont OK)- Comment arrondir des valeurs inexactes est facultatif
- Le comportement pour une entrée non valide n'est pas défini
- Règles standard pour les E / S. L'entrée peut être une liste ou des arguments séparés
C'est le golf de code, donc la solution la plus courte en octets gagne.
Cas de test:
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
la source
la source
Réponses:
MATL ,
57535144 octetsL'entrée est un tableau avec 1, 2, 3 ou 4 chiffres.
Essayez-le en ligne!
Explication
Au lieu d'utiliser des
if
boucles imbriquées , ce qui coûte cher en octets, cela calcule quatre résultats possibles pour n'importe quelle entrée, puis sélectionne le résultat approprié en fonction de la longueur de l'entrée.Lors du calcul des résultats, même si un seul doit être valide, les autres ne peuvent pas donner d'erreurs. Cela signifie par exemple que l'indexation du quatrième élément de l'entrée n'est pas autorisée, car l'entrée peut avoir moins de quatre éléments.
la source
Vitsy, 49 octets
Je pensais que vous m'aviez remis celui-ci sur une assiette, mais j'ai trouvé un bug non résolu pour contourner. Mais ça ne m'a pas fait de mal.
Fondamentalement, l'entrée étant d'une certaine longueur pour différentes fonctions, vous me fournissez ma syntaxe de méthode pour faire ce genre de choses. Alors, oui, succès!
Explication, une ligne à la fois:
L'entrée est acceptée en tant qu'arguments de ligne de commande dans le sens inverse exact, tels qu'ils apparaissent dans la question, sans zéros de fin.
Essayez-le en ligne!
En passant, voici quelque chose qui est actuellement en développement.
Java avec package Vitsy
Notez que ce package est en cours de réalisation; c'est juste pour montrer comment cela fonctionnera à l'avenir (la documentation n'est pas encore téléchargée) et ce n'est pas joué, et c'est une traduction littérale:
la source
C,
10097 octetsmodifier 1: supprimez les décimales inutiles
.
, merci Immibis!la source
4./3.
l'être4/3.
? Et peut2.
et12.
simplement être2
et12
?JavaScript ES6,
12912612511611490 octetsBeaucoup d'octets enregistrés (9) avec une merveilleuse formule, grâce à Stewie Griffin! Puisque l'entrée doit être différente de zéro,
variable?
suffira pour une vérification de définition.Testez-le!
la source
Uncaught SyntaxError: Unexpected token =
(se référant àZ=a*a
)h
, ce qui semble un peu un oubli.Haskell,
114109107101 10199 octetsPrend une liste de nombres et renvoie un volume. Appelez ça comme
pour une sphère, etc. La fonction est polymorphe pour tout type qui implémente
sqrt
(donc, fondamentalementFloat
ouDouble
).Cela ne va pas gagner de concours pour la brièveté. Mais notez à quel point c'est lisible . Même si vous ne connaissez pas vraiment Haskell, vous pouvez dire ce qu'il fait assez facilement. La syntaxe de correspondance de motifs de Haskell facilite la définition de fonctions étranges qui font quelque chose de totalement différent selon la forme de l'entrée.
la source
(1/3)*(1/4)*h
,,, pourquoi pash/12
? Vous fait économiser beaucoup d'octets!.
et#
et$
et il devient Mathematica soupe.PowerShell,
165161 octetsDonc ... Beaucoup ... Dollars ... (31 des 161 caractères sont
$
, pour 19,25% du code) ... mais, économisés 4 octets grâce à Stewie Griffin!Nous prenons quatre entrées, puis nous indexons progressivement en déclarations pseudo-ternaires basées sur celles-ci dans l'ordre inverse. Par exemple, l'extérieur
(..., ...)[!$h]
teste si la quatrième entrée est présente. Si c'est le cas, la!$h
volonté sera égale0
et la première moitié sera exécutée (le volume d'une pyramide triagonale irrégulière). Sinon,!$h
avec$h = $null
(car il n'est pas initialisé) sera égal1
, il passe donc à la seconde moitié, qui est elle-même un pseudo-ternaire basé sur[!$c]
et ainsi de suite.Ceci est probablement presque optimal, car la formule soi-disant plus courte que (par exemple) Cᴏɴᴏʀ O'Bʀɪᴇɴ utilise est en fait 2 octets de plus dans PowerShell grâce au manque d'
^
opérateur ... Les seules économies réelles proviennent du(1/3)*(1/4)*A*$h
golf versA*$h/12
, et définissant$p
plus tard pour enregistrer quelques octets au lieu de l'[math]::PI
appel long .la source
CJam,
6766 octetsJe vais travailler sur le raccourcir bientôt. Essayez-le en ligne !
Explication à venir.
la source
Sérieusement,
655955 octetsEssayez-le en ligne!
Explication
Celui-ci est un doozy. Je vais diviser l'explication en plusieurs parties.
Corps principal:
Fonction 0:
Fonction 1:
Fonction 2:
Fonction 3 (21 octets; près de la moitié de la durée du programme!)
la source
Matlab, 78 octets
Bien sûr, il ne peut pas être plus court que cela.
~b
,~c
et~d
, le sont0
si chacune des dimensions est différente de zéro. Une formule avec une dimension nulle donnera simplement zéro. De cette façon, chacune des formules peut simplement être additionnée. Nonif
etelse
obligatoire.Appelez-le comme ça (ou essayez-le en ligne ici ):
la source
Python
32,127119 119116 octetsCrédit à quelqu'un et Mego pour leur aide avec le golf. Nous remercions également Cᴏɴᴏʀ O'Bʀɪᴇɴ et Josh car j'ai emprunté une partie de leurs réponses pour celle-ci.
Non golfé:
la source
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]
supposant que l'entrée est complétée par l'0
art.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)
Fonction pure: 114
Non golfé:
Usage:
Si les fonctions nommées sont autorisées: 103
Usage:
la source
#1==#
, Je penseQuiet[x_]:=Quiet[x,All]
et π (Alt-P sur un Mac) tient en ASCII étendu.#1 #2 #3
par1##
? N'oubliez pas#==#1
Facteur, 783 octets
Eh bien, cela a pris une éternité.
Appelle
{ array of numbers } volume
.la source