Istnieje mnóstwo pytań dotyczących rysowania kształtów za pomocą gwiazdek - więc pomyślałem, że przy tak wielu gwiazdkach powinniśmy narysować jedno, używając tabeli ASCII.
Wyzwanie
Twoim zadaniem jest napisanie programu lub funkcji, która nie pobiera danych wejściowych i wyświetla następujący tekst:
!
"#
$%
&'
()
*+
,-
./
01
23456789:;<=>?@ABCDEF
GHIJKLMNOPQRSTUVWXYZ[
\]^_
`a bc
de fg
hi jk
lm no
pq rs
tu vw
xy z{
|} ~
W celach informacyjnych ta witryna zawiera pełną tabelę ASCII.
Zasady
- Wynik powinien być dokładnym tekstem, jak pokazano powyżej. Wiodące / końcowe białe znaki są dozwolone.
- Obowiązują standardowe luki w grze w golfa - brak czytania tego ryzyka ASCII z Internetu itp.
- To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie (w bajtach).
code-golf
string
ascii-art
kolmogorov-complexity
FlipTack
źródło
źródło
Odpowiedzi:
05AB1E ,
4038373635 bajtówWypróbuj online!
Wyjaśnienie
źródło
žQ2ôÐ9£s30£R21£RøsrR18£R2ôvyN·ð×ý})˜.C»
, Mam 39 lat, ale myślę, że możesz trochę zgolić za pomocą ZIP.Python 3 , 110 bajtów
Generuje szablon
%c
za pomocą forx
, a następnie używa interpolacji ciągów wrange(32,128)
celu wstawienia wartości ASCII do wzorca.Wypróbuj online!
Python 2 jest dłuższy o jeden bajt, z dłuższym rozpakowaniem krotki, ale krótszy
print
.źródło
V ,
54, 50 bajtówWypróbuj online!
W przeciwieństwie do zwykłego programu ten nie zawiera znaków, które nie mogą być drukowane.
Wyjaśnienie:
Teraz bufor wygląda następująco:
Teraz budujemy środek:
Tutaj robi się trochę dziwnie.
Oto ważna uwaga.
>
Komenda jest rzeczywiście operatora , co oznacza, że nie robi nic bez argumentu, tekst działać dalej. Na przykład,Ale ponieważ to polecenie jest w pętli, możemy zapisać znak, nie dając operatora. Na końcu pętli, jeśli jakiś operator oczekuje, wypełnia
_
(bieżący wiersz) jako argument niejawnie.Przyznaję, że ta pętla jest trochę dziwna i trudno jest śledzić, jak powinien wyglądać cały tekst w danym momencie. Możesz więc użyć tego prostszego programu, aby zobaczyć, jak będzie wyglądał po N pętlach.
Jeśli ustawisz na 9, zobaczysz, że mamy trochę dodatkowego tekstu do pozbycia się. (Tylko bieżąca linia).
Więc usuwamy bieżącą linię za pomocą
dd
. Ale poczekaj! Wiesz, jak powiedziałem, że operatorzy muszą wziąć argument, który jest czasem domyślnie wypełniony? Argumenty są również domyślnie wypełniane na końcu programu. Więc zamiastdd
lubd_
(które są równoważne), możemy po prostud
i pozwolić V wypełnić_
dla nas.źródło
ÿ
Python 3
170165155147 bajtówTak dużo grałem w golfa, zapomniałem, jak to działa ...
Wypróbuj online!
źródło
JavaScript (ES6),
156…115114 bajtówNiestety niesławny
String.fromCharCode()
kosztuje 19 bajtów.Sformatowane i skomentowane
źródło
String.fromCharCode(...[...Array(n)].map(_=>k++))
aby zaoszczędzić 4 bajty.String.fromCharCode()
tablicy, ale wybrałem inne podejście. W każdym razie dzięki!QBIC ,
153151 bajtówTo naprawdę tylko seria pętli FOR i rzutowania int na postać (
chr$()
).Przykładowe dane wyjściowe:
źródło
Perl , 113 bajtów
112 bajtów kodu +
-l
flaga.Wypróbuj online!
źródło
PHP,
1101051039391 bajtówwypisuje wiodącą nową linię. Uruchom go
-nr
lub przetestuj online .Podstawowa zasada została przejęta z Arnauld, ale to się powtarza.
Wykorzystuje także niejawne typecasty PHP:
NULL na int dla indeksu ciągów, zmiennoprzecinkowe na int dla
%
, boolean na int dla&
i dla+=
.objaśnienie pseudo kodem
źródło
Pyth , 53 bajty
Program, który drukuje wynik.
Wypróbuj online!
Jak to działa
srdC127
tworzy listę drukowalnych znaków ASCII i łączy je w ciąg znaków.c....,18 60
dzieli ten ciąg według indeksów18
i60
daje listę trzech ciągów odpowiadających różnym częściom wyniku: góra, środek i dół..e
rozpoczyna wyliczoną mapę nad ciągami z ciągami asb
i ich indeksami jakok
.[...)
tworzy listę zawierającą pożądaną akcję dla każdej części diagramu. Prawidłowe działanie wybiera się, indeksując do listy z bieżącym indeksem, używając@...k
.Top
cb2
dzieli ciąg na pary znaków i+L*9;
wstawia9
spacje do każdej pary.Środkowy
c2b
dzieli ciąg na dwa ciągi o równej długości.Dolny
cL2cb4
dzieli ciąg na grupy po cztery znaki, a każda grupa na pary..e
rozpoczyna wyliczoną mapę, z parami ciągów asZ
i ich indeksami jakoY
.j*yYdZ
łączy pary w2*Y
spacje i+*-8Yd
dodaje8-Y
spacje.js
scala wszystkie wyniki i dołącza wynikową listę do nowych linii. Jest to następnie domyślnie drukowane.źródło
Haskell , 144 bajty
Wypróbuj online!
Wyjaśnienie:
b!n=[1..n]>>b
definiuje funkcję,!
która powtarza listę lub ciąg-b
n
razy.unlines([" "!9++p]!9++["*"!21]!2++[" "!(8-n)++p++" "!(2*n)++p|n<-[0..8]])
używa tej funkcji, aby narysować gwiazdkę gwiazdek (o ironio!):#
jest zdefiniowany jako funkcja, która sukcesywnie zastępuje*
w łańcuchu znakami z danej listy. Nazywa się to powyższą gwiazdką gwiazdek i[' '..]
jest nieskończoną listą wszystkich znaków rozpoczynających się spacją' '
.źródło
" "!(2*n)
może być"(TWO SPACES)"!n
.Węgiel drzewny , 39 bajtów (niekonkurencyjny)
Wypróbuj online! AST zapewnił wyjaśnienie,
χ
ponieważ jest to zmienna wstępnie zainicjalizowana dla10
.źródło
J, 63
(nie konkuruje)wyrażenie ocenia od prawej do lewej w ten sposób:
i: 10
liczy od -10 do +10|
weź abs, aby uzyskać od +10 do 0 z powrotem do +10=
sklasyfikuj sam, aby uzyskać kształt V z 1 w bloku zer|.
odwróć kolejność wierszy, aby uzyskać kształt / \( +. 1&|."1 )
wyrażenie przechwytujące przesuwa każdy wiersz dokładnie o jeden, a OR z oryginałem( 9 21&$@{. , 1: , 1: , }. )
zagnieżdżone widelce do układania w poziomie i rozciągania góry,
zrównać blok z liniową sekwencją dla kumulacji( * +/\ )
kumuluj i mnoż się z sobą20 21 $
przywróć kształt do bloku 20 rzędów 21 elementów31 +
dodaj 31, ponieważ pierwszy 1 powinien być kodem spacji 3232 >.
piętro przy 32a. {~
wybieraj znaki z wbudowanego asciiźródło
smoutput
polecenie lub równoważneRuby, 91 bajtów
Nie golfił
źródło
Brakowało mi odpowiedzi w C #, więc ...
C # (.NET Core) ,
175174 bajtówWypróbuj online!
źródło
int
s do pętli for:for(int i=0,j,d=32,s=1;i<54;i++)for(j=0
Tcl , 209 bajtów
Wypróbuj online!
Tcl , 212 bajtów
Wypróbuj online!
tcl, 213
próbnytcl, 214
próbny
tcl, 227
próbny
tcl, 236
próbny
tcl, 237
próbny
Alternatywne podejście o tym samym rozmiarze:
próbny
Tcl, 288
próbnytcl, 297 bajtów (próba naiwna)
próbny
źródło
Poetycki , 899 bajtów
Wypróbuj online!
Poetic to esolang, który zrobiłem w 2018 roku dla projektu klasowego. Jest to po prostu pieprzenie mózgu z długimi słowami zamiast symboli.
Ten wiersz jest ... przygnębiający. 😟
źródło
Python 2.7,
194188 bajtówźródło
map(chr
namap(c
tak, jakc
już zdefiniowano jakochr
Jq 1,5 , 180 bajtów
Rozszerzony
Wypróbuj online!
źródło
Ukośniki ( /// ), 324 bajty
Pierwszą (domyślną) czynnością w ukośnikach jest „print”, więc ciąg jest drukowany.
/
I\
musi być poprzedzona postępowaniem\
s.źródło
Java 8,
176173 bajtówPort @Charlie „s C # .NET odpowiedzi , więc upewnij się, aby go upvote.
-3 bajty dzięki @ceilingcat .
Wypróbuj online.
źródło