Bei dieser Herausforderung geht es darum, die Abacaba-Sequenz einer bestimmten Tiefe zu drucken.
Hier ist ein Diagramm der ersten 5 Sequenzen ( a(N)
ist die Abacaba-Sequenz der Tiefe N, Groß- / Kleinschreibung soll nur das Muster zeigen, dies wird in der Ausgabe Ihres Programms nicht benötigt):
a(0) = A
a(1) = aBa
a(2) = abaCaba
a(3) = abacabaDabacaba
a(4) = abacabadabacabaEabacabadabacaba
...
a(25) = abacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaiabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabajabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaia...
Wie Sie wahrscheinlich feststellen können, ist die n-te Abacaba-Sequenz die letzte mit dem n-ten Buchstaben und dem dazugefügten Buchstaben. ( a(n) = a(n - 1) + letter(n) + a(n - 1)
)
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die eine Ganzzahl annimmt und die Abacaba-Sequenz dieser Tiefe ausgibt. Die Ausgabe muss mindestens für Werte bis einschließlich 15 korrekt sein.
Antworten:
Pyth, 11 Bytes
Einfache Reduktion.
quelle
0
sollte die leere Sequenz IMO sein, aber ich werde der Frage entsprechen ...rev-doc.txt
neben dieser Antwort und es sollte sich als einfach erweisen .Python, 44 Bytes
Sieht verdächtig aus, als könnte man Golf spielen.
quelle
Haskell,
3937 BytesAnwendungsbeispiel:
a 3
->"abacabadabacaba"
.Edit: @Angs hat zwei Bytes zum Speichern gefunden. Vielen Dank!
quelle
a n=a(n-1)++[97+n]++a(n-1)
funktionieren Kann jetzt nicht testen.[97+n]
ist eine Liste vonInteger
unda(n-1)
ist eine Liste vonChar
(akaString
). Sie können Listen nicht mit unterschiedlichen Typen verketten.toEnum
macht einChar
aus demInteger
.['a'..]!!n
ist 2 Bytes kürzer alstoEnum(97+n)
Pyth,
1413 BytesDanke an Jakube für das Speichern eines Bytes!
Eine Lösung mit 14 Bytes
VhQ=ks[k@GNk;k
.Erläuterung:
Probieren Sie es hier aus !
quelle
V
Leitung sein?hQ
ist nureval(input) + 1
=k
zu=
. Pyth weist das Ergebnis automatisch zuk
, da diesk
die erste Variable im Ausdruck ist+k+@GNk
.Vt^2Q=+k@Gx_.BhN`1)k
(In diesem Fall werden die ersten 2 ^ Q-1 Zeichen angegeben, wie es die Herausforderung erfordert, aber Sie können sehen wie man das ändert.)Retina ,
3732 BytesDer Zeilenvorschub am Ende ist signifikant. Die Eingabe erfolgt unär .
Probieren Sie es online!
quelle
Brainfuck, 157 Bytes
Die Eingabe erfolgt binär.
Die Grundidee ist, die aktuelle Sequenz (beginnend mit "a") wiederholt zu duplizieren und das letzte Element nach jeder Iteration zu erhöhen:
a → aa → ab
ab → abab → abac
abac → abacabac → abacabac
...
Wenn dies alles die angegebene Anzahl von Malen durchgeführt wurde, wird das Ergebnis ohne das letzte Element gedruckt.
Ausführliche Erklärung
Der Speicher ist folgendermaßen angeordnet:
Countdown enthält die Anzahl der Kopierzyklen, die noch ausgeführt werden müssen. Die ABACABA-Sequenz wird in benachbarten Blöcken gespeichert, die jeweils aus 3 Zellen bestehen. Der Wert enthält das Zeichen des Elements (dh "A", "B", "C" ...). Das Flag Kopieren gibt an, ob das entsprechende Element innerhalb des aktuellen Kopierzyklus kopiert werden muss (0 = Kopieren, 1 = Nicht kopieren). Das End- Flag wird für das letzte Element, während es kopiert wird, auf 0 gesetzt (in allen anderen Fällen ist es 1).
Nun zum aktuellen (leicht ungolften) Programm:
quelle
Haskell, 36 bytes
Try it online!
This uses a different recursive method from most of the other answers. To get the next string in the sequence, we don't join two copies in the previous string with a new letter in between, but instead increment every letter and intersperse
a
's.quelle
bcb
instead ofcbc
?05AB1E, 12 bytes (non-competitive)
Code:
I'll be damned. I fixed a lot of bugs thanks to this challenge haha.
Explanation:
quelle
JavaScript (ES6),
4342 bytesA byte saved thanks to @Neil!
Yet another simple recursive solution...
quelle
(n+11).toString(36)
saves you 1 byte, and works for up to a(25)!CJam (14 bytes)
Online demo
quelle
Ruby (1.9 and up), 38 bytes
?a
is a golfier way to write"a"
but looks weird when mixed with ternary?:
quelle
R, 48 bytes
Try it online!
Simple recursion.
quelle
paste0
is equivalent topaste
withsep=""
, so you avoid the spaces between letters thatpaste
would add by default.C#, 59 bytes
Just another C# solution...
quelle
Perl, 33 bytes
No real need for un-golfing. Builds the string up by iteratively appending the next character in sequence plus the reverse of the string so far, using the ASCII value of 'a' as its starting point. Uses
$\
to save a few strokes, but that's about as tricky as it gets.Works for
a(0)
througha(25)
and even beyond. Although you get into extended ASCII aftera(29)
, you'll run out of memory long before you run out of character codes:a(25)
is ~64MiB.a(29)
is ~1GiB.To store the result of
a(255)
(untested!), one would need 2^256 - 1 = 1.15x10^77 bytes, or roughly 1.15x10^65 1-terabyte drives.quelle
Java 7, 158 bytes
I like to lurk around PPCG and I would enjoy being able to vote/comment on other answers.
Input is given as program parameters. This follows the same format as many other answers here in that it's a straight forward recursive implementation. I would have commented on the other answer but I don't have the rep to comment yet. It's also slightly different in that the recursive call is done twice rather than building a string and passing it along.
quelle
Mathematica,
3632 bytesHave you ever watched TWOW 11B?
quelle
"",
and then you can use infix notation forFold
.<>
s, and #2 only works for binary functions.Python,
62544645 bytesI would like to think that this code can still be golfed down somehow.
Edit: Bug fix thanks to Lynn. -1 byte thanks to squid.
Try it online!
quelle
Mathematica, 46 bytes
Simple recursive function. Another solution:
quelle
K5, 18 bytes
Repeatedly apply a function to a carried value (
"A"
) and each element of a sequence. The sequence is the alphabetic characters from B up to some number N (`c$66+!
). The function joins the left argument on either side of the right argument ({x,y,x}
).In action:
quelle
JavaScript,
65571 bytesDemo:
1 - thanks Neil for saving 8 bytes
quelle
(i+11).toString(36)
saves you 6 bytes.s="a";
to before thefor
then it becomes the default return value and you can drop the trailing;s
for another 2 byte saving.i
inline and dropping the increment in the for loop. So...for(i=0;i<n;)s+=(i+++11)...
Japt,
2017 bytesTest it online!
How it works
Non-competing version, 14 bytes
The
ô
function is likeo
, but creates the range[X..X+Y]
instead of[X..Y)
. Test it online!I much prefer changing the 97 to 94, in which case the output for
5
looks like so:quelle
Java, 219 bytes
My first code golf attempt. Probably can be golf'd further, but I'm hungry and going out to lunch.
Ungolfed:
Pretty straightforward brute force recursive algorithm, uses
char
manipulation.quelle
public
keyword froma
andaddLetter
/j
.MATL, 14 bytes
This uses version 8.0.0 of the language/compiler, which is earlier than the challenge.
Example
Explanation
The secuence is created first with numbers
0
,1
,2
, ... These are converted to letters'a'
,'b'
,'c'
at the end.Edit
Try it online!
quelle
Powershell,
53,46,44,41 BytesPasting into console will generate erronous output on the second run since
$d
is not re-initialized.Save 2 bytes by using += Save 3 bytes thanks to @TimmyD
quelle
(
,)
.Gaia, 14 bytes
Try it online!
quelle
PowerShell, 54 bytes
Try it online!
quelle
Japt, 8 bytes
Try it
quelle
Husk, 12 bytes
Try it online!
Uses 1-based indexing, which I hope is OK.
Explanation
quelle
APL(NARS), 24 chars, 48 bytes
test:
quelle
PHP
-r
, 43 bytesregister_argc_argv
must be enabled for this to work.Try it online!
PHP, 51 bytes
An anonymous function that prints the output directly.
Try it online!
quelle