tło
Mam kilka kwadratowych pudeł równej wielkości, a ponieważ jestem zgrabną osobą, chcę ułożyć je wszystkie w kwadratową formację. Jednak ich liczba niekoniecznie jest kwadratem idealnym, więc może być konieczne przybliżenie kwadratu. Chcę, żebyś znalazł mi najbardziej estetyczny układ - oczywiście programowo.
Wejście
Twój wkład to pojedyncza dodatnia liczba całkowita kreprezentująca liczbę pól.
Wynik
Twój program wybierze dwie liczby całkowite dodatnie m, n, które będą się m*(n-1) < k ≤ m*nutrzymywać. Reprezentują szerokość i wysokość dużego, kwadratowego kształtu, który układamy. Ponieważ szukamy estetycznych kształtów, ilość powinna być minimalna, aby kształt był zbliżony do kwadratu, a jego powierzchnia była bliska . Jeśli nadal jest kilku kandydatów do pary , wybierz ten, w którym szerokość jest maksymalna.(m - n)2 + (m*n - k)2k(m, n)m
Teraz twoim faktycznym wyjściem nie będą liczby mi n. Zamiast tego wydrukujesz układ pudeł, używając znaku #do przedstawienia pudełka. Mówiąc dokładniej, wydrukujesz n-1wiersze, z których każdy składa się ze mznaków #, a następnie jeden wiersz k - m*(n-1)znaków #. Zauważ, że wynik zawiera dokładnie kznaki #.
Zasady i punktacja
Na wyjściu nie może być żadnych początkowych ani końcowych białych znaków, z wyjątkiem tego, że ostatni wiersz może być wypełniony końcowymi spacjami o długości m, jeśli jest to pożądane. Może być jedna nowa linia, ale nie ma poprzedniej nowej linii. W #razie potrzeby możesz użyć dowolnego drukowalnego znaku ASCII .
Możesz napisać pełny program lub zwrócić ciąg znaków z funkcji. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
Oto prawidłowe dane wyjściowe dla kilku wartości wejściowych.
1
#
2
##
3
##
#
4
##
##
8
###
###
##
13
#####
#####
###
17
######
######
#####
18
#####
#####
#####
###
20
#####
#####
#####
#####
21
######
######
######
###
22
######
######
######
####
23
#####
#####
#####
#####
###