Istnieje 21 przedmiotów w Minecraft , że można craft używając tylko drewno i elementy spreparowany z drewna:
ax
łódź
miska
przycisk
skrzynia
Crafting table
drzwi
płot
brama
motyka
drabina
kilof
deski
płyta dociskowa
łopata
znak
płaskie
schody
trzymać
miecz
klapę
Ta lista zakłada, że 6 różnych rodzajów desek / płyt / drzwi / itp. wszystkie są liczone jako ten sam element. Innym sposobem na to jest założenie, że masz dostęp tylko do jednego rodzaju drewna.
Każdy z tych 21 przedmiotów ma inny przepis rzemieślniczy . Będziemy reprezentować każdy z tych przepisów jako siatkę postaci 2 × 2 lub 3 × 3 .WPS
. To .
puste miejsce rzemieślnicze, W
przeznaczone do drewna , P
do desek drewnianych i S
do patyków . Dla tych konkretnych przedmiotów nie są potrzebne żadne inne postacie.
Na przykład jest to przepis na skrzynię :
PPP
P.P
PPP
Wyzwanie
Napisz program, który przyjmuje nazwę jednego z naszych 21 przedmiotów, dokładnie tak, jak pokazano powyżej, i drukuje prawidłowy przepis rzemieślniczy na ten przedmiot.
Receptury rzemieślnicze są niezmienne w tłumaczeniu, więc jeśli dane wejściowe są fence
, oba są poprawne:
PSP
PSP
...
...
PSP
PSP
Jeśli przepis mieści się w siatce 2 × 2, możesz wyprowadzić go w siatce 2 × 2 lub 3 × 3. np . stick
:
.P
.P
...
.P.
.P.
Przepisy można również odzwierciedlać poziomo (wokół pionowej linii symetrii), choć ma to znaczenie tylko dla siekiery, motyki i schodów. np . hoe
:
.PP
.S.
.S.
PP.
.S.
.S.
Tak więc program musi wypisać dowolny przepis, który mieści się w siatce i ma prawidłowy kształt (ignorując tłumaczenie i tworzenie kopii lustrzanych). Są to wszystkie przepisy, które rozpozna oficjalna gra. (Pamiętaj, że przepisów nie można obracać ani kopiować w pionie).
Detale
- Weź dane wejściowe ze standardowego wejścia lub wiersza poleceń. Możesz założyć, że dane wejściowe są zawsze prawidłowe. Wymaganie cudzysłowu wokół danych wejściowych (np.
"chest"
) Jest w porządku. - Wyjście na standardowe wyjście (lub najbliższą alternatywę) z opcjonalnym końcowym znakiem nowej linii.
- Najkrótsze przesłanie w bajtach wygrywa.
Przykład
Oto lista wszystkich danych wejściowych i przykładowych danych wyjściowych:
axe
PP.
SP.
S..
boat
P.P
PPP
...
bowl
P.P
.P.
...
button
P.
..
chest
PPP
P.P
PPP
crafting table
PP
PP
door
PP.
PP.
PP.
fence
PSP
PSP
...
gate
SPS
SPS
...
hoe
PP.
S..
S..
ladder
S.S
SSS
S.S
pickaxe
PPP
.S.
.S.
planks
W.
..
pressure plate
PP
..
shovel
P..
S..
S..
sign
PPP
PPP
.S.
slab
PPP
...
...
stairs
P..
PP.
PPP
stick
P.
P.
sword
P..
P..
S..
trapdoor
PPP
PPP
...
źródło
Odpowiedzi:
CJam,
100969491 bajtówStackExchange porządkuje materiały niedrukowalne, więc zamiast kopiowania i wklejania tutaj jest link bezpośredni . Dodatkowo oto program testowy .
(Dzięki @Optimizer za informację
f
i @ MartinBüttner za informację o indeksowaniu modulo w CJam.)Cygwin's
hexdump
:Wyjaśnienie
Aby zbudować przepisy, używamy 13 różnych wierszy (wymienione są również wyjaśnienia, dlaczego jest to minimalne):
Wiersze kodujemy za pomocą
Z"O>HVa=4a"98bZb+"P.SW"f=3/
, co dajePierwszy bit
"+WcbKF AQH;_{GM8Lyf=_tmTn"141bDb3/
koduje przepisy, dającZwróć uwagę na pierwszy wpis
[3 3 8]
, na który jest przepissign
.l72b970%=
wczytuje dane wejściowe, a następnie stosuje magię, aby ustalić, który przepis wziąć z listy. Chociaż mamy tylko 21 przepisów, na liście jest 24 - dodatkowe kilka miejsc odpowiada literom[1 0 0]
s.Po przeczytaniu danych wejściowych, wybraniu przepisu i przekonwertowaniu przepisu na wiersze, wprowadzamy nowe znaki
N*
i automatycznie drukujemy.CJam,
898683 bajtów... okazuje się, że twarde kodowanie wszystkich wyjść działa nieco lepiej w CJam. Jestem bardzo rozczarowany.
Po raz kolejny mamy kilka niedrukowalnych, więc oto bezpośredni link i program testowy .
Cygwin's
hexdump
:Wyjaśnienie
Wyjścia są kodowane przy użyciu podstawy 3, z samotnym
W
sczepionym z przodu, zanim struna zostanie podzielona na 3 s, aby dać rzędy, a rzędy zostaną podzielone na grupy 3 s, aby dać przepisy.Podobnie jak powyżej, do wyboru przepisu używana jest magia konwersji bazowej i modulo. Istnieją 22 przepisy (jeden nieużywany), ale musimy wziąć modulo 24, więc faktycznie musimy wyraźnie określić
24%
ten czas, zamiast polegać na indeksowaniu modulo.źródło
xxd
? Łącza bezpośrednie nie działają w przeglądarce Firefox.JavaScript (ES6), 235
241 262Edytuj Nadużywaj jeszcze więcej zasady, że dane wejściowe są zawsze poprawne: jest tylko 1 element, który wymaga W, i może być w specjalnej obudowie. Siatka wyjściowa jest więc zakodowana jako 9-cyfrowa podstawowa liczba 3.
235 bajtów z I / O poprzez wyskakujące okienko.
221 bajtów jako funkcja do przetestowania.
Wyjście zawsze w postaci siatki 3x3. Przy 4 dostępnych symbolach wyjściowych siatka jest kodowana jako liczba bitów 3x3x2 (18). Ponieważ dane wejściowe muszą być zawsze poprawne, ciąg znaków jest przechowywany obcięty do absolutnego minimum.
Przetestuj w konsoli Firefox / FireBug
Wydajność
źródło
Python, 305 bajtów
Wyjaśnienie
Komentarz
Ten kod z pewnością nie jest najmniejszy, ale działa dobrze. Jestem zadowolony. :)
Python, 282 bajty
Korzystanie z tej samej techniki w celu wygenerowania unikalnego identyfikatora, ale bezpośrednie wyszukiwanie przepisu w tablicy. Jest o wiele prostszy i trochę bardziej kompaktowy niż mój pierwszy kod.
źródło
W.\n..