Вызов
Учитывая изображение неба, вы должны вывести облачность в октах. Предоставленное изображение будет файлом изображения (тип зависит от вас), а вывод должен быть в состоянии STDOUT.
окты
В метеорологии окта - это единица измерения, используемая для описания количества облачного покрова в любом данном месте, например на метеостанции. Небесные условия оцениваются исходя из того, сколько восьмых неба покрыто облаками, в пределах от 0 окт (полностью чистое небо) до 8 окт (полностью пасмурно).
Небо всегда будет изображением примерно с полудня (таким образом, голубое небо, а не красное / ночное небо).
Цвет облака всегда будет цветом, который соответствует следующей схеме:
#ABCDEF
Где AB >= C0
, CD >= C0
и EF >= C0
.
Или в RGB:
(A, B, C)
Где A >= 192
, B >= 192
и C >= 192
.
Вот процентные покрытия, связанные с октами:
0% - 0 oktas
12.5% - 1 okta
25% - 2 oktas
37.5% - 3 oktas
50% - 4 oktas
62.5% - 5 oktas
75% - 6 oktas
87.5% - 7 oktas
100% - 8 oktas
Проценты - это процент изображения, которое является облачным.
Если у вас процентное облако вашего изображения не кратно 12,5, вам следует округлить до ближайшего.
Выход
Выход должен быть просто номером Okta (вы не должны произносить единицу измерения).
Примеры
1 окта (18.030743615677714% облаков)
0 окт (0.0% облачность)
3 окты (42.66319444444445% облаков)
1 окта (облако 12.000401814778645%)
Код Python, используемый для вычисления чисел
выигрыш
Самый короткий код в байтах побеждает.
источник
Ответы:
Python 2 ,
11411098 байт-4 байта благодаря TheLethalCoder
-12 байтов благодаря Рууду
Попробуйте онлайн!
источник
191
вместо?x&y&z&192>191
, но обновленная версия так же коротка.import PIL.Image as P
сfrom PIL.Image import*
и сохранить 1 байт при измененииi=P.open
вi=open
? Я не знаю, может ли это вызвать проблемы, поскольку open - это уже определенная функция, но я не могу проверить, так как у меня нет возможности установить модуль.MATL ,
1817 байтПример запускается с четырьмя предоставленными изображениями (извините за качество предварительного просмотра; нажмите для получения полного разрешения):
Или удалите последние четыре символа, чтобы увидеть результаты без округления:
объяснение
источник
Java (OpenJDK 8) , 204 байта
Попробуйте онлайн! Я всегда забываю, что TIO выводит STDERR на вкладку отладки. Может быть, он мог бы выделить красным цветом в случае ошибки?
источник
x
илиy
. Вы назначеныy=0
дважды, поэтому вы можете удалить первое назначение. КлассColor
должен быть либо полностью квалифицированным (java.awt.Color
), либо вы должны включить импорт в число байтов. И ваш код не выполняется для 4-го теста (возвращает 0 вместо 1).&&
в&
и,y=0
в,y
: Попробуйте его в Интернете.C #,
150146 байтСохранено 4 байта благодаря @Ian H.
Полная / Отформатированная версия:
источник
for(h=0 h<b.Height;++t)
Я думаю, что вы пропустили/0.125
с*8
в конце , чтобы сэкономить несколько байт.C #, 313 байтов
Очевидно, дольше, чем мой другой ответ, но этот использует
LockBits
иunsafe
код для прямого доступа к изображению в памяти; как таковой он невероятно быстр. Я мог бы, вероятно, удалить вызов,UnlockBits
но это более правильно там.Полная / Отформатированная версия:
источник
PowerShell , 200 байт
Получает ввод
$args[0]
как полный путь к файлу изображения, создаетNew
Bitmap
объект в$a
. Это просто имя внутреннего объекта; поддерживает JPG, PNG и т. д.Затем мы делаем двойной цикл по изображению,
.height
а затем.width
по изображению, касаясь каждогоpixel
. Мы извлекаемR,G,B
значения и затем выбираем те из них, которые являются-g
reaterthanore
qual,192
и проверяем , чтоcount
это3
(то есть, все они являются белыми). Этот логический результат добавляется в наш аккумулятор$i
.Затем мы делим, чтобы получить процент, умножаем его
8
на количество окт, а затем[int]
получаем целочисленный результат. (Обратите внимание, что при этом выполняется округление Banker's - если это не разрешено, потребуется еще несколько байтов для изменения метода округления.)источник
постоянный ток, 74 байта
Ввод принимается в виде файла p3 ppm со всеми пробелами в виде символов новой строки. Выход на STDOUT.
Попробуйте онлайн!
источник
JavaScript,
8377 байт-6 байт по ETHproductions
входные
Фото № 1
Фото № 2
Фото № 3
Фото № 4
демонстрация
Показать фрагмент кода
источник
a=>(b,c,d)
) вместо выполненияa=>{b;c;return d}
илиa=>eval("b;c;d")
. Это работает, если у вас нет какого-либо цикла, и в этом случае вам, вероятно, лучше всего использовать этотeval
метод.C (POSIX), 103 байта
Предполагается ввод в виде файла BMP на стандартный ввод.
источник
Машинный код x86, 34 байта
Эти байты кода определяют функцию, которая принимает битовый массив и возвращает целочисленное значение, указывающее его окты. Как и в C , массивы (например, растровые изображения) представлены в виде указателя на первый элемент и размера / длины. Таким образом, эта функция принимает два параметра: общее количество пикселей в растровом изображении (строки × столбцы) и указатель на само растровое изображение.
В этом коде используется пользовательское соглашение о вызовах на основе регистров, в котором указатель растрового изображения передается в
ESI
регистр, а размер растрового изображения передается вECX
регистр. Результат (окты), как обычно, возвращается вEAX
.Как уже говорилось выше, входные данные принимаются как растровые изображения. В частности, используется 32-битный формат в формате с прямым порядком байтов, но альфа-канал (байт высшего порядка) игнорируется. Это упрощает многие вещи, позволяя нам просто перебирать каждый пиксель и проверять его 32-битное значение цвета RGB. Умная оптимизация также используется здесь. Вместо того, чтобы выделять каждый компонент цвета и проверять, равен ли он> = 192, мы просто маскируем все 32-битное значение на 0xC0C0C0 и проверяем, равен ли результат> = 0xC0C0C0. Это будет иметь значение true для всех «облачных» цветов и false для всех «небесных» (не облачных) цветов. Ну, я думал , что это было умно! :-) Это, безусловно, экономит большое количество байтов.
Поэтому, чтобы протестировать этот код, вам нужно будет преобразовать входные изображения в растровые изображения 32 бит / бит. Вы не можете использовать Windows Paint для этого, потому что он поддерживает максимум 24 бит на пиксель. Тем не менее, есть ряд других программных решений, которые могут сделать это, например, Adobe Photoshop. Я использовал этот бесплатный инструмент , который конвертирует PNG в 32-битный BMP в Windows, что означает, что вам нужно конвертировать только из JPEG в PNG (что может сделать Paint).
Другие предположения, которые я высказываю, в высшей степени обоснованы:
DF
) ясен, поэтому мы будем корректно выполнять итерацию по растровому изображению, используяLODSD
инструкцию. Это то же предположение, которое принято большинством соглашений о вызовах x86, поэтому оно выглядит справедливым. Если вам это не нравится, добавьте 1 байт в счетчик дляCLD
инструкции.Неуправляемая сборка мнемоники:
Конечно, вы не сделали все это так, и все еще задаетесь вопросом, как работает код? :-)
Ну, это довольно просто. Мы просто перебираем растровое изображение по одному 32-битному значению за раз, проверяя, является ли значение пиксельного RGB «облачным» или «не облачным». Если облачно, мы увеличиваем наш предварительно обнуленный счетчик. В конце мы вычисляем: облачные пиксели ⁄ общее количество пикселей × 8
(что эквивалентно: облачным пикселям ⁄ общее количество пикселей ÷ 0,125).
Я не могу включить ссылку TIO для этого из-за необходимости ввода изображений. Однако я могу предоставить вам жгут, который я использовал для проверки этого в Windows:
Будьте осторожны с этим, хотя! Как определено выше,
ComputeOktas
используется пользовательское соглашение о вызовах, которое компилятор C не будет соблюдать. Вам необходимо добавить код вверху процедуры на языке ассемблера, чтобы загрузить значения из стека в ожидаемые регистры, например :источник
JavaScript (ES6), 218 байт
Принимает
Image
объект в качестве входных данных, который может быть создан из<image>
элемента.Проверьте это здесь на CodePen!
альтернатива
Если входные данные могут быть приняты как плоский массив значений RGBA с размерами: 82 байта
Этот формат ввода очень похож на то, что предлагает этот ответ на мета .
источник
Mathematica 89 байт
Далее бинаризируется изображение и определяется доля облаков, то есть белые пиксели. Затем он определяет, сколько раз .125 вписывается в результат. Возвращает пол этого значения.
источник