Standardowa plansza Scrabble to 15 × 15 pól do umieszczenia kafelków z literami. Większość spacji jest pusta, ale niektóre z nich to podwójne słowa (różowy), potrójne słowa (czerwony), podwójne litery (jasnoniebieski) i trzyosobowe (niebieski). Zwykle w samym centrum znajduje się gwiazda (co liczy się jako wynik podwójnego słowa).
Napisz program lub funkcję, która generuje standardową, pustą kartę Scrabble w postaci ASCII, gdzie:
.
reprezentuje pustą przestrzeńD
oznacza wynik podwójnego słowaT
oznacza potrójny wynik słówd
oznacza wynik podwójnej literyt
oznacza wynik trzyliterowyX
reprezentuje gwiazdę środkową
To znaczy, twoja dokładna wydajność musi być
T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T
opcjonalnie po nim następująca nowa linia.
Najkrótszy kod w bajtach wygrywa.
code-golf
ascii-art
kolmogorov-complexity
board-game
scrabble
Hobby Calvina
źródło
źródło
X
nie*
reprezentować gwiazdy? : o*
jest zbyt wysoki i potężny.★
? : DOdpowiedzi:
MATL ,
595452 bajtówWypróbuj online!
Wyjaśnienie
Kod składa się z trzech głównych kroków:
Wygeneruj macierz 8x8
Rozszerz go na matrycę 15x15
Indeksuj ciąg za
'DtdTX.'
pomocą tej macierzy, aby uzyskać pożądany wynik.Krok 1
Teraz musimy wypełnić niezerowe wpisy o przekątnej. Wypełnimy tylko te poniżej przekątnej, a następnie zastosujemy symetrię, aby wypełnić pozostałe.
Aby wypełnić każdą wartość, używamy indeksowania liniowego (patrz ta odpowiedź , fragment długości 12). Oznacza to dostęp do matrycy, jakby miała tylko jeden wymiar. W przypadku macierzy 8 × 8 każda wartość indeksu liniowego odnosi się do następującego wpisu:
Zatem poniższe przypisuje wartość 4 do lewego dolnego wpisu:
Kod dla wartości 3 jest podobny. W tym przypadku indeks jest wektorem, ponieważ musimy wypełnić kilka wpisów:
A dla 2:
Mamy teraz macierz
Aby wypełnić górną połowę, wykorzystujemy symetrię:
Krok 2
Stos zawiera teraz macierz 8 × 8 wynikającą z kroku 1. Aby rozszerzyć tę macierz, używamy indeksowania, tym razem w dwóch wymiarach.
Krok 3
Stos zawiera teraz macierz 15 × 15 wynikającą z kroku 2.
źródło
Ruby,
10397 bajtówPodziękowania dla Mitcha Schwartza za 6-bajtową poprawę iteracji.
Podobne, ale znacznie inne podejście do mojej oryginalnej odpowiedzi poniżej. Tak jak poprzednio, wykorzystujemy fakt, że litera musi być wydrukowana, jeśli
i%7-j%7
jest równa 0 lub 4. Ale tutaj przechowujemy tę różnicęd
i używamy formuły,i+j+d*d/3
aby podać liczbę całkowitą, która jest unikalna (aż do symetrii) dla tego konkretnego kolorowego kwadratu. Następnie po prostu sprawdzamy to w magicznym sznurku.Dla zabawy: wersja C tego podejścia, 120 bajtów
Rubin,
115113 bajtów2 bajty zapisane dzięki Value Ink.
Wyjaśnienie
Pochodzenie uważa się za środek planszy.
Litera musi być wydrukowana, jeśli współrzędne xiy kwadratu mają wielkości, które są identyczne lub różnią się o 4. Jedyne wyjątki znajdują się na zewnętrznej krawędzi planszy, ale są one zgodne z tym samym wzorem, co środkowy rząd / kolumna tablicę, więc możemy użyć tego samego warunku, jeśli weźmiemy współrzędne x i modulo 7.
Wybór wyświetlanej litery zależy od współrzędnej minimalnej wielkości. W ten sposób podwójne i potrójne w (1,5) i (2,6) stosują tę samą zasadę jak w (1,1) i (2,2) i są otrzymywane z ciągu 7 znaków.
"#{formula}dtDDDD"
Nie obejmuje wszystkich odmian dla kwadratów krawędzi i linii środkowej, więc pierwszy znak ciągu jest obliczany ze wzoru'XdTdT'[(i+j)/3]
.źródło
(k=-7..7).map{|y|k.map{...
jest o 2 bajty krótszy niż podwójna-7.upto(7)
technika.a=(-7..7).map &:abs;a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}
pieprzenie mózgu ,
598596590 bajtówZapraszamy do gry w golfa.
Wyjaśnienie
Zainicjuj taśmę do [10 116 68 46 100 84 92] tj. [Nl t D. d T \]
>-[++++[<]>->+]<[>++++>+++++>+++>++<<<<-]>[>>>>+>+>+<<<<<<-]<++++++++++[>+>>>>+>-<<<<<<-]>>+>->>-->++
Każda linia tutaj drukuje następnie jedną linię planszy.
Środkowa linia również maleje
92 to 88 i.e. \ to X
Wypróbuj online!
źródło
PowerShell v2 +, 147 bajtów
Korzysta z tego, jak domyślna
Write-Output
pod koniec wykonywania programu obsługuje tablice (tj. Wstawia nową linię między elementami). Może to być lepszy sposób na wygenerowanie środka planszy - wciąż nad tym pracuję.Pierwszy wiersz wypisuje górny wiersz planszy, a także przechowuje go
$x
do późniejszego wykorzystania.Kolejny wiersz generuje wszystkie wiersze z podwójnym słowem, biorąc lewą „połowę” każdego z nich, odbijając je (
-join$_[6..0]
instrukcja) i przechowując je jako elementy w tablicy$y
.Kolejny wiersz to środkowy rząd, ze
X
środkowym, dzięki-replace
.Następny wiersz wyświetla się
$y
w odwrotnej kolejności, co daje nam dolne wiersze z podwójnym słowem.Ostatnia linia jest po
$x
raz kolejny.źródło
> <> (Ryba), 153 bajtów
Okropnie, okropnie, nieefektywnie. Obecnie poszukujemy sposobu skrócenia go poprzez prawidłowe odbicie lustrzane zarówno w poziomie, jak i w pionie.
Wypróbuj online! (Jeśli nie chcesz tam być przez cały dzień, upewnij się, że ustawiłeś maksymalną szybkość wykonywania lub działasz bez animacji.)
źródło
C,
146145142138 bajtówWypróbuj online!
1 bajt5 bajtów zapisanych dzięki Level River StWykorzystuje to przekątny wzór płytki do kodowania. W szczególności, jeśli weźmiemy lewą górną ćwiartkę planszy i wyrównamy przekątną, otrzymamy:
... wiele kolumn ustawia się teraz w linii. Jeśli kodujemy kolumny w linii w ten sposób:
... wtedy wzór deska można zwinąć w ciąg 15 znaków:
T..12..0..12..0
; i po prostu potrzebujemy odpowiednich mapowań dla każdego wiersza.Mając to na uwadze, oto rozszerzona wersja z komentarzami:
źródło
i,r,c;f()
jest w porządku. 2.(i%16-7)%8
->i%16-7&7
3. Myślę, żec-48
->c%4
działa, prawda?f()
wymagałyby dodatkowej funkcjii=0
wewnątrz funkcji, aby nic nie zapisało .%8
używa ujemnych modułów implementacji do mapowania% 16 wartości 0..15 na -7..7;&7
zamapowałby to na 0..7,0..7). Ale tak, 3 będzie absolutnie działać ... zaktualizuje się, gdy będę miał szansę.05AB1E ,
5753 bajtówKod
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
Wyjaśnienie (nieaktualne)
•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B
Dekompresji tej liczbie:Za pomocą
4ÝJ".TdtD"‡
transliterujemy następujące elementy w tej dużej liczbie:Rozgałęziamy cały łańcuch, pozostawiając łańcuch i łańcuch odwrócony na stosie i łączymy je za
"X"
pomocąý
. Dzielimy cały ciąg na 15 części za pomocą tego15ô
kodu i łączymy całą tablicę za pomocą znaku nowej linii»
.źródło
û€û
powinien być wbudowany;).Python 3, 138 bajtów
źródło
list(map(A))
na[*map(A)]
, oszczędza 3 bajty (wymaga Python 3.5+).05AB1E ,
4944 bajtówWypróbuj online!
Wyjaśnił:
Pchać:
1003000104000200004000303004000300004000020002000030003010030005
Podziel się na 8-częściowe, palindromizuj każde.
Znowu palindromuj.
Zamień cyfry na znaki.
Inny pomysł (ktoś wypróbuje to w MATL)
Widząc, że WSZYSTKO to czas, aby między nimi ...
Policz liczbę zer między poszczególnymi elementami:
131424334342233135 => w\F6ß¿
Biorąc pod uwagę liczbę zer:
23134312344343123 => ì:¼˜¾
Następnie odszyfrujesz je i przetransponujesz.
Używanie ich w 05AB1E (powoduje wzrost o +5 bajtów):
05AB1E , 27 bajtów
Spróbuj...
Wejście do gry w golfa:
05AB1E , 104 bajty
Spróbuj!
Meta-golfed przy moim meta-golfa dla sztuki ASCII: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw
źródło
JavaScript (ES6), 150 bajtów
Jak to działa
Ciąg
"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"
opisuje planszę od lewego górnego rogu do kwadratu tuż przed „X”, z kolejnymi pustymi kwadratami zakodowanymi jako cyfry. Tareplace()
funkcja rozpakowuje puste kwadraty i buduje łańcuch lustrzanyr
na dole planszy. Następnie obie części są łączone, a zwroty karetki są wstawiane co 15 znaków.Próbny
źródło
JavaScript (ES6), 221 bajtów
Ponieważ zadałem sobie trud stworzenia tego i tak, pomyślałem, że i tak to opublikuję, mimo że dostępne jest wyraźnie lepsze rozwiązanie.
źródło
C 234 bajtów
Oto wynik:
źródło
Węgiel drzewny , 33 bajty (niekonkurencyjny)
Wszystkie podziękowania za tę odpowiedź należą do @DLosc .
Wypróbuj online!
Gadatliwy
Wypróbuj online!
źródło
Haskell, 114 bajtów
g
w wersji bez punktowej jestg x = x ++ (reverse (init x))
. Stosuje się go raz na (pół) linii i ponownie na wynik.źródło
sh + coreutils, 119 bajtów
To jest plik binarny. Pokazane jako zrzut heksowy:
Oto formularz base64, dzięki czemu możesz go skopiować / wkleić:
źródło
C
230228 bajtówspróbuj na ideone
Jest to próba ulepszenia oryginalnej opublikowanej wersji C, która miała ćwiartkę płyty zapisaną w macierzy C. Nie tak krótki, jak się spodziewałem. Ta wersja ma tylko jedną ósmą płyty.
Nie golfowany:
źródło
GNU sed,
219205 bajtówKorzystając z lustrzanej symetrii planszy, druga połowa jest pierwszą, która była przechowywana w odwrotnej kolejności w przestrzeni ładunkowej.
źródło