streszczenie
Celem tego wyzwania jest stworzenie nieopracowanej wersji graficznej 15-łamigłówki / przesuwanej układanki, zwanej także francuskim taquin .
Detale:
Biorąc pod uwagę wkład złożony z:
- obraz,
- liczba całkowita
n
, - inna liczba całkowita
r
,
Twój program, funkcja lub cokolwiek innego, co pasuje, musi wyświetlać ten sam obraz ( tj. ten sam rozmiar i format) co dane wejściowe, ale który przeszedł następujący proces:
- podziel obraz na
n²
prostokąty, - losowo usuń jeden z tych prostokątów,
- przesuń losową liczbę sąsiadujących prostokątów z linii / kolumny, na którą wpływa punkt (2), aby utworzony otwór został wypełniony i w tej linii / kolumnie zostanie wygenerowany kolejny. Ten numer może być,
0
jeśli puste miejsce znajduje się w rogu lub na krawędzi.
Powtórz (3.) r
razy.
Wyjaśnienia:
- Jeśli przeniosłeś prostokąty z linii w kroku (3), musisz przenieść prostokąty z kolumny w następnym powtórzeniu,
- jeśli przesunąłeś prostokąty od lewej do prawej w kroku linii, musisz je przesunąć od prawej do lewej w następnym kroku linii, tak samo w przypadku kolumn od góry do dołu i od dołu do góry,
- możesz założyć, że
n
zostanie wybrany, aby dzielił długości boków obrazu.
Ostatni punkt:
Animacja .gif
pokazująca cały proces jest bardzo mile widziana.
Proponuję użyć następującego obrazu (który jest 1024x768
), z modelem n=16
i, r=100
jako model, możesz użyć dowolnego innego obrazu (o ile jest on odpowiedni i zgodny z zasadami SE), oczywiście.
Pamiętaj, że obowiązują zasady dotyczące luk w standardach .
To jest golf golfowy , więc wygrywa krótsze zgłoszenie!
Ponieważ zażądano przykładu, oto jeden, wykonany „ręcznie” za pomocą n=4
ir=1
Kroki 1 i 2
Krok 3 : liniowo, 2 prostokąty po lewej stronie
źródło
move a random number of contiguous rectangles
czy może to być 0 prostokątów? (utrudnieniem byłoby zachowanie zmiany programu, gdy puste miejsce jest na krawędzi / rogu)Odpowiedzi:
Mathematica, 246 bajtów
Funkcja anonimowa. Zawiera U + F3C7, co odpowiada Mathematica
Transpose
operatorowi . Ta funkcja pobieraImage
obiekt i zwracaImage
obiekt.Przykładowa animacja z
n=16
ir=100
Po 5000 iteracjach:
(kliknij obraz, aby powiększyć wersję)
Wyjaśnienie
Inicjalizacja
Zapisz
Nest
funkcję (operacja powtarzana) wn
.Zapisz
RandomInteger
funkcję wk
iReverse
funkcję wq
.Dzielenie obrazu
Podziel obraz wejściowy na (drugie wejście) ^ 2 kafelki.
Wygeneruj dwa
RandomInteger
s między 1 a drugim wejściem. Wybiera losowy kafelek.Zmień ten kafelek na biały. Przechowuj w
i
.Ruchome płytki
Wygeneruj dwie losowe liczby całkowite od 0 do 1 i zapisz je odpowiednio w
t
ir
. To losowo wybiera kierunek.Zdefiniuj funkcję
o
: składt
czasy wejściowe .r
.Zastosuj
o
do danych wejściowych.Znajdź kolumnę
i
(biały obraz).Odejmij jeden i znajdź losową liczbę całkowitą od 0 do tej liczby. To losowo wybiera liczbę płytek do przesunięcia.
Gdy wspomniana liczba kafelków pojawi się przed
i
(białym obrazem), zmień ich miejsca.Odwróć
o
funkcję i zastosuj ją do wyniku powyższej operacji. Spowoduje to cofnięcie i cofnięcie obrazu.Pętla i montaż obrazu
Powtórz powyższy proces (trzecie wejście) razy.
Złóż zdjęcia razem.
źródło