Pengantar:
Mari kita lihat Kalkulator standar di Windows:
Untuk tantangan ini, kita hanya akan melihat tombol-tombol berikut, dan mengabaikan yang lainnya:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
Tantangan:
Input:
Anda akan menerima dua input:
- Salah satunya adalah sesuatu untuk menunjukkan rotasi dengan peningkatan 90 derajat
- Yang lainnya adalah daftar koordinat yang mewakili tombol yang ditekan pada kalkulator yang diputar.
Berdasarkan input pertama, kami memutar tata letak yang disebutkan di atas searah jarum jam dengan peningkatan 90 derajat. Jadi, jika inputnya 0 degrees
, tetap apa adanya; tetapi jika inputnya adalah 270 degrees
, ia akan diputar tiga kali searah jarum jam (atau sekali berlawanan arah jarum jam). Berikut adalah empat kemungkinan tata letak:
Default / 0 degrees:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
90 degrees clockwise:
0 1 4 7
0 2 5 8
. 3 6 9
+ - * /
180 degrees:
+ . 0 0
- 3 2 1
* 6 5 4
/ 9 8 7
270 degrees clockwise / 90 degrees counterclockwise:
/ * - +
9 6 3 .
8 5 2 0
7 4 1 0
Input kedua adalah daftar koordinat dalam format wajar † . Sebagai contoh (0-index 2D integer-array):
[[1,2],[2,3],[0,3],[1,0],[1,1]]
Output:
Kami menampilkan jumlah, serta hasilnya (dan tanda yang sama =
).
Contoh:
Jadi jika inputnya adalah 270 degrees
dan [[1,2],[2,3],[0,3],[1,0],[1,1]]
, outputnya akan menjadi:
517*6=3102
Aturan tantangan:
- † Input dapat dalam format apa pun yang wajar. Input pertama bisa
0-3
,1-4
,A-D
,0,90,180,270
, dll input kedua bisa menjadi 0-diindeks array 2D, 1-diindeks array 2D, String, daftar Point-benda, dll panggilan Anda. Bahkan mungkin untuk menukar koordinat x dan y dibandingkan dengan contoh input yang diberikan. Harap sebutkan format input mana yang Anda gunakan dalam jawaban Anda! - Anda diizinkan menambahkan spasi (yaitu
517 * 6 = 3102
) jika Anda mau. - Anda diijinkan untuk menambahkan tertinggal angka nol setelah koma, untuk max tiga (yaitu
3102.0
/3102.00
/3102.000
bukan3102
atau0.430
bukan0.43
). - Anda tidak diizinkan untuk menambahkan tanda kurung di output, jadi
(((0.6+4)-0)/2)/4=0.575
bukan output yang valid. - Anda diizinkan menggunakan simbol-simbol operan lain untuk bahasa Anda. Jadi
×
atau·
bukannya*
; atau÷
bukannya/
; dll. - Karena kalkulator secara otomatis menghitung ketika memasukkan operan, Anda harus mengabaikan prioritas operator! Jadi
10+5*3
akan menghasilkan45
((10+5)*3=45
), bukan25
(10+(5*3)=25
)
(yaitu10
→+
→5
→*
(sekarang menampilkan 15 di layar) →3
→=
(sekarang menampilkan jawabannya45
)). Ingatlah ini saat menggunakaneval
dan fungsi serupa pada jumlah yang dihasilkan. - Tidak akan ada uji kasus untuk pembagian dengan 0.
- Tidak akan ada kasus uji dengan lebih dari tiga digit desimal sebagai hasilnya, jadi tidak perlu membulatkan hasilnya.
- Tidak akan ada kasus uji di mana beberapa operan saling mengikuti, atau di mana dua titik saling mengikuti.
- Tidak akan ada kasus uji untuk angka negatif. Tanda minus (
-
) hanya akan digunakan sebagai operan, bukan sebagai negatif. - Tidak akan ada kasus uji untuk
.##
tanpa nomor utama sebelum koma (yaitu2+.7
tidak akan menjadi kasus uji yang valid, tetapi2+0.7
bisa jadi).
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, tambahkan link dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
Input: 270 degrees & [[1,2],[2,3],[0,3],[1,0],[1,1]]
Output: 517*6=3102
Input: 90 degrees & [[3,1],[0,0],[0,1],[3,3],[2,0],[0,3],[0,0],[0,2],[3,0],[2,1]]
Output: 800/4+0.75=200.75
Input: 0 degrees & [[0,0],[1,0],[2,0],[3,0],[1,2],[2,1],[2,2]]
Output: 789/263=3
Input: 180 degrees & [[3,0],[1,0],[1,2],[0,0],[3,2],[0,1],[2,0],[0,3],[2,1],[0,3],[3,2]]
Output: 0.6+4-0/2/4=0.575
sumber
1+-*/+-*/2
akan memberikan0.5
pada Windows (10) kalkulator.[1,3],
2+.7
?Jawaban:
SOGL V0.12 ,
706967 byteCobalah di Sini , atau coba versi yang mengambil input seperti yang diberikan dalam kasus uji
menggunakan
I
operator SOGL , yang merotasi array. Kemudian membaca string sebagai array JavaScript, dan di mana operasi digunakan, membungkus hasil sebelumnya dalam tanda kurung, mengevaluasi sebagai JavaScript dan kemudian menghapus tanda kurung.sumber
Dyalog APL,
94888685 byteCobalah online!
Mengambil rotasi sebagai argumen kiri
0-3
,, dan indeks berbasis 1 sebagai argumen benar, sebagai daftary x
koordinat, seperti(1 1)(2 3)(4 5)
dll.Ini menjadi cukup berantakan karena evaluasi ekspresi tangan kanan di APL.
sumber
C (gcc) , 282
294295296300304306 310byteSemua optimasi harus dimatikan dan hanya bekerja pada GCC 32-bit.
1 byte berkat @Orion!
Cobalah online!
Prototipe fungsi:
Format input (seperti pada TIO):
Versi tidak dikoleksi dengan komentar:
Kode dapat menangani kasus seperti
1+.7
atau-8*4
.Sangat sedih C tidak memiliki
eval
😭.sumber
3*-5
tidak valid. Saya sudah menentukan ini dalam aturan.double
denganfloat
byte gratis. Juga, tidakputc()
identik denganputchar()
? Tapi aku bisa saja salah.putc
perlu argumen kedua untuk menentukan aliran yang Anda tulis?JavaScript (ES6),
162160157 byteMengambil input sebagai orientasi
o
dan larik koordinat (y, x)a
dalam sintaks currying(o)(a)
.Orientasinya adalah bilangan bulat dalam [0..3] :
Uji kasus
Tampilkan cuplikan kode
sumber
Ruby ,
135 133132 byteCobalah online!
Orientasi sebagai bilangan bulat: 0 untuk 0 °, 1 untuk 90 ° dan seterusnya.
sumber
Python 3,
235234230 byteAgak jelek tapi berfungsi untuk semua test case kecuali yang pertama, yang sepertinya tidak cocok dengan contoh kalkulator. Saya mengambil rotasi sebagai 0-3 (0-270) dan kalikan dengan 16 untuk mengimbangi.
eval()
adalah built-in yang mencoba mengkompilasi string sebagai kode dan menangani pengubahan simbol teks menjadi operator.Metode alternatif, ternyata sedikit lebih lama tapi saya sangat suka tip SO ini untuk memutar array.
sumber
Java 10,
418380 byteMemutuskan untuk menjawab pertanyaan saya sendiri juga. Saya yakin itu bisa bermain golf lagi dengan menggunakan pendekatan yang berbeda.
Masukan sebagai
int
(0-3
) danint[][]
(0-diindeks / sama seperti dalam deskripsi tantangan). Output sebagaifloat
memimpin.0
jika hasilnya adalah bilangan bulat bukan angka desimal.Penjelasan:
Coba di sini.
sumber