Diberikan gambar, hasilkan [lebar dalam piksel bagian vertikal penuh] 1 (jika ada). Jika tidak ada bagian vertikal, output 0
.
Input dapat diberikan sebagai file lokal atau array bersarang. Jika Anda memilih untuk mengambil input sebagai array bertingkat, piksel putih harus diwakili oleh nilai yang benar sementara piksel yang bukan putih harus diwakili oleh nilai falsey.
1. jumlah kolom yang berdekatan dan serba putih
Anda bisa berasumsi itu
tidak ada gambar yang lebih besar dari 1000 piksel persegi
tidak akan ada lebih dari satu bagian vertikal penuh per gambar
Contohnya
Input:
Output:
50
57
0
0
Berikut adalah dua contoh pertama, disorot (berwarna kuning) untuk menunjukkan bagian mereka:
code-golf
image-processing
Zach Gates
sumber
sumber
Jawaban:
Jelly, 2 byte
Coba di sini!
Jika saya menyandikan gambar seperti ini:
Ke dalam array bersarang seperti ini:
Kemudian
P
ambil produk elemen-bijaksana dari semua vektor baris, danS
jumlah semua yang ada di hasilnya, menghasilkan panjang irisan vertikal. (Ini hanya berfungsi karena dijamin hanya ada satu irisan yang berdekatan.) Dalam kasus kami, jawabannya adalah3
.sumber
ps
bekerja di MATL juga!1
s, yang berarti hasil dariP
akan[0,0,0...0]
, yangS
um0
, seperti yang diharapkan.Xps
, jika, gambar dapat menjadi satu baris (atau tanyakan OP jika ada ukuran minimum)APL, 4 byte
Try it here.
Ini adalah jawaban APL pertama saya!
Terima kasih kepada @ jimmy23013 dan @NBZ untuk menghemat byte!
sumber
(+/×/⍉)
tidak bekerja(+/×⌿)
dan itu 1 byte lebih pendek.+/×⌿
f←+/×⌿
f picture
Bash + utilitas umum, 17
Jika Anda tidak menggunakan
grep
untuk pemrosesan gambar , maka Anda salah melakukannya ;-).Ini menggunakan
rs
utilitas untuk melakukan transposisi.rs
adalah dibundel di OSX , tapi perlu menginstal di sebagian besar linux dengan sesuatu sepertisudo apt-get install rs
.Kolom input TABdipisahkan, dan baris dipisahkan baris baru:
Jika suka, Anda dapat memproses contoh input gambar ke dalam format ini dengan imagemagick dan (GNU) sed. Misalnya:
sumber
Perl,
2122 byteVersi tetap
Termasuk +2 untuk
-lp
(-l
dapat dihilangkan dan masih akan menjadi solusi yang valid, tetapi jelek tanpa baris akhir final)Berikan urutan 1 dan 0 pada 0 atau lebih baris pada STDIN. Anda dapat menambahkan spasi atau koma atau apa pun di antara digit jika Anda inginkan selama penggunaannya. Konsisten pada semua baris.
Ini berfungsi seperti yang ditunjukkan, tetapi ganti
\xce
dengan nilai byte literal untuk mendapatkan skor yang diklaimJika ada beberapa bagian vertikal, ini mengembalikan jumlah semua lebar bagian. Jika Anda ingin lebar sebuah penggunaan bagian vertikal
Versi lama
Saya awalnya salah memahami tantangan dan mengimplementasikan program yang memberi benar atau salah berdasarkan jika ada garis vertikal sama sekali. Kode dan penjelasan di sini adalah untuk versi lama ini
Kalau saja saya bisa menambahkan 1 = ~ di sebelah kiri untuk simetri yang hampir sempurna ... Saya kira yang terdekat adalah
Penjelasan
sumber
Python 2, 30 byte
Ada solusi elegan yang mengejutkan dengan menggunakan banyak fungsi bawaan favorit saya yang dirantai bersama.
Menggunakan gambar uji dari @Lynn:
sumber
Pyth, 5
Coba di sini
Ini menggunakan algoritma Lynn, tetapi saya memutuskan untuk mempostingnya hanya untuk menunjukkan cara melakukan operasi vektor golf di Pyth. Kuncinya di sini adalah untuk rantai pembantu sintaks "gula"
V
danF
sehingga lipatan diterapkan sebagai operasi vektor. Operator yang dilipat tentu saja adalah perkalian, dan kemudian hasilnya dijumlahkan untuk mendapatkan jawaban akhir.sumber
JavaScript (ES6),
544543 byteBerdasarkan jawaban @ Lynn's Jelly, meskipun sejak golf dengan menggunakan
every
atausome
bukanreduce
. Versi pertama mengkodekan hitam = 0 sedangkan yang kedua mengkode hitam = 1.Sunting: Disimpan 2 byte lebih lanjut berkat @ edc65.
sumber
map
J ,
56 byteMembawa matriks Boolean sebagai argumen.
Ini adalah jawaban J pertama saya! (salah selama 1½ tahun ...)
*/
produk berbentuk kolom+/
jumlah[:
cap (berfungsi sebagai pengganti sejak+/
tidak boleh mengambil argumen kiri)Cobalah online!
sumber
CJam, 7 byte
Cobalah online!
sumber
Mathematica 24
Mengambil array dalam bentuk berikut:
Dan dalam hal ini keluaran:
sumber
Length[Total@#~Cases~0]&
tetapi jumlah byte yang sama𝔼𝕊𝕄𝕚𝕟, 7 karakter / 9 byte
Try it here (Firefox only).
Ini adalah algoritma hebat Lynn, tetapi saya menemukannya secara mandiri. (Saya pikir ada builtin untuk suatu tempat ini, masih mencari: P)
Penjelasan
МƟï
mentranspos array input,ⓜ⨴$
mengubah setiap vektor bagian dalam menjadi produknya, dan⨭
menjumlahkan array yang dihasilkan.sumber
Japt ,
64 byteMengambil input sebagai array baris, dengan
1
menjadi putih dan0
menjadi hitam.Menguji
Penjelasan
sumber
y x_×
untuk 5. Sebenarnya,e
berfungsi juga×
, jadiy xe
untuk 4 :-)