Ada dua potong kayu. Keduanya terdiri dari tubuh lurus dan beberapa blok tambahan di bawah tubuh. Contoh karya dengan blok tambahan di posisi (diindeks 0) 0,4,7,9,10:
XXXXXXXXXXX
X X X XX
Potongan dapat direpresentasikan sebagai 01
urutan biner dengan i
karakter th menunjukkan jika ada blok di i
posisi th. Contoh atas dapat direpresentasikan sebagai 10001001011
.
Kita dapat mengumpulkan dua potong dengan membalik secara vertikal potongan kedua (dan mungkin membaliknya juga secara horizontal). Setelah flip, kita dapat menemukan keselarasan di mana kedua potongan dapat disatukan untuk memiliki ketinggian 3.
Two example pieces:
XXXXXXXXXXX XXXXXXXX
X X X XX XXX
Second piece flipped vertically and horizontally:
XXXXXXXXXXX
X X X XX
XXX
XXXXXXXX
Pieces put together:
XXXXXXXXXXX
XXXXX X XX
XXXXXXXX
Contoh menghasilkan total lebar 12 blok.
Anda harus menulis sebuah program atau fungsi yang menerima dua string sebagai input yang mewakili dua bagian dan menghasilkan bilangan bulat dengan lebar minimal yang dapat dicapai dengan ketinggian 3.
Memasukkan
- Dua string terdiri dari karakter
0
dan1
. - Kedua string mengandung setidaknya satu karakter.
- Anda dapat memilih untuk menerima dua string sebagai satu bergabung dengan satu ruang.
Keluaran
- Integer positif tunggal, total lebar minimal dapat dicapai.
Contohnya
0 0 => 1
1 0 => 1
1 1 => 2
11 111 => 5
010 0110 => 5
0010 111 => 5
00010 11011 => 6
01010 10101 => 5
1001 100001 => 6
1110001100001 1100100101 => 14
001101010000101 100010110000 => 16
0010110111100 001011010101001000000 => 21
0010110111100 001011010101001001100 => 28
100010100100111101 11100101100010100100000001 => 27
0010 10111 => 5
0100 10111 => 5
0010 11101 => 5
0100 11101 => 5
10111 0010 => 5
10111 0100 => 5
11101 0010 => 5
11101 0100 => 5
Ini adalah kode golf sehingga entri terpendek menang.
Jawaban:
Pyth,
3735343231 byteMembagi input baris baru.
Demonstrasi , Test Harness .
Penjelasan:
Pada level tinggi, untuk setiap kombinasi string normal dan terbalik, kami menggeser string kedua ke kiri dengan sejumlah posisi tertentu, dan memeriksa tumpang tindih dengan string pertama. Ini diulangi sampai jumlah shift tanpa tumpang tindih ditemukan. Jumlah shift itu ditambahkan ke panjang string pertama, dan hasilnya dibandingkan dengan panjang string kedua. Nilai yang lebih tinggi dicetak.
sumber
Pip ,
727048 byteMengambil dua string sebagai argumen baris perintah. Diformat, dengan komentar:
Kami hanya menghitung tumpang tindih di mana bagian bawah menonjol ke kiri, jadi kami harus mencobanya dengan bagian atas dan bawah terbalik. Setiap kali melalui loop dalam, jika tidak ada 2 dalam jumlah, itu cocok; kami kemudian menempelkan nol lagi di ujung potongan bawah dan coba lagi.
Untuk menemukan lebar total, kami membagi elemen
p
menjadi daftar karakter dan jumlah. Operasi item-bijaksana pada daftar panjang tidak merata mempertahankan panjang yang lebih panjang, jadi panjang jumlah ini adalah persis apa yang kita butuhkan. (Membagi diperlukan karena menjumlahkan sebagai angka akan menghilangkan nol terkemuka:,$+[0101 10] = 111
tapi$+^[0101 10] = [0 1 1 1]
.)sumber
Ruby 127
130Ini ternyata sangat lama ... :(
Tes: http://ideone.com/te8XWk
Ruby yang Dapat Dibaca:
sumber
[[m,n],[m,n.reverse],[n,m],[n,m.reverse]]
mungkin salah. (Saya tidak yakin tetapi saya membuat kesalahan serupa.)[n.reverse,m]
alih-alih[n,m.reverse]
tetapi saya tidak tahu Ruby.'0010110111100', '001011010101001001100'
mengatakan Diharapkan: 28, Aktual: 30 . Semua tes lainnya lulus. Jadi Anda telah melakukan pekerjaan yang baik untuk menguji kasus sudut. :)JavaScript ( ES6 ) 160
Tidak bisa membuat lebih pendek ...
sumber