iBug baru-baru ini mendapatkan batang panjang yang terbuat dari bahan komposit namun bernilai. Bilah itu sangat panjang sehingga iBug tidak bisa dengan mudah menjualnya untuk kredit, jadi dia ingin memotongnya. Bilah terbuat dari bahan yang rapuh dan ajaib sehingga, jika bagiannya pecah, semua bagian batang yang terbuat dari bahan yang sama akan pecah juga, sehingga sulit untuk memotong dengan sewenang-wenang.
iBug ingin memotong bilah menjadi potongan-potongan sebanyak mungkin. Dia juga menyukai program yang sangat singkat dan golf code, jadi dia membuat analisis abstrak dari masalahnya.
Bilah ajaib iBug direpresentasikan sebagai string (atau array atau urutan karakter jika Anda suka), seperti ini:
aaabbccccccbbbaaacccccaabbbaaaaa
Setiap huruf dalam string mewakili satu bahan ajaib. Bilah selalu cocok dengan RegEx ^\w*$
, jadi mungkin ada hingga 63 materi di bilah. "Bagian" adalah urutan karakter yang berurutan yang tidak dipisahkan oleh spasi.
iBug ingin Anda menulis sebuah program yang menghitung bagian maksimum yang bisa ia dapatkan, jika nol atau lebih set karakter sepenuhnya dihapus (diganti dengan spasi), dan beri tahu iBug nomor itu.
Contoh 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Deskripsi: Jika b
dihapus sepenuhnya dari bilah, iBug dapat memperoleh 4 bagian. Dia juga bisa mendapatkan 4 bagian dengan melepas b
dan c
, seperti yang ditunjukkan di bawah ini
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
Dan itulah jumlah maksimum bagian yang bisa didapatkan iBug dari bilah ini
Contoh 2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Deskripsi: Dengan hanya menghapus garis bawah, iBug bisa mendapatkan 6 bagian dari bilah dan itu maksimum.
Contoh 3:
In: __________
Out: 1
Deskripsi: Apa? Kamu ingin memotong ini? Ini hanya mungkin untuk mendapatkan 1 bagian jika Anda tidak memotongnya sama sekali.
Contoh 4:
In:
Out: 0
Deskripsi: Tidak ada yang dipotong, jadi nol.
Ada juga beberapa aturan yang iBug ingin program patuhi:
iBug tidak suka celah standar dan mereka dilarang.
Selama ini bekerja, tidak perlu program yang lengkap. Fungsi yang mengambil input dari parameter dan memberikan output melalui nilai balik juga diterima.
Input dan output yang fleksibel diperbolehkan. Program atau fungsi Anda dapat mengambil string, atau array karakter, atau apa pun yang Anda anggap paling mudah untuk ditangani. Anda dapat memberikan output dengan mencetak nomor atau mengembalikannya.
Sampel uji kasus (tetapi tidak terbatas pada ini)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Karena ini adalah kode-golf , program terpendek (dalam byte) di setiap bahasa menang!
Tambahan
iBug sangat menghargai jika Anda dapat memberikan penjelasan untuk program Anda, meskipun itu tidak mempengaruhi skor Anda (masih panjang dalam byte).
123456789
hasil 5? Dan bagaimana caraaaabcccdedaaabefda
menghasilkan 6? Saya mendapatkan 2 dan 4 masing-masing untuk dua kasus uji ini.2468
, untuk yang kedua, hapusbd
.2,4,6,8
dari yang pertama danb,d,f
dari yang kedua.Jawaban:
Haskell ,
73 7170 byteTerima kasih kepada Laikoni karena telah menghemat 1 byte!
Cobalah online!
sumber
maximum$(length$words x):
dapat disingkat menjadimaximum$length(words x):
.JavaScript (ES6),
10990 byteAgak lambat pada
123456789
test case. Jawaban 109 byte sebelumnya tidak terbatas pada!/\s/
:sumber
Python 2 ,
1119372 byte-21 byte, terima kasih Kirill L.
Cobalah online!
sumber
Jelly ,
1311 byteTerlalu banyak instruksi 2-byte-2 berkat Zgarb (gunakan quick produk luar
þ
>. <)Tautan monadik yang menerima daftar karakter dan mengembalikan bilangan bulat non-negatif.
Cobalah online!
Bagaimana?
Untuk setiap urutan input (set yang dapat kita hapus, ditambah ekuivalen redundan) mendapatkan daftar keberadaan untuk mengidentifikasi yang dihapus kemudian secara efektif menemukan berapa banyak sisa nol yang tersisa dan menghasilkan maksimum. Bagian terakhir bekerja dengan cara yang agak aneh karena saya menemukan golfier daripada alternatif yang lebih naif - ia menemukan berjalan sebagai
[element, count]
pasangan, meniadakan untuk mengidentifikasi nol sebagai yang, jumlah menemukan maksimum kemudian mengambil kepala (jumlah elemen daripada hitungan) ).sumber
€Đ€
bisaþ
.Ruby ,
98 89 75 6461 byteCobalah online!
lebih kecil dan lebih lambat dari sebelumnya!
Pada dasarnya port jawaban Javascript @ Neil
Tidak disatukan dan dijelaskan
Cobalah online!
sumber
Sekam ,
1211 byteCobalah online! Ini bekerja dengan kekerasan dan cukup lambat. Tambahkan
u
ke ujung kanan untuk membuatnya berjalan lebih cepat, tanpa mengubah semantik.Penjelasan
sumber
Perl 5 , (versi yang lebih lama)
-p -I.
,,524943 bytePenghitungan gaya lama:
+3
untuk-p
:46
byte (karena harus dalam suatu program, itu tidak dapat dijalankan menggunakan-e
)barsplit.pl
:Jalankan dengan string di STDIN:
Cobalah online!
The
-I.
pilihan yang ada untuk membuat juga ini bekerja pada perls baru-baru ini di mana secara default.
tidak lebih dalam@INC
. Dalam versi perl yang lebih lama opsi itu tidak diperlukan. Saya menguji bahwa pada mesin yang lebih tua yang masih memilikiperl 5.20
, jadi skor didasarkan pada itu (kalau tidak saya juga harus menghitung.
argumen untuk-I
)Versi cepat (
49
byte):sumber
Bahasa Wolfram (Mathematica) , 77 byte
Cobalah online!
sumber