让我们减少单调


33

...但是嘿,不必太严格。

给定严格正整数的非空数组,请确定其是否为:

  1. 单调严格减少。这意味着每个条目都严格小于上一个条目。
  2. 单调不增加,但不严格减少。这意味着每个条目都小于或等于前一个条目,并且该数组不属于上述类别。
  3. 以上都不是

请注意以下特殊情况:

  • 具有单个数字的数组是单调严格递减的(很明显如此)。
  • 重复相同编号的数组是单调非递增的,但不是严格递减的。

规则

您可以提供程序或功能

输入可以采用任何合理的格式:数组,列表,数字用空格分隔的字符串,...

您可以分别为三个类别选择任何三个一致的输出。例如,输出可以是数字012; 或字符串1 11 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

是否编写可变参数函数(其中输入值根本不包装在任何数据类型中,而是全部直接传递给函数作为参数)是否属于“任何合理格式”?
Martin Ender

@Martin是的,确实如此!
路易斯·门多

Answers:


9

果冻10 9 5 个字节

-DrMcMoylex找到的方法,请给点功劳!

;0IṠṀ

TryItOnline!运行所有测试

返回:-1=单调严格递减;0=单调不增加;1=其他。

怎么样?

;0IṠṀ - Main link: list
;0    - concatenate with a zero
  I   - incremental differences
   Ṡ  - sign
    Ṁ - maximum

变音符号M是任何8bit字符图的一部分吗?您不能说它是5个字节,因为不是。例如CP1252没有它。
Euri Pinhollow,2016年

2
@EuriPinhollow Jelly使用此自定义代码页来计数字节,该字节链接在byte此文章标题的单词中。
致命

@Fatalize:谢谢。
Euri Pinhollow '16

22

Perl 6、17个字节

{[>](@_)+[>=] @_}
  • 单调严格递减: 2
  • 单调非递增: 1
  • 其他: 0

展开:

{            # bare block lambda with implicit parameter list 「@_」
  [>]( @_ )  # reduce using 「&infix:« > »」
  +
  [>=] @_    # reduce using 「&infix:« >= »」
}

4
Perl不可思议
基金莫妮卡的诉讼

如果>使用after和进行切换,则可以扩展为与任何类型的文档一起>=使用!beforesay {[after](@_)+[!before] @_}(<d c b a>) #=> 2
布拉德·吉尔伯特b2gills

13

MATL10,7个字节

0hdX>ZS

在线尝试!验证所有测试用例!

感谢@LuisMendo,节省了3个字节!

输出是

  • 严格降低:-1

  • 不增加:0

  • 其他:1

说明:

0           % Push a '0'
 h          % Join the 0 to the end of the input array.
  d         % Get consecutive differences
   X>       % Get the largest difference
     ZS     % Get its sign
            % Implicitly print it

1
您不能0在最后一个加号之前加上a 而不是1?喜欢的东西0hdX>ZS
路易斯Mendo

2
@LuisMendo啊,天才!谢谢!
DJMcMayhem

无济于事,但对于混淆也可以使用:0hdX>0/-您和@LuisMendo的问题:是否可以X>通过某种方式隐式使用最后一个值来利用sort仅为1个字符(与相对)的事实?
丹尼斯·贾黑鲁丁

@DennisJaheruddin我也考虑过使用S,但是我还没有找到一种使它更短的方法……
Luis Mendo

9

Mathematica,22个字节

Sign@*Max@*Differences

使用数字列表作为输入的未命名函数。退货-1如果列表严格减少,0则如果列表不增加但不严格减少,1则两者都不返回。

很简单的算法:取连续对的差,取最大对,取正负号。

(我觉得必须存在某种语言,该算法为3个字节...。)

关于具有单个条目的数组:Differences产生一个空列表;Max空列表中的-∞(!); 并Sign[-∞]计算为-1(!!)。因此,它实际上适用于这种极端情况。有时会喜欢Mathematica。(实际上,该函数还正确地将一个空列表标记为严格减少。)


我看到DrMcMoylex将我击败了7分钟!:)
格雷格·马丁

2
“我觉得必须存在某种语言,该算法使用3个字节” chat.stackexchange.com/transcript/message/33720906#33720906 :(
Martin Ender

7

Haskell,40 38 37字节

foldl min GT.(zipWith compare<*>tail)

退货

  • GT 严格降低单调
  • EQ 用于单调非增量
  • LT 其他

compare比较两个数字,如果第一个数字大于(等于,小于)第二个数字,则返回GT()。比较邻居元素。减少的比较结果与所述min函数开始GT的列表(注意:< < )。EQLTzipWith compare<*>tailfoldl min GTLTEQGT

编辑:@xnor发现2 3个字节。谢谢!


您可以在LT前面加上而不是在0前面吗?
xnor

@xnor:是的,谢谢,但是必须为GT,因为我们需要列表的最小值(我有最大值,这是错误的,并且是我使用=<<而不是的早期版本的遗物<*>)。
nimi 2016年

1
我懂了。其实foldl min GT呢?
xnor

6

Common Lisp,43个 40字节

(defun f(x)`(,(apply'> x),(apply'>= x)))

这需要输入作为一个Lisp列表,并且返回(T T)(NIL T)(NIL NIL)区分3个类别。它在提供的测试用例上运行:

CL-USER> (mapcar #'f '((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)))
((T T) (T T) (T T) (NIL T) (NIL T) (NIL T) (NIL NIL) (NIL NIL) (NIL NIL))

1
与完全相同的字节数(defun f(x)(mapcar'apply'(> >=)`(,x,x)))。请注意,您可以写得(lambda(x)...)短些。
coredump

6

Python 2,30个字节

lambda l:max(map(cmp,l[1:],l))

-1严格减小,0弱减小,+1不减小

使用cmp比较连续元素,并采取最大。这是通过删除列表的一个副本的第一个元素,然后映射来完成的cmp。例如,l=[2,2,1]

l[1:]  2   1   None
l      2   2   1
cmp    0  -1   -1

max因为存在相等,所以它为0。

较短的列表会使用进行自动扩展None,它小于所有数字,因此无害。min当输入的长度为1时,此幻影元素也可以防止空列表的出现。


即使使用很少的Python,我也知道我能体会到这个答案有多么出色
Luis Mendo

5

Brachylog,7个字节

>,1|>=,

在线尝试!

1严格减少打印,0不增加打印,false.否则打印。

说明

  (?)>              Input is a strictly decreasing list
      ,1(.)         Output = 1
|                 Or
  (?)>=             Input is a non-increasing list
       ,(.)         Output is a free variable; gets automatically labeled as an integer at
                      the end of execution. Since its domain is [-inf, +inf], the first
                      value it takes is 0
                  Or
                    No other possibility, thus this main predicate is false.

其他7字节解决方案

>=!>,;1           Returns 0 for strictly decreasing, false. for non-increasing, 1 otherwise.

>=!>,1|           Returns 1 for strictly decreasing, false. for non-increasing, 0 otherwise.

4

R,44个字节

d=diff(scan());c(any(!d)&all(d<=0),all(d<0))

从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)
2016年

其实d=diff(scan());if(all(d<=0))any(!d)好一个字节。
2016年

3

JavaScript(ES6),51个字节

a=>a.some((e,i)=>e>a[i-1])+a.some((e,i)=>e>=a[i-1])

对于严格减少,返回0,对于不增加,返回1,否则返回2。


3

05AB1E5 8字节

Emigna修复的错误,谢谢!它使用与DrMcMoylex相同的方法。

®¸ì¥Z0.S

®¸ì   Implicitly take input and appends -1 to it
¥     Yield deltas
 Z    Take the largest delta
  0.S Take its sign and implicitly display it

在线尝试!

输出为:

-1 if strictly decreasing sequence
 0 if non-strictly decreasing sequence
 1 otherwise

1
®¸ì¥Z0.S将解决单个元素的问题。
Emigna '16

很好,谢谢!我认为开头的0也会起作用,因为所有数字都是正数(我猜是默认情况下严格来说)。
2016年

是的,0也可以工作,但是很高兴它可以用于包含0的输入(即使按定义它也不会):)
Emigna

有趣的事实:在法语中,“正”表示正数或零,您必须指定“严格正数”才能达到与英语中“正”相同的含义。
2016年

3

Ruby,37个字节

->l{[d=l==l.sort.reverse,d&&l|[]==l]}

输出:[true,true][true,false][false,false]


2

Mathematica,15个 11字节

##>0|##>=0&

这是一个可变参数函数,将所有输入整数作为单独的参数。

  • 严格减少: True | True
  • 不增加: False | True
  • 都不: False | False

请注意,|是不是Or,但是Alternatives,这是模式匹配的语法,这可以解释为什么这些表达式没有得到评估的一部分TrueTrueFalse分别。

代码本身主要是本技巧的应用。例如##>0Greater[##, 0]但随后##将其扩展为所有输入值,因此我们得到类似的信息Greater[5, 3, 2, 0],这本身就意味着5>3>2>0


2

球拍,44字节

(λ(x)(map(λ(p)(apply p`(,@x 0)))`(,>,>=)))

调用:

(map (λ(x)(map(λ(p)(apply p`(,@x 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)))

结果:

'((#t #t)
 (#t #t)
 (#t #t)
 (#f #t)
 (#f #t)
 (#f #t)
 (#f #f)
 (#f #f)
 (#f #f))

遗憾的是,球拍没有将Arity 1的情况定义>为true。Common Lisp正确地做到了这一点,但是未能定义arity 0的大小写(也应该为true)。
奥马尔

2

C ++ 14,85个字节

int f(int x){return 3;}int f(int x,int y,auto...p){return((x>=y)+2*(x>y))&f(y,p...);}

对于严格减少返回3(0b11),对于不增加返回1(0b01),否则返回0。

取消高尔夫:

int f(int x) {return 3;}
int f(int x,int y,auto...p){
  return ((x>=y)+2*(x>y)) & f(y,p...);
}

我认为这对于C ++ 17的折叠表达式是一个完美的问题:

int g(auto...x){return(x>...)+(x>=...);}

不幸的是,它没有链接关系运算符,但是

((x1>x2)>x3)>x4)...

这是不想要的。


2

Python 2,61 74字节

单数字输入+13字节

x=map(str,input())
print[2,eval(">".join(x))+eval(">=".join(x))][len(x)>1]

需要以括号列表形式输入,例如[3,2,1]。对于严格减少返回2,对于不增加返回1,否则返回0。

旧解决方案:

print eval(">".join(x))+eval(">=".join(x))

2

Python 3中,81 52个字节(感谢FryAmTheEggMan

e=sorted
lambda a:(a==e(a)[::-1])+(e({*a})[::-1]==a)

在线尝试!


sorted(s)[::-1]缩短排序列表的时间。在Python 3中,您可以{*a}获取的一组元素asorted返回列表,因此您也不必将集合转换为列表。还添加布尔值是完美的犹太洁食!最后,您可以提交匿名lambda,因此您不需要f=。最后得到52个字节。repl.it/E7eG/2
FryAmTheEggman

2

Befunge,50个字节

&: >~1+#^_v>:0`|
1\:^  @.$$<-@.2_
-: ^    >& ^   >

在线尝试!

将输入接受为以空格分隔的int序列,如果严格减少则返回0,如果非严格减少则返回1,否则返回2。

由于如果您不懂语言,就不可能读到真菌,所以这是伪代码中的算法:

push(input())

while( getchar()!=EOF ){
  push(input())
  subtract()
  duplicate()
  if(pop()>0){
    subtract() //we are doing a-(a-b), so b is now on top
    duplicate()
  }
  else{
    if(pop()==0){
      push(1) //the sequence is not strictly decreasing
      swap()
      duplicate()
    }
    else{
      push(2) //the sequence has just increased
      output(pop)
      return
    }
  }
}
pop()
pop()
output(pop())

* Bunge内存中的堆栈是一个以0无限量开头的堆栈。pop(),push(x),input()和output(x)是不言自明的,我使用的其他伪函数是这样工作的:

function duplicate(){
  a=pop()
  push(a)
  push(a)
}

function subtract(){
  a=pop()
  b=pop()
  push(b-a)
}

function swap(){
  a=pop()
  b=pop()
  push(a)
  push(b)
}

ge!


以前的版本,只是41字节,但无效,因为它需要一个0以终止输入序列(或使用类似的解释

&:  >&:|>:0`|
1\v@.$_<-@.2_
- >:v  >^   >

在线尝试!


恐怕结尾0不能算作有效的输入格式。我认为它属于“预处理输入”类别。实际上,一些答案会0在代码中附加一个(因此包括字节数在内)。如果可以的话,我可以接受。您可以0用一些非数字字符代替吗?这将是可以接受的
Luis Mendo

@LuisMendo实际上,使用解释器(这是我用来开发代码的解释器),EOF确实返回0,因此无需在输入中添加任何内容。我无法发现预期的行为,所以我不知道这个假设是否是标准的。我可能会误解的一件事是:零可以成为输入序列的一部分吗?如果是这样,我仍然需要修改代码。
狮子座

不,零不能成为序列的一部分(给定一个非空的正整数数组,我严格意义上就是正整数)。但是某些答案的确使用代码0插入来处理输入只有一个条目的情况。这就是为什么我认为在输入中包含无效内容的原因之一。无论如何,如果有不需要的解释器,则可以使用该解释器来证明您的答案是有效的,而无需使用。如果“在线试用”解释器需要这样做,则可以出于说明目的将其包括在内,并带有适当的解释说明000
Luis Mendo

在tryonline〜上时@JamesHolderness可以正常工作,并且在EOF上具有奇怪的行为,显然永远重复最后一次输入。参见此处的示例
Leo

1
我使用James的方法编辑了答案,现在输入被EOF终止
Leo

2

J,14个字节

一元动词取右边的列表,返回则1表示严格减少,0弱减少,_1否则返回。

*@([:<./2-/\])

取列表中连续差异*最小的符号。J接受差异时不交换差异的顺序,因此,例如,如果这些序列均为正数,则序列严格减小。值得注意的是,在零元素列表上返回正无穷大。<./2-/\<./

在REPL中使用:

   *@([:<./2-/\]) 3
1
   *@([:<./2-/\]) 3 2
1
   *@([:<./2-/\]) 3 2 2
0
   *@([:<./2-/\]) 3 2 2 3
_1

2

C,68 67字节

一个函数f,该函数传递了一个ints(l)数组,并在其长度之前(n也是int)。如果单调严格减少,则返回3;如果单调不增加,则返回1,但不严格减少,否则返回0。

f(int n,int*l){return n<2?3:((l[0]>l[1])*2|l[0]>=l[1])&f(n-1,l+1);}

略微松开以提高可读性:

int f_semiungolfed(int n, int* l) {
    return (n < 2) ? 3 : ((l[0] > l[1]) * 2 | l[0] >= l[1]) & f(n - 1, l + 1);
}

重新排列并注释以显示逻辑:

int f_ungolfed(int n, int* l) {
    int case1 = 0, case2 = 0, recursion = 0;
    if (n < 2) { // Analogous to the ternary conditional I used - n < 2 means we have a single-element/empty list
        return 3; // Handles the vacuous-truth scenario for single lists
    } else {
        case1 = l[0] > l[1]; // The first case - are the two numbers in the list strictly decreasing? (case1 is 1 if so)
        case2 = l[0] >= l[1]; // The second case - are the two numbers strictly non-increasing (case2 is 1 if so)
        recursion = f_ungolfed(n - 1, l + 1); // Recursively call ourselves on the "rest" of the list (that is, everything other than the first element). Consider that comparison is transitive, and that we already have a vacuous-truth scenario covered.
        case1 *= 2; // Shift case1's value over to the left by one bit by multiplying by 2. If case1 was 1 (0b01), it's now 2 (0b10) - otherwise it's still 0 (0b00)
        return (case1 | case2) & recursion; 
        // The bitwise OR operator (|) will combine any 1-bits from case1's value (either 0b10 or 0b00) or case2's value (either 0b01 or 0b00) into either 3, 2, 1, or 0 (0b11, 0b10, 0b01, or 0b00 respectively).
        // The bitwise AND operator (&) will combine only matching 1-bits from (case1|case2) and the return value of the recursive call - if recursion = 0b11 and case1|case2 = 0b01, then the return value will be 0b01.
    }
}

测试用例(由IDEOne提供):

{7, 5, 4, 3, 1}: 3
{42, 41}: 3
{5}: 3
{27, 19, 19, 10, 3}: 1
{6, 4, 2, 2, 2}: 1
{9, 9, 9, 9}: 1
{1, 2, 3, 2}: 0
{10, 9, 8, 7, 12}: 0
{4, 6, 4, 4, 2}: 0

2

视网膜,41字节

\d+
$*
A`\b(1+) 1\1
S`\b$
\b(1+) \1\b.*|$

在线尝试!(第一行启用换行分隔的测试套件。)

  • 严格减少: 2
  • 不增加: 3
  • 都不: 1

说明

\d+
$*

转换输入一元。

A`\b(1+) 1\1

此处的正则表达式匹配不断增加的一对连续数字。如果是这种情况,输入显然不会增加。将其A表示为“ anti-grep”阶段,这意味着如果正则表达式匹配,则将输入行丢弃并替换为空字符串。

S`\b$

这是一个拆分阶段,用于将换行符附加到输入当不丢弃。因此,到目前为止,我们有两种可能的结果:不增加的输入最后将换行,而其他输入仍然为空。

\b(1+) \1\b.*|$

最后,我们计算此正则表达式的匹配数。正则表达式要么匹配相同的数字(然后匹配字符串的所有内容,以避免对于诸如此类的输入进行多次此类匹配1 1 1 1),要么 “输入的末尾”。让我们看一下三种类型的输入:

  • 严格减少:正则表达式的第一部分无法匹配,因为所有值都是唯一的,而是$匹配的。现在$不是完全是 “字符串的结尾”。它也可以在尾随换行符前面匹配。因此,实际上我们会从中获得两个匹配项,一个匹配项位于输入的末尾,另一个匹配项位于我们插入的换行符之后。
  • 不增加:现在正则表达式的第一部分也提供了一个匹配项,最后我们得到了三个匹配项。
  • 都不是:请记住,我们注意将输入转换为空字符串,因此现在$仅匹配一次。

1

公理,114字节

m(c:List(INT)):INT==(i:=r:=1;repeat(~index?(i+1,c)=>break;c.i<c.(i+1)=>return 0;if c.i=c.(i+1)then r:=2;i:=i+1);r)

不打高尔夫球

-- if [a,b,..n] decrescente ritorna 1
--          non crescente   ritorna 2
--          altrimenti      ritorna 0  
m(c:List(INT)):INT==
   i:=r:=1
   repeat
      ~index?(i+1,c)=>break 
      c.i<c.(i+1)   =>return 0
      if c.i=c.(i+1) then r:=2
      i:=i+1
   r

结果

(x) -> m([3,1])=1, m([1,1])=2, m([])=1, m([1])=1, m([1,3])=0
   (x)  [1= 1,2= 2,1= 1,1= 1,0= 0] 

1
Forse dovresti tradurre我commenti all'inglese :-)
Luis

1

APL,16个字节

(a≡a[⍒a])×1+a≡∪a

注意:输入一个元素数组,例如a←1⍴3a←4 3 2 1

解释输出:

2 Monotone strictly decreasing
1 Monotone non-increasing, but not strictly decreasing
0 None of the above

想法:通过将原始数组与排序后的数组进行比较来测试单调性,通过与删除了重复项的数组进行比较来检查不增加。

(而且我认为可以改进...)


更改为一个数字。字节数增加了2 ...
Roman Susi

1

Haskell,36个字节

f l=[scanl1(min.(+x))l==l|x<-[0,-1]]

(+x)是因为haskell误解(-x)为值而不是部分。我想知道是否可以使整个表达式毫无意义地赚钱。


1

LabVIEW,按照惯例,12个节点,18根导线==> 48字节

在此处输入图片说明

其他案例框架中没有隐藏任何功能,仅需一根导线即可。


1

锡兰,86字节

Object m(Integer+l)=>let(c=l.paired.map(([x,y])=>x<=>y))[if(!smaller in c)equal in c];

该函数将输入作为它的参数,并返回零个或一个布尔值的元组- [false]用于单调严格递减[true]单调非增的,但不是严格递减,并[]上述的无

可以这样使用:

shared void run() {
    print("Monotone strictly decreasing:");
    print(m(7, 5, 4, 3, 1));
    print(m(42, 41));
    print(m(5));

    print("Monotone non-increasing, but not strictly decreasing:");
    print(m(27, 19, 19, 10, 3));
    print(m(6, 4, 2, 2, 2));
    print(m(9, 9, 9, 9));

    print("None of the above:");
    print(m(1, 2, 3, 2));
    print(m(10, 9, 8, 7, 12));
    print(m(4, 6, 4, 4, 2));
}

输出:

Monotone strictly decreasing:
[false]
[false]
[false]
Monotone non-increasing, but not strictly decreasing:
[true]
[true]
[true]
None of the above:
[]
[]
[]

未经评论的版本:

// Let's decrease the monotony! 
//
// Question:  http://codegolf.stackexchange.com/q/101036/2338
// My Answer: http://codegolf.stackexchange.com/a/101309/2338


// Define a function which takes a non-empty list `l` of Integers)
// (which arrive as a tuple) and returns an Object (actually
// a `[Boolean*]`, but that is longer.) 
Object m(Integer+ l) =>
        // the let-clause declares a variable c, which is created by taking
        // pairs of consecutive elements in the input, and then comparing
        // them. This results in lists like those (for the example inputs):
        // { larger, larger, larger, larger }
        // { larger }
        // {}
        // { larger, equal, larger, larger }
        // { larger, larger, equal, equal }
        // { equal, equal, equal }
        // { smaller, smaller, larger }
        // { larger, larger, larger, smaller }
        // { smaller, larger, equal, larger }  
        let (c = l.paired.map( ([x,y]) => x<=>y) )
            // now we analyze c ...
            // If it contains `smaller`, we have an non-decreasing sequence.
            // We return `[]` in this case (an empty tuple).
            // Otherwise we check whether `equal` is in the list, returning
            // `[true]` (a non-strictly decreasing sequence) if so,
            // and `[false]` (a strictly decreasing sequence) otherwise.
            [if(!smaller in c) equal in c];

1

Clojure,34个字节

#(if(apply > %)1(if(apply >= %)2))

非常简单,1如果严格减少,则返回2则如果不增加nil则返回。

还尝试避免apply使用宏,~@但它的长度更长,为43个字符(导致[1 2 nil]):

(defmacro f[& i]`(if(> ~@i)1(if(>= ~@i)2)))

[(f 7 5 4 3 1)
 (f 27 19 19 10 3)
 (f 1 2 3 2)]

1

,8字节

O$>g$>=g

完整程序。将输入列表作为命令行参数。11严格减少的输出,01对于不增加的输出,00两者都不输出。

在线尝试!

说明

这种方法之所以有效,是因为Pip的比较运算符(如Python)链接在一起:4>3>2是true,而不是(4>3)>2C中的false,并且使用$fold meta-operator 修改比较运算符时,其行为相同。

          g is list of command-line args (implicit)
 $>g      Fold g on >
O         Output without newline
    $>=g  Fold g on >=
          Print (implicit)

1

贾普特9) 8 7字节

输出-1为“单调严格减少”,0“单调不增加”和1其他输出。

än rw g

试试吧

感谢Oliver节省了1个字节。


@Oliver,是的;否则它将默认为...等待,什么?为什么行得通?!än mg rw不返回错误的结果,J但使用则不是这种情况än rw g。奇怪的。
毛茸茸的

1

R,34个字节

function(x)max(sign(diff(c(x,0))))

在线尝试!

端口DJ的MATL答案

R,43个字节

function(x)all(diff(x)<0)+all(x==cummin(x))

在线尝试!

2对于严格减少,1对于非增加则返回,0否则返回。

all(x==cummin(x))当且仅当不增加(包括严格情况)时,才是TRUE(转换为1算术使用时)f

all(diff(x)<0)TRUE只有当f被严格递减。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.