リスト内のインデックスの数係数のリスト


25

簡単なもの: 入力として正の整数のリストを取得し、リスト内の1ベースのインデックスを法とする数値を出力します。

入力整数がの{a, b, c, d, e, f, g}場合、出力は{a%1, b%2, c%3, d%4, e%5, f%6, g%7}どこ%にモジュラス演算子があるはずです。


テストケース:

10  9  8  7  6  5  4  3  2  1
 0  1  2  3  1  5  4  3  2  1

8 18  6 11 14  3 15 10  6 19 12  3  7  5  5 19 12 12 14  5
0  0  0  3  4  3  1  2  6  9  1  3  7  5  5  3 12 12 14  5

1
0

1  1
0  1

回答:



9

Operation Flashpointスクリプト言語、73バイト

f={l=_this;r=[];i=0;while{i<count l}do{r=r+[(l select i)%(i+1)];i=i+1};r}

で呼び出す:

numList = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
hint format["%1\n%2", numList, numList call f];

出力:


1
何...これは事ですか?
-JAD

2
@JarkoDubbeldamはい。このゲームでは、プレイヤーは独自のシナリオを作成できます。また、ミッション設計を補完するために設計されたゲーム内スクリプト言語があります。ただし、この言語はチューリング完全であるため、ほとんど何でもできます。
Steadybox


7

ゼリー、2バイト

%J

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

説明:

%J
 J List 1 .. len(input). This is results in a list of the indexes.
%  Modulo.

基本的に、コードはインデックスのリストによって元のリストを調整します。


2
この質問を見るとすぐに、「それ%Jはゼリーにある、誰かがその答えで答えたのだろうか?」と思った。他の誰かが同じ考えを持っていたと思います

1
@ ais523あなたは自分だけだと思いますか?もう一度考えて!
エリックアウトゴルファー

6

R、24 18バイト

pryr::f(x%%seq(x))

関数を評価します:

function (x) 
x%%seq(x)

これは、1 seq_along()と同じ長さのベクトルを作成し、モジュロを取るために使用します。x%%

seqベクトルを使用した場合のデフォルトの動作seq(along.with = x)は、と同じ出力ですがseq_along(x)、6バイト短くなります。


seq(x)私は常に使用しているので、周りに持っておくと便利です1:length(x)
ジュゼッペ

@Giuseppeうん、私もちょっと驚きました。
JAD

6

R、27バイト

x=scan();cat(x%%1:sum(1|x))

@Jarkoのおかげで5バイト節約

@Giuseppeのおかげでさらに4つ節約

@Taylor Scottにさらに感謝

@returnbullのおかげでさらに2つ節約


35それは-不要な最後の
括弧を

1
' 'の最後に(スペース)は必要ありませんcat。それがデフォルトの区切り記号です
ジュゼッペ

2
これを減らすことにより、2バイトをドロップして33を取得できますx<-scan();cat(x%%1:length(x)," ")-ああ、いくつかのフォーマットのヒント、1)コードの左側に4スペースだけで適切にインデントしてマークを付けることができます2)<!-- language-all: lang-r -->フラグを追加できますコードを強調表示する前に(この例では少し変更されますが)3)言語名の周りにブレットは必要ありません4)投稿を編集するときにコメントを作成する必要はありません
テイラースコット

2
(1)あなたが使用できる=代わりの<-バイトを保存します。(2)仕様には「印刷」ではなく「出力」と記載されているため、おそらくcat()5バイトを節約してドロップできます。(3)sum(1|x)は1バイトより短いlength(x)
rturnbull

5

APL(Dyalog)、5バイト

⍳∘≢|⊢

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

 インデックス

 の

 引数の長さ

| そのモジュラス

 引数


「主流」言語が非常に経済的であることに常に驚かされます。APLの方法は、当然コードゴルフのようです。たとえば、(~T∊T∘.×T)/T←1↓⍳R ⍝ primes up to Rまたはlife←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω} ⍝ Game of Life

@YiminRongより良い方法:Primes to R:(⊢~∘.×⍨)1↓⍳RおよびGoL(バージョン16.0):K∊⍨⊢∘⊂⌺3 3ここで、Kは定数です。
アダム

ファインダー素数をお試しください@YiminRong ここに
アダム

5

Cubix、19バイト

;ww.1I!@s%Ow;)Sow.$

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

    ; w
    w .
1 I ! @ s % O w
; ) S o w . $ .
    . .
    . .

実行する

かなり単純な実装。

  • 1 1をスタックにプッシュして、インデックスを開始します
  • I!@ 整数入力を取得し、0の場合は停止します
  • s%Ow インデックスを入れ替え、MOD、出力結果、レーン変更
  • ;) 結果を削除し、インデックスをインクリメントします
  • Sow 32を押して、出力スペースとレーンを変更します(oから下へ)
  • $O 出力をジャンプする
  • w;wランジを変更し、スタックから32を削除し、I入力にレーンを変更します

5

05AB1E、2バイト

ā%

オンラインでお試しください!またはすべてのテストを試す

ā  # Push the range(1, len(a) + 1)
 % # Mod each element in the input by the same one in this list

おもしろい、DgL%いい感じだと思った。
魔法のタコUr

@carusocomputing私はもともとgL%私が忘れていたために持っていたā
ライリー

もう少し詳しく説明しāてくれませんか?私はそれを使ったことがないと信じていますfor eachが、それはただのようですが、暗示さ1 to n+1れるような方法ですか?vy<code>})vy<code>})
魔法のタコUr

@carusocomputingは、値1の配列をポップされた配列の長さにプッシュします。に相当しgLます。TIO
ライリー

入力もだまされますか?または、暗黙的な入力は利用可能な最も近い入力に自動的に拡張されますか?
魔法のタコUr


4

星空75 70バイト

      +`  , + +   *    +  + +      +*   +    *  .               + + .'

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

説明

これは、入力から数値を読み取り、で初期化されたカウンターを増やし続ける無限ループです1。入力とカウンタのペアごとに、モジュラスが計算されて出力されます。

入力が使い果たされたときにループを終了するには、次のトリックを使用します。利用可能な入力がなくなったら、もう1つの数値を読み取ろうとするとが得られます0。したがって、読み取った数値をそれ自体で除算し、それが0プログラムの場合はエラーで終了します。それ以外の場合は、結果を破棄して続行します。

      +              Push 1. This is the initial value of the counter
`                    Mark label
  ,                  Read number from input and push it. Gives 0 if no more input
 +                   Duplicate top of the stack
 +                   Duplicate top of the stack
   *                 Pop two numbers and push their division. Error if divisor is 0
    +                Pop (discard) top of the stack
  +                  Swap top two numbers
 +                   Duplicate top of the stack
      +              Push 1
*                    Pop two numbers and push their sum. This increases the counter
   +                 Rotate stack down, to move increased counter to bottom
    *                Pop two numbers and push their modulus
  .                  Pop a number and print it as a number
               +     Push 10
 +                   Duplicate top of the stack
 .                   Pop a number (10) and print it as ASCII character (newline)
'                    If top of the stack is non-zero (it is, namely 10) go to label



3

Japt、5 4バイト

®%°T

それを試してみてください


説明

     :Implicit input of array U
®    :Map over the array
%    :Modulo of the current element
°T   :T (0, initially) incremented by 1

1
私はあなたがバイトを保存することができると思う®%°T(実際には、あなたはまだ使用することができY、あなたが望んでいた場合はそこに)
ETHproductions

あぁ。ありがとう、@ ETHproductions。
シャギー

3

R、22バイト

pryr::f(x%%1:sum(x|1))

Rは、モジュラスを実行する前に1:length(x)を実行します。


素敵な発見sum(x|1)
JAD

1
seq()代わりにを使用seq_along()しても同じことが行われることがわかりました。そのため、再び数バイト短くなります。
JAD

1
そのことをお伝えするつもりでしたが、コメントする担当者がいませんでした。あなたはそれを理解してくれてうれしい。
Shayne03




2

Excel VBA、 59 46バイト

ゴルフ

範囲からの入力としてスペース()で区切られた配列文字列を受け取り[A1]、開始リストの1ベースのインデックスの数値モジュラスをVBEイミディエイトウィンドウに出力する匿名VBEイミディエイトウィンドウ関数

For Each n In Split([A1]):i=i+1:?n Mod i;:Next

入出力:

[A1]="10 9 8 7 6 5 4 3 2 1" ''# or manually set the value
For Each n In Split([A1]):i=i+1:?n Mod i;:Next
 0  1  2  3  1  5  4  3  2  1 

古いSubルーチンバージョン

入力を渡された配列として受け取り、VBEイミディエイトウィンドウに出力するサブルーチン。

Sub m(n)
For Each a In n
i=i+1
Debug.?a Mod i;
Next
End Sub

入力/出力:

m Array(10,9,8,7,6,5,4,3,2,1)
 0  1  2  3  1  5  4  3  2  1 

非ゴルフ

Option Private Module
Option Compare Binary
Option Explicit
Option Base 0 ''# apparently Option Base 1 does not work with ParamArrays

Public Sub modIndex(ParamArray n() As Variant)
    Dim index As Integer
    For index = LBound(n) To UBound(n)
        Debug.Print n(index) Mod (index + 1);
    Next index
End Sub

入出力:

Call modIndex(10,9,8,7,6,5,4,3,2,1)
 0  1  2  3  1  5  4  3  2  1 


1

J、9バイト

>:@i.@#|[

1 ... n | 元のリスト

| modです





1

GNU APL 1.2、9バイト

(⍳⍴R)|R←⎕

APLは右から左に動作するため、括弧があります。

R←⎕ユーザー入力をvectorに割り当てますR

⍴Rベクトルの長さを示します。⍳⍴R1からその長さまでのすべての数値(つまりインデックス)を持つベクトルを返します。

|mod演算子です(a|byields b%a)。APLは配列で動作するため、コードはユーザーの入力から各要素を含むベクトルをスニペットし、インデックスを変更します。





1

Braingolf、18バイト

V1R&,{v.m1+v%}&,=;

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

説明

V1R&,{v.m1+v%}&,=;  Implicit input from commandline args
V1R                 Create stack2, push 1 to it, and return to stack1
   &,               Reverse stack1
     {.......}      Foreach loop, runs for each item in stack1
      v             Switch to stack2
       .m           Duplicate last item on stack and move duplicate to stack1
         1+         Increment last item on stack
           v%       Return to stack1, pop last 2 items and push modulus result
              &,    Reverse stack1
                =   Output stack1
                 ;  Suppress implicit output

1

Java 8 / C#、39バイト

a->{for(int i=0;i<a.length;a[i]%=++i);}

ここで試してみてください。

と置換->することでC#でも機能します:=>lengthLength

a=>{for(int i=0;i<a.Length;a[i]%=++i);}

ここで試してみてください。

説明:

a->{                       // Method with integer-array parameter and no return-type
  for(int i=0;i<a.length;  //  Loop over the indexes of the array (0-indexed)
      a[i]%=++i            //   And replace every integer with itself mod (1+i)
  );                       //  End of loop
}                          // End of method

入力配列を変更するため、戻り値がありません。


1
基本的にC#+1で行うことは、に変更->=>て大文字にすると、C#でも機能することについてコメントできますlength
TheLethalCoder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.