... но не надо быть строгим.
Учитывая непустой массив строго положительных целых чисел, определите, является ли это:
- Монотонность строго уменьшается . Это означает, что каждая запись строго меньше, чем предыдущая.
- Монотонно не увеличивается, но не строго уменьшается . Это означает, что каждая запись меньше или равна предыдущей, и массив не попадает в вышеуказанную категорию.
- Ничего из вышеперечисленного .
Обратите внимание на следующие угловые случаи:
- Массив с одним числом является монотонно строго убывающим (в вакууме).
- Массив с таким же повторяющимся номером монотонно не увеличивается, но не строго уменьшается.
правила
Вы можете предоставить программу или функцию
Ввод может быть сделан в любом разумном формате: массив, список, строка с числами, разделенными пробелами, ...
Вы можете выбрать любые три последовательных выхода для трех категорий соответственно. Например, выводы могут быть числами 0
, 1
, 2
; или строки 1 1
, 1 0
, пустая строка.
Самый короткий код в байтах выигрывает
Контрольные примеры
Монотонность строго уменьшается:
7 5 4 3 1
42 41
5
Монотонно не увеличивается, но не уменьшается строго:
27 19 19 10 3
6 4 2 2 2
9 9 9 9
Ни один из вышеперечисленных:
1 2 3 2
10 9 8 7 12
4 6 4 4 2
Ответы:
Желе ,
10 95 байт-Метод, найденный DrMcMoylex, иди дай кредит!
TryItOnline! или запустите все тесты
Возвращает:
-1
= монотонно строго убывает;0
= монотонно не увеличивается;1
= другие.Как?
источник
M
частью любой 8- битной карты символов? Вы не можете сказать, что это 5 байтов, потому что это не так. CP1252 не имеет его, например.byte
в заголовке этого поста.Perl 6 , 17 байт
2
1
0
Expanded:
источник
>
был переключен сafter
и>=
с!before
.say {[after](@_)+[!before] @_}(<d c b a>) #=> 2
MATL ,
10, 7 байтовПопробуйте онлайн!или проверьте все контрольные примеры!
3 байта сохранено, благодаря @LuisMendo!
Выходы
Строго убывает: -1
Не увеличивается: 0
Другое: 1
Объяснение:
источник
0
вместо того, чтобы добавить последний плюс1
? Нечто подобное0hdX>ZS
0hdX>0/
- Вопрос к вам и @LuisMendo: возможно ли использовать тот факт, что сортировка только 1 символ (в противоположностьX>
), каким-то образом неявно используя последнее значение?S
, но я не нашел способа сделать его короче ...Mathematica, 22 байта
Безымянная функция, принимая список чисел в качестве входных данных. Возвращает
-1
если список строго уменьшается,0
если он не увеличивается, но не уменьшается строго, и1
если это не так.Довольно простой алгоритм: возьмите различия последовательных пар, возьмите самую большую и возьмите знак самой большой.
(Я чувствую, что должен существовать какой-то язык, в котором этот алгоритм имеет 3 байта ....)
Относительно массива с одной записью:
Differences
выдает пустой список;Max
пустого списка дает-∞
(!); иSign[-∞]
оценивает-1
(!!). Так что на самом деле это работает в этом угловом случае. Должен любить Mathematica иногда. (Действительно, функция также правильно маркирует пустой список как строго убывающий.)источник
Haskell,
403837 байтВозвращает
GT
за монотонность строго уменьшаетсяEQ
для монотонных не увеличиваетсяLT
ещеcompare
сравнивает два числа и возвращаетGT
(EQ
,LT
), если первое число больше (равно, меньше) второго числа.zipWith compare<*>tail
сравнивает соседние элементы.foldl min GT
уменьшает список результатов сравнения с функцией мин , начиная с GT (примечание:LT
<EQ
<GT
).Изменить: @xnor найдено
23 байта. Благодарность!источник
GT
, потому что нам нужен минимум списка (у меня был максимум, который был неправильным, и реликт из ранней версии, где я использовал=<<
вместо<*>
).foldl min GT
?Common Lisp,
4340 байтЭто принимает входные данные в виде списка Lisp, и возвращает
(T T)
,(NIL T)
а(NIL NIL)
также различать 3 категории. Здесь он работает на предоставленных тестовых примерах:источник
(defun f(x)(mapcar'apply'(> >=)`(,x,x)))
. Обратите внимание, что вы можете просто написать,(lambda(x)...)
чтобы быть короче.Python 2, 30 байт
-1
для строго убывающего,0
для слабо убывающего,+1
для неубывающегоИспользуется
cmp
для сравнения последовательных элементов и занимает максимум. Это делается путем удаления первого элемента из одной копии списка, а затем сопоставленияcmp
. Например,l=[2,2,1]
даеткоторый имеет
max
0, потому что равенство существует.Более короткий список автоматически расширяется с помощью
None
, который меньше всех чисел и поэтому безвреден. Этот фантомный элемент также защищает от взятияmin
пустого списка, когда вход имеет длину 1.источник
Брахилог , 7 байт
Попробуйте онлайн!
Это печатает
1
для строго убывающего,0
для не увеличивающегося иfalse.
иначе.объяснение
Другие 7-байтовые решения
источник
R, 44 байта
Считывает ввод из stdin и печатает следующее в зависимости от ввода:
Выход:
[1] FALSE TRUE
: Монотонно не увеличивается[1] TRUE FALSE
: Монотонность строго уменьшается[1] FALSE FALSE
: Ни один из вышеперечисленныхисточник
d=diff(scan());ifelse(all(d<=0),!prod(d),2)
на 1 байт короче. Возвращает 0, если монотон строго, 1, если монотон не увеличивается, и 2, если ничего из вышеперечисленного. Не уверен, если разрешено ничего не возвращать, если ничего из вышеперечисленного, но тогда вы могли бы упростить дальшеd=diff(scan());if(all(d<=0))!prod(d)
.d=diff(scan());if(all(d<=0))any(!d)
на один байт лучше.JavaScript (ES6), 51 байт
Возвращает 0 для строгого уменьшения, 1 для не возрастания, 2 в противном случае.
источник
05AB1E ,
58 байтОшибка, исправленная Emigna, спасибо! Он использует тот же метод, что и DrMcMoylex .
Попробуйте онлайн!
Выход:
источник
®¸ì¥Z0.S
будет исправить проблему с одним элементом.Рубин, 37 байт
Выход:
[true,true]
,[true,false]
или[false,false]
источник
Mathematica,
1511 байтовЭто функция с переменным числом, принимающая все входные целые числа в качестве отдельных аргументов.
True | True
False | True
False | False
Обратите внимание , что
|
неOr
толькоAlternatives
, который является частью синтаксиса сопоставления образов, который объясняет , почему эти выражения не получить оценку дляTrue
,True
,False
соответственно.Сам код в основном является приложением этого совета . Например
##>0
,Greater[##, 0]
но затем##
расширяется на все входные значения, так что мы получаем что-то вродеGreater[5, 3, 2, 0]
, что само по себе означает5>3>2>0
.источник
Ракетка , 44 байта
Вызванный:
Результат:
источник
>
как истинный. Common Lisp понимает это правильно, но не может определить регистр arity 0 (который также должен быть истинным).C ++ 14, 85 байт
Возвращает 3 (0b11) для строгого уменьшения, 1 (0b01) для не возрастания и 0 в противном случае.
Ungolfed:
Я подумал, что это идеальная проблема для складных выражений C ++ 17:
К сожалению, это не цепочка реляционных операторов, но
который не был в розыске.
источник
Python 2,
6174 байта+13 байт для ввода одного номера
Требуется ввод в форме списка скобок, как
[3,2,1]
. Возвращает 2 для строгого уменьшения, 1 для не возрастания и 0 в противном случае.Старое решение:
источник
Python 3,
8152 байта (спасибо FryAmTheEggMan )Попробуйте онлайн!
источник
sorted(s)[::-1]
короче для изменения отсортированного списка. В Python 3 вы можете сделать,{*a}
чтобы получить набор элементовa
.sorted
возвращает список, поэтому вам не нужно приводить набор в список. Кроме того, добавление логических значений является совершенно кошерным! Наконец, вы можете отправить анонимную лямбду, так что вам не нужноf=
. В итоге я получаю 52 байта. repl.it/E7eG/2Befunge, 50 байтов
Попробуйте онлайн!
Принимает входные данные как последовательность int, разделенную пробелами, и возвращает 0, если строго уменьшается, 1, если не строго уменьшается, 2 в противном случае.
Поскольку чтение befunge отчасти невозможно, если вы не знаете язык, этот алгоритм в псевдокоде:
* в следующей памяти это стек, который начинается с бесконечного количества 0 на нем. pop (), push (x), input () и output (x) говорят сами за себя, остальные псевдофункции, которые я использовал, работают так:
Funge!
Предыдущая версия, только 41 байт , но недействительными , поскольку она требует от 0 до завершения последовательности ввода (или с помощью переводчика , как это )
Попробуйте онлайн!
источник
0
не считается допустимым форматом ввода. Я думаю, что это подпадает под категорию «предварительно обработанный ввод». Фактически, некоторые ответы добавляются0
в коде (в том числе в счетчик байтов). Я был бы приемлем, если бы вы могли заменить0
некоторые нецифровые символы? Это было бы приемлемо0
вставленный кодом код для случая, когда вход имеет только одну запись. Это одна из причин, почему я считаю, что включение этого0
во входные данные недопустимо. В любом случае, если есть переводчик, который не нуждается в нем, вы можете использовать этот переводчик, чтобы доказать, что ваш ответ действителен без0
. Если переводчик Try-it-online нуждается в этом0
, вы можете включить его для демонстрационных целей с соответствующей пояснительной запискойJ, 14 байт
Монадический глагол, берущий список справа, возвращающийся
1
для строго убывающего,0
для слабо убывающего и_1
другого.Принимает знак
*
минимума<./
последовательных различий2-/\
в списке. J не меняет порядок различий при их получении, например, последовательность строго уменьшается, если все они положительные. В частности,<./
возвращает положительную бесконечность в списках с нулевым элементом.Используется в REPL:
источник
C
6867 байтФункция
f
, которой передается массив ints (l
), которому предшествует его длина (n
также int). Возвращает 3, если монотонно строго уменьшается, 1, если монотонно не увеличивается, но не строго уменьшается, 0 в противном случае.Немного раскошелился для удобства чтения:
Переставил и прокомментировал, чтобы показать логику:
Тестовые случаи (любезно предоставлено IDEOne ):
источник
Сетчатка , 41 байт
Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)
2
3
1
объяснение
Преобразует входной унарный.
Здесь регулярное выражение соответствует возрастающей паре последовательных чисел. Если дело обстоит именно так, входная информация явно не может быть нерастущей. В
A
обозначает его как «анти-ГРЭП» стадия , что означает , что входная линия выбрасывается и заменяется на пустой строке , если регулярное выражение соответствует.Это разделенный этап, который используется для добавления перевода строки к входу, только если вход не был отброшен. Таким образом, у нас пока есть два возможных результата: не увеличивающиеся входные данные получают перевод строки в конце, а другие все еще пусты.
Наконец, мы посчитаем количество совпадений этого регулярного выражения. Регулярное выражение либо соответствует одинаковым числам (а затем всему концу строки, чтобы избежать множественных совпадений такого рода для входных данных, подобных
1 1 1 1
), либо «концу ввода». Давайте рассмотрим три типа входов:$
совпадают. Сейчас$
не совсем "конец строки". Это может также соответствовать перед завершающим переводом строки. Таким образом, мы на самом деле получим два совпадения, одно в конце ввода и одно после перевода строки, который мы вставили.$
сопоставляем только один раз.источник
Аксиома, 114 байт
Ungolfed
Полученные результаты
источник
APL, 16 байт
Примечание: введите один элемент массива, как, например, в
a←1⍴3
противном случае:a←4 3 2 1
Интерпретация вывода:
Идея: проверить монотонность, сравнив исходный массив с отсортированным, проверить, не увеличивается ли он, сравнив массив с удаленными дублированиями.
(И я думаю, что это может быть улучшено ...)
источник
Haskell, 36 байт
(+x)
потому что haskell неправильно интерпретирует(-x)
как значение вместо раздела. Интересно, можно ли выгодно сделать все выражение бессмысленным.источник
LabVIEW, 12 узлов, 18 проводов ==> 48 байт по соглашению
Никаких функций, скрытых в других корпусах, только один провод.
источник
Цейлон, 86 байт
Функция принимает входные данные в качестве своих параметров и возвращает кортеж с нулем или одним логическим значением -
[false]
для монотонного режима, строго уменьшающегося ,[true]
для монотонного, не увеличивающегося, но не строго убывающего , и[]
для None из вышеперечисленного. .Это можно использовать так:
Выход:
Версия без комментариев и комментариев:
источник
Clojure, 34 байта
Очень прямолинейно, возвращает,
1
если оно строго уменьшается,2
если не увеличивается и вnil
противном случае.Также пытался избегать
apply
с макросами,~@
но он длиннее в 43 символа (это приводит к[1 2 nil]
):источник
Пип , 8 байт
Полная программа. Принимает список ввода в качестве аргументов командной строки. Выходы
11
для строго уменьшения,01
для не увеличения,00
ни для одного.Попробуйте онлайн!
объяснение
Этот подход работает, потому что операторы сравнения Пипа, такие как Python, соединяются вместе:
4>3>2
верно, а не(4>3)>2
(ложно), как в C. И такое же поведение сохраняется, когда операторы сравнения модифицируются$
мета-оператором сгиба.источник
Japt ,
987 байтВыходы
-1
для "монотонного строго убывающего",0
для "монотонного не нарастания" и1
других.Попытайся
1 байт спасен благодаря Оливеру .
источник
än mg rw
возвращает неправильные результаты без,J
но это не так сän rw g
. Weird.R , 34 байта
Попробуйте онлайн!
Порты DJ's MATL ответ .
R , 43 байта
Попробуйте онлайн!
Возвращает
2
для строго убывающих,1
для нерастущих и0
других.all(x==cummin(x))
isTRUE
(конвертируется в1
когда используется в арифметике) тогда и только тогда, когдаf
не увеличивается, включая строгий регистр.all(diff(x)<0)
этоTRUE
только тогда , когдаf
строго убывает.источник