introduction
L'une des premières choses que j'ai apprises en chimie a été de donner la formule de combustion des alcanes. L'exemple le plus basique était: 2CH4 + 4O2 > 4H2O + 2CO2
. Notez que l'équation aurait pu être simplifiée en divisant chaque coefficient par 2, nous obtiendrions CH4 + 2O2 > 2H2O + CO2
. Pour faciliter les choses, nous allons ignorer cette étape .
Vous pouvez voir qu'avec la combustion de n'importe quel alcane, l'oxygène est utilisé. Après la réaction, seuls du CO2 et du H2O sont produits.
La tâche:
Donnez un programme complet qui prend en entrée STDIN ou l'équivalent le plus proche possible, et génère la réaction totale en utilisant STDOUT ou l'équivalent le plus proche possible.
L'entrée sera toujours sous la forme C(n)H(2n+2)
, avec n > 0
. Voici quelques exemples d'entrées:
CH4
C2H6
C3H8
C4H10
C5H12
C6H14
etc.
Un conseil utile:
Chaque alcane a un schéma standard dans la réaction de combustion:
2C(n)H(2n+2) + (3n+1)O2 > (2n+2)H2O + (2n)CO2
par exemple
C4H10
donne l'équation suivante: 2C(4)H(2*4+2) + (3*4+1)O2 > (2*4+2)H2O + (2*4)CO2
. Après avoir tout calculé, nous obtenons cette équation finale:2C4H10 + 13O2 > 10H2O + 8CO2
Exemples:
input: CH4
output: 2CH4 + 4O2 > 4H2O + 2CO2
input: C3H8
output: 2C3H8 + 10O2 > 8H2O + 6CO2
input: C4H10
output: 2C4H10 + 13O2 > 10H2O + 8CO2
input: C12H26
output: 2C12H26 + 37O2 > 26H2O + 24CO2
Règles:
- Vous devez fournir un programme complet.
- Votre programme doit prendre la contribution de STDIN, ou l'équivalent le plus proche si ce n'est pas possible.
- Votre programme doit sortir en utilisant STDOUT, ou l'équivalent le plus proche si ce n'est pas possible.
- Notez que j'ai utilisé des espaces pour les exemples pour augmenter la lisibilité, ceux-ci ne sont pas nécessaires .
2CH4 + 4O2 > 4H2O + 2CO2
et2CH4+4O2>4H2O+2CO2
sont deux sorties valides. Cependant, si vous utilisez régulièrement des espaces pour la sortie, vous obtenez un bonus de -10% - C'est du code-golf , donc le programme avec le moins d'octets gagne!
Réponses:
Pyth, 40 octets
Essayez-le en ligne. Suite de tests.
la source
Python 3, 86 * 0,9 = 77,4 octets
Extrait le nombre de
H
plutôt que le nombre deC
s de l'entrée. Cela évite la casse spécialeCH4
et simplifie les expressions de sortie en termes deN=2n+2
.La sortie a des paramètres connectés via le formatage des chaînes. Le premier summand est juste la chaîne d'entrée, et les autres ont des nombres calculés branchés. Notez que
N*1.5-2
(identique àN*3/2-2
) donne un flottant, mais le formatage de la chaîne le convertit en entier.la source
Java, 0,9 * 202 = 181,8 octets
Parfois, je me demande si je me blesse simplement avec Java.
Merci à @TNT et @TFeld d'avoir rasé 20 bons octets!
Assez simple. Fondamentalement, je coupe l'entrée de
C
àH
et j'obtiens cette sous-chaîne. Si ce n'est rien, je m'en metsn
à un. Sinon, je le mets au nombre entreC
etH
. Le code suivant l'imprime et le met en notation appropriée.Non golfé:
la source
printf
au lieu de+
(-11 de votre score brut si je compte correctement).printf
? (Un peu capricieux à ce sujet, je ne l'ai jamais utilisé auparavant.: D)printf
utilise la mécanique dejava.util.Formatter
. Vous pouvez avoir une chaîne à imprimer telle que "% d" dans votre instruction d'impression et ensuite une valeur ou une variable qui sera imprimée à la place. Cela peut être utile dans des situations où vous avez beaucoup de variables à imprimer, par exemple .Python 2,
12291 * 0,9 = 81,9 octetsla source
Javascript ES6, 63 * .9 = 56,7 octets
Similaire à ma réponse ESMin.
la source
Pyth,
69 octets * 0,9 = 6263 * 0,9 = 5756 * 0,9 = 5053 * 0,9 = 48 octetsC'est comme la réponse de xnor, où j'utilise les valeurs H. Une variable J est utilisée pour stocker la quantité de H dans la formule moléculaire de la molécule.
Essayez-le ici
la source
Javascript ES6, 96 * 0,9 = 86,4
la source
CJam,
4544 octetsEssayez-le en ligne
Pour éviter les boîtiers spéciaux
CH4
, je n'utilise pas du tout le premier chiffre, et j'extrais seulement le nombre après leH
. Cela donne la valeur de2n+2
. Les valeurs restantes sont ensuite calculées sur cette base et formatées.Explication:
la source
2r_[[~]W=_2/(3*)\_2-]"+%dO2>%dH2O+%dCO2"e%
enregistre un octet.Perl, (84 + 1) * 0,9 = 76,5
(+1 car pour courir avec le
-n
drapeau)Mon premier golf Perl!
Il est important que STDIN ne contienne pas de nouvelle ligne de fin. Exemple d'utilisation:
Ungolfed-ish:
Les lignes
sont assez intéressants ici.
$#x
représente le "dernier index peuplé" de@x
(et la mise en évidence de la syntaxe de SE pense que c'est un commentaire parce qu'il est stupide), donc$x[$#x]
sélectionnera la partie capturée de l'C(\d)
expression régulière si elle existe, ou1
autrement. (Perl ne se soucie pas que ce soit une chaîne dans tous les autres cas sauf1
; vous pouvez très bien utiliser les opérateurs numériques sur les chaînes en Perl.)la source
JS, 118 (106) octets
la source
𝔼𝕊𝕄𝕚𝕟, 51 * .9 = 45,9 caractères / 64 * .9 = 57,6 octets
Try it here (Firefox only).
Explication
la source
Python,
0,9 * 195 = 1750,9 * 190 = 1710,9 * 148 = 133 octetsEssayez-le ici
la source
print
et un"
caractère, et laCO2
variable pourrait être nommée quelque chose de plus court :)i[1]
est garanti qu'il s'agit d'un"H"
ou d'un chiffre, vous pouvez enregistrer un autre octet avecif i[1]>"9"
(ou le remplacer"9"
par tout autre caractère avec une valeur ascii de 58 à 71)F #, 113
la source
MATLAB, 96 * 0,9 = 86,4 octets
Assez explicite. Prend une chaîne d'entrée (besoin de la mettre entre guillemets pour que MATLAB n'essaye pas de l'exécuter!). Convertit ensuite le nombre entre le C et le H dans l'entrée en décimal. La valeur 1 est ajoutée sous forme de tableau à la sortie de sscanf de sorte que dans le cas
CH4
où nous extrayons le premier index du tableau dansn
nous obtenons un 1 s'il n'y avait pas de nombre entre le C et le H. Ensuite, il suffit de l'imprimer avec les espaces suivant la formule de la question.Cela devrait également fonctionner avec Octave en utilisant l'interpréteur en ligne ici .
la source
C ++, 160 * 0,9 = 144 octets
Un peu plus que ce à quoi je m'attendais. Lit d'abord le caractère et le supprime, puis lit l'int et affiche le résultat. Le problème est avec
n
être 1. Je ne peux pas penser à un moyen plus court de le produire.Non golfé
la source
Clojure / ClojureScript, 98 * 0,9 = 88,2 octets
Crée une fonction anonyme. Essayez-le en allant ici et en entrant
(def f #(let...))
, alors(f "C3H8")
.la source
Excel, 123 * 0,9 = 110,7 octets
Si nous pouvions prendre l'entrée CH4 comme C1H4, peut être réduite à 122 * 0,9 = 109,8 octets
la source
Gelée , 33 octets
Essayez-le en ligne!
Le bonus n'aide pas ici.
la source