Gra w chińskie warcaby rozgrywana jest na planszy ze spacjami w kształcie sześcioramiennej gwiazdy:
Możemy stworzyć ASCII-graficzną reprezentację tej tablicy, używając .
pustych miejsc i liter GYORPB
dla sześciu kolorowych początkowych lokalizacji:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Aby było bardziej interesująco, możemy również zmienić rozmiar. Zmierzymy rozmiar deski na podstawie długości boków jej trójkątnych początkowych lokalizacji: deska powyżej ma rozmiar 4.
Ponieważ pisanie tego wszystkiego ręcznie jest bardzo trudne, napiszmy program (lub funkcję), aby to zrobić!
Detale
Twój kod powinien przyjmować dodatnią liczbę całkowitą reprezentującą rozmiar płytki, poprzez STDIN, ARGV lub argument funkcji. Wyjście wzoru szachownicy do STDOUT (możesz naprzemiennie zwrócić go jako ciąg, jeśli przesłanie jest funkcją).
Wyjście musi albo
- nie mają żadnych spacji końcowych, lub
- mieć dokładnie tyle spacji końcowych, aby wypełnić wzór do idealnego prostokąta o szerokości 6 * N + 1.
Wyjście może opcjonalnie mieć końcowy znak nowej linii. Żadne inne dodatkowe (wiodące, końcowe) białe znaki nie są dozwolone.
Przykłady
Rozmiar 1:
G
B . . Y
. . .
P . . O
R
Rozmiar 2:
G
G G
B B . . . Y Y
B . . . . Y
. . . . .
P . . . . O
P P . . . O O
R R
R
Rozmiar 4:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Punktacja
To jest code-golf : wygrywa najkrótszy kod w bajtach.
Odpowiedzi:
Ruby,
141127Zwraca ciąg prostokątny
Niegolfowany w programie testowym
źródło
Python 2, 140 bajtów
Nie wspaniale, ale oto moja wstępna oferta.
Reguły białych znaków dodały wiele bajtów. Dla porównania, oto 120-bajtowy program Python 3, który jest poprawny tylko wizualnie i nie przestrzega reguł białych znaków:
A oto moja nieco dłuższa rekurencyjna 149-bajtowa próba Python 3:
źródło
Python 2, 152
Z perspektywy czasu jest to niewłaściwe podejście do Pythona, ale zamieszczam je tutaj, na wypadek, gdyby ktoś mógł z niego skorzystać. Zamiast wyjaśniać ten bałagan kodu, postaram się wyrazić pomysł, który za tym stoi.
Chodzi o to, aby używać trójkątne współrzędnych , w którym trójkątny krata odpowiada całkowitą trzyosobowe
(a,b,c)
za+b+c=0
.(Tutaj punkty sieci są rysowane jako sześciokąty.)
Możemy przekształcić współrzędne kartezjańskie na trójkątne jako
zauważając to
x
iy
musi mieć tę samą parzystość, w przeciwnym razie jest poza szachownicą i powinniśmy wydrukować spację.We współrzędnych trójkątnych linie ograniczające gwiazdy sześciokątnej mają równania:
a==n, b==n, c==n, a==-n, b==-n, c==-n
.Możemy więc określić, w jakim regionie jesteśmy, o który z nich
[a,b,c,-a,-b,-c]
jest większy niżn
.Prostokąt ograniczający wymaga, abyśmy to robili
x
w zamkniętym przedziale [-2 * n, 2 * n] orazy
w zamkniętym przedziale [-3 * n, 3 * n].źródło
Siatkówka , 234 bajty
Pobiera dane wejściowe jednoargumentowe.
Każda linia powinna przejść do własnego pliku i
#
powinna zostać zmieniona na nową linię w pliku. Jest to niepraktyczne, ale możesz uruchomić kod tak jak plik z-s
flagą, zachowując#
znaczniki i być może zmieniając je na znaki nowej linii w celu zwiększenia czytelności, jeśli chcesz.Kod ma minimalną złożoność wyrażeń regularnych. Główne etapy generacji to:
G
wiersz i pierwszyB.Y
wiersz (rozdzielone znacznikamiijk
i rzeczywistymi użytymi letletamiRPO
).G
linię ze spacją plus minus G, aż będzie tylko jeden G.B.Y
linię za pomocą spacji plus kropki, minus aB
iY
dopóki nie będzie żadnych znakówB
i nieY
pozostanie.q
). Trzymamy marker (w
) na środku.RPO
abyGBY
znajdowały się przed znacznikiem.Wyniki po każdym z powyższych punktów (ograniczonych przez
=
's) dla danych wejściowych1111 (unary 4)
:źródło
JavaScript ( ES6 ) 228
Linia konstrukcyjna po linii. Niewiarygodnie długi w porównaniu do @ Sp3000, który robi to samo.
Używanie ciągu szablonu do zapisania kolejnych 3 bajtów dla znaków nowej linii. Wszystkie nowe linie są znaczące i liczone.
źródło