Problem
Utknąłeś w chatce pośrodku lasu, z tylko starą sceną do zabawy. Po inspekcji widać, że litery scrabble są tak zużyte, że widoczne są tylko punkty dla każdej litery.
Niemniej jednak decydujesz się na grę. Wyciągasz siedem liter z torby i umieszczasz je na tacy, a Twoim zadaniem jest ustalenie, jakie mogą być te litery.
Ogólnie biorąc, biorąc pod uwagę listę punktów, zamień ją na dowolny możliwy ciąg lub listę liter.
Scrabble Tiles and Distribution
- 2 puste kafelki (zdobycie 0 punktów)
- 1 punkt: E × 12, A × 9, I × 9, O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4
- 2 punkty: D × 4, G × 3
- 3 punkty: B × 2, C × 2, M × 2, P × 2
- 4 punkty: F × 2, H × 2, V × 2, W × 2, Y × 2
- 5 punktów: K × 1
- 8 punktów: J × 1, X × 1
- 10 punktów: Q × 1, Z × 1
Więc jeśli masz listę punktów, [10,10,8,5,1,1,1]
to "QZJKEEE"
byłby ważny, ale "QQJKEEE"
nie byłby ważny (ponieważ w torbie jest tylko 1 płytka Q)
Zasady specyficzne dla problemu
- Możesz założyć, że wszystkie dane wejściowe są prawidłowe i że zawsze będzie 7 płytek (tzn. Nie będzie to lista siedmiu 10-punktowych płytek i nie będzie 9 płytek)
- Możesz założyć, że wcześniej nie wyciągnięto żadnych płytek z torby (więc rozkład jest standardowym rozkładem angielskich płytek, jak zdefiniowano powyżej)
- Nie musisz generować prawidłowego słowa, tylko prawidłowy ciąg liter.
- Kolejność łańcucha nie ma znaczenia, o ile dla każdej płytki znajduje się odpowiednia litera.
- Punkty są oparte na standardowych angielskich punktach kafelka, jak zdefiniowano powyżej.
- Możesz pisać wielkimi lub małymi literami, dla pustego kafelka możesz wypisać znak spacji lub znak podkreślenia „_”
- Twoja odpowiedź może być wyświetlana jako dowolna uzasadniona reprezentacja kafelków, taka jak Lista, Łańcuch, Tablica lub Sekwencja
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe
Oczywiście, ponieważ można podać dowolną możliwą wartość, trudno jest zdefiniować ścisłe przypadki testowe.
Niektóre przypadki z możliwą prawidłową wartością zwracaną:
[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"
Niektóre przypadki z niepoprawną wartością zwracaną:
[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]
(jedyny przypadek, w którym ważne jest, aby zacząć odD
zamiastG
metody cyklicznej)Odpowiedzi:
JavaScript (ES6), 72 bajty
Krótszy wariant sugerowany przez @supercat
Wypróbuj online!
JavaScript (ES6),
137 ... 84 78 7776 bajtówZaoszczędzono 10 bajtów, stosując metodę cykliczną Neila
Zwraca listę kafelków. Zastosowania
_
do pustych płytek.Wypróbuj online!
W jaki sposób?
Dla każdej liczby punktów przechodzimy przez grupę dokładnie 4 kafelków, zaczynając od drugiej płytki każdej grupy (jest to ważne w przypadku
G
vsD
):Wszystkie te grupy są przechowywane jako pojedynczy ciąg 31 znaków:
Uwaga : Nie trzeba przechowywać ostateczną
"_"
in"_XJ_"
, jako że nigdy nie będą dostępne w każdym razie.Liczba punktów jest konwertowana na poprawny indeks na ten ciąg za pomocą:n jan
Bieżąca pozycja w każdej grupie jest przechowywana w obiekcie .o
źródło
a=>a.map(o=n=>('?ED?BWQ?_EG?CFZ?_EDJMH?K?EGXPV'[n*9.4+(o[n]=7-~o[n])&31]))
. Krótsza, „prawie” wersja jest,a=>a.map(o=n=>("_EDBFK_EDCHJQEGMVXZEGPW"[n+(o[n]=5-~o[n])%24]))
ale takie podejście wymagałoby zwartego sposobu mapowania wartości 8 i 10 na 11 i 12, a także niewielkiej korekty ciągu, aby naprawić problem występujący osobno.'_??VKWZHQFP?M?CGBGXDJD'[(n*96+(o[n]=32-~o[n]))%68%33]||'E'
łańcuch wyszukiwania zawierający tylko 22 znaki. Pełny kod jest jednak nadal o 2 bajty dłuższy niż rozwiązanie.Węgiel drzewny , 33 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Galaretka ,
31 30 2726 bajtówMonadyczny link akceptujący listę liczb całkowitych, która daje listę znaków.
- miszmasz mojego poprzedniego, poniżej i moje ulepszenie Nicka Kennedy'ego
Wypróbuj online!
Dane wyjściowe nie są podawane w tej samej kolejności co dane wejściowe (jest to dozwolone).
Użycie 2 własnych dodatków do języka w odpowiedzi nie zdarza się często! (
ṃ
iɓ
tutaj).W jaki sposób?
poprzednia @ 30
Monadyczny link akceptujący listę liczb całkowitych, która daje listę znaków.
Wypróbuj online!
Ten sygnał wyjściowy ma również wielkość liter (jest to dozwolone).
W jaki sposób?
źródło
' NWGMZQ'
po indeksie wielowymiarowym w byłoby wyczynem bez żadnegoW
w ciągu. ;)Pyth -
9286838180756052494236 bajtówPętle poprzez wprowadzanie, usuwając dostępne litery. Mam tylko jeden z każdego listu, który razem daje 7 dla tej kategorii punktowej. Teraz za pomocą kodowania spakowanych ciągów.
Btw, to jest oryginalny list ciąg przed kodowaniem:
"_ E DG BCMP FHVW K JX QZ"
.Wypróbuj online .
źródło
Perl 5 , 71 bajtów
Wypróbuj online!
źródło
05AB1E ,
70523938292625 bajtów-18 bajtów dzięki @ExpiredData .
-13 bajtów za pomocą tej samej wielkości 7 rozciąga się od @Maltysen jest Pyth odpowiedź .
-9 bajtów poprzez utworzenie portu @JonathanAllan „s Jelly odpowiedzi , więc upewnij się, aby go upvote!
-3 bajty dzięki @Emigna .
Daje listę znaków, używa małych liter i spacji.
Wypróbuj online lub sprawdź kilka innych przypadków testowych .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcja Jak kompresować ciągi znaków nie będące częścią słownika? ), Aby zrozumieć, dlaczego tak
.•3Oû}α›ηö‡.ÝŽ{•
jest"endgmpfykkzzzzjxzzqz "
.Poprzednie 38 bajtów odpowiedzi:
Wypróbuj online lub sprawdź kilka innych przypadków testowych .
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcja Jak kompresować ciągi znaków nie będące częścią słownika? ), Aby zrozumieć, dlaczego tak
.•Mñ&Àû«ì{₆v*Å+µ-•
jest"e dg bcmp fhvw k jx qz"
.źródło
" 0eeeeeee0ddddggg0bbccmmp0ffhhvvw0k000jx00qz"
?{v
zamiast7F
iy
zamiastI{Nè
.C (gcc) , 110 bajtów
Wypróbuj online!
Dynamicznie używa
_
tablicy jako indeksu w łańcuchu statycznym"DDDDGGGBBCCMMPFFHHVVWKJXQZ"
z wyjątkami dla 0 i 1.Argument jest
-1
tablicą wyników, która jest przekształcana w miejscu w-1
ciąg znaków.źródło
C # (interaktywny kompilator Visual C #) ,
10490 bajtówWypróbuj online!
źródło
Galaretka ,
3432 bajtyWypróbuj online!
Kiedy nie napisałem, nie widziałem krótszej odpowiedzi na galaretkę, która wykorzystuje inne podejście, więc pomyślałem, że warto ją również opublikować.
Dzięki @JonathanAllan za zapisanie 2 bajtów!
źródło
ṃ
, możesz zaoszczędzić 2 bajtyPython 3 ,
178142135127112117 bajtówWypróbuj online!
-1 bajt dzięki cdlane
poprawne dzięki Mathmandan
źródło
d=list(map(list,"...".split('_')))
zapisać kolejny bajtf
prawdopodobnie nie musi mieć nazwy, więc możesz zapisać 2 bajty. Jednakf
pochłania wpisyd
, więc nie jestem pewien, czy spełnia on konsensusowy wymóg, zgodnie z którym „funkcja musi być dowolnie używana wielokrotnie, bez… ponownego tworzenia… jakiegokolwiek innego kodu towarzyszącego przesłaniu”. (Na przykład uruchomienief([10,0,10,5,8,8,0])
więcej niż raz spowoduje błąd.) Zobacz meta dyskusję tutaj: codegolf.meta.stackexchange.com/a/7615/36885Python 2 , 102 bajty (a może 95?)
(Również dobrze dla Pythona 3.)
Wypróbuj online!
Nie sądzę, aby następujące warunki były do zaakceptowania:
Ta druga wersja da wynik podobny do
['__', 'JX', 'QZ', 'K']
. Tak więc litery byłyby poprawne, ale byłyby zbierane według wartości punktowej. (Gdyby to było dopuszczalne, zaoszczędziłoby to 7 bajtów).źródło
PHP , 101 bajtów
Jako samodzielny program wprowadzaj z wiersza poleceń:
Wypróbuj online!
Lub 112 bajtów jako funkcja
Wypróbuj online!
Wydajność
źródło
Rubinowy ,
7776 bajtówWypróbuj online!
źródło
Perl 6 , 63 bajtów
Wypróbuj online!
Zasadniczo więc sprawdza przesunięcia dla każdej wartości kafelka i zwiększa je w razie potrzeby, używając przesunięcia, aby wyciągnąć postać z dostępnego zestawu.
źródło