Kode mati duduk di sana tidak melakukan apa-apa, menatap kami tahu itu tidak akan pernah dieksekusi ... tapi hari ini kita bisa membalas dendam.
Spesifikasi
Input akan berupa string multiline.
Setiap baris dapat berupa penugasan atau ungkapan .
Tugas
Tugas adalah bentuk di <name> = number
mana nama adalah urutan huruf, garis bawah dan angka, tetapi tidak dimulai dengan angka.
Variabel dapat ditetapkan berapa kali.
Ekspresi
Ekspresi adalah bentuk <var_name OR number> <operation> <var_name OR number> ...
Ekspresi dapat berupa kombinasi dari:
- Variabel sudah ditentukan
- Operator aritmatika dasar
+-*/
- Bilangan (bilangan bulat)
Output yang diharapkan
Anda harus mengeluarkan string dengan penugasan yang berlebihan , penugasan yang tidak pernah digunakan oleh ekspresi yang mengikutinya, dihapus. Harap perhatikan bahwa penugasan juga bisa dibuat berlebihan jika penugasan tambahan untuk variabel yang sama dilakukan sebelum ekspresi menggunakan variabel dieksekusi.
Uji kasus
di
a = 10
a * 3
di luar
a = 10
a * 3
di
foo = 8
2 - 1
a = 18
di luar
2 - 1
di
a = 10
a = 8
b = 4
ab = 72
b / 6
b + 1
di luar
b = 4
b / 6
b + 1
di
a = 1
a = 2
a + 1
di luar
a = 2
a + 1
di
FooBar1 = 0
Fuz__ = 8
Fuz__ / 1
di luar
Fuz__ = 8
Fuz__ / 1
di
a = 1
a + 1
a = 2
a + 1
di luar
a = 1
a + 1
a = 2
a + 1
di
a = 1
1 / 5 * 8 + 4
di luar
1 / 5 * 8 + 4
di
a = 1
a + 1
a = 1
a + 1
di luar
a = 1
a + 1
a = 1
a + 1
di
a = 7
5 / a
di luar
a = 7
5 / a
sumber
a = 1; a + 1; a = 1; a + 1;
:? Di mana yang keduaa = 1
dapat dibuang hanya karenaa
sebelumnya disetel ke nilai yang sama (1
).Jawaban:
PHP - 197 byte
Fungsi ini bekerja dengan menganalisis setiap baris, dalam urutan terbalik dan satu demi satu, dan mempertahankan array dari variabel yang digunakan.
=
di baris, itu adalah tugas.1
,,2
...) dan operator (+
,,-
...) akan ditambahkan juga, tetapi karena mereka bukan nama variabel yang valid, itu bukan masalah. Garis itu tentu saja dicetak.Ini adalah versi yang tidak disunat:
sumber
Retina , 45 byte
Untuk tujuan penghitungan, setiap baris masuk dalam file terpisah (di mana
<empty>
file kosong) dan\n
harus diganti dengan umpan baris aktual (0x0A).Ini mengasumsikan bahwa string akan selalu diakhiri dengan umpan baris.
Karena regex ini tidak menggunakan fitur .NET khusus, Anda dapat mengujinya di regex101 .
Idenya cukup sederhana: hapus semua tugas dari mana kita dapat menemukan (mencari maju) tugas lain untuk variabel yang sama atau akhir string tanpa melewati penggunaan variabel lainnya.
sumber
Pyth, 40 byte
Sepertinya agak lama. Mungkin saya bisa menyimpan satu atau dua byte besok.
Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
_.__.z
memberikan semua postfix dari jalur input dalam urutan terbalik. Misalnya inputFooBar1 = 0; Fuz__ = 8; Fuz__ / 1
memberi daftar:Lalu saya memfilter untuk elemen daftar
T
, di mana=
tidak ada dalam elemen terakhirT
(ekspresi) atau (penugasan) elemen terakhirT
, yang berisi nama variabel, adalah ekspresi. Setelah itu cetak elemen terakhir dari masing-masing elemen yang tersisa pada baris terpisah.sumber
.__.
CJam, 49 byte
Cobalah online
Pendekatan di sini adalah bahwa daftar variabel yang tidak ditugaskan dipertahankan saat memproses jalur input kembali ke depan:
Jika baris adalah ekspresi, semua variabel dalam ekspresi ditambahkan ke daftar. Sebenarnya, dalam implementasi, semua token ditambahkan ke daftar, karena menyimpan kode dan memiliki angka dan operator dalam daftar tidak membahayakan.
Jika baris adalah tugas, itu menguji apakah nama variabel yang ditugaskan ada dalam daftar. Jika ya, tugas diterima, dan nama variabel dihapus dari daftar. Kalau tidak, tugas dilewati.
Penjelasan:
sumber
Python 2,
270267 byteLekukan adalah: 1. Spasi 2. Tab
Disimpan 3 byte berkat @Kamehameha!
sumber
print ''.join
danin
masukin [n
dapat dihilangkan.tab
bukan spasi ganda setelahexcept
baris dan menyimpan satu byte.R 144
dimana
L
adalah garis dari input (mulai dari yang terakhir)W
adalah simbol (variabel, operator, angka) dalam satu garisR
adalah vektor simbol yang akan dicetak. Ini termasuk variabel yang tugasnya diperlukan.Q
adalah vektor garis dalam outputsumber
scan(what="",sep="\n")
denganscan(,"",sep="\n")
. Anda mungkin juga dapat menggantisep
argumen bernama dengan posisi yang setara, tetapi saya tidak dapat mengingat di mana koma akan pergi untuk itu.JavaScript (ES6) 164
177Menggunakan string template, semua baris baru signifikan dan dihitung.
Tes menjalankan snippet di FireFox (diperlukan untuk kompatibilitas ES6 termasuk fungsi panah)
sumber
ungolfed
ini hanya untuk penjelasan. TheTEST
Bagian adalah ... uhm hanya menebak ...JavaScript ES6,
7975118 byteKatakan jika ini tidak berhasil untuk sebuah kasing. Ada ide untuk bermain golf.
Penjelasan
Diuji di Safari Nightly. Versi ramah Firefox:
Anda bisa mampir di babeljs untuk mendapatkan versi ES5.
sumber
Haskell, 187 byte
Gunakan
d
.sumber