Usaha menyeimbangkan
Sebuah gergaji (yang diduga berasal dari bahasa Prancis 'ci-ça', yang berarti 'ini-itu') membentuk sepertiga dari trinitas suci peralatan bermain, bersama dengan luncuran dan ayunan yang serupa di mana-mana. Melihat-lihat adalah dalam keseimbangan sempurna jika, dan hanya jika, jumlah momen di setiap sisi adalah setara. Karenanya, gergaji dapat diseimbangkan dengan menambahkan jumlah berat tertentu ke samping dengan jumlah momen yang lebih rendah; mencapai ini adalah tujuan Anda untuk tantangan ini.
Tantangan
Tantangan Anda adalah mengambil penggambaran gergaji sebagai input dan menghasilkannya lagi, dengan bobot ditambahkan ke salah satu ujung gergaji untuk menyeimbangkannya.
Memasukkan
Program Anda harus, dalam format apa pun yang masuk akal, melihat-lihat ASCII seperti berikut ini:
100 100
-------------------
^
Baris pertama berisi dua angka, masing-masing mewakili bobot pada gergaji. Persis satu bobot hadir di setiap sisi, masing-masing bekerja di ujung sisi papannya. Bobot dijamin bilangan bulat, dan selalu sejajar dengan ujung papan yang sesuai. Angka-angka ini tidak akan pernah tumpang tindih dengan titik tumpu ( ^
).
Baris kedua mewakili 'papan' dari tahta. Setiap tanda hubung ( -
) menunjukkan panjang yang sama dengan tanda hubung lainnya, dengan pengecualian tunggal tanda hubung langsung di atas titik tumpu ( ^
), yang tidak memiliki panjang.
Baris ketiga mewakili titik tumpu dari gergaji. Titik tumpu ini ditandai oleh satu-satunya karakter yang bukan spasi pada baris ini, sirkumfleks ('^'). Titik tumpu dapat diposisikan di mana saja di sepanjang papan dalam input yang valid selama masih ada ruang yang cukup sehingga angka yang mewakili bobot tidak tumpang tindih dengan titik tumpu baik dalam input maupun output.
Input dijamin memiliki tiga baris, dan tidak memiliki ruang putih sebelum atau setelah karakter yang membentuk gergaji (kecuali, tentu saja, baris ketiga, yang memerlukannya).
Keluaran
Untuk output, penggambaran gergaji yang sama harus dicetak ke stdout, tetapi dengan satu (dan hanya satu) dari bobot diganti dengan bobot yang lebih besar, sehingga dapat menyeimbangkan gergaji. Input dijamin memungkinkan ini menggunakan integer saja. Oleh karena itu, bobot harus ditunjukkan tanpa titik desimal atau notasi serupa lainnya. Jika bahasa Anda tidak menggunakan stdout, Anda harus menggunakan konsensus komunitas / meta tentang hasil. Mengejar baris baru baik-baik saja tetapi perubahan lain pada format penggambaran mungkin tidak OK.
Contoh
Input Tes dan Output yang Sesuai
Input 1
12 22
--------------------
^
Output 1
12 26
--------------------
^
Input 2
42 42
-----------
^
Keluaran 2
42 42
-----------
^
Input 3
3 16
----------------
^
Keluaran 3
14 16
----------------
^
Masukan 4
1 56
-------------------
^
Keluaran 4
196 56
-------------------
^
Implementasi Referensi - Python 3
# Takes a list of strings as input
def balance_seesaw(lines):
weights = [int(w.strip()) for w in lines[0].split()]
length = len(lines[1])
pivot = lines[2].find("^")
left_length = pivot
right_length = length - 1 - pivot
left_torque = weights[0] * left_length
right_torque = weights[1] * right_length
if left_torque > right_torque:
weights[1] = left_torque // right_length
elif right_torque > left_torque:
weights[0] = right_torque // left_length
weights = [str(w) for w in weights]
string_gap = " " * (length - sum(len(w) for w in weights))
lines[0] = weights[0] + string_gap + weights[1]
print("\n".join(lines))
balance_seesaw(["1 56",
"-------------------",
" ^ "])
Aturan
Ini adalah kode-golf , jadi kode terpendek yang menang dihitung dalam byte. Periksa meta jika menghitung byte canggung dalam bahasa Anda.
Aturan standar / celah berlaku.
Masukan harus diambil dalam format yang masuk akal. Daftar format yang sesuai tidak lengkap diberikan sebagai berikut:
- String tunggal dengan garis yang dipisahkan oleh karakter baris baru
- Daftar string, setiap string mewakili garis
- Array atau Matriks karakter 2D
Tantangan Terkait
- Saldo satu set bobot pada gergaji - Diusulkan Agustus 2015 oleh samgak