Hintergrund
Ich habe ein paar quadratische Kisten gleicher Größe, und da ich eine nette Person bin, möchte ich sie alle in einer quadratischen Formation anordnen. Ihre Anzahl ist jedoch nicht unbedingt ein perfektes Quadrat, daher muss ich möglicherweise die Quadratform approximieren. Ich möchte, dass Sie mir das ästhetischste Arrangement finden - natürlich programmatisch.
Eingang
Ihre Eingabe ist eine einzelne positive Ganzzahl k
, die die Anzahl der Felder darstellt.
Ausgabe
Ihr Programm muss zwei positive ganze Zahlen auswählen m, n
, m*(n-1) < k ≤ m*n
die gelten. Sie repräsentieren die Breite und Höhe der großen quadratischen Form, die wir anordnen. Da wir nach ästhetisch ansprechenden Formen suchen, muss die Menge minimal sein, so dass die Form nahe an einem Quadrat liegt und ihre Fläche nahe beieinander liegt . Wenn es noch mehrere Kandidaten für das Paar gibt , wählen Sie den, bei dem die Breite maximal ist.(m - n)2 + (m*n - k)2
k
(m, n)
m
Jetzt soll Ihre tatsächliche Ausgabe nicht die Zahlen m
und sein n
. Stattdessen müssen Sie die Anordnung der Kästchen drucken und das Zeichen verwenden #
, um ein Kästchen darzustellen. Genauer gesagt, wird Sie drucken n-1
Reihen, von denen jede besteht aus m
Zeichen #
, und dann eine Reihe von k - m*(n-1)
Zeichen #
. Beachten Sie, dass die Ausgabe genau k
Zeichen enthält #
.
Regeln und Wertung
Die Ausgabe darf keine führenden oder nachfolgenden Leerzeichen enthalten, außer dass die letzte Zeile auf Wunsch mit nachfolgenden Leerzeichen aufgefüllt werden kann, um die Länge zu m
bestimmen. Möglicherweise gibt es eine nachfolgende neue Zeile, aber keine vorhergehenden Zeilenumbrüche. #
Falls gewünscht, können Sie anstelle von ein beliebiges druckbares ASCII-Zeichen verwenden .
Sie können ein vollständiges Programm schreiben oder eine Zeichenfolge von einer Funktion zurückgeben. Die niedrigste Byteanzahl gewinnt und Standardschlupflöcher sind nicht zulässig.
Testfälle
Hier sind die richtigen Ausgänge für einige Eingabewerte.
1
#
2
##
3
##
#
4
##
##
8
###
###
##
13
#####
#####
###
17
######
######
#####
18
#####
#####
#####
###
20
#####
#####
#####
#####
21
######
######
######
###
22
######
######
######
####
23
#####
#####
#####
#####
###
quelle
:
fehlt in Zeile 5. Komma definiert ein Tupel, Klammern()
können in Zeile 6 entfernt werden. Leerzeichen zwischen)
und (if
oderfor
) auch.max
kann Generator als Parameter erhalten, daher sind Klammern[]
redundant. Sie iterieren überd
Schlüssel, damit Sie sie sicher verwenden könnend[i]
.(i+1)*x
in-~i*x
oder geändert werdeni*x+x
.(i*x+x
...CJam (
4442 Bytes)Online-Demo
Ich hatte eher erwartet, dass es eine einfachere Lösung mit Quadratwurzeln geben würde, aber es ist gar nicht so einfach. Beispielsweise ist für die Eingabe
31
die Zeilenbreite zwei größer als die Decke der Quadratwurzel; Für273
(Quadratwurzel etwas mehr als 16,5) ist das beste ungefähre Quadrat ein perfektes 21x13-Rechteck.quelle
CJam, 42 Bytes
Probieren Sie es online aus
Erläuterung:
quelle