Problem
Sie sitzen in einer Hütte mitten im Wald fest und haben nur ein altes Scrabble-Set, um sich zu unterhalten. Bei der Überprüfung sehen Sie, dass die Scrabble-Buchstaben so abgenutzt sind, dass nur die Punkte für jeden Buchstaben sichtbar sind.
Trotzdem entscheiden Sie sich, ein Spiel zu spielen. Sie ziehen sieben Buchstaben aus der Tüte und legen sie auf Ihr Tablett. Ihre Herausforderung besteht darin, die möglichen Buchstaben zu bestimmen.
Wenn Sie also eine Liste von Punkten haben, konvertieren Sie diese in eine mögliche Zeichenfolge oder Liste von Buchstaben.
Scrabble Tiles und Distributionen
- 2 leere Kacheln (0 Punkte)
- 1 Punkt: E × 12, A × 9, I × 9, O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4
- 2 Punkte: D × 4, G × 3
- 3 Punkte: B × 2, C × 2, M × 2, P × 2
- 4 Punkte: F × 2, H × 2, V × 2, W × 2, Y × 2
- 5 Punkte: K × 1
- 8 Punkte: J × 1, X × 1
- 10 Punkte: Q × 1, Z × 1
Wenn Sie also eine Punkteliste haben, [10,10,8,5,1,1,1]
ist "QZJKEEE"
diese zwar gültig, aber "QQJKEEE"
nicht gültig (da sich nur 1 Q-Plättchen in der Tasche befindet).
Problemspezifische Regeln
- Sie können davon ausgehen, dass alle Eingaben gültig sind und dass es immer 7 Kacheln gibt (dh es wird keine Liste mit sieben 10-Punkte-Kacheln geben und es werden nicht 9 Kacheln sein).
- Sie können davon ausgehen, dass zuvor keine Kacheln aus dem Beutel gezogen wurden (daher entspricht die Verteilung der oben definierten englischen Kacheln der Standardverteilung).
- Sie müssen kein gültiges Wort generieren, sondern nur eine gültige Buchstabenfolge.
- Die Reihenfolge Ihrer Zeichenfolge spielt keine Rolle, solange für jedes Plättchen ein entsprechender Buchstabe vorhanden ist.
- Die Punkte basieren auf den oben definierten Standardpunkten für englische Scrabble-Kacheln.
- Sie können in Groß- oder Kleinschreibung ausgeben. Für eine leere Kachel können Sie entweder ein Leerzeichen oder einen Unterstrich '_' ausgeben.
- Ihre Antwort kann als eine angemessene Darstellung der Kacheln wie eine Liste, eine Zeichenfolge, ein Array oder eine Sequenz ausgegeben werden
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle
Da Sie jeden möglichen Wert ausgeben können, ist es offensichtlich schwierig, strenge Testfälle zu definieren.
Einige Fälle mit einem möglichen gültigen Rückgabewert:
[10,0,10,5,8,8,0] -> "Q ZKJX "
[1,1,1,1,1,1,1] -> "EEEEEEE"
[1,2,3,4,5,8,0] -> "NDBHKJ "
[2,2,2,2,2,2,2] -> "DGDGDGD"
Einige Fälle mit einem ungültigen Rückgabewert:
[10,0,10,5,8,8,0] -> "Q QKJX " - Too many Qs
[1,1,1,1,1,1,1] -> "EEEEEE " - Space is 0 points not 1
[1,2,3,4,5,8,0] -> "NDBH" - Too short
[1,2,3,4,5,8,0] -> "NDBHKJ I" - Too long
[1,2,3,4,5,8,0] -> "ÉDBHKJ1" - Contains none scrabble characters
[2,2,2,2,2,2,2] -> "GDGDGDG" - Contains too many Gs (case for invalid cycling)
[2,2,2,2,2,2,2]
(der einzige Fall, in dem es wichtig ist, mit einerD
Radfahrmethode anstelle einer zu beginnenG
)Antworten:
JavaScript (ES6), 72 Byte
Eine kürzere Variante von @supercat vorgeschlagen
Probieren Sie es online!
JavaScript (ES6),
137 ... 84 78 7776 BytesMit Neils Fahrradmethode 10 Bytes gespart
Gibt eine Liste von Kacheln zurück. Verwendet
_
für leere Fliesen.Probieren Sie es online!
Wie?
Für jede Punktzahl durchlaufen wir eine Gruppe von genau 4 Plättchen, beginnend mit dem zweiten Plättchen jeder Gruppe (dies ist wichtig für
G
vsD
):Alle diese Gruppen werden als einzelne Zeichenfolge mit 31 Zeichen gespeichert:
NB : Es wird nicht das letzte speichern müssen
"_"
in"_XJ_"
, da es sowieso nie zugegriffen werden.quelle
a=>a.map(o=n=>('?ED?BWQ?_EG?CFZ?_EDJMH?K?EGXPV'[n*9.4+(o[n]=7-~o[n])&31]))
. Eine kürzere, "beinahe" Version ista=>a.map(o=n=>("_EDBFK_EDCHJQEGMVXZEGPW"[n+(o[n]=5-~o[n])%24]))
jedoch erforderlich, um die Werte 8 und 10 auf kompakte Weise in 11 und 12 abzubilden, sowie eine geringfügige Anpassung der Zeichenfolge, um ein Problem von eins zu eins zu beheben.'_??VKWZHQFP?M?CGBGXDJD'[(n*96+(o[n]=32-~o[n]))%68%33]||'E'
, mit einer Suchzeichenfolge von nur 22 Zeichen. Der vollständige Code ist jedoch immer noch 2 Byte länger als Ihre Lösung.Holzkohle , 33 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Jelly ,
31 30 2726 BytesEin monadischer Link, der eine Liste von ganzen Zahlen akzeptiert, die eine Liste von Zeichen ergibt.
- ein Mischmasch meiner vorherigen und meiner Verbesserung von Nick Kennedy's
Probieren Sie es online!
Die Ausgabe erfolgt nicht in derselben Reihenfolge wie die Eingabe (dies ist zulässig).
Es kommt nicht oft vor, dass ich 2 meiner eigenen Ergänzungen zur Sprache in einer Antwort verwende! (
ṃ
undɓ
hier).Wie?
vorherige @ 30
Ein monadischer Link, der eine Liste von ganzen Zahlen akzeptiert, die eine Liste von Zeichen ergibt.
Probieren Sie es online!
Die Ausgabe dieses Benutzers erfolgt ebenfalls in gemischten Groß- und Kleinschreibung (dies ist zulässig).
Wie?
quelle
' NWGMZQ'
nach dem mehrdimensionalen Index in wäre eine ziemliche Leistung ohne irgendetwasW
in der Zeichenfolge. ;)Pyth -
9286838180756052494236 BytesLoops through input, popping off the available letters. I just have one of each letter that together give 7 for that point category. Now using packed string encoding.
Btw, this is the original letter string before encoding:
"_ E DG BCMP FHVW K JX QZ"
.Try it online.
quelle
Perl 5, 71 bytes
Try it online!
quelle
05AB1E,
70523938292625 bytes-18 bytes thanks to @ExpiredData.
-13 bytes by using the same extend to size 7 from @Maltysen's Pyth answer.
-9 bytes by creating a port of @JonathanAllan's Jelly answer, so make sure to upvote him!
-3 bytes thanks to @Emigna.
Results in a list of characters, and uses lowercase letters and a space for blanks.
Try it online or verify some more test cases.
Explanation:
See this 05AB1E tip of mine (section How to compress strings not part of the dictionary?) to understand why
.•3Oû}α›ηö‡.ÝŽ{•
is"endgmpfykkzzzzjxzzqz "
.Previous 38 bytes answer:
Try it online or verify some more test cases.
Explanation:
See this 05AB1E tip of mine (section How to compress strings not part of the dictionary?) to understand why
.•Mñ&Àû«ì{₆v*Å+µ-•
is"e dg bcmp fhvw k jx qz"
.quelle
" 0eeeeeee0ddddggg0bbccmmp0ffhhvvw0k000jx00qz"
?{v
instead of7F
andy
instead ofI{Nè
.C (gcc), 110 bytes
Try it online!
Uses the
_
array as an index into the static string"DDDDGGGBBCCMMPFFHHVVWKJXQZ"
dynamically with exceptions for 0 and 1.Argument is a
-1
-terminated array of scores which is transformed in-place into a-1
-terminated string.quelle
C# (Visual C# Interactive Compiler),
10490 bytesTry it online!
quelle
Jelly,
3432 bytesTry it online!
I hadn’t seen there was a shorter Jelly answer when I wrote this, and this uses a different approach so I thought was worth posting as well.
Thanks to @JonathanAllan for saving 2 bytes!
quelle
ṃ
, you can save 2 bytesPython 3,
178142135127112117 bytesTry it online!
-1 byte thanks to cdlane
correct thanks to mathmandan
quelle
d=list(map(list,"...".split('_')))
to save another bytef
probably doesn't need to be named, so you can save 2 bytes. However,f
consumes the entries ofd
, so I'm not sure that it fits the consensus requirement that "the function has to be reusable arbitrarily often, without...restating...any other code accompanying the submission." (For example, runningf([10,0,10,5,8,8,0])
more than once would result in an error.) Please see meta discussion here: codegolf.meta.stackexchange.com/a/7615/36885Python 2, 102 bytes (or maybe 95?)
(Also fine for Python 3.)
Try it online!
I don't think the following would be acceptable:
This second version would give output like
['__', 'JX', 'QZ', 'K']
. So the letters would be correct, but they would be collected by point value. (If this were acceptable, it would save 7 bytes.)quelle
PHP, 101 bytes
As a standalone program, input via command line:
Try it online!
Or 112 bytes as a function
Try it online!
Output
quelle
Ruby,
7776 bytesTry it online!
quelle
Perl 6, 63 bytes
Try it online!
So essentially it keeps a lookup of offsets for each tile value and increments them as needed, using the offset to pull a character from the available set.
quelle