Hintergrund
In Boggle wird eine Runde durch Addition der Punkte für jedes erzielt einzigartiges Wort ein Spieler (dh jedes Wort , das mehr als ein Spieler wert ist 0 Punkte gefunden hat) gefunden hat. Die Punkte werden basierend auf der Anzahl der Buchstaben in jedem Wort wie folgt berechnet:
3 Buchstaben: 1 Punkt
4 Buchstaben: 1 Punkt
5 Buchstaben: 2 Punkte
6 Buchstaben: 3 Punkte
7 Buchstaben: 5 Punkte
8 oder mehr Buchstaben: 11 Punkte
Herausforderung
Schreiben Sie in dieser Herausforderung ein Programm oder eine Funktion, die eine Liste von Zeichenfolgen aufnimmt, die die Wörter jedes Spielers darstellen, und eine Liste der Punktzahlen der Spieler ausgibt. Sie können davon ausgehen, dass es mindestens 2 Spieler gibt und alle Wörter aus 3 oder mehr Buchstaben bestehen und alle in Kleinbuchstaben (oder ganz in Großbuchstaben, wenn Sie dies vorziehen) geschrieben sind. Sie können auch davon ausgehen, dass jeder Spieler jedes Wort nur einmal verwendet. Das heißt, keine Spielerliste enthält Duplikate. Dies ist Codegolf, daher gewinnt die kürzeste Antwort in Bytes.
Regeln
Die Eingabe kann in jedem vernünftigen Format erfolgen. Beispiele hierfür sind eine Liste mit Listen von Zeichenfolgen, eine Liste mit durch Kommas getrennten Zeichenfolgen, eine durch Kommas getrennte Zeichenfolge in jeder Eingabezeile usw. Die Ausgabe kann in Form einer Liste mit ganzen Zahlen (oder in der entsprechenden Sprache) erfolgen oder Sie können sie drucken Geben Sie die Werte mit einem Trennzeichen Ihrer Wahl (z. B. einem Zeilenvorschub) aus.
Testfälle
Eingabe => Ausgabe
[["cat","dog","bird","elephant"],
["bird","dog","coyote"],
["dog","mouse"]] => [12,3,2]
[["abc","def","ghi"],
["ghi","def","abc"]] => [0,0]
[["programming","puzzles"],
["code","golf"],
[]] => [16,2,0]
quelle
f
anstelle von-
R ,
142126121117 BytesProbieren Sie es online!
Nimmt
L
als Liste von Vektoren von Zeichenfolgen; gibt die Werte zurück.Zuerst werden
unlist
die Wörter gesucht, die Duplikate gefunden und dann aus den Wortlisten der Spieler entfernt. Dann nimmt er diese eindeutigen Wortlisten und berechnet die Punktzahlen von jedem,pmin
um sicherzustellen, dass Wörter, die länger als 8 sind, als 11 gewertet werden.quelle
function(L)sapply(L,function(x)sum(c(1,1,2,3,5,11)[pmin(6,nchar(x[!x%in%(l=unlist(L))[duplicated(l)]])-2)]))
JavaScript (ES6), 92 Byte
Etwas ähnlich wie Rick Hitchcocks Antwort, aber größtenteils unabhängig erstellt; Ich habe eine andere Methode zum Summieren (
reduce
) und eine andere Methode zum Überprüfen auf wiederholte Ausdrücke (filter
+includes
) verwendet. Gutschrift für die Idee, nach Gegenständen[1]
zu suchen.length>1
, anstatt sie zu überprüfen .Testfälle
Code-Snippet anzeigen
quelle
s+=
indem Sie die Klammern um die Ternaries verwenden und entfernen. Und 3 weitere durch Verwendungmap
anstelle vonreduce
: tio.run/##NY/…reduce
und unterscheidetincludes
Ihre Antwort erheblich von meiner.JavaScript (ES6),
10693 Byte[Dank Arnauld, Shaggy und JollyJoker wurden 13 (!) Bytes gespeichert.]
Testfälle:
Code-Snippet anzeigen
quelle
c[7]?11:c[6]?5:c[5]?3:c[4]?2:1
mit'00011234'[c.length]||11
.[15,2,0]
statt[16,2,0]
für den letzten Testfall, aber das ist wohl leicht zu beheben. Funktioniert nach dem Abendessen noch ein bisschen, es sei denn, Sie geben eine geniale Antwort (wie gewöhnlich). Vielen Dank! :)'00011235'
.'11235'[c.length-3]||11
, oder?Perl 6 , 64 Bytes
Probieren Sie es online!
quelle
Pyth , 26 Bytes
Verwendet die Formel von H.PWiz .
Überprüfen Sie alle Testfälle.
Die ursprüngliche Version, 33 Bytes :
Überprüfen Sie alle Testfälle.
Erläuterung
quelle
Haskell ,
7675 BytesProbieren Sie es online!
quelle
Japt ,
292524232120 BytesVersuch es
Erläuterung
Implizite Eingabe eines Arrays
U
.Ordnen Sie das Array (
Ë
) zu und reduzieren Sie jedes Unterarray durch Addition (x
), nachdem Sie seine Elemente durch die folgende Funktion geleitet haben. DabeiX
ist das aktuelle Wort.Zähle (
è
) die ElementeU
, die (ø
) enthaltenX
.Überprüfen Sie, ob dies gleich 1 ist.
Logisches UND (
&&
).Subtrahieren Sie (
n
) 3 vom Minimum von (m
) 8 und der Länge (Ê
) vonX
.Fakultät, Quadratwurzel bzw. Aufrundung.
quelle
Python 2 ,
1061058884 Bytes-1 Byte dank Jonathan Frech
-1 (17) Byte dank reffu
Probieren Sie es online!
quelle
Gelee , 26 Bytes
Probieren Sie es online!
quelle
Java 8,
202200198 BytesODER (auch 198 Bytes )
Kann auf jeden Fall Golf gespielt werden. Leider hat Java keine eingebauten oder kurzen Methoden, um alle Elemente aus allen Listen zu entfernen, die in mehreren vorhanden sind.
Erläuterung:
Probieren Sie es hier aus.
quelle
R, 117 Bytes
Ein ganz anderer Ansatz als die andere R-Antwort :
Testfälle:
Nimmt die Namen, die nur einmal in der Liste vorkommen, konvertiert ihre Länge in einen Faktor, der auf den angegebenen Grenzwerten basiert, und übersetzt diese in Punktzahlen, die dann summiert werden.
quelle
Perl 5 , 104 + 2 (-na) = 106 Bytes
Probieren Sie es online!
quelle
Clojure, 102 Bytes
next
Gibt zurück,nil
wenn es nur ein Wort gibtw
:)quelle
PHP , 226 Bytes
Ich denke, das könnte noch einiges reduziert werden.
Ungolfed:
Probieren Sie es online!
quelle
Scala , 242 Bytes
Die Funktion nimmt als Parameter
a
aSeq[Set[String]]
und gibt ein zurückArray[Int]
. Ich benutze ein Array, damit es veränderlich ist (4-Zeichen-Verlust).Probieren Sie es online!
Könnte optimierbar sein, da ich noch nicht mal an dem gearbeitet habe
Teil. Danke für diese Herausforderung!
quelle
Swift 4 , 164 Bytes *
Der obige Ausdruck ist technisch korrekt, reiner Swift. Der Ausdruck ist jedoch so komplex, dass er aufgrund eines exponentiellen Anstiegs im Typinferenzsystem nicht verarbeitet werden kann, bevor der Compiler nach einer willkürlichen Zeitüberschreitung (z. B. 15 Sekunden oder so) aufgibt.
Um diesen Ausdruck mit dem aktuellen Compiler kompilierbar zu machen, kann er folgendermaßen aufgeteilt werden:
Testfälle:
Heruntergebrochen:
quelle
ASP + Python , 137 Byte
Erwartet Daten, die formatiert sind als:
Benötigt Clingo 5.2.1 mit Python-Unterstützung.
Ungolfed:
Die Python-Funktion ist stark von der Python-Antwort inspiriert .
quelle