Anda akhirnya memiliki banyak persyaratan yang sangat panjang dan tampak membosankan dalam kode Anda:
if flag == 1:
while have != needed:
if type == 7:
Ini dapat diubah menjadi <3
rekan kondisional mereka yang jauh lebih menyenangkan :
if abs(flag - 1) + 2 <3:
while 3 - abs(have - needed) <3:
if 2 + abs(type - 7) <3:
Tugas
Tugas Anda adalah untuk mengambil syarat dan membuatnya dalam hal <3
. Satu-satunya jarak yang penting adalah bahwa tidak ada antara <
dan 3
.
Conditional akan ada dua ekspresi dipisahkan oleh salah satu ==
, !=
, >
, <
, >=
atau <=
.
Ekspresi hanya akan berisi penjumlahan, pengurangan, negasi unary ( -something
), di mana ada satu +
atau -
sebelum setiap variabel atau angka (kecuali yang pertama yang tidak memiliki atau -
sebelum itu).
Angka akan menjadi [0-9]+
, dan variabel akan menjadi [a-z]+
. Jika jawabannya perlu digunakan |x|
(Nilai absolut dari x
), gunakan abs()
fungsinya. Anda dapat mengasumsikan bahwa semua variabel adalah bilangan bulat, dan semua konstanta angka dalam input adalah <1000.
Outputnya tidak harus dalam bentuk yang paling sederhana. Itu memang perlu kondisional seperti di atas, artinya hanya dua ekspresi saja, dipisahkan oleh satu tanda kondisional, tetapi ia juga bisa menggunakan abs
fungsi, melampirkan ekspresi yang valid, dan kemudian bertindak seperti variabel, dalam hal validitas.
Jika input tidak memiliki output untuk nilai variabel apa pun, output kondisi yang selalu salah, tetapi masih dalam hal <3
.
Sebagian dari tantangannya adalah mencari tahu bagaimana melakukannya, tetapi berikut adalah langkah-langkah untuk hal di have != needed
atas:
have != needed
have - needed != 0
abs(have - needed) > 0
-abs(have - needed) < 0
3 - abs(have - needed) <3
Mencetak gol
Ini adalah kode-golf, jadi kode terpendek yang valid, dalam byte, menang.
Uji kasus
(Catatan, output ini bukan satu-satunya output, tapi saya mencoba menyederhanakannya.)
flag == 1
abs(flag - 1) + 2 <3
have != needed
3 - abs(have - needed) <3
type == 7
2 + abs(type - 7) <3
x > y
3 - x + y <3
x + 5 < -y
x + 8 + y <3
x + 6 <= y
x + 8 - y <3
-x >= y + 3
x + y + 5 <3
x < x
3 <3
# Unsimplified; both would be valid outputs.
x - x + 3 <3
Jawaban:
Retina , 95 byte
Cobalah online!
Solusi yang agak naif, tetapi saya belum dapat menemukan perbaikan.
Ini hanya serangkaian penggantian:
Singkirkan perbandingan "atau sama dengan" dengan mengganti
x <= y
denganx < 1 + y
, danx >= y
denganx > -1 + y
.Ganti
x == y
dengan==abs(x - y)
, danx != y
dengan!=abs(x - y)
.Ganti
==
dengan2+
dan!=
dengan3-
, sehingga penggantian keseluruhan menjadix == y
→2 + abs(x - y)
danx != y
→3 - abs(x - y)
.Normalisasi arah ketidaksetaraan yang tersisa, ganti
x > y
dengany < x
.Ganti
x < y
denganx - y + 3
.Tambahkan hati ke akhir string.
sumber