我是微不足道的阵列吗?


40

一个微不足道阵列是正整数,其中连续元素之间的绝对差均小于或等于的阵列1

例如,以下数组无关紧要:

[1, 2, 3, 4, 3, 4, 5, 5, 5, 4]

因为相应的(绝对)差异是:

[1, 1, 1, 1, 1, 1, 0, 0, 1]

全部小于或等于1


您的任务是确定给定的整数数组是否不重要。

  • 您可以假定数组始终包含至少两个元素。
  • 标准输入和输出规则适用。您可以采用任何合理的格式输入(和输出)。
  • 默认漏洞是禁止的。
  • 真实/虚假的值必须是不同且一致的。
  • 这是,因此最短答案以字节为单位。

测试用例

输入->输出

[1、2、3、4、3、4、5、5、5、4]-> true
[1、2、3、4、5、6、7、8、9、8]-> true
[3,3,3,3,3,3,3]-> true
[3,4,4,4,3,3,3,4,4,4]-> true
[1、2、3、4]->是 
[5、4、3、2]->是 
[1、3、5、7、9、7、5、3、1]->否
[1、1、1、2、3、4、5、6、19]->否
[3,4,5,6,7,8,7,5]->否
[1、2、4、10、18、10、100]->否
[10,20,30,30,30]->错误

我使用了值truefalse


用我们选择的语言,真实/虚假值是否实际上必须是真实/虚假的,还是我们可以使用任何两个不同且一致的值?
Martin Ender

1
@MartinEnder任何两个不同且一致的值。PS对不起,您的回复很晚

2
文字说您将得到一个整数数组,但是只有正整数数组可以忽略不计。我们应该为负整数数组做准备吗?
Mark S.

Answers:


24

果冻,3个字节

IỊẠ

在线尝试!

怎么样?

对于果冻而言,这是完美的挑战。

IỊẠ完整程序。

我增加;获取连续元素之间的差异。
 Ị无关紧要的;返回abs(number)≤1。
  Ạ全部;如果所有元素均为真,则返回1,否则返回0。

2
P会不会工作,因为如果所有差异都1将输出1,但是如果其中之一0会输出0?如果只有一种区别,50仍然会有区别0吗?
Tas

1
那“正整数”的要求呢?
3D1T0R

19

JavaScript(ES7),33个 29字节

@JohanKarlsson节省了4个字节

a=>!a.some(v=>(a-(a=v))**2>1)

怎么样?

强制为时Number,将至少两个元素的数组评估为NaN。通过将输入a重新用作保存先前值的变量,some()的第一次迭代始终导致([v0,v1,...]-a [0])** 2 = NaN,无论a [0]的值。因此,第一次测试总是虚假的,实际的比较从第二次迭代开始,正如它们的意图一样。

测试用例


29个字节:a=>!a.some(v=>(a-(a=v))**2>1)
Johan Karlsson

@JohanKarlsson啊,是的,保证输入至少包含2个元素,所以很安全。非常感谢!
Arnauld




6

外壳,4个字节

ΛεẊ-

在线尝试!

说明:

ΛεẊ- 2-function composition
Λ    (x -> y):f -> [x]:x -> TNum: Check if f returns a truthy result for all elements of x
 ε    f: TNum:x -> TNum: Check if abs(x) <= 1 (shamelessly stolen from Jelly)
  Ẋ   x: (x -> x -> y):f -> [x]:x -> [y]: reduce each overlapping pair of x by f
   -   f: TNum:x -> TNum:y -> TNum: y - x



5

Pyth,6个字节

._MI.+

验证所有测试用例。


Pyth,8个字节

.A<R2aVt

在线尝试!

说明

._MI.+   Full program.

    .+   Deltas.
   I     Is invariant under...
._M      Mapping with Sign. 0 if n == 0, -1 if n < 0, 1 if n > 0.

.A<R2aVt    Full program.

      Vt    Vectorize function, applied on the input zipped with the tail of the input.
     a      Absolute difference.
  <R2       For each, check if it is smaller than 2.
.A          All.

我不知道为什么我认为I#不是M
史蒂文H.



5

C#(.NET Core)51 45 44 + 18字节

-1字节感谢Jeppe Stig Nielsen

a=>a.Zip(a.Skip(1),(x,y)=>x-y).All(x=>x*x<4)

字节数还包括:

using System.Linq;

在线尝试!

说明:

a =>                      // Take an array of integers as input
    a.Zip(                // Combine each element with corresponding one from:
        a.Skip(1),        //     the input array without first element
        (x, y) => x - y   //     get their difference
    )
    .All(x => x * x < 4)  // Check if all differences are less than 2
                          // (We only care about 0 and 1, and so happens that when they're squared, it works like Abs! Magic!)

3
一点改进:a=>a.Zip(a.Skip(1),(x,y)=>x-y).All(x=>x*x<4)避免了否定!
Jeppe Stig Nielsen

@JeppeStigNielsen太棒了,谢谢!
GrzegorzPuławski17年

5

Perl 6,25个字节

{?(2>all(.[]Z-.skip)>-2)}

在线尝试!

这应该很可读。唯一不那么明显的事情是,Z当较短的列表用尽时,zip运算符将停止压缩(我们在右侧删除了列表的第一个元素),并且空下标.[](称为Zen slice)给出了整个列表。.skip返回不包含第一个元素的列表。


这两个空间真的必要吗?
乔纳森·弗雷希

@JonathanFrech:正确的人可能没有。我也刚刚意识到,.rotate这里不需要。
Ramillies

哎呀,即使是左手也可以移开。我真的不明白哪里需要空格,哪里不需要...
Ramillies

你可以写-2<,而不是-1≤<2,而不是≤1救四个多个字节。
肖恩

嗯,我想您实际上必须逆转比较,2>...>-2以避免以<错误的方式进行解释。
肖恩




3

PowerShell,62字节

param($a)$l=$a[0];($a|?{$_-$l-in1..-1;$l=$_}).count-eq$a.count

在线尝试!

PowerShell没有.map.some或类似命令,因此在这里我们逐一检查每个增量。

我们接受输入$a并将其设置为$l等于第一个元素。然后我们遍历$a并取出其中|?{...}$_-$l-in范围的每个元素1,0,-1。然后,我们将其设置为$l等于当前元素。因此,现在我们有了一个元素集合,它们的前一个邻居之间的增量为1。我们将其取.count为,然后检查它是否与整个数组的-equal .count相同。如果是,则每个增量都等于或小于1,因此它是一个无关紧要的数组。该布尔结果留在管道上,并且输出是隐式的。


您可以删除参数并执行操作来节省1个字节$l=($a=$args)[0]
briantist

@briantist那是行不通的。例如。 这是因为它被设置$l为建议中的整个输入数组。
AdmBorkBork

我认为这仅需要更改您在TIO中提供参数的方式(每个元素都需要单独指定)。您现在拥有的方式的第一个元素$args本身就是整个数组。示例
briantist

感觉很作弊...
AdmBorkBork

我认为这实际上是正确的使用方法$args。如果您使用一系列以空格分隔的参数调用脚本或函数,则它将作为中的单独元素出现$args,而对于TIO而言,这就是模拟方法。我以前
曾以



2

MATL6 5字节

d|2<A

-1个字节,感谢Giuseppe

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


我认为您可以使用每个元共识d|2<代替,因为MATL中具有零值的数组是错误的。
朱塞佩

1
或者d|2<A更接近您的原始答案。
朱塞佩

1
@Giuseppe不,他们不能:真实/虚假的价值观必须是鲜明而一致的
Xcoder先生17年

@ Mr.Xcoder“真值全为1的数组”和“假数至少包含一个零的数组”不是唯一且一致的吗?
朱塞佩

2
@Giuseppe “真值全为1的数组”和“假数至少包含一个零的数组”不是唯一且一致的吗?-不可以,因为它们不一致。

2

anyfix,9个字节

I€A€2<»/&

在线尝试!

I€A€2<»/&  Main Link
I          Deltas
 €         For each element
  A        Take its absolute value
   €  »    For each element
    2<     Is it less than two?
       /   Reduce over
        &  Logical AND

除可怕之外,这主要是05AB1E解决方案的一个端口,因为anyfix没有自动矢量化和其他有趣的功能


2

C,61 56字节

感谢@scottinet节省了五个字节!

r;f(a,n)int*a;{for(r=1;--n;r=(*a-*++a)/2?0:r);return r;}

在线尝试!

C(gcc),47个字节

r;f(a,n)int*a;{for(r=1;--n;r=(*a-*++a)/2?0:r);}

在线尝试!


并且如果允许的话/如果您愿意,可以通过将结果存储在而不是返回结果的方式来节省9个字节r。:-)
scottinet

@scottinet我考虑过了,但是即使碰巧与gcc一起使用,它也不是有效的C语言。不过,它是允许的,所以我想我会把它作为替代版本包括在内。
Steadybox

2
@scottinet在函数的末尾分配一个变量会将该值放入函数的返回地址中,从而使其感觉像在返回该值。但是,此行为不是C规范的一部分,因此无法保证有效。它还可能会破坏某些优化的编译器标志。
乔纳森·弗雷希

2
@scottinet啊,很抱歉。我认为这是不允许的,因为您不能简单地根据协议规则在解决方案中分配变量。例如,也不允许使用全局定义的变量而不是函数参数。您的任务是编写功能齐全的程序/功能。
乔纳森·弗雷希

1
@JonathanFrech语言由此处的实现定义,因此,如果您的编译器产生一致的结果,则答案是有效的,即使正式使用UB也是如此。
Quentin

2

Clojure,35个字节

#(every? #{-1 0 1}(map -(rest %)%))

那有多干净?


2

TI-Basic,6个 7字节

prod(2>abs(ΔList(Ans

或5个字节(如果错误计为有效返回值)(ERR:ARGUMENT如果不重要则返回,否则返回ERR:DOMAIN

augment(sin⁻¹(ΔList(Ans

1
这可能应该具有abs(ΔList(Ans,或者下降超过1(例如在{5,3,1}中或在测试用例{3,4,5,6,7,8,7,5}中)不会得到检测到。
Misha Lavrov

@MishaLavrov谢谢,你是对的!
奥基

1

JavaScript(ES6),37 36字节

(a,u)=>!a.some(e=>(e-=(u=e))>1|e<-1)

编辑:偷了@Arnauld的把戏,节省了1个字节。


你可以使用钻营:a=>u=>!a.some(e=>(e-=(u=e))>1|e<-1)
巴林特

1

Pyth,7个字节

._I#I.+

测试套件

返回true / false。

说明:

     .+ Deltas, returns differences between consecutive values.
._      Signum, returns the sign of a number (1, 0, or -1).  Note that this should
             be equal to the input for insignificant arrays.
  I     Tests if it is equal to the input...
   #    For each in the input, and filter out those that aren't...
    I   And make sure none have been filtered out.

1

Mathematica,34个字节

Differences@#~MatchQ~{(1|0|-1)..}&

说明

                                 & (* Function *)
Differences                        (* which takes the consecutive differences*)
           @#                      (* of the input list *)
             ~MatchQ~              (* and returns whether it matches *)
                     {(1|0|-1)..}  (* a list consisting of one or more 1s, 0s, or -1s *)

1

Java(OpenJDK 8),60字节

a->{int r=1,p=a[0];for(int i:a)r|=(r=p-(p=i))*r;return r<2;}

在线尝试!

  • 5字节感谢@Nevay!

1
您可以r在循环中使用,以(p-n)仅计算一次,>>1可以使用,也可以/2使用|代替+a->{int r=1,p=a[0];for(int i:a)r|=(r=p-(p=i))*r;return r<2;}(60字节)删除。
Nevay

干杯@Nevay,谢谢!像往常一样完美打高尔夫球;-)
OlivierGrégoire17年

你能解释一下它是如何工作的吗?谢谢!
blurstream

1

斯威夫特4,52字节

{!zip($0.dropFirst(),$0).map(-).contains{1<abs($0)}}

测试套件:

let isInsignificant: (_ array: [Int]) -> Bool = {!zip($0.dropFirst(),$0).map(-).contains{1<abs($0)}}

let testcases: [(input: [Int], expected: Bool)] = [
    (input: [1, 2, 3, 4, 3, 4, 5, 5, 5, 4], expected: true),
    (input: [1, 2, 3, 4, 5, 6, 7, 8, 9, 8], expected: true),
    (input: [3, 3, 3, 3, 3, 3, 3],          expected: true),
    (input: [3, 4, 4, 4, 3, 3, 3, 4, 4, 4], expected: true),
    (input: [1, 2, 3, 4],                   expected: true ),
    (input: [5, 4, 3, 2],                   expected: true ),
    (input: [1, 3, 5, 7, 9, 7, 5, 3, 1],    expected: false),
    (input: [1, 1, 1, 2, 3, 4, 5, 6, 19],   expected: false),
    (input: [3, 4, 5, 6, 7, 8, 7, 5],       expected: false),
    (input: [1, 2, 4, 10, 18, 10, 100],     expected: false),
    (input: [10, 20, 30, 30, 30],           expected: false),
]


for (caseNumber, testcase) in testcases.enumerated() {
    let actual = isInsignificant(testcase.input)
    assert(actual == testcase.expected,
        "Testcase #\(caseNumber) \(testcase.input) failed. Got \(actual), but expected \(testcase.expected)!")
    print("Testcase #\(caseNumber) passed!")
}

1

APL,13个字节

{×/(|2-/⍵)<2}

APL的第一个答案\ o /

注意:我是Hyper Neutrino拥有的漫游器。我主要是为了聊天测试而存在。

说明

{×/(|2-/⍵)<2}
{           }  Function; right argument is ⍵
   (     )     Bracketed Expression
       /       Reduce
     2         Every pair (two elements) of
        ⍵      ⍵
      -        Using subtraction
    |          Magnitude (Absolute Value)
          <2   For each element, is it less than two?
  /            Reduce over
 ×             Multiplication (Product) (All)

1
默认为11个字节∧/2>(|2-/⊢)
Uriel
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.