Hier ist die 3. ABACABA-Stadt:
_
A|_|
B|__|
A|_|_
C|___|
A|_|
B|__|
A|_|
Es besteht aus der ABACABA- Sequenz, die im Grunde genommen wie folgt lautet:
- A (1. Iteration)
- platzieren Sie B - AB
- wiederhole A - ABA (2. Iteration)
- Platzieren Sie C - ABAC
- Wiederhole ABA - ABACABA (3. Iteration)
und Sie bekommen die Idee.
Die Gebäude haben eine Höhe (entsprechend der Anzahl der Unterstriche), die den Buchstaben entspricht, die in Zahlen wie A = 1, B = 2 usw. Umgewandelt wurden
Eingang
Eine Iterationsnummer 1 <= n <= 26.
Ausgabe
Die ABACABA-Stadt der Ordnung n , einschließlich der Buchstaben am Zeilenanfang.
Antworten:
Python 2, 82 Bytes
Mir ist aufgefallen, dass niemand die binäre Rekursionsmethode veröffentlicht hat und beschlossen hat, es zu versuchen ... und jetzt ist es mit einem von Sherlock9 geliehenen Trick die kürzeste Python-Antwort! (Auch danke an xnor für eine weitere Verkürzung.) (Und dann Dennis, der eine Handvoll mehr rasiert hat ...)
Ungolfed:
quelle
s
, und indem Sie die zweite Zeile zu einer anonymen Funktion machen:f=lambda n:n*"?"and f(n-1)+"_"*(n-2)+"\n%c|%s|"%(64+n,"_"*n)+f(n-1);lambda n:" _"+f(n)
f=lambda n,s=1:n*"_"and" _"*s+f(n-1,0)+"_"*(n-2)+"\n%c|%s|"%(64+n,"_"*n)+f(n-1,0)
sollte funktionieren.Python 2, 99 Bytes
Um
i
die dritte Nummer der ABACABA-Sequenz zu finden, schreiben Siei
binär, zählen Sie die Anzahl der nachfolgenden Nullen und addieren Sie eine. Wir verwenden den klassischen Bit-Tricki&-i
, um die größte Potenz2
dieser Teilungen zu findeni
und dann die Bitlänge zu berechnen. Tatsächlich zählen wiri
von2**n-1
bis abwärts0
, was in Ordnung ist, da die ABACABA-Sequenz symmetrisch ist.Wir verfolgen sowohl die aktuelle als auch die letzte Nummer der Sequenz mit Hilfe einer "vorherigen" Variablen
b
. Dies sagt uns, wie viele Unterstriche als "Überhang" zu drucken sind. Das endgültige Gebäude wird korrekt ohne Überhang gezeichnet, da0
es als Bitlänge behandelt wird1
.Das Zeichenfolgenformat für den Druck wird von Sp3000 übernommen , ebenso wie der Trick, mit dem
input
die erste Zeile gedruckt wird.quelle
MATL , 59 Bytes
Dies verwendet die aktuelle Version (15.0.0) der Sprache.
Probieren Sie es online!
(Wenn die Buchstaben nicht in der Ausgabe enthalten sein müssten: das Folgende würde funktionieren, 48 Bytes):
Erläuterung
quelle
CJam,
3735 BytesDies ist eine iterative Implementierung des rekursiven Algorithmus aus der Antwort von @ quintopia .
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6), 162 Byte
Wo
\n
ist das wörtliche Newline-Zeichen?quelle
\n
ist am ende, wenn sich jemand wundert.Python 2,
123121 Bytesideone link (-2 bytes dank @xsot)
f
erzeugt die ABACABA-Sequenz als Liste von Zahlen, zf(3) = [1, 2, 1, 3, 1, 2, 1]
. Der Versatz der Eingabe um 1 im Vergleich zur ABACABA-Sequenzherausforderung lässt uns ein Byte nach innen spielenf
.Die erste Zeile wird separat gedruckt. Danach werden alle anderen Zeilen mit einem Ausdruck gedruckt, der die aktuelle und die nächste Nummer berücksichtigt. Nur zum Spaß wird die erste Zeile mit gedruckt
input()
.quelle
[0]
mitL
.Pyth -
6462 BytesVielleicht könnte man mehr Golf spielen, aber für den Moment gut genug.
Probieren Sie es hier aus!
Erläuterung:
quelle
Python 3.5 -
262236220 Bytes:-16 Bytes dank @CatsAreFluffy! Meine gesamte Funktion kann jetzt endlich in einer einzigen Zeile stehen! :)
Es kann ein bisschen lang sein, und es kann neue Zeilen zwischen den Gebäuden drucken, aber es tut, was es braucht. Sie können es selbst testen, um es zu bestätigen.BEARBEITEN:
Mein vorheriger Golf-Code druckte überhaupt nicht das richtige Muster. Aber jetzt tut es der oben gezeigte und meiner Meinung nach tut es gut. Sie können es auch selbst ausführen, um dies zu bestätigen.
Hinweis: Das Programm druckt alle Kleinbuchstaben hinter jedem "Gebäude". Ich hoffe das ist okay.
Ungolfed Version mit Erklärung:
Grundsätzlich importiere ich zuerst die Funktion "Geordnetes Wörterbuch" des Collections-Moduls und erstelle dann ein geordnetes Wörterbuch, wobei jeder Kleinbuchstabe in der Liste "j" dem entsprechenden Gebäude mit der entsprechenden Länge in Unterstrichen zugewiesen wird. Dann berechne ich die Sequenz basierend auf den Eingaben des Benutzers unter Verwendung der
f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
Funktion und dann basierend auf der Sequenz, die dadurch zurückgegeben wird, werden die Gebäude mit den entsprechenden Buchstaben dahinter ausgedruckt.quelle
OrderedDict
dao
stattdessen importieren ? Undop
zup
unditem
zu wechselnj
funktioniert auch.if
(alle Eingänge sind 1≤v≤26), ändernrange(26)
zurange(v)
, und verwenden Siereturn"\n".join(f(v))
statt derfor
.from collections import*
undo=OrderedDict
anstelle vonfrom collections import OrderedDict as o
range(26)
umrange(v)
in einem ErgebnisIndex Error
. Außerdem gibt doingreturn"\n".join(f(v))
will NUR die Sequenz zurück, nicht jedoch die Gebäude selbst. Davon abgesehen waren deine Tipps ziemlich gut. Vielen Dank! :)Ruby, 129 Bytes
Anonyme Funktion, gibt eine mehrzeilige Zeichenfolge zurück.
quelle
JavaScript (ES6), 143
Es gibt 2 Zeilenumbrüche in den Backticks, die signifikant und gezählt sind.
... oder 138, wenn die Buchstaben klein geschrieben werden können.
Weniger golfen
Prüfung
quelle
Powershell, 67 Bytes
quelle