Plakat po raz pierwszy czyhającego tutaj.
Napisz program, który pobierze 3 wejścia: X, Y i Z.
- X = w poprzek (kolumny)
- Y = w dół (rzędy)
- Z = znacznik lokalizacji
Program powinien następnie wydrukować siatkę wizualną X w poprzek i Y w dół. Ta siatka może składać się z dowolnego znaku oprócz „+”. Każda „lokalizacja” otrzymuje numer indeksu, licząc w górę od 1 o współrzędnej 1, 1 w poprzek, a następnie w dół do końca.
X i Y zawsze będą wynosić co najmniej 3, a Z nigdy nie będzie większe niż X * Y
.
Z reprezentuje lokalizację, która jest drukowana jako „+”, w lokalizacji, a także 1 znak w lewo, w prawo, w górę iw dół. Na przykład:
+
+++
+
Na koniec, jeśli znaki + przechwycą krawędzie (najbardziej na górze, najbardziej na lewo, na prawo i / lub najbardziej na dół), to + powinien odbić się do tyłu wzdłuż tej samej osi i przelać drugą stronę.
Przykłady: Dane wejściowe = 5, 5, 13
-----
--+--
-+++-
--+--
-----
Wejście = 10, 10, 10
-------+++
---------+
---------+
----------
----------
----------
----------
----------
----------
----------
Wejście = 10, 10, 21
----------
+---------
+++-------
+---------
----------
----------
----------
----------
----------
----------
Edycja: przykład inny niż kwadrat 16,3,32
---------------+
-------------+++
---------------+
Myślę, że wszystko omówiłem. Dane wejściowe nie powinny być ograniczone, ale jeśli Twój program tego wymaga, ogranicz go do wartości 64 * 64.
Punkt bonusowy (czy mogę to zrobić?): Dane wejściowe Z nie powinny być> X * Y, ale jeśli są większe niż Y * Z, wyślij środek + na środek siatki.
EDYCJA: Wejście Z nie może być większe niż X * Y
Edycja 2 :. Wprowadziłem pewne zmiany w X i Y, miejmy nadzieję, że będą jaśniejsze
To jest kod golfowy, wygrywa najkrótszy kod.
Odpowiedzi:
Python 2,
172171 bajtówEdycja: Zapisano 1 bajt, konwertując na funkcję.
Poprzedni (bardziej czytelny):
źródło
JavaScript (ES6), 165 bajtów
źródło
Befunge, 175 bajtów
Wypróbuj online!
Pierwsza linia (i krótka kontynuacja do drugiej linii) to miejsce, w którym odczytuje się parametry i oblicza kilka stałych - współrzędne położenia ( lx , ly ), a także dostosowane współrzędne, które odpowiadają za odbijanie się krawędzie:
Druga i trzecia linia zawierają główne pętle na wysokości i szerokości siatki, ścieżka wykonania początkowo biegnie od prawej do lewej, zanim skręci na trzecią linię od lewej do prawej. Dla każdej współrzędnej w siatce ( gx , gy ) obliczamy następujący warunek:
Jeśli ten warunek jest prawdziwy, pchamy a
"+"
na stos, a jeśli false, pchamy a"-"
. Aby uniknąć rozgałęziania się tutaj, naprawdę popychamy43 + 2 * !condition
(43 oznacza wartość ASCII plus, a 45 minus).Po zakończeniu pętli ostatni fragment kodu jest tylko standardową procedurą wyjściową, która drukuje wszystko na stosie.
źródło
JavaScript (ES6), 170
Nadal gra w golfa
Mniej golfa
Test
źródło