Die Aufgabe
Ich vermute, jeder mag die automatische Codegenerierung und das Sparen von Zeit während der Arbeit. Sie müssen tagsüber viele Klassen und Mitglieder erstellen, und Sie möchten nicht alle getters
manuell erstellen .
Die Aufgabe besteht darin, ein Programm oder eine Funktion zu schreiben, die getters
für alle Klassenmitglieder automatisch für Sie generiert wird .
Die Eingabe
In unserer Sprache sind Objekte sehr einfach. Namen von Klassen und Mitgliedern müssen mit einem Zeichen beginnen [a-zA-Z]
und dürfen nur die Zeichen enthalten [a-zA-Z0-9]
. Hier ist ein Beispiel:
class Stack {
public overflow;
protected trace;
private errorReport;
}
Die Ausgabe
Dies ist eine gültige Ausgabe basierend auf dem angegebenen Beispiel:
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;
}
}
Der Getter
Die Anforderungen an eine getter
Methode sind:
- Der Funktionsname muss mit beginnen,
get
gefolgt vom Mitgliedsnamen mit einer Initiale in Großbuchstaben. - Die Funktion hat keine Parameter.
- Um eine Variable zurückzugeben, verwenden Sie
return this->memberName;
. getters
undsetters
( siehe Die Boni ) müssen gruppiert werden und nach allen variablen Deklarationen stehen.
Beispiel:
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; }
Die Anforderungen
- Erstellen Sie ein Programm oder eine Funktion.
- Die Eingabe kann über STDIN, Befehlszeilenargumente, Funktionsargumente, eine Datei usw. erfolgen.
- Jedes Ausgabeformat ist akzeptabel, von einem einfachen
return
Wert bis zu einer Datei oder dem Schreiben in STDOUT. - Ein- und Ausgang brauchen nicht mit Leerzeichen, Zeilenumbrüche formatiert werden, Registerkarten usw. Dies ist eine gültige Eingabe:
class A{protected a;}
. - Sie können davon ausgehen, dass die Eingabe gültig ist, und Ihr Programm kann auch unerwartete Eingaben verarbeiten.
Die Boni
Sie können bis zu 10% Ihrer ursprünglichen Byteanzahl reduzieren, indem Sie 30% für jede Funktion zurückziehen:
A: Ihr Programm kann neu hinzugefügte Variablen adressieren und getters
nur fehlende hinzufügen ( public function getB() { return this->b; }
in diesem Fall):
class A {
public a;
public b;
public function getA() { return this->a; }
}
B: Ihr Programm erzeugt auch setters
:
class A {
public a;
public getA() { return this->a; }
public setA(a) { this->a = a; }
}
C: Ihr Programm kann statische Member verarbeiten:
class A {
public static c;
public static function getC() { return this->c; }
}
Das ist Codegolf - also gewinnt die kürzeste Antwort in Bytes. Standardlücken sind nicht zulässig.
quelle
A
undB
sollten Artikel, die Getter, aber keine Setter haben, Setter in der Ausgabe haben?this
in einemstatic
Accessor beziehen ?Antworten:
Perl, 161 - 90% = 16,1 Bytes
quelle
Pyth,
198 Bytes - 90% = 19,8 Bytes187 - 90% = 18,7 Bytes183 Bytes - 90% = 18,3 BytesMuss ... schlagen ... Perl ...
187-Byte / 18,7-Byte-Version
198-Byte- / 19,8-Byte-Version
TODO: Mehr Golfen!
quelle
JavaScript ES6 (derzeit),
305289223 - 60% = 89,2 ByteWar
256 - 30% = 179.2 bytes
Qualifiziert für statische und Setter-Boni; jetzt mit extra ES6!
ES5-Funktion, 115,6 Byte
quelle
o.slice(1,o.length))
kann einfach auf verkürzeno.slice(1))
, und ich denke man kann inlinev
, da man es nur einmal benutzt (also mit der Funktion anfängtreturn s.replace(/\}$/, s.match(...).map...
). Ich glaube auch nicht, dass Sie ein Leerzeichen zwischenreturn
und brauchen(
.public|private
Sie nur Regex haben!CJam, 71 Bytes
Probieren Sie es online im CJam-Interpreter aus .
quelle