W jak najmniejszej liczbie bajtów napisz program lub funkcję, która wyświetli następujące informacje:
Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwxyZ
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
Abcdefghijklmnopqrstuvwxyz
Końcowy znak nowej linii jest dozwolony. Można znaleźć odniesienia ungolfed wdrożenie Pythona tutaj .
code-golf
kolmogorov-complexity
Absynt
źródło
źródło
Odpowiedzi:
Pyth, 12 bajtów
Demonstracja.
W Pyth
G
jest małymi literami.+Gt_G
toabcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba
znak, który musi być pisany dużymi literami w każdym rzędzie.V
ustawia pętlę for na tym ciągu, zeN
zmienną loop.W treści
XGNrN1
znajduje się funkcja tłumaczenia ciągu.X
tłumaczyG
, alfabet, zastępującN
zrN1
Z wielką wersjiN
.r ... 1
jest funkcją wielkich liter. Daje to pożądaną moc wyjściową.źródło
C, 73
Czasami najlepsze jest najprostsze podejście: wydrukuj każdą postać jeden po drugim. to bije wiele języków, których tak naprawdę nie powinno.
wyjaśnienie
źródło
Python 2, 69 bajtów
Ładne i proste, tak myślę.
źródło
Brainfuck (8bit), 231 bajtów
Ok, więc nigdy nie będzie najkrótszy, ale liczy się udział… prawda ?!
Wypróbuj tutaj (zaznacz pole „Pamięć dynamiczna”)
źródło
>
przesuwa jedną komórkę w prawo.MS-DOS Binary, 61
Ten kod nie musi być kompilowany, będzie działał w MS-DOS, jeśli zapiszesz go w pliku o nazwie wave.com. Kod szesnastkowy:
Lub, jeśli wolisz coś bardziej czytelnego, oto jak to zrobić za pomocą debug.exe (ważna jest pusta linia po kodzie):
źródło
Rubinowy:
71686563 znakówPrzykładowy przebieg:
źródło
puts f=(e=*?a..?z).map{|c|(e*"").tr c,c.upcase},f[0,25].reverse
Matlab,
605854 bajtówZ podziękowaniami dla Dennisa Jaheruddina za uratowanie mnie 4 bajtów.
źródło
char(x)
na,[x '']
aby zapisać bajt.end-1
to raczej rozwlekły sposób pisać 25![x '']
sztuczka wcale nie jest dla mnie zwyczajna. Ale teraz pamiętam, że widziałem to w jednym z twoich anwersów :-)SWI-Prolog, 136 bajtów
Nadużywanie powrotu do pętli ...
źródło
Haskell
1008988 bajtówFunkcja pomocnicza lambda
\(h,c:t)
pobiera parę list wartości ascii i łączy oba, ale pierwsza wartość drugiej listy jest wielka. Główna funkcja dzieli małe litery (podane w ascii97..122
) na każdej pozycji0,..,24,25,24,..,0
i wywołuje lambda na każdym kroku. Przed wydrukowaniem każda wartość zamienia się w odpowiedni znak.źródło
Scala
110109 znakówźródło
foreach println
namkString("\n")
, iSQL (postgreSQL),
107101Generuj to serie od -25 do 25 i używaj wartości bezwzględnej do zamiany znaków na ich duże litery. Dzięki manatwork za wskazówkę na temat operatora @.
źródło
@
operatora?Haskell, 81 bajtów
Liczenie bajtów tak jak @nimi;
f
to działanie we / wy, które drukuje pożądane wyjście.źródło
Pyth -
1817 bajtówPierwsze przejście, prawdopodobnie może być znacznie krótsze. Używa
X
do podstawiania ir1
kapitalizacji.Wypróbuj online tutaj .
źródło
MATLAB - 58 bajtów
Podobne do rozwiązania Luisa Mendo , ale z wykorzystaniem możliwości nadawania
bsxfun
.Korzystając z tego, że w ASCII różnica między wielkimi i małymi literami wynosi dokładnie 32 wartości od siebie, najpierw generujemy małe litery z kodów ASCII od 97 do 122, które są odpowiednio kodami ASCII od małych a do małych z utwórz 51-wierszową macierz, która zawiera 26 kodów ASCII od 97 do 122. Dlatego też każdy wiersz tej macierzy zawiera liczbową sekwencję wartości od 97 do 122. Następnie tworzymy kolejną macierz, w której każdy i- ty wiersz tej macierzy zawiera 32 w i- tej kolumnie. Pierwsze 26 wierszy tej macierzy ma ten wzór, który jest w zasadzie macierzą tożsamości pomnożoną przez 32. Funkcja
eye
tworzy dla ciebie macierz tożsamości. Ostatnie 25 wierszy tej macierzy to skalowana macierz tożsamości obrócona o 90 stopni.Biorąc tę niestandardowo ważoną macierz tożsamości i odejmując ją od pierwszej macierzy, a następnie przekształcając uzyskane kody ASCII w znaki, tworzona jest pożądana sekwencja „meksykańskiego kapelusza”.
Przykładowy bieg
Możesz również uruchomić ten przykład, używając internetowego środowiska Octave IDEone. Octave jest zasadniczo MATLAB, ale bezpłatny: http://ideone.com/PknMe0
źródło
rot90
-- dobrze przemyślane!J,
3123 bajtów8 bajtów zapisanych dzięki @Mauris.
Wypróbuj online tutaj.
źródło
u:|:(97+i.26)-32*=|i:25
(monada=
jest tu naprawdę przydatna!)=
tutaj. To bardzo miłe!Perl, 51 bajtów
Kod 50 bajtów + 1 bajtowy parametr wiersza poleceń
Może być używany w następujący sposób:
Lub online tutaj (uwaga, że musiałem do tego dodać,
,"\n"
ponieważ nie mogłem dodać -l arg).Znacznie dłuższa metoda Przed powyższą skróconą wersją wypróbowałem inną metodę, która okazała się dość masywna. I tak zostawiłem to dla odniesienia.
86 bajtów kodu + 1 bajt arg wiersza poleceń
Pierwszy Perl, w jaki kiedykolwiek grałem poprawnie w golfa, więc wyobrażam sobie, że można wiele z tym zrobić - sugeruj ulepszenia!
Można użyć w następujący sposób:
Lub online tutaj (uwaga, że musiałem dodać. \ N ", ponieważ nie mogłem dodać -l arg).
Wyjaśnienie
Ogólne podejście polega na użyciu podstawienia wyrażenia regularnego, aby wykonać całą ciężką pracę. Zaczynamy od:
To pasuje
(([A-Z])|0)(\D)
i zostaje zastąpione przez\U\3
(\ U zmiany na wielkie litery), aby dać:Od tego momentu kontynuujemy dopasowywanie tego samego wyrażenia regularnego i zamieniamy na
\L\2\U\3
:Teraz druga alternatywa dopasowania wyrażeń regularnych
(.)((?2))(1)
(która jest taka sama jak(.)([A-Z])(1)
). Zamieniamy na,\U\4\6\L\5
aby dać:To się dopasowuje i zastępuje, dopóki nie osiągniemy:
i nie ma już dopasowań wyrażeń regularnych.
W każdym punkcie pętli usuwamy „1” i drukujemy.
źródło
PHP,
877169 bajtówNie najkrótszy, ale działa zgodnie z przeznaczeniem.
Dzięki @manatwork za kilka wskazówek, jak znacznie zmniejszyć jego rozmiar.
Dzięki @Blackhole rozmiar został zmniejszony o 2 bajty.
Niezupełnie ładny, ale działa.
źródło
join()
pierwszym parametrze.$i<25?$i:25-($i-25)
→25-abs($i-25)
for(;$i<51;){$L=range(a,z);$L[25-abs($i++-25)]^=" ";echo join($L),"↵";}
(Wystarczy owinąć wiersz, w którym użyłem „↵” w kodzie.)\n
tam był. Inicjalizacja$i
została pozostawiona jako wypadek. I bardzo dziękuję za25-abs($i-25)
. Nie dotarłbym tam sam.for
pętla może być zoptymalizowana:for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';
(-2 bajty).PowerShell 3.0, 82 bajty
źródło
Architektura węzła TIS Typ T21 -
216215 bajtówZobacz tutaj w akcji! Jest
DOWN
w tym filmie, do którego później grałem w golfaANY
, ale jest funkcjonalnie identyczny.Język ten nie ma pojęcia lub ciągów znaków, więc muszę podkreślić, że używam wartości ASCII, czyli wyjście zaczyna
97, 66, 67
...88, 89, 90, 10, 65, 98
...Oto kod w formacie zapisywania danych TIS-100 do celów punktacji:
Wyjaśnienie
źródło
JavaScript ES6, 121 bajtów
Jest to naprawdę długie, ponieważ bardziej sensowne jest kodowanie alfabetu na sztywno niż używanie absurdalnie długiego czasu
String.fromCharCode
do generowania znaków. Przetestuj go poniżej za pomocą fragmentu stosu, który używa lepiej obsługiwanego ES5 i niższego.źródło
CJam, 23 bajty
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
R
7870Ulepszony przez @MickyT
źródło
M=replicate(26,c(letters,"\n"))
raczej niż matrycy. Zaoszczędzi ci to kilka bajtówwrite
: tio.run/##K/r/…Zestaw Linux, 289
Niestety nie jest konkurencyjny dla języków wysokiego poziomu i prawdopodobnie daleki od optymalnego, ale dość prosty. Uruchom go przy użyciu
nasm -f elf64 -o a.o wave.S; ld -s -o a a.o; ./a
(wynikowy plik binarny ma tylko 568 bajtów):źródło
Zestaw x86 dla DOS, skompilowano 41 bajtów
Dwójkowy:
Kod źródłowy, zapisz jako „wave.asm”, skompiluj z „nasm -f bin -o wave.com wave.asm” i uruchom z „dosbox wave.com”
źródło
C #,
140139135132Rozszerzony
Zapisano 1 bajt dzięki @ Gunther34567 przy użyciu trójki zamiast
if
Zapisano 4 bajty, a następnie zagnieżdżono trójskładnik wewnątrz pętli i przeniesiono alfabet na zewnątrz pętli
Zaoszczędź 3 bajty łącząc deklaracje liczb całkowitych dzięki @eatonphil
źródło
if(i==25)d=-1;
nad=i==25?-1:d;
var d=1
naint d=1,i
.Bash:
7666 znakówPrzykładowy przebieg:
źródło
printf
połączenie. Odrzuciłem edycję , więc możesz sam ją przetestować.Sed:
135119116111 znaków(Kod 109 znaków + 1 wiersz opcji wiersza poleceń + 1 znak wprowadzania).
Przykładowy przebieg:
źródło
JavaScript (ES6), 113 bajtów
110 bajtów
102 bajty
Stara szkoła jest nie do pobicia, chyba że będziemy mieli operatora zasięgu / funkcję / generator / cokolwiek w js
100 bajtów
Niestety Math.abs jest za długi
9694 bajtyMimo że zostałem odrzucony bez wyjaśnienia, kontynuuję walkę
Możemy ogolić kilka bajtów, zmieniając instrukcje pętli:
źródło
Perl -
9564 bajtówWykorzystuje fakt,
\u
że kolejna postać drukuje wielkie litery w Perlu.Dzięki manatwork za zapisanie 31 bajtów i naprawienie go (mój poprzedni kod nie działał.)
źródło
\u
wydaje się działać w osobnej próbce, ale nie w kodzie. :( Wszystkie znaki pozostały małe. Czy możesz nam pokazać, jak należy wykonać kod? (Umieszczam go w pliku, a następnie nazywamperl
przekazaniem nazwy pliku, bez przełączników.) Nawiasem mówiąc, używamperl
5.20.2.\u
następuje litera, aby przekształcić się w ten sam dosłowny ciąg:for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}
q (37 znaków)
Pierwsze cięcie
źródło
@[.Q.a;;upper]@'x,1_reverse x:til 26
przez 36 bajtów . Lub@[.Q.a;;.q.upper]@'x,1_|x:!26
dla 29 bajtów w K4.