Wydrukuj lub wyświetl następujące trzy wiersze tekstu, dokładnie tak, jak pokazano poniżej. Końcowy znak nowej linii jest akceptowany.
bC#eF&hI)kL,nO/qR2tU5wX8z
A!cD$fG'iJ*lM-oP0rS3uV6xY9
aB"dE%gH(jK+mN.pQ1sT4vW7yZ
Ten blok tekstu jest taki sam jak poniższy, ale n-ta kolumna jest obracana n razy w dół:
!"#$%&'()*+,-./0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
Należy pamiętać, że jest to wyzwanie złożoności Kołmogorowa , więc format wyjściowy nie jest elastyczny.
code-golf
string
kolmogorov-complexity
alphabet
Stewie Griffin
źródło
źródło
Odpowiedzi:
Java 8,
16916215014611611310695949392919084 bajtówTak, w końcu to zrobiliśmy! Pobiliśmy 88-bajtowe dane wyjściowe, które można znaleźć na dole. Dziękujemy wszystkim, którzy brali udział w grze w golfa!
-7 bajtów dzięki @StewieGriffin .
-42 bajty dzięki @Neil .
-11 bajtów dzięki @PeterTaylor .
-3 bajty dzięki @ OlivierGrégoire .
-6 bajtów dzięki @ OlivierGrégoire i @Neil (Olivier zasugerował port odpowiedzi JavaScript Neila ).
Wypróbuj online.
Wyjaśnienie:
Zobacz tutaj, co robi każda z części arytmetycznych i jak kończy się na prawidłowych znakach.
Java 8, 88 bajtów
Nudne,
ale wykorzystanie zamierzonego obrotu kolumn na pewno nie będzie krótsze w Javie ..Naprawdę!Wkrótce opublikuje rozwiązanie, aby zobaczyć, ile bajtów różni się.Najwyraźniej różnica to tylko -4 bajty! :REWypróbuj online.
źródło
(x, y)
, który najprawdopodobniej pobije twoje 169-bajtowe podejście, a może nawet literalny ciąg.v->{String a="";for(int i=2,j,t;++i<6;){for(j=31;++j<58;a+=(char)(t<1?j+65:t>1?j:j+33))t=(j-i)%3;a+="\n";}return a;}
v->{for(int i=0,r,c;++i<81;System.out.printf("%c",c<1?10:32*++r+c-1/r))r=(i/27+28-(c=i%27))%3;}
c
całkowicie usunięte )Łuska , 13 bajtów
Zwróć uwagę na spację końcową. Wypróbuj online!
Wyjaśnienie
źródło
SPL (Shakespeare Programming Language),
167916181600 bajtówMiałem pewne problemy z tłumaczem ( https://github.com/drsam94/Spl ), więc nie jest tak mały, jak mi się wydaje. Ale przynajmniej to działa :)
Oto ta sama logika w PHP, aby trochę łatwiej zobaczyć, co się dzieje.
źródło
JavaScript (ES6),
8675 bajtówEdycja: Zapisano 11 bajtów dzięki @Ryan. Teraz 10 bajtów krótszych niż literał!
JavaScript (Node.js) , 64 bajty
Wypróbuj online! Dzięki @Ryan.
źródło
f=(i=k=0)=>i-80?String.fromCharCode(++i%27?(4-k++%3)*32%97+i%27:10)+f(i):''
i 11 innych w środowisku Węzła jako bok:f=(i=k=0)=>i-80?Buffer([++i%27?(4-k++%3)*32%97+i%27:10])+f(i):''
05AB1E ,
1715 bajtówZaoszczędzono 2 bajty dzięki Erikowi Outgolfer
Wypróbuj online!
Wyjaśnienie
źródło
εN
powinno być. Łączy dwa pomysłyvyNFÁ])ø»
i twój.N
podczas korzystaniaε
. Technicznie nie pasuje, ponieważε
nie jest pętlą, choć ponieważ czasami używamy go jako takiego, byłoby miło mieć go.CJam (18 bajtów)
Demo online
Sekcja
Oczywistym podejściem jest generowanie oryginalnych linii, zip, obracanie z
ee::m>
i zip z powrotem. Aleee::
jest dość długi i krócej generuje kolumny bezpośrednio.źródło
Python 2 , 72 bajty
Wypróbuj online!
Działa to poprzez usunięcie
31.333..
z poprzedniego znaku, dodanie,97
gdy poprzedni punkt kodowy jest mniejszy niż 60, i odjęcie26
na końcu każdej linii.źródło
R ,
6463 bajtówWypróbuj online!
-1 bajt dzięki Giuseppe
Doszedłem do tego przez sporo prób i błędów, więc walczę o zwięzłe wyjaśnienie. Zasadniczo, zamiast kodów znaków, zacząłem od prostszej sekwencji 1:81 reprezentującej oryginalny blok tekstu (3 * 26 plus 3 znaki nowej linii) i zbadałem wskaźniki, gdzie te wartości kończą się w obróconym bloku. Wynika to z regularnej sekwencji, która spada za każdym razem o 26, modulo 81 (lub równoważnie, zwiększa się o 55 mod 81). Następnie należało odtworzyć tę sekwencję
(0:80*55)%%81+1])
, odwzorować na rzeczywiste wartości Unicodec(32:57,10,65:90,10,97:122,10)
, przekonwertować na znaki i wydrukować.źródło
55
zamiast-26
od-26 == 55
(mod 81).Japt ,
1715 bajtówPrzetestuj online!
Wyjaśnienie
7 innych możliwych 15 bajtów:
źródło
CJam ,
2321 bajtówWypróbuj online!
Wyjaśnienie
źródło
MATL , 16 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
1:26
jako przesunięcie. Powinienem spróbować w mojej odpowiedzi R ...&
była świetnym dodatkiem, od pomysłu Suever :-)Galaretka , 13 bajtów
Wypróbuj online!
Jak to działa
źródło
Perl 5 , 46 bajtów
Oszczędność 13 bajtów dzięki magicznej magii @TonHospel !
Wypróbuj online!
źródło
$i++
jest sprawiedliwy$_
i możesz go użyćsay
zamiast,print
więc to naprawdę50
{}
na mapie dla49
:say map$/x/26|52/.chr$_%26+(32,65,97)[$_%3],0..77
47
:print map{chr$n+++$_,$/x!($n%=26)}(32,97,65)x26
. Niestetysay
daje jedną nową linię za dużo.48
:say map$/x/.A/.chr$n++%26+(65,32,97)[$n%3],A..BZ
R ,
8886 bajtówWypróbuj online!
R jest okropny w manipulowaniu strunami i chociaż ma pewne porządne wbudowane macierze, rotacje to kolejna rzecz, której nie robi się łatwo.Z radością dam nagrodę każdemu, kto może wygrać w golfa w R.Pomimo znalezienia krótszej odpowiedzi, nadal przyznam 50 powtórzeń za pierwszą inną odpowiedź R krótszą niż 88 bajtów.
Chyba przyznałbym sobie nagrodę, gdybym mógł, ale to całe dwa bajty krótsze niż „nudna” odpowiedź! Unikam rotacji, wykorzystując skłonność R. do recyklingu.
EDYCJA: odpowiedź użytkownika2390246 całkowicie mnie przerosła i przyznam nagrodę w wysokości 100 punktów, ponieważ to rozwiązanie jest znacznie lepsze.
Aby się tu dostać, zdekonstruowałem pożądane dane wyjściowe do ich punktów kodowych ASCII za pomocą
utf8ToInt
(usuwając znaki nowego wiersza), zbudowałem macierz i uruchomiłemdiff
na nich, uzyskując różnice między kolumnami. Biorąc pod uwagę okresowość, postanowiłem skonstruować matrycę w golfowy sposób, mając nadziejędiffinv
na odtworzenie oryginału.Dzięki okresowości możemy odtworzyć
diff
macierz ed, zmuszając R do recyklingu o długości innej niż wielokrotna i wyodrębniając kolumny, które tak naprawdę chcieliśmy:Następnie odwracamy ten proces,
diffinv
aby odtworzyć punkty kodowe, dołączyć wiersz10
(nowe linie) na dole, ponownie przekonwertować na ASCII za pomocąintToUtf8
icat
wynik.źródło
Stax ,
1412 bajtówUruchom i debuguj
Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
Ten program używa tylko funkcji, które były dostępne od pierwszego wydania stax, ale najwyraźniej zapomniałem o
K
cross-map, kiedy pierwotnie pisałem tę odpowiedź.Jedną z prawie interesujących rzeczy, na które należy zwrócić uwagę w tej odpowiedzi jest to, że
R
jest to niepotrzebna instrukcja, ponieważK
domyślnie zamienia liczby całkowite na zakresy. Jednak nie ma sposobu na przesunięcie3
i26
bez dodatkowego bajtu pomiędzy nimi.źródło
PowerShell , 53 bajty
Wypróbuj online!
Widzę, że jest to podobne do odpowiedzi Perla Doma, ale doszedłem do tego niezależnie.
Wykorzystuje to fakt, że wzorzec idzie
Symbol - Lowercase - Capital
, nawet podczas owijania nowych wierszy (8 - z - A
na przykład), a tym samym dodaje odpowiednie przesunięcie (wybrane przez$j++%3
) do bieżącej liczby$_
przed-join
scaleniem ich w pojedynczy ciąg. Robi się to trzy razy, aby wymyślić trzy linie (zachowując$j
między iteracjami). Te trzy wiersze pozostaną w przygotowaniu, a domniemaneWrite-Output
daje nam nowe wiersze za darmo.źródło
Julia 0.6 , 79 bajtów
[' ':'9' 'A':'Z' 'a':'z']
to nieobrócona tablica znaków 2d,[n,mod1(i-n,3)]
indeksowana do tej tablicy z odpowiednim obróceniem.prod
przenosi wektor znaków na ciąg znaków (ponieważ do łączenia ciągów stosuje się mnożenie). Istnieją dwa zagnieżdżone wyrażenia wektorowe, w wyniku których wektor zawiera 3 ciągi, a następnieprintln.
drukuje każdy ciąg w wektorze, po którym następuje nowa linia.W TIO brakuje odpowiedniej metody pomnożenia (za pomocą
prod
) dwóch znaków w celu uzyskania ciągu. Wiem, że ta metoda została dodana nieco niedawno, ale wersja TIO wydaje się być taka sama jak wersja na moim komputerze, na której działa ten kod, więc nie mogę w pełni wyjaśnić, dlaczego nie działa na TIO.Skopiuj przykład wklejania (
;
nie jest to konieczne, po prostu tłumi dodatkowe dane wyjściowe w REPL):źródło
Węgiel drzewny ,
262115 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
J ,
29, 2725 bajtów-2 bajty dzięki FrownyFrog -2 bajty dzięki milom
Wypróbuj online!
Wstępne podejście: J , 29 bajtów
Objaśnienie:
i.26
- zakres 0–2632 65 97+/]
- utwórz 3-rzędową tabelę dla postaci&.|:
transpose następnie zrób następny czasownik (|.
) i transponuj ponownie-|."_1
obróć każdy rząd n razyu:
przekonwertować na UnicodeWypróbuj online!
źródło
|:u:(<26)2&(|.>:)32 65 97
oszczędza 2 bajty.C
70 7067676064 bajtów+4 bajty, aby funkcja mogła zostać ponownie użyta .
Niepoprawna 60-bajtowa odpowiedź, której nie można użyć ponownie:
Port
mojej odpowiedzi na Javę 8 OdpowiedźJavaScript @Neil .Wypróbuj online.
źródło
i=t=0
.APL + WIN, 26 bajtów
Początek indeksu 0
Wygeneruj macierz wartości liczb całkowitych indeksu znaków w wektorze atomowym APL.
Obróć każdą kolumnę w dół o wartość liczbową.
Użyj uzyskanych wskaźników, aby wyświetlić znaki z wektora atomowego.
źródło
Vim,
8179 bajtówObjaśnienie (uproszczone)
źródło
C, 72 bajty
źródło
Python 2 , 65 bajtów
Wypróbuj online!
źródło
pieprzenie mózgu ,
121115 bajtówDzięki @JoKing za oszczędność 6 bajtów!
Wypróbuj online!
źródło
+++[[<+>>++<-]>]
naprawdę jest początek wszystkiego, co? Dzięki!Japt , 17 bajtów
Sprawdź to
Wyjaśnienie
źródło
;Bå_cÄ é}"@`" ·y
C
po lunchu. Nie wiem jaky
i·
skończyło się niewłaściwą drogą; MusiałemCtrl+Z
ed zbyt wiele razy przedCtrl+A
ing!Python 2 , 79 bajtów
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 23 bajty ( Adám's SBCS )
Wypróbuj online!
-1 dzięki Adámowi .
Działa w środowisku interaktywnym.
Zakłada
⎕IO←0
.źródło
(⎕UCS-⊖∘↑32 65 97+⊂)⍳26
lub(⎕UCS-⊖32 65 97∘.+⊢)⍳26
K4 , 38 bajtów
Rozwiązanie:
Przykład:
Wyjaśnienie:
9 znaków do wykonania obrotu ...
źródło
Perl,
4946 bajtówlub
źródło
$^x8
, ale nie mogę wymyślić innej zmiennej o wystarczającej długości, być może,"@INC"
ale jest za długa i używa"@-"
zamiast$n++
, ale wciąż tej samej długości. Chyba że to pomoże ci to zmniejszyć? Chyba że dodasz-p
flagę i masz niejawne wyjście?