Tugas Anda adalah menulis program yang akan menerima input seperti ini:
a + b * c + a / 2
dan akan menghasilkan kode sumber untuk program yang mengambil input pengguna dan kemudian mengevaluasi ekspresi.
Ekspresi dapat berisi operator +
, -
, *
, /
; variabel huruf kecil satu huruf; dan bilangan bulat antara 0 dan 32000. Diutamakan aritmatika standar harus diikuti dengan benar. Ekspresi dibatasi hingga 26 variabel unik a hingga z. Namun, satu variabel dapat muncul lebih dari satu kali.
Anda dapat mengasumsikan bahwa ekspresi input valid (mengikuti aturan ini).
Program yang dihasilkan harus meminta input pengguna dalam formulir ini, meminta hanya sekali untuk setiap variabel:
a =
Input pengguna dari 0 hingga 32000 harus ditangani dengan benar. Kemudian akan mencetak ekspresi dan hasil yang benar. Anda dapat menggunakan bilangan bulat atau aritmatika floating point. Perhitungan harus dilakukan dengan setidaknya 32 bit presisi. Selain itu, Anda tidak perlu khawatir meluap atau membaginya dengan nol.
Contoh program Perl yang dihasilkan bukan golf untuk ekspresi di atas:
print "a = ";
my $a = <>;
print "b = ";
my $b = <>;
print "c = ";
my $c = <>;
print "a + b * c + a / 2 = " . ($a + $b * $c + $a / 2);
Contoh input dan output program yang dihasilkan untuk ekspresi di atas:
a = 1
b = 2
c = 3
a + b * c + a / 2 = 7.5
Skor dihitung sebagai panjang program + panjang program yang dihasilkan untuk ungkapan ini:
1 + a * 4 * b + 2 / d * e - a - 3 + g / h * 32000
Skor terendah menang.
Pembaruan: Hanya untuk menyoroti beberapa persyaratan masalah, sebagaimana dinyatakan di atas:
- Output dari program harus berupa kode sumber untuk program lain yang mengevaluasi ekspresi.
- Program harus mencetak ekspresi asli . Mungkin ada beberapa ambiguitas dalam hal ini (orang dapat berargumen bahwa itu
a+b
adalah ekspresi yang sama dengana + b
), tetapi untuk kejelasan katakanlah itu pasti ekspresi asli dengan ruang putih yang utuh. Semua jawaban yang valid sejauh ini telah melakukannya dengan cara itu.
\pL
bisa diganti[a-z]
. Tidak perludo
diblokir. Bisa saja menulis:${$&}//=print"$& = "and<>
\pL
, dilakukan. Tidak dapat digunakanand
dalam salah satu program, karena prioritasnya terlalu rendah;and
lebih diutamakan daripada//=
.Lua, 202 + 166 = 368
File "menghasilkan_code.lua"
Pemakaian:
Kode yang dihasilkan (urutan variabel tidak ditentukan):
Kode yang dihasilkan dalam aksi:
sumber
Tcl 198 + 155 = 352
menghasilkan
sumber
foreach
=>lmap
;va
=>v
Python 125 + 151 = 276
Sekarang sedang menjalankannya:
sumber
z=sorted(set(filter(str,isalpha,t)))
denganz=''.join(set(filter(str.isalpha,t)))
.