でこぼこに乗る


18

あなたの仕事は、少なくとも長さ2の正の整数のリストを受け取り、それらが「ジグザグ」であるかどうかを判別するコンピュータープログラムまたは関数を作成することです。シーケンスがジグザグになっているのは、数字が交互に前後の数字よりも大きい場合と小さい場合だけです。たとえば、とはジグザグですが、とはありません。[ 4 2 3 0 1 ] [ 1 2 0 0 3 1 ] [ 1 2 3 1 ][12032][42301][120031][1231]

決定のために、可能性ごとに2つの異なる一貫した値(ジグザグではなくジグザグ)のいずれかを出力する必要があります。

プログラムまたは関数のコードポイントもジグザグそのものでなければなりません。これは、一連のコードポイントを取得するとき、ジグザグになるはずであることを意味します。

これはため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。


1
コードポイント内の各ジグザグではないペナルティは、さまざまな言語が参加できるようにするための別のアプローチかもしれません。
ngm

5
@ngm私は同意しません。ボーナス/ペナルティを導入すると、ユーザーは複数の可能な答え(たとえば、短いもの+ペナルティvs長い+ペナルティなし)を思いつくので、回答プロセスが遅くなります。さらに、与えられるペナルティの量は非常にarbitrary意的であり、スコアリングプロセスがその目的ではないことを意味します。
ジョンファンミン

2
Unicodeコードポイントまたは使用しているエンコードのコードポイントを使用する必要がありますか?
デニス

1
@Dennis使用しているエンコーディングのコードポイント。
小麦ウィザード

2
@Dennisはもちろん、技術的には事実です。ただし、コードゴルフのボーナスを獲得することは、主要な課題を損なうため、理想的ではないことを既に確立しています。この場合のペナルティはマイナスのボーナスになります。
ジョンファンミン

回答:


7

ゼリー、5バイト

IṠIỊẸ

(ジグザグ)または1(ジグザグではない)を返します。01

コードポイントがあるゼリーコードページ[7320573176174]

オンラインでお試しください!

使い方

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

Haskell、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ジグザグ要件のために最後から2番目が追加されました。

説明:

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主に2つのコードポイントの増分があります。
スンダ

1
ああ、私はその要件を完全に忘れていました。それは答えをより印象的にします!
ルイスメンドー

4

パイソン2225の 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: ])])` )")

オンラインでお試しください!

でこぼこのアルゴリズムの功績はこの答えになります

inputprintexecdeflambda私は唯一しまったので、でこぼこしていないeval上に格納され、左e
に配置制限バイパスへ2主な方法、あります"+"非でこぼこペアの間、私は(かつてのために選んだそれぞれの使用のために短いですが、しかし、それが必要になるreplace(' ',''))複数のバイトをもたらす
のでprint、でこぼこされていない私はそれを直接使用することができない、それは私が内側にそれを使用することができないfuncionないのでeval()、私が使用していたので、input(result)出力に結果を


いいね の代わりに' ' * 0使用でき' ' [1: ]ます。
ヤコブ

を使用input(text)してSTDOUTに書き込むことができます。
デニス

4

K(ngn / k)、23バイト

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

オンラインでお試しください!


なぜスペースが必要ですか?
ザカリー

@Zacharýkコード自体はそれらなしではでこぼこではないだろう
-ngn

それはどういう意味ですか?スペースを必要とするのはngn / kだけですか
ザカリー

3
@Zacharýこのチャレンジは制限されたソースであり、制限はコードがジグザグでなければならないということです。
エリックアウトゴルファー

おっと、それも忘れました。
ザカリー

3

オームV2、5つのバイト

δyδ½Å

オンラインでお試しください!

[13112113116165]

使い方

δ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バイトになります
シャギー

ああ、私はこれが制限されたソースであることを知りませんでした。私の悪い
カミルドラカリ

@KamilDrakari、心配しないでください。あなただけではなかったようです。
シャギー


1

Perl 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

JavaScript(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ジグザグです!
ニール

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.