Sie kennen diese stapelbaren Regale, die im Grunde genommen nur Holzkisten sind, die zusammen gestapelt werden können? Wir werden simulieren, wie man Bücherregale aus solchen mit ASCII-Grafik baut.
Unsere Bücher haben alle eine bequeme einheitliche Größe und sehen alle wie folgt aus:
|X|
|X|
|X|
Bei den Bücherregalen handelt es sich um einzelne Schachteln, die innen immer drei Zeichen hoch sind (genug für ein aufrecht stehendes Buch), die aus |
Zeichen links und rechts, -
Zeichen oben und unten bestehen und breit genug für X
Bücher sind (wo X
eine Eingabe erfolgt) ganze Zahl). Zum Beispiel ist hier ein Bücherregal der Größe 3
:
|---------|
| |
| |
| |
|---------|
weil man so 3
bücher hineinstecken kann
|---------|
||X||X||X||
||X||X||X||
||X||X||X||
|---------|
Die Eingabe wird aus zwei streng positiven ganzen Zahlen bestehen, X
und Y
wo X
ist die Breite der Regale, die wir haben (gemessen in Büchern), und Y
wie viele Bücher müssen wir stapeln. Wenn wir mehr Bücher haben, als in ein einzelnes Regal passen, müssen wir oben mehr Regale hinzufügen. Hier ist zum Beispiel die Eingabe 4 wide / 6 books
:
|------------|
||X||X| |
||X||X| |
||X||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Wenn Y % X > 0
, was bedeutet, dass die Anzahl der Bücher kein ganzzahliges Vielfaches der Regalgröße ist, sollten sich die restlichen Bücher ganz oben links befinden (wie im Fall von 4 6
oben) und der verbleibende Teil dieses Regals mit gefüllt sein Leerzeichen.
Eingang
- Jeweils zwei streng positive ganze Zahlen in einem beliebigen Format
>0
. - Sie können die Eingabe in beliebiger Reihenfolge vornehmen (z. B. zuerst die Größe der Regale, dann die Anzahl der Bücher oder umgekehrt). Bitte geben Sie bei Ihrer Einsendung die Eingabereihenfolge an.
- Sie können davon ausgehen, dass keine Eingabe größer ist als die Standardgröße
[int]
(oder eine entsprechende Größe) Ihrer Sprache .
Ausgabe
Die daraus resultierende ASCII-Kunstdarstellung der Bücher und Bücherregale.
Regeln
- Führende oder nachfolgende Zeilenumbrüche oder Leerzeichen sind optional, sofern die Zeichen selbst korrekt ausgerichtet sind.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Weitere Beispiele
6 wide / 2 books
|------------------|
||X||X| |
||X||X| |
||X||X| |
|------------------|
2 wide / 6 books
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
4 wide / 9 books
|------------|
||X| |
||X| |
||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Antworten:
JavaScript (ES6),
1009998 BytesNimmt die Breite
w
und die Anzahl der Bücherb
in der Currysyntax auf(w)(b)
.Formatiert und kommentiert
Testfälle
Code-Snippet anzeigen
quelle
Bash (+ Dienstprogramme),
130,108106 BytesEine einzelne, fortlaufende Shell-Pipeline zum Rendern Ihrer Bücherregale.
Änderungsprotokoll:
printf + seq
durch einenprintf
unformatierten Wert von -10 ByteGolf gespielt
Probieren Sie es online!
Wie es funktioniert
$./shelf 2 3
printf %$2s\\n
- generiere n Leerzeichen, eines pro Buch (angezeigt als_
)___
fold -$1
- um die Regallänge faltensed "s/ /|X|/g;"
- Ersetzen_
durchX
, Hinzufügen von Buchumschlägen:;/.\{$[$1*3]\}/!s/$/ /;t
- Rechter Block mit Leerzeichen (angezeigt als_
)h;s/./-/gp;x;p;p;p;x
- Verdreifachen Sie jede Zeile und fügen Sie---
davor und danach hinzu.sed 's/.*/|&|/'|tac
- Zeilen einwickeln| |
, mit tac umkehrenquelle
t
stattdessenb
brauchen Sie das nicht{}
. Sie können die überspringen,s/./-/g
da sie bereits-
s sind. Probieren Sie es online!Python 2,
133113105 BytesIch bin sicher, es gibt einen besseren Weg ...
Die Eingabe wird übernommen
width, books
-20 Bytes dank @ovs für das Erkennen einer unnötigen Lambda-Funktion!
-8 Bytes dank @ovs für die Verkürzung der Eingabe.
quelle
X,Y=input()
ist ein kürzerer Weg, um die to-Werte zu nehmen.X, Y
, oder?'|'
als Variable definieren.Batch, 261 Bytes
Benutzt meinen Trick aus meiner Batch-Antwort auf Lass uns Tennis spielen, um auf einfache Weise viele
|
Charaktere zu drucken .quelle
Haskell , 100 Bytes
x#y
Gibt den String für widthx
undy
books zurück.Probieren Sie es online!
Die Hauptfunktion / Operator ist
#
. Wennx<y
es die Bücher iny-x
undx
aufteilt, dann rekursiv. Wennx>=y
,w
undb
sind die beiden Linientypen, abzüglich die äußeren|
s und die Neue - Zeile.Der Hilfsoperator
s?n
verknüpftn
Kopien der Zeichenfolges
.quelle
PowerShell ,
149134 ByteProbieren Sie es online!
Nimmt Eingabe
$w
idth und$b
ooks. Legt fest, dass die Zeichenfolge$s
eines der horizontalen Regale ist. Dann haben wir zweiif
Aussagen.Der erste prüft, ob wir "Rest" Bücher haben. Wenn ja, geben wir das Regal, die (Anzahl der Bücher plus Anzahl der Leerzeichen)
*3
und ein anderes Regal aus.Als nächstes prüfen wir, ob noch Bücher übrig sind, nachdem die Reste entfernt wurden (
$a
). Dieselbe Art von Einrichtung, außer dass wir die$w
Anzahl der Bücher verwenden. Da zu diesem Zeitpunkt$b
garantiert ein Vielfaches von$w
(da wir den Rest entfernt haben$a
) ist, müssen wir uns keine Gedanken über Rundungen machen.Entfernt , um den
[math]::Floor()
Anruf, spart 15 BytesAlle diese Zeichenfolgen verbleiben in der Pipeline und werden
Write-Output
beim Abschluss des Programms implizit ausgeführt .quelle
CJam ,
6261 BytesÜbernimmt die Eingabe als
width books
Probieren Sie es online!
Erläuterung
quelle
Python 3, 142 Bytes
Ich arbeite immer noch daran.
b
ist für die Anzahl der Bücher undw
für die Regalbreite.quelle
R=b%w
es in die nächste Zeile verschoben wird. Sie sollten auch in der Lage sein, das Leerzeichen um diese drei=
zu entfernen , um einige Bytes zu sparen.d+3*p+d if R!=0 else ''
mitR and d+3*p+d or''
d+3*p+d
?AHK, 208 Bytes
Es gibt ein paar Dinge, die mich vom Golfspielen abhalten:
%1%
&%2%
) nicht direkt in mathematischen Funktionen verwenden, da diese die Eingabe von Variablen oder Zahlen erwarten und davon ausgehen1
, dass die Zahl die erste und nicht der Variablenname istEine leichter zu lesende Version der oben genannten sieht so aus:
Wenn a
Loop
keine Klammern verwendet{}
, ist nur die nächste Zeile Teil der Schleife. Wenn Sie den Wert einer Variablen mit:=
anstelle von=
festlegen, können Sie die Escape-Zeichen für das Prozentzeichen löschen. Tilde n ist das Newline-Zeichen.quelle
Java 7,
230224222 BytesErläuterung:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
.repeat
hilft wirklich, wirklich bei dieser Herausforderung .PowerShell, 109 Byte
Weniger Golf-Testskript:
Ausgabe:
PowerShell, 109 Byte, alternativ
quelle
Python 2 ,
120 -118 BytesProbieren Sie es online!
Habe vorgehabt, dieses in den letzten Tagen auszuprobieren. Jetzt, wo ich endlich Zeit habe, gibt es bereits eine kürzere Antwort auf Python. Na ja, gerade als Alternative gepostet.
Eingabe als Breite, Bücher
quelle
SOGL , 64 Bytes
Erklärung: Erste Funktion:
zweite Funktion:
Diese Funktion erwartet eine Zahl (Anzahl der Bücher) auf dem Stapel und gibt die Bücher des Bücherregals aus
Weiter unten angegebenes Beispiel ist e = 3 (Bücherregalbreite) und b = 8 (Buchmenge)
Dies ist die oberste / unterste Zeile des Bücherregals und bleibt immer auf dem ersten Teil des Stapels (halb leeres Bücherregal).
Erster Hauptteil
Und der letzte Teil
quelle
Java (JDK) , 124 Byte
Probieren Sie es online!
Credits
quelle
PHP> = 7.1, 138 Bytes
Online Version
quelle
Canvas , 33 Bytes
Probieren Sie es hier aus!
Erklärung (einige Zeichen wurden ersetzt, um einfarbiger auszusehen):
quelle
Pip
-n
, 45 BytesNimmt die Breite bzw. die Anzahl der Bücher als Befehlszeilenargumente. Probieren Sie es online!
Erläuterung
Wir führen eine Schleife aus, um die Regale einzeln von oben nach unten zu drucken. Bei jeder Iteration aktualisieren wir
b
(die Anzahl der zuy
druckenden Bücher) durch Subtrahieren (die Anzahl der auf dieser Iteration gedruckten Bücher). Wennb
0 erreicht wird, wird die Schleife beendet.Da dies ein wenig kompliziert ist, ist hier ein Beispiel für die erste Iteration, wenn
a = 3, b = 8
:was dann druckt als
quelle
Pyth , 56 Bytes
Akzeptiert die Regalbreite und die Anzahl der Bücher als separate Argumente in dieser Reihenfolge. Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .
quelle
Viertens (viertens) , 622 Bytes (minimiert (Kommentare, Einrückungen, Wortnamen mit einem Zeichen entfernen) auf 303 Bytes)
Mein erstes Spiel mit Forth :)
Probieren Sie es online!
Ausgabe
quelle