เลขจำนวนเต็มของ Arithmetic-Tables


17

ท้าทาย:

เอาท์พุท 'จำนวนเต็มตัวเลข' ของหนึ่งในหกคณิตศาสตร์ต่อไปนี้ตารางตามการป้อนข้อมูล:
- นอกจากนี้ ( +);
- การลบ ( -);
- การคูณ ( *);
- แผนก ( /);
- การยกกำลัง ( ^);
- การทำงานแบบโมดูโล ( %)

กฎ:

  • ฉันจะทำอะไรกำหนดเป็น 'จำนวนเต็มหลัก': ทุกผลมาจากการดำเนินการทางคณิตศาสตร์ซึ่งเป็นสิ่งหนึ่งต่อไปนี้: 0, 1, 2, 3, 4, 5, 6, 7, ,8 9ซึ่งหมายความว่าคุณจะแยกผลลัพธ์ทั้งหมด10หรือสูงกว่าทุกผลลัพธ์ของ-1หรือต่ำกว่าและผลลัพธ์ที่ไม่ใช่จำนวนเต็มทุกรายการ
  • เราจะคำนวณผลลัพธ์ทางคณิตศาสตร์ได้อย่างไร: โดยใช้เลขตัวแรกสุดแล้วใช้ตัวถูกดำเนินการด้วยตัวเลขทางซ้าย คุณได้รับอนุญาตให้ทำเช่นนี้ในทางกลับกัน (เช่นy/xแทนที่จะเป็นx/y) ตราบใดที่คุณสอดคล้องกับเอาท์พุททั้งหก! (ดังนั้นคุณจะไม่ได้รับอนุญาตให้ใช้y-xและx/yในคำตอบเดียวกัน)
  • เราจะไม่เอาท์พุทอะไรเลยสำหรับหารด้วย 0 กรณีทดสอบ (สำหรับตารางการดำเนินการหารและโมดูโล)
  • 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

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

กฏท้าทาย:

  • การขึ้นบรรทัดใหม่และการเว้นวรรคต่อท้ายเป็นทางเลือก
  • เส้นแนวนอนและแนวตั้งในกรณีทดสอบเป็นตัวเลือก ฉันเพิ่มเฉพาะเพื่อให้อ่านง่ายขึ้น
  • ช่องว่างระหว่างผลลัพธ์แต่ละรายการไม่ได้เป็นตัวเลือก
  • สัญลักษณ์สำหรับการคำนวณอาจแตกต่างกันตราบใดที่มันชัดเจนว่ามันคืออะไร เช่น×หรือ·แทน*การคูณ ÷แทน/การแบ่ง; ฯลฯ
    และตราบใดที่มันเป็นซิงเกิ้ลของตัวละครจึงขออภัย **
  • รูปแบบอินพุตมีความยืดหยุ่น คุณสามารถเลือกดัชนีจาก 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

เราอนุญาตมากกว่าหนึ่งช่องว่างระหว่างคอลัมน์หรือไม่
Adám

@ Adámขออภัยที่ตอบกลับล่าสุด สำหรับคำถามแรกของคุณ: ไม่เสียใจ ฉันรู้ว่าบางภาษาพิมพ์1อื่น ๆ0หรืออย่างอื่นเพื่อ0^0หรือหาร / ดัดแปลง 0 แต่คุณจะต้องแก้ไข สำหรับคำถามที่สองของคุณ: ใช่แน่นอนตราบใดที่ตัวเลขยังคงอยู่ในคอลัมน์ / แถวเดียวกันคุณสามารถใช้ช่องว่างได้มากเท่าที่คุณต้องการ
Kevin Cruijssen

คำสั่งของการขัดแย้งมีความสำคัญสำหรับการดำเนินการที่ไม่ใช่การสับเปลี่ยน?
Adám

@ อดัมดังนั้นคุณหมายความว่าคุณจะส่งออกตารางสำหรับy-x, y/x, y^xและy%xแทนx-y, x/y, x^yและx%y? อืมฉันคิดว่าคงไม่เป็นไร ฉันจะแก้ไขมันในคำตอบ; ตราบใดที่คุณมีความสอดคล้องกับทั้งหกคน (ไม่ใช่y-xและx/yในคำตอบเดียวกัน)
Kevin 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^0เสียค่าใช้จ่าย 8 ไบต์


เจ๋งมากว่าคุณได้เพิ่มตัวถูกดำเนินการเพิ่มเติมเช่น OR และและในตัวอย่างทดสอบของคุณอย่างไร +1
Kevin Cruijssen

@KevinCruijssen ฉันต้องลบหรือบันทึกไบต์ (ตัวดำเนินการอื่น ๆ เรียงลำดับก่อนหน้า^) แต่ขอบคุณ!
Neil

5

ภาษาสคริปต์การทำงานของ Flashpoint , 343 333 303 301 bytes

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)

Ungolfed:

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

Python 2 , 240 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 สำหรับคำแนะนำดีๆ

ลงไปที่ 221 ด้วยความช่วยเหลือเพิ่มเติมจาก @FelipeNardiBatista แล้วลงไปที่ 203 and E(c)==int(E(c))โดยการสูญเสีย หากเรากำลังตรวจสอบว่าE(c)อยู่ในrange(10)นั้นจะเป็นจำนวนเต็มเสมอถ้ามี ไม่จำเป็นต้องตรวจสอบซ้ำ

นี้มีที่จะไปต่ำกว่า 200 โดยไม่ต้องเปลี่ยนไปใช้งูหลาม 3 และประกาศP=printและประกาศ ความคิดใด ๆ ฉันมีความสุขเสมอที่ได้เรียนรู้

yesss! ฉันรู้ว่ามันสามารถทำได้ 197 เวลานอนตอนนี้ ฉันใช้เวลากับสิ่งนี้มากพอ ขอบคุณสำหรับความท้าทายที่น่าสนใจ @KevinCruijssen


1
('**',i)[i<'^']และ(i<'^'or x>0 or b>0)ประหยัด 4 ไบต์
Felipe Nardi Batista

1
a=i=input()ด้วยfor z in R:a+=' '+`z`สำหรับบางพิเศษไบต์บันทึก VSa=i+' 0 1 2 3 4 5 6 7 8 9'
เฟลิ Nardi บาติสตา

1
1.vs 1.0and E(c)in Rvs -1<E(c)<10for 2 bytes
Felipe Nardi Batista

1
x+b>0vs x>0 or b>0and "b%s(x*1.)"%('**',i)[i<'^']vs"b"+('**',i)[i<'^']+"(x*1.)"
เฟลิเป้นาร์ดีบาติสตา

1
มีหนึ่งชุดของวงเล็บพิเศษ(, )ในการเข้าร่วมสำหรับ 223 ไบต์ของคุณ
เฟลิ Nardi บาติสตา

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]

กำหนดฟังก์ชัน unary ±โดยใช้หนึ่งในอักขระ+-*/^%เป็นอินพุตi(เช่นตัวอย่าง±"^") และส่งคืนGridวัตถุที่ดูเหมือนผลลัพธ์สุดท้ายใน OP

<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>เชื่อมโยงไปยังแต่ละอักขระป้อนข้อมูลที่เป็นไปได้ฟังก์ชั่นไบนารีที่สอดคล้องกัน (ฟังได้) (ที่#-#2&,1##&,#/#2&มีรุ่นgolfed ของSubtract,Times,Divide); ดังนั้นจึง<|...|>[i][r,#]คำนวณการทำงานของไบนารีด้วยอาร์กิวเมนต์แรกที่เป็นไปได้ทั้งหมดและ#เป็นอาร์กิวเมนต์ที่สอง If[0<=#<=9,#]/._@__->""&แปลงผลลัพธ์แต่ละรายการให้เป็น a Nullหรือ""ถ้าไม่ใช่ผลลัพธ์หลักเดียว ( /._@__->""จำเป็นเนื่องจากผลลัพธ์บางอย่างที่1/0ไม่สามารถประมวลผลได้ด้วยความไม่เท่าเทียมกัน0<=#<=9) สุดท้ายเราเพิ่มส่วนหัวและท้ายกระดาษที่หลากหลายและแสดงคำตอบ


คำตอบและคำอธิบายที่ดี คุณอาจจะมีลิงค์ลองออนไลน์ และเป็นหนึ่งในคำถาม / หมายเหตุผมไม่เห็นเอ่ยถึงกฎขอบกรณีใด ๆ : " เราจะไม่ได้อะไรเอาท์พุทสำหรับขอบกรณี0^0. " ไม่ Mathematica อะไรเอาท์พุทเริ่มต้นสำหรับการนี้ขอบกรณี?
Kevin Cruijssen

1
ฉันเพิ่มลิงค์ด้านบน Mathematica ประเมิน0^0ไปIndeterminateซึ่งจะช่วยให้เรามีความสุข unevaluated ผลIf[0<=Indeterminate<=9, Indeterminate]กลางคำนวณ; แต่/._@__->""เป็นกฎที่ใช้ฟังก์ชันใด ๆ ที่ไม่ได้ประเมินค่าและมีการขัดแย้งและเปลี่ยนเป็นสตริงที่มองไม่เห็น
เกร็กมาร์ติน

อา ok ดังนั้น Mathematica ถูกต้องส่งกลับว่าทั้งสองขัดแย้งกฎ#^0=1และ0^#= 0` 0^0จะเกิดขึ้นสำหรับ ดีถึงตอนนี้และสะดวกสำหรับความท้าทายนี้ :) Btw ลิงค์ของคุณไม่ทำงาน ฉันได้รับข้อผิดพลาดที่ฉันไม่ได้รับอนุญาตให้เข้าถึง
Kevin Cruijssen

ตกลงคุณจะต้องไปที่sandbox.open.wolframcloud.comแล้ววางรหัสในตัวคุณเองแล้วเรียกมันด้วยคำสั่งเช่น±"^"นั้น
เกร็กมาร์ติน

4

Python 3, 343 335 363 362 ไบต์

ส่วนที่แย่ที่สุดเกี่ยวกับเรื่องนี้คือคำตอบของจาวาคือตีฉัน ... ฉันจะตีกอล์ฟให้มากกว่านี้ในตอนเช้า

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 ไบต์โดยสลับไปที่รายการความเข้าใจมากกว่าห่วงคู่
28 0 ^ 0ไบต์เพื่อหลีกเลี่ยงกรณีขอบ -.-
-1 ไบต์โดยการเปลี่ยนแปลง==0ที่จะ<1ต้องขอบคุณ @StewieGriffin


" ส่วนที่น่าเศร้าที่สุดเกี่ยวกับเรื่องนี้คือคำตอบของจาวาคือตีฉัน ... " ส่วนนี้ทำให้ฉันหัวเราะคิกคัก .. xD ฉันชอบวิธีที่คุณตรวจสอบความยาวของจำนวนเพื่อดูว่าอยู่ในช่วง0-9หรือไม่ Btw อืมมม .. ฉันสังเกตเห็นข้อผิดพลาดหนึ่งใน Repl ของคุณ ขณะนี้มันแสดงผล**แทน^การยกกำลัง (นอกจากนี้คุณยังได้รับอนุญาตให้ป้อนข้อมูล**แต่จะไม่ส่งออกในตารางผลลัพธ์ขณะนี้คุณมีวิธีอื่น ๆ )
Kevin Cruijssen

1
@KevinCruijssen อ๊ะ แก้ไขเรียบร้อยแล้วไม่มีการเปลี่ยนแปลงจำนวนไบต์ ขอบคุณสำหรับการชี้ให้เห็น!
HyperNeutrino

@StewieGriffin ใช่ ขอขอบคุณ.
HyperNeutrino

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

ไม่ใช้เส้นแนวนอน / แนวตั้งและตัวอักษรดังที่แสดงในตัวอย่างความท้าทาย ( +-*/^%)
ใช้ดัชนีของ0-5ตัวถูกดำเนินการทางคณิตศาสตร์หกตัวเป็นอินพุต

-7 ไบต์ขอบคุณที่@Frozn

คำอธิบาย:

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
บางทีคุณอาจจะผ่านbเป็นdoubleไปpและได้รับการกำจัดrโดยการกำหนดค่าของการถูกล่ามโซ่ ternary bไป
Frozn

3

Haskell, 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 ไม่มีโดยไม่มีการนำเข้าที่มีความยาว

แก้ไข 2: ขอบคุณØrjan Johansen สำหรับ -31 ไบต์ (ว้าว!) ปิดรหัสและ -6 ไบต์ปิดฟังก์ชั่น! นอกจากนี้ยังเปลี่ยนบางส่วนของ 11s เป็น 10s เพื่อความสอดคล้อง ลองเวอร์ชันที่อัปเดตออนไลน์!

EDIT3: คนคนเดียวกันสิบเจ็ดไบต์มากขึ้น! ลองใช้เวอร์ชันที่อัปเดตและอัปเดตออนไลน์!


1
สั้น!ทดสอบ: หรือe<-a`div`b,e*b==a=e (e,0)<-a`divMod`b=e
Ørjan Johansen

1
ฟังก์ชั่นที่สั้นลง:(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
Ørjan Johansen

การย้อนกลับของการทดสอบ + เป็น "มาตรฐาน" last$f k:[' '|k<0||k>9]เคล็ดลับการเล่นกอล์ฟให้ ในที่สุด (อาจ) [0..9]นานพอที่จะจ่ายเพื่อกำหนดเป็นชื่อเมื่อใช้สองครั้ง
Ørjan Johansen

Nah อีกหนึ่ง: จะสั้นกว่าk<-[o x y] let
Ørjan Johansen

คำเดียว: ว้าว! :)
ชื่อที่แสดงทั่วไป

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

'+' ส่วนที่เพิ่มเข้าไป

'-' Sbtraction

'*' การคูณ

'/' แผนก

'**' ยกกำลัง

'%' modulo

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

+ ส่วนที่เพิ่มเข้าไป

- Sbtraction

* การคูณ

// แผนก

** ยกกำลัง

% modulo

คำอธิบาย

การจัดเก็บ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

ดังนั้นการพิมพ์ตารางเลขคณิต!

Happy Coding!


Nice Python 2 คำตอบ เดาที่ 197 ที่ทำให้เราเท่ากัน แม้ว่าฉันจะพยายามอีกสองสามครั้ง ทำได้ดี. ปัญหาเล็กน้อย สำหรับ / ตารางแสดง. 0 และไม่ใช่จำนวนเต็ม แน่นอนว่าได้รับการแก้ไขอย่างง่ายดาย :)
ElPedro

ขออภัยถอนการโหวตของฉันทันทีที่ฉันเห็นว่าจะเพิ่มอีกครั้งเมื่อคุณมีโอกาสที่จะแก้ไข :)
ElPedro

ขอขอบคุณ! แต่ Python 2 จะพิมพ์ int และ python 3 จะพิมพ์ลอยถ้าคุณใช้ '/' เป็นอินพุต Fir python 3 คุณต้องใช้ '//' ฉันได้กล่าวอย่างชัดเจนว่า
กีรนาปราการะรัน

และดูเหมือนว่ามีใครบางคนกำลังแก้ไขลิงก์ของฉันและลิงค์ te python 2 ได้เปลี่ยนเป็น python 3 ฉันได้เปลี่ยนมันแล้วตอนนี้
กีรนาปราการะรัน

ฉันเคยมีปัญหานี้มาก่อน เป็นเพราะคุณมี 2 ลิงค์ TOI ในหน้าเดียวกัน เมื่อคุณคลิกลิงก์ใดลิงก์หนึ่งนั้นจะเป็นการเปิดนิยามลิงค์แรกที่พบ รับรอบโดยการเปลี่ยนชื่อลิงค์ที่สองเพื่อ "ลองออนไลน์ 3" หรืออะไรก็ได้แล้วเปลี่ยนชื่อนิยามลิงค์ ควรทำงานได้ดีแล้ว
ElPedro

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 ÷0และ0*0และเพื่อต่อต้านว่า modulo ของ APL |มีการขัดแย้งกันเมื่อเปรียบเทียบกับภาษาอื่น ๆ ส่วนใหญ่ น่าจะเป็นเพียง41 ไบต์เป็นอย่างอื่น:

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

ลองออนไลน์!


ว้าว! และหลังจากที่ฉันได้ทำงานอย่างหนักกับคำตอบของ Python เล่นอย่างยุติธรรม
ElPedro

1

R , 194 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และเป็นเพียงเล็กน้อยที่จะตั้งค่าเมทริกซ์ดั้งเดิม แต่สามารถส่งออกได้อย่างสมบูรณ์แบบด้วยช่องว่างบางส่วนในบรรทัดแรก

ฉันยังคงต้องใช้substrเคล็ดลับเพราะ%%ผู้ประกอบการ mod จะยังคงตัดแต่งนี้ต่อไปเมื่อฉันได้รับโอกาสมันยังรู้สึกถึงการจัดการกับคดีพิเศษ


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 ไบต์โดยไม่มีการพิสูจน์

อินพุต + - / % * ^

ใช้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

05AB1E , 56 55 ไบต์

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

ขาออกได้โดยไม่ต้องมีเส้นและย้อนกลับและx yอินพุต / เอาต์พุตใช้+, -, *, /, ,m%

ลองมันออนไลน์หรือตรวจสอบตารางทั้งหมด

21 ไบต์ถูกนำมาใช้ในการแก้ไขปัญหากรณีขอบ/0, %0และ0^0ซึ่งส่งผลให้เกิด0, 0และ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.