Schreiben Sie ein Programm (oder eine Funktion), das / die eine positive Ganzzahl aufnimmt.
Wenn die Eingabe lautet 1
, drucken (oder zurückgeben) Sie zwei nebeneinander liegende Diamanten mit einer Seitenlänge von jeweils 1 Schrägstrich:
/\/\
\/\/
N
Sehen Sie sich für jeden Eingang, der größer als 1 ist, den Ausgang für N-1
jedes Paar benachbarter Diamanten an und fügen Sie einen neuen Diamanten dazwischen ein, dessen Seitenlänge die Summe der Seitenlängen der beiden Nachbarn ist. Drucken Sie dieses neue Rautenmuster aus (oder senden Sie es zurück).
Wenn 2
also eingegeben wird, schauen wir auf die Ausgabe 1
und können sehen, dass es zwei benachbarte Diamanten gibt, beide mit der Seitenlänge 1. Also fügen wir eine Seitenlänge von 2 (1 + 1) Diamanten dazwischen ein:
/\
/\/ \/\
\/\ /\/
\/
Als Eingabe betrachten 3
wir die Ausgabe nach 2
und addieren zwei Diamanten mit der Seitenlänge 3 (1 + 2 und 2 + 1) zwischen die beiden Paare benachbarter Diamanten:
/\ /\
/ \ /\ / \
/\/ \/ \/ \/\
\/\ /\ /\ /\/
\ / \/ \ /
\/ \/
Wenn Sie das Muster fortsetzen, 4
lautet die Ausgabe für :
/\ /\
/\ / \ / \ /\
/ \ /\ / \ / \ /\ / \
/ \ / \ / \ /\ / \ / \ / \
/\/ \/ \/ \/ \/ \/ \/ \/\
\/\ /\ /\ /\ /\ /\ /\ /\/
\ / \ / \ / \/ \ / \ / \ /
\ / \/ \ / \ / \/ \ /
\/ \ / \ / \/
\/ \/
Und so weiter.
Ihre Ausgaben können Leerzeichen in beliebigen Zeilen enthalten, jedoch nur bis zu einer nachgestellten Zeile (und keine führenden Zeilen).
Der kürzeste Code in Bytes gewinnt.
Antworten:
Pyth,
5049 BytesDemonstration
Erläuterung:
quelle
u.iGsM.:G2tQjT9
in meiner (Teil-) Lösung. Ich habe deine Antwort nie angeschaut ...Common Lisp, 425
Beispiel
Ungolfed
quelle
CJam,
595857 BytesVielen Dank an @ MartinBüttner für das Golfen ab 1 Byte.
Probieren Sie es online im CJam-Interpreter aus .
Idee
Für Eingabe 3 erzeugen wir zum Beispiel
durch Drehen der Saite
\
und Ersetzen einiger Backslashes durch Slashes.Dann zippen wir das resultierende Array (transponieren Sie Zeilen und Spalten), um die untere Hälfte der gewünschten Ausgabe zu erhalten.
Die obere Hälfte entspricht Byte für Byte der unteren Hälfte in umgekehrter Reihenfolge.
Code
quelle
Rev 1: Ruby 170
Neue Methode, die das Erzeugen des großen Diamanten und das Reduzieren vermeidet.
Rev. 0: Ruby, 187
Die Größen der Diamanten werden gemäß der Wiederholungsrelation von https://oeis.org/A002487 berechnet. Daher erstellen wir das Array,
a
das alle Elemente für alle Zeilen von 1 bis enthältn
. Wir interessieren uns nur für die letzten1<<n-1
Elemente (Ruby ermöglicht es uns, sie mit negativen Indizes aus dem Array abzurufen, wobei -1 das letzte Element im Array ist) sowie ein Inital1
von Position 0.Zeile für Zeile und Diamant für Diamant zeichnen wir die Zeichenreihe für den größten Diamanten und schneiden dann die mittleren Spalten aus, um die Zeile für den gewünschten Diamanten zu erhalten. Rev 1 ist kürzer, aber ich mochte diese Methode.
Modulare Arithmetik wird zum Umbrechen verwendet, sodass derselbe Ausdruck alle
/
direkt und ebenso ein Ausdruck alle\
direkt hinzufügt .Ungolfed im Testprogramm
quelle