Tugas
Saya kira semua orang menyukai pembuatan kode otomatis dan menghemat waktu selama bekerja. Anda harus membuat banyak kelas dan anggota di siang hari dan Anda tidak ingin membuat semua itu getters
secara manual.
Tugasnya adalah menulis program atau fungsi, yang menghasilkan getters
untuk semua anggota kelas secara otomatis untuk Anda.
Input
Dalam bahasa kita objek sangat sederhana. Nama kelas dan anggota harus dimulai dengan karakter dari [a-zA-Z]
dan hanya dapat berisi karakter [a-zA-Z0-9]
. Ini sebuah contoh:
class Stack {
public overflow;
protected trace;
private errorReport;
}
Hasil
Ini adalah output yang valid berdasarkan contoh yang diberikan:
class Stack {
public overflow;
protected trace;
private errorReport;
public function getOverflow() {
return this->overflow;
}
public function getTrace() {
return this->trace;
}
public function getErrorReport() {
return this->errorReport;
}
}
The Getter
Persyaratan untuk suatu getter
metode adalah:
- Nama fungsi harus dimulai dengan
get
diikuti oleh nama anggota dengan inisial huruf besar. - Fungsi tidak memiliki parameter.
- Untuk mengembalikan penggunaan variabel
return this->memberName;
. getters
dansetters
( lihat Bonus ) harus dikelompokkan dan harus datang setelah semua deklarasi variabel.
Contoh:
private value1;
private value2;
public function getValue1() { return this->value; }
public function setValue1(value) { this->value = value; }
public function getValue2() { return this->value; }
public function setValue2(value) { this->value = value; }
Persyaratan
- Buat program atau fungsi.
- Input dapat berasal dari STDIN, argumen baris perintah, argumen fungsi, file dll.
- Setiap format output dapat diterima dari nilai sederhana
return
ke file atau menulis ke STDOUT. - In- dan output tidak perlu diformat dengan spasi putih, baris baru, tab dll. Ini adalah input yang valid:
class A{protected a;}
. - Anda dapat mengasumsikan bahwa input tersebut valid dan program Anda juga dapat menangani input yang tidak terduga.
Bonusnya
Anda bisa mendapatkan hingga 10% dari jumlah byte asli Anda dengan menarik 30% untuk setiap fitur:
A: Program Anda dapat mengatasi variabel yang baru ditambahkan dan getters
hanya menambahkan yang hilang ( public function getB() { return this->b; }
dalam hal ini):
class A {
public a;
public b;
public function getA() { return this->a; }
}
B: Program Anda juga menghasilkan setters
:
class A {
public a;
public getA() { return this->a; }
public setA(a) { this->a = a; }
}
C: Program Anda dapat menangani anggota statis:
class A {
public static c;
public static function getC() { return this->c; }
}
Ini kode golf - jadi jawaban tersingkat dalam byte menang. Celah standar tidak diijinkan.
sumber
A
danB
haruskah item yang memiliki getter, tetapi tidak ada setter, apakah seter dalam output?this
padastatic
pengakses?Jawaban:
Perl, 161 - 90% = 16,1 byte
sumber
Pyth,
198 byte - 90% = 19,8 byte187 - 90% = 18,7 byte183 byte - 90% = 18,3 byteHarus ... kalahkan ... Perl ...
Versi 187-byte / 18,7-byte
Versi 198-byte / 19,8-byte
TODO: Lebih banyak bermain golf!
sumber
JavaScript ES6 (saat ini),
305289223 - 60% = 89,2 byteDulu
256 - 30% = 179.2 bytes
Memenuhi syarat untuk bonus statis dan setter; sekarang dengan ES6 ekstra!
Fungsi ES5, 115,6 byte
sumber
o.slice(1,o.length))
bisa disingkat menjadio.slice(1))
, dan saya pikir Anda bisa sebarisv
, karena Anda hanya menggunakannya sekali (yaitu, mulai fungsi Anda denganreturn s.replace(/\}$/, s.match(...).map...
). Juga, saya tidak percaya Anda membutuhkan ruang antarareturn
dan(
.public|private
di regex Anda!CJam, 71 byte
Cobalah online di penerjemah CJam .
sumber