Zadanie
Chyba wszyscy uwielbiają automatyczne generowanie kodu i oszczędność czasu podczas pracy. Musisz stworzyć wiele klas i członków w ciągu dnia i nie chcesz ich tworzyć getters
ręcznie.
Zadanie polega na napisaniu programu lub funkcji, która automatycznie generuje getters
dla wszystkich członków klasy.
Wejście
W naszym języku obiekty są bardzo proste. Nazwy klas i członków muszą zaczynać się od znaku od [a-zA-Z]
i mogą zawierać tylko znaki [a-zA-Z0-9]
. Oto przykład:
class Stack {
public overflow;
protected trace;
private errorReport;
}
Wyjście
To jest poprawny wynik na podstawie podanego przykładu:
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
Wymagania dla getter
metody są następujące:
- Nazwa funkcji musi zaczynać się
get
od nazwy elementu wielkimi literami. - Funkcja nie ma parametrów.
- Aby zwrócić zmienną, użyj
return this->memberName;
. getters
orazsetters
( patrz Bonusy ) muszą być pogrupowane i muszą znajdować się po wszystkich deklaracjach zmiennych.
Przykład:
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; }
Wymagania
- Utwórz program lub funkcję.
- Dane wejściowe mogą pochodzić z STDIN, argumentów wiersza poleceń, argumentów funkcji, pliku itp.
- Dowolny format wyjściowy jest akceptowalny, od prostej wartości
return
do pliku lub zapisu do STDOUT. - Wejścia i wyjścia nie muszą być sformatowane z spacje, znaki nowej linii, zakładki itp Jest to ważny wkład:
class A{protected a;}
. - Możesz założyć, że dane wejściowe są prawidłowe, a Twój program może również obsługiwać nieoczekiwane dane wejściowe.
Bonusy
Możesz zmniejszyć do 10% oryginalnej liczby bajtów, wypłacając 30% dla każdej funkcji:
Odp .: Twój program może zająć się nowo dodanymi zmiennymi i dodaje getters
tylko brakujące ( public function getB() { return this->b; }
w tym przypadku):
class A {
public a;
public b;
public function getA() { return this->a; }
}
B: Twój program generuje również setters
:
class A {
public a;
public getA() { return this->a; }
public setA(a) { this->a = a; }
}
C: Twój program może obsługiwać elementy statyczne:
class A {
public static c;
public static function getC() { return this->c; }
}
To jest golf golfowy - wygrywa więc najkrótsza odpowiedź w bajtach. Standardowe luki są niedozwolone.
źródło
A
iB
czy przedmioty, które mają gettery, ale nie mają seterów, powinny mieć setery na wyjściu?this
wstatic
akcesorium?Odpowiedzi:
Perl, 161–90% = 16,1 bajtów
źródło
Pyth,
198 bajtów - 90% = 19,8 bajtów187 - 90% = 18,7 bajtów183 bajtów - 90% = 18,3 bajtówMusisz ... pokonać ... Perl ...
Wersja 187-bajtowa / 18,7-bajtowa
Wersja 198-bajtowa / 19,8-bajtowa
DO ZROBIENIA: Więcej golfa!
źródło
JavaScript ES6 (obecnie),
305289223 - 60% = 89,2 bajtówByło
256 - 30% = 179.2 bytes
Kwalifikuje się do bonusów statycznych i premiujących; teraz z dodatkowym ES6!
Funkcja ES5, 115,6 bajtów
źródło
o.slice(1,o.length))
można to po prostu skrócićo.slice(1))
i myślę, że możesz wstawićv
, ponieważ używasz go tylko raz (tj. Uruchamiasz swoją funkcjęreturn s.replace(/\}$/, s.match(...).map...
). Nie uważam też, że potrzebujesz odstępu międzyreturn
i(
.public|private
w swoim wyrażeniu regularnym!CJam, 71 bajtów
Wypróbuj online w interpretatorze CJam .
źródło