A tarefa
Acho que todo mundo adora a geração automática de código e economiza algum tempo durante o trabalho. Você precisa criar muitas classes e membros durante o dia e não deseja criar todas getters
manualmente.
A tarefa é escrever um programa ou função que gere getters
para todos os alunos automaticamente para você.
A entrada
Na nossa linguagem, os objetos são muito simples. Os nomes de classes e membros devem começar com um caractere de [a-zA-Z]
e podem conter apenas os caracteres [a-zA-Z0-9]
. Aqui está um exemplo:
class Stack {
public overflow;
protected trace;
private errorReport;
}
A saída
Esta é uma saída válida com base no exemplo fornecido:
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
Os requisitos para um getter
método são:
- O nome da função deve começar com
get
seguido pelo nome do membro com uma inicial maiúscula. - A função não possui parâmetros.
- Para retornar um uso variável
return this->memberName;
. getters
esetters
( consulte Os bônus ) devem ser agrupados e devem vir após todas as declarações de variáveis.
Exemplo:
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; }
Os requisitos
- Crie um programa ou uma função.
- A entrada pode vir de STDIN, argumentos de linha de comando, argumentos de função, um arquivo etc.
- Qualquer formato de saída é aceitável de um
return
valor simples a um arquivo ou gravando em STDOUT. - Entrada e de saída não precisa ser formatado com espaços em branco, novas linhas, guias etc. Esta é uma entrada válida:
class A{protected a;}
. - Você pode assumir que a entrada é válida e seu programa também pode lidar com entradas inesperadas.
Os Bônus
Você pode reduzir até 10% da sua contagem de bytes original retirando 30% para cada recurso:
R: Seu programa pode endereçar variáveis recém-adicionadas e adicionar getters
somente as que estão faltando ( public function getB() { return this->b; }
neste caso):
class A {
public a;
public b;
public function getA() { return this->a; }
}
B: Seu programa também gera setters
:
class A {
public a;
public getA() { return this->a; }
public setA(a) { this->a = a; }
}
C: Seu programa pode lidar com membros estáticos:
class A {
public static c;
public static function getC() { return this->c; }
}
Este é o código de golfe - a resposta mais curta em bytes vence. As brechas padrão não são permitidas.
fonte
A
e osB
itens que têm getters, mas não setters, têm setter na saída?this
em umstatic
acessador?Respostas:
Perl, 161 - 90% = 16,1 bytes
fonte
Pitão,
198 bytes - 90% = 19,8 bytes187 - 90% = 18,7 bytes183 bytes - 90% = 18,3 bytesDeve ... bater ... Perl ...
Versão de 187 bytes / 18,7 bytes
Versão de 198 bytes / 19,8 bytes
TODO: Mais golfe!
fonte
JavaScript ES6 (no momento),
305289223-60% = 89,2 bytesFoi
256 - 30% = 179.2 bytes
Qualifica-se para bônus estáticos e levantadores; agora com ES6 extra!
Função ES5, 115,6 bytes
fonte
o.slice(1,o.length))
pode ser simplesmente reduzidoo.slice(1))
, e eu acho que você pode incorporarv
, já que você o usa apenas uma vez (ou seja, inicie sua função comreturn s.replace(/\}$/, s.match(...).map...
). Além disso, não acredito que você precise de um espaço entrereturn
e(
.public|private
em seu regex!CJam, 71 bytes
Experimente on-line no intérprete CJam .
fonte