Для данного изображения выведите значение [ширина в пикселях полного вертикального сечения] 1 (если оно существует). Если вертикального сечения не существует, выведите 0
.
Входные данные могут быть предоставлены в виде локального файла или вложенного массива. Если вы решите принимать ввод как вложенный массив, белые пиксели должны быть представлены истинным значением, тогда как небелые пиксели должны быть представлены значением фальси.
1. количество смежных, полностью белых столбцов
Вы можете предположить, что
изображение не будет больше 1000 квадратных пикселей
не будет более одного полного вертикального сечения на изображение
Примеры
Входы:
Выходы:
50
57
0
0
Вот первые два примера, выделенные (желтым цветом), чтобы показать их разделы:
code-golf
image-processing
Зак Гейтс
источник
источник
Ответы:
Желе, 2 байта
Попробуй это здесь!
Если я закодирую изображение так:
Во вложенный массив как это:
Затем
P
берется поэлементное произведение всех векторов строк иS
суммирует все из них в результате, получая длину вертикального среза. (Это работает только потому, что гарантированно будет только один непрерывный фрагмент.) В нашем случае ответ таков3
.источник
ps
работает и в MATL!1
с, то есть результатP
будет[0,0,0...0]
, из которыхS
ит0
, как и ожидалось.Xps
, если изображение может быть одной строкой (или спросить у ОП, есть ли минимальный размер)APL, 4 байта
Try it here.
Это мой первый ответ APL!
Спасибо @ jimmy23013 и @NBZ за сохранение байтов!
источник
(+/×/⍉)
не работает(+/×⌿)
и это на 1 байт короче.+/×⌿
f←+/×⌿
f picture
Баш + коммунальные услуги, 17
Если вы не используете
grep
для обработки изображений , то вы делаете это неправильно ;-).Это использует
rs
утилиту для транспонирования.rs
входит в комплект OSX , но в большинстве linux потребуется установить что-то вродеsudo apt-get install rs
.Входные столбцы TABразделены, а строки разделены новой строкой:
Если хотите, вы можете предварительно обработать входные изображения в этом формате с помощью imagemagick и (GNU) sed. Например:
источник
Perl,
2122 байтаФиксированная версия
Включает в себя +2 для
-lp
(-l
может быть опущено и все равно будет правильным решением, но без последнего перевода строки безобразно)Дайте последовательности из 1 и 0 на 0 или более строк в STDIN. Вы можете добавить пробелы или запятые или что-либо другое между цифрами, если хотите, если использование является согласованным во всех строках.
Это работает, как показано, но замените
\xce
литералом значение байта, чтобы получить заявленную оценкуЕсли есть несколько вертикальных секций, это возвращает сумму всех ширин секций. Если вы хотите ширину в использовании вертикального сечения
Старая версия
Первоначально я неправильно понял задачу и реализовал программу, которая выдает истину или ложь, основываясь на том, существует ли вообще вертикальная линия. Код и объяснение здесь для этой старой версии
Если бы я только мог добавить 1 = ~ слева для почти идеальной симметрии ... Я полагаю, ближайший
объяснение
источник
Python 2, 30 байт
Существует удивительно элегантное решение, использующее многие из моих любимых встроенных функций, соединенных вместе.
Используя тестовое изображение от @Lynn:
источник
Пиф, 5
Попробуй здесь
При этом используется алгоритм Линн, но я решил опубликовать его, чтобы показать, как управлять векторными операциями в Pyth. Хитрость заключается в том, чтобы связать «сахарные» помощники синтаксиса
V
и сделатьF
так, чтобы складка применялась как векторная операция. Свернутый оператор - это, конечно, умножение, а затем результат суммируется, чтобы получить окончательный ответ.источник
JavaScript (ES6),
544543 байтаОсновано на ответе @ Lynn's Jelly, хотя, поскольку игра в гольф с использованием
every
илиsome
вместоreduce
. Первая версия кодирует черный = 0, а вторая кодирует черный = 1.Редактировать: Сохранено еще 2 байта благодаря @ edc65.
источник
map
J ,
56 байтПринимает булеву матрицу в качестве аргумента.
Это мой первый ответ J! (был неправ в течение 1½ лет ...)
*/
столбчатое произведение+/
сумма[:
cap (служит заполнителем, поскольку+/
не должен принимать левый аргумент)Попробуйте онлайн!
источник
CJam, 7 байтов
Попробуйте онлайн!
источник
Mathematica 24
Принимает массив в следующей форме:
И в этом случае выводит:
источник
Length[Total@#~Cases~0]&
тем же количеством байтов𝔼𝕊𝕄𝕚𝕟, 7 символов / 9 байтов
Try it here (Firefox only).
Это отличный алгоритм @ Линн, но я нашел его независимо. (Я думал, что для этого где-то есть встроенная функция, все еще смотрящая: P)
объяснение
МƟï
транспонирует входной массив,ⓜ⨴$
превращает каждый внутренний вектор в его произведение и⨭
суммирует полученный массив.источник
Japt ,
64 байтаВводит в виде массива строк,
1
будучи белым и0
черным.Попробуй это
объяснение
источник
y x_×
для 5. На самом деле,e
работает так же, как×
иy xe
для 4 :-)