tło
Boggle to gra planszowa, w której gracze muszą znaleźć angielskie słowa na planszy losowych alfabetów 4 na 4. Słowa można konstruować, wybierając kolejno sąsiednie komórki na planszy. („przylegające” oznacza przylegające w poziomie, w pionie lub po przekątnej). Ponadto, ta sama komórka nie może być używana więcej niż jeden raz w słowie.
Oto przykładowa tablica:
I L A W
B N G E
I U A O
A S R L
Na tej płycie, BINGO
, ORANGE
i WEARS
są ważne słowa, ale SURGE
i RUSSIA
nie są:
SURGE
: Na planszy nie ma sąsiadującej paryRG
.RUSSIA
:S
nie można użyć dwa razy.
Zmodyfikowany Boggle to zmodyfikowana wersja Boggle, z następującymi zasadami:
- Rozmiar płytki to
n
-by-n
, gdzien
może być dowolna dodatnia liczba całkowita. - Każda komórka może zawierać dowolny jeden bajt od 0 do 255 włącznie.
- Komórki można użyć więcej niż jeden raz, ale nie dwa razy z rzędu .
Na przykładzie pokładzie powyżej, w uzupełnieniu do BINGO
, ORANGE
i WEARS
, LANGUAGE
staje się ważna łańcuch (ponieważ G
stosuje się dwa razy, a nie dwa razy z rzędu), ale RUSSIA
wciąż nie jest (ze względu na SS
pary).
Oto kolejny przykład z wykorzystaniem fragmentu kodu. Łańcuch from itertools import*\n
można znaleźć na następnej płycie, ale nie from itertoosl import*
lub from itertools import *
:
f i ' ' s
r t m l
e o o p
\n * t r
Zauważ, że potrzebujesz dwóch o
, aby dopasować oo
sekwencję.
Wyzwanie
Napisz funkcję lub program, który na podstawie tablicy Zmodyfikowanego Boggle B
(dowolnego rozmiaru) i łańcucha s
określa, czy s
można ją znaleźć B
.
Ograniczenia
Twój kod powinien również zmieścić się na tablicy Zmodyfikowanego Boggle b
. Oznacza to, że musisz pokazać tablicę b
w swoim zgłoszeniu wraz ze swoim kodem, aby funkcja / program generował wartość true, jeśli została podana, b
a kod jako dane wejściowe.
Punktacja
Wynik Twojego zgłoszenia to długość boku najmniejszej planszy, na b
której możesz zmieścić kod. Więzy są zrywane według zwykłych zasad golfa , tj. Długości kodu w bajtach. Zgłoszenie z najniższą oceną (dla obu kryteriów) wygrywa.
Na przykład from itertools import*\n
ma wynik 4 (przy użyciu powyższej płytki) i długość kodu 23 bajtów.
Wejście i wyjście
W przypadku danych wejściowych można zastosować dowolną dogodną metodę zarówno dla, jak B
i s
. Obejmuje to listę znaków i listę znaków, 2D lub spłaszczonych lub cokolwiek innego, co ma sens. Możesz również opcjonalnie wziąć rozmiar płyty jako część danych wejściowych.
W przypadku danych wyjściowych możesz wybrać jedną z następujących opcji:
- Prawdziwe i fałszywe wartości zgodne z konwencją twojego języka lub
- Jedna predefiniowana wartość odpowiednio dla true i false.
Proszę podać metodę wejścia / wyjścia w swoim zgłoszeniu.
źródło
+=+=
coś takiego. Problemem jest==
funkcja wyjściowa ...Odpowiedzi:
Python 2, wynik 3, 20972 bajtów
Pełny kod jest wynikiem: Wypróbuj online!
Pasuje do tablicy Boggle:
Dekoduje i wykonuje ten program:
Który wymaga danych wejściowych takich jak:
['ILAW','BNGE','IUAO','ASRL'], 'LANGUAGE'
źródło
CJam , wynik 2, 9351 bajtów
Wypróbuj online! Oczekuje danych wejściowych takich jak:
i pasuje do tablicy Boggle:
Konstruuje ciąg,
l~:Q,:K;{\:Y;\:X;:C,!_{;QY=X=C0==_{;[X(XX)]K,&[Y(YY)]K,&m*[XY]a-C1>:D;{~DF}%:|}&}|}:F;l:R;K,2m*{~RF}%:|~
a następnie ocenia go jako kod CJam.źródło
Wyczyść , zdobądź 12 (175 bajtów)
(Niemal na pewno zostanie to obezwładnione przez esolang i prawdopodobnie również normalne języki).
Definiuje funkcję,
$ :: Int [Char] {#String} -> Bool
która sprawdza, czy drugi argument (słowo) można znaleźć w trzecim argumencie (tablica), biorąc pod uwagę pierwszy argument jako szerokość.Na planszy, na której to pasuje (patrz poniżej),
*
zaznacz nieużywane miejsca. Istnieje 16 z nich, na płytce o wymiarach 12 x 12 = 144, co oznacza, 128 są efektywnie wykorzystywane (o wydajności z 175/128 ≈ 1,37 ). Możliwe jest uzyskanie tego samego programu na 11 × 11, ale wszystko to odbywa się ręcznie i jest bardzo żmudne; mój szef prawdopodobnie nie byłby szczęśliwy, gdybym spróbował dostać to 11 × 11.Wypróbuj online (z samym programem jako wejściem)!
źródło
Java, wynik 23,
538507 bajtówNSFW
Wypróbuj online!
Skompilowany z JDK 9, ale powinien działać z 8.
Nie wiedziałem, co zrobić z importem i polem statycznym (co w rzeczywistości jest konieczne), więc postanowiłem po prostu wziąć całą klasę i włożyć lambdy do inicjalizatora. Lambda
g
może być następnie zastosowana do tablicy 2D i łańcucha i zwraca,1
jeśli łańcuch znajduje się na planszy, a0
jeśli nie (jakoByte
3 znaki krótsze niżInteger
).Podziękowania dla tego faceta za (w moim przypadku) krótszy niż na stałe sposób adresowania sąsiednich komórek.
Gdzieś w trakcie tworzenia tej potworności zainwestowałem w to, aby działała z lambdami, aż do tego czasu postępowała coraz gorzej. Nie zbliża się nawet do innych odpowiedzi i prawdopodobnie nie jest nawet blisko optymalnego rozwiązania w Javie, ale hej, całkiem ładnie pasuje do płyty 23x23 (co nie jest optymalne, ale być może bliżej niż sam program) :
Oczywiście w tym momencie nie było sensu próbować zrobić tego ręcznie. Jako bonus, oto (naiwna) funkcja, której użyłem do skompresowania kodu na płycie:
Odwzorowuje swój wkład na spiralę, która nie zadziałała z implementacją snaking , pozostawiając postacie, jeśli to możliwe. Jest to raczej proste, więc prawdopodobnie można go poprawić i zapomniałem dodać sprawdzanie znaków w kierunku do tyłu do tyłu (aktualizacja: dodałem go i wygenerowało niepoprawne wyniki) , więc prawdopodobnie mógłbym ogolić jedną lub dwie postacie, ale wątpię, żeby to się dostało na 22x22.
Edycja: Usunięto 6 spacji w miejscach, w których nie musiały być. Zaoszczędzono 13 bajtów, zastępując kontrolę indeksów tablic try-catch. Ogolono 12 bajtów, przenosząc rozmiar planszy na
int
.źródło
Galaretka , 2316 bajtów, wynik 3
Wypróbuj online!
Tablica:
Uwaga: jest to (nieco) trywialne rozwiązanie. Problem zgłosili Lynn dla idei .
Zwraca niepustą listę, jeśli
s
można ją znaleźćB
, oraz pustą listę, jeśli nie. Dodana stopka pomaga to wyjaśnić.źródło
s
nie można znaleźć, lub dodatnią liczbę całkowitą, jeśli można ją znaleźć. Ale reguły mówią: „Jedna predefiniowana wartość odpowiednio dla prawdy i fałszu”. A może są puste / niepuste na konwencję fałsz / prawda w galarecie?