数字のブロック


18

このテキストブロックを出力/印刷します。

1234567890
2468013579
3691470258
4815926037
5049382716
6172839405
7306295184
8520741963
9753108642
0987654321

許容される形式は次のとおりです。

  • 末尾の改行/空白
  • 文字列のリスト
  • 文字のリストのリスト
  • 整数のリストのリスト

ただし、最後の行が整数ではないため、整数のリストは受け入れられません。

これはです。バイト単位の最短回答が優先されます。標準の抜け穴が適用されます。

回答:






5

MATL12 11バイト

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!*て保存できます&*
ルイスメンドー

1
コメントのコードスニペットの最後にバックスラッシュがある場合は、@ LuisMendoは二重のバッククォートです。
マーティンエンダー

@MartinEnderありがとう!私はそれがどのように機能するか覚えていないので、簡単な方法で行った:
ルイスメンドー

@LuisMendoええ、異なる構文を使用した投稿やコメントとは少し混乱しています。
マーティンエンダー

ありがとう@LuisMendo!それはドキュメントにありませんか?
スティーヴィーグリフィン



2

網膜、59バイト

バイトカウントは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進数に変換します。




2

Javascript(ES6)、70 64 56バイト

_=>[...1e9+''].map((_,a,b)=>b.map((_,c)=>-~a*++c%1‌​1%10))

Shaggyのおかげで4バイト、Arnauldのおかげで8バイト節約されました。


1
66バイト:_=>[...a=Array(10)].map((_,x)=>[...a].map((_,y)=>(x+1)*++y%11%10))。あなたは私に4バイトを保存し、私はあなたに4バイトを保存します:)
シャギー

どうもありがとう。また、バグを修正したため、ソリューションの2バイトをさらに削りました;
ルーク

1
の代わりにmap()を使用して、最初の3バイトのコールバックの3番目のパラメーターを使用して5バイトを保存できます。それはにつながります。1e9+''Array(10)_=>[...1e9+''].map((_,x,a)=>a.map((_,y)=>-~x*++y%11%10))
アーナルド

@アーナウルド:1e9トリックをありがとう。私はそれを知りませんでした。3番目の引数の使用について考えましたが、何らかの理由で使用しませんでした。
ルーク

私は最近ここで同様のトリックのリストをまとめまし
アーナルド

2

Japt16 12 11バイト

これは、ここでの私の200(削除されていない)答えでした:)

これは、マーティンが発見したのと同じ式のようです。

Aõ
£®*X%B%A

テストする-R視覚化の目的でのみフラグを立てる)

  • Lukeが配列の配列を返すことは許可されていると指摘したおかげで、4バイト節約されました。

説明

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

それに私を打つ...最後の2文字をドロップし、代わりに-Rフラグを使用することができます
ルーク

1
さらに良いことに、最後の4文字をドロップします。許可されているようだ
ルーク

うん、あなたは正しいようです、ありがとう、@ルーク:)
シャギー

1

Java 8、84バイト

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

1

パイソン258の 52バイト

offcialaimmのおかげで-6バイト。

マーティンのアルゴリズムを使用していますが、彼がどのようにしてこのアルゴリズムを思いついたのか、私には理解できません。o0

r=range(1,11)
print[[x*y%11%10for y in r]for x in r]

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


1
速記法でr=range(1,11)6バイトを節約
officialaimm

2
私が式を非常に迅速に見つけた理由の一部は、このmath.SEの私の質問とorlpのコメントです。
マーティンエンダー



1

30 29 19バイト

Fχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿

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

Martinの式を使用します。

  • Neilのおかげで10バイト節約できました。もう一度学ぶべきことがたくさんあることがわかりました

あなたは末尾の必要はありません»Sを、あなたが使用することができますしながら、ω代わりに””あなたが使用してバイトの全体の束を保存することができ⸿、これはその後になるとFχ«FχI﹪﹪×⁺¹ι⁺¹κ¹¹χ⸿。(私が知る前に、どれがまだ多くのバイトを節約するだろ⸿うと示唆してJ⁰ιいたでしょう。)
ニール

@Neil ⸿は逆演算子です。引数なしでコードの最後で何をしますか?文書化されていますか?
チャーリー

1
いいえ、リバース演算子で⸿あり、move cursor to start of next line文字です(ただし、別の文字列に含めることができます)。
ニール


0

QBIC、17バイト

[|?[|?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

0

C#、81バイト

_=>{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#ポートです。



0

GolfScript37 24バイト

10,{){\)*11%10%}+10,%}%`

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

-13 Martin Enderが提案した巧妙なトリックのおかげ。


完全なプログラムに変換する場合({-> ;}-> `)、少なくとも最初のをドロップできます[
マーティンエンダー

これは、しかし代わりにジップ技術の簡単なネストされたループを使用することが多く短いです:{){\)*11%10%}+10,/n}10,/
マーティン・エンダー

@MartinEnderうーん...あなたは使いすぎるようです/。;)
アウトゴルファーのエリック

@MartinEnderああ、あなたがやったことを見る...あなたが使ったint blk +-> {int space contents-of-blk}
エリックアウトゴルファー

@MartinEnder OK私はあなた実装しました+私はあなたのコードビットを変更したものの...トリックを
エリックOutgolfer





0

PHP、54バイト

for(;9>=$y++||9>=$x+=$y=print"
";)echo($x+1)*$y%11%10;

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

PHP、56バイト

for(;$x++<=9;print"
")for($y=0;$y++<=9;)echo$x*$y%11%10;

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


1
ブラケットをドロップできます()
クリストフ

-2バイト:for(;<0>$y++||10>$x+=$y=print"\n";)echo($x+1)*$y%11%10;
タイタス

...またはfor($x=1;11>++$y||11>$x+=$y=print"\n";)echo$x*$y%11%10;
タイタス


0

TECO、45バイト

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を実行します。

短くなると思っていました。しかたがない。

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