Wir haben einen quadratischen 10x10 Meter großen Garten vor unserem Haus. Wir wollen Gras pflanzen und eine Terrasse bauen. Wir haben entschieden, wie der Garten aufgeteilt werden soll, aber wir haben nicht das Verhältnis zwischen Grasmenge und Terrasse festgelegt.
Wir brauchen Hilfe bei der Visualisierung, und ASCII-Kunst ist eindeutig der beste Weg, dies zu tun.
Herausforderung:
Nehmen Sie eine ganze Zahl im Einschlussbereich [0, 100] (oder optional eine Dezimalzahl [0, 1]), die angibt, wie viele Prozent des Gartens eine Terrasse sein sollen.
Ein Quadratmeter Terrasse wird durch einen Strich -
oder eine Bar dargestellt |
. Ein Quadratmeter Gras wird durch ein Rautezeichen dargestellt #
.
- Wenn der Terrassenanteil 50% oder weniger beträgt, sollte der Garten ab der linken unteren Ecke mit Balken bedeckt und vertikal und dann horizontal gefüllt werden.
- Wenn der Terrassenanteil mehr als 50% beträgt, soll der Belag umgekehrt (Striche anstelle von Balken) und in der unteren linken Ecke beginnen und horizontal und dann vertikal ausgefüllt werden.
Beispiele:
N = 25%
||########
||########
||########
||########
||########
|||#######
|||#######
|||#######
|||#######
|||#######
N = 75%
##########
##########
-----#####
----------
----------
----------
----------
----------
----------
----------
N = 47%
||||######
||||######
||||######
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
N = 50%
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
N = 51%
##########
##########
##########
##########
-#########
----------
----------
----------
----------
----------
N = 0%
##########
##########
##########
##########
##########
##########
##########
##########
##########
##########
N = 100%
----------
----------
----------
----------
----------
----------
----------
----------
----------
----------
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes. Standardregeln für E / A. Dies ist ASCII-artig, daher sollte die Ausgabe wie in den obigen Beispielen aussehen. Dh die Ausgabe ["|", "|" ...]
ist nicht OK.
Erklärungen sind wie immer erwünscht :)
Antworten:
APL (Dyalog) , 34 Bytes
Anonyme Präfixfunktion, die eine Ganzzahl im Bereich von 0 bis 100 erwartet. Nimmt an
⎕IO
( I ndex O rigin) zu sein0
, was auf vielen Systemen Standard ist.Probieren Sie es online!
{
…}
Lambda;⍵
ist Argument:'#-|[
…]
Indizieren Sie den String mit folgendem Array:50≥⍵
1, wenn 50 größer oder gleich Argument ist, sonst 0s←
Laden in s (für s Einkaufszentrum)1+
Zuwachs⍵⍴
zyklisch r eshape zu Argumente Länge100↑
Nehmen Sie die ersten hundert davon und füllen Sie sie mit Nullen10 10⍴
r eshape bis zehn Reihen und zehn Spalten⊢
ergibt das (trennt sichs
von10 10
)⍉⍣s
transponieren, wenn klein⊖
umdrehenquelle
{⊖⍉⍣c⊢10 10⍴(⍵/'-|'⊃⍨c←⍵≤50),100/'#'}
99/'#'
⍴
J ,
39, 38,37 BytesWie es funktioniert:
Probieren Sie es online!
quelle
{.
mit einem over the bounds argument ist ein netter trick.(]|.@|:_10{&'#|-'\100{.1+$)>&50
_100{.
was die Füllungen am Anfang setzt, aber dann musste ich jede Reihe umkehren, also habe ich es aufgegeben.JavaScript (ES6), 84 Byte
Übernimmt die Eingabe als Ganzzahl in [0 ... 100] .
Testfälle
Code-Snippet anzeigen
Formatiert und kommentiert
quelle
Python 2 ,
121117116 BytesProbieren Sie es online!
quelle
[i*10:-~i*10]
kann sein[i*10:][:10]
.Jelly , 23 Bytes
Probieren Sie es online!
Ändern Sie die Nummer zuvor
Ç
in der Fußzeile, um die Eingabe zu ändern. Funktioniert als monadische Verknüpfung in einem Programm ohne Befehlszeilenargumente, was zulässig ist .quelle
ȷ2
->³
)SWI-Prolog, 249 Bytes
Die Lösung ist ziemlich einfach. Prozedur
a
erstellt Zeilen,l
schreibt Zeichen in Spalten in einer Zeile undr
entscheidet, welches Zeichen ausgedruckt werden soll.quelle
G<51
sollte funktionieren stattG<=50
.MATL , 26 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Python 2 , 85 Bytes
Probieren Sie es online!
In beiden Fällen ist jede Zeile rechts mit
#
der Länge 10 aufgefüllt , sodass wir diesen Code zwischen den beiden Fällen teilen können. Die Zahl 10 wurde oft genug verwendet, um durch AliasingT=10
eine anständige Anzahl von Bytes einzusparen.quelle
51
und danach fehlt eine Zeile.Ruby ,
9282 BytesProbieren Sie es online!
Wie es funktioniert:
Jede Zelle im Raster hat eine fortlaufende Nummer, die links unten beginnt und je nach dem Wert von n horizontal oder vertikal verläuft:
Wenn ja
n>50
, ist die Nummer100-y*10+x
andersx*10+9-y
quelle
Holzkohle , 25 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Schale , 24 Bytes
Probieren Sie es online!
Erläuterung
quelle
SOGL V0.12 , 21 Bytes
Probieren Sie es hier aus!
Erläuterung:
quelle
dc ,
210197 bytesProbieren Sie es online!
quelle
APL (Dyalog Classic) , 33 Byte
Probieren Sie es online!
beyogen auf Adáms Antwort
⎕d
ist die Zeichenfolge'0123456789'
∘.,
kartesisches Produkt⍨
mit sich selbst⍎¨
bewerte jedes - erhalte eine 10x10 Matrix von 0..99⍵>
Boolesche Matrix für wo das Argument⍵
größer ist⊢
fungiert als Trennzeichen(⍉+⍨)⍣(⍵≤50)
wenn ⍵≤50 die Matrix (+
mit sich selbst) verdoppeln und transponieren (⍉
)⊖
vertikale Umkehrung'#-|'[ ]
Indizieren Sie die Zeichenfolge'#-|'
mit jedem Element der Matrixquelle
q , 51 Bytes
quelle
Retina ,
7262 BytesProbieren Sie es online! Link enthält Testfälle. Bearbeiten: 10 Bytes mit Hilfe von @MartinEnder gespeichert. Erläuterung:
Wiederholen Sie
|
die angegebene Anzahl von MalenWenn die Eingabe jedoch mindestens 51 war, ändern Sie sie in
-
s.100
#
s anhängen .Teilen Sie sich in 10 Gruppen zu je 10 auf und werfen Sie alles weg, was übrig bleibt.
Wenn die Eingabe mindestens 51 war, transponieren Sie das Ergebnis.
Sortieren Sie das Ergebnis.
Alternative Lösung, auch 62 Bytes:
Das Sortieren vor dem Transponieren ermöglicht eine Byte-Einsparung unter der Bedingung für das Transponieren, kostet jedoch ein Byte, um das Ergebnis in der richtigen Reihenfolge zu erhalten.
quelle
#
auf der erstenO
Etappe nicht, da$.%`
wird es höchstens sein9
. Sie können auch durch die Vermeidung der Schleife auf Kosten einer anderen Sortierstufe am Ende, wie dies einige Byte speichern: tio.run/##K0otycxL/... Wahrscheinlich gibt es sogar einen kürzeren Weg , um das Ergebnis dieser neu zu ordnenM
Stufe in die endgültige Form .O
Bühne direkt nach derM
Bühne verschieben, so dass Sie weiterhin einen Lookahead anstelle eines Lookbehinds verwenden können.Python 2 ,
106103 BytesProbieren Sie es online!
quelle
PHP, 119 + 1 Bytes
Laufen Sie als Pipe mit
-nR
oder probieren Sie es online aus .quelle
Gelee , 24 Bytes
Probieren Sie es online!
Wie es funktioniert
Ich verwende zu viele hochgestellte Zeichen ...
quelle
R , 102 Bytes
Probieren Sie es online!
Liest
n
von stdin und druckt den Garten nach stdout.Erläuterung:
quelle