Wyzwanie polega na wydrukowaniu sekwencji abacaba na określonej głębokości.
Oto schemat pierwszych 5 sekwencji ( a(N)
jest to sekwencja abacaba głębokości N, wielkie / małe litery służą tylko do pokazania wzoru, nie jest to potrzebne w danych wyjściowych programu):
a(0) = A
a(1) = aBa
a(2) = abaCaba
a(3) = abacabaDabacaba
a(4) = abacabadabacabaEabacabadabacaba
...
a(25) = abacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaiabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabajabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaia...
Jak zapewne można stwierdzić, n-ta sekwencja abacaba jest ostatnią z n-tą literą i sama do niej została dodana. ( a(n) = a(n - 1) + letter(n) + a(n - 1)
)
Twoim zadaniem jest stworzenie programu lub funkcji, która przyjmuje liczbę całkowitą i wypisuje sekwencję abacaba na tej głębokości. Dane wyjściowe muszą być poprawne przynajmniej dla wartości do 15 włącznie.
Odpowiedzi:
Pyth, 11 bajtów
Prosta redukcja.
źródło
0
powinna być pusta sekwencja IMO, ale dostosuję się do pytania ...rev-doc.txt
obok tej odpowiedzi i powinien on łatwo okazać się prosty.Python, 44 bajty
Wygląda podejrzanie na golfa.
źródło
Haskell,
3937 bajtówPrzykład użycia:
a 3
->"abacabadabacaba"
.Edycja: @Angs znalazł dwa bajty do zapisania. Dzięki!
źródło
a n=a(n-1)++[97+n]++a(n-1)
działałoby? Nie mogę teraz przetestować.[97+n]
jest listąInteger
ia(n-1)
jest listąChar
(akaString
). Nie można łączyć list z różnymi typami.toEnum
robiChar
zInteger
.['a'..]!!n
jest o 2 bajty krótszy niżtoEnum(97+n)
Pyth,
1413 bajtówDzięki Jakube za uratowanie bajtu!
Roztwór z 14 bajtów:
VhQ=ks[k@GNk;k
.Wyjaśnienie:
Wypróbuj tutaj !
źródło
V
linii?hQ
jest po prostueval(input) + 1
=k
do=
. Pyth automatycznie przypisze wynikk
, ponieważk
jest to pierwsza zmienna w wyrażeniu+k+@GNk
.Vt^2Q=+k@Gx_.BhN`1)k
(W tym przypadku jest ustawione, aby dać pierwsze 2 ^ Q-1 znaków, jak wymaga wyzwanie, ale widać jak to zmienić.)Siatkówka ,
3732 bajtówKońcowe podawanie linii jest znaczące. Wejście zostanie podjęta w jednoskładnikowa .
Wypróbuj online!
źródło
Brainfuck, 157 bajtów
Dane wejściowe są podawane w postaci binarnej.
Podstawową ideą jest wielokrotne powielanie bieżącej sekwencji (zaczynając od „a”) i zwiększanie ostatniego elementu po każdej iteracji:
a → aa → ab
ab → abab → abac
abac → abacabac → abacabac
...
Gdy wszystko to zostanie wykonane określoną ilość razy, wynik zostanie wydrukowany z wyłączeniem ostatniego elementu.
Szczegółowe wyjaśnienie
Pamięć jest uporządkowana w następujący sposób:
Odliczanie przechowuje liczbę cykli kopiowania, które należy jeszcze wykonać. Sekwencja ABACABA jest przechowywana w sąsiednich blokach, z których każdy składa się z 3 komórek. Wartość zawiera znak elementu (tj. „A”, „B”, „C” ...). Kopiowanie Flaga wskazuje, czy odpowiedni element musi być kopiowane w ramach obecnego cyklu kopiowania (0 = kopiowanie, 1 = nie). Koniec flaga jest ustawiona na 0 dla ostatniego elementu, gdy jest kopiowany (jest to 1 we wszystkich innych przypadkach).
Teraz do faktycznego (nieco nie golfowego) programu:
źródło
Haskell , 36 bajtów
Wypróbuj online!
Wykorzystuje inną metodę rekurencyjną niż większość innych odpowiedzi. Aby uzyskać następny ciąg w sekwencji, nie łączymy dwóch kopii w poprzednim ciągu z nową literą pomiędzy, ale zamiast tego zwiększamy każdą literę i między literami
a
.źródło
bcb
zamiastcbc
?05AB1E , 12 bajtów (niekonkurencyjny)
Kod:
Niech mnie diabli. Naprawiłem wiele błędów dzięki temu wyzwaniu haha.
Wyjaśnienie:
źródło
JavaScript (ES6),
4342 bajtyZapisany bajt dzięki @Neil !
Kolejne proste rozwiązanie rekurencyjne ...
źródło
(n+11).toString(36)
oszczędza 1 bajt i działa do (25)!CJam (14 bajtów)
Demo online
źródło
Ruby (1.9 i nowsze), 38 bajtów
?a
jest bardziej golfistycznym sposobem pisania,"a"
ale wygląda dziwnie po zmieszaniu z trójskładnikiem?:
źródło
R , 48 bajtów
Wypróbuj online!
Prosta rekurencja.
źródło
paste0
jest równoważnepaste
zsep=""
, więc unikaj spacji między literami, którepaste
byłyby dodawane domyślnie.C #, 59 bajtów
Po prostu kolejne rozwiązanie C # ...
źródło
Perl, 33 bajty
Nie ma prawdziwej potrzeby odblokowywania gry w golfa. Buduje ciąg, iteracyjnie dodając kolejny znak w sekwencji plus odwrotność łańcucha do tej pory, używając wartości ASCII „a” jako punktu początkowego. Używa,
$\
aby zaoszczędzić kilka pociągnięć, ale jest to tak trudne, jak to możliwe.Działa na
a(0)
wskroś,a(25)
a nawet dalej. Chociaż później dostajesz się do rozszerzonego ASCIIa(29)
, zabraknie pamięci na długo przed wyczerpaniem się kodów znaków:a(25)
wynosi ~ 64MiB.a(29)
wynosi ~ 1GiB.Aby zapisać wynik
a(255)
(nieprzetestowany!), Potrzebne byłyby 2 ^ 256 - 1 = 1,15x10 ^ 77 bajtów lub około 1,15x10 ^ 65 1-terabajtowych dysków.źródło
Java 7, 158 bajtów
Lubię czaić się przy PPCG i cieszę się, że mogę głosować / komentować inne odpowiedzi.
Dane wejściowe są podawane jako parametry programu. Ma to ten sam format, co wiele innych odpowiedzi tutaj, ponieważ jest to prosta rekurencyjna implementacja. Skomentowałbym inną odpowiedź, ale nie mam jeszcze przedstawiciela, który mógłby to skomentować. Różni się też nieco tym, że wywołanie rekurencyjne jest wykonywane dwukrotnie, zamiast budowania łańcucha i przekazywania go dalej.
źródło
Mathematica,
3632 bajtówCzy kiedykolwiek oglądałeś TWOW 11B?
źródło
"",
a następnie można użyć notacji infix dlaFold
.<>
s, a # 2 działa tylko dla funkcji binarnych.Python,
62544645 bajtówChciałbym myśleć, że ten kod wciąż można w jakiś sposób pograć w golfa.
Edycja: Naprawiono błąd dzięki Lynn. -1 bajt dzięki kałamarnicy.
Wypróbuj online!
źródło
Mathematica, 46 bajtów
Prosta funkcja rekurencyjna. Inne rozwiązanie:
źródło
K5, 18 bajtów
Wielokrotnie stosuj funkcję do przenoszonej wartości (
"A"
) i każdego elementu sekwencji. Sekwencja składa się z liter alfabetu od B do pewnej liczby N (`c$66+!
). Funkcja łączy lewy argument po obu stronach prawego argumentu ({x,y,x}
).W akcji:
źródło
JavaScript,
6557 1 bajtówPróbny:
1 - dzięki Neil za uratowanie 8 bajtów
źródło
(i+11).toString(36)
oszczędza 6 bajtów.s="a";
do wcześniejszego,for
wówczas stanie się ono domyślną wartością zwracaną i możesz porzucić końcowe;s
zapisywanie o kolejne 2 bajty.i
inline i upuszczając przyrost w pętli for. Więc ...for(i=0;i<n;)s+=(i+++11)...
Japt,
2017 bajtówPrzetestuj online!
Jak to działa
Wersja niekonkurencyjna, 14 bajtów
ô
Funkcja jest jako
, ale tworzy szereg[X..X+Y]
zamiast[X..Y)
. Przetestuj online!Zdecydowanie wolę zmianę z 97 na 94, w którym to przypadku
5
wygląda tak:źródło
Java, 219 bajtów
Moja pierwsza próba golfowego kodu. Prawdopodobnie można grać w golfa dalej, ale jestem głodny i idę na lunch.
Nie golfowany:
Dość prosty algorytm rekurencyjny o brutalnej sile, wykorzystuje
char
manipulację.źródło
public
słowo kluczowe za
iaddLetter
/j
.MATL , 14 bajtów
Używa wersji 8.0.0 języka / kompilatora, która jest wcześniejsza niż wyzwanie.
Przykład
Wyjaśnienie
Secuence powstaje pierwsza z liczb
0
,1
,2
, ... Są one zamieniane na litery'a'
,'b'
,'c'
na końcu.Edytować
Wypróbuj online!
źródło
PowerShell,
53,46,44, 41 bajtówWklejenie do konsoli wygeneruje błędne wyjście przy drugim uruchomieniu, ponieważ
$d
nie zostanie ponownie zainicjowane.Zaoszczędź 2 bajty za pomocą + = Oszczędź 3 bajty dzięki @TimmyD
źródło
(
,)
.Gaia , 14 bajtów
Wypróbuj online!
źródło
PowerShell , 54 bajty
Wypróbuj online!
źródło
Japt , 8 bajtów
Spróbuj
źródło
Łuska , 12 bajtów
Wypróbuj online!
Używa indeksowania 1, co mam nadzieję, że jest OK.
Wyjaśnienie
źródło
APL (NARS), 24 znaki, 48 bajtów
test:
źródło
PHP
-r
, 43 bajtyregister_argc_argv
musi być włączony, aby to działało.Wypróbuj online!
PHP , 51 bajtów
Anonimowa funkcja, która drukuje dane wyjściowe bezpośrednio.
Wypróbuj online!
źródło