Introducción
Una de las primeras cosas que aprendí en química fue dar la fórmula para la combustión de alcanos. El ejemplo más básico era: 2CH4 + 4O2 > 4H2O + 2CO2. Tenga en cuenta que la ecuación podría haberse simplificado dividiendo cada coeficiente por 2, obtendríamos CH4 + 2O2 > 2H2O + CO2 . Para facilitar las cosas, vamos a ignorar este paso .
Puede ver que con la combustión de cualquier alcano, se usa oxígeno. Después de la reacción, solo se producen CO2 y H2O.
La tarea:
Proporcione un programa completo que reciba información de STDIN o el equivalente más cercano posible, y genere la reacción total usando STDOUT o el equivalente más cercano posible.
La entrada siempre estará en la forma C(n)H(2n+2), con n > 0. Estas son algunas entradas de ejemplo:
CH4
C2H6
C3H8
C4H10
C5H12
C6H14
etc.
Un consejo útil:
Cada alcano tiene un patrón estándar en la reacción de combustión:
2C(n)H(2n+2) + (3n+1)O2 > (2n+2)H2O + (2n)CO2
p.ej
C4H10dicta la siguiente ecuación: 2C(4)H(2*4+2) + (3*4+1)O2 > (2*4+2)H2O + (2*4)CO2. Después de calcular todo, obtenemos esta ecuación final:2C4H10 + 13O2 > 10H2O + 8CO2
Ejemplos:
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
Reglas:
- Necesita proporcionar un programa completo.
- Su programa necesita recibir información de STDIN, o el equivalente más cercano si no es posible.
- Su programa necesita salir usando STDOUT, o el equivalente más cercano si no es posible.
- Tenga en cuenta que usé espacios para los ejemplos para aumentar la legibilidad, estos no son necesarios .
2CH4 + 4O2 > 4H2O + 2CO2y2CH4+4O2>4H2O+2CO2son ambas salidas válidas. Sin embargo, si usa espacios consistentemente para la salida, obtendrá un bono de -10% - Este es el código de golf , por lo que gana el programa con la menor cantidad de bytes.

Respuestas:
Pyth, 40 bytes
Pruébalo en línea. Banco de pruebas.
fuente
Python 3, 86 * 0.9 = 77.4 bytes
Extrae el número de
H's en lugar del número deC' s de la entrada. Esto evita las mayúsculas especialesCH4y simplifica las expresiones de salida en términos deN=2n+2.La salida tiene parámetros conectados mediante formato de cadena. El primer sumando es solo la cadena de entrada, y el resto tiene números calculados conectados. Tenga en cuenta que
N*1.5-2(igual queN*3/2-2) da un flotador, pero el formato de cadena lo convierte en un int.fuente
Java, 0.9 * 202 = 181.8 bytes
A veces, me pregunto si me estoy lastimando con Java.
¡Gracias a @TNT y @TFeld por reducir unos 20 bytes!
clase A {public static void main (String [] a) {String s = a [0] .substring (1, a [0] .indexOf ("H")); long n = Long.parseLong ((s.length ()> 0)? S: "1"); System.out.printf ("2% s +% dO2>% dH2O +% dCO2", a [0], 3 * n + 1,2 * n + 2 , 2 * n);}}Bastante simple. Básicamente, corto la entrada de
CaH, y obtengo esa subcadena. Si no es nada, me pusena uno. De lo contrario, lo configuro en el número entreCyH. El siguiente código simplemente lo imprime y lo pone en notación adecuada.Sin golf:
clase A{ public static void main (Cadena [] a) { Cadena s = a [0] .substring (1, a [0] .indexOf ("H")); long n = Long.parseLong ((s.length ()> 0)? s: "1"); System.out.printf ("2% s +% dO2>% dH2O +% dCO2", a [0], 3 * n + 1,2 * n + 2,2 * n); } }fuente
printflugar de+(-11 de su puntaje bruto si contaba correctamente).printf? (Un poco quisquilloso con eso, no lo he usado antes.: D)printfutiliza mecánica dejava.util.Formatter. Puede tener una cadena para imprimir como "% d" en su declaración de impresión y después de ella algún valor o variable que se imprimirá en su lugar. Puede ser útil en situaciones donde tiene muchas variables para imprimir, por ejemplo .Python 2,
12291 * 0.9 = 81.9 bytesfuente
Javascript ES6, 63 * .9 = 56.7 bytes
Similar a mi respuesta de ESMin.
fuente
Pyth,
69 bytes * 0.9 = 6263 * 0.9 = 5756 * 0.9 = 5053 * 0.9 = 48 bytesEs como la respuesta de xnor, donde uso los valores de H. Una variable J se usa para almacenar la cantidad de H en la fórmula molecular de la molécula.
Pruébalo aquí
fuente
Javascript ES6, 96 * 0.9 = 86.4
fuente
CJam,
4544 bytesPruébalo en línea
Para evitar una carcasa especial
CH4, no uso el primer número en absoluto, y solo extraigo el número después delH. Esto le da el valor de2n+2. Los valores restantes se calculan en función de eso y se formatean.Explicación:
fuente
2r_[[~]W=_2/(3*)\_2-]"+%dO2>%dH2O+%dCO2"e%Guarda un byte.Perl, (84 + 1) * 0.9 = 76.5
(+1 caracteres por correr con la
-nbandera)Mi primer golf Perl!
Es importante que STDIN no contenga una nueva línea final. Ejemplo de uso:
Ungolfed-ish:
Las líneas
son bastante interesantes aquí
$#xrepresenta el "último índice poblado" de@x(y el resaltado de sintaxis de SE cree que es un comentario porque es tonto), por$x[$#x]lo que seleccionará la parte capturada de laC(\d)expresión regular si existe, o de lo1contrario. (A Perl no le importa que sea una cadena en todos los demás casos, excepto1; puede usar operadores numéricos en cadenas muy bien en Perl).fuente
JS, 118 (106) bytes
fuente
51, 51 * .9 = 45.9 caracteres / 64 * .9 = 57.6 bytes
Try it here (Firefox only).
Explicación
fuente
Python,
0.9 * 195 = 1750.9 * 190 = 1710.9 * 148 = 133 bytesPruébalo aquí
fuente
printy un"carácter, y laCO2variable podría llamarse algo más corto :)i[1]se garantiza que sea uno"H"o un dígito, puede guardar otro byte conif i[1]>"9"(o reemplazarlo"9"con cualquier otro carácter con un valor ascii de 58 a 71)F #, 113
fuente
MATLAB, 96 * 0.9 = 86.4 bytes
Bastante autoexplicativo. Toma una cadena de entrada (necesita incluirla entre comillas para que MATLAB no intente ejecutarla). Luego convierte el número entre C y H en la entrada a decimal. El valor 1 se agrega como una matriz a la salida de sscanf para que, en el caso
CH4que extraigamos el primer índice de la matrizn, obtengamos un 1 si no había un número entre la C y la H. Luego se imprime con los espacios siguiendo la fórmula en la pregunta.Esto también debería funcionar con Octave usando el intérprete en línea aquí .
fuente
C ++, 160 * 0.9 = 144 bytes
Un poco más de lo que esperaba. Lee primero char y lo descarta, luego lee int y genera el resultado. El problema es con
nser 1. No se me ocurre una forma más corta de generarlo.Sin golf
fuente
Clojure / ClojureScript, 98 * 0.9 = 88.2 bytes
Crea una función anónima. Pruébalo yendo aquí y entrando
(def f #(let...)), entonces(f "C3H8").fuente
Excel, 123 * 0.9 = 110.7 bytes
Si pudiéramos tomar la entrada CH4 como C1H4, se puede reducir a 122 * 0.9 = 109.8 bytes
fuente
Jalea , 33 bytes
Pruébalo en línea!
El bono no ayuda aquí.
fuente