울퉁불퉁 한 타고


18

당신의 임무는 길이가 2 이상인 양의 정수 목록을 취하고 그것들이 "지그재그"인지를 결정하는 컴퓨터 프로그램 또는 함수를 작성하는 것입니다. 순서는 숫자가 앞의 숫자보다 크고 작은 숫자로 번갈아 나타나는 경우에만 지그재그입니다. 예를 들어 및 은 지그재그이지만 및 없습니다.[ 4 , 2 , 3 , 0 , 1 ] [ 1 , 2 , 0 , 0 , 3 , 1 ] [ 1 , 2 , 3 , 1 ][1,2,0,3,2][4,2,3,0,1][1,2,0,0,3,1][1,2,3,1]

결정을 위해 각 가능성 (지그재그가 아닌 지그재그)에 대해 서로 다른 두 가지 일관된 값 중 하나를 출력해야합니다.

프로그램 또는 함수의 코드 포인트는 지그재그 자체 여야합니다. 이것은 일련의 코드 포인트를 취할 때 지그재그 여야 함을 의미합니다.

이것은 이므로 바이트 수가 적을수록 답이 바이트로 표시됩니다.


1
코드 포인트에서 각 비 지그재그에 대한 벌점은 더 다양한 언어가 참여할 수 있도록하는 또 다른 접근법 일 수 있습니다.
ngm

5
@ngm 동의하지 않습니다. 보너스 / 페널티를 도입하면 사용자는 여러 가지 가능한 답변 (예 : 짧은 1 + 페널티 vs 긴 + 페널티 없음)을 보게되어 응답 프로세스가 느려집니다. 또한 주어진 페널티 금액은 매우 임의적이므로 점수 프로세스가 그렇게 목표가 아님을 의미합니다.
JungHwan Min

2
유니 코드 코드 포인트 또는 사용중인 인코딩의 코드 포인트를 가져와야합니까?
Dennis

1
@Dennis 사용중인 인코딩의 코드 포인트입니다.
밀 마법사

2
@Dennis는 물론 기술적으로도 마찬가지입니다. 그러나 우리는 이미 코드 골프에 대한 보너스 보너스 가 주요 도전에서 벗어나기 때문에 이상적이지 않다는 것을 이미 확립 했습니다. 이 경우 페널티는 부정적인 보너스입니다.
JungHwan Min

답변:


7

젤리 , 5 바이트

IṠIỊẸ

(지그재그) 또는 (지그재그 아님)을 반환 합니다.101

코드 포인트는 Jelly 코드 페이지 에서 입니다 .[73,205,73,176,174]

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

작동 원리

IṠIỊẸ  Main link. Argument: A (array)

I      Increments; compute the forward differences of A.
 Ṡ     Take their signs.
       A is zigzag iff the signs are alternating.
  I    Take the increments again.
       Alternating signs result in an increment of -2 or 2.
       Non-alternating signs result in an increment of -1, 0, or 1.
   Ị   Insignificant; map each increment j to (|j| ≤ 1).
    Ẹ  Any; return 0 if all results are 0, 1 in any other case.

4

하스켈 , 87 바이트

f(a:b:c:d)|(>)a b,b<c=f$b:c:d |(<)a b,b>c=f$b:c:d |1>0=1>12
f[a ] =1<12
f(a:b:_)= a/= b

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

나는 Haskell 답변의 관점에서 공을 굴리기를 원했습니다. 나는 이것을 개선하는 방법을 아직 볼 수 없지만 그것을 할 수 있다고 확신합니다. 사람들이 여기서 무엇을 할 수 있을지 기대하고 있습니다.


4

MATL , 9 바이트

dt?ZSd]pA

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

내 첫 MATL 프로그램! p지그재그 요구 사항에 대해 두 번째 로 추가되었습니다.

설명:

d    %take the difference between successive elements of input
t    %duplicate that
?    %if that is all non-zero
  ZS %take the sign of those differences (so input is all `-1`s and `1`s now)
  d  %take the difference of that (so if there are successive `1`s or `-1`s, this will have a 0)
]    %end-if
p    %take the product of topmost stack vector (will be 0 if either the original difference or 
     % the difference-of-signs contained a 0)
A    %convert positive products to 1 (since OP specifies "you should output one of two different consistent values for each possibility ")

감사합니다! 예, 대답에서 언급했듯이 코드 자체가 지그재그로 이동해야하기 때문에 지그재그 요구 사항에만 추가했습니다. ]분명히 때문에, 대문자와 소문자 사이에 살고 d]]A모두 사용할 수 없습니다되어 감소율을 할 것입니다. 따라서 p둘 사이에 코드 포인트 증분이 주로 있습니다.
sundar-복원 모니카

1
오, 나는 그 요구를 완전히 잊었다. 답변이 더 인상적입니다!
Luis Mendo

4

파이썬 (2) , 225 (223) 161 (139) 바이트

Jakob 덕분에 -2 바이트
Dennis와 덕분에 -62 바이트

e={eval }.pop()
p ="i"+"n"+"p"+"u"+"t ( "
s=e(p +")")
e(p +"` a"+"l"+"l([(x<y>z)+(x>y<z)f"+"o"+"r x,y,z i"+"n zip(s,s [1: ],s [2: ])])` )")

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

울퉁불퉁 한 알고리즘에 대한 크레딧은 이 답변으로 이동합니다

input, print, exec, def하고 lambda나는 단지있어 그래서 울퉁불퉁하지 않습니다 eval에 저장되어있는, 왼쪽 e
에 배치 제한 우회 2 개 가지 방법이 있습니다 "+"또는 비 울퉁불퉁 한 쌍 사이에, 내가 (이전에 대한 거부 각 사용하기에 짧은,하지만 그것은 필요 replace(' ','')) 이상의 바이트의 결과
때문에 print그것이 내가 내 사용할 수없는 funcion 아니기 때문에 울퉁불퉁하지 않는 내가 직접 사용할 수 없습니다, 그리고 eval()내가 사용했다, 그래서 input(result)출력 결과에


좋은. 대신 ' ' * 0사용할 수 있습니다 ' ' [1: ].
Jakob

input(text)STDOUT에 쓰는 데 사용할 수 있습니다 .
Dennis

4

K (ngn / k) , 23 바이트

{*/ 0 >1_ *':1_ -': x }

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


공간이 왜 필요한가요?
Zacharý

@ Zacharý k 코드 자체는 그들 없이는 울퉁불퉁하지 않을 것입니다
ngn

그게 무슨 뜻 이니? 공간을 필요로하는 것은 단지 ngn / k입니까
Zacharý

3
@ Zacharý이 과제는 제한된 소스 이며, 코드는 지그재그 여야한다는 제한이 있습니다.
Outgolfer Erik

이것도 잊어 버렸습니다.
Zacharý

3

옴 v2 , 5 바이트

δyδ½Å

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

[131,121,131,16,165]

작동 원리

δyδ½Å – 전체 프로그램 / 단일 인수 블록.
δy – 입력 델타의 부호 
  δ – 부호의 차이. 에 대해 2 또는 -2의 시퀀스 결과
        부호가 번갈아 표시되는 울퉁불퉁 한 배열은 -1-1 = -2 또는 1-(-1) = 2입니다.
    Å – 모든 요소가 다음과 같은 경우에 진실한 결과를 산출하는지 확인
   ½ – 절반.

2

Japt -! , 16 14 바이트

글쎄, 이것은 예쁘지 않지만 나는 그것이 작동하는 것이 행복합니다!

true지그재그 출력 또는 false그렇지 않은 경우.

ä'- m'g ä'a èÍ

시도 해봐

코드 포인트는 [228,39,45,32,109,39,103,32,228,39,97,32,232,205]위의 링크에 테스트로 포함되어 있습니다.


설명

                   :Implicit input of array
ä'-                :Consecutive differences
    m'g            :Map signs
        ä'a        :Consecutive absolute differences
             Í     :Subtract each from 2
            è      :Count the truthy (non-zero) elements
                   :Implicitly negate and output resulting boolean.

@KamilDrakari, 일반적으로 당신은 옳을 것입니다, 그러나 슬프게도, 그들은 도전 의 제한된 소스 요구 사항 을 충족시켜야합니다 . 그렇지 않으면 이것은 10 바이트 일 수 있습니다 .
얽히고 설킨

오, 나는 이것이 제한된 출처라는 것을 알지 못했습니다. 나의 나쁜
Kamil Drakari

@KamilDrakari, 걱정하지 마십시오. 당신이 유일한 사람은 아닌 것 같습니다.
얽히고 설킨


1

펄 6 , 61 바이트

{ [*] ($_[{1…*} ] Z<@$_)Z+^ ($_[{1…*} ] Z>@$_[{2…*} ])}

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

코드 포인트는 다음과 같습니다.

(123 32 91 42 93 32 40 36 95 91 123 49 8230 42 125 32 93 32 90 60 64 36 95 41 90 43 94 32 40 36 95 91 123 49 8230 42 125 32 93 32 90 62 64 36 95 91 123 50 8230 42 125 32 93 41 125)

그리고 네, 거기에 유니 코드 문자가 있습니다. 이것은 약간의 공백과 중괄호가 혼합 된 원래의 솔루션입니다.


1

05AB1E , 10 바이트

¥DÄ/¥(Ä2QP

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

설명

¥           # calculate deltas of input
 DÄ/        # divide each by its absolute value
    ¥       # calculate deltas
     (      # negate each
      Ä     # absolute value of each
       2Q   # equals 2
         P  # product

코드 포인트는 다음과 같습니다 [165, 68, 196, 47, 165, 40, 196, 50, 81, 80]


1

자바 스크립트 (ES6), 62 60 바이트

a=> a.map(n=> e&=!~(p | q)| q <(q=p)^ p <(p=n), e=p=q=~ 0)|e

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

코드 포인트 :

61 3d 3e 20 61 2e 6d 61 70 28 6e 3d 3e 20 65 26
3d 21 7e 28 70 20 7c 20 71 29 7c 20 71 20 3c 28
71 3d 70 29 5e 20 70 20 3c 28 70 3d 6e 29 2c 20
65 3d 70 3d 71 3d 7e 20 30 29 7c

2
다행히 map지그재그입니다!
Neil

0

05AB1E , 8 바이트

¥.±¥Ä2/P

1.0지그재그 및 지그재그 0.0가 아닌 시퀀스에 대해 반환 합니다 .

코드 포인트는 [164,108,176,164,195,2,109,25]05AB1E 코드 페이지 .

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

설명:

¥           # Take the deltas of the (implicit) input-list
            #  i.e. [1,2,0,3,2,3] → [1,-2,3,-1,1]
          # Calculate the sign for each of them (-1 if a<0; 0 if 0; 1 if a>0)
            #  i.e. [1,-2,3,-1,1] → [1,-1,1,-1,1]
   ¥        # Calculate the deltas of those
            #  i.e. [1,-1,1,-1,1] → [-2,2,-2,2]
    Ä       # Take the absolute value of each
            #  i.e. [-2,2,-2,2] → [2,2,2,2]
     2/     # Divide them by 2
            #  i.e. [2,2,2,2] → [1.0,1.0,1.0,1.0]
            # (`;` {halve} would have been shorter, but doesn't comply to the challenge)
       P    # Take the product of the list resulting in either 1.0 or 0.0
            #  i.e. [1.0,1.0,1.0,1.0] → 1.0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.