Bez danych wejściowych Twoim zadaniem jest wygenerowanie następujących elementów:
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Niewizualnie Twoim zadaniem jest wygenerowanie każdej litery w alfabecie, ze spacjami przed nią równymi jej pozycji w alfabecie minus jedna.
Jeśli to wydrukujesz, musi wyglądać jak wyżej. Dozwolone są obce białe znaki, które nie wpływają na wygląd, a także końcowy znak nowej linii. Możesz używać wszystkich małych lub wszystkich wielkich liter.
Możesz także zwrócić to z funkcji zgodnie ze zwykłymi regułami, albo jako ciąg znaków z nowymi liniami, albo listę ciągów.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
code-golf
kolmogorov-complexity
alphabet
Stephen
źródło
źródło
a<VERTICAL-TAB>b<VERTICAL-TAB>c...
? Co powiesz na to, że są tam też jakieś znaki backspace? O ile efekt wizualny jest taki sam?4
spacje przed niąb
, nie będzie wyglądać bardzo przekątnie. Jeśli wygląda na to, że nachylenie jest ~,-1
to jest w porządku.Odpowiedzi:
Węgiel , 2 bajty
Wypróbuj online!
W jaki sposób?
Dokładnie takie wyzwanie, dla którego pierwotnie zaprojektowano węgiel drzewny.
źródło
↘"abc ... xyz"q
, że byłby to najkrótszy działający program. ( Wypróbuj online! )↘``26O;)q
Powinien działać (zacznij od kliknięcia wstecz; dla każdego I w 0 ... 25, wciśnij niejawne I, zwiększ wstecz i wyjście), ale z jakiegoś powodu generuje błąd „pustego stosu”. ,C, 45 bajtów
Dzięki @Dennis za uratowanie 5 bajtów!
źródło
i
w pewnym momencie będziesz musiał zainicjować lub zresetować . Przynajmniej w TIOf()
działa tylko raz .f(i){for(i=0;++i<27;printf("%*c\n",i,i+96));}
oszczędza kilka bajtów.f(i){for(i=96;i<122;)printf("%c\v",++i);}
przez 41 bajtów - pamiętaj, aby uruchomić to na rzeczywistym terminalu (tak, jest to dozwolone )05AB1E ,
1486 bajtów-2 bajty dzięki @Emigna
Jak to działa
Wypróbuj online!
Wersja oryginalna, 14 bajtów
źródło
AvyNú»
.ƶ
wydaje się tak idealny, ale tak nie jest :(.Λ
prawdopodobnie nie był jeszcze w tym czasie dostępny, ale26A3Λ
oszczędza bajt.₂A3Λ
byłby jeszcze krótszy.JavaScript (ES6),
6059 bajtówFunkcja rekurencyjna, która zwraca ciąg z końcowym znakiem nowej linii.
źródło
n.toString(++n)+f(n)
bajt jest krótszy niżn.toString(36)+f(n+1)
.f=(n=10,s='')=>n-36?s+n.toString(++n)+'\n'+f(n,s+' '):""
za 55."".padEnd(n-10)+n.toString(++n)
.f=(n=10,s='')=>n-36?s+n.toString(++n)+'\n'+f(n,s+' '):s
wydaje się być dopuszczalne.Rubinowy , 28 bajtów
Wypróbuj online!
Wyjaśnienie:
Operator << w łańcuchu w Ruby wykonuje lewę, jak wyjaśniono w Dokumentacji
str << liczba całkowita → str
str << obj → str
Dołącz - Łączy dany obiekt z ul. Jeśli obiekt jest liczbą całkowitą, jest traktowany jako punkt kodowy i przed konkatenacją jest konwertowany na znak.
źródło
R,
383736 bajtów(Użycie
write
inspirowane jest odpowiedzią @ Giuseppe .)źródło
1
zamiast""
golić inny bajt.Vim, 29 bajtów
Wypróbuj online!
↵ oznacza naciśnij klawisz powrotu
<Esc> oznacza naciśnij klawisz Escape
Jak to działa?
źródło
+
w swoje wyjaśnienie, które rzuciło mnie na sekundę.␛
zamiast<Esc>
. Moim zdaniem wygląda to trochę lepiej.{
zamiastgg
Python 2 , 36 bajtów
Wykorzystuje to zewnętrzne białe znaki, które nie wpływają na regułę wyglądu .
Wypróbuj online!
Alternatywna wersja, 38 bajtów
Daje to dokładny wynik ze specyfikacji wyzwania.
Wypróbuj online!
źródło
%*c
ogóle działa?%*<identifier>
wymaga dwóch argumentów: długości, aby ją uzupełnić i rzeczywistej rzeczy do zastąpienia. Niektóreprintf
implementacje mają jeszcze bardziej niejasne funkcje, takie jak%1$<identifier>
używane tutaj .PHP, 39 bajtów
źródło
Pure Bash, 13
Tu
^K
i^H
są dosłowne pionowe zakładki i kontroli ASCII Backspace znaków.xxd
Wysypisko tego skryptu jest następująca - stosowaćxxd -r
do regeneracji rzeczywisty skrypt:{a..z}
jest standardowym rozszerzeniem nawiasów klamrowych do tworzeniaa b c ... z
(oddzielone spacją)^K
zakładka wolną przestrzenią kursorem w dół o jedną linię do tego samego położenia^H
cofania przemieszcza kursor z powrotem, aby usunąć jedną przestrzeń rozdzielającąWypróbuj online .
col
itac
są używane w stopce, aby poprawnie renderować w oknie przeglądarki, ale nie jest to konieczne w zwykłym terminalu.Jeśli powyższe nieortodoksyjne znaki kontrolne na wydruku są dla ciebie zbyt rozciągliwe, możesz to zrobić:
Bash + wspólne narzędzia, 24
Tu
^K
i^H
są dosłowne pionowe zakładki i kontroli ASCII Backspace znaków.xxd
Wysypisko tego skryptu jest następująca - stosowaćxxd -r
do regeneracji rzeczywisty skrypt:Wypróbuj online . Pionowa karta i backspace mogą być niewidoczne dla twojej przeglądarki, ale są tam (niewidoczne na chrome, widoczne na Firefox).
col -x
ponownie renderuje dane wejściowe w taki sposób, że śmieszne znaki kontrolne są zastępowane spacjami i znakami nowej linii, aby dać ten sam efekt wizualnycol
wypisuje wiersze w odwrotnej kolejności.tac
poprawia to.źródło
^K
jako kursor w górę, co jest zachowaniem, którecol
musi być tutaj naśladowane.col
nazywa VT „odwróceniem linii”. xterm, gnome-terminal i terminal OSX zrzucają linię ...Brain-Flak ,
124, 116, 106 bajtówWypróbuj online!
Wyjaśnienie:
Ta odpowiedź narusza Nilad wysokości stosu , ale w nowy sposób, z którego nigdy wcześniej nie korzystałem, z czego jestem dumny. Poza tym odpowiedź nie jest zbyt mądra.
Analizując znaki użyte w tej sztuce ASCII, tak naprawdę często stosuje się trzy wartości:
32 (spacja),
64 (dodaj 64 do N, aby uzyskać N-tą literę alfabetu), i
10 (nowa linia)
Jak również 26. (liczba pętli) I te liczby są wypychane w różnych lokalizacjach, więc nie możemy tak naprawdę ponownie użyć wartości pośrednich, aby zmniejszyć duże liczby. A wypychanie wszystkich z tych liczb to aż 86 bajtów:
To jest okropne. Oto, w jaki sposób sprawiamy, że jest to wygodniejsze. Oczywistym podejściem jest przesunięcie
32
na alternatywny stos, co powoduje, że nasz32
fragment staje się:(<>({})<>)
a nasz64
fragment staje się(<>({})({})<>)
. Jeśli połączymy nasz początkowy push 32 z naszym początkowym push 26 , możemy z grubsza zaoszczędzić 8 bajtów. (mój pierwszy golf).Ale tutaj pojawia się sztuczka, z której jestem naprawdę dumny. Ponieważ nie używamy alternatywnego stosu do niczego innego, równie dobrze moglibyśmy zagrać w golfa w dół 10. Aby to zrobić, wypchniemy 4 dowolne liczby na stos bezpośrednio na początku programu. Ponieważ naciskamy również na 32, zwiększa to wartość
[]
niladu, do 5, co czyni nasz10
fragment kodu znacznie wygodniejszym. I na szczęście dla nas, to pozwala nam również zagrać w golfa na push 32 i 26 w dół!Staje się
Oto szczegółowe wyjaśnienie:
źródło
V ,
151311 bajtówWypróbuj online!
Wyjaśnienie
źródło
Arkusze Google,
6765 bajtów= ArrayFormula (IF (ROW (A1: Z) = COLUMN (A1: Z26)), CHAR (96 + ROW (A1: Z26)), „”))Po wyjaśnieniu, że zrobi to dowolna biała spacja, użyłem widocznie pustych komórek
Daj mi znać, jeśli to się nie liczy, jeśli źle zrozumiałem liczbę bajtów lub zepsułem jakąś etykietę, ponieważ jest to mój pierwszy post tutaj.
Edytuj: Okazuje się, że mogę zapisać 2 bajty, pomijając „”, ponieważ arkusze Google zaakceptują pustą wartość if.
źródło
APL (Dyalog) ,
97 bajtów SBCS-2 bajty dzięki podpowiedzi ngn.
[Wypróbuj online!] [TIO-j3o0ipjy]
⎕A
wielkie lphabet⌸
pomiędzy każdą parą (element, lista indeksów) wstaw następującą ukrytą funkcję:↑⍨
z elementu (litery) weź…∘
…-
negated-index liczba znaków, tj. tyle znaków z tyłu, wypełnienie z przodu spacjami.Wypróbuj online!
źródło
↑
jest{.
i⍳
jesti.
przysłówkami:¨
jest"0
i⍨
jest~
.(a.{~97+i.26){."0~-1+i.26
⌸
abyOktawa,
2519 czy 12? bajtyWypróbuj online!
Inne rozwiązanie zaproponowane przez @LuisMendo (12 bajtów), które testowałem w wersji Windows Octave:
Wyjaśnienie:
Generuje macierz diagonalną
a:z
.źródło
Java 8,
72717061 bajtów-1 bajt, wypisując wielkie litery zamiast małych.
-1 bajt, drukując bezpośrednio, zamiast zwracać ciąg wielowierszowy.
-8 bajtów dzięki @ OliverGrégoire przy użyciu
printf
bezpośrednio, aby się pozbyćString s="";
. A także -1 bajt, zmieniając()->
nao->
.Wypróbuj tutaj.
źródło
c=65
(lub64
faktycznie), więc nie potrzebujesz 3-cyfrowego numeru. Czy zwracanie tablicy zamiast ciągu może zaoszczędzić bajty, ponieważ można usunąć+"\n"
?()->{for(int a=0;a++<26;)System.out.printf("%"+a+"c%n",a+96);}
używając tego samego pomysłu, co w innym wyzwaniu .Galaretka ,
109 bajtów-1 bajt dzięki Dennisowi (unikaj zmniejszania
J
poprzez zastosowanie obniżonego zakresu26Ḷ
, bezpośrednio)Pełny program, który drukuje wynik.
Wypróbuj online!
(
ØaJ’⁶ẋż
dla 7 to monadyczny link, który zwraca listę list list znaków, ale to jest coś,[["a"],[" ","b"],[" ","c"],...]
co prawdopodobnie jest niedopuszczalne).Nie zdziwiłbym się jednak, gdyby istniała krótsza droga, o której nie myślałem!
W jaki sposób?
źródło
[["a"],[" ","b"],[" "," ","c"],...]
ponieważ lista znaków jest alternatywną definicją łańcucha, ale krotka nie wydaje się pasować :)"..."
jest lista znaków, więc tak naprawdę to dlatego,[[['a']],[[[' '],['b']],[[' ',' '],['c']],...]
że Jelly nie ma ciągów, tylko listy.26Ḷ⁶ẋżØaY
zapisuje bajt.ØaJ’⁶ẋż
dla7
, dla twojej alternatywnej wersji.PowerShell, 29 bajtów
źródło
$_
siebie, miło.Alice ,
2220 bajtówWypróbuj online!
Mimo że wyjście jest ciągiem, okazuje się, że tryb porządkowy nie jest sposobem na podjęcie tego wyzwania.
Wyjaśnienie
Poprzednie rozwiązanie
Wypróbuj online!
Przejrzałem około dziesięciu 23-bajtowych rozwiązań, zanim udało mi się je znaleźć.
Wyjaśnienie
Ten program używa taśmy do śledzenia liczby spacji do wydrukowania. Tryby kardynalny i porządkowy używają tej samej taśmy, ale mają osobne głowice taśmy. Oba tryby mają różne interpretacje tego, co widzą na taśmie, a program w pełni wykorzystuje tę różnicę.
Polecenia są wykonywane w następującej kolejności:
źródło
Brainfuck, 103 bajty
Wypróbuj online!
Lokalizację zmiennych można w jakiś sposób poprawić.
Wyjaśnienie
źródło
Arkusze Google, 69 bajtów
Nic skomplikowanego tutaj. Jedyną sztuczką jest użycie
ArrayFormula
iROW(A1:A26)
zwrócenie 26 różnych wartościJOIN
funkcji. Dane wyjściowe wyglądają tak:Myślę, że Excel 2016 może zrobić to samo,
TEXTJOIN
ale nie mogę wprowadzać formuł tablicowych w wersji online i mam tylko 2013 rok. Wzór powinien być następujący:Wprowadzenie go jako formuły tablicowej ( Ctrl+ Shift+ Enter) dodaje nawiasy klamrowe
{ }
po obu stronach, zwiększając go do 67 bajtów. Każdy, kto może zweryfikować, czy to działa, może użyć go jako własnej odpowiedzi.źródło
Ziarno , 6014 bajtów
Nie sądzę, że to zdobędzie jakiekolwiek nagrody, ale dla zabawy, oto rozwiązanie w Seed.
Przekłada się na następujący program Befunge:
źródło
shortC , 33 bajty
Wypróbuj online!
źródło
Dodaj ++ , 1069 bajtów
Wypróbuj online!
Tak. To jest zakodowane. Jestem pewien, że istnieje lepszy sposób i jeśli chcesz go znaleźć, śmiało, ale wydaje się, że ten sposób działa najlepiej, ponieważ Add ++ jest trudny do pracy z pamięcią.
źródło
R ,
594947 bajtów-10 bajtów dzięki djhurio
-2 bajty dzięki Svenowi Hohensteinowi
Drukuje na standardowe wyjście. Outgolfed by user2390246
Wypróbuj online!
źródło
26^2
z676
zapisać bajt.m=matrix("",26,26);diag(m)=letters;write(m,'',26)
(49 bajtów)cat(m,fill=27)
"diag<-"(x, y)
jest podobne dodiag(x) <- y
. Wartość nie jest przypisana do zmiennej, ale jest zwracana.> <> ,
46 4442 bajtówWypróbuj online!
Wyjaśnienie
To jest zupełnie inne ujęcie od moich poprzednich 46 bajtów, więc dołączyłem również TIO do jedynego. 46 bajtów Wypróbuj online!
Poniżej znajduje się link do oświadczeń Emigny, była to pierwsza> <> odpowiedź, ale uważam, że moja jest wystarczająco inna (i oszczędza kilka bajtów), aby uzasadnić drugą.
Odpowiedź Emigny
źródło
Haskell ,
66 65 58 57 4543 bajtówDzięki @nimi i @maple_shaft za oszczędność
1214 bajtów.Wypróbuj online!
źródło
<$
zamiast replikować:(' '<$[1..(fromEnum n-97)])
(' '<$['b'..n])
.f=
.['a'..'z']>>= \n->(' '<$['b'..n])++[n,'\n']
.PHP, 23 bajty
Uwaga: używa kodowania IBM-850.
Uruchom tak:
Wyjaśnienie
Utwórz tablicę wszystkich znaków alfabetu, połącz go za pomocą pionowej zakładki jako kleju.
źródło
pieprzenie mózgu , 80 bajtów
Wypróbuj online!
Sformatowany:
Wykorzystuje prostą funkcję mnożnikowy generacji umieścić kilka stałych w pamięci, a następnie powtarza się proces drukowania przestrzeni N, a następnie
'A' + N
naN = 0..25
.Adnotacja:
źródło
RProgN 2 , 5 bajtów
\ x0B jest literałem tabulacji pionowej
To po prostu pobiera małe litery, dzieli je i łączy z pionowymi zakładkami. Daje to zamierzony efekt na niektórych terminalach Bash.
źródło