Mein Vater ist ein pensionierter Lehrer, und er gab kombinierte Rechtschreib- und Mathematikprüfungen, bei denen der Schüler ein Wort buchstabierte und das Wort dann durch Aufsummieren der Buchstaben „bewertete“, wobei a = 1, b = 2 usw. (zB cat = 3 + 1 + 20 = 24). Dies machte es einfacher, die Tests zu bewerten, da er nur nach falschen "Punktzahlen" anstatt nach falsch geschriebenen Wörtern suchen musste und den zusätzlichen Vorteil hatte, zwei Fertigkeiten gleichzeitig zu testen.
Er beauftragte einen Freund von mir, ein Programm zu schreiben, das ihm viele Worte einbrachte, damit er lange Antwortschlüssel ohne Fehler generieren konnte. Dieses Problem ist von diesem Programm inspiriert.
Bedarf:
- Akzeptieren Sie jedes Wort mit Groß- und Kleinbuchstaben
- Gibt einen Fehler für Sonderzeichen zurück, z. B. Leerzeichen, Bindestriche, @ ^% # usw.
- a = 1, b = 2, ... und A = 1, B = 2, ...
- Drucken Sie die Punktzahl des Wortes
- (Optional) Vergewissern Sie sich nach dem Bewerten, dass sich das Wort in einem Wörterbuch befindet, und drucken Sie eine Warnung aus, falls dies nicht der Fall ist.
- Kein Importieren eines externen Buchstaben-> Zahlenwörterbuchs. Sie müssen es selbst generieren.
Jede Sprache ist akzeptabel. Dies ähnelt dem " Digital Root Battle" , ist jedoch viel einfacher.
code-golf
Tag.aaaaaaaaaaaaaaaaaaaaaaaa
. Vater: Punktzahl ist 24? Das ist richtig!Antworten:
Golfscript - 23 Zeichen
Stellen Sie sicher, dass die Eingabe keine nachgestellten Zeilenumbrüche enthält (z
echo -n
. B. use ).quelle
echo -n
wirklich nicht als externe Filterung. Die von Ihnen verknüpfte Antwort deutet darauf hin, dass es sich um ein gültiges Eingabeformular handelt.Brainf *** (100)
Ich muss allerdings zugeben, dass dies nicht allen Anforderungen entspricht. Erstens werden nur Großbuchstaben akzeptiert und das Wort muss mit einem Tabulator abgeschlossen werden. Es hat undefiniertes Verhalten für ungültige Zeichen und löst keinen Fehler aus. Es zeigt die Summe der Buchstaben als ASCII-Zeichen an. Wenn das Wort beispielsweise "HELLO" ist (8 + 5 + 12 + 12 + 15 = 52), wird das Zeichen "4" angezeigt, das ASCII-Zeichen für 52. Dies bedeutet auch, dass das Programm ausfällt, wenn Die Summe ist mehr als 255.
Aber ansonsten funktioniert es einwandfrei. Gib mir eine Pause, mein Gehirn kann nur kleine Dosen von ... na ja, weißt du.
quelle
\n
oder\r\n
oder zu machen\n\r
. Und wenn ich Newline verwenden würde, hätte ich keine schöne runde Zahl wie 100 als Zeichenanzahl.Python (
6564)Dies führt zu einem Fehler, wenn das Wort keine Buchstaben enthält, jedoch keine hilfreichen oder informativen Zeichen. (Edit: Spitze des Hutes, um für den Indexierungstrick zu stehlen.)
quelle
print sum(['',ord(i)-64]['@'<i<'[']for i in raw_input().upper())
rasierte ein paar Zeichen.input
; zwingt Benutzer, Anführungszeichen um Eingabezeichenfolgen zu setzen, aber "benutzerfreundlich" und "ungefährlich" sind nicht in der Spezifikation enthalten!raw_input
→input
print sum([i,ord(i)-64]['@'<i<'[']for i in raw_input().upper())
ein weiteres Byte rasiertRuby, 43 Zeichen
Die dabei generierte Fehlermeldung ist jedoch nicht gerade hilfreich. Bei beiden hier aufgeführten Lösungen wird davon ausgegangen, dass die Eingabe keinen nachgestellten Zeilenumbruch aufweist
echo -n
. Verwenden Sie daher zum Testen diese .Ruby, 76 Zeichen mit Wörterbuchprüfung
Die Warnmeldung besteht aus dem Einzelzeichen "W". Der Pfad zum Wörterbuch muss über ARGV angegeben werden. Anwendungsbeispiel:
quelle
Python 2.6 (72 Zeichen) Ohne Wörterbuchprüfung
Python 2.6 (178 Zeichen *) Mit Wörterbuchprüfung
* Kann mit einer weniger hilfreichen Fehlermeldung auf 156 gesenkt werden. :-)
Vielen Dank an alle Kommentatoren, die dazu beigetragen haben, dies zu verbessern.
quelle
sum
eingebaute Element mit einem Generatorausdruck anstelle einerfor
Schleife verwenden. Damit können Sie ein paar Zeichen abschneiden (~ 17).a
nur ein einziges Mal verwenden. Verwenden Sie also das Literal selbst ..."0abc....z".index(i)
wird gleichwertig funktionieren.0
in deiner Wertung ist clever, aber es bedeutet auch, dasscat0
es fehlerfrei akzeptiert wird, was meiner Meinung nach nicht richtig ist. Welches ist zu schlecht, da es Ihnen passieren würde es ermöglichen ,map(a.index,w)
umsum
statt (Substitution der wörtlichen füra
wie st0le schon sagt).Perl
(52)(48)noch mehr golfen dank timwi
perl -lpe "($w=uc)=~/[^A-Z]/&¨$w=~s/./$_-=64-ord$&/ge"
quelle
-e
Flagge dort.p
und desl
Interpreters in Ihre Zeichenanzahl aufnehmen. Siehe diese Diskussion auf Meta.syntax error at -e line 1, near "(=" Execution of -e aborted due to compilation errors.
Was mache ich falsch?Python (80)
Python v2 (65, aber char wird akzeptiert)
v3 (60 Zeichen, @ werden akzeptiert, aber nicht gezählt, danke jloy)
quelle
Scala: 59 Zeichen, 7 davon Nutzlast, kein Diktat:
Bisher kein Wörterbuch. Negatives Ergebnis bedeutet: Negativ!
Übrigens: Fasst deutsche Umlaute mit Anmut an:
quelle
alpha.pl
und gestartet vonperl alpha.pl
. Gehen sie nur mit Ascii um? Nun - bei Perl ist so ein altes Biest ... :)perl -M5.010 alpha.pl
oder so ausführen .Java + Google Guava-Bibliotheken, 347 Zeichen, mit Wörterbuchprüfung
Unlesbar 1 lange String-Version :-)
Für Menschen lesbare Version (Art :-))
Der Wörterbuchpfad wird jetzt über übergeben
a[1]
. Damit Zusicherungen funktionieren, müssen Sie das-ea
Flag verwenden (+3 Zeichen mehr). Für das Wörterbuch wurde das Diktat/usr/share/dict/words
(sollte auf den meisten * nix-Systemen verfügbar sein) verwendet.quelle
UTF-8
kürzer ist als die anderen Zeichensätze :-).Python 3, 95 Zeichen mit Wörterbuch
Das Wörterbuch muss sich in einer Datei mit dem Namen d befinden.
Python 3, 61 ohne Wörterbuch, aber gestohlene Idee
quelle
Perl (71)
quelle
VB.NET,
84827371Bearbeiten: Mit der Validierung ist:
129 Zeichen. In welchem Fall:
C # 118
quelle
Johns Antwort leicht verbessert: Python (90)
quelle
Erlang, 104
quelle
Golfscript - 39 Zeichen
Der Fehler, den es auslöst, ist nicht der beste, aber hey, es bricht die Ausführung ab.
quelle
PYTHON
6268 * ZeichenErfordert, dass der Benutzer Zeichenfolgen in Anführungszeichen eingibt, und ist nicht sicher (
input
führt Code aus), aber, wie ich in einem Kommentar zu einem anderen Beitrag sagte, ist "benutzerfreundlich" und "kein Sicherheitsrisiko" nicht in der Spezifikation enthalten!* Ich habe es vergessen
print
, verdammt.quelle
input
/raw_input
Differenz.Ruby 1.9, 69
quelle
GolfScript, 50 (53)
Gibt einen Fehler bei schlechten Zeichen aus, aber keinen sehr guten (50 Zeichen):
Gibt stattdessen "E" bei einem Fehler aus (53 Zeichen):
Das Alphabet erzeugende Snippet
123,97>+
wird von Ventero gestohlen.quelle
J (55)
Dies erfüllt alle Bedingungen mit Ausnahme des Wörterbuchs. Als Fehlerbedingung wird "unendlich" (das Unterstrichsymbol in J) für Wörter zurückgegeben, die nur Buchstaben enthalten.
quelle
Haskell (127)
(wirft einen Fehler bei seltsamen Zeichen auf)
(auch: das Leerzeichen zwischen
toUpper.
und\x
wird benötigt, sonst wird es analysiert als(toUpper)
.\
(x)
)Haskell (70)
(Löst keinen Fehler aus, aber 45% kürzer)
quelle
C ++ (
111107)Das "Einrichten" / etc:
"Undefiniertes" Verhalten (es ist mehr "schlechte Praxis" als "undefiniert", aber na ja):
void main()
Das sagt alles.new
ohnedelete
.quelle
JavaScript 1.8, 80 Zeichen
Überraschend gut lesbar!
quelle
alert(prompt().toLowerCase().split("").reduce(function(a,b){return a+b.charCodeAt(0)-96},0))
. Ich mag immer noch JavaScript-Lösungen am meisten :)APL (34)
Gibt entweder die Punktzahl oder a
VALUE ERROR
wenn die Eingabe nicht-alphabetische Zeichen enthält.Erläuterung:
⍞
: Liest eine Eingabezeile{
...}
: Funktion, die auf jedes Zeichen der Eingabe angewendet wirdA←⎕UCS⍵
: Speichern Sie den ASCII-Wert des aktuellen Zeichens inA
A-32×96<A
: Zeichen in Großbuchstaben schreiben: vonA
wird abgezogen 32 wenn96<A
(also, wenn es in Großbuchstaben geschrieben ist), andernfalls 064-⍨
: subtrahiere 64 davon und gebe A = 1, B = 2 ...¨
: Wende diese Funktion auf jedes Zeichen an:⍵∊⍳26
: wenn das Zeichen zwischen 1 und 26 ist ...:⍵
: dann return ⍵ (und da es keine else - Klausel gibt, wird einVALUE ERROR
wenn es nicht zwischen 1 und 26 liegt)+/
: summiere alle Werte zusammen (und dieser Wert wird automatisch ausgegeben, weil es das Endergebnis ist).quelle
JavaScript, 60 Bytes
Wenn das Programm bei ungültigen Eingaben einen Fehler zurückgeben muss , dann 80 Bytes:
Wenn eine Eingabe ungültig ist, sagt die Konsole, dass sie
_
nicht definiert ist (es darf noch keine Variable namens definiert sein_
).quelle
Python 3,
5855ohne wörterbuch oder gestohlene idee aber trotzdem wenig hilfreicher fehler;)
thx @ Eᴀsᴛᴇʀʟʏ
Testen Sie hier .
quelle
print<SPACE>sum(ord(.......
die 2 Klammern um den Ausdruck entfernen.input()
in python3 istraw_input()
in python2C 98 Bytes
quelle
F # (keine Validierung)
7957 Zeichenquelle
C # mit Validierung: 108 Zeichen (mit 12 für Fehlermeldung):
C # ohne Validierung:
6053 Zeichen:quelle
Perl (
4231)Ich hoffe, dass das Zählen von F, p, a und l als 1 Zeichen richtig war.
quelle
JavaScript, 68 Bytes
Damit kann man mit ziemlicher Sicherheit mehr golfen
Mit Dictionary Check (nur Node.js & Unix Descendants) 195 Bytes
Verwendet
/usr/share/dict/words
und kann definitiv verkürzt werden (siehe Warnmeldung)quelle
console.error()
nichtconsole.warn()
.