pengantar
Salah satu hal pertama yang saya pelajari dalam kimia, adalah memberikan formula untuk pembakaran alkana. Contoh yang paling dasar adalah: 2CH4 + 4O2 > 4H2O + 2CO2
. Perhatikan bahwa persamaan bisa disederhanakan dengan membagi setiap koefisien dengan 2, kita akan dapatkan CH4 + 2O2 > 2H2O + CO2
. Untuk mempermudah, kita akan mengabaikan langkah ini .
Anda dapat melihat bahwa dengan pembakaran alkana apa pun, oksigen digunakan. Setelah reaksi, hanya CO2 dan H2O yang dibuat.
Tugas:
Berikan program lengkap yang mengambil input dari STDIN atau setara terdekat yang mungkin, dan output total reaksi menggunakan STDOUT atau setara terdekat yang mungkin.
Masukan akan selalu dalam bentuk C(n)H(2n+2)
, dengan n > 0
. Ini adalah beberapa contoh input:
CH4
C2H6
C3H8
C4H10
C5H12
C6H14
etc.
Kiat yang bermanfaat:
Setiap alkana memiliki pola standar dalam reaksi pembakaran:
2C(n)H(2n+2) + (3n+1)O2 > (2n+2)H2O + (2n)CO2
misalnya
C4H10
memberikan persamaan berikut: 2C(4)H(2*4+2) + (3*4+1)O2 > (2*4+2)H2O + (2*4)CO2
. Setelah menghitung semuanya, kita mendapatkan persamaan terakhir ini:2C4H10 + 13O2 > 10H2O + 8CO2
Contoh:
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
Aturan:
- Anda perlu menyediakan program lengkap.
- Program Anda perlu mengambil input dari STDIN, atau yang setara terdekat jika tidak memungkinkan.
- Program Anda perlu output menggunakan STDOUT, atau yang setara terdekat jika tidak memungkinkan.
- Perhatikan bahwa saya menggunakan spasi untuk contoh untuk meningkatkan keterbacaan, ini tidak perlu .
2CH4 + 4O2 > 4H2O + 2CO2
dan2CH4+4O2>4H2O+2CO2
keduanya merupakan output yang valid. Namun, jika Anda secara konsisten menggunakan spasi untuk output, Anda mendapatkan bonus -10% - Ini adalah kode-golf , sehingga program dengan jumlah byte terkecil menang!
Jawaban:
Pyth, 40 byte
Cobalah online. Suite uji.
sumber
Python 3, 86 * 0,9 = 77,4 byte
Mengekstrak jumlah
H
's bukannya jumlahC
' dari input. Ini menghindari casing khususCH4
dan menyederhanakan ekspresi output dalam halN=2n+2
.Output memiliki parameter terhubung melalui pemformatan string. Sumand pertama hanyalah string input, dan sisanya telah menghitung angka yang terhubung. Perhatikan bahwa
N*1.5-2
(sama sepertiN*3/2-2
) memberikan float, tetapi format string mengubahnya menjadi int.sumber
Java, 0,9 * 202 = 181,8 byte
Terkadang, saya bertanya-tanya apakah saya hanya menyakiti diri sendiri dengan Java.
Terima kasih kepada @TNT dan @TFeld untuk mencukur 20 byte yang bagus!
Cukup mudah. Pada dasarnya, saya memotong input dari
C
keH
, dan mendapatkan substring itu. Jika bukan apa-apa, saya setn
ke satu. Kalau tidak, saya mengaturnya ke nomor antaraC
danH
. Kode berikut hanya mencetaknya dan memasukkannya ke dalam notasi yang tepat.Tidak Disatukan:
sumber
printf
alih-alih+
(-11 dari skor mentah Anda jika saya menghitung dengan benar).printf
? (Sedikit rewel tentang itu, belum pernah menggunakannya sebelumnya.: D)printf
menggunakan mekanik darijava.util.Formatter
. Anda dapat memiliki string untuk dicetak seperti "% d" dalam pernyataan cetak Anda dan setelah itu beberapa nilai atau variabel yang akan dicetak sebagai gantinya. Ini bisa berguna dalam situasi di mana Anda memiliki banyak variabel untuk dicetak, misalnya .Python 2,
12291 * 0,9 = 81,9 bytesumber
Javascript ES6, 63 * .9 = 56.7 byte
Mirip dengan jawaban ESMin saya.
sumber
Pyth,
69 byte * 0,9 = 6263 * 0,9 = 5756 * 0,9 = 5053 * 0,9 = 48 byteSama seperti jawaban xnor, di mana saya menggunakan nilai H. Variabel J digunakan untuk menyimpan jumlah H dalam rumus molekul.
Coba di sini
sumber
Javascript ES6, 96 * 0.9 = 86.4
sumber
CJam,
4544 byteCobalah online
Untuk menghindari casing khusus
CH4
, saya tidak menggunakan nomor pertama sama sekali, dan hanya mengekstrak nomor setelahH
. Ini memberi nilai2n+2
. Nilai yang tersisa kemudian dihitung berdasarkan itu, dan diformat.Penjelasan:
sumber
2r_[[~]W=_2/(3*)\_2-]"+%dO2>%dH2O+%dCO2"e%
menghemat satu byte.Perl, (84 +1) * 0.9 = 76.5
(+1 char untuk berjalan dengan
-n
bendera)Golf Perl pertama saya!
Sangat penting bahwa STDIN tidak mengandung baris baru. Contoh penggunaan:
Isgolfed-ish:
Garis
cukup menarik di sini.
$#x
mewakili "indeks populasi terakhir"@x
(dan penyorotan sintaksis SE menganggap itu komentar karena bodoh), sehingga$x[$#x]
akan memilih bagian yang diambil dariC(\d)
regex jika ada, atau1
sebaliknya. (Perl tidak peduli bahwa itu akan menjadi string dalam semua kasus lain kecuali1
; Anda dapat menggunakan operator numerik pada string dengan baik di Perl.)sumber
JS, 118 (106) byte
sumber
𝔼𝕊𝕄𝕚𝕟, 51 * .9 = 45.9 karakter / 64 * .9 = 57.6 byte
Try it here (Firefox only).
Penjelasan
sumber
Python,
0,9 * 195 = 1750,9 * 190 = 1710,9 * 148 = 133 byteCoba di sini
sumber
print
dan"
karakter, danCO2
variabel dapat dinamai lebih pendek :)i[1]
dijamin berupa"H"
angka atau digit, Anda dapat menyimpan byte lain denganif i[1]>"9"
(atau mengganti"9"
dengan karakter lain dengan nilai ascii dari 58 hingga 71)F #, 113
sumber
MATLAB, 96 * 0.9 = 86.4 byte
Cukup jelas. Mengambil string input (perlu membungkusnya dengan tanda kutip sehingga MATLAB tidak mencoba untuk mengeksekusinya!). Kemudian, konversi angka antara C dan H pada input menjadi desimal. Nilai 1 ditambahkan sebagai array ke output sscanf sehingga dalam kasus
CH4
ketika kita mengekstrak indeks pertama dalam arrayn
kita mendapatkan 1 jika tidak ada angka antara C dan H. Kemudian hanya mencetak dengan spasi mengikuti rumus dalam pertanyaan.Ini juga harus bekerja dengan Oktaf menggunakan penerjemah online di sini .
sumber
C ++, 160 * 0,9 = 144 byte
Sedikit lagi yang saya harapkan. Baca dulu char dan buang, lalu baca int dan output hasilnya. Masalahnya dengan
n
menjadi 1. Saya tidak bisa memikirkan cara yang lebih pendek untuk menghasilkannya.Tidak disatukan
sumber
Clojure / ClojureScript, 98 * 0.9 = 88.2 byte
Menciptakan fungsi anonim. Cobalah dengan masuk ke sini dan masuk
(def f #(let...))
, lalu(f "C3H8")
.sumber
Excel, 123 * 0,9 = 110,7 byte
Jika kita dapat mengambil input CH4 sebagai C1H4, dapat dikurangi menjadi 122 * 0,9 = 109,8 byte
sumber
Jelly , 33 byte
Cobalah online!
Bonus tidak membantu di sini.
sumber