Jedes reguläre Sechseck kann mit Diamanten gekachelt werden, zum Beispiel so:
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Wir werden das Obige als Kacheln von Größe betrachten 1
(da die Seiten der Diamanten aus einem /
oder \
jedem bestehen). Die gleiche Kachelgröße 2
würde folgendermaßen aussehen:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Ihre Aufgabe ist es, eine solche ASCII-Grafikkachel (mit der Größe 1
) als Eingabe zusammen mit einer positiven Ganzzahl N
(in Dezimal- oder Unärzahl) zu erhalten, die die Größe der gewünschten Ausgabe angibt. Sie sollten dann eine vergrößerte Version derselben Kachel ausgeben.
Beachten Sie, dass das Sechseck beliebig groß und so klein wie 1x1x1 sein kann (mit drei Diamanten).
Weder Eingabe noch Ausgabe dürfen nachgestellte Leerzeichen oder mehr führende Leerzeichen enthalten, als zum Ausrichten der Sechseckform erforderlich sind. Sowohl Eingabe als auch Ausgabe können optional eine einzelne nachgestellte Zeile enthalten (diese Auswahl muss für Eingabe und Ausgabe nicht identisch sein).
Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Beispiel Tilings
Hier finden Sie eine Handvoll Eingabefelder, mit denen Sie Ihre Einreichung testen können.
__
/_/\
\_\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
Das folgende Snippet enthält die entsprechenden Ausgaben für Eingaben N = 1
bis N = 6
.
__
/_/\
\_\/
____
/ /\
/___/ \
\ \ /
\___\/
______
/ /\
/ / \
/_____/ \
\ \ /
\ \ /
\_____\/
________
/ /\
/ / \
/ / \
/_______/ \
\ \ /
\ \ /
\ \ /
\_______\/
__________
/ /\
/ / \
/ / \
/ / \
/_________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\_________\/
____________
/ /\
/ / \
/ / \
/ / \
/ / \
/___________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\ \ /
\___________\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
________
/ /\ \
/___/ \___\
/\ \ / /\
/ \___\/___/ \
\ / /\ \ /
\/___/ \___\/
\ \ / /
\___\/___/
____________
/ /\ \
/ / \ \
/_____/ \_____\
/\ \ / /\
/ \ \ / / \
/ \_____\/_____/ \
\ / /\ \ /
\ / / \ \ /
\/_____/ \_____\/
\ \ / /
\ \ / /
\_____\/_____/
________________
/ /\ \
/ / \ \
/ / \ \
/_______/ \_______\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \_______\/_______/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\/_______/ \_______\/
\ \ / /
\ \ / /
\ \ / /
\_______\/_______/
____________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/_________/ \_________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \_________\/_________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/_________/ \_________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\_________\/_________/
________________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/ / \ \
/___________/ \___________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \___________\/___________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/___________/ \___________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\___________\/___________/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
__________________
/ / /\ \
/ / / \ \
/_____/_____/ \_____\
/ /\ \ /\ \
/ / \ \ / \ \
/_____/ \_____\/ \_____\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \_____\/_____/ \/_____/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\/_____/ \_____\/_____/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\_____\/_____/ \_____\/
\ \ \ / /
\ \ \ / /
\_____\_____\/_____/
________________________
/ / /\ \
/ / / \ \
/ / / \ \
/_______/_______/ \_______\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/_______/ \_______\/ \_______\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_______\/_______/ \/_______/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_______/ \_______\/_______/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_______\/_______/ \_______\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_______\_______\/_______/
______________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/_________/_________/ \_________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/_________/ \_________\/ \_________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_________\/_________/ \/_________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_________/ \_________\/_________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_________\/_________/ \_________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_________\_________\/_________/
____________________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/ / / \ \
/___________/___________/ \___________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/___________/ \___________\/ \___________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \___________\/___________/ \/___________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/___________/ \___________\/___________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\___________\/___________/ \___________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\___________\___________\/___________/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
________________
/ /\ \ \ \
/___/ \___\___\___\
/\ \ /\ \ \ \
/ \___\/ \___\___\___\
/\ / /\ / / /\ \
/ \/___/ \/___/___/ \___\
/\ /\ \ / / /\ /\ \
/ \/ \___\/___/___/ \/ \___\
\ /\ / /\ \ \ /\ / /
\/ \/___/ \___\___\/ \/___/
\ /\ \ / /\ \ / /
\/ \___\/___/ \___\/___/
\ /\ \ \ / / /
\/ \___\___\/___/___/
\ / / / / /
\/___/___/___/___/
________________________
/ /\ \ \ \
/ / \ \ \ \
/_____/ \_____\_____\_____\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \_____\/ \_____\_____\_____\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \/_____/ \/_____/_____/ \_____\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \/ \_____\/_____/_____/ \/ \_____\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\/ \/_____/ \_____\_____\/ \/_____/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\/ \_____\/_____/ \_____\/_____/
\ /\ \ \ / / /
\ / \ \ \ / / /
\/ \_____\_____\/_____/_____/
\ / / / / /
\ / / / / /
\/_____/_____/_____/_____/
________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_______/ \_______\_______\_______\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_______\/ \_______\_______\_______\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_______/ \/_______/_______/ \_______\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_______\/_______/_______/ \/ \_______\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_______/ \_______\_______\/ \/_______/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_______\/_______/ \_______\/_______/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_______\_______\/_______/_______/
\ / / / / /
\ / / / / /
\ / / / / /
\/_______/_______/_______/_______/
________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_________/ \_________\_________\_________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_________\/ \_________\_________\_________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_________/ \/_________/_________/ \_________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_________\/_________/_________/ \/ \_________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_________/ \_________\_________\/ \/_________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_________\/_________/ \_________\/_________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_________\_________\/_________/_________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/_________/_________/_________/_________/
________________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/___________/ \___________\___________\___________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \___________\/ \___________\___________\___________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/___________/ \/___________/___________/ \___________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \___________\/___________/___________/ \/ \___________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/___________/ \___________\___________\/ \/___________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \___________\/___________/ \___________\/___________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \___________\___________\/___________/___________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/___________/___________/___________/___________/
N-1
führende Leerzeilen. :(Antworten:
CJam,
85797672 BytesDie Größe sollte in der ersten Zeile stehen. Und der Diamant folgt.
Nicht sehr gut golfen ... Und die Hälfte der Charaktere kam aus den Details.
Erläuterungen (der Vorgängerversion)
quelle
Python 2, 164
Ausgabe auf Testfällen.
Also, was ist hier los?
Die Hauptidee ist, dass jedes Zeichen im Original in einen
n*n
Block gesprengt wird. Zum Beispiel könnte für n = 4/
werdenDas Originalzeichen wird in jeder Zeile einmal angezeigt, und zu beiden Seiten ist ein Abstand vorhanden. Hier ist es
auf der linken Seite, und
und
_
auf der rechten Seite . Es kann nur die unterste Reihe mit aufgefüllt werden'_'
. der rest ist immer' '
.Die Hauptschwierigkeit besteht darin, dass die Polsterung rechts vom kommenden Symbol abhängen kann. Speziell
'/ '
hat eine andere Polsterung als'/_'
, so dass wir eine Vorausschau benötigen würden. Um Leerzeichen zu vermeiden, müssen wir außerdem darauf achten, dass wir am letzten Symbol stehen und nicht rechts auffüllen.Wir überwinden beide Probleme, indem wir nur links vom aktuellen Zeichen auffüllen. Wenn wir dies tun, führen wir auch das Auffüllen nach rechts vom vorherigen Zeichen unter Verwendung des aktuellen Auffüllsymbols durch. Wir drucken also den vom vorherigen Zeichen geschuldeten rechten Abstand, den linken Abstand vom aktuellen Zeichen und dann den aktuellen Zeichen. Wir speichern auch den Betrag der Auffüllung "Schulden", die der nächste Char bezahlen muss.
Lassen Sie uns nun den Code durchgehen.
Die Eingabezeichenfolge ist
s
und der Skalierungsfaktor istn
. Wir gehen zeilenweise vor und druckenn
Zeilen für jede EingabezeileW
, wobei die Kopien indiziert werdenj=n,n-1,...,2,1
. Die erste Zeile wird nur einmal kopiert, was wir erreichen, indem wir siej
auf 1 initialisieren , aber inn
jede Schleife ändern .Wir durchlaufen die Eingabezeile und akkumulieren die zu druckende Zeile
O
. Zunächst ermitteln wir das entsprechende Füllzeichen. Diesq
ist ein Unterstrich, wenn wir uns in der unteren Zeile befinden und entweder das aktuelle oder das vorherige Zeichen ein Unterstrich und ansonsten ein Leerzeichen ist.Dann entscheiden wir, wie viel Polster links eingefügt werden soll (
e
). Denn/
es istj-1
(mit abnehmender Zeilenkopienzahl abnehmend) und das Komplementären-j
für\
. Wir behandeln andere Charaktere genauso. Obwohl es so_
aussieht, als gäbe es eine Reihe vonn
Unterstrichen, gibt es tatsächlich einen einzelnen Unterstrich, der links und rechts mit Unterstrichen aufgefüllt ist. Dies scheint ineffizient, aber es lässt uns mit arbeitet_
undim gleichen Rahmen wie
/
und\
Die Position des „zentralen“ Strich spielt keine Rolle, so dass wir eben damit abfinden müssen undmit
\
; Durch diese Wahl funktioniert die obere Reihe auch ohne Spezialgehäuse.Als nächstes ergänzen wir die Ausgabezeichenfolge. Wir haben das Auffüllsymbol
q
und den aktuellen Auffüllbetrag herausgefundene
, müssen uns aber auch die Auffüllschuldend
aus dem vorherigen Symbol merken . Also fügen wir hinzuq*(e+d)
. Dann fügen wir das aktuelle Symbol hinzuc
, außer wir müssen Unterstriche in einer nicht-unteren Zeile vermeiden, die wir durch Konvertieren von Unterstrichen in das Füllsymbol beheben.Schließlich erfassen wir den Auffüllungsbetrag, der das Komplement
n+~d
des aktuellen Auffüllungsbetrags darstellt. Wir zeichnen auch das aktuelle Symbol in aufp
, damit wir später wissen, ob das vorherige Symbol war_
.quelle
JavaScript ( ES6 ) 274
281 289 338quelle
Python 2,
2172111951941906 Bytes dank Sp3000.
Rufen Sie
m
mit dem ersten Argument die Raute als Zeichenfolge und dem zweiten Argument die Wiederholungszahl auf.Dies basiert auf einer 3-stufigen String-Ersetzungssequenz:
/\
mit/ \
, wobei die Anzahl der dazwischen liegenden Leerzeichen zwischen 2 und 2 * (n-1) über den Zeilen liegt.\/
durch\ /
, wobei die Anzahl der dazwischenliegenden Leerzeichen zwischen 2 * (n-1) und 2 über den Zeilen liegt.Dann gibt es eine Vielzahl von Mucking, um die führenden Leerzeichen richtig zu machen und die erste Zeile richtig zu machen.
Beachten Sie, dass die letzte Zeile des Programms ein Tabulator sein sollte, nicht 4 Leerzeichen. Markdown unterstützt keine Tabs.
quelle
(i+(n-i+~i)*(d[-1]>f)) --> [i,n+~i][d[-1]>f]
und Sie verwenden nur einen'_'
, also verschwenden Sie ein Byte, das ihn definiert.Python,
272238228243 BytesDie aktualisierte Version verwendet jetzt eine einzelne Zeichenfolge als Eingabe anstelle einer Zeichenfolgenfolge. Entfernt auch nachfolgende Leerzeichen, die in früheren Versionen vorhanden waren. Leider vergrößern diese Änderungen die Größe.
Version mit Leerzeichen und Anweisungen, die zur besseren Lesbarkeit in kleinere Einheiten unterteilt sind:
Der grundlegende Ansatz ist hier:
N
und generieren Sie in jeder Schleifeniteration eine Ausgabezeile. Es gibt einen Sonderfall für die erste Zeile, in der nur die letzte Ausgabezeile generiert wird, um zu vermeiden, dass zu Beginn der Ausgabe Leerzeilen generiert werden.N
Zeichen, wobei:N
Leerzeichen ersetzt.N
für die erstenN -1
Schleifeniterationen durch Leerzeichen undN
für die letzten Schleifeniterationen durch Unterstriche ersetzt .N - 1
Leerzeichen oder Unterstrichen aufgefüllt .Der schwierigste Teil hier ist, dass die Auffüllung für Schrägstriche / Backslashes Leerzeichen oder Unterstriche verwendet, abhängig vom nächsten (für Schrägstriche) oder vorherigen (für Backslashes) Eingabezeichen. Das schien nicht gut zur Strategie der Saitensubstitution zu passen.
Was ich getan habe, um dies zu beheben, ist, dass ich zuerst bestimmte zwei Zeichenkombinationen durch verschiedene Zeichen ersetze, damit ich sie während der tatsächlichen Ersetzung unterschiedlich behandeln kann. Beispielsweise
/_
wird ersetzt durch(_
. Danach(
folgt effektiv ein "Schrägstrich gefolgt von einem Unterstrich", der dann entsprechend ersetzt werden kann.Hauptprogramm zum Testen der Funktion:
quelle
n-1-k
istn+~k
.rstrip()
9 weitere Zeichen hinzufügen . Ich hoffe, ich kann es besser machen und habe auch einen Weg gefunden, 5 Zeichen auszuschneiden.sys.stdin
ist kein zulässiger Eingabeparameter - Sie müssen die Zeichenfolge selbst bearbeiten.sys.stdin
und ,int(sys.argv[1])
aber sie sind nicht gonna sie kostenlos von ihnen zu erwarten, in als Variablen übergeben werden (wenn das faire Spiel war, dann könnte man auch Aliase erwarten fürrange
und replace` und was Sie sonst noch brauchen , um vordefinieren) .stdin
und eine Liste von Zeichenfolgen Zeichenfolgenfolgen sind.Perl, 132
Kombinierter STDIN- und ARGV-Eingang. Beispiel:
quelle
Ruby 236
237Online-Test: http://ideone.com/e6XakQ
Dies ist der Code vor dem Golfen:
quelle