Wprowadzenie
Jedną z pierwszych rzeczy, których nauczyłem się w chemii, było podanie wzoru na spalanie alkanów. Najbardziej podstawowym przykładem: 2CH4 + 4O2 > 4H2O + 2CO2
. Zauważmy, że równanie można by uprościć, dzieląc każdy współczynnik przez 2, otrzymalibyśmy CH4 + 2O2 > 2H2O + CO2
. Aby to ułatwić, zignorujemy ten krok .
Widać, że przy spalaniu dowolnego alkanu wykorzystywany jest tlen. Po reakcji powstają tylko CO2 i H2O.
Zadanie:
Podaj kompletny program, który pobiera dane wejściowe ze STDIN lub najbliższego możliwego równoważnika i wysyła całkowitą reakcję za pomocą STDOUT lub najbliższego możliwego równoważnika.
Dane wejściowe zawsze będą miały postać C(n)H(2n+2)
, z n > 0
. Oto kilka przykładowych danych wejściowych:
CH4
C2H6
C3H8
C4H10
C5H12
C6H14
etc.
Przydatna wskazówka:
Każdy alkan ma standardowy wzór w reakcji spalania:
2C(n)H(2n+2) + (3n+1)O2 > (2n+2)H2O + (2n)CO2
na przykład
C4H10
daje następujące równanie: 2C(4)H(2*4+2) + (3*4+1)O2 > (2*4+2)H2O + (2*4)CO2
. Po obliczeniu wszystkiego otrzymujemy końcowe równanie:2C4H10 + 13O2 > 10H2O + 8CO2
Przykłady:
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
Zasady:
- Musisz podać pełny program.
- Twój program musi pobierać dane ze STDIN lub najbliższego odpowiednika, jeśli nie jest to możliwe.
- Twój program musi generować dane wyjściowe przy użyciu STDOUT lub najbliższego odpowiednika, jeśli nie jest to możliwe.
- Zauważ, że użyłem spacji w przykładach, aby zwiększyć czytelność, nie są one konieczne .
2CH4 + 4O2 > 4H2O + 2CO2
i2CH4+4O2>4H2O+2CO2
oba są prawidłowymi danymi wyjściowymi. Jeśli jednak konsekwentnie używasz spacji na wyjściu, zyskujesz premię -10% - To jest golf golfowy , więc wygrywa program z najmniejszą liczbą bajtów!
Odpowiedzi:
Pyth, 40 bajtów
Wypróbuj online. Zestaw testowy.
źródło
Python 3, 86 * 0,9 = 77,4 bajtów
Wyodrębnia liczbę danych wejściowych
H
zamiast liczbyC
. Zapobiega to specjalnemu umieszczaniuCH4
i upraszcza wyrażenia wyjściowe pod względemN=2n+2
.Dane wyjściowe mają parametry podłączone za pomocą formatowania łańcucha. Pierwszy summand jest tylko ciągiem wejściowym, a reszta ma podłączone liczby obliczeniowe. Zauważ, że
N*1.5-2
(tak samo jakN*3/2-2
) daje liczbę zmiennoprzecinkową, ale formatowanie łańcucha przekształca go w liczbę całkowitą.źródło
Java, 0,9 * 202 = 181,8 bajtów
Czasami zastanawiam się, czy po prostu krzywdzę się Javą.
Dzięki @TNT i @TFeld za wygaszenie dobrych 20 bajtów!
Dość proste. Zasadniczo odcinam dane wejściowe od
C
doH
i otrzymuję ten podciąg. Jeśli to nic, wybrałemn
jeden. W przeciwnym razie ustawię go na liczbę pomiędzyC
iH
. Poniższy kod po prostu drukuje go i umieszcza we właściwej notacji.Nie golfowany:
źródło
printf
zamiast+
(-11 z surowego wyniku, jeśli poprawnie policzyłem).printf
? (Trochę wybredny, nie używał tego wcześniej.: D)printf
używa mechaniki zjava.util.Formatter
. Możesz mieć ciąg do wydrukowania, taki jak „% d” w instrukcji print, a po nim pewną wartość lub zmienną, która zostanie wydrukowana. Może to być przydatne w sytuacjach, gdy masz dużo zmiennych do drukowania, na przykład .Python 2,
12291 * 0,9 = 81,9 bajtówźródło
JavaScript ES6, 63 * .9 = 56,7 bajtów
Podobne do mojej odpowiedzi ESMin.
źródło
Pyth,
69 bajtów * 0,9 = 6263 * 0,9 = 5756 * 0,9 = 5053 * 0,9 = 48 bajtówTo jest tak jak z odpowiedzią xnor, gdzie używam wartości H. Zmienna J służy do przechowywania ilości H we wzorze cząsteczkowym cząsteczki.
Wypróbuj tutaj
źródło
JavaScript ES6, 96 * 0,9 = 86,4
źródło
CJam,
4544 bajtówWypróbuj online
Aby uniknąć specjalnej obudowy
CH4
, nie używam w ogóle pierwszej liczby, a tylko ją wypisuję poH
. Daje to wartość2n+2
. Na tej podstawie obliczane są pozostałe wartości i formatowane.Wyjaśnienie:
źródło
2r_[[~]W=_2/(3*)\_2-]"+%dO2>%dH2O+%dCO2"e%
zapisuje bajt.Perl, (84 + 1) * 0,9 = 76,5
(+1 znak za bieganie z
-n
flagą)Mój pierwszy golf Perl!
Ważne jest, aby STDIN nie zawierał nowej linii końcowej. Przykładowe użycie:
Niegolfowane:
Linie
są tutaj dość interesujące.
$#x
reprezentuje „ostatni wypełniony indeks”@x
(a wyróżnianie składni SE uważa, że jest to komentarz, ponieważ jest głupi), więc$x[$#x]
wybierze przechwyconą częśćC(\d)
wyrażenia regularnego, jeśli istnieje, lub w1
inny sposób. (Perl nie dba o to, że będzie to ciąg znaków we wszystkich innych przypadkach, z wyjątkiem1
; w Perlu możesz używać operatorów numerycznych.)źródło
JS, 118 (106) bajtów
źródło
𝔼𝕊𝕄𝕚𝕟, 51 * .9 = 45,9 znaków / 64 * .9 = 57,6 bajtów
Try it here (Firefox only).
Wyjaśnienie
źródło
Python,
0,9 * 195 = 1750,9 * 190 = 1710,9 * 148 = 133 bajtyWypróbuj tutaj
źródło
print
i"
charakter, aCO2
zmienna może być nazwany coś krótszego :)i[1]
gwarantowana jest jedna"H"
lub cyfra, możesz zapisać kolejny bajt za pomocąif i[1]>"9"
(lub zastąpić"9"
dowolnym innym znakiem o wartości ascii od 58 do 71)F #, 113
źródło
MATLAB, 96 * 0,9 = 86,4 bajtów
Dość oczywiste. Pobiera ciąg wejściowy (trzeba zawinąć go w cudzysłów, aby MATLAB nie próbował go wykonać!). Następnie konwertuje liczbę między C i H na wejściu na dziesiętne. Wartość 1 jest dołączana jako tablica do danych wyjściowych sscanf, dzięki czemu w przypadku,
CH4
gdy wyodrębniamy pierwszy indeks z tablicy don
, otrzymujemy 1, jeśli między C i H. nie było liczby, a następnie drukujemy ze spacjami zgodnie ze wzorem w pytaniu.Powinno to również działać z Octave przy użyciu internetowego tłumacza tutaj .
źródło
C ++, 160 * 0,9 = 144 bajtów
Trochę więcej, niż się spodziewałem. Odczytuje pierwszy znak i odrzuca go, a następnie odczytuje liczbę całkowitą i wyświetla wynik. Problem jest z
n
byciu 1. Nie mogę wymyślić krótszego sposobu, aby go wydrukować.Nie golfił
źródło
Clojure / ClojureScript, 98 * 0,9 = 88,2 bajtów
Tworzy anonimową funkcję. Wypróbuj go, przechodząc tutaj i wprowadzania
(def f #(let...))
, a następnie(f "C3H8")
.źródło
Excel, 123 * 0,9 = 110,7 bajtów
Gdybyśmy mogli przyjąć wejście CH4 jako C1H4, można je zmniejszyć do 122 * 0,9 = 109,8 bajtów
źródło
Galaretka , 33 bajty
Wypróbuj online!
Bonus tu nie pomaga.
źródło