Số nguyên-số của bảng số học


17

Thử thách:

Xuất 'số nguyên' của một trong sáu bảng số học sau dựa trên đầu vào:
- Ngoài ra ( +);
- phép trừ ( -);
- phép nhân ( *);
- phép chia ( /);
- lũy thừa ( ^);
- hoạt động modulo ( %).

Quy tắc:

  • Tôi xác định những gì là 'nguyên-chữ số': Mỗi kết quả của toán hạng số học mà là chính xác một trong những điều sau đây: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Điều này có nghĩa là bạn loại trừ mọi kết quả từ 10hoặc cao hơn, mọi kết quả của -1hoặc thấp hơn và mọi kết quả không nguyên.
  • Làm thế nào để chúng ta tính toán kết quả số học: Bằng cách sử dụng chữ số trên cùng trước, sau đó sử dụng toán hạng với chữ số bên trái. Bạn được phép làm điều này ngược lại (tức là y/xthay vì x/y), miễn là bạn nhất quán cho tất cả sáu kết quả đầu ra! (Vì vậy, bạn không được phép sử dụng y-xx/ytrong câu trả lời tương tự.)
  • Chúng tôi sẽ không xuất bất cứ thứ gì để chia cho 0 trường hợp thử nghiệm (đối với các bảng thao tác chia và modulo)
  • Chúng tôi sẽ không đầu ra bất cứ điều gì cho trường hợp cạnh 0^0.

Đầu ra:

Vì vậy, xuất ra các mục sau (định dạng bảng có phần linh hoạt (xem bên dưới): vì vậy các dòng là tùy chọn và chủ yếu được thêm vào để dễ đọc các trường hợp kiểm tra):

Thêm vào:

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

Phép trừ:

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

Phép nhân:

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

Bộ phận:

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

Số mũ:

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

Quy tắc thử thách:

  • Trailing dòng mới và dấu cách là tùy chọn
  • Các đường ngang và dọc trong các trường hợp thử nghiệm là tùy chọn. Tôi chỉ thêm chúng để dễ đọc hơn.
  • Khoảng cách giữa mỗi kết quả KHÔNG phải là tùy chọn.
  • Biểu tượng cho số học có thể khác nhau, miễn là nó rõ ràng là cái nào. Tức là ×hoặc ·thay vì *nhân; ÷thay vì /phân chia; vv
    Và chừng đó là một đơn nhân vật, vì vậy xin lỗi của Python **.
  • Các định dạng đầu vào là linh hoạt. Bạn có thể chọn một chỉ mục từ 0-5 hoặc 1-6 cho sáu bảng tương ứng; bạn có thể nhập ký hiệu toán hạng; v.v. (Không giống như những gì bạn hiển thị trong kết quả, bạn được phép nhập các chuỗi hoàn chỉnh hoặc **trong trường hợp của Python.)
    Chỉ cần đảm bảo nêu rõ định dạng đầu vào mà bạn sử dụng trong câu trả lời của mình!

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp, các chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
  • Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.

Ví dụ về đầu ra hợp lệ không có đường ngang và dọc, ÷như ký hiệu và sử dụng y/xthay vì 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

Việc đưa ra một kết quả có thể được chia cho số 0 nếu đó là kết quả trong ngôn ngữ của chúng tôi? Ví dụ: trong APL, 0 0 là 1 theo mặc định và N mod-0 là N? Người ta cũng có thể chọn một sơ đồ khác trong đó phép chia cho số 0 luôn bằng không.
Adám

Chúng ta có được phép có nhiều hơn một không gian giữa các cột không?
Adám

@ Adám Xin lỗi vì phản hồi cuối cùng. Đối với câu hỏi đầu tiên của bạn: không xin lỗi. Tôi biết một số ngôn ngữ in 1, ngôn ngữ khác 0, một số ngôn ngữ khác cho 0^0hoặc chia / mod 0, nhưng bạn sẽ phải làm việc xung quanh đó. Đối với câu hỏi thứ hai của bạn: Có chắc chắn, miễn là các chữ số vẫn ở trong cùng một cột / hàng, bạn có thể sử dụng nhiều khoảng trắng như bạn muốn.
Kevin Cruijssen

Là thứ tự của các đối số quan trọng cho các hoạt động không giao hoán?
Adám

@ Adam Vì vậy, bạn có nghĩa là bạn sẽ ra lưới cho y-x, y/x, y^xy%xthay vì x-y, x/y, x^yx%y? Hmm, tôi đoán rằng có thể tốt. Tôi sẽ chỉnh sửa nó trong câu trả lời; miễn là bạn sẽ nhất quán cho tất cả sáu người trong số họ (vì vậy không y-xx/ytrong cùng một câu trả lời).
Kevin Cruijssen

Câu trả lời:


7

Japt , 45 byte

Phối hợp với @ETHproductions

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

Chạy nó trực tuyến!

Đưa đầu vào là:

"+" cho thêm

"-" cho phép trừ

"*" để nhân

"/" để phân chia

"p" cho lũy thừa

"%" cho modulo

Giải thích (Với các phím tắt mở rộng):

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

Vỏ đặc biệt có 0^0giá 8 byte.


Rất tuyệt vời khi bạn đã thêm các toán hạng bổ sung như OR và AND vào đoạn kiểm tra của mình. +1
Kevin Cruijssen

@KevinCruijssen Tôi đã phải xóa HOẶC để lưu một byte (tất cả các toán tử khác sắp xếp trước đó ^), nhưng cảm ơn!
Neil

5

Hoạt động ngôn ngữ kịch bản 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}

Gọi với:

hint ("+" call f)

Ung dung:

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
}

Đầu ra:

toán tử +

nhà điều hành -

nhà điều hành *

nhà điều hành /

tổng đài ^

nhà điều hành %


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

Hãy thử trực tuyến!

Lấy đầu vào là một trong các "+", "-", "*", "/", "^" hoặc "%".

Chỉnh sửa

-9 -16 cảm ơn @FelipeNardiBatista vì một số gợi ý tuyệt vời

Xuống tới 221 với sự trợ giúp nhiều hơn từ @FelipeNardiBatista và sau đó giảm xuống 203 bằng cách thua and E(c)==int(E(c)). Nếu chúng tôi đang kiểm tra nếuE(c) có trong range(10)nó thì sẽ luôn là một số nguyên nếu nó ở đó. Không cần kiểm tra trùng lặp.

Cái này phải xuống dưới 200 mà không cần chuyển sang Python 3 và khai báo P=print. Có ý kiến ​​gì không? Tôi luôn vui vẻ học hỏi.

Vâng! Tôi biết nó có thể được thực hiện. 197. Giờ đi ngủ rồi. Tôi đã dành đủ thời gian cho việc này. Cảm ơn về thử thách thú vị @KevinCruijssen.


1
('**',i)[i<'^'](i<'^'or x>0 or b>0)tiết kiệm 4 byte
Felipe Nardi Batista

1
a=i=input()với for z in R:a+=' '+`z`một số byte bổ sung được lưu so vớia=i+' 0 1 2 3 4 5 6 7 8 9'
Felipe Nardi Batista

1
1.vs 1.0E(c)in Rvs -1<E(c)<10với 2 byte
Felipe Nardi Batista

1
x+b>0vs x>0 or b>0"b%s(x*1.)"%('**',i)[i<'^']vs"b"+('**',i)[i<'^']+"(x*1.)"
Felipe Nardi Batista

1
có một bộ paren bổ sung (, )trong phần tham gia của bạn với 223 byte
Felipe Nardi Batista

4

Toán học, 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]

Xác định hàm unary ±lấy một trong các ký tự +-*/^%làm đầu vào của nó i(ví dụ như vậy ±"^") và trả về một Gridđối tượng trông giống hệt như đầu ra cuối cùng trong OP.

<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>liên kết, với mỗi ký tự đầu vào có thể, hàm nhị phân (có thể liệt kê) tương ứng (trong đó #-#2&,1##&,#/#2&là các phiên bản được đánh gôn Subtract,Times,Divide); do đó <|...|>[i][r,#]tính toán hoạt động nhị phân với tất cả các đối số đầu tiên có thể và #là đối số thứ hai. If[0<=#<=9,#]/._@__->""&chuyển đổi từng kết quả thành một Nullhoặc ""nếu đó không phải là kết quả một chữ số ( /._@__->""là cần thiết vì một số kết quả như 1/0không thể được xử lý bởi các bất đẳng thức 0<=#<=9). Cuối cùng, chúng tôi chuẩn bị các tiêu đề và chân trang khác nhau và hiển thị câu trả lời.


Câu trả lời và lời giải thích tốt đẹp. Bạn có thể có một liên kết Dùng thử trực tuyến? Và một câu hỏi / lưu ý, tôi không thấy bất kỳ đề cập nào về quy tắc trường hợp cạnh: " Chúng tôi sẽ không xuất bất cứ điều gì cho trường hợp cạnh 0^0. " Mathicala có xuất ra mặc định cho trường hợp cạnh này không?
Kevin Cruijssen

1
Tôi đã thêm một liên kết ở trên. Mathematica đánh giá 0^0để Indeterminate, mang đến cho chúng ta một kết quả unevaluated không hạnh phúc If[0<=Indeterminate<=9, Indeterminate]giữa tính toán; nhưng /._@__->""là một quy tắc lấy bất kỳ hàm không đánh giá nào và các đối số của nó và thay đổi nó thành một chuỗi vô hình.
Greg Martin

À, vậy Mathicala trả lại chính xác rằng hai quy tắc xung đột #^0=10^#= 0` đang xảy ra 0^0. Tốt cho đến bây giờ, và thuận tiện cho thử thách này. :) Btw, liên kết của bạn dường như không hoạt động. Tôi nhận được một lỗi mà tôi không có quyền truy cập nó.
Kevin Cruijssen

Ok, bạn sẽ phải truy cập sandbox.open.wolframcloud.com và dán mã vào chính mình, sau đó gọi nó bằng một lệnh như thế nào ±"^".
Greg Martin

4

Python 3, 343 335 363 362 byte

Điều đáng buồn nhất về điều này là một câu trả lời Java đang đánh bại tôi ... Tôi sẽ chơi golf nhiều hơn vào buổi sáng.

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

Trả lời

-8 byte bằng cách chuyển sang danh sách hiểu hơn là một vòng lặp kép
+28 byte để tránh trường hợp cạnh 0 ^ 0. -.-
-1 byte bằng cách thay đổi ==0thành <1nhờ @StewieGriffin


" Phần đáng buồn nhất về điều này là một câu trả lời Java đang đánh bại tôi ... " Phần này khiến tôi cười khúc khích .. xD Tôi thích cách bạn kiểm tra độ dài của số để xác định xem nó có nằm trong phạm vi không 0-9. Btw, umm .. Tôi nhận thấy một lỗi trong Thay thế của bạn. Nó hiện đang đầu ra **thay vì ^lũy thừa. (Ngoài ra, bạn được phép nhập **, nhưng không được xuất nó trong bảng kết quả. Hiện tại bạn có cách khác.)
Kevin Cruijssen

1
@KevinCruijssen Rất tiếc. Đã sửa thành công, không thay đổi số byte. Cảm ơn đã chỉ ra rằng!
HyperNeutrino

@StewieGriffin Vâng. Cảm ơn bạn.
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;}

Sử dụng không có các đường ngang / dọc và các ký tự được hiển thị trong các ví dụ thử thách ( +-*/^%).
Sử dụng một chỉ mục 0-5cho sáu toán hạng toán học làm đầu vào.

-7 byte nhờ @Frozn .

Giải trình:

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

Mã kiểm tra:

Hãy thử nó ở đây.

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
Có lẽ bạn có thể vượt qua bnhư một doubleđể pvà thoát khỏi rbằng cách gán giá trị của xích ternary tới b.
Frozn

3

Haskell, 230 199 182 + 53 47 46 + 1 byte dải phân cách = 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

Hàm là (zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!), một mình chiếm 53 byte, trong đó 0 là phép cộng, 1 là phép trừ, 2 là phép nhân, 3 là phép chia, 4 là lũy thừa và 5 là phép đo.

Hãy thử trực tuyến!

Giải trình

Đến sau (có thể). . . . Để bây giờ một số mẩu tin nhỏ :? là toán tử lũy thừa ,! là toán tử chia và & là toán tử mod.

EDIT: Một phần của số lượng lớn có thể là do hầu hết (?) Các câu trả lời khác sử dụng eval, mà Haskell không có mà không cần nhập dài.

EDIT2: Cảm ơn Ørjan Johansen đã giảm -31 byte (Wow!) Cho mã và -6 byte khỏi chức năng! Cũng thay đổi một số trong số 11 thành 10 cho mục đích thống nhất. Hãy thử phiên bản cập nhật trực tuyến!

EDIT3: Cùng một người, mười bảy byte! Hãy thử phiên bản cập nhật, cập nhật trực tuyến!


1
Các !bài kiểm tra ngắn hơn : e<-a`div`b,e*b==a=ehoặc (e,0)<-a`divMod`b=e.
Ørjan Johansen

1
Chức năng ngắn hơn:(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Ørjan Johansen

Kiểm tra đảo ngược + một mẹo chơi golf "tiêu chuẩn" mang lại last$f k:[' '|k<0||k>9]. Cuối cùng (có thể), [0..9]chỉ đủ dài để trả tiền để xác định nó là tên khi sử dụng hai lần.
Ørjan Johansen

Không, một nữa: k<-[o x y]ngắn hơn a let.
Ørjan Johansen

Một từ: Wow! :)
Tên hiển thị chung

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)

Hãy thử trực tuyến!

Đầu vào: Python 2

'+' Thêm vào

'-' Hấp dẫn

'*' Phép nhân

'/' Bộ phận

'**' Lũy thừa

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

Hãy thử trực tuyến!

Đầu vào: Python 3

+ Thêm vào

- Hấp dẫn

* Phép nhân

// Bộ phận

** Lũy thừa

% Modulo

Giải trình

lưu trữ range(10)vào một biến r, chúng ta có thể nhận được dòng đầu ra đầu tiên của định dạng

operator 0 1 2 3 4 5 6 7 8 9

bằng cách ánh xạ mọi int vào rchuỗi và nối danh sách chuỗi ['0','1','2','3','4','5','6','7','8','9']với khoảng trắng svới ptoán tử

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

Với điều đó, cho mọi itrong r(phạm vi), cho mọi jđánh giá ijvới nhà điều hành của bạn

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

ở đây, một ngoại lệ có thể được ném nếu không được xử lý - chia hoặc mô đun bằng 0. Để xử lý trường hợp này ( i and(j%i==0 and'/'==p or'%'==p)) và định dạng đầu ra được mô tả trong báo cáo vấn đề (kết quả cho mỗi đánh giá không nên là số âm hoặc số lớn hơn 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

Do đó in bảng số học!

Chúc mừng mã hóa!


Câu trả lời Python 2 đẹp. Đoán ở 197 mà làm cho chúng ta bằng nhau. Nó đã cho tôi một vài nỗ lực hơn mặc dù. Làm tốt. Vấn đề nhỏ. Cho / bảng hiển thị .0 và không phải là số nguyên. Chắc chắn điều đó dễ dàng được sửa :)
ElPedro

Xin lỗi nhưng đã rút lại upvote của tôi khi tôi thấy điều đó, Sẽ thêm nó một lần nữa khi bạn có cơ hội sửa nó :)
ElPedro

Cảm ơn bạn! Nhưng Python 2 in int và python 3 in nổi nếu bạn sử dụng '/' làm đầu vào. Fir python 3 bạn phải sử dụng '//'. Tôi đã đề cập rõ ràng rằng.
Keerthana Mitchhakaran

Và có vẻ như ai đó đang chỉnh sửa liên kết của tôi và liên kết te python 2 đã được đổi thành python 3. Tôi đã hoàn nguyên nó ngay bây giờ.
Keerthana Mitchhakaran

Tôi đã có vấn đề này trước đây. Đó là bởi vì bạn có 2 liên kết TOI trên cùng một trang. Khi bạn nhấp vào một trong hai liên kết, nó sẽ mở định nghĩa liên kết đầu tiên mà nó tìm thấy. Làm tròn nó bằng cách đổi tên liên kết thứ hai thành "thử trực tuyến 3" hoặc một cái gì đó và cũng đổi tên định nghĩa liên kết. Nên làm việc tốt rồi.
ElPedro

2

APL (Dyalog) , 68 76 byte

Yêu cầu ⎕IO←0mặc định trên nhiều hệ thống. Nhắc nhở đầu vào và mong đợi một ký tự đại diện cho toán hạng.

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

Hãy thử trực tuyến!

Phần lớn mã là để phá vỡ kết quả của APL cho ÷00*0 và để chống lại modulo của APL ( |) có các đối số của nó bị đảo ngược so với hầu hết các ngôn ngữ khác. Sẽ chỉ có 41 byte nếu không:

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

Hãy thử trực tuyến!


Ồ và sau tất cả công việc khó khăn của tôi về câu trả lời Python của tôi. Chơi đẹp.
ElPedro

1

R , 194 177 byte

-17 byte chuyển sang thao tác đầu ra ma trận

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

Hãy thử trực tuyến!

Thay đổi cách tiếp cận này có một số nhược điểm, cụ thể là không thể tối ưu hóa bằng cách sử dụng pryr và hơi khó để thiết lập ma trận gốc, nhưng nó có thể được xuất hoàn hảo với một số khoảng trắng ở dòng đầu tiên.

Tôi vẫn phải sử dụng substrthủ thuật vì %%toán tử mod. Sẽ tiếp tục cắt giảm điều này khi tôi có cơ hội, nó vẫn cảm thấy rất vụng về đối phó với các trường hợp đặc biệt.


0

PHP, 191 byte

**thay vì ^làm đầu vào+ - / % * **

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

Phiên bản trực tuyến của cả hai phiên bản

PHP, 245 byte không có eval

đầu vào + - / % * ^

sử dụng bcpowmod($c,1,$r)thay bcmod($c,$r)vì bởi vì tôi cần một tham số thứ ba trong đầu vào phân chia. $c**1%$r==$c%$r

Hàm toán 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

05AB1E , 56 55 byte

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

Đầu ra không có dòng và với đảo ngược xy. Input / output đang sử dụng +, -, *, /, m, %.

Hãy thử trực tuyến hoặc xác minh tất cả các bảng .

21 byte được sử dụng đối với trường hợp sửa chữa cạnh /0, %00^0, mà kết quả 0, 01tương ứng trong 05AB1E .. Ở đây không có phần đó ( 34 byte ):

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

Dùng thử trực tuyến hoặc thử tất cả các bảng .

Giải trình:

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.