数字の出現


12

入力:

整数のリスト(ゼロを含むことはありません)

出力:

以下に基づくカウントを持つ同じサイズのリスト:

  • 現在のアイテムが負の場合:このアイテムの前にあるすべてのアイテムを調べ、それらの他の数字で数字が発生した回数をカウントします
  • 代わりに現在のアイテムが正の場合:このアイテムの後のすべてのアイテムを見て、それらの他の数字で数字が発生した回数を数えます

ねじれが1つあります:リストのサイズが偶数の場合、すべての数字を1回だけカウントします(複数の数字と一致する場合でも)、サイズが奇数の場合、現在のアイテムの各数字の数字のすべての数字をカウントします(複製されます)数字は複数回カウントされます)。

これを少し明確にするためにいくつかの例を挙げましょう。

偶数リストの例:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

リストのサイズは偶数なので、各番号を1回だけカウントします。

  • 4:ポジティブだから、楽しみにしています。数字を含む3つの数字があります442-9428374)。ですから、から始め3ます。
  • 10:ポジティブだから、楽しみにしています。数字のいずれか含む二つの数字があり1、および/または0(は-10-200)。したがって、2番目の出力は2です。
  • 42:再び肯定的です。数字のいずれか含む4つの数字があり4、および/または2-9428374728-200)。したがって、3番目の出力は4です。
  • -10:今回はマイナスなので、後方を見る。数字1および/または0(マイナス記号は無視し10ます)を含む数字は1つだけです()。したがって、4番目の出力は1です。

奇数リストの例:

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

リストのサイズは奇数なので、すべての数字をカウントします。

  • 382:ポジティブだから、楽しみにしています。3他の番号に1つ(381)、他の番号に6つ8-82, -8, 381, 228, 28, -28)、および他の番号に6つ2-82, 228, 28, -28, 2)があります。ですから、から始め13ます。
  • -82:マイナスなので、逆になります。1があり3、他の数(中382)、および1 8以外の数で(382)。したがって、2番目の出力は2です。
  • ...
  • 228:前向きだから、とても前向きだ。3があります2"他の番号で、S( 、28-28)、-2および他の3 2の、および2つの8他の番号でのは(28-28)。したがって、この出力は8です。

チャレンジルール:

  • 入力が0正でも負でもないため、入力がアイテムとして含まれることはないと想定できます。
  • input-listには常に少なくとも2つの項目が含まれると想定できます。
  • I / Oは柔軟です。入力/出力は、整数の配列/リスト、区切り文字列、数字/文字行列などです。
  • リストの最初の数が負の数である場合、またはリストの最後の数が正の数である場合、結果のリストでは0になります。
  • 奇数リストでは、228上記の奇数の例のように、同じ数字を複数回含む数が複数回カウントされ、8(3 + 2)ではなく5(3 + 3 + 2)になります。

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、非コードゴルフ言語で回答を投稿することを妨げないでください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを持つ関数/メソッドの使用が許可されます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンクを追加してください。
  • また、必要に応じて説明を追加してください。

テストケース:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9,  1,   7,  3,   5,  5,   3,  7,   1,  9  ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2,   8,  4,   5,  6,   3,  8,   1,  10,  0 ]

Input:  [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8,  9,   3,    9,    3,   4,     5,   4,   12    ]

Input:  [-1, 11, 11, 1]
Output: [0,  2,  1,  0]

Input:  [1, 11, 11, -1]
Output: [3, 2,  1,  3 ]

Input:  [-1, 11, 1]
Output: [0,  2,  0]

Input:  [1, 11, -1]
Output: [3, 2,  3 ]

回答:




4

Java(JDK 10)、204バイト

a->{int l=a.length,r[]=new int[l],i=0,j,x,y,b,s,t=10;for(;i<l;i++)for(j=i+(s=a[i]>0?1:-1);0<=j&j<l;j+=s)for(b=0,x=a[i];x!=0;x/=t)for(y=a[j];b<1&y!=0;y/=t)if(x%t==-y%t|x%t==y%t){r[i]++;b+=1-l%2;}return r;}

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

クレジット


[1,11,-1]返す必要があり[3,2,3]ます。これは奇妙なリストなので、すべての桁がカウントされます。最初1:楽しみにして、1合計3 秒:11,-1。2番目11:各桁を楽しみにしてください:one 1+ one 1。3番目-1:後ろを振り返って、1合計で3つです-1,11。(奇数のリストでは、各桁を同じように見る必要があります。チャレンジでこれを明確にしますが、数字のある奇数の例は228これを少し明確にします。)
ケビン・クルーイッセン

@KevinCruijssen今すぐ修正する必要があります。
オリヴィエグレゴワール

確かにそうです。最初の説明は、私が投稿した時点ではあまりにも不明瞭だったのではないかとすでに恐れていました。今、私はあなたの答えを何でもゴルフできるかどうかを確認します。;)
ケビンクルーッセン

1
時間もあまりありませんが、ゴルフでできることの1つは、新しい変数,tを追加してに変更i+(a[i]>0?1:-1)i+(t=a[i]>0?1:-1)、のj+=t代わりに単に使用することですj+=a[i]>0?1:-1
ケビンクルーッセン

1
あなたはたとえば、T = 10のために宣言し、それがあまり理解できますが、トンのためのすべてのそれらの10を交換する場合は2を保存することができます
JavaのGonzar



1

JavaScript(Node.js)164,158,140 139バイト

a=>a.map((x,i)=>a.slice(x<0?0:i+1,x<0?i:l).map(b=>c+=[...b+""].map(X=>s+=X>=0&&(x+"").split(X).length-1,s=0)&&l%2?s:+!!s,c=0)|c,l=a.length)

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


これは、Node-yではなくJS6のように見えます。
チャールズではない

これは、tioが生成した文字列です。Node BabelまたはSpiderMonkey JSがあります。それはまだノード上で動作するため、その罰金
-DanielIndie


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