Wyzwanie:
Weź ciąg wielkich lub małych liter jako dane wejściowe (opcjonalnie) i oblicz wynik, który uzyskałby w grze Scrabble w języku angielskim.
Zasady:
Wynik każdej litery jest następujący (użyj tego, nawet jeśli istnieją inne wersje gry):
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
Wynik ciągu jest po prostu sumą wyników każdej z użytych liter. Możesz założyć, że masz dużo kafelków, więc długie słowa i słowa z wieloma takimi samymi literami są prawidłowe.
Przypadki testowe:
ABC -> 7
PPCG -> 11
STEWIE -> 9
UGPYKXQ -> 33
FIZZBUZZ -> 49
ABCDEFGHIJKLMNOPQRSTUVWXYZ -> 87
Najkrótsza odpowiedź w każdym języku wygrywa! Formaty wejściowe i wyjściowe są elastyczne, więc możesz wziąć dane wejściowe jako tablicę znaków (wielkie lub małe litery), jeśli chcesz.
Odpowiedzi:
sed 4.2.2 , 81
Wyjście jest jednoskładnikowa .
Zmniejsza każdą literę do kombinacji liter o niższej punktacji, aż wszystkie litery osiągną 1 punkt. Następnie zamienia te na
1
s, aby dać jednoargumentową liczbę.Wypróbuj online!
źródło
Haskell ,
8684 bajtówWypróbuj online!
Wyjaśnienie
Większość liter daje wynik 1, a zatem nie musimy ich śledzić, zamiast tego po prostu zmniejszamy każdy wynik (zapisujemy również 1 bajt
10
), a następnie dodajemy długość ciągu do wynikowego wyniku.Dzięki @nimi za -2 bajty (zmiana słów i używanie
[1..]
zamiast[4,3..]
)!źródło
zip[1..]$words"DG BCMP FHVWY K . . JX . QZ"
daje kolejną alternatywę o równej długościOktawa , 50 bajtów
Wypróbuj online!
Wyzwanie przyjęte. Wyjaśnienie:
źródło
-47
ale to dla ciebie gra w golfa!==
w Octave. Nie działa w MATLAB. Dobrze wiedzieć.bsxfun
) jest również krótszy przy 61 bajtach: Wypróbuj online!Beatnik , 733 bajtów
Ponieważ naprawdę trzeba było to zrobić, oto jest. Debiutowanie było naprawdę paskudne i stanowiło kilka wyzwań.
Wprowadzane dane muszą składać się wyłącznie z wielkich liter. Wyjście jest jednoargumentowe (mam nadzieję, że jest w porządku?)
Wypróbuj online!
Ogólny proces to:
Kończy się błędem.
Pełniejsze wyjaśnienie:
źródło
Brain-Flak ,
210, 204, 198, 184, 170 bajtówWypróbuj online!
Dzięki @JoKing za oszczędność 14 bajtów!
Wersja do odczytu:
źródło
Pyth, 40 bajtów
Wypróbuj tutaj
Wyjaśnienie
źródło
Python 2 , 78 bajtów
Wypróbuj online!
Krótsza wersja, port odpowiedzi DanielIndie ,
7170 bajtów-1 bajt dzięki Sunny Patel
Wypróbuj online!
źródło
JavaScript (Node.js) ,
71666362 bajtyWypróbuj online!
źródło
Java 8,
757170 bajtów-1 bajt, zmieniając
"02210313074020029000033739".charAt(c-65)-47
na niedrukowalne (i dwa\n
), aby-47
można je było usunąć. Zainspirowany odpowiedzią Octave @Sanchises .Wypróbuj online.
źródło
Octave / MATLAB, 85 bajtów
Wypróbuj online!
źródło
Galaretka , 19 bajtów
Monadyczny link akceptujący listę wielkich liter, który zwraca liczbę całkowitą
Wypróbuj online! Lub zobacz zestaw testowy .
W jaki sposób?
źródło
R ,
9063 bajtówWypróbuj online!
Pobiera dane wejściowe jako ciąg wielkich liter. R bez problemu radzi sobie z niedrukowalnymi i wielowierszowymi ciągami, więc to miłe. Teraz jesteśmy prawie dwa razy większy niż pakiet zewnętrzny!
A ponieważ CRAN ma tak wiele losowych gadżetów:
R + ScrabbleScore 31 bajtów
Wypróbuj online!
Niestety
sws
domyślnie sprawdza ważność.źródło
utf8ToInt
zamiastmatch
i udało mi się zdobyć jeszcze kilka!Emojicode , 358 bajtów
Wypróbuj online!
Wyjaśnienie:
Zmieniłem nazwy zmiennych z pojedynczych liter na bardziej znaczące słowa i rozszerzyłem niektóre części mojego kodu, aby, mam nadzieję, uczynić go bardziej czytelnym dla osób niezaznajomionych z językiem. Rozszerzony program możesz przetestować tutaj .
źródło
05AB1E , 21 bajtów
Pobiera dane wejściowe jako małą listę znaków.
Wypróbuj online! lub jako pakiet testowy
źródło
Oktawa , 73 bajty
Wypróbuj online!
Wykorzystuje
ismember
do mapowania każdego znaku w strumieniu wejściowymx
na jego indeks w ciągu wyszukiwania'QZJXKFHVWYBCMPDG'
. Każdy nie odnaleziony element zostanie zmapowany na indeks 0 (będzie to obejmował znaki 1-punktowe).Następnie dodajemy 1 do indeksu, aby zera stały się prawidłowymi odwołaniami do 1-indeksu i sprawdzały ciąg znaków
'09977433333222211'
. Jest to jeden element dłuższy niż pierwszy ciąg wyszukiwania. Cyfry oznaczają wartość punktową każdego elementu w oryginalnym ciągu, minus 1, przy czym dodatkowym elementem jest „0” nabeginning
.Ostatecznie powstały ciąg jest konwertowany na liczby całkowite przez odjęcie
47
('0'-1
), co daje wartość punktową dla każdej litery, a następnie wszystkie wartości punktowe są sumowane.źródło
C ++, 95 bajtów
Wypróbuj online (nie jest to link do TIO przepraszam)
Wyjaśnienie:
m
, tablica wartości każdej litery w kolejności, minus 1. minus 1 wynika z Q i Z: nie mogłem mieć tam dwucyfrowej liczbyp
aż dojdziemy do znaku zerowego, i dodaje wynik liczby (*p
daje nam literę,-65
dzięki czemu możemy poprawnie indeksować tablicę). Ponieważm
jestchar*
to, konwertuje się nachar
tak, więc my minus,48
więc przywróć go do 0, ale dodaj,1
ponieważm
jest zadeklarowany jako jeden wynik mniej dla każdej postaci.Nie jestem tutaj zagorzałym plakatem, więc mam nadzieję, że zrobiłem to poprawnie. Uważam, że zwracane
n
liczą się jako drukowanie wartości, a deklarowanie funkcji jest w porządku.źródło
Haskell , 66 bajtów
Wypróbuj online! Takie samo podejście jak w odpowiedzi DanielIndie na JavaScript .
Haskell ,
8281 bajtówWypróbuj online!
źródło
PowerShell , 60 bajtów
Wypróbuj online!
źródło
Japt , 36 bajtów
Pobiera dane wejściowe jako ciąg małych liter, zwraca liczbę.
Krótkie wyjaśnienie:
Wypróbuj online!
źródło
Rubinowy , 60 bajtów
Wypróbuj online!
Lambda, akceptuje dane wejściowe jako tablicę (wielkich liter) znaków i zwraca liczbę całkowitą.
źródło
Perl 5
-pF
, 50 bajtówWypróbuj online!
źródło
Gforth , 109 bajtów
Dane wejściowe muszą być pisane wielkimi literami:
C PPCG 11 OK
Czytelny
Wypróbuj online!
źródło
Perl 6 , 52 bajtów
Wypróbuj online!
Mapuje każdą postać na cyfrę i sumuje je. I dodaje 1 dla każdego znaku, ponieważ nie ma cyfry 10 bez ponoszenia bajtów Unicode.
źródło
Retina 0.8.2 , 41 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Objaśnienie: Podobnie jak odpowiedź Haskella, nietrywialne litery są tłumaczone na 1 mniej niż ich wynik, a 1 dodaje się później, gdy znaki są konwertowane na jednoargumentowe. Umieszczenie
FHVWY
ostatniego pozwala im wszystkim przypisać mapę do wyniku 3 + 1.źródło
C (gcc),
7872 bajtówW rzeczywistości w ciągu jest 26 znaków. Zobacz poprawnie renderowany kod i uruchom go tutaj .
Dzięki gastropner za grę w golfa 6 bajtów.
Wersja bez golfa:
źródło
Excel, 91 bajtów
Wyjaśnienie:
A1
{ }
na obu końcach.MID(A1,ROW(A:A),1)
wyciąga po kolei każdy znak (i wiele pustych wartości, ponieważ zwróci tyle wartości, ile jest wierszy w arkuszu)CODE(MID(~)&"z")
wyciąga wartość ASCII dla każdego znaku.&"z"
Dołączaz
na końcuMID()
wyniku, ponieważCODE()
nie lubi pustych wejść. Jednak wartość ASCII dlaz
jest wyższa niż każda wielka litera, więc jest później skutecznie ignorowana.MID("02210313074020029000033739",CODE(~)-64,1)
wyciąga literę z łańcucha wyniku na podstawie wartości ASCII skorygowanej w dół o 64, więc litery biegną 1-26 zamiast 65-90."0"&MID(~)
wstawia zero naMID()
wyniku, ponieważ Excel nie pozwoli ci wykonywać matematyki z pustymi ciągami, których będzie kilka.0+("0"&MID(~))
zamienia wszystkie te ciągi na liczby.SUM(0+("0"&MID(~)))
dodaje wszystkie ciągi, które są teraz liczbami.LEN(A1)+SUM(~)
dodaje długość danych wejściowych do sumy, ponieważ wszystkie wartości w łańcuchu wyników (02210313074020029000033739
) zostały zmniejszone o jedną, aby wszystkie miały długość jednej cyfry.Jest bardzo podobne rozwiązanie w Arkuszach Google, ale ma 97 bajtów, ponieważ
ArrayFromula()
jest dłuższe niż{}
(ale przynajmniej może sobie poradzić0 + "" = 0
).źródło
SUBSTITUTE()
, o wielkości 527 bajtów.Wolfram Language (Mathematica) , 74 bajty
Oczywiście Wolfram | Alpha obsługuje scrabble! To anonimowa funkcja.
To nie działa na TIO.
Aby uruchomić, przejdź tutaj , przewiń w dół i kliknij „Utwórz nowy notatnik» ”. Kod do użycia w notebooku znajduje się w tym programie TIO więc możesz go skopiować. Wklej każde wywołanie funkcji do własnego bloku kodu. Jeśli uruchomisz zbyt wiele w jednym bloku, wykonanie się nie zakończy.
Zauważ, że
WolframAlpha
wysyła żądanie za pośrednictwem Internetu. Chociaż istnieją inne odpowiedzi na PPCG, które go wykorzystują, pomyślałem, że powinieneś wiedzieć.Ten program używa poniższej krótszej funkcji, ale wywołuje ją dla każdego znaku wejściowego (wysyłając osobne wywołanie do Wolfram | Alpha za każdym razem!)
Działa to tylko w przypadku danych wejściowych o długości do 15, czyli szerokości płyty Scrabble. (49 bajtów)
To samo co powyżej, ale wyświetli wynik w polu wraz z informacją, czy dane wejściowe są prawidłowym słowem Scrabble. (45 bajtów)
źródło
C # (.NET Core) , 50 + 18 = 68 bajtów
+18 bajtów dla
using System.Linq;
Wypróbuj online!
źródło
K (oK) ,
6038 bajtówRozwiązanie:
Wypróbuj online!
Wyjaśnienie:
Indeks do wyników, podsumowanie wyniku.
źródło
Japt
-x
,43393530 bajtówWypróbuj online!
Rozwiązanie 35-bajtowe:
Uruchom to online
źródło