Вступление
Одной из первых вещей, которые я узнал в химии, была разработка формулы для сжигания алканов. Самый простой пример был: 2CH4 + 4O2 > 4H2O + 2CO2
. Обратите внимание, что уравнение можно было бы упростить, поделив каждый коэффициент на 2, мы бы получили CH4 + 2O2 > 2H2O + CO2
. Чтобы упростить ситуацию, мы будем игнорировать этот шаг .
Вы можете видеть, что при сжигании любого алкана используется кислород. После реакции получают только CO2 и H2O.
Задание:
Дайте полную программу, которая принимает входные данные из STDIN или ближайшего возможного эквивалента и выводит общую реакцию, используя STDOUT или ближайший возможный эквивалент.
Ввод всегда будет в форме C(n)H(2n+2)
, с n > 0
. Вот некоторые примеры входных данных:
CH4
C2H6
C3H8
C4H10
C5H12
C6H14
etc.
Полезный совет:
Каждый алкан имеет стандартную схему реакции сгорания:
2C(n)H(2n+2) + (3n+1)O2 > (2n+2)H2O + (2n)CO2
например
C4H10
дает следующее уравнение: 2C(4)H(2*4+2) + (3*4+1)O2 > (2*4+2)H2O + (2*4)CO2
. После расчета всего, мы получаем это окончательное уравнение:2C4H10 + 13O2 > 10H2O + 8CO2
Примеры:
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
Правила:
- Вам необходимо предоставить полную программу.
- Ваша программа должна принимать данные из STDIN или ближайшего аналога, если это невозможно.
- Ваша программа должна выводить с использованием STDOUT или ближайшего аналога, если это невозможно.
- Обратите внимание, что я использовал пробелы в примерах для повышения читабельности, они не обязательны .
2CH4 + 4O2 > 4H2O + 2CO2
и2CH4+4O2>4H2O+2CO2
оба являются действительными выходами. Однако, если вы постоянно используете пробелы для вывода, вы получите бонус -10% - Это код-гольф , поэтому выигрывает программа с наименьшим количеством байтов!
Ответы:
Pyth, 40 байт
Попробуйте онлайн. Тестирование.
источник
Python 3, 86 * 0,9 = 77,4 байта
Извлекает число
H
's, а не числоC
' s из ввода. Это позволяет избежать использования специального регистраCH4
и упрощает выходные выражения в терминахN=2n+2
.Вывод имеет параметры, подключенные через форматирование строки. Первое слагаемое является просто входной строкой, а остальные содержат вычисленные числа. Обратите внимание, что
N*1.5-2
(так же, какN*3/2-2
) дает число с плавающей запятой, но форматирование строки преобразует его в int.источник
Java, 0,9 * 202 = 181,8 байта
Иногда я задаюсь вопросом, причиняю ли я себе боль только с помощью Java.
Спасибо @TNT и @TFeld за сокращение 20 байт!
Довольно просто В принципе, я разрезал входной сигнал от
C
доH
, и получить эту подстроку. Если это ничего, я установилn
один. В противном случае я устанавливаю это число междуC
иH
. Следующий код просто распечатывает его и помещает в правильную запись.Ungolfed:
источник
printf
вместо+
(-11 от вашего необработанного счета, если я посчитал правильно).printf
? (Немного привередлив в этом, раньше не использовал его.: D)printf
использует механику отjava.util.Formatter
. У вас может быть строка для печати, такая как «% d» в вашем операторе печати, а после нее будет напечатано некоторое значение или переменная. Это может быть полезно в ситуациях , когда у вас есть много переменных для печати, например .Python 2,
12291 * 0,9 = 81,9 байтаисточник
Javascript ES6, 63 * .9 = 56,7 байта
Похоже на мой ответ ESMin.
источник
Pyth,
69 байтов * 0,9 = 6263 * 0,9 = 5756 * 0,9 = 5053 * 0,9 = 48 байтовЭто похоже на ответ xnor, где я использую значения H. Переменная J используется для хранения количества H в молекулярной формуле молекулы.
Попробуй здесь
источник
Javascript ES6, 96 * 0,9 = 86,4
источник
CJam,
4544 байтаПопробуйте онлайн
Чтобы избежать использования специального регистра
CH4
, я вообще не использую первое число, а извлекаю только число послеH
. Это дает ценность2n+2
. Остальные значения затем рассчитываются на основе этого и форматируются.Объяснение:
источник
2r_[[~]W=_2/(3*)\_2-]"+%dO2>%dH2O+%dCO2"e%
сохраняет байт.Perl, (84 + 1) * 0,9 = 76,5
(+1 символ за бег с
-n
флагом)Мой первый Perl Golf!
Важно, чтобы STDIN не содержал завершающий перевод строки. Пример использования:
Ungolfed-иш:
Линии
здесь довольно интересно
$#x
представляет «последний заполненный индекс» из@x
(и подсветка синтаксиса SE думает, что это комментарий, потому что он тупой), поэтому$x[$#x]
выберет захваченную частьC(\d)
регулярного выражения, если он существует, или1
иначе. (Perl не волнует, что это будет строка во всех других случаях, кроме1
; вы можете использовать числовые операторы для строк просто отлично в Perl.)источник
JS, 118 (106) байт
источник
51, 51 * .9 = 45,9 символа / 64 * .9 = 57,6 байта
Try it here (Firefox only).
объяснение
источник
Python,
0,9 * 195 = 175,0,9 * 190 = 171,0,9 * 148 = 133 байтаПопробуй здесь
источник
print
и"
характер, иCO2
переменная может быть назван что - то короче :)i[1]
гарантированно будет либо"H"
цифра, либо цифра, вы можете сохранить еще один байтif i[1]>"9"
(или заменить его"9"
любым другим символом со значением ascii от 58 до 71)F #, 113
источник
MATLAB, 96 * 0,9 = 86,4 байта
Довольно понятно, Принимает входную строку (необходимо заключить ее в кавычки, чтобы MATLAB не пытался ее выполнить!). Затем преобразует число между C и H на входе в десятичное. Значение 1 добавляется как массив к выводу sscanf, так что в случае,
CH4
когда мы извлекаем первый индекс в массиве вn
мы получаем 1, если между C и H не было числа. Затем просто печатается с пробелами следуя формуле в вопросе.Это также должно работать с Octave, используя онлайн переводчика здесь .
источник
C ++, 160 * 0,9 = 144 байта
Чуть больше, чем я ожидал. Сначала читает char и отбрасывает его, затем читает int и выводит результат. Проблема с
n
чтобы быть 1. Я не могу придумать более короткий путь для его вывода.Ungolfed
источник
Clojure / ClojureScript, 98 * 0,9 = 88,2 байта
Создает анонимную функцию. Попробуйте, зайдя сюда и войдя
(def f #(let...))
, тогда(f "C3H8")
.источник
Excel, 123 * 0,9 = 110,7 байта
Если бы мы могли принять вход CH4 как C1H4, может быть уменьшен до 122 * 0,9 = 109,8 байтов
источник
Желе , 33 байта
Попробуйте онлайн!
Бонус здесь не помогает.
источник