Wprowadzenie:
Kiedy myślimy o Biedronkach, zwykle myślimy o czerwonym lub ciemnopomarańczowym błędzie z czarnymi plamami. Chociaż nie jest to konieczne, ponieważ są również czarne z czerwonymi / pomarańczowymi biedronkami z kropkami lub biedronki w ogóle bez plam , to głównie wyobrażamy sobie biedronki, takie jak azjatycka biedronka:
Należy również zauważyć, że plamy na biedronkach są prawie zawsze symetryczne. I tu pojawia się to wyzwanie.
Wyzwanie:
Biorąc pod uwagę liczbę całkowitą n
( >= 0
), wypisz jedną lub wiele razy następującą biedronkę ASCII-art, z symetrycznymi plamami równomiernie podzielonymi między dwie strony, a także dwie lub więcej biedronek.
Oto domyślny układ biedronki:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Jeśli n=0
wyprowadzamy biedronkę powyżej taką, jaka jest.
Kiedy n
jest większy od zera, albo wypełniamy spacje błędu ASCII-art małymi literami o
, albo zastępujemy środek |
w środku wielką O
. Celem jest wprowadzenie n
zmian w „pustych” biedronkach, przy jednoczesnym wytwarzaniu symetrycznego wyjścia (na biedronkę) i generowaniu jak najmniejszej liczby biedronek.
Prawidłowe wyniki dla n=1
:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Ale byłoby to nieprawidłowe:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Prawidłowe dane wyjściowe dla n=2
:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
Pierwszym, n
który nie jest już w stanie zmieścić się w jednej biedronce, jest n=24
. W takim przypadku będziesz musiał podzielić go tak równo, jak to możliwe na dwie biedronki (możesz wybrać, czy wyprowadzać je obok siebie, czy pod sobą - z opcjonalnie jedną spacją lub jedną nową linią między nimi). Na przykład:
_V_ _V_
/(@I@)\ /(@I@)\
/o o|o o\ /o o|o o\
|o o | o o||o o | o o|
\o o|o o/ \o o|o o/
''-!-'' ''-!-''
LUB:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Zasady konkursu:
n
będzie w zakresie0-1000
.- Możesz wybrać wyjście do STDOUT, powrót jako ciąg lub tablicę / listę 2D-char itp. Twoje połączenie.
- Wiodące znaki nowej linii lub niepotrzebne białe znaki nie są dozwolone. Dozwolone są końcowe białe spacje i pojedyncza nowa linia.
- Jak wspomniano powyżej, gdy potrzebne są dwie lub więcej biedronek, możesz wybrać, czy mają być wyprowadzane obok siebie, czy pod sobą (lub połączenie obu ...)
- Gdy dwie lub więcej biedronek jest drukowanych obok siebie, dozwolone jest jedno opcjonalne miejsce pomiędzy nimi. Kiedy drukowane są dwie lub więcej biedronek, dozwolona jest jedna opcjonalna nowa linia pomiędzy nimi.
- Możesz wybrać układ biedronek na dowolnym etapie sekwencji, o ile są one symetryczne i równe wejściowi
n
. - Ponieważ celem jest wprowadzanie
n
zmian ORAZ jak najmniejszej liczby biedronek, zaczniesz używać więcej niż jednej biedronki, gdy będziesz wyżejn=23
. Układ tych biedronek nie musi być taki sam. W rzeczywistości nie jest to nawet możliwe w przypadku niektórych danych wejściowych, takich jakn=25
lubn=50
wymienić dwa. - Ponadto czasami nie jest możliwe równomierne podzielenie kropek na dwie lub więcej biedronek. W takim przypadku musisz podzielić je możliwie równomiernie, z różnicą co najwyżej 1.
Tak więc, biorąc n=50
pod uwagę dwie ostatnie zasady, byłby to prawidłowy możliwy wynik (gdzie pierwszy błąd ma 16 miejsc, a pozostałe dwa mają 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
o
iO
zamiast tego. Trochę zmieniłem brzmienie.n=50
przykład uważam, że masz na myśli, że pierwszy błąd ma 16 miejsc, a pozostałe dwa mają po 17.Odpowiedzi:
Węgiel drzewny ,
8481 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Podaj całkowitą liczbę miejsc.
Oblicz potrzebną liczbę biedronek.
Pętla nad każdą biedronką.
Oblicz liczbę miejsc do umieszczenia na tej biedronce.
Wydrukuj głowę i prawe skrzydło biedronki.
Jeśli jest więcej niż 21 miejsc, wydrukuj dwa miejsca, w przeciwnym razie wydrukuj na odwrocie.
Jeśli liczba miejsc jest nieparzysta, wydrukuj inne miejsce, w przeciwnym razie wydrukuj resztę tyłu.
Podziel liczbę miejsc przez dwa i rozdziel je na trzy rzędy po 3, 4 i 3 miejsca.
Przejdź na początek następnej biedronki.
Odbij płótno po lewej stronie, trzymając plecy.
źródło
Python 2 ,
252249238212211213209 bajtówWypróbuj online!
źródło
.replace('A','|O'[b%2])
i użyćc=" _V_\n /(@I@)\ \n /361"+'|O'[b%2]+"163\ \n|4087B7804|\n \\529B925/\n ''-!-''"
?[' o','|O'][i>9]
w' |oO'[i>9::2]
i używając|
zamiast logicznego lub. Również przechodzącfor i in range(11)
doexec
instrukcji zapisano 4 bajty.for
pętlą, usuwając również niepotrzebną zmienną.JavaScript (ES6),
183186 bajtówUżywa tej samej formuły, co odpowiedź TFelda, aby rozdzielić miejsca między biedronki.
Próbny
Pokaż fragment kodu
źródło
Befunge,
292279 bajtówWypróbuj online!
Wyjaśnienie
Sztuka ASCII dla biedronki jest zakodowana w jednym ciągu Befunge, przesuniętym o 15, aby umożliwić zarezerwowanie pierwszych 15 znaków do druku do specjalnych celów. Pierwsze dwa z tych znaków specjalnych reprezentują znak nowej linii i
|
znak, które w innym przypadku nie byłyby możliwe do wydrukowania. Trzeci nie jest używany, ponieważ jest to"
, którego nie można użyć w ciągu. Następne dwa przedstawiają duże plamy w centrum. Pozostałe dziesięć dotyczy miejsc na skrzydłach.Te znaki specjalne są tłumaczone do ostatecznej postaci za pomocą tabeli odnośników, która jest zapisana w pierwszej części pierwszego wiersza.
Aby ułatwić wyjaśnienie, jest to kod z wyróżnionymi różnymi częściami składowymi:
Zaczynamy od zainicjowania nowej linii i
|
znaku w tabeli odnośników, ponieważ są one stałe.Następnie odczytujemy liczbę miejsc ze standardowego wejścia i obliczamy liczbę wymaganych biedronek.
Następnie możemy uruchomić zewnętrzną pętlę dla zestawu błędów, obliczając liczbę miejsc do renderowania następnej biedronki.
Dla każdej biedronki obliczamy, czy należy wyświetlić duże środkowe miejsce (jeśli
spots%2 == 1
), i zapisujemy odpowiednią wartość w tabeli odnośników.Podobnie obliczamy, czy należy wyświetlić drugą parę dużych punktów (jeśli
spots/2 > 10
), ponownie aktualizując tabelę wyszukiwania. Obliczamy również pozostałe miejsca wymagane na każdym skrzydle.Ostatnią częścią inicjalizacji tabeli odnośników jest pętla, która oblicza, które z małych miejsc należy wyświetlić. Zasadniczo algorytm jest następujący: jeśli
(spotnum*spotcount+4)%10 > ((spotnum+1)*spotcount+4)%10
, to miejsce musi zostać wyświetlone.Następnie wypychamy zakodowaną reprezentację ciągu biedronki na stos. Zasadniczo jest to zwykły ciąg, ale stał się nieco skomplikowany, gdy próbowałem wycisnąć go w luki w kodzie, aby źródło utworzyło prostokąt.
W tym momencie jesteśmy gotowi rozpocząć pętlę wyjściową, przetwarzając znaki jeden po drugim, konwertując przypadki specjalne (plamy, podziały linii itp.) Za pomocą wcześniej utworzonej tabeli odnośników.
Na koniec sprawdzamy, czy pokazaliśmy wszystkie wymagane biedronki, w przeciwnym razie przejdźmy do początku zewnętrznej pętli.
źródło
Ruby ,
203193190 bajtówWypróbuj online!
źródło
{|m|m.
można zastąpić{$&.
;b=(n-1)/23+1
można zastąpićb=1+~-n/23
; ix=[z=d>21,d%2>0,z]⏎s.gsub!(?x){x.pop ? ?O:?|}
można go zastąpićx=[d%2,d<=>21]*2⏎s.gsub!(?x){"|O|"[x.pop]}
.%q{XY}
zamiast'X'+"Y"
w pierwszych ośmiu wierszach i kilka innych, wykonującd=n>0?n/(b=1+~-n/23):b=0
zamiastn>0?d=n/(b=(n-1)/23+1):d=b=0
.