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 hasil10
atau lebih tinggi, setiap hasil-1
atau 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 (yaituy/x
alih-alihx/y
), selama Anda konsisten untuk keenam output! (Jadi Anda tidak diperbolehkan menggunakany-x
danx/y
dalam 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 kode-golf , 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/x
bukannya 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
1
, lainnya0
, yang lain sesuatu untuk0^0
atau 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.y-x
,y/x
,y^x
dany%x
bukanx-y
,x/y
,x^y
danx%y
? Hmm, saya kira itu bisa baik-baik saja. Saya akan mengeditnya dalam jawaban; selama Anda akan konsisten untuk mereka berenam (jadi tidaky-x
danx/y
dalam jawaban yang sama).Jawaban:
Japt , 45 byte
Berkolaborasi dengan @ETHproductions
Jalankan secara online!
Mengambil input sebagai:
"+"
sebagai tambahan"-"
untuk pengurangan"*"
untuk perkalian"/"
untuk pembagian"p"
untuk eksponensial"%"
untuk moduloPenjelasan (Dengan pintasan yang diperluas):
sumber
JavaScript (ES7), 128 byte
Khusus-casing
0^0
harganya 8 byte.sumber
^
), tapi terima kasih!Pengoperasian Bahasa scripting Flashpoint ,
343333303301 byteTelepon dengan:
Tidak Disatukan:
Keluaran:
operator +
operator -
operator *
operator /
operator ^
operator%
sumber
Python 2 ,
240231226224203202200197 byteCobalah online!
Mengambil input sebagai salah satu dari "+", "-", "*", "/", "^" atau "%".
Suntingan
-9-16 dengan terima kasih kepada @FelipeNardiBatista untuk beberapa petunjuk yang bagusTurun ke 221 dengan bantuan lebih banyak dari @FelipeNardiBatista dan kemudian turun ke 203 dengan kalah
and E(c)==int(E(c))
. Jika kita memeriksa apakahE(c)
ada dirange(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.
sumber
('**',i)[i<'^']
dan(i<'^'or x>0 or b>0)
menghemat 4 bytea=i=input()
denganfor z in R:a+=' '+`z`
untuk beberapa byte ekstra disimpan vsa=i+' 0 1 2 3 4 5 6 7 8 9'
1.
vs1.0
danE(c)in R
vs-1<E(c)<10
untuk 2 bytex+b>0
vsx>0 or b>0
and"b%s(x*1.)"%('**',i)[i<'^']
vs"b"+('**',i)[i<'^']+"(x*1.)"
(
,)
di gabung Anda untuk 223 byteMathematica, 150 byte
Menentukan fungsi unary yang
±
mengambil salah satu karakter+-*/^%
sebagai inputnyai
(jadi misalnya,±"^"
), dan mengembalikanGrid
objek 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 golfSubtract,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 menjadiNull
atau""
jika itu bukan hasil satu digit (/._@__->""
diperlukan karena beberapa hasil seperti1/0
tidak dapat diproses oleh ketidaksetaraan0<=#<=9
). Akhirnya, kami menambahkan berbagai header dan footer dan menampilkan jawabannya.sumber
0^0
. "0^0
untukIndeterminate
, yang memberi kami bahagia unevaluated hasilIf[0<=Indeterminate<=9, Indeterminate]
mid-perhitungan; tetapi/._@__->""
merupakan aturan yang mengambil fungsi yang tidak dievaluasi dan argumennya dan mengubahnya menjadi string yang tidak terlihat.#^0=1
dan0^#
= 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.±"^"
.Python 3,
343335363362 byteBagian paling menyedihkan tentang ini adalah bahwa jawaban Java mengalahkan saya ... Saya akan bermain golf lebih banyak di pagi hari.
Replit
-8 byte dengan beralih ke daftar pemahaman daripada loop ganda
+28 byte untuk menghindari kasus tepi
0 ^ 0
. -.--1 byte dengan mengubah
==0
ke<1
berkat @StewieGriffinsumber
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.)Java 7,
312305 byteTidak menggunakan garis horizontal / vertikal, dan karakter seperti yang ditampilkan dalam contoh-tantangan (
+-*/^%
).Menggunakan indeks
0-5
untuk keenam operan matematika sebagai input.-7 byte berkat @Frozn .
Penjelasan:
Kode uji:
Coba di sini.
sumber
b
sebagaidouble
untukp
dan menyingkirkanr
dengan menetapkan nilai ternary dirantaib
.Haskell,
230199182 +534746 + 1 byte separator =284247232229 byteFungsinya 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!
sumber
!
Tes lebih pendek :e<-a`div`b,e*b==a=e
atau(e,0)<-a`divMod`b=e
.(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
last$f k:[' '|k<0||k>9]
. Akhirnya (mungkin),[0..9]
cukup lama untuk membayar untuk mendefinisikannya sebagai nama saat menggunakannya dua kali.k<-[o x y]
lebih pendek dari alet
.Python 2 , 197 byte
Cobalah online!
Input: Python 2
'+'
Tambahan'-'
Pengurangan'*'
Perkalian'/'
Divisi'**'
Eksponensial'%'
ModuloPython 3 , 200 byte
Cobalah online!
Input: Python 3
+
Tambahan-
Pengurangan*
Perkalian//
Divisi**
Eksponensial%
ModuloPenjelasan
menyimpan
range(10)
ke variabelr
, kita bisa mendapatkan baris pertama dari formatdengan memetakan setiap int
r
ke string dan bergabung dengan daftar string['0','1','2','3','4','5','6','7','8','9']
dengan ruangs
denganp
operatorDengan itu, untuk setiap
i
dalamr
(kisaran), untuk setiapj
evaluasii
danj
dengan operator Andadi 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
),Dengan demikian mencetak tabel-aritmatika!
Selamat Coding!
sumber
APL (Dyalog) ,
6876 byteMembutuhkan
⎕IO←0
yang default pada banyak sistem. Meminta input dan mengharapkan satu karakter yang mewakili operan.Cobalah online!
Sebagian besar kode adalah untuk menghindari hasil APL untuk
÷0
dan0*0
dan untuk menangkal bahwa modulo APL (|
) memiliki argumennya terbalik dibandingkan dengan kebanyakan bahasa lainnya. Jika tidak, hanya 41 byte :Cobalah online!
sumber
R ,
194177 byte-17 byte beralih ke memanipulasi keluaran matriks
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.sumber
PHP, 191 Bytes
**
dari pada^
sebagai input+ - / % * **
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
sumber
05AB1E ,
5655 byteOutput tanpa garis dan dengan terbalik
x
dany
. Input / output menggunakan+
,-
,*
,/
,m
,%
.Cobalah online atau verifikasi semua tabel .
21 byte digunakan untuk kasus tepi memperbaiki
/0
,%0
dan0^0
, yang mengakibatkan0
,0
dan1
masing-masing dalam 05AB1E .. Berikut tanpa bagian itu ( 34 bytes ):Cobalah online atau coba semua tabel .
Penjelasan:
sumber