算術テーブルの整数桁


17

チャレンジ:

入力に基づいて、次の6つの算術表のいずれかの「整数桁」を出力します。-
加算(+);
-減算(-);
-乗算(*);
-部門(/);
-べき乗(^);
-モジュロ演算(%)。

ルール:

  • 正確に次のいずれかである算術演算のオペランドのすべての結果:私は「整数の数字」として定義何をすべきか0123456789。この手段は、あなたは除外し、すべての結果10以上のすべての結果-1以下であり、すべての非整数の結果を。
  • 算術結果の計算方法:最初に最上位の数字を使用し、次に左の桁のオペランドを使用します。6つすべての出力で一貫している限り、この逆も可能です(つまり、のy/x代わりにx/y)。(あなたが使用を許可されていないのでy-xx/y同じ答えインチ)
  • 0のテストケースによる除算(除算およびモジュロ演算テーブル)については何も出力しません
  • edge-caseについては何も出力しません0^0

出力:

したがって、以下を出力します(テーブル形式は多少柔軟です(以下を参照)。したがって、行はオプションであり、主にテストケースを読みやすくするために追加されます)。

添加:

+ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 | 1 2 3 4 5 6 7 8 9
2 | 2 3 4 5 6 7 8 9
3 | 3 4 5 6 7 8 9
4 | 4 5 6 7 8 9
5 | 5 6 7 8 9
6 | 6 7 8 9
7 | 7 8 9
8 | 8 9
9 | 9

減算:

- | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 |   0 1 2 3 4 5 6 7 8
2 |     0 1 2 3 4 5 6 7
3 |       0 1 2 3 4 5 6
4 |         0 1 2 3 4 5
5 |           0 1 2 3 4
6 |             0 1 2 3
7 |               0 1 2
8 |                 0 1
9 |                   0

乗算:

* | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 0 0 0 0 0 0 0 0 0
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 2 4 6 8
3 | 0 3 6 9
4 | 0 4 8
5 | 0 5
6 | 0 6
7 | 0 7
8 | 0 8
9 | 0 9

分割:

/ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0   1   2   3   4
3 | 0     1     2     3
4 | 0       1       2
5 | 0         1
6 | 0           1
7 | 0             1
8 | 0               1
9 | 0                 1

べき乗:

^ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 |   1 1 1 1 1 1 1 1 1
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 1 4 9
3 | 0 1 8
4 | 0 1
5 | 0 1
6 | 0 1
7 | 0 1
8 | 0 1
9 | 0 1

モジュロ:

% | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 
1 | 0 0 0 0 0 0 0 0 0 0
2 | 0 1 0 1 0 1 0 1 0 1
3 | 0 1 2 0 1 2 0 1 2 0
4 | 0 1 2 3 0 1 2 3 0 1
5 | 0 1 2 3 4 0 1 2 3 4
6 | 0 1 2 3 4 5 0 1 2 3
7 | 0 1 2 3 4 5 6 0 1 2
8 | 0 1 2 3 4 5 6 7 0 1
9 | 0 1 2 3 4 5 6 7 8 0

チャレンジルール:

  • 末尾の改行と末尾のスペースはオプションです
  • テストケースの水平線と垂直線はオプションです。読みやすくするためだけに追加しました。
  • 各結果間のスペースはオプションではありません。
  • 算術のシンボルは、どちらであるかが明確である限り、異なる場合があります。すなわち×または·代わりの*乗算のために、除算の÷代わりに/; など
    そして、それが単一の文字である限り、ごめんなさいPythonの**
  • 入力形式は柔軟です。対応する6つのテーブルのインデックスを0〜5または1〜6から選択できます。オペランド記号を入力できます。(結果に表示するものとは異なり、完全な文字列を入力することも**、Pythonの場合も許可されます。)
    答えで使用する入力形式を必ず明記してください。

一般的なルール:

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

÷シンボルとして水平線と垂直線を使用せy/xず、x/y次の代わりに使用する有効な出力の例:

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

それが私たちの言語での結果である場合、ゼロによる除算に対して結果は大丈夫ですか?たとえば、APLでは、0÷0はデフォルトで1で、N mod-0はNですか?ゼロによる除算が常にゼロである別のスキームを選択することもできます。
アダム

列間に複数のスペースを使用できますか?
アダム

@Adám最後の返信でごめんなさい。あなたの最初の質問に関しては、ごめんなさい。私はいくつかの言語がprint 1、other 0、他の何かのために別の何か0^0またはDivide / mod 0 を知っていますが、あなたはそれを回避する必要があります。2番目の質問について:はい、確かに、数字が同じ列/行にある限り、必要な数のスペースを使用できます。
ケビンCruijssen

引数の順序は非可換演算にとって重要ですか?
アダム

アダムので、@あなたは、出力のためのグリッドよ意味y-xy/xy^xおよびy%x代わりにx-yx/yx^yx%y?うーん、それは大丈夫だと思います。回答で編集します。限り、あなたはそれらのすべての6つの(そうではないために一貫性があるだろうとy-xx/y同じ答えで)。
ケビンCruijssen

回答:


7

Japt、45バイト

@ETHproductionsとのコラボレーション

AÆAÇU¥'p«Z«XªOvZ+U+X)+P r"..+"SÃuXÃuAo uU)m¸·

オンラインで実行してください!

次のように入力します。

"+" 加えて

"-" 減算用

"*" 乗算用

"/" 分割用

"p" べき乗のため

"%" モジュロ用

説明(拡張されたショートカットを使用):

AÆ  AÇ  U¥ 'p«  Z«  Xª OvZ+U+X)+P r"..+"SÃ uXÃ uAo uU)m¸  ·
AoX{AoZ{U=='p&&!Z&&!X||OvZ+U+X)+P r"..+"S} uX} uAo uU)mqS qR

A                                                             // By default, 10 is assigned to A
 o                                                            // Create a range from [0...9]
  X{                                         }                // Iterate through the range, X becomes the iterative item
    Ao                                                        //   Create another range [0...9]
      Z{                                 }                    //   Iterate through the range, Z becomes the iterative item
                                                              //     Take:
        U=='p                                                 //       U (input) =="p"
             &&!Z                                             //       && Z != 0
                 &&!X                                         //       && X != 0
                     ||                                       //     If any of these turned out false, instead take
                       Ov                                     //       Japt Eval:
                         Z+U+X                                //         Z{Input}X
                              )+P                             //     Whichever it was, convert to a string
                                  r"..+"S                     //     Replace all strings of length 2 or more with " "
                                                              //     (this makes sure the result !== "false" and has length 1)
                                           uX                 //   Insert X (the row number) into the front of the row
                                               u              // Insert at the beginning the first row:
                                                Ao            //   [0...9]
                                                   uU)        //   with the input inserted at the beginning
                                                      mqS     // Join each item in the final array with " "
                                                          qR  // Join the final array with "\n"

8

JavaScript(ES7)、128バイト

f=
c=>[...c+`0123456789`].map((r,_,a)=>a.map(l=>l==c?r:r==c?l:/^\d$/.test(l=c<`^`?eval(l+c+r):l|c?l**r:l/r)?l:` `).join` `).join`
`
<select onchange=o.textContent=f(this.value)><option>><option>+<option>-<option>*<option>/<option>%<option>^<option>&<option>,<option>.</select><pre id=o>

特別なケーシングには0^08バイトかかりました。


ORやANDなどのオペランドをテストスニペットに追加した方法はとてもクールです。+1
ケビンクルーッセン

@KevinCruijssen ORを削除してバイトを保存する必要がありました(他のすべての演算子は前にソートされます^)が、ありがとう!
ニール

5

操作Flashpointスクリプト言語、343 333 303 301バイト

f={o=_this;s=o+" 0 1 2 3 4 5 6 7 8 9\n";i=0;while{i<10}do{j=0;s=s+format["%1",i];if(i<1&&(o=="/"||o=="%"||o=="^"))then{if(o=="^")then{if(j<1)then{s=s+"  ";j=1}}else{s=s+"\n1";i=1}};while{j<10}do{r=call format["%1%2%3",j,o,i];if(r>9||r<0||r%1>0)then{r=" "};s=s+format[" %1",r];j=j+1};s=s+"\n";i=i+1};s}

で呼び出す:

hint ("+" call f)

ゴルフをしていない:

f=
{
    o=_this;
    s=o+" 0 1 2 3 4 5 6 7 8 9\n";
    i=0;
    while{i<10}do
    {
        j=0;
        s=s+format["%1",i];
        if(i<1&&(o=="/"||o=="%"||o=="^"))then
        {
            if(o=="^")then{if(j<1)then{s=s+"  ";j=1}}
            else{s=s+"\n1";i=1}
        };
        while{j<10}do
        {
            r=call format["%1%2%3",j,o,i];
            if(r>9||r<0||r%1>0)then{r=" "};
            s=s+format[" %1",r];
            j=j+1
        };
        s=s+"\n";
        i=i+1
    };
    s
}

出力:

演算子+

演算子-

演算子*

演算子/

演算子^

演算子%


5

パイソン2240 231 226 224 203 202の 200 197バイト

a=i=input()
R=range(10)
for z in R:a+=' '+`z`
print a
for x in R:
 try:
	d=`x`
	for b in R:c=eval("b%s(x*1.)"%('**',i)[i<'^']);d+=' '+(' ',`int(c)`)[(i<'^'or x+b>0)and c in R]
 except:pass
 print d

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

入力を「+」、「-」、「*」、「/」、「^」または「%」のいずれかとして受け取ります。

編集

-9 -16 @FelipeNardiBatistaに感謝します

@FelipeNardiBatistaの助けを借りて221まで、そして負けて203までand E(c)==int(E(c))。が存在するかどうかを確認する場合、存在する場合E(c)range(10)常に整数になります。重複チェックの必要はありません。

これ、Python 3に切り替えて宣言せずに200未満にする必要がありますP=print。何か案は?私はいつも学ぶことができてうれしいです。

はい!私はそれができると知っていました。197.今すぐ寝る時間。これに十分な時間を費やしました。興味深いチャレンジ@KevinCruijssenに感謝します。


1
('**',i)[i<'^'](i<'^'or x>0 or b>0)4バイトを節約
フェリペナルディバティスタ

1
a=i=input()for z in R:a+=' '+`z`いくつかの余分が対保存されたバイトのためにa=i+' 0 1 2 3 4 5 6 7 8 9'
フェリペナルディバティスタ

1
1.vs 1.0E(c)in Rvs -1<E(c)<102バイト
フェリペナルディバティスタ

1
x+b>0vs x>0 or b>0and "b%s(x*1.)"%('**',i)[i<'^']vs"b"+('**',i)[i<'^']+"(x*1.)"
フェリペ・ナルディ・バティスタ

1
余分な括弧の1セットがあり()ご参加のための223バイトに
フェリペ・ナルディバティスタ

4

Mathematica、150バイト

r=0~Range~9;p=Prepend;±i_:=Grid@p[p[If[0<=#<=9,#]/._@__->""&/@<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>[i][r,#],#]&/@r,r~p~i]

入力として±文字の1つ(たとえば、)を+-*/^%受け取り、aを返す単項関数を定義しますi±"^"Grid、OPの最後の出力とまったく同じように見えるオブジェクトをます。

<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>考えられる各入力文字に、対応する(リスト可能な)バイナリ関数を関連付けます(#-#2&,1##&,#/#2&ゴルフバージョンはSubtract,Times,Divide)。したがって<|...|>[i][r,#]、考えられるすべての最初の引数を使用し#て、2番目の引数として二項演算を計算します。If[0<=#<=9,#]/._@__->""&各結果を1 桁の結果に変換するNull""、1桁の結果で/._@__->""はない場合(1/0不等式では処理できないなどの結果が必要になるため0<=#<=9)最後に、さまざまなヘッダーとフッターを追加して、答えを表示します。


いい答えと説明。Try-it-onlineリンクをお持ちですか?そして、1つの質問/注、エッジケースルールについては何も言及されていません:「エッジケースについては何も0^0出力しません」このエッジケースのデフォルトでは何も出力しませんか?
ケビンCruijssen

1
上記のリンクを追加しました。Mathematicaはに評価さ0^0IndeterminateIf[0<=Indeterminate<=9, Indeterminate]計算の途中で不幸な未評価の結果が得られます。しかし/._@__->""、未評価の関数とその引数を取り、それを不可視の文字列に変更するルールです。
グレッグマーティン

ああ、だからMathematicaは2つの矛盾するルール#^0=10^#= 0`が発生していることを正しく返します0^0。これまでのところ、この挑戦​​に便利です。:)ところで、リンクが機能していないようです。アクセスする権限がないというエラーが表示されます。
ケビンCruijssen

[OK]を、あなたがに行く必要がありますsandbox.open.wolframcloud.com、自分でコードを貼り付け、その後のようなコマンドでそれを呼び出します±"^"
グレッグマーティン

4

Python 3、343 335 363 362バイト

これについての最も悲しい部分は、Javaの答えが私を打ち負かしているということです...午前中にこれをもっとゴルフします。

o=input()
r=range(10)
g=[['']*10 for i in r]
for x in r:
 for y in r:exec('if"/"!=o and(o!="%"or x)and(o!="**"or x or y):k=str(y'+o+'x);g[x][y]=k')
if'/'==o:
 for x in r:
  for y in r:
   if x and y%x<1:g[x][y]=str(round(y/x))
if'**'==o:o='^'
print('\n'.join([' '.join([o]+list(map(str,r)))]+[' '.join([str(q)]+[' 'if len(x)!=1else x for x in g[q]])for q in r]))

複製


エッジケースを回避するために、ダブルループ+28バイトではなくリスト内包表記に切り替えることにより、-8バイト0 ^ 0。-.-
変更することにより、-1バイト==0<1@StewieGriffinのおかげで


この程度悲しい部分は、Javaの答えは私を破っているということです...」この部分はxDさん、私はあなたがそれの範囲でだかどうかを判断するために番号の長さをチェックしているかのように...私はクスクス笑い作っ0-9。ところで、うーん。私はあなたのReplで1つのエラーに気づいた。現在、べき乗の**代わりに出力します^。(また、入力することはできますが**、結果テーブルに出力することはできません。現在、あなたはそれとは逆の方法を持っています。)
ケビンクルーイッセン

1
@KevinCruijssenおっと。正常に修正され、バイトカウントは変更されません。それを指摘してくれてありがとう!
ハイパーニュートリノ

@StewieGriffinはい。ありがとうございました。
ハイパーニュートリノ

4

Java 7、312 305バイト

String c(int o){String r=("+-*/^%".charAt(o))+" 0 1 2 3 4 5 6 7 8 9\n";for(int i=0,j,p;i<10;i++){r+=i+" ";for(j=0;j<10;r+=p<0|p>9?"  ":p+" ")p=p(o,i,j++);r+="\n";}return r;}int p(int o,int a,double b){b=o<1?b+a:o<2?b-a:o<3?b*a:o<4&a>0?b/a:o<5&(a!=0|b!=0)?Math.pow(b,a):a>0?b%a:-1;return b%1==0?(int)b:-1;}

水平/垂直線を使用せず、文字はチャレンジ例(+-*/^%)に表示されているとおりです。6つの数学オペランドの
インデックスを0-5入力として使用します。

@Froznのおかげで-7バイト。

説明:

String c(int o){                   // Method with integer parameter and String return-type
  String r = ("+-*/^%".charAt(o))  //  Get the current mathematical operand character based on the input index
    + " 0 1 2 3 4 5 6 7 8 9\n";    //  Append the column header and a new-line
  for(int i=0,j,p; i<10; i++){     //  Loop over the rows
    r += i+" ";                    //   Append the left-side row-nr
    for(j=0; j<10;                 //   Inner-loop over the columns of the current row
        r += p<0|p>9?"  ":p+" ")   //     And after every iteration, append the result with either a space or an integer
      p = p(o,i,j++);              //    Calculate the current sum-result
                                   //   End of inner-loop (implicit / single-line body)
    r+="\n";                       //   Append result with new-line
  }                                //  End of loop
  return r;                        //  Return result String
}                                  // End of method

int p(int o,int a,double b){       // Separate method with two integer and a double parameters and integer return-type
  b = o<1 ?                        //  If the given operand is 0:
       b+a                         //   Use addition
      : o<2 ?                      //  Els-if the given operand is 1:
       b-a                         //   Use subtraction
      : o<3 ?                      //  Else-if the given operand is 2:
       b*a                         //   Use multiplication
      : o<4 & a>0 ?                //  Else-if the given operand is 3 and `a` is above 0:
       b/a                         //   Use division
      : o<5 & (a!=0|b!=0) ?        //  Else-if the given operand is 4 and not both `a` and `b` are 0:
       Math.pow(b,a)               //   Use exponentiation
      : a>0 ?                      //  Else-if the given operand is 5:
       b%a                         //   Use modulo
      :                            //  Else:
       -1;                         //   Use -1 as result
  return b%1 == 0 ?                //  If the result is not a decimal number:
     (int)b                        //   Return the result
    :                              //  Else:
     -1;                           //   Return -1 as result
}                                  // End of separate method

テストコード:

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

class M{
  String c(int o){String r=("+-*/^%".charAt(o))+" 0 1 2 3 4 5 6 7 8 9\n";for(int i=0,j,p;i<10;i++){r+=i+" ";for(j=0;j<10;r+=p<0|p>9?"  ":p+" ")p=p(o,i,j++);r+="\n";}return r;}int p(int o,int a,double b){b=o<1?b+a:o<2?b-a:o<3?b*a:o<4&a>0?b/a:o<5&(a!=0|b!=0)?Math.pow(b,a):a>0?b%a:-1;return b%1==0?(int)b:-1;}

  public static void main(String[]a){
    M m = new M();
    System.out.println(m.c(0)); // +
    System.out.println(m.c(1)); // -
    System.out.println(m.c(2)); // *
    System.out.println(m.c(3)); // /
    System.out.println(m.c(4)); // ^
    System.out.println(m.c(5)); // %
  }
}

1
たぶんbdoubleto として渡して、連鎖された3項の値をに割り当てることでp取り除くことができます。rb
Frozn

3

ハスケル、230 199 182 + 53 47 46 + 1セパレータのバイト= 284 247 232 229バイト

f=head.show
g=[0..9]
h=(:" ")
y(%)s=unlines$(s:map f g>>=h):[f y:[last$' ':[f(x%y)|x%y`elem`g]|x<-g]>>=h|y<-g]
0?0=10;a?b=a^b
a!0=10;a!b|(e,0)<-a`divMod`b=e|1>0=10
a&0=10;a&b=mod a b

関数は(zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!)、単独で53バイトを使用します。0は加算、1は減算、2は乗算、3は除算、4は累乗、5はモジュロです。

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

説明

後で(おそらく)。。。。とりあえず、ちょっとした注意点:?は、べき乗演算子です!は除算演算子で、&はmod演算子です。

編集:バルクの一部は、他の回答のほとんど(?)がevalを使用しているためかもしれません。これは、Haskellが長いインポートなしで持っていないものです。

EDIT2:ØrjanJohansenに、コードから-31バイト(すごい!)、関数から-6バイト離れてくれてありがとう!また、一貫性を保つために、11の一部を10に変更しました。更新されたバージョンをオンラインでお試しください!

EDIT3:同じ人、さらに17バイト!更新、更新されたバージョンをオンラインでお試しください!


1
より短い!テスト:e<-a`div`b,e*b==a=eまたは(e,0)<-a`divMod`b=e
Ørjanヨハンセン

1
短い機能:(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Ørjanヨハンセン

逆転テスト+「標準的な」ゴルフトリックが得られlast$f k:[' '|k<0||k>9]ます。最後に(たぶん)、[0..9]2回使用するときに名前として定義するのに十分な長さです。
Ørjanヨハンセン

いや、もう一つ:k<-[o x y]aよりも短いlet
Ørjanヨハンセン

一言:すごい!:)
一般的な表示名

2

Python 2、197バイト

p=input()
r=range(10)
s=' '
print p+s+s.join(map(str,r))
for i in r:print str(i)+s+s.join(eval(("s","str(j"+p+"i)")[i and(j%i==0 and'/'==p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r])for j in r)

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

入力:Python 2

'+' 添加

'-' 引き抜き

'*' 乗算

'/' 分割

'**' べき乗

'%' モジュロ

Python 3、200バイト

p=input()
r=range(10)
s=' '
print(p+s+s.join(map(str,r)))
for i in r:print(str(i)+s+s.join(eval(("s","str(j"+p+"i)")[i and(j%i==0 and'/'in p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r])for j in r))

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

入力:Python 3

+ 添加

- 引き抜き

* 乗算

// 分割

** べき乗

% モジュロ

説明

range(10)変数rに格納すると、フォーマットの出力の最初の行を取得できます

operator 0 1 2 3 4 5 6 7 8 9

すべてのint rを文字列にマッピングし、演算子で文字列リスト['0','1','2','3','4','5','6','7','8','9']をスペースsで結合することによりp

p+s+s.join(map(str,r)

それにより、すべてのiインr(範囲)、すべてのj評価i、およびjオペレーターに対して

eval("j"+p+"i")

未処理の場合ここで、例外がスローされるかもしれない-分裂またはモジュラス0によって(この場合を処理するためにi and(j%i==0 and'/'==p or'%'==p))、問題文に記載されて出力形式(各評価の結果が負の数も数より大きくすべきではありません10- eval("j"+p+"i")in r)、

i and(j%i==0 and'/'==p or'%'==p)or p in'**+-'and eval("j"+p+"i")in r

したがって、算術テーブルを印刷します!

ハッピーコーディング!


素敵なPython 2の答え。私たちを平等にする197を推測してください。しかし、もう少し試行錯誤を繰り返しました。よくやった。わずかな問題。/の場合、テーブルには整数ではなく.0が表示されます。簡単に修正できます:)
ElPedro

申し訳ありませんが、私はそれを見た後、私の
アップ投票

ありがとうございました!ただし、入力として「/」を使用すると、Python 2はintを出力し、python 3はfloatを出力します。Fir python 3では、「//」を使用する必要があります。私はそれを明確に述べました。
Keerthana Prabhakaran

そして、誰かが私のリンクを編集していて、python 2リンクがpython 3に変更されたようです。私はそれを元に戻しました。
Keerthana Prabhakaran

私は前にこの問題を経験したことがあります。同じページに2つのTOIリンクがあるためです。いずれかのリンクをクリックすると、最初に見つかったリンク定義が開きます。2番目のリンクの名前を「オンライン3で試す」などに変更し、リンク定義の名前も変更してください。その後、正常に動作するはずです。
エルペドロ

2

APL(Dyalog)68 76バイト

⎕IO←0多くのシステムでデフォルトである必要があります。入力を求め、オペランドを表す単一の文字を期待します。

t'|'=w←⎕
(w,n),n⍪⍉⍣t∘.{(⍺w⍵≡0'*'0)∨(t∧⍵≡0)∨⍺w0'÷':⍬
n∊⍨r←⍵(⍎w)⍺:r
⍬}⍨n←⍳10

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

コードの多くはのためのAPLの結果は回避することである÷00*0し、APLのモジュロ(という対抗するために|、その引数は、他のほとんどの言語に比べて反転しました)。たった41バイトだったでしょうそうでなければ、。

w←⎕
(w,n),n⍪∘.{0::⍬
÷n∊⍨r←⍵(⍎w)⍺:r}⍨n←⍳10

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


うわー!そして、Pythonの答えに対するすべてのハードワークの後。フェアプレー。
エルペドロ

1

R194 177バイト

マトリックス出力の操作に切り替える-17バイト

function(o){s=0:9
y=sapply(s,function(x)Reduce(o,x,init=s))
dimnames(y)=list(s,rep('',10))
y[!y%in%s|!is.finite(y)]=' '
if(o=='^')y[1]=' '
cat(substr(o,1,1),s)
print(y,quote=F)}

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

このアプローチへの変更には、いくつかの欠点があります。つまり、次を使用して最適化することはできません。 pryr、元のマトリックスをセットアップするのは少し不格好ですが、最初の行にいくつかの後続スペースがあると完全に出力できます。

mod演算子のsubstrため、このトリックを使用する必要があります%%。機会があればこれをトリミングし続けますが、それでも特別なケースを扱うのは非常に不格好です。


0

PHP、191バイト

**^入力としてではなく+ - / % * **

echo$k=$argn,$k=="**"?"":" ",join(" ",$d=range(0,9));foreach($d as$r){echo"\n$r";foreach($d as$c){echo" ";($k=="/"|($m=$k=="%"))&$r<1?print" ":eval("echo in_array($c$k$r,\$d)?$c$k$r:' ';");}}

両方のバージョンのオンラインバージョン

PHP、評価なしの245バイト

入力 + - / % * ^

除算入力に3番目のパラメーターが必要なため、bcpowmod($c,1,$r)代わりに使用しbcmod($c,$r)ます。 $c**1%$r==$c%$r

BC数学関数

echo$k=$argn," ".join(" ",$d=range(0,9));foreach($d as$r){echo"\n$r";foreach($d as$c)echo" ",in_array($s=($k=="/"|($m=$k=="%"))&$r<1?-1:("bc".["+"=>add,"-"=>sub,"/"=>div,"*"=>mul,"^"=>pow,"%"=>powmod][$k])($c,$m?1:$r,$m?$r:9),$d)?round($s):" ";}

0

05AB1E56 55 バイト

9ÝDãεðýì„/%Iåyθ_*I'mQyO_*~iðë.VD9ÝQàiïëð]«TôεN<š}®I:ðý»

行がなく、逆向きxとで出力されyます。入力/出力を使用しています+-*/m%

オンラインそれを試してみてくださいまたはすべてのテーブルを確認します

21バイトの固定エッジケースに使用され/0%0そして0^0もたらす、00、及び1それぞれ05AB1Eに..ここではその一部せず(34バイト)。

9ÝDãεðýì.VD9ÝQàiïëð]«TôεN<š}®I:ðý»

オンラインで試すか、すべてのテーブルを試す

説明:

9Ý                     # Push list [0,1,2,3,4,5,6,7,8,9]
  D                    # Duplicate it (for the header later on)
   ã                   # Take the cartesian product with itself (creating all pairs):
                       #  [[0,0],[0,1],[0,2],...,[9,7],[9,8],[9,9]]
ε                      # Map each pair `y` to:
 ðý                    #  Join the pairs with a space
   ì                   #  Prepend it before the (implicit) input-char 
 „/%Iå                 #   If the input is "/" or "%"
         *             #   and
      yθ_              #   The last value of the pair is exactly 0
                  ~    #  OR
          I'mQ        '#   If the input is "m"
                 *     #   and
              yO_      #   The sum of the pair is exactly 0 (thus [0,0])
 i                     #  If that is truthy:
  ð                    #   Push a space character " "
 ë                     #  Else:
  .V                   #   Execute the string as 05AB1E code
    D                  #   Duplicate the result
     9ÝQài             #   If it's in the list [0,1,2,3,4,5,6,7,8,9]:
          ï            #    Cast it to an integer to remove any trailing ".0"
                       #    (since dividing always results in a float)
         ë             #   Else:
          ð            #    Push a space character " "
]                      # Close both the if-else clauses and the map
 «                     # Merge the resulting list with the duplicated [0,1,2,3,4,5,6,7,8,9]
  Tô                   # Split the list in parts of size 10
    ε   }              # Map each list to:
     N<                #  Get the map-index + 1
       š               #  And prepend it at the front of the list
         ®I:           # Then replace the "-1" with the input-character
ðý                     # And finally join every inner list by spaces
  »                    # And join the entire string by newlines (which is output implicitly)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.