Задание
Думаю, всем нравится автоматическая генерация кода и экономия времени во время работы. Вы должны создать много классов и участников в течение дня, и вы не хотите создавать все это getters
вручную.
Задача состоит в том, чтобы написать программу или функцию, которая генерирует getters
для всех членов класса автоматически для вас.
Вход
В нашем языке объекты очень просты. Имена классов и членов должны начинаться с символа [a-zA-Z]
и могут содержать только символы [a-zA-Z0-9]
. Вот пример:
class Stack {
public overflow;
protected trace;
private errorReport;
}
Выход
Это правильный вывод на основе данного примера:
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;
}
}
Добытчик
Требования к getter
методу:
- Имя функции должно начинаться с имени,
get
за которым следует имя члена с заглавной буквы. - Функция не имеет параметров.
- Чтобы вернуть переменную используйте
return this->memberName;
. getters
иsetters
( см . Бонусы ) должны быть сгруппированы и должны следовать после всех объявлений переменных.
Пример:
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; }
Требования
- Создать программу или функцию.
- Входные данные могут поступать из STDIN, аргументов командной строки, аргументов функции, файла и т. Д.
- Любой выходной формат приемлем от простого
return
-значения до файла или записи в STDOUT. - Входы и выход не должны быть отформатированы пробелы, переводы строк, вкладки и т.д. Это действительный вход:
class A{protected a;}
. - Вы можете предположить, что ввод действителен, и ваша программа также может обрабатывать неожиданный ввод.
Бонусы
Вы можете получить до 10% от вашего первоначального количества байтов, сняв 30% за каждую функцию:
A: Ваша программа может адресовать только что добавленные переменные и добавляет getters
только отсутствующие ( public function getB() { return this->b; }
в данном случае):
class A {
public a;
public b;
public function getA() { return this->a; }
}
B: Ваша программа также генерирует setters
:
class A {
public a;
public getA() { return this->a; }
public setA(a) { this->a = a; }
}
C: Ваша программа может обрабатывать статические элементы:
class A {
public static c;
public static function getC() { return this->c; }
}
Это код гольф - поэтому выигрывает самый короткий ответ в байтах. Стандартные лазейки запрещены.
источник
A
иB
должны ли предметы, которые имеют геттеры, но не сеттеры, иметь сеттеры на выходе?this
вstatic
аксессоре?Ответы:
Perl, 161 - 90% = 16,1 байта
источник
Pyth,
198 байтов - 90% = 19,8 байта187 - 90% = 18,7 байта183 байта - 90% = 18,3 байтаMust ... бить ... Perl ...
187-байтовая / 18,7-байтовая версия
198-байтовая / 19,8-байтовая версия
ТОДО: Больше игры в гольф!
источник
JavaScript ES6 (на данный момент),
305289223 - 60% = 89,2 байтаБыло
256 - 30% = 179.2 bytes
Квалифицируется на статические и сеттерские бонусы; теперь с дополнительной ES6!
Функция ES5, 115,6 байта
источник
o.slice(1,o.length))
может быть просто сокращен доo.slice(1))
, и я думаю, что вы можете встроитьv
, так как вы используете его только один раз (то есть, начать свою функцию сreturn s.replace(/\}$/, s.match(...).map...
). Кроме того, я не верю, что вам нужно пространство междуreturn
и(
.public|private
в своем регулярном выражении!CJam, 71 байт
Попробуйте онлайн в интерпретаторе CJam .
источник