Integer-Digit dari Tabel-Aritmatika

17

Tantangan:

Keluarkan 'bilangan integer' dari salah satu dari enam tabel aritmatika berikut berdasarkan input:
- penambahan ( +);
- pengurangan ( -);
- perkalian ( *);
- pembagian ( /);
- eksponensial ( ^);
- operasi modulo ( %).

Aturan:

  • Apa yang saya definisikan sebagai 'integer-digit': Setiap hasil operan aritmatika yang tepat satu dari berikut: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Ini berarti Anda mengecualikan setiap hasil 10atau lebih tinggi, setiap hasil -1atau lebih rendah, dan setiap hasil non-integer.
  • Bagaimana kita menghitung hasil aritmatika: Dengan menggunakan digit teratas terlebih dahulu, lalu gunakan operan dengan digit kiri. Anda diperbolehkan melakukan ini sebaliknya (yaitu y/xalih-alih x/y), selama Anda konsisten untuk keenam output! (Jadi Anda tidak diperbolehkan menggunakan y-xdan x/ydalam jawaban yang sama.)
  • Kami tidak akan menampilkan apa pun untuk dibagi dengan 0 kasus uji (untuk tabel operasi divisi dan modulo)
  • Kami tidak akan menampilkan apa pun untuk kasing tepi 0^0.

Keluaran:

Jadi buat output sebagai berikut (format tabel agak fleksibel (lihat di bawah): jadi barisnya opsional dan terutama ditambahkan agar mudah dibaca dari kasus uji):

Tambahan:

+ | 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

Pengurangan:

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

Perkalian:

* | 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

Divisi:

/ | 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

Eksponensial:

^ | 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

Modulo:

% | 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

Aturan tantangan:

  • Mengejar baris baru dan spasi tambahan adalah opsional
  • Garis horizontal dan vertikal dalam kasus uji adalah opsional. Saya hanya menambahkannya agar lebih mudah dibaca.
  • Spasi di antara setiap hasil TIDAK opsional.
  • Simbol untuk aritmatika mungkin berbeda, asalkan jelas yang mana. Yaitu ×atau ·bukan *untuk perkalian; ÷bukannya /untuk pembagian; dll.
    Dan selama itu karakter tunggal , maaf Python **.
  • Format input fleksibel. Anda dapat memilih indeks dari 0-5 atau 1-6 untuk enam tabel terkait; Anda dapat memasukkan simbol operan; dll. (Tidak seperti apa yang Anda tampilkan dalam hasil, Anda diizinkan untuk memasukkan string lengkap, atau **dalam kasus Python.)
    Pastikan untuk menyatakan format input yang Anda gunakan dalam jawaban Anda!

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat, program lengkap. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
  • Juga, silakan tambahkan penjelasan jika perlu.

† Contoh output yang valid tanpa garis horizontal dan vertikal, ÷sebagai simbol, dan menggunakan y/xbukannya 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
Kevin Cruijssen
sumber
Apakah memberikan hasil oke untuk pembagian dengan nol jika itu adalah hasil dalam bahasa kita? Misalnya dalam APL, 0 ÷ 0 adalah 1 secara default, dan N mod-0 adalah N? Orang juga dapat memilih skema yang berbeda di mana pembagian dengan nol selalu nol.
Adám
Apakah kami diizinkan lebih dari satu ruang antar kolom?
Adám
@ Adám Maaf atas tanggapan terakhir. Adapun pertanyaan pertama Anda: jangan minta maaf. Saya tahu beberapa bahasa mencetak 1, lainnya 0, yang lain sesuatu untuk 0^0atau bagi / bagi 0, tetapi Anda harus mengatasinya. Adapun pertanyaan kedua Anda: Ya tentu, selama digit masih di kolom / baris yang sama Anda dapat menggunakan ruang sebanyak yang Anda inginkan.
Kevin Cruijssen
Apakah urutan argumen penting untuk operasi non-komutatif?
Adám
@ Adam Jadi maksudmu Anda akan output grid untuk y-x, y/x, y^xdan y%xbukan x-y, x/y, x^ydan x%y? Hmm, saya kira itu bisa baik-baik saja. Saya akan mengeditnya dalam jawaban; selama Anda akan konsisten untuk mereka berenam (jadi tidak y-xdan x/ydalam jawaban yang sama).
Kevin Cruijssen

Jawaban:

7

Japt , 45 byte

Berkolaborasi dengan @ETHproductions

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

Jalankan secara online!

Mengambil input sebagai:

"+" sebagai tambahan

"-" untuk pengurangan

"*" untuk perkalian

"/" untuk pembagian

"p" untuk eksponensial

"%" untuk modulo

Penjelasan (Dengan pintasan yang diperluas):

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"
Oliver
sumber
8

JavaScript (ES7), 128 byte

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>

Khusus-casing 0^0harganya 8 byte.

Neil
sumber
Sangat keren bagaimana Anda menambahkan operan tambahan seperti ATAU dan DAN ke cuplikan pengujian Anda. +1
Kevin Cruijssen
@KevinCruijssen Saya harus menghapus ATAU untuk menyimpan byte (semua operator lain mengurutkan sebelumnya ^), tapi terima kasih!
Neil
5

Pengoperasian Bahasa scripting Flashpoint , 343 333 303 301 byte

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}

Telepon dengan:

hint ("+" call f)

Tidak Disatukan:

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
}

Keluaran:

operator +

operator -

operator *

operator /

operator ^

operator%

Steadybox
sumber
5

Python 2 , 240 231 226 224 203 202 200 197 byte

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

Cobalah online!

Mengambil input sebagai salah satu dari "+", "-", "*", "/", "^" atau "%".

Suntingan

-9 -16 dengan terima kasih kepada @FelipeNardiBatista untuk beberapa petunjuk yang bagus

Turun ke 221 dengan bantuan lebih banyak dari @FelipeNardiBatista dan kemudian turun ke 203 dengan kalah and E(c)==int(E(c)). Jika kita memeriksa apakah E(c)ada di range(10)dalamnya akan selalu menjadi bilangan bulat jika ada. Tidak perlu untuk pemeriksaan duplikat.

Ini harus di bawah 200 tanpa beralih ke Python 3 dan menyatakan P=print. Ada ide? Saya selalu senang belajar.

Yesss! Saya tahu itu bisa dilakukan. 197. Waktunya tidur sekarang. Saya telah menghabiskan cukup waktu untuk yang satu ini. Terima kasih atas tantangan yang menarik @KevinCruijssen.

ElPedro
sumber
1
('**',i)[i<'^']dan (i<'^'or x>0 or b>0)menghemat 4 byte
Felipe Nardi Batista
1
a=i=input()dengan for z in R:a+=' '+`z`untuk beberapa byte ekstra disimpan vsa=i+' 0 1 2 3 4 5 6 7 8 9'
Felipe Nardi Batista
1
1.vs 1.0dan E(c)in Rvs -1<E(c)<10untuk 2 byte
Felipe Nardi Batista
1
x+b>0vs x>0 or b>0and "b%s(x*1.)"%('**',i)[i<'^']vs"b"+('**',i)[i<'^']+"(x*1.)"
Felipe Nardi Batista
1
ada satu set paren tambahan (, )di gabung Anda untuk 223 byte
Felipe Nardi Batista
4

Mathematica, 150 byte

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]

Menentukan fungsi unary yang ±mengambil salah satu karakter +-*/^%sebagai inputnya i(jadi misalnya, ±"^"), dan mengembalikan Gridobjek yang terlihat persis seperti output terakhir dalam OP.

<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>asosiasi, untuk setiap karakter input yang mungkin, fungsi biner (yang dapat didaftar) yang sesuai (di mana #-#2&,1##&,#/#2&ada versi golf Subtract,Times,Divide); Oleh karena itu <|...|>[i][r,#]menghitung operasi biner dengan semua kemungkinan argumen pertama dan #sebagai argumen kedua. If[0<=#<=9,#]/._@__->""&mengubah setiap hasil menjadi Nullatau ""jika itu bukan hasil satu digit ( /._@__->""diperlukan karena beberapa hasil seperti 1/0tidak dapat diproses oleh ketidaksetaraan 0<=#<=9). Akhirnya, kami menambahkan berbagai header dan footer dan menampilkan jawabannya.

Greg Martin
sumber
Jawaban dan penjelasan yang bagus. Apakah Anda mungkin memiliki tautan Try-it-online? Dan satu pertanyaan / catatan, saya tidak melihat adanya penyebutan kasus tepi: " Kami tidak akan menampilkan apapun untuk kasus tepi 0^0. "
Kevin Cruijssen
1
Saya menambahkan tautan di atas. Mathematica mengevaluasi 0^0untuk Indeterminate, yang memberi kami bahagia unevaluated hasil If[0<=Indeterminate<=9, Indeterminate]mid-perhitungan; tetapi /._@__->""merupakan aturan yang mengambil fungsi yang tidak dievaluasi dan argumennya dan mengubahnya menjadi string yang tidak terlihat.
Greg Martin
Ah ok, jadi Mathematica mengembalikan dengan benar bahwa ada dua aturan yang saling bertentangan #^0=1dan 0^#= 0` 0^0. Bagus untuk sekarang, dan nyaman untuk tantangan ini. :) Btw, tautan Anda sepertinya tidak berfungsi. Saya mendapatkan kesalahan bahwa saya tidak memiliki izin untuk mengaksesnya.
Kevin Cruijssen
Ok, Anda harus pergi ke sandbox.open.wolframcloud.com dan menempelkan kode pada diri Anda sendiri, kemudian menyebutnya dengan perintah seperti ±"^".
Greg Martin
4

Python 3, 343 335 363 362 byte

Bagian paling menyedihkan tentang ini adalah bahwa jawaban Java mengalahkan saya ... Saya akan bermain golf lebih banyak di pagi hari.

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]))

Replit

-8 byte dengan beralih ke daftar pemahaman daripada loop ganda
+28 byte untuk menghindari kasus tepi 0 ^ 0. -.-
-1 byte dengan mengubah ==0ke <1berkat @StewieGriffin

HyperNeutrino
sumber
" Bagian paling menyedihkan tentang ini adalah bahwa jawaban Java mengalahkan saya ... " Bagian ini membuat saya tertawa .. xD Saya suka bagaimana Anda memeriksa panjang angka untuk menentukan apakah itu dalam kisaran 0-9. Btw, umm .. Saya perhatikan ada satu kesalahan pada Repl Anda. Saat ini output **bukan ^untuk eksponensial. (Juga, Anda diizinkan untuk memasukkan **, tetapi tidak untuk menampilkannya di tabel hasil. Saat ini Anda memilikinya sebaliknya.)
Kevin Cruijssen
1
@KevinCruijssen Whoops. Berhasil diperbaiki, tidak ada perubahan jumlah byte. Terima kasih telah menunjukkan itu!
HyperNeutrino
@StewieGriffin Ya. Terima kasih.
HyperNeutrino
4

Java 7, 312 305 byte

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;}

Tidak menggunakan garis horizontal / vertikal, dan karakter seperti yang ditampilkan dalam contoh-tantangan ( +-*/^%).
Menggunakan indeks 0-5untuk keenam operan matematika sebagai input.

-7 byte berkat @Frozn .

Penjelasan:

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

Kode uji:

Coba di sini.

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)); // %
  }
}
Kevin Cruijssen
sumber
1
Mungkin Anda bisa lulus bsebagai doubleuntuk pdan menyingkirkan rdengan menetapkan nilai ternary dirantai b.
Frozn
3

Haskell, 230 199 182 + 53 47 46 + 1 byte separator = 284 247 232 229 byte

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

Fungsinya adalah (zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!), yang mana saja membutuhkan 53 byte, di mana 0 adalah penambahan, 1 adalah pengurangan, 2 adalah perkalian, 3 adalah pembagian, 4 adalah eksponensial, dan 5 adalah modulo.

Cobalah online!

Penjelasan

Datang nanti (mungkin). . . . Untuk saat ini beberapa informasi kecil:? adalah operator eksponensial,! adalah operator divisi, dan & adalah operator mod.

EDIT: Bagian dari sebagian besar mungkin karena sebagian besar (?) Dari jawaban lain menggunakan eval, yang Haskell tidak punya tanpa impor panjang.

EDIT2: Terima kasih Ørjan Johansen untuk -31 byte (Wow!) Dari kode dan -6 byte dari fungsinya! Juga mengubah beberapa dari 11 ke 10 untuk tujuan konsistensi. Coba versi terbaru secara online!

EDIT3: Orang yang sama, tujuh belas byte lagi! Coba versi terbaru yang diperbarui secara online!

Nama Tampilan Umum
sumber
1
!Tes lebih pendek : e<-a`div`b,e*b==a=eatau (e,0)<-a`divMod`b=e.
Ørjan Johansen
1
Fungsi yang lebih pendek: (zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Ørjan Johansen
Membalikkan tes + memberikan trik golf "standar" last$f k:[' '|k<0||k>9]. Akhirnya (mungkin), [0..9]cukup lama untuk membayar untuk mendefinisikannya sebagai nama saat menggunakannya dua kali.
Ørjan Johansen
Nah, satu lagi: k<-[o x y]lebih pendek dari a let.
Ørjan Johansen
Satu kata: Wow! :)
Generic Display Name
2

Python 2 , 197 byte

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)

Cobalah online!

Input: Python 2

'+' Tambahan

'-' Pengurangan

'*' Perkalian

'/' Divisi

'**' Eksponensial

'%' Modulo

Python 3 , 200 byte

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))

Cobalah online!

Input: Python 3

+ Tambahan

- Pengurangan

* Perkalian

// Divisi

** Eksponensial

% Modulo

Penjelasan

menyimpan range(10)ke variabel r, kita bisa mendapatkan baris pertama dari format

operator 0 1 2 3 4 5 6 7 8 9

dengan memetakan setiap int rke string dan bergabung dengan daftar string ['0','1','2','3','4','5','6','7','8','9']dengan ruang sdengan poperator

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

Dengan itu, untuk setiap idalam r(kisaran), untuk setiap jevaluasi idan jdengan operator Anda

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

di sini, pengecualian dapat dilemparkan jika tidak ditangani - pembagian atau modulus oleh 0. Untuk menangani kasus ini ( i and(j%i==0 and'/'==p or'%'==p)) dan format output dengan dijelaskan dalam pernyataan masalah (hasil untuk setiap evaluasi tidak boleh berupa angka negatif atau angka lebih besar dari 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

Dengan demikian mencetak tabel-aritmatika!

Selamat Coding!

Keerthana Prabhakaran
sumber
Nice Python 2 menjawab. Kira pada 197 itu membuat kita sama. Butuh beberapa upaya lagi. Sudah selesai dilakukan dengan baik. Sedikit masalah. Untuk / tabel menunjukkan .0 dan bukan bilangan bulat. Tentu itu mudah diperbaiki :)
ElPedro
Maaf tetapi telah menarik upvote saya setelah saya melihat itu, Akan menambahkannya lagi setelah Anda memiliki kesempatan untuk memperbaikinya :)
ElPedro
Terima kasih! Tapi Python 2 mencetak int dan cetakan python 3 mengambang jika Anda menggunakan '/' sebagai input. Fir python 3 Anda harus menggunakan '//'. Saya telah dengan jelas menyebutkan hal itu.
Keerthana Prabhakaran
Dan sepertinya seseorang mengedit tautan saya dan tautan python 2 telah diubah menjadi python 3. Saya telah mengembalikannya sekarang.
Keerthana Prabhakaran
Saya pernah mengalami masalah ini sebelumnya. Itu karena Anda memiliki 2 tautan TOI di halaman yang sama. Ketika Anda mengklik salah satu tautan, tautan itu akan membuka definisi tautan pertama yang ditemukannya. Akhiri dengan mengganti nama tautan kedua menjadi "coba online 3" atau apalah dan ganti nama definisi tautan. Seharusnya bekerja dengan baik.
ElPedro
2

APL (Dyalog) , 68 76 byte

Membutuhkan ⎕IO←0yang default pada banyak sistem. Meminta input dan mengharapkan satu karakter yang mewakili operan.

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

Cobalah online!

Sebagian besar kode adalah untuk menghindari hasil APL untuk ÷0dan 0*0dan untuk menangkal bahwa modulo APL ( |) memiliki argumennya terbalik dibandingkan dengan kebanyakan bahasa lainnya. Jika tidak, hanya 41 byte :

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

Cobalah online!

Adm
sumber
Wow! dan setelah semua kerja keras saya pada jawaban Python saya. Permainan adil.
ElPedro
1

R , 194 177 byte

-17 byte beralih ke memanipulasi keluaran matriks

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)}

Cobalah online!

Mengubah pendekatan ini memiliki beberapa kelemahan, yaitu tidak dapat dioptimalkan dengan menggunakan pryr dan sedikit kikuk untuk mengatur matriks asli, tetapi dapat dihasilkan dengan sempurna dengan beberapa spasi tambahan di baris pertama.

Saya masih harus menggunakan substr trik karena %%operator mod. Akan terus memangkas ini ketika saya mendapat kesempatan, masih terasa sangat kikuk berurusan dengan kasus-kasus khusus.

Kriminal kriminal
sumber
0

PHP, 191 Bytes

** dari pada ^ sebagai input+ - / % * **

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:' ';");}}

Versi Online dari kedua Versi

PHP, 245 Bytes tanpa eval

memasukkan + - / % * ^

gunakan bcpowmod($c,1,$r)sebagai gantibcmod($c,$r) karena saya butuh parameter ketiga dalam input divisi. $c**1%$r==$c%$r

Fungsi Matematika 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):" ";}
Jörg Hülsermann
sumber
0

05AB1E , 56 55 byte

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

Output tanpa garis dan dengan terbalik xdan y. Input / output menggunakan +, -, *, /, m, %.

Cobalah online atau verifikasi semua tabel .

21 byte digunakan untuk kasus tepi memperbaiki /0, %0dan 0^0, yang mengakibatkan 0, 0dan 1masing-masing dalam 05AB1E .. Berikut tanpa bagian itu ( 34 bytes ):

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

Cobalah online atau coba semua tabel .

Penjelasan:

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)
Kevin Cruijssen
sumber