(Semoga ini masih Thanksgiving untuk Anda)
Anda mendapat kalkun untuk makan malam syukur, tetapi Anda tidak tahu bagaimana cara mendistribusikannya secara merata. Masalahnya, beberapa orang makan lebih banyak daripada yang lain, jadi Anda perlu mencari solusinya
Memasukkan
Akan ada dua input. Yang pertama akan menjadi seni ascii dari berbagai orang.
o
o \|/
\|/ |
| |
/ \ / \
spesifikasi ascii-art
Setiap orang mengambil lebar 3 kolom. Setiap orang dipisahkan oleh satu kolom spasi. Bagian paling atas dari setiap orang adalah o
. Di bawah o
, diimbangi oleh 1
dan -1
di x, yang \
dan /
masing-masing. Dari baris o
ke baris kedua hingga terakhir di input adalah |
, jumlah ini per orang adalah "tinggi" mereka. Satu-satunya data yang perlu Anda ekstrak dari setiap orang adalah "tinggi" mereka.
Akan selalu ada setidaknya satu orang. Setiap orang selalu memiliki tinggi setidaknya 2. Ketinggian maksimal yang harus ditangani oleh program Anda setidaknya adalah tinggi 64.
Jika Anda ingin input yang diisi dengan spasi untuk membentuk persegi panjang, harap tentukan ini dalam jawaban Anda.
Input kedua adalah kalkun. Kalkun sebenarnya bukan kalkun, lebih dari NxM
dimensi kalkun. Jika input kedua adalah 3x2
, maka kalkun memiliki dimensi 3 * 2, dengan total area 6.
Keluaran
Outputnya mungkin berupa daftar atau alternatif terdekat bahasa Anda (mis. Array). Anda juga dapat menampilkan string, dengan nilai yang dipisahkan oleh spasi.
Nilai untuk setiap orang harus berupa output sesuai urutan inputnya.
Tantangan
Tujuan Anda adalah untuk membagi area kalkun di antara orang-orang.
Contoh skenario:
Asumsikan mereka adalah dua orang, dengan ketinggian 3
dan 6
, masing-masing. Jika ada kalkun 5x3
. Luas total kalkun yang perlu didistribusikan adalah 15
.
Sekarang bagaimana Anda mendistribusikannya di antara semua orang? Begini caranya:
the_persons_height
TurkeyForAPerson = -------------------- * turkey_area
sum_of_all_heights
Ini berarti, untuk orang pertama dengan ketinggian 3
, mereka akan mendapatkan 3/9*15
kalkun, atau 5
, orang kedua dengan ketinggian 6
mereka akan mendapatkan 6/9*15
atau 10
kalkun.
Keluaran
Keluaran semata-mata harus terdiri dari angka, dan .
, kecuali Anda memilih bonus. Dalam hal itu, itu mungkin hanya terdiri dari angka, spasi ( ), dan garis miring (
/
).
Contoh lengkap
Memasukkan:
6x5
o
|
o \|/
\|/ |
| |
| |
/ \ / \
Keluaran:
11.25 18.75
Bonus
-20% Bonus: Anda menghasilkan fraksi (harus disederhanakan), tidak masalah apakah itu fraksi campuran atau tidak tepat.
Mencetak gol
Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
Jawaban:
Pyth, 23 byte
Ini tidak berfungsi dalam versi online, karena ini digunakan
eval
untuk menentukan ukuran kalkun.Penjelasan:
sumber
LabVIEW, 67 Bytes
Saya menghitung setelah apa yang saya usulkan di meta post jadi tidak tetap tapi ya begini.
input diisi dengan spasi diharapkan.
Saya menghitung kepala dan mendapatkan ukuran orang dari garis di mana kepala berada.
sumber
Japt ,
4946 byteJapt adalah versi singkat dari Ja vaScri pt . Penerjemah
Output sebagai array. (Perhatikan bahwa Anda harus membungkus masing-masing dari dua input dalam tanda kutip.)
Bagaimana itu bekerja
sumber
MATLAB 109 * 80% = 87,2 byte
Jadi ini adalah fungsi MATLAB yang mengambil dua input, yang pertama adalah string untuk ukuran kalkun (misalnya
'8x4'
, dan yang kedua adalah string yang berisi orang-orang. Ia mengembalikan string yang berisi pecahan yang tidak tepat untuk setiap orang.Ini bisa jadi jauh lebih kecil, tetapi baris baru menjadi rumit. MATLAB dapat dengan mudah mengkonversi string dengan
;
sebagai pemisah untuk setiap baris, tetapi mencoba menggunakan baris baru terbukti sulit, dengan biaya 25 karakter:Mendapatkan ukuran orang sebenarnya cukup mudah:
Ini mengambil setiap kolom keempat mulai dari kolom kedua (yang akan menjadi semua kolom di mana tubuh orang akan berada), lalu mengonversinya menjadi array yang berisi 1 di mana ada bit tubuh dan 0 di mana tidak ada. Akhirnya jumlah kolom-bijaksana yang menghasilkan array
a
yang merupakan array 1D yang berisi ukuran setiap orang.Selanjutnya kita mengekstraksi ukuran kalkun dari string input yang ada dalam formulir
%dx%d
, yaitu satu angka lalu 'x' lalu nomor lain. Array yang dihasilkan dari dua angka dikalikan bersama untuk mendapatkan area turkey.Ini dikalikan dengan tinggi masing-masing orang, dan juga dibagi dengan tinggi total semua orang untuk mendapatkan porsi kalkun untuk setiap orang sebagai angka desimal.
Langkah terakhir untuk memenuhi syarat bonus - bit ini membuat kode 6 karakter lebih panjang, tetapi bonus itu merobohkan ~ 22 jadi sangat berharga.
rats()
adalah fungsi yang bagus yang mengubah angka desimal menjadi pecahan tak disederhanakan yang disederhanakan (akurat hingga 13 dp). Memberinya array angka desimal (yaitu jumlah untuk setiap orang) akan mengembalikan string tunggal yang berisi pecahan untuk setiap orang pada gilirannya dipisahkan oleh spasi.Memang output
rats()
menambahkan lebih dari satu ruang, tetapi pertanyaannya tidak mengatakan itu tidak bisa - hanya mengatakan string harus berisi digit saja, '' dan '/'.Ini adalah output dari contoh (tanda kutip yang ditambahkan oleh saya untuk mencegah spasi dihapus, bukan dalam output aktual):
Contoh penggunaan:
keluaran:
Ini juga berfungsi (meskipun dengan peringatan) pada penerjemah Oktaf online . Anda bisa mencobanya di sini . Tautan ke ruang kerja dengan
f
fungsi yang sudah ditentukan dalam file. Jadi Anda harus bisa memasukkan contoh penggunaan di atas saat diminta.sumber
Pyth - 25 byte
Pasti bisa bermain golf beberapa byte darinya. Pendekatan yang cukup mudah.
Cobalah online di sini .
sumber
Haskell 119 byte
Contoh penggunaan:
"6x5" # " o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\\n"
->[11.25,18.75]
.sumber
JavaScript (ES6), 131 byte
Mengembalikan array porsi.
Penjelasan
Uji
Tampilkan cuplikan kode
sumber
Python 99 byte
Memasukkan:
' o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\','6*5'
Keluaran:
['11.25', '18.75']
sumber