Di kelas Ekonomi saya, teman-teman saya dan saya suka mencari cara untuk mengatur ulang digit dalam format tanggal (dalam MM / DD / YY) untuk membuat persamaan matematika yang valid. Untuk sebagian besar, kita diperbolehkan menggunakan penjumlahan, pengurangan, penggandaan, pembagian, tanda kurung, dan eksponensiasi sebagai tambahan pada penggabungan.
Program Anda harus melakukan hal serupa. Program harus mengimpor tanggal saat ini dan menyisipkan operator untuk mencetak ekspresi sesuai dengan aturan berikut.
- Digit HARUS digunakan secara berurutan. Pengaturan ulang digit tidak diizinkan.
- Ekspresi yang dihasilkan harus akurat secara matematis.
- Penambahan, pengurangan, perkalian, pembagian, eksponensial, dan penggunaan tanda kurung diperbolehkan. Jadi adalah gabungan angka. Namun, tidak semua operasi diperlukan. Anda tidak dapat menggunakan tanda pengurangan untuk membuat angka negatif (seperti
-1+1+11=10
pada 11 November 2010). - Program harus berjalan dalam 60 detik pada mesin standar.
Misalnya, tantangan ini ditulis pada 10 November 2015. Program akan menafsirkan ini sebagai 11/10/15. Output sampel akan menjadi (1+1)/10=1/5
.
Bonus
Anda dapat mengalikan jumlah byte dalam kode Anda dengan 0,9 untuk masing-masing dari berikut yang didukung oleh program Anda.
- Program mencetak semua kemungkinan ekspresi yang dapat dibentuk, dipisahkan oleh baris baru. Kalikan dengan 0,95 tambahan jika ekspresi terdaftar dalam urutan simbol tambahan.
- Program ini juga berfungsi untuk tanggal MM / DD / YYYY, mencetak kemungkinan dengan dua digit pertama tahun di samping kemungkinan tanpa. Jika bonus ini digabungkan dengan bonus pertama, semua kemungkinan dengan dua digit pertama tahun harus dicetak.
- Program ini juga mencetak persamaan untuk ketika ada beberapa kesamaan-kesamaan (misalnya, pada 11 November, 2011
1=1=1=1=1=1
akan dicetak, selain kemungkinan seperti1*1=1=1=1=1
,1*1*1=1=1=1
, dan1*1*1*1=1=1
. Semua kasus tersebut harus dicetak untuk bonus pertama yang akan dicapai. - Program ini mendukung konversi ke basis antara 2 dan 16. Perhatikan bahwa jika basis bukan 10, semua angka dalam ekspresi harus ditulis dalam basis yang sama, dan
(Base b)
harus ditulis setelah ekspresi (denganb
diganti sesuai).
Ini kode golf, jadi aturan standar berlaku. Kode terpendek dalam byte menang.
Jawaban:
Python 3,
424420369363 byteBrute-memaksa semua kemungkinan kombinasi operasi dalam angka dan berhenti ketika menemukan satu.
EDIT: Disimpan 4 byte berkat @NoOneIsHere
EDIT 2: Disimpan 51 (!) Byte berkat @ ValueInk
sumber
except:pass
, dan menghapus spasi di[ (p//(len(o)**i))%len(o)]
.__future__
, apakah meningkatkan ke Python 3 berfungsi lebih baik untuk situasi Anda? Juga, saya tidak mengerti mengapa Anda membalikkano
ketika Anda sedang membangun daftar operator-dengan-parens yang Anda miliki.o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])
untuk 2 byte