pengantar
Ini adalah tindak lanjut dari tantangan ini di mana Anda berperan sebagai kembaran jahat orang itu. Menjadi jahat Anda tidak ingin memaksimalkan bagian Anda, tetapi bersikap tidak seadil mungkin dan Anda tidak akan membuatnya terlalu jelas, itu sebabnya Anda menemukan skema berikut:
Anda akan memberi tahu yang lain bahwa Anda ingin seadil mungkin seperti saudara Anda dan dengan demikian Anda akan membagi bilangan bulat menjadi potongan-potongan dengan panjang yang sama. Jadi untuk setiap bilangan bulat Anda akan menemukan jumlah orang yang tepat sehingga perbedaan antara bagian terbesar dan terkecil adalah maksimal.
Misalnya, jika Anda diberi bilangan bulat, 6567
Anda dapat membiarkannya apa adanya, membaginya menjadi dua bagian 65,67
atau empat 6,5,6,7
. Ini memberi Anda perbedaan maksimal berikut:
6567 -> max() = 0
65,67 -> max(|65-67|) = 2
6,5,6,7 -> max(|6-5|,|6-5|,|6-6|,|6-7|,|5-6|,|5-7|,|6-7|) = 2
Karena Anda hanya ingin menjadi jahat Anda tidak memilih 67
lebih 7
dan dengan demikian Anda akan menampilkan baik 2
atau 4
.
Lain (kasus kurang istimewa); diberi bilangan bulat 121131
Anda dapat membaginya seperti ini:
121131 -> max() = 0
121,131 -> max(|121-131|) = 10
12,11,31 -> max(|12-11|,|12-31|,|11-31|) = 20
1,2,1,1,3,1 -> max(…) = 2
Kali ini hanya ada satu solusi - yaitu 3
- karena dengan tiga orang perbedaannya maksimal.
Tantangan
Diberikan bilangan bulat menentukan cara apa pun yang memungkinkan untuk menjadi jahat secara maksimal dan melaporkan jumlah orang yang diperlukan untuk mencapai hal ini.
Aturan
- Masukan akan selalu ≥ 1
- Input dapat berupa bilangan bulat, daftar angka atau string
- Anda tidak harus menangani input yang tidak valid
testcases
Anda hanya perlu melaporkan jumlah orang yang diperlukan, partisi yang mungkin hanya untuk ilustrasi:
In -> splits (difference) -> Out
1 -> [1] (0) -> 1
10 -> [1,0] (1) -> 2
11 -> [11] or [1,1] (0) -> 1 or 2
12 -> [1,2] (1) -> 2
42 -> [4,2] (2) -> 2
101 -> [1,0,1] (1) -> 3
2222 -> [2222] or [22,22] or [2,2,2,2] (0) -> 1 or 2 or 4
6567 -> [65,67] or [6,5,6,7] (2) -> 2 or 4
123000 -> [123,000] (123) -> 2
123001 -> [123,001] (122) -> 2
121131 -> [12,11,31] (20) -> 3
294884 -> [294,884] (590) -> 2
192884729 -> [192,884,729] (692) -> 3
123456189012 -> [123456,189012] (65556) -> 2
123457117346 -> [1234,5711,7346] (6112) -> 3
sumber
Jawaban:
Jelly ,
1614 byteTautan monadik yang mengambil daftar bilangan bulat (digit) dan mengembalikan bilangan bulat.
Cobalah online! atau lihat test-suite
Bagaimana?
sumber
ŒṖ
dan./
keduanya lebih lamaPyth , 20 byte
Coba di sini!
Saya tidak lagi menggunakan partisi, karena ternyata lebih panjang !!! Saya akhirnya membelah menjadi daftar panjang yang sama dengan pembagi panjang.
sumber
05AB1E , 12 byte
Cobalah online!
05AB1E , 12 byte
Cobalah online!
Bagaimana itu bekerja
05AB1E sangat singkat untuk tantangan ini.
sumber
JavaScript (ES6),
118115 byteDisimpan 3 byte berkat @ edc65
Mengambil input sebagai string.
Uji kasus
Tampilkan cuplikan kode
sumber
Python 2 ,
138132 byteCobalah online!
sumber
Haskell , 114 byte
Cobalah online!
sumber
Perl 5 , 70 byte
Cobalah online!
sumber
Jelly , 20 byte
Cobalah online!
sumber