回答:
Mod[1##,11]~Mod~10&~Array~{10,10}
オンラインでお試しください!(数学を使用。)
1から始まるインデックスのセルに(x,y)
は値があります((x*y) % 11) % 10
Luisのおかげで1バイト節約できました。&
複製と転置のショートカットであることを忘れない。
10:&*11\10\
@Martinのアルゴリズムを使用: x*y % 11 % 10
説明:
10 % Pust 10 to the stack. Stack: 1
: % 1-based range. Stack: [1 2 3 ... 10]
& % Duplicate range. Stack: [1 2 3 ... 10],[1 2 3 ... 10]
% Transpose last range. Stack [1 2 3 ... 10],[1;2;3 ...10]
* % Multiply with broadcasting. Stack: [1 2 3 ...;2 4 6...] (10-by-10 array)
11 % Push 11 to the stack. Stack [1 2 3 ...;2 4 6 ...], 11
\ % Modulus.
10 % Push 10 to the stack.
\ % Modulus
% Implicit display
同じバイト数:
10t:&*11\w\
t!*
て保存できます&*
10|11|∘.×⍨⍳10
Mathematicaの回答の移植版。
∘.×⍨ ⍝ Multiplication table of...
⍳10 ⍝ The list from 1 to 10.
11| ⍝ mod 11.
10| ⍝ mod 10.
バイトカウントはISO 8859-1エンコーディングを前提としています。
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
...%11%10アルゴリズムの別の実装。正規表現を使用してそれを行うことの楽しい部分は、両方のモジュロ計算を一度に処理できることです。
10$*
文字列を10 1
秒に初期化します。
1
,1$`
それらのそれぞれをコンマ、1、およびその前の接頭辞で置き換えます。これは,1,11,...,1111111111
、つまり単項範囲を与えます。
,1+
$_¶
次に、各範囲要素を文字列全体で置き換え、その後に改行を続けます。これにより、現在の列を示す単項数の10x10グリッドが得られます。
(?<=(¶?.+)+)1
$#1$*
それぞれ1
を一致させ、グループ1を何回も繰り返して、どの行にあるかを判断します。1
をその数に置き換え1
ます。これにより、各行の値に行の1から始まるインデックスが乗算されます。
1{10}1?
さて、mod 11、mod 10を1ステップで行いましょう。mod 11を実行するには、通常1{11}
、残りの文字列からすべてを削除します。その後、削除1{10}
します。しかし、可能であれば10に1を1
加えただけを削除すると、正規表現エンジンの貪欲さは可能な限りmod 11を実行し、そうでない場合は少なくともmod 10を試行します。
,(1*)
$.1
最後に、各数値をその長さに置き換えることにより、各数値を10進数に変換します。
_=>[...1e9+''].map((_,a,b)=>b.map((_,c)=>-~a*++c%11%10))
Shaggyのおかげで4バイト、Arnauldのおかげで8バイト節約されました。
_=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10))
。あなたは私に4バイトを保存し、私はあなたに4バイトを保存します:)
map()
を使用して、最初の3バイトのコールバックの3番目のパラメーターを使用して5バイトを保存できます。それはにつながります。1e9+''
Array(10)
_=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10))
1e9
トリックをありがとう。私はそれを知りませんでした。3番目の引数の使用について考えましたが、何らかの理由で使用しませんでした。
これは、ここでの私の200(削除されていない)答えでした:)
これは、マーティンが発見したのと同じ式のようです。
Aõ
£®*X%B%A
テストする(-R
視覚化の目的でのみフラグを立てる)
Aõ :Generate an array of integers from 1 to 10, inclusive.
£ :Map over each element in the array, returning...
® :Another map of the same array, which...
*X :Multiplies the current element of the inner function by the current element of the outer function...
%B :Modulus 11...
%A :Modulus 10.
:Implicit output of resulting 2D array
-R
フラグを使用することができます
o->{String r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}
@MartinEnderのMathematica answer:1-indexed と同じアルゴリズムを使用しますx*y%11%10
。
説明:
o->{ // Unused Object parameter and String return-type
String r=""; // Result-String
for(int x=0,y;++x<11; // Loop (1) from 1 to 11 (exclusive)
r+="\n") // And append a new-line after every iteration
for(y=0;++y<11; // Inner loop (2) from 1 to 11 (exclusive)
r+=x*y%11%10 // And append the result-String with `x*y%11%10`
); // End of inner loop (2)
// End of loop (1) (implicit / single-line body)
return r; // Return result-String
} // End of method
offcialaimmのおかげで-6バイト。
マーティンのアルゴリズムを使用していますが、彼がどのようにしてこのアルゴリズムを思いついたのか、私には理解できません。o0
r=range(1,11)
print[[x*y%11%10for y in r]for x in r]
r=range(1,11)
6バイトを節約
1:10%o%1:10%%11%%10
私が今まで書いた中で最も「R」に見えるビットのRコード。Martin Enderの回答と同じアルゴリズムを使用します(他のほとんどすべての回答も同様)。x %o% y
はと同じouter(x, y)
です。
»
Sを、あなたが使用することができますしながら、ω
代わりに””
あなたが使用してバイトの全体の束を保存することができ⸿
、これはその後になるとFχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿
。(私が知る前に、どれがまだ多くのバイトを節約するだろ⸿
うと示唆してJ⁰ι
いたでしょう。)
⸿
は逆演算子です。引数なしでコードの最後で何をしますか?文書化されていますか?
⮌
リバース演算子で⸿
あり、move cursor to start of next line
文字です(¶
ただし、別の文字列に含めることができます)。
[|?[|?a*b%11%z';
もちろん、これはマーティンの方法を使用しています。このQBasicコードに変換されます。
[| FOR A = 1 to 10 ([ starts a FOR loop, | delimits the list of arguments;
a FOR loop with 0 args loops from 1 to 10 by default with increment 1.
? PRINT a newline
[| Start a second FOR loop from 1-10, iterator b
? PRINT
a*b%11%z the result of Martin's formula.
'; and suppress newlines/tabs/spaces
_=>{var r="";for(int x=0,y;++x<11;r+="\n")for(y=0;++y<11;r+=x*y%11%10);return r;}
他のほとんどの回答と同じアルゴリズムで、基本的に@Kevins Java回答のC#ポートです。
12345678902468013579369147025848159260375049382716
.*
$&$&
O$^50>`.
.{10}
$&¶
{
-> ;
、}
-> `
)、少なくとも最初のをドロップできます[
。
{){\)*11%10%}+10,/n}10,/
/
。;)
int blk +
-> {int space contents-of-blk}
。
+
私はあなたのコードビットを変更したものの...トリックを
10$*T
M!&`T+
m`$
;110$*T10$*
1
09876543210
m`(?<=^\1;\1{0,9}(T+))T
C
(?<!C.{108})\S
TS F~u0+*i>i%
TS - [1, 2, 3, 4, 5, 6, 7, 8, 9]
F~u0+*i>i% - for i in ^:
~u0+ - "01234567890"
* - ^ * i
i> - ^[i:]
i% - ^[::i]
1un@i/
/10<@i/01234567890/jl10<qnc0a^t>jtl%n>
RodのPython回答の(かなり)簡単な実装。
1un !initialize register n to 1!
@i/<nl>/ !insert a newline!
10< !loop for 10 rows!
@i/01234567890/ !insert the mysterious string of digits!
j !move point to start of buffer!
l !move forward past the newline!
10< !loop for 10 digits on a line!
qnc !move point forward by n characters!
0a^t !print the character at point!
> !end inner loop!
j !move point to start of buffer!
t !print (empty) line!
l !move to start of digit string!
%n !increment register n (for next line)!
> !end outer loop!
<ESC>で終了する挿入と^ Tコマンドに制御文字を使用すると、別の 3読みやすさを犠牲にして、5バイト。
Martinのmod-11 / mod-10数式を使用すると、実際には^ Aおよび^ Tのコントロールを使用して43バイト長くなります。これは、主にTECOにmod演算子がないためです。
0ur10<%run10<qn-10"g-11%n'qn\r0a^Tqr%n>^a
^A>
Mod 11は、qnの数値が10を超えるたびに-11ずつ増分することにより、継続的に行われます。 qn\r0a^T
シーケンスは、編集バッファーに数値を10進数として挿入し、最後の桁を超えて反転し、バッファーから取得して入力します。本質的にmod-10を実行します。
短くなると思っていました。しかたがない。