W tym wyzwaniu mam pole z awokado, które chciałbym soczyć tak szybko i całkowicie, jak to możliwe. Czy potrafisz napisać program lub funkcję, która pomoże mi w perfekcyjnym wyciśnięciu awokado?
Jako dane wejściowe otrzymasz awokado jako siatkę m
x m
kwadrat, gdzie m
liczba całkowita wynosi od 3 do 6. Każdy kwadrat zawiera dokładnie jedno awokado. Awokado ma kilka etapów soczystości:
Etap 1: Awokado w ogóle nie zostało wyciśnięte.
Etap 2: Awokado zostało częściowo wyciśnięte.
Etap 3: Awokado zostało całkowicie wyciśnięte.
Etap 4: Awokado wybuchło z powodu nadmiernego wyciskania soku.
Gdy używasz narzędzia do wyciskania soku, awokado w obszarze działania tego narzędzia do wyciskania soków przechodzi do następnego etapu. Wybuchające awokado mają dużą siłę i zniszczą całe pole awokado, więc upewnij się, że żadne z awokado nie wybuchnie!
Oto przykład siatki awokado. W tych przykładach użyłem współrzędnych 0,0
dla lewego dolnego rogu i współrzędnych 2,2
dla prawego górnego rogu, chociaż możesz dopasować układ współrzędnych do swojego języka.
112
221
231
Celem jest, aby wszystkie awokado były idealnie wyciśnięte (tj. Etap 3). Aby to osiągnąć, masz trzy różne narzędzia do wyciskania soku. Każde narzędzie wyciskające sok ma inny obszar działania, ale wszystkie zwiększają soki dotkniętych awokado o 1.
Oto wszystkie narzędzia, które masz do dyspozycji. Korzystasz z sokowirówek, określając pierwszą literę narzędzia, a następnie współrzędne, które chcesz wycisnąć. Na przykład, aby użyć krajalnicy do kwadratu 5,2
, wypisz dane wyjściowe S 5,2
.
Krajalnica : wyciska współrzędne celu i awokado po obu stronach.
112 112 112
221 --> XXX --> 332
231 231 231
Tarka : wyciska współrzędne celu i awokado powyżej i poniżej.
112 1X2 122
221 --> 2X1 --> 231 --> kaboom!
231 2X1 241
Wyrzutnia rakiet : wyciska współrzędne celu i wszystkie sąsiadujące awokado.
112 1X2 122
221 --> XXX --> 332
221 2X1 231
Przykładowe wejścia i wyjścia
323
212
323
G 1,1
S 1,1
3312
3121
1213
2133
R 0,0
R 1,1
R 2,2
R 3,3
22322
22222
22222
33233
33333
G 0,3
G 1,3
G 2,2
G 3,3
G 4,3
222332
333221
222332
333222
222333
333222
S 1,5
S 1,3
S 1,1
S 4,5
S 4,3
S 4,1
G 5,4
Odpowiedzi:
Mathematica - 350 bajtów
Niezbyt krótkie rozwiązanie, ale lepsze niż żadne rozwiązanie, prawda?
Bardziej czytelna wersja (z dodatkowymi spacjami, wcięciami i innymi):
Dane wejściowe to tablica (np.
{{3,2,3},{2,2,2},{3,2,3}}
), Dane wyjściowe to ciąg znaków (z końcowym znakiem nowej linii - jeśli jest to niedopuszczalne, zamknij funkcjęStringDrop[...,-1]
na dodatkowe 15 bajtów). Użyłem układu współrzędnych, który mówi, że (1,1) to lewy górny róg, (n, n) to dolny prawy róg (gdzie n jest wymiarem macierzy). Czasami, jeśli rozwiązanie wymaga wielokrotnego wykonania tej samej operacji, dane wyjściowe zawierają rzeczy takie jak3 G 2,2
(dla „trzykrotnie użyj tarki w (2,2)”) - mam nadzieję, że nie powiedziałeś, co robić w tym przypadku W porządku.Wyjaśnienie:
Table[G[i,j]+G[i-1,j]+G[i+1,j]+S[i,j]+S[i,j-1]+S[i,j+1]+R[i,j]+R[i-1,j]+R[i+1,j]+R[i,j-1]+R[i,j+1],{i,n=Length@#},{j,n}]
tworzy tablicę ze zmiennymi G [i, j] w każdym miejscu, na które wpływ ma użycie tarki w (i, j) i podobnie dla S [i, j] i R [i, j]. Zmienne te reprezentują liczbę przypadków użycia narzędzia w tej pozycji..../.(G|S|R)[___,0|n+1,___]->0
usuwa efekty używania narzędzi w pozycjach poza polem awokado....==3-#
porównuje to do różnicy między wejściem a polem idealnie wyciśniętych awokado....&&And@@t[#[i,j]>=0&]
mówi, że zmienne G [i, j], S [i, j], R [i, j] muszą być nieujemne (nie można odblokować awokado!), używając skrótut[x_]:=Flatten@Table[x/@{G,S,R},{i,n},{j,n}]
.First@Solve[...,t[#[i,j]&],Integers]
znajduje pierwsze całkowite rozwiązanie naszych równań w kategoriach zmiennych G [i, j], S [i, j], R [i, j]./.{(x_->m_):>ToString[m x]}
ukrywa zmienne, które są równe zeru, jednocześnie umieszczając rozwiązanie w ładnej formie łańcucha.StringReplace[...,{"["->" ","]"->"\n",", "->","}]
zamienia ciągi jak"2 G[1, 4]"
w ciągi podobne"2 G 1,4"
i dodaje nowy wiersz na końcu.""<>Cases[...,Except@"0"]
usuwa wszystkie resztki"0"
i łączy wszystkie ciągi razem.źródło