友達とキューイング


16

遊園地で最高の芽、ジムと一緒にいて、お気に入りの乗り物が見えてくると、あなたとジムは視線を交換します。当然、列に並ぶために競争します。残念ながら、彼はあなたがゴルファーであり、彼が本当のスポーツをしているので勝ちます(ごめんなさい)。実際、あなたはかなり遅れており、あなたとジムはx人によって隔てられています。ラインが長さでnあり、あなたが後ろにいて、ラインがすべてのj人をジグザグに動かしていると仮定すると、あなたとジムは同じ列にいて、チャットすることができます(1行だけ離れています)?

入力

3整数

  • n-線の長さ。この数は、常によりも大きいかまたは等しいであろうjと形になり、正の整数(待ち行列の行数)です。y * jy
  • j-行の1行の人数(1行の列の数)。この数は常に0より大きくなります。
  • x-あなたとジムの間の人々の数0 <= x < 2j - 1。ヒント:この数値が奇数の場合、出力は空になっているはずです。

出力

Jimがあなたと同じ列にいる行の整数位置のリスト。
1これらの整数は、回答で指定する限り、0または1のインデックスを付けることができます。
2これらの整数は、回答で指定している限り、位置0または位置n-1で始まると仮定できます。

キューイングの例
この例では、入力はになりますn = 9, j = 3, x = 0。出力は2, 5、Jimと同じ列にいるときの位置が2または5であるためです。

テストケース

[9, 3, 0] -> [2, 5]
[12, 3, 0] -> [2, 5, 8]
[9, 3, 1] -> []
[9, 3, 2] -> [1, 4]
[14, 7, 10] -> [1]
[24, 4, 6] -> [0, 4, 8, 12, 16]

得点

これはであるため、最短回答(バイト単位)が優先されます。


4
私はこれに対するいくつかの興味深い解決策を見るのを待ち望んでいます!(悪い駄洒落と単語の不適切な使用も申し訳ありませんが、私を判断しないでください:P)
-HyperNeutrino

1
空の配列の代わりに偽の値を返すことはできますか?
Rɪᴋᴇʀ

@Rikerそれを拒否する理由はないと思う。それのために行く
ポケ

回答:


9

パイソン245の 41 40 37バイト

lambda n,j,x:range(j-x/2,x%2or n-x,j)

かなり簡単な解決策です。パターンをすばやくスキャンして、パターンを見つけました。1インデックス付き、1はキューの最後にあります。

-3バイトを回避し、値の代わりに配列を使用して-4バイト@DeadPossum
からのインスピレーションのおかげで、 3 and進数または配列セレクターの代わりに
-3バイトを使用しorて、逆の順序で切り替えて-3バイト 1インデックスが原因でのみ機能します

また、バツ印の4は、4のすべてで4です。

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


笑、あなたは私の前に:)私のバージョンがあり、わずか14分を計上し3バイトだけ短く:lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
デッドポッサム

@DeadPossumいいね。私はそれよりも1バイト短い別のソリューションを持っています、笑
-HyperNeutrino

範囲の2番目の引数に誤りがありました。それはすべきではないn-j+1ので、lambda n,j,x:x%2-1and range(j-x/2,n-x,j)40バイトの合計より1分短くある
デッドポッサム

@DeadPossum待って、空の配列の代わりに偽の値を返すことは許されましたか?
ハイパーニュートリノ

3
@FelipeNardiBatistaそれは「1-indexed」の意味です、ところで。
Rɪᴋᴇʀ

2

ピップ22 21バイト

20バイトのコード、-pフラグの場合は+1 。

c%2?lv-c/2+b*\,a/b-1

受け取りnjおよびxコマンドライン引数として。0から始まり、位置0から始まります。オンラインで試してください!

説明

これはもう少しわかりやすいので、私のオリジナルの22バイトバージョンです。

                       a, b, c are cmdline args; l is [] (implicit)
c%2?                   Test c mod 2
    l                  If it's 1 (truthy), return empty list; else:
                a/b-1  Number of rows in the queue minus 1
               ,       Range(^)
             b*        Multiply each element by b
     b-1-c/2+          Add (b-1)-c/2 to each element
                       Output in [1;2;3] format (implicit, -p flag)

式は、のパターンを観察することによって得ましたn=9j=3

x Output
0 [2;5]
2 [1;4]
4 [0;3]

我々が取る場合はx/2012)、からそれを減算しj-1210)、およびにあることを追加し[0;3]、我々はすべての場合に正しい結果を得ることができます。


1

Java 8ラムダ、101バイト

(n,j,x)->{int[]i=new int[n/j-1];int c=0,k=j-x/2;for(;k<n-x;k+=j)i[c++]=k;return x/2==0?i:new int[0];}

私のPythonの答えのほぼ直接の移植。ただし、Javaには範囲は存在しません。


0

Haskell、43バイト

(n#j)x|odd$round x=[]|m<-j-x/2=[m,m+j..n-x]

HyperNeutrinoからのPython回答からほとんど直接移植

より適切にフォーマットされたコード:

f n j x |odd$round x = []
        |otherwise   = let m=j-x/2 in [m,m+j..n-x]

編集:それがワンインデックスされたことを言及するのを忘れた


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.