Wyzwanie
Wydrukuj następujące znaki:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
Problem polega na tym, że nie możesz użyć żadnego z nich w swoim kodzie.
Możesz wydrukować je w dowolnej kolejności, z wiodącym lub końcowym znakiem nowej linii lub bez, ale nie możesz drukować żadnych innych znaków.
Zasady
- Nie możesz używać żadnych znaków z zestawu wspomnianego powyżej
- Możesz użyć innych znaków
- Bez oszukiwania
- Standardowe luki zabronione
- To jest golf golfowy , wygrywa najkrótsza odpowiedź.
Wyjaśnienia
- Jeśli twój język używa innego zestawu znaków, nie możesz używać w tym zestawie znaków kodowych, które odpowiadają znakom alfanumerycznym.
- Zwracanie ciągu z funkcji jest uważane za prawidłową formę wyniku.
- Możesz zwrócić tablicę znaków.
code-golf
string
kolmogorov-complexity
restricted-source
dkudriavtsev
źródło
źródło
Odpowiedzi:
V ,
87 bajtówZapisano 1 bajt dzięki @DJMcMayhem, umieszczając wszystko w jednym wyrażeniu regularnym
Wypróbuj online!
Wyjścia:
Uwaga: nie
×
jest lub jestx
X
0xd7
Hexdump:
Wyjaśnienie
Teraz dane wyjściowe wyglądają następująco:
Musimy usunąć wszystkie znaki niealfanumeryczne i
_
(ponieważ nie jest to uwzględnione\W
), więc zróbmy to za pomocą wyrażenia regularnegoźródło
Ó×ü_
(co jest równoważne z:s/\W\|_//g
)Oktawa ,
52 4640 bajtówTo ocenia na
Wyjaśnienie
Wykorzystujemy tutaj fakt, że znaki są domyślnie konwertowane na liczby całkowite, gdy stosowane są operacje arytmetyczne, takie jak
+-
lub funkcja zakresu:
. Po połączeniu z pustym ciągiem ([...,'']
) liczby ponownie są konwertowane na znaki.Wypróbuj online!
źródło
+1
za bycie pierwszym nie-ezoterycznym językiem w wyzwaniu bardzo odpowiednim dla esolangów.+1
, nie do używania Octave (jest dość prosta), ale do bardzo dobrej gry w golfa i używania_
jako zmiennej! Nie miałem pojęcia, że to możliwe ... Fajnie!pieprzenie mózgu ,
77767572 bajtówWypróbuj online!
Jak to działa
Tłumacz rozpoczyna się taśmą 0 komórek.
To ustawia pierwszą komórkę na 8 , pozostawiając taśmę w następującym stanie.
To zwiększa raz drugą komórkę, trzecia komórkę 6 razy, czwarta komórka 4 razy, zmniejsza piątą komórkę raz, a następnie wraca na początek taśmy i zmniejsza pierwszą komórkę. Po 8 iteracjach taśma wygląda następująco.
Przechodzimy do drugiej komórki i zwiększamy ją dwukrotnie, przygotowując się do wydrukowania cyfr.
Drukuje trzecią komórkę, zwiększa ją, a następnie wraca do drugiej komórki i zmniejsza ją. Po 10 iteracjach wydrukowaliśmy,
0123456789
a taśma wygląda następująco.Czas przygotować taśmę na litery! Zaczynamy od przejścia dwóch komórek.
To zwiększa jednokrotnie piątą komórkę, szóstą komórkę dwukrotnie, siódmą komórkę trzy razy, a następnie wraca do czwartej komórki i zmniejsza ją. Po 32 iteracjach taśma wygląda następująco.
Ostatnim krokiem przed wydrukowaniem listów jest przejście do piątej komórki i dwukrotne zwiększenie.
Na koniec przechodzimy do szóstej komórki, aby zwiększyć i wydrukować, zrób to samo dla siódmej komórki, a następnie wróć do piątej komórki i zmniejsz ją. Po 26 iteracjach wydrukowaliśmy
Aa...Zz
.źródło
Rubin, 42 bajty
Funkcja, która zwraca tablicę znaków. Program, który wyświetla tylko znaki, ma 49 bajtów:
To po prostu używa znaków ascii po obu stronach odpowiednich zakresów, aby zdefiniować zakres. Na przykład
?/...?:
oznacza znaki między ukośnikiem i dwukropkiem, z wyłączeniem końca. Aby pozbyć się początków, odejmujemy tablicę zawierającą trzy początkowe znaki.źródło
6502 język maszynowy,
747068 bajtówZrzut heksadecymalny (programy 6502 zasadniczo nie są relokowalne; kod tutaj jest przechowywany od lokalizacji 0603 $):
Widać, że nie wykorzystuje to żadnego z zabronionych bajtów: od 41 do 5 USD, od 61 do 7 USD lub od 30 do 39 USD.
Jest to funkcja bez argumentów, która po wywołaniu zwraca wskaźnik do tablicy znaków „abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789” u góry stosu, zgodnie ze standardowymi konwencjami wywoływania 6502.
Dla wyjaśnienia, oto demontaż:
Kod języka maszynowego sam się modyfikuje. Do manipulacji na stosie musiałem użyć PHA i PLA do popchnięcia i wyjęcia akumulatora, ale instrukcje te mają kody 48 $ i 68 $, które są zabronione (są to kody ASCII dla liter „H” i „h”). Tak więc dla PHA biorę liczbę 24 USD, wykonuję przesunięcie arytmetyczne w lewo (ASL) i przechowuję powstałe 48 USD w czterech miejscach w kodzie, w których trzeba ją wykonać. Następnie, w przypadku PLA, używam bitowego OR na 48 USD w akumulatorze, aby obliczyć 68 USD i przechowywać go w dwóch miejscach w kodzie, gdzie jest to potrzebne.
Było kilka instrukcji innych niż PHA i PLA, których również nie mogłem zastosować, ponieważ ich kody operacyjne są takie same jak litery lub cyfry ASCII, ale znalazłem bezpośrednie obejścia tych innych.
Pożądana tablica znaków jest obliczana i przechowywana od położenia 0 (tak naprawdę nie ma znaczenia, gdzie jest przechowywana, ponieważ musimy tylko upewnić się, że wskaźnik do niej zostanie zwrócony na górze stosu).
Możesz to wypróbować w asemblerze i emulatorze Nicka Morgana 6502 . Oto zrzut ekranu; pole monitora u dołu pokazuje ciąg wyjściowy (w lokalizacjach od 00 $ do $ 3D) po uruchomieniu programu.
źródło
Haskell ,
75 72 63 5856 bajtówWypróbuj online! Zadzwoń z
__
. Wynik:Dzięki xnor, który zasugerował
__
i_'
jako dwie bajty nazw zmiennych zamiast(!)
lub podobnych, oszczędzając 9 bajtów. Szczególnie podoba mi się to, jak_'
łamie podświetlanie składni. I jeszcze raz dziękuję xnor za uogólnienie zakresów, oszczędzając kolejne 4 bajty.Edit: I okazało się, że znaki Unicode są dozwolone jako identyfikatory w Haskell, więc na przykład
ä
,ö
... może być również używany jako dwóch identyfikatorów bajtowych. Ponieważ w programie pozostał jeden trzy bajtowy identyfikator, zastąpiłem goä
, oszczędzając kolejne 2 bajty.Wyjaśnienie:
__
i_'
są poprawnymi nazwami zmiennych. Ze specyfikacji języka :Więc kod jest równoważny z
Na liście zrozumieniem
a
zostaje związany'/'
ib
do':'
("/:"
odpowiada['/',':']
, więc dopasowywanie do wzorca powiedzie). Następnie zakres[a..]
tworzy ciąg wszystkich znaków większy równy'/'
:Dla każdego znaku
x
w tym ciągu jest następnie sprawdzane, czy'/'<x
ix<':'
, w wyniku czego powstają znaki0123456789
. Następniea
ib
są przyłączone@
i[
, uzyskując znakówABCDEFGHIJKLMNOPQRSTUVWXYZ
i tak dalej.źródło
__
i_'
jako zmiennych.Underscore is treated as a lower-case letter
regule._'_=[__|[_',__']<-["`{","@[","/:"],__<-[_'..],_'<__,__<__']
(w zmiennych normalnychz=[x|[a,b]<-["`{","@[","/:"],x<-[a..],a<x,x<b]
).__
zamiast,_'_
mimo że__
jest on używany jako identyfikator w rozumieniu listy.Perl (5.10 lub 5.12),
3029 bajtówTen program składa się głównie z niedrukowalnych znaków, więc oto zrzut heksowy:
Ten program jest bardzo prosty: regexujemy (
=~
) znak podkreślenia (_
; dzięki @Dennis za wskazanie, że to działa) przeciwko wyrażeniu regularnemu. Wyrażenie regularne jest określone jako wyrażenie, a nie dosłownie; w szczególności bierzemy bitowe uzupełnienie (~
) ciągu. Odwracając bitowe dopełnienie, aby dostać się do bazowego ciągu, otrzymujemy następujący regex, który jest wykonywany:W wersjach Perla 5.10 i 5.12
(?{…})
składnia była składnią eksperymentalną umożliwiającą regexom uruchamianie dowolnego kodu w czasie wykonywania. W tym przypadku używamy go do uruchomienia prostego programu Perl do wydrukowania pożądanego wyjścia. (Wersji wcześniejszych niż 5.10 nie można używać, ponieważ ich nie mająsay
.)Nowoczesne wersje Perla są
(?{…})
domyślnie wyłączone ze względów bezpieczeństwa, ale jeśli masz taką wersję Perla, możesz wyłączyć sprawdzanie (a tym samym uruchomić ten program) za-Mre=eval
pomocą argumentu wiersza poleceń (wraz ze standardem-M5.010
określającym wersję języka do wdrożenia, który nie jest wliczany do liczby bajtów).źródło
Właściwie
854 bajtówJak to działa:
Wydruk jest niejawny na końcu programu.
Edycja 1: Zastąpiono wstawianie alfabetu małymi / dużymi literami, a następnie zakresu liczb (10), po prostu otrzymywanie drukowanych znaków bazy 62.
Edycja 2: zmieniono „>” na „> dzięki Mego :) zapisano 1 bajt.
Wypróbuj online!
źródło
'>
jest bajtem krótszym niż">"
.PHP, 69 bajtów
Kod jest stylizowany przy użyciu Windows-1252 tutaj. Poniżej znajduje się odwracalny zrzut xxd .
Wypróbuj online!
źródło
Java (OpenJDK 9) , 277 bajtów
Tak, Java, dobrze to czytasz!
Wypróbuj online!
Spowoduje to wydrukowanie zakresów, ale zostanie odwróconych, ponieważ kolejność nie ma znaczenia.
Grałem przy braku reguły „brak danych wejściowych”, aby domyślnie zdefiniować,
char
która jest wymagana, aby całość działała. Jeśli to oszustwo, powiedz to.Niekluczone i testowanie
źródło
char
, w przeciwnym razie byłby to bułka z masłem. I szczerze mówiąc, moja odpowiedź jest krótsza niż odpowiedź początkowa. Spójrz na moje wyjaśnienie wszystkich kosztów ogólnych, przez które muszę przejść.Brainfuck,
8985 bajtówPonieważ i tak mózg ignoruje znaki alfanumeryczne, jest to tylko wyzwanie o stałej wydajności ... (Edycja: Zobacz rozwiązanie Dennisa dla wersji o 10 bajtów krótszej)
Wypróbuj online!
Ten kod jest dobrym przykładem podstawowych zliczonych pętli w pieprzeniu mózgu:
Zauważ, że używa to skrótów zawijania do generowania liczb, co oznacza, że interpreter musi mieć 8-bitowe zawijające komórki (takie jak ta, z którą się łączyłem).
źródło
JavaScript (ES6), 983 bajty
Okazuje się, że w ES6 jest wiele znaków, których można używać w nazwach zmiennych JavaScript ! Działa świetnie po wyczerpaniu sześciu 1-2-bajtowych nazw zmiennych przy pomocy
$
i_
.JavaScript, 1223 bajty
To była moja odpowiedź, zanim dowiedziałem się o powyższym.
Przebiegłem
console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')
przez jjencode i ręcznie wybrałem wynik golfa. Istnieje zdecydowanie więcej optymalizacji, które można wykonać.źródło
Befunge,
737259575553 bajtówWypróbuj online!
Jest to pojedyncza pętla odliczająca od
{
(tj. Jeden znak poz
). Podczas pierwszej iteracji"{"<
sekwencja wypycha dwie kopie{
na stos - jedna jest początkowym licznikiem pętli, a druga służy do zmniejszania tego licznika za pomocą sekwencji!!-
(dwie wartości NIE1
, które są następnie odejmowane). Podczas kolejnych iteracji licznik pętli znajduje się już na stosie, więc tylko jedna{
jest wymagana do ustawienia sekwencji zmniejszania.Reszta kodu to po prostu długie wyrażenie logiczne obliczające, czy znak znajduje się w zakresie. Jeśli tak, gałąź w drugim wierszu dzieli się w lewo, aby zapisać wartość. Jeśli nie, prawy oddział zawija się, aby sprawdzić, czy osiągnęliśmy zero i powinniśmy zakończyć. Dwie gałęzie łączą się w środku, aby przejść w górę i powtórzyć pętlę. Zauważ, że wszystkie polecenia kierunku pionowego idą w górę, ponieważ nie możemy użyć
v
, ale to dobrze, ponieważ wskaźnik instrukcji automatycznie zawija się u góry pola gry.Dzięki Mistah Figgins za początkowe opracowanie lepszej techniki przyrostu pętli.
Ale specjalne podziękowania dla Jo King za jeszcze lepsze podejście odliczanie niż wzrost, a także za bardziej kompaktowy układ gałęzi.
źródło
v
ponieważ jest to ograniczone źródło, ale nadal działa równie dobrze z^
. Dzięki.Galaretka ,
1716 bajtówWypróbuj online!
Jak to działa
źródło
Samomodyfikujący Brainfuck , 32 bajty
Wypróbuj online!
xxd -r
-wracalny zrzut heksadecymalny (zawiera niedrukowalne):źródło
@/
zrobić?`\x1a@\x1a/\n
ponieważ ich współrzędne kodowe są bardzo przydatne w grze w golfa. Nie możesz ich usunąć.+.
zamiast.+
.C, 128 bajtów
Tak, C. I nawet krótszy niż kilka ezoterycznych.
Wezwij
_
dostatecznie duży, pustychar *
bufor.Może być zależny od kompilatora bitów tee. Testowane przy użyciu GCC; plik został zapisany na stronie kodowej 1252.
źródło
JavaScript (ES6),
812745657650536520416 bajtówEdycja: przy użyciu kodowania ISO8859-1 to rozwiązanie ma 416 bajtów zamiast 520 bajtów. Pełny program ma 432 bajty, biorąc pod uwagę dodatkowe 16 bajtów dla
Jest to przesłanie funkcji, w przeciwieństwie do pełnego programu. Spędziłem dość dużo czasu grając w golfa JJEncode (za to polecam darrylyeo ), ale zamiast grać w golfa
Grałem w golfa
gdzie
Ø
jest inicjowany""
w kosztach ogólnych.Przepisane z operatorami przecinków przekonwertowanymi na nowe linie:
Wyjaśnienie
Ten skrypt rozpoczyna się od zainicjowania kilku wbudowanych typów i zmuszenia ich do ciągów znaków. Ciągi, które możemy uzyskać bez użycia znaków alfanumerycznych, to:
Z tych ciągów i niezbędnych cyfr w celu odniesienia do poszczególnych znaków, możemy uzyskać ciągi
return
iconstructor
, które mogą być używane w następujący sposób:Konstruktor obiektu jest
Object()
, a jego konstruktorem jestFunction()
, którego możemy zasadniczo użyćeval()
.W tym przypadku kodowany skrypt do wykonania jest zagnieżdżony
for
pętla łącząca wszystkie znaki alfanumeryczne z ciągiem znaków przy użyciu ich punktów kodowych i zwracająca go.W przypadku znaków alfabetycznych w kodowanym skrypcie, do których nie można uzyskać dostępu za pomocą wbudowanych funkcji, JJEncode używa ósemkowych znaków ucieczki do ich reprezentowania, a następnie dekoduje cały ciąg znaków, zwracając go z funkcji wewnętrznej. Następnie można wywołać funkcję zewnętrzną w celu wykonania źródła.
Próbny
źródło
Brain-Flak , 171 bajtów
Obejmuje +3 za
-A
Wypróbuj online!
Prawdopodobnie istnieje sposób, aby to zrobić bez powtarzania „funkcji” dodawania 1.
źródło
Julia 0.4 , 46 bajtów
Jest to ogólna funkcja zwracająca tablicę znaków.
Wypróbuj online!
Wersja alternatywna, 47 bajtów, tylko ASCII
Wypróbuj online!
źródło
J, 171 bajtów
Ow ... mój mózg boli ... Wypróbuj online!
Oto, dlaczego możesz zobaczyć wszystko w jednym wierszu (jednak nie będzie działał z podziałem wierszy).
Gwarantowana tylko praca z wersją J
j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52
, w tej kolejności. (Tylko pierwsze 12 znaków ma znaczenie.)Wyjaśnienie
Większość programu poświęcona jest ciągłemu generowaniu. Po zastąpieniu tych stałych ich wartościami program wygląda następująco:
Po usunięciu niektórych nawiasów i poprawieniu niektórych liczb:
Ten składa się z bandą
,
i,~
S, które poprzedzić Append i argumentów. Oto osobne wartości:":26
('.',~10{9!:14'')
'+/'
(":65 97 48)
','
(':',~12{9!:14'')
1
jest26
jak ciąg.9!:14''
generuje następujący ciąg znaków na TIO:z
2
, otrzymujemy10
th znak (i
odlinux
) i dodajemy.
go na końcu, dająci.
.3
i5
są oczywiste.4
to lista liczb65 97 48
w postaci ciągu.6
jest podobny do2
, z tym wyjątkiem, że jest to12
znak th (u
fromlinux
) i dodaje:
na końcu a, dającu:
.To wszystko razem daje
u:,65 97 48+/i.26
.".
ocenia to, dając nam:(Uwaga:
+/
jest uzupełnieniem tabelarycznym).Następnie, z
62{.
, bierzemy z tego pierwsze62
postacie, dając namABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
.źródło
<:<.^^*_
która zapisuje bajt. Próbowałem również wygenerować cały zakres i usunąć symbole, aby uzyskać':;<=>?@[\]^_`'-.~".(':',~(+:+:>.^*_){(*:>.^*_)!:(<:<.^^*_)''),":(#@}.@}.@}.@,~(+#\)],,~)(*:@#$])'+++++'
104 bajty. Jestem pewien, że może być znacznie krótszy05AB1E ,
181511 bajtów-4 dzięki Adnanowi, ponieważ jeśli rozmiar wejściowy to 1, 05AB1E użyje 0 dla b przy pierwszym poleceniu.
Wypróbuj online!
Próbowałem tak wielu różnych podejść, ale kluczowe kwestie, które utrudniały to:
źródło
You may print them in arbitrary order
mówi wyzwanie.•£•Ýç©á®þ«˜
również?Brainfuck, 55 bajtów
Wynik:
Wypróbuj online!
Inicjuje taśmę do 3,2 n i działa od tego momentu .
źródło
Perl 6 , 43 bajty - niekonkurujące
Lambda, która zwraca listę znaków.
Wyjaśnienie:
Zależy od poprawki błędu w interpretatorze Rakudo Perl 6, który został dzisiaj zaangażowany tylko w repozytorium git i nie jest jeszcze częścią oficjalnej wersji Rakudo. W rzeczywistości napotkałem błąd podczas odpowiadania na to wyzwanie i udało mi się go naprawić przy pomocy jednego z głównych deweloperów Perla 6. Zasady tej witryny, tak jak je rozumiem, nie pozwalają na konkurowanie odpowiedzi w takiej sytuacji, dlatego oznaczyłem ją jako niekonkurencyjną.
źródło
PHP 7.0+, 110 bajtów
Niech Bóg błogosławi bitowe łańcuchy!
Zamień na
\n
prawdziwą nową linię w stylu * NIX.Jest obecny w kodzie, aby uniknąć problemów z nowymi liniami, ale nie jest liczony w wyniku.
To rzuca wiele ostrzeżeń, ale można je stłumić, umieszczając
@
przed każdym zabłąkanym_
.Bez ostrzeżenia , 113 bajtów
źródło
65c02 język maszynowy + Apple] [ROM, 25 bajtów
Wydruki
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
.Powinien zacząć od
$8000
.Demontaż
źródło
10, 15, 26, 32, 44, 96, 128, 162, 169, 175, 192, 202, 208, 224, 237, 249, 253
, które odwzorowują znaki, w↵.. ,`.¢©¯ÀÊÐàíùý
których.
s są znakami , które nie mogą być drukowane. Jest ważnybash (na Linuksie),
507493490485 bajtówprzechowuje tablicę znaków w zmiennej globalnej
__
należy go wykonać na świeżo uruchomionym komputerze z systemem Linux
/proc
lub w przestrzeni nazw pidwyjaśnienie:
aby to wypróbować, możemy dodać
declare -p __
na końcu, aby wyświetlić wynikźródło
/proc
. W rzeczywistości/proc
nie jest to absolutnie konieczne w Linuksie, chociaż prawdopodobnie trudno byłoby znaleźć nowoczesną dystrybucję bez niego.JavaScript, 1273
13511610bajtyTo rozwiązanie działa w zasadzie tak samo jak dwóch innych odpowiedzi dotyczących tego wątku tutaj i tutaj , gdzie używa litery z
true
,false
,undefined
i[object Object]
ciągów zbudować funkcje potrzebne do wygenerowania inne litery.Ponieważ znaczna liczba liter jest już umieszczona w obiekcie, próbowałem dodać wszystkie pozostałe małe litery i cyfry do obiektu, a następnie zastosowałem
toUpperCase
do wszystkich wartości w obiekcie, aby wygenerować brakujące duże litery.Aktualizacja:
Udało mi się poprawić sposób ustawiania wartości ósemkowych, ale nadal zajmują one 13 x 30 bajtów (lub będą miały 30 bajtów każdy po zmianie liczb na różne klucze), teraz każdy podąża za tym ogólnym wzór:
$.ž=\'\\'+$.一+$.七+$.二+'\';
.Dodatkowe 49 bajtów można łatwo wyjąć, przełączając klawisze cyfr na znaki 2-bajtowe.
Aktualne zgłoszenie:
źródło
C (brzęk) , 164 bajty
Wypróbuj online!
Jest to funkcja rekurencyjna, która pobiera znaki, zaczynając od wartości 1 (odejmując od siebie i zwiększając), i tworzy z niej wszystkie inne liczby.
Nieskluczone / Wyjaśnienie:
źródło
CJam , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
𝔼𝕊𝕄𝕚𝕟, 8 znaków / 19 bajtów
Wypróbuj tutaj!
ᶐ
jest wielkimi literami,ᶛ
jest małymi literami i⩥Ⅹă⬯
ma zakres (⩥
) od0
do10
(Ⅹ
cyfra rzymska unicode) minus1
, połączone przez (ă
) nic (⬯
).źródło