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
C4H10
dicta 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 + 2CO2
y2CH4+4O2>4H2O+2CO2
son 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 especialesCH4
y 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!
Bastante simple. Básicamente, corto la entrada de
C
aH
, y obtengo esa subcadena. Si no es nada, me pusen
a uno. De lo contrario, lo configuro en el número entreC
yH
. El siguiente código simplemente lo imprime y lo pone en notación adecuada.Sin golf:
fuente
printf
lugar de+
(-11 de su puntaje bruto si contaba correctamente).printf
? (Un poco quisquilloso con eso, no lo he usado antes.: D)printf
utiliza 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
-n
bandera)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í
$#x
representa 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 lo1
contrario. (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
print
y un"
carácter, y laCO2
variable 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
CH4
que 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
n
ser 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