Herausforderung:
Verwenden Sie eine Zeichenfolge aus Groß- oder Kleinbuchstaben als Eingabe (optional) und berechnen Sie die Punktzahl, die die Zeichenfolge bei einer Partie Scrabble in Englisch erhalten würde.
Regeln:
Die Punktzahl für jeden Buchstaben ist wie folgt (verwenden Sie diese Option, auch wenn es andere Versionen des Spiels gibt):
1 point: E, A, I, O, N, R, T, L, S, U
2 points: D, G
3 points: B, C, M, P
4 points: F, H, V, W, Y
5 points: K
8 points: J, X
10 points: Q, Z
Die Punktzahl eines Strings ist einfach die Summe der Punkte jedes verwendeten Buchstabens. Sie können davon ausgehen, dass Sie viele Kacheln zur Verfügung haben, so dass lange Wörter und Wörter mit vielen gleichen Buchstaben eine gültige Eingabe sind.
Testfälle:
ABC -> 7
PPCG -> 11
STEWIE -> 9
UGPYKXQ -> 33
FIZZBUZZ -> 49
ABCDEFGHIJKLMNOPQRSTUVWXYZ -> 87
Die kürzeste Antwort in jeder Sprache gewinnt! Die Eingabe- und Ausgabeformate sind flexibel. Sie können die Eingabe also als Array von Zeichen (Groß- oder Kleinbuchstaben) verwenden, wenn Sie möchten.
Antworten:
sed 4.2.2 , 81
Die Ausgabe erfolgt unär .
Reduziert jeden Buchstaben auf eine Kombination von Buchstaben mit niedrigerer Punktzahl, bis alle Buchstaben 1-Punkte sind. Ersetzt dann diese durch
1
s, um eine unäre Zählung zu erhalten.Probieren Sie es online!
quelle
Haskell ,
8684 BytesProbieren Sie es online!
Erläuterung
Die meisten Buchstaben geben eine Punktzahl von 1 an, und daher müssen wir diese nicht nachverfolgen. Stattdessen dekrementieren wir einfach jede Punktzahl (spart auch 1 Byte ein
10
) und addieren dann die Länge der Zeichenfolge zur resultierenden Punktzahl.Vielen Dank an @nimi für -2 Bytes (Wörter neu ordnen und
[1..]
stattdessen verwenden[4,3..]
)!quelle
zip[1..]$words"DG BCMP FHVWY K . . JX . QZ"
gibt eine andere Alternative mit gleicher LängeOktave , 50 Bytes
Probieren Sie es online!
Herausforderung angenommen. Erläuterung:
quelle
-47
aber das ist Code-Golfen für Sie!==
dass man so etwas in Octave verwenden kann. Funktioniert nicht in MATLAB. Gut zu wissen.bsxfun
) zu tun, ist mit 61 Bytes auch kürzer: Probieren Sie es online aus!Beatnik , 733 Bytes
Da es wirklich getan werden musste, ist es hier. Das Debuggen war wirklich unangenehm und brachte einige Herausforderungen mit sich.
Die Eingabe darf nur in Großbuchstaben erfolgen. Ausgabe ist unär (hoffe das ist OK?)
Probieren Sie es online!
Allgemeiner Ablauf ist:
Endet mit einem Fehler.
Eine vollständigere Erklärung:
quelle
Brain-Flak ,
210, 204, 198, 184, 170 BytesProbieren Sie es online!
Vielen Dank an @JoKing für das Speichern von 14 Bytes!
Lesbare Version:
quelle
Pyth, 40 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
Python 2 , 78 Bytes
Probieren Sie es online!
Kürzere Version, Hafen von DanielIndie Antwort ,
7170 Bytes-1 Byte dank Sunny Patel
Probieren Sie es online!
quelle
JavaScript (Node.js) ,
71666362 ByteProbieren Sie es online!
quelle
Java 8,
757170 Bytes-1 Byte, indem Sie
"02210313074020029000033739".charAt(c-65)-47
zu unprintables (und zwei\n
) ändern , damit das-47
entfernt werden kann. Inspiriert von @Sanchises 'Octave-Antwort .Probieren Sie es online aus.
quelle
Oktave / MATLAB, 85 Bytes
Probieren Sie es online!
quelle
Jelly , 19 Bytes
Ein monadischer Link, der eine Liste von Großbuchstaben akzeptiert und eine Ganzzahl zurückgibt
Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
Wie?
quelle
R ,
9063 BytesProbieren Sie es online!
Übernimmt die Eingabe als Großbuchstaben. R behandelt nicht druckbare und mehrzeilige Zeichenfolgen ohne Probleme, das ist also schön. Jetzt sind wir fast doppelt so groß wie das externe Paket!
Und weil CRAN so viele zufällige Leckereien hat:
R + ScrabbleScore 31 Bytes
Probieren Sie es online!
Leider
sws
überprüft die Gültigkeit der Standardeinstellung.quelle
utf8ToInt
stattmatch
und ein paar mehr nach unten zu bekommen geschaffen!Emojicode , 358 Bytes
Probieren Sie es online!
Erläuterung:
Ich habe die Variablennamen von einzelnen Buchstaben in aussagekräftigere Wörter geändert und einige Teile meines Codes erweitert, um ihn hoffentlich für Personen lesbarer zu machen, die mit der Sprache nicht vertraut sind. Sie können das erweiterte Programm testen hier .
quelle
05AB1E , 21 Bytes
Übernimmt die Eingabe als Kleinbuchstabenliste.
Probieren Sie es online! oder als Testsuite
quelle
Oktave , 73 Bytes
Probieren Sie es online!
Wird verwendet
ismember
, um jedes Zeichen im Eingabestreamx
seinem Index in der Suchzeichenfolge zuzuordnen'QZJXKFHVWYBCMPDG'
. Jedes nicht gefundene Element wird einem Index von 0 zugeordnet (dies schließt die 1-Punkt-Zeichen ein).Als Nächstes fügen wir 1 zum Index hinzu, damit die Nullen gültige 1-Index-Referenzen werden, und suchen in der Zeichenfolge nach
'09977433333222211'
. Dies ist ein Element länger als die erste Suchzeichenfolge. Die Ziffern stellen den Punktwert jedes Elements in der ursprünglichen Zeichenfolge minus 1 dar, wobei das zusätzliche Element eine '0' am istbeginning
.Schließlich wird die resultierende Zeichenfolge durch Subtrahieren von
47
('0'-1
) in Ganzzahlen umgewandelt , wobei der Punktwert für jeden Buchstaben erhalten wird, und alle Punktwerte werden dann summiert.quelle
C ++, 95 Bytes
Probieren Sie es online aus (kein TIO-Link, sorry)
Erläuterung:
m
ein Array mit den Werten jedes Buchstabens in der angegebenen Reihenfolge, minus 1. Das Minus 1 liegt an Q und Z: Ich konnte dort keine zweistellige Zahl habenp
bis das Zeichen null ist, und fügt die Punktzahl der Zahl hinzu (*p
gibt uns den Buchstaben,-65
damit wir das Array ordnungsgemäß indizieren können). Dam
es sich um ein handeltchar*
, das in ein konvertiert wird, bringenchar
wir es mit einem Minus48
auf 0 zurück, aber add1
sincem
wird als eine Punktzahl weniger für jedes Zeichen deklariert.Ich bin kein begeisterter Poster hier, also hoffe ich, dass ich das richtig gemacht habe. Ich glaube, die Rückgabe
n
zählt als Ausdruck des Werts, und das Deklarieren einer Funktion ist in Ordnung.quelle
Haskell , 66 Bytes
Probieren Sie es online! Gleicher Ansatz wie die JavaScript-Antwort von DanielIndie .
Haskell ,
8281 BytesProbieren Sie es online!
quelle
PowerShell , 60 Byte
Probieren Sie es online!
quelle
Japt , 36 Bytes
Nimmt Eingaben als Kleinbuchstaben und gibt eine Zahl zurück.
Kurze Erklärung:
Probieren Sie es online!
quelle
Ruby , 60 Bytes
Probieren Sie es online!
Ein Lambda, das Eingaben als Array von (Groß-) Zeichen akzeptiert und eine Ganzzahl zurückgibt.
quelle
Perl 5
-pF
, 50 BytesProbieren Sie es online!
quelle
Gforth , 109 Bytes
Die Eingabe muss in Großbuchstaben erfolgen:
C PPCG 11 OK
Lesbar
Probieren Sie es online!
quelle
Perl 6 , 52 Bytes
Probieren Sie es online!
Ordnet jedes Zeichen einer Ziffer zu und summiert sie. Und addiert 1 für jedes Zeichen, da es keine Ziffer 10 ohne Unicode-Bytes gibt.
quelle
Retina 0.8.2 , 41 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung: Wie bei der Haskell-Antwort werden nichttriviale Buchstaben in 1 weniger als ihre Punktzahl übersetzt, und 1 wird später hinzugefügt, wenn die Zeichen in unäre umgewandelt werden. Durch das Setzen des
FHVWY
Letzten können sie alle auf eine Punktzahl von 3 + 1 abbilden.quelle
C (gcc),
7872 BytesDie Zeichenfolge enthält tatsächlich 26 Zeichen. Sehen Sie sich den richtig gerenderten Code an und führen Sie ihn hier aus .
Dank an Gastropner für das Golfspielen von 6 Bytes.
Ungolfed-Version:
quelle
Excel, 91 Bytes
Erläuterung:
A1
{ }
an beiden Enden hinzugefügt werden.MID(A1,ROW(A:A),1)
Ruft nacheinander alle Zeichen ab (und auch viele leere Werte, da so viele Werte zurückgegeben werden, wie Zeilen im Blatt vorhanden sind).CODE(MID(~)&"z")
Ruft den ASCII-Wert für jedes Zeichen ab. Das&"z"
hängt einz
an das Ende desMID()
Ergebnisses an, weilCODE()
leere Eingaben nicht gefallen. Der ASCII-Wert fürz
ist jedoch höher als jeder Großbuchstabe, sodass er später effektiv ignoriert wird.MID("02210313074020029000033739",CODE(~)-64,1)
Zieht einen Buchstaben aus der Ergebniszeichenfolge, basierend auf dem um 64 gesenkten ASCII-Wert, sodass die Buchstaben 1-26 statt 65-90 ausführen."0"&MID(~)
DemMID()
Ergebnis wird eine Null vorangestellt, da Sie in Excel nicht mit leeren Zeichenfolgen rechnen können , von denen es mehrere gibt.0+("0"&MID(~))
verwandelt all diese Saiten in Zahlen.SUM(0+("0"&MID(~)))
addiert alle Zeichenketten, die jetzt Zahlen sind.LEN(A1)+SUM(~)
Fügt die Länge der Eingabe zur Summe hinzu, da alle Werte in der Score-Zeichenfolge (02210313074020029000033739
) um eins nach unten angepasst wurden, sodass sie alle eine Ziffer lang sind.Es gibt eine sehr ähnliche Lösung in Google Sheets, aber es kommt mit 97 Bytes, weil
ArrayFromula()
es länger ist als{}
(aber zumindest kann es damit umgehen0 + "" = 0
).quelle
SUBSTITUTE()
, mit satten 527 Bytes.Wolfram Language (Mathematica) , 74 Bytes
Natürlich unterstützt Wolfram | Alpha Scrabble Scoring! Dies ist eine anonyme Funktion.
Dies funktioniert nicht mit TIO.
Ausführen zu können, gehen Sie hier , nach unten scrollen und klicken Sie auf „ein neues Notebook erstellen»“. Der im Notebook zu verwendende Code befindet sich in diesem TIO-Programm, sodass Sie ihn kopieren können. Fügen Sie jeden Funktionsaufruf in einen eigenen Codeblock ein. Wenn Sie zu viele in einem einzelnen Block ausführen, wird die Ausführung nicht abgeschlossen.
Beachten Sie, dass
WolframAlpha
eine Anfrage über das Internet gesendet wird. Obwohl es andere Antworten auf PPCG gibt, die es verwenden, dachte ich, dass Sie es wissen sollten.Dieses Programm verwendet die unten stehende kürzere Funktion, ruft sie jedoch für jedes einzelne Zeichen der Eingabe auf (wobei jedes Mal ein separater Aufruf an Wolfram | Alpha gesendet wird!).
Dies funktioniert nur für Eingaben bis zur Länge 15, der Breite einer Scrabble-Karte. (49 Bytes)
Wie oben, zeigt jedoch das Ergebnis in einem Feld zusammen mit der Frage an, ob die Eingabe ein gültiges Scrabble-Wort ist. (45 Bytes)
quelle
C # (.NET Core) , 50 + 18 = 68 Byte
+18 Bytes für
using System.Linq;
Probieren Sie es online!
quelle
K (oK) ,
6038 BytesLösung:
Probieren Sie es online!
Erläuterung:
Index in die Scores, Ergebnis aufsummieren.
quelle
Japt
-x
,43393530 BytesProbieren Sie es online!
35-Byte-Lösung:
Führen Sie es online aus
quelle