나는 무의미한 배열입니까?


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]-> 참
[1, 2, 3, 4, 5, 6, 7, 8, 9, 8]-> 참
[3, 3, 3, 3, 3, 3, 3]-> 참
[3, 4, 4, 4, 3, 3, 3, 4, 4, 4]-> 참
[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]-> 거짓

나는 값을 사용 true하고 false.


진실 / 거짓 값은 실제로 선택한 언어에서 진실 / 거짓이어야합니까?
마틴 엔더

1
@MartinEnder 두 개의 고유하고 일관된 값. PS 죄송 후반 응답

2
텍스트에는 정수 배열이 제공되지만 양의 정수 배열 만 중요하지 않다고 말합니다. 음의 정수 배열을 준비해야합니까?
Mark S.

답변:


24

젤리 , 3 바이트

IỊẠ

온라인으로 사용해보십시오!

어떻게?

젤리에게 완벽한 도전.

IỊẠ 풀 프로그램.

I 증분; 연속 요소의 차이를 얻으십시오.
 Ị 중요하지 않은; abs (숫자) ≤ 1을 반환합니다.
  Ạ 모두; 모든 요소가 진실이면 1을, 그렇지 않으면 0을 반환합니다.

2
P모든 차이가 있다면 있기 때문에, 일 것하지 않을 1는 출력을 거라고 1, 그 중 하나는하지만 인 경우 0는 출력 것 0? 그리고 하나의 차이점이 5있었지만 하나의 차이점이 0여전히 0있었습니까?
Tas

1
"양의 정수"요구 사항은 어떻습니까?
3D1T0R

19

자바 스크립트 (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 Ah 네, 입력에는 적어도 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.
Steven H.

5

양성자 , 41 바이트

a=>all(-2<a[i]-a[i+1]<2for i:0..len(a)-1)

온라인으로 사용해보십시오!

Xcoder 덕분에 -16 바이트 Mr. Xcoder 덕분에
-2 바이트
-6 바이트



@ Mr.Xcoder 공간 <2 for이 생략 될 수 있다고 생각합니다 .
Jonathan Frech

@JonathanFrech 공간이 없습니까?
Mr. Xcoder

@ Mr.Xcoder 오 예, 나는 그 미친 기능 체인으로 무엇을 생각하고 있는지 모르겠습니다. 감사! : D
HyperNeutrino


5

C # (. NET 코어) , 51 45 44 + 18 바이트

Jeppe Stig Nielsen 덕분에 -1 바이트

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 감사합니다, 감사합니다!
Grzegorz Puławski

5

펄 6 , 25 바이트

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

온라인으로 사용해보십시오!

이것은 꽤 읽을 수 있어야합니다. 여기서 덜 분명한 것은 zip 연산자 Z가 더 짧은 목록이 소진되면 오른쪽에서 목록의 첫 번째 요소를 제거하고 압축을 중지하고 .[]Zen 슬라이스라고 하는 빈 첨자 전체 목록을 제공한다는 것입니다. .skip첫 번째 요소가없는 목록을 반환합니다.


이 두 공간이 정말로 필요한가요?
Jonathan Frech

@JonathanFrech : 아마 맞지 않을 것입니다. 또한 나는 이것이 .rotate여기에 필요하지 않다는 것을 깨달았습니다 .
Ramillies

도대체 왼쪽도 제거 할 수 있습니다. 공백이 필요한 곳과 그렇지 않은 곳을 정말로 이해하지 못합니다.
Ramillies

당신은 쓸 수 -2<대신 -1≤하고 <2대신 ≤1더 4 바이트를 저장합니다.
Sean

어, 나는 잘못된 방식으로 2>...>-2해석을 피하기 위해 실제로 비교 를 반대로해야한다고 생각합니다 <.
Sean




3

PowerShell , 62 바이트

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

온라인으로 사용해보십시오!

PowerShell을은없는 .map거나 .some그래서 여기에 우리가 개별적으로 델타를 확인하고, 또는 이와 유사한 명령을 사용합니다.

입력 을 받아 첫 번째 요소 $a$l동일하게 설정 합니다. 그런 다음 차이 가 범위 인 $a각 요소를 반복하여 추출 합니다 . 그런 다음 현재 요소와 동일하게 설정 합니다. 이전 이웃 사이의 델타가 1이고 그래서 지금 우리가 요소의 컬렉션을 가지고 우리는 가지고 그와 그것의 여부를 확인 연간받는 전체 배열의 형태가됩니다. 그렇다면 모든 델타는 1 이하이므로 중요하지 않은 배열입니다. 해당 부울 결과는 파이프 라인에 남아 있으며 출력은 암시 적입니다.|?{...}$_-$l-in1,0,-1$l.count-eq.count


매개 변수를 제거하고 다음을 수행하여 1 바이트를 절약 할 수 있습니다.$l=($a=$args)[0]
briantist

@briantist 그래도 작동하지 않습니다. 예를 들어. $l제안에서 전체 입력 배열로 설정 되어 있기 때문 입니다.
AdmBorkBork

TIO에서 인수를 제공하는 방식을 변경하면됩니다 (각 요소는 별도로 지정해야 함). 지금 가지고있는 방식의 첫 번째 요소 $args는 전체 배열입니다.
briantist

그 기분이 건방진 ...
AdmBorkBork

실제로 이것이 올바른 사용법이라고 생각합니다 $args. 공백으로 구분 된 일련의 인수를 사용하여 스크립트 또는 함수를 호출 한 경우에 별도의 요소로 제공되며 $argsTIO의 경우이를 에뮬레이트하는 방법입니다. 나는 개인적으로 그것을 여러 번 전에 그렇게 사용했지만, 각자 자신에게 :)
briantist



2

MATL ,6 5 바이트

d|2<A

주세페 덕분에 -1 바이트

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인


MATL에서는 값이 0 인 배열이 거짓이므로 메타 합의에 따라d|2< 대신 사용할 수 있다고 생각 합니다.
주세페

1
또는 d|2<A원래의 답변에 더 가까운 것을 위해.
주세페

1
@Giuseppe 불가능 : 진실 / 거짓 값은 명확하고 일관되어야 합니다.
Mr. Xcoder

@ Mr.Xcoder "진실에 대한 모든 1의 배열"과 "거짓에 대한 적어도 하나의 0을 포함하는 배열"은 독특하고 일관성이 없습니까?
주세페

2
@Giuseppe " 진실을 위한 모든 1의 배열"과 "거짓을위한 적어도 하나의 0을 포함하는 배열"은 독특하고 일관성이 없습니까? -아니요, 일관성이 없기 때문에 허용되지 않습니다.

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 솔루션의 포트입니다.


2

C, 61 56 바이트

5 바이트를 절약 한 @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 사양의 일부가 아니므로 작동이 보장되지 않습니다. 또한 특정 최적화 컴파일러 플래그로 중단 될 수 있습니다.
Jonathan Frech

2
@ scottinet 아 죄송합니다. 동의 한 규칙에 따라 솔루션의 변수를 단순히 할당 할 수 없으므로 허용되지 않을 것이라고 생각합니다. 예를 들어, 함수 인수 대신 전역 정의 변수를 사용하는 것도 허용되지 않습니다. 당신의 임무는 모든 기능을 갖춘 프로그램 / 기능을 작성하는 것입니다.
Jonathan Frech

1
@JonathanFrech 언어는 여기에서 구현에 의해 정의되므로 일관된 결과를 생성하는 컴파일러가 있으면 공식적으로 UB 인 경우에도 대답이 유효합니다.
Quentin

2

클로저, 35 바이트

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

얼마나 깔끔한가요?


2

TI 기본, 6 7 바이트

prod(2>abs(ΔList(Ans

또는, 에러가 유효한 반환 값으로 간주되는 경우 5 바이트 ( ERR:ARGUMENT중요하지 않은 경우 반환 ERR:DOMAIN)

augment(sin⁻¹(ΔList(Ans

1
이 값은 abs(ΔList(Ans{또는 {5,3,1} 또는 테스트 사례 {3,4,5,6,7,8,7,5}와 같이 1 이상 떨어집니다) 감지되었습니다.
Misha Lavrov

@MishaLavrov 감사합니다, 당신이 맞아요!
Oki

1

자바 스크립트 (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)
Bálint

1

Pyth, 7 바이트

._I#I.+

테스트 스위트

참 / 거짓을 반환합니다.

설명:

     .+ 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

자바 (OpenJDK 8) , 60 바이트

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

온라인으로 사용해보십시오!

  • @Nevay 덕분에 5 바이트!

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, 감사합니다! 평소와 같이 완벽한 골프 ;-)
Olivier Grégoire

어떻게 작동하는지 설명해 주실 수 있습니까? 감사합니다!
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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.