Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą N i wypisuje lub zwraca ciąg artystyczny N × N ASCII, którego górna połowa jest półkolem z (
's, a dolna połowa jest trójkątem skierowanym w dół z V
' spacje używane jako wypełnienie.
Innymi słowy, zrób rożek do lodów ASCII: (wyjście dla N = 17)
(((((
(((((((((
(((((((((((((
(((((((((((((
(((((((((((((((
(((((((((((((((
(((((((((((((((((
(((((((((((((((((
VVVVVVVVVVVVVVVVV
VVVVVVVVVVVVVVV
VVVVVVVVVVVVV
VVVVVVVVVVV
VVVVVVVVV
VVVVVVV
VVVVV
VVV
V
Przykłady
Oto wyniki dla N = 1 do 5. Zauważ, że dla nieparzystego N trójkąt zawsze musi być większą połówką.
V
((
VV
(((
VVV
V
((
((((
VVVV
VV
(((
(((((
VVVVV
VVV
V
A oto implementacja referencji bez języka Python 3:
N = int(input())
ic = [[' '] * N for _ in range(N)]
for y in range(N//2):
for x in range(N):
if (x - (N - 1) / 2)**2 + (y - (N - 1) / 2)**2 < (N / 2)**2:
ic[y][x] = '('
for y in range(N//2, N):
for x in range(y - N//2, N - (y - N//2)):
ic[y][x] = 'V'
for line in ic:
print(''.join(line))
Detale
- Weź dane wejściowe z stdin, wiersza poleceń lub jako argument funkcji. Wyjście na standardowe wyjście lub podobne, lub możesz zwrócić ciąg, jeśli napiszesz funkcję.
- Część stożkowa powinna dokładnie pasować do implementacji referencyjnej dla wszystkich N.
- Część lodów nie musi dokładnie pasować do implementacji referencyjnej, o ile ma wyraźnie półkole dla wszystkich liter N. (Dzięki temu nie musisz się martwić drobnymi różnicami w półkolu z powodu błędów zaokrąglania .)
- Nie powinno być żadnych zbędnych spacji wiodących, ale mogą być zbędne spacje końcowe.
- Dane wyjściowe mogą opcjonalnie zawierać końcowy znak nowej linii.
- Opcjonalnie można używać 3 inne odrębne druku ASCII znaków w miejscu
(
,V
i przestrzeń.
Punktacja
Najkrótsze przesłanie w bajtach wygrywa. Tiebreaker przechodzi do najstarszego zgłoszenia.
Odpowiedzi:
CJam, 46 bajtów
Wypróbuj online.
Uważam, że obecnie dokładnie naśladuje oryginalną specyfikację, która była wymagana, kiedy zacząłem tworzyć tę odpowiedź. Być może uda się zaoszczędzić kilka bajtów, czyniąc matematykę mniej dokładną w stosunku do oryginalnej specyfikacji, ale dopóki nie zobaczę sposobu na zaoszczędzenie więcej niż jednego lub dwóch bajtów, pozostawię ją taką, jaka jest.
Wyjaśnienie
źródło
2
„i1
” zamiast(
„iV
”?inca2
129123121111107Najczęściej używa to formuł z przykładu python, ale używa kropek i jot zamiast podwójnej pętli. Te
i
czynności wykonuje okrągły testowe doj
funkcji, która wywołuje jota-dot na nim. Ik
funkcja wykonuje test trójkąta dla tejl
funkcji.c
Funkcja catenates wynikij
il
i przekształca się do N x N.edytuj: -6 połącz 2 mapy w 1.
edytuj: -2 usuń bezużyteczne strzępy.
edycja: ładniejszy maszynopis.
edycja: -10 stosuje powtarzane wyrażenia tablicowo.
edycja: -4 wyodrębnia powtarzające się wyrażenie jako funkcję.
edycja: komentarz linia po linii.
Bardziej szczegółowo, punktem wejścia jest
c
funkcja, która przyjmuje domyślnie jeden argumenty
.j
Funkcyjnego tę samą wartość sygnału wejściowego jako jegoy
parametru.Jot-kropka robi podwójną pętlę. Wywołuje
i
funkcję z każdą kombinacją elementów z lewej i prawej tablicy (0..n / 2 i 0..n). Zatemi
funkcja odbiera jakox
w y indeks tabeli, a to odbiera jaky
na x indeksu. Nazwiska mają tu trochę wstecz :).gdzie
q
robiwrócić do
i
Podłoga nie powinna być konieczna. Ale najwyraźniej w tłumaczu jest błąd.
l
Funkcja działa podobnie doj
funkcji, za pomocą JOT-kropka.k
Funkcja daje wartość logiczną skalowana przez 2, a więc wartości można odróżnić od wartości lodów później, w odwzorowaniu.W akcji (przesyłanie potokowe w
tr
celu usunięcia znaków tabulacji, które są monitami REPL):źródło
Python 2,
193192Nie używa ciągów, tylko matematykę
s(L,U)
zwraca liczbę w postaci „U
cyfr z najdalszymi z prawej stronyL
zerami, a pozostałe”f(N,m)
zwraca liczbę N-cyfrową z wewnętrzną sekcją2
i m-szeroką ramką z1
każdej stronyg(N,m)
robi to samo, ale7
dla „koloru” wewnętrznej części, ponieważ bardziej pasuje do tekstury stożkaWynik
źródło
Perl 6, 175
Dość prosta implementacja bez większego golfa, po prostu eliminacja białych znaków / interpunkcji:
źródło