Menggunakan simbol matematika yang kita kenal: +, x, tanda kurung, dan bilangan rasional apa pun, mudah untuk membuat ekspresi yang mengevaluasi sejumlah bilangan yang diinginkan. Sebagai contoh: 1+(2x3)=7
, (1+2)+(3x6.5)=22.5
dan sebagainya. Cukup membosankan.
Dalam tantangan ini, kita akan menggunakan operator baru: ±
. Penggunaan ±
dalam ekspresi berarti Anda perlu mengevaluasi ekspresi dengan mengganti ±
dengan +
atau -
dengan semua cara yang mungkin, dan mengembalikan set semua nilai yang mungkin. Sebagai contoh:
1±2±3 = {-4,0,2,6}
karena1±2±3
dapat salah satu dari1+2+3
,1+2-3
,1-2+3
dan1-2-3
dan nilai-nilai mereka6,0,2,-4
masing-masing.(±2)x(2±3) = {-10,-2,2,10}
untuk alasan yang sama.
Sekarang, ternyata, diberi himpunan bilangan real yang berbeda, itu mungkin untuk membuat ekspresi dengan +
, x
, (
, )
, ±
, dan bilangan real yang mengevaluasi ke set yang diberikan.
Tugas
Tugas Anda adalah untuk menulis sebuah program atau fungsi dalam bahasa pilihan Anda, yang mengambil berurutan (daftar / array / format nyaman) dari bilangan bulat dan output ekspresi (sebagai string) yang terdiri dari +
, x
, (
, )
, ±
, dan bilangan rasional yang mengevaluasi ke himpunan angka yang diberikan.
- Perhatikan bahwa karakter yang tepat
±
tidak masalah; Anda dapat menggunakan karakter lain pilihan Anda selama itu dapat dibedakan dari karakter lain yang Anda gunakan. Tetapi Anda harus menyebutkan karakter yang Anda gunakan dalam kiriman Anda. - Input diperbolehkan terdiri dari perkiraan desimal (hingga akurasi yang masuk akal) dari bilangan rasional yang digunakan.
- Input dan output dapat diambil dengan salah satu cara standar.
- Celah standar dilarang.
- Anda dapat mengasumsikan bilangan bulat yang diberikan akan berbeda, dan disediakan dalam urutan yang meningkat.
- Output mungkin berisi spasi dan baris baru.
Kriteria Kemenangan
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Contohnya
Masukan | Output yang mungkin ------------- + ----------------------------- [1,2,3] | 2 ± 0,5 ± 0,5 [-7, -3,1,21] | (1 ± 2) x (3 ± 4)
Ide diambil dari pertanyaan di Turnamen Towns, Musim Gugur 2015 .
sumber
Jawaban:
Python 2 , 56 byte
Cobalah online!
The
?
singkatan±
. Contoh penggunaan:Idenya adalah bahwa kita dapat mengambil ekspresi
E
dan menyandingkan nilai baruh
dengan melakukan nilai(.5±.5)*(E+-h)+h
.sumber
+-h
, dan bukan adil-h
? Artinya, mengapa tidak membuat+
a-
dan menghapus-
yang saat ini ada di program?-
operator dalam ekspresi.Haskell , 52 byte
Cobalah online!
Penggunaan
?
untuk±
. Contoh:Fungsi
shows
tidakshows a b=(show a)++b
, trik saya belajar dari Lynn.sumber
Haskell , 58 byte
Menggunakan
#
untuk±
, karena satu byte lebih sedikit.f
mengambil daftar bilangan bulat dan mengembalikan string.Hasilnya berupa
n+(.5#.5)x(rest)
, di manan
elemen pertama dari daftar danrest
merupakan representasi dari semua yang lain dengann
dikurangkan dari masing-masing.Cobalah online!
sumber
Jelly , 29 byte
Mencetak v + (0.5¤0.5) × (i 1 + (0.5¤0.5) × ((i 2 + (0.5¤0.5) × (... (i n ) ...))) di mana v adalah angka pertama dalam array input dan i n adalah n th perbedaan tambahan antara unsur-unsur dari array input.
Cobalah online!
Bagaimana?
sumber
05AB1E , 25 byte
Cobalah online!
Penjelasan
Sayangnya, membangun ekspresi dari kanan berakhir pada byte yang sama dengannya
0¸«¥¤s¨RvX;Dy"ÿ+(ÿ±ÿ)*(ÿ)
. 8 byte yang digunakan untuk setup adalah pemborosan besar di sini.sumber
Haskell, 54 byte
tanda + adalah
'?'
. contoh:sumber
JavaScript (ES6),
5651 byteBerdasarkan rumus @ JonathanAllan.
@
singkatan±
.sumber