Di sini, di California, kita sedang mengalami kekeringan sehingga kita perlu tahu berapa banyak air yang tersisa sehingga kita dapat menghemat air sebanyak mungkin.
Karena persediaan air terbatas, kode Anda harus sesingkat mungkin.
Contohnya
| |
| |
|~~~|
|___|
Output: 0.5
|~~~~~|
| |
| |
|_____|
Output: 1
| |
|__|
Output: 0 (or bonus)
Spesifikasi
Input hanya akan terdiri dari semua: |_ ~
dan baris baru. Semua di atas ~
dianggap udara; _
, ruang di bawah ~
, dan ~
itu sendiri dianggap air. Persentase air yang tersisa adalah komputer water / (air + water)
. Output Anda harus akurat hingga 4 tempat desimal (kecuali Anda memilih bonus persen) Input akan selalu berbentuk persegi panjang. Hanya ~
akan berada di satu baris, jika ada. Input secara opsional dapat juga memiliki umpan garis tambahan jika Anda mau.
Bonus
Jika Anda memilih kedua bonus, bonus -15% diterapkan sebelum bonus -35
-35 byte Bonus: Jika kode Anda mencetak " kambing kekeringan ini keluar dari tangan", bukannya 0 ketika Output adalah 0
-15% Bonus: Jika Anda menghasilkan persen.
Untuk melakukan ini, Anda akan menggeser tempat desimal dua tempat ke kiri, memotong nol di depan, dan menambahkan a %
ke ujung. Nol trailing (maks 2) dibolehkan selama tidak mempengaruhi nilainya. 0.5
-> salah satu dari:50.00% 50% 50.0%
|~~~|
(tidak ada garis bawah) input yang valid?Jawaban:
Pyth -
17464552 * .85 - 35 = 9,2 byteMemfilter input (Dengan
#
meta-op filter baru !) Untuk sebuah baris dengan~
di dalamnya, kemudian mengindeks itu ke input, dan kemudian membaginya dengan panjang input. Jika tidak ada dengan~
, itu kesalahan, dan memicu klausa kecuali.x
dan mencetak string.Cobalah online di sini .
sumber
Python 3, 37 byte
Tidak ada bonus. Mengambil string input dengan baris baru, termasuk baris tambahan.
Mari kita lihat mengapa formula ini bekerja. Fraksi air adalah pelengkap fraksi udara, yang akan kita peroleh.
Penomoran baris
0, 1, 2, ...
, kita milikiHal yang sama berlaku jika keduanya dikalikan dengan lebar setiap baris, menghitung baris baru, yang menyederhanakan ekspresi dalam jumlah karakter.
Baris air mulai ditemukan dengan mencari string masukan
x
untuk|~
, dan jumlah karakter hanya panjang.Akhirnya, agar input tanpa air berfungsi, kami menambahkan baris air fiksi mulai
|~
dari akhir sebelum pencarian, yang membuatnya terlihat seperti level air 0.Bonus tampaknya tidak sepadan. Yang terbaik yang saya dapatkan pada string adalah 73-35 = 38:
sumber
CJam,
19171658 * 0,85 - 35 = 14,3 byteCobalah online
Versi ini mendapatkan kedua bonus. Input harus memiliki garis belakang tambahan agar solusi ini berfungsi.
Terima kasih kepada @Martin Büttner karena telah menghemat 2 byte.
Penjelasan:
sumber
JavaScript (ES6), 45 (94 -15% -35)
Sebagai fungsi anonim. Menggunakan string template, ada baris baru yang signifikan dan termasuk dalam jumlah byte
Edit 1 byte disimpan thx @ user81655
Kurang golf
Cuplikan tes
sumber
p=~i
denganp=i
,&&-p
dengan&&p-q
dan1+~p
untuk1+p
menyimpan 1 byte.Par , 57 * 85% - 35 = 13,45 byte
Penjelasan
sumber
Perl, 70 - 15% - 35 = 24,5 byte
termasuk +1 untuk
-p
Dengan komentar:
Versi 26 + 1 byte, tanpa bonus: 27
Versi 34 + 1 byte, dengan bonus 15%: 29,75
Versi 61 + 1 byte, dengan -35 bonus: 27
Versi 69 + 1 byte, keduanya bonus: 24,50
sumber
Javascript, 59.3
Saya berharap tempat desimal tambahan baik-baik saja. Diasumsikan tidak ada trailing newline.
sumber
Haskell, 56 byte
Contoh penggunaan:
f "| |\n|~~|\n| |\n|__|"
->0.75
.l
adalah fungsi panjang kustom, yang diperlukan, karena buildlength
mengembalikan nilai integer, tetapi kita perlu nilai floating point untuk divisi (adagenericLength
yang juga menyediakan fitur ini, tetapi lebih lama, apalagi yang diperlukanimport Data.List
).f
membagi inputi
menjadi garis (->s
) dan kemudian menjadi pasangan di mana elemen pertama adalah daftar dengan semua garis hingga (dan tidak termasuk) yang pertama dengan~
di dalamnya. Elemen kedua adalah daftar dengan sisa baris. Hasilnya adalah panjang elemen kedua dibagi dengan panjangs
.Bonus tidak membuahkan hasil.
sumber
Python adalah kata kerja!
Python: 98,45 byte
(157 * 0.85) - 35 = 98.45 byte
Versi ini membaca dari stdin, dan mengumpulkan kedua bonus:
sumber
import sys;r=[x[1]for x in sys.stdin];print(1-r.index('~')/len(r))
print
seperti fungsi jadi saya menganggap Anda menggunakan Python 3.Awk, 72 karakter - 15% - 35 = 26.2
Contoh dijalankan:
(Awal
1;
hanya digunakan dalam menjalankan sampel ini untuk menampilkan tangki "dibaca manusia".)sumber
PHP, 92 karakter - 15% - 35 = 43.2
(88 karakter dalam dua blok kode + 4 opsi opsi baris perintah.)
Asumsi
error_reporting
diatur ke default.(Bukan masalah besar, hanya ingin menggunakan
-R
dan-E
sekali. Sekarang tinggal-B
pergi.)Contoh dijalankan:
(Awal
echo"$argn\n";
hanya digunakan dalam menjalankan sampel ini untuk menampilkan tangki "dibaca manusia".)sumber
QBIC - 116 - 15% = 98,6 byte
Saya telah menciptakan QBIC untuk membuat QBasic lebih kompetitif, tetapi masih perlu beberapa perbaikan. Sampai sekarang, tidak ada jalan pintas untuk menjebak kesalahan,
THEN
(yang merupakan pengawasan yang cukup besar di pihak saya) daninput$
. Mereka akan ditambahkan segera.Saya tidak bisa mendapatkan bonus 0, terlalu mahal ... Saya berhasil mencetak persentase.
Sampel dalam / output:
Program membaca input secara interaktif. Ketika mendeteksi dasar danau (
_
) ia mencetak persentase dan berhenti. Diuji untuk kontainer penuh dan yang kosong juga.Sunting: Untuk menunjukkan bagaimana QBIC telah diperluas selama setahun terakhir, inilah program yang sama yang ditulis untuk penerjemah saat ini:
87 byte, persentase pencetakan, adalah skor 74.
sumber