ウサギのようにスキップ!

Erik the Outgolfer 09/12/2017. 30 answers, 2.887 views
code-golf array-manipulation

任意の合理的な形式で非負の整数のリストが与えられたら、それを繰り返して、あなたが踏むすべての整数の要素をスキップします。


ここに実例があります:

[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | []
 ^ First element, always include it
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0]
    ^ Skip 0 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1]
          ^ Skip 1 element
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2]
                   ^ Skip 2 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2, 3]
Skip 3 elements; you're done 

もう一つの実例ではなく、すべてが等しい - デルタ:

[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | []
 ^ First element, always include it
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4]
                ^ Skip 4 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3]
                            ^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3]
                                        ^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3, 4]
Skip 4 elements; you're done 

範囲外の例:

[0, 2, 0, 2, 4, 1, 2] | []
^ First element, always include it
[0, 2, 0, 2, 4, 1, 2] | [0]
    ^ Skip 0 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2]
             ^ Skip 2 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2, 4]
Skip 4 elements; you're done (out of bounds) 

ルール

  • あなたはこれらのものの中で退屈なチートを使用することはできません、彼らは挑戦退屈で興味深いものにします。
  • 最終結果のみを返す/印刷する必要があります。 STDERR出力は無視されます。
  • 入力を任意のベースの文字列として取得することはできません(最初のケースの場合は "0102513162"など)。
  • 入力には左から右の順序を使用する必要があります。
  • 作業中の例のように、境界外に出ると、そうでない場合と同様に実行が終了します。
  • 0の要素をスキップするには0を使用します。
  • 入力として空のリスト( [] )が与えられた場合、 []を返す必要があります。

テストケース

[]                                                     => []
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]                     => [0, 1, 3, 7]
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]                   => [5, 2, 1, 0]
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2]                         => [0, 1, 2, 3]
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] => [4, 3, 3, 4]
[0, 2, 0, 2, 4, 1, 2]                                  => [0, 2, 4] 

これはですので、最短の回答が勝ちます!

5 Comments
Erik the Outgolfer 07/28/2017
サンドボックス (2k +ユーザーのみ)
3 Shaggy 07/28/2017
うん、ちょうどそれを見つけた。 /眼鏡をかける
2 Rod 07/28/2017
おそらくレプラコーン¯\ _(ツ)_ /¯
1 Roman Gräf 07/28/2017
私の配列の末尾に0を入れても構いませんか? 私を〜18バイト節約します
1 Erik the Outgolfer 07/28/2017
@RomanGräf申し訳ありませんが、あまりにもあいまいです。出力に0が続く場合があるからです。

30 Answers


Rod 07/28/2017.

Python 2、36バイト

 f=lambda x:x and x[:1]+f(x[x[0]+1:]) 

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

4 comments
Mr. Xcoder 07/28/2017
私は外人になることを期待していましたが、それほど悪くはありません:)
Erik the Outgolfer 07/28/2017
x[:1]代わりにx[:1] x[0]できませんか?
Rod 07/28/2017
@EriktheOutgolferはい、リストにする必要があるので、 [x[0]]
Erik the Outgolfer 07/28/2017
@Rodあなたはx[:1]とにかく任意のバイトを保存しません... f=lambda x:x and[x[0]]+f(x[x[0]+1:])

Mr. Xcoder 08/19/2017.

Python 2、49 46 * 41バイト

4を抜けてもまだ普通の4 :(

* -3 thanks to @ASCII-only

 l=input()
while l:print l[0];l=l[l[0]+1:] 

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

チャットで許可されたOPとして、改行で区切られた結果を出力します。 私はそれがnon-recursive full programとして短くなることはないと思います。


これはどのように作動しますか?

  • l=input() - 標準入力からリストを読み込みます。

  • while l: - 空リストがPythonで偽であり、リストが空になるまでループするという事実を悪用します。

  • print l[0]; - リストの最初の要素を出力します。

  • l=l[l[0]+1:] - 「ウサギのようにスキップする」 - 最初のl[0]+1をリストから削除します。

例を見てみましょう

入力としてリスト[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0] 5,1,2,3,4,5,2,1,2,1,0,0]が与えられた場合、コードは以下を実行する(上記の説明に従って) -配列: 5 、最初の6をトリム: [2, 1, 2, 1, 0, 0] 。 次に、 2を印刷し、最初の3: [1,0,0]をトリムします。 同様に、 1を出力し、最初の2をトリミングし、 [0]を取得します。 もちろん、 0が表示され、プログラムは終了します。

1 comments

w0lf 07/28/2017.

ハスケル、 29 27 26バイト

 j(x:y)=x:j(drop x y)
j x=x 

Zgarbに1バイトのおかげで保存されました。

オンラインで試してみてください。

2 comments
Zgarb 07/28/2017
2行目のf x=xは1バイトを保存します。
w0lf 07/28/2017
@ Zgarbクール、ありがとう!

Adnan 07/28/2017.

05AB1E10 9バイト

[¬Dg>#=ƒ¦ 

05AB1Eエンコーディングを使用します。 オンラインで試してみてください!

1 comments
Magic Octopus Urn 07/28/2017
ええ、それは私が思っていたよりも良い方法です。

Martin Ender 07/28/2017.

Mathematica、 46 44バイト

SequenceCases[#,NO 

代替案:

SequenceCases[#,NO 
1 comments
Mr.Wizard 07/28/2017
うわー、それは素晴らしいです!

Johan Karlsson 07/28/2017.

JavaScript(ES6)、 42 39 35バイト

a=>a.map((n,i)=>a.splice(i+1,n))&&a 

 let f = 
a=>a.map((n,i)=>a.splice(i+1,n))&&a

console.log(f([]))                                                     // => []
console.log(f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))                     // => [0, 1, 3, 7]
console.log(f([5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]))                   // => [5, 2, 1, 0]
console.log(f([0, 1, 0, 2, 5, 1, 3, 1, 6, 2]))                         // => [0, 1, 2, 3]
console.log(f([4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2])) // => [4, 3, 3, 4]
console.log(f([0, 2, 0, 2, 4, 1, 2]))                                  // => [0, 2, 4] 

古いソリューション39バイト

a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r 

-3 bytes thanks to @ThePirateBay

1 comments
ThePirateBay 07/28/2017
39バイトa=>a.map(n=>i--||r.push(i=n),r=i=[])&&r

TheLethalCoder 07/28/2017.

C#、68バイト

 a=>{for(int i=0;i 

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

フルバージョン/フォーマットバージョン:

 namespace System
{
    class P
    {
        static void Main()
        {
            Action> f = a =>            {
                for (int i = 0; i < a.Count; i += a[i] + 1)
                    System.Console.Write(a[i] + " ");
            };

            f(new Collections.Generic.List() { });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
} 

リストを返すのは107バイトです。

 a=>{var l=new System.Collections.Generic.List();for(int i=0;i 
3 comments
2 TheLethalCoder 07/28/2017
なぜ誰かがこれを落としたのですか?
Thomas Ayoub 07/31/2017
あなたのスコアを丸めて完璧な5kを作るには?
TheLethalCoder 07/31/2017
@ThomasAyoub私たちはそれがOCDはいの人だったと仮定することができます。

Zgarb 07/28/2017.

ハスク8 6バイト

←TU¡Γ↓ 

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

レオのおかげで-2バイト(全く新しいソリューションアイデア)!

説明

私はリストパターンマッチ関数Γを使用しています。 関数fとhead xとtail xsリストをとり、 fxxs適用します。 リストが空の場合、 Γは型と一致するデフォルト値を返します。この場合は空のリストです。 fをとってとするとxsからx要素を落とします。 この関数は反復され、結果の要素はリストに集められます。

←TU¡Γ↓  Implicit input, e.g. [0,2,0,2,4,1,2]
    Γ↓  Pattern match using drop
   ¡    iterated infinitely: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[],[],[],...
  U     Cut at first repeated value: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[]]
 T      Transpose: [[0,2,4],[2,0,1],[0,2,2],[2,4],[4,1],[1,2],[2]]
←       First element: [0,2,4] 
5 comments
Leo 07/28/2017
あなたはøのデフォルト値を落とすことができます、そして、すべてはまだ魔法のように動作します:)
Leo 07/28/2017
または、より少ないバイトでは、 tio.run/##yygtzv7//1HbhJDQQwvPTX7UNvn////RBjpGOiBsomOoYxQLAA
Zgarb 07/28/2017
@レオああ、それは賢いです!
Erik the Outgolfer 07/28/2017
なぜあなたはこれをCWでしたか?
Zgarb 07/28/2017
@ErikTheOutgolferそれは間違いだった(私は私の電話の上にあり、明らかに何かを偶然押し込んだ)。 私はそれを取り消そうとしています...

Ruud 07/28/2017.

Python 2、59 55バイト

 l=input()
i=0
while l[i:]:i+=1;l[i:i+l[i-1]]=[]
print l 

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

2 comments
1 Rod 07/28/2017
del l[i:i+l[i-1]]代わりにdel l[i:i+l[i-1]] l[i:i+l[i-1]]=[]

Dave 07/28/2017.

Pyth、22バイト

VQ aY.(Q0VeY .x.(Q0 ;Y 

不要なバイトを削除

4 comments
Erik the Outgolfer 07/28/2017
私はそこに23バイトを見る。
Dave 07/28/2017
Typo :)申し訳ありません...
3 Wheat Wizard 07/28/2017
なぜあなたが下票を持っているのか分かりません。 あなたの回答を修正したときに、これが自動的に投票を停止する可能性があります。 この自動downvoteの理由は混乱してひどいですが、あなたの答えがヒューリスティックに基づいて "低品質"であるとシステムが判断した場合に起こります。 誰かがあなたの答えを気に入らなかった可能性もありますが、現時点では何も間違っているとは思わないので、なぜそうなるのか分かりません。
isaacg 07/31/2017
あなたがPythを使ってうれしいです!

Rod 07/28/2017.

Python 2,60 42バイト

Luis Mendoに感謝して-18バイト

 x=input()
i=0
while 1:print x[i];i+=1+x[i] 

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


Martin Ender 07/28/2017.

網膜 、36バイト

バイト数は、ISO 8859-1エンコーディングを想定しています。

.+
$*
((1)*¶)(?<-2>1*¶)*
$1
%M`.
0$ 

入力と出力は改行で区切られ、後続の改行で区切られます。

オンラインで試してみてください! (便利なテストスイートを提供するために改行の代わりにコンマを使用します)。


Riley 07/28/2017.

Brain-Flak 、64バイト

([]){{}(({})<>)<>{({}[()]<{}>)}{}([])}{}<>([]){{}({}<>)<>([])}<> 

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

([]){{}                          ([])}{}                         # Until the stack is empty
       (({})<>)<>                                                # Copy TOS to off stack
                 {({}[()]<{}>)}{}                                # Pop TOS times
                                        <>([]){{}({}<>)<>([])}<> # Reverse off stack 
2 comments
6 DJMcMayhem 07/28/2017
うんざり! 私は解決策を書いて、それを投稿するためにスクロールしましたが、バイトごとにexact同じソリューションを書いていました。 ({}[()]<{}>) vs ({}<{}>[()])ような細部も同じでした! なんて偶然!
2EZ 4RTZ 07/28/2017
@DJMcMayhemはすべての名声XDを盗む

user202729 07/28/2017.

Mathematica、 64 50バイト

±x_List:=Prepend[±Drop[x,1+#&@@x],#&@@x]
±_=±{}={} 
1 comments
Mr.Wizard 07/28/2017
私はこのきちんとしたコードをさらにゴルフすることに抵抗できませんでした。 私の答えは以下の通りです。

jkelm 07/28/2017.

C#(.NETコア) 、68バイト

 n=>{var t="";for(int i=0;i 

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

入力を整数の配列として受け取り、スキップされていない値を含む文字列を返します。

3 comments
TheLethalCoder 07/28/2017
それを行う良い方法と印刷と同じカウントで来る。
jkelm 07/28/2017
私は単純な解決策が大好きです。 私はそれが非常に多くのC#lambdasを見たので、まだLINQを学ばなければならない..
TheLethalCoder 07/28/2017
ほとんどの時間を暗黙のうちに返すことができるので、時間が短縮されます。 using System.Linq;using System.Linq;using System.Linq;暗黙的にリターンする間にトスするのusing System.Linq; 通常のループです。

Jarko Dubbeldam 07/28/2017.

R、58バイト

f=function(x,p=1)NO 

再帰関数。 ベクトルxを引数とし、ポインタpをintとする。 これは、対応するx項目を表示し、 p+x[p]が範囲外になるかどうかを検査し、そうでなければ新しいポインタの関数を呼び出します。

f=function(x,p=1,s=x[1])`if`((z<-x[p]+p+1)>sum(x|1),s,f(x,z,c(s,x[z]))) 

これは、数字を印刷する代わりに適切なベクトルを返す同等の解決策です。

3 comments
Giuseppe 07/28/2017
numeric(0)入力はどうですか? 別名空の配列。
Jarko Dubbeldam 07/28/2017
@Giuseppe私は自分のPCの後ろにいるときにそれを見てみましょう
Giuseppe 08/24/2017
57バイト! 空のケースも処理します。

Roman Gräf 07/28/2017.

Java(OpenJDK 8) 、53バ​​イト

@ PunPun1000と@ TheLethalCoderに感謝します。

 a->{for(int n=0;;n+=1+a[n])System.out.println(a[n]);} 

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

5 comments
TheLethalCoder 07/28/2017
私のC#の答えのように、結果を印刷すると、何かを保存できますか?
Roman Gräf 07/28/2017
@ TheLethalCoder悪い試み
TheLethalCoder 07/28/2017
nをループ内に移動することで1バイトを節約できますか?
TheLethalCoder 07/28/2017
これは現時点では機能していないようです。
PunPun1000 07/28/2017
(a[n+=1+a[n]]後に括弧がないこともあります。正しい値を出力した後も関数がエラーをスローしますが、これが許されているかどうかについてのコンセンサスは分かりませんそれが意図であれば、forループ内のn削除することができます)最後に、TIOコードは、parenであってもそのまま実行されません。 Consumerを使用し、 func.accept(test)を使用します。

Martin Ender 07/28/2017.

アリス 、15バイト

/$.. \h&
\I@nO/ 

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

10進整数の改行で区切られたリストを入力して出力します。

説明

/   Switch to Ordinal mode.
I   Read a line.
.   Duplicate it.
n   Logical NOT (gives truthy if we're at EOF).
/   Switch to Cardinal.
    The IP wraps around to the left.
\   Switch to Ordinal.
$@  Terminate the program if we're at EOF.
.   Duplicate the input line again.
O   Print it.
\   Switch to Cardinal.
h   Increment the value.
&   Store the result in the iterator queue.
    The program wraps around to the beginning. 

イテレータキューに整数nを格納すると、次のコマンドがn回実行されます。 /ようなミラーはコマンドではないので、次のコマンドはIます。 したがって、値x読み込んで印刷した場合、次の繰り返しでx+1値が読み込まれ、最後の値はスタックの上になります。 これにより、必要な番号リストの要素がスキップされます。


Mr.Wizard 07/28/2017.

Mathematica 、37(30?)

user202729の詳細なゴルフのさらなるゴルフ。

±NO 

ルールは明示的に出力形式を指定していないようですので、多分:

±NO 

2番目の関数の出力は次のようになります0.2.4.{} - 特に{}は、空のセットに対して、最終ルールに準拠して返されます。

2 comments
1 JungHwan Min 07/28/2017
±Drop[NOは、 ±NOすることができます。なぜなら、 ±は、 Infixよりも優先順位が低いからです。
Mr.Wizard 07/28/2017
@ジョンフンミン私はそれを逃した; ありがとう!

Jenny_mathy 07/28/2017.

Mathematica、65バイト

(s=#;t=1;w={};While[t<=Length@s,AppendTo[w,k=s[[t]]];t=t+k+1];w)& 

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


w0lf 07/28/2017.

Ruby、 36 33 31

f=->l{a,*l=l;a&&f[l.drop(p a)]} 

オンラインで試してみてください。

4 comments
sethrin 07/30/2017
f=をヘッダ要素として引くことは許されています。
w0lf 07/30/2017
@スズリン私はそれを再帰的に呼び出す必要がある場合でも?
sethrin 07/30/2017
うーん、良い質問。 私はそうは思わない。 私は、あなたの解決策については、まったく同じようにしました。
w0lf 07/30/2017
@スズリンありがとう! :)

AnonymousReality 07/28/2017.

スウィフト、63バイト

func a(d:[Int]){var i=0;while i 

これは今までの私の最初のエントリーなので、ルールについては100%確信していませんが、この回答で十分です。 システムへの入力をどのようにして得るかについては、私は少し不明です。 私は、入力を返すことができるどこかの関数を想定することができれば、より短い答えを得ます。

2 comments
Stephen 07/28/2017
PPCGへようこそ! デフォルトのルールでは、フルプログラムとして動作するコードを持つことができます。したがって、STDINでの入力(通常は)とSTDOUTへの出力(通常) or関数からの入力です(通常は関数パラメータからの入力)。関数の戻り値。
AnonymousReality 07/28/2017
@StepHen - ありがとう! 私は他のバージョンを無効にすると思います。 もっと寄付を楽しみにしています!

Perl 6、31バイト

 {(@_,{.[1+.[0]..*]}...^0)[*;0]} 

それを試す

拡張:

 {  # bare block lambda with implicit parameter 「@_」
  (
    # generate a sequence

    @_,

    {
      .[ # index into previous value in the sequence
        1 + .[0]  # start by skipping one plus the first element
                  # of the previous value in the sequence
        ..  *     # use that to create a Range with no end
      ]
    }

    ...^  # keep doing that until: (and throw away last value)
    0     # it generates an empty list

  )[ *; 0 ]  # from every value in the sequence, get the first element
} 

コードがどのように動作するかを理解するために、 [*;0]しないと、次のようなシーケンスが生成されます。

 [0, 1, 0, 2, 5, 1, 3, 1, 6, 2],
   (1, 0, 2, 5, 1, 3, 1, 6, 2),
         (2, 5, 1, 3, 1, 6, 2),
                  (3, 1, 6, 2) 

Renzo 07/29/2017.

Common Lisp、51バイト

(do((x(read)(nthcdr(1+(print(car x)))x)))((not x))) 

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


C ++(gcc)、172バイト

#includeint main(){std::istream& i=std::cin;char c;int a,b;while(i>>c&&i>>a){std::cout<>c&&i>>b);}std::cout< 

オンラインで試してみてください

ひどい(c/91?"":" ")は、出力の正しい間隔のためのものです。 それがなければ(-15バイト)、出力は[0,2,4]という形式になります。単純な" " (-9バイト)に変更すると、出力は[0,2,4]

<<(c/93?"":"]")は、 []空の入力コーナーの場合のみを処理するためのものです

後続エンドラインは印刷されません。

1 comments
Erik the Outgolfer 07/30/2017
また、数字を区切り記号で区切って区切って印字することもできますが、 []は必要ありません。その場合、空白の出力を持つことができます(c/91?"":" ") 。 チャレンジ内のサンプルの書式と一致させる必要はありません。

Jonathan Allan 07/29/2017.

ゼリー 、8 バイト

ḢṄ‘ṫ@µL¿ 

各行に改行が続く結果を出力する完全なプログラムです(空のリストは出力を生成しません)。

Try it online!

どうやって?

ḢṄ‘ṫ@µL¿ - Main link: list of non-negative integers  e.g. [2,5,4,0,1,2,0]
       ¿ - while:           Iteration:  1                  2             3          4        5
      L  -   length (0 is falsey)       7                  4             3          1        0
     µ   - ...do:                                                                            stop
Ḣ        -   head (pop & modify)        2 ([5,4,0,1,2,0])  0 ([1,2,0])   1 ([2,0])  0 ([0])
 Ṅ       -   print it (and yield it)   "2\n"              "0\n"         "1\n"      "0\n"
  ‘      -   increment                  3                  1             2          1
   ṫ@    -   tail from index            [0,1,2,0]          [1,2,0]      [0]         []
         -
         -                       i.e. a resulting in the printing of: '''2
                                                                         0
                                                                         1
                                                                         0
                                                                         ''' 
2 comments
Erik the Outgolfer 07/30/2017
最後にゼリーの答え! 私は7バイトでそれを行うことができます。
Erik the Outgolfer 07/30/2017
私は18バイトでリスト返す関数も持っています。

Evpok 07/30/2017.

Python 3,35バイト

 f=lambda h=0,*t:t and[h,*f(*t[h:])] 

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

f(*l)で実行します。ここで、 lは入力です。 間違いなく入力のためのルールを伸ばしていますが、私は高度なアンパックが大好きです。


cliffroot 07/28/2017.

Clojure、67バイト

#(nth(reduce(fn[[z k]b](if(= z 0)[b(conj k b)][(- z 1)k]))[0[]]%)1) 

初期パラメータ[0 []]で開始します0はカウンタ、 []は結果です。 このリストの最初の要素が0場合、引数から項目nを結果に追加し、さらにこのリスト[n [... n]]を渡すと、最初の要素がデクリメントされます。 (この説明は私にとって恐ろしい感じです)

オンラインで見る


Dead Possum 07/28/2017.

Python 2.4,85バイト

それと一緒にPythonで勝つチャンスはありませんが、私はonelinersが大好きです。これは他の人にとって面白いかもしれません。
判読の中で建物リストにアクセスするための幻想的なマジックトリックがありますが、それは2.4でのみ動作し、<= 2.3でのいくつかの編集で動作します
locals()['_[1]']それはです。 Pythonはリストのための秘密の名前_[1]を作成し、作成してlocals保管します。 _[2]_[3] ...という名前もネストされたリストに使用されます。

lambda n:[j for i,j in enumerate(n)if i==len(locals()['_[1]'])+sum(locals()['_[1]'])] 

したがって、すでに追加された要素の数にその合計を加えた数を数えます。 結果は次の所望の要素のインデックスです。
私は、列挙を避ける方法があるべきだと思います。 [ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ]ように、入力配列に直接アクセスする。 しかし、私は、範囲外のインデックスから保護するコンパクトな方法を理解することはできません(オンライナーを維持しながら)

ここに画像の説明を入力


Neil 07/28/2017.

バッチ、69バイト

:l
@if not "%1"=="" echo %1&(for /l %%i in (0,1,%1)do @shift)&goto l 

(私はループの中でgotoが起こった場合には、 ()の周りに()が必要です。)

Related questions

Hot questions

Language

Popular Tags