Często podczas gry w golfa chcę wiedzieć, jaka jest wartość ASCII pewnej postaci. Jednym z moich ulubionych zasobów do szybkiego wyszukiwania wszystkich drukowanych znaków ASCII jest ASCIItable.com . To naprawdę fajny obraz, który pokazuje nie tylko drukowalne znaki ASCII i ich wartości, ale także niedrukowalne i rozszerzone znaki oraz wartości w formacie szesnastkowym, ósemkowym i HTML:
Dzisiejsze wyzwanie polega na odtworzeniu tej tabeli ASCII jako tabeli ASCII zamiast obrazu. Aby uprościć sprawę, nie będziemy używać znaków kontrolnych (znaki poniżej 32) i pokażemy tylko wartość dziesiętną i znak. Innymi słowy, Twoim wyzwaniem jest napisanie pełnego programu lub funkcji, która drukuje lub zwraca następujący tekst:
Dec Chr | Dec Chr | Dec Chr
----------------------------------
32 Space | 64 @ | 96 `
33 ! | 65 A | 97 a
34 " | 66 B | 98 b
35 # | 67 C | 99 c
36 $ | 68 D | 100 d
37 % | 69 E | 101 e
38 & | 70 F | 102 f
39 ' | 71 G | 103 g
40 ( | 72 H | 104 h
41 ) | 73 I | 105 i
42 * | 74 J | 106 j
43 + | 75 K | 107 k
44 , | 76 L | 108 l
45 - | 77 M | 109 m
46 . | 78 N | 110 n
47 / | 79 O | 111 o
48 0 | 80 P | 112 p
49 1 | 81 Q | 113 q
50 2 | 82 R | 114 r
51 3 | 83 S | 115 s
52 4 | 84 T | 116 t
53 5 | 85 U | 117 u
54 6 | 86 V | 118 v
55 7 | 87 W | 119 w
56 8 | 88 X | 120 x
57 9 | 89 Y | 121 y
58 : | 90 Z | 122 z
59 ; | 91 [ | 123 {
60 < | 92 \ | 124 |
61 = | 93 ] | 125 }
62 > | 94 ^ | 126 ~
63 ? | 95 _ | 127 DEL
Końcowe spacje w każdej linii i końcowy znak nowej linii są dozwolone. Ponieważ jest to wyzwanie złożoności Kołmogorowa , Twoje zgłoszenie nie może przyjmować żadnych danych wejściowych ani uzyskiwać dostępu do żadnych zasobów zewnętrznych (takich jak plik lub sieć), a Twoim celem jest skompresowanie kodu w celu uzyskania jak największej ilości tego tekstu.
Obowiązują standardowe luki, a najkrótsza odpowiedź w bajtach wygrywa. Miłej gry w golfa!
źródło
Odpowiedzi:
Python 2,
185183175159 bajtówZaoszczędź 8 bajtów dzięki FlipTack!
Wciąż całkiem nowa gra w golfa w Pythonie.
Używa zagnieżdżonej listy do wygenerowania treści tabeli.
Nie golfowany:
Stara próba,
185183175 bajtówNie golfowany:
źródło
Befunge,
176172 bajtówWypróbuj online!
źródło
Pyth,
89857977 bajtówWypróbuj online!
źródło
JavaScript (ES6),
179173 bajtówźródło
`${x='Dec Chr '}| ${x}| ${x}
na końcu wiersza 2(x='Dec Chr ')+(' |'+x)*2+`
*
operatorem. A może w jakiś sposób źle rozumiem twoją sugestię?V ,
98, 96, 94 bajtówWypróbuj online!
Wystarczy ledwo piszczenie w czasie krótszym niż sto. Zobaczę, czy dam radę pokonać Pytha, ale nie złożę żadnych obietnic.
Oto zrzut heksowy:
A oto jak to działa:
Tutaj jest ciekawie. Najpierw wyjaśnię sztuczkę vim. W trybie wstawiania niektóre znaki są wstawiane (wszystkie drukowane znaki ASCII, większość niezmapowanych znaków powyżej
0x7f
i kilka innych), ale inne znaki mają efekt uboczny. Na przykład0x1b
(<esc>
) przejdzie do trybu normalnego.0x01
(<C-a>
) ponownie wstawi ostatni wstawiony tekst itp. Czasami chcemy wstawić te znaki dosłownie. Aby wstawić dosłowny znak zmiany znaczenia, musisz wpisać<C-v><esc>
. Działa to dla wszystkich postaci, które mają efekt uboczny. Zasadniczo<C-v>
jest to odpowiednik odwrotnego ukośnika w językach z literałami ciągów, które pozwalają ci uciec się od niektórych znaków w ciągu.Inną przydatną sztuczką
<C-v>
w trybie wstawiania jest to, że można go używać do wstawiania znaków według punktu kodowego , w formacie dziesiętnym, szesnastkowym, ósemkowym lub szesnastkowym. Ponieważ mamy już liczby odpowiadające pewnym wartościom ASCII, musimy po prostu wstawić<C-v>
przed tymi znakami i uruchomić odpowiedni tekst jako naciśnięcia klawiszy vim. Można to osiągnąć za pomocą polecenia regex i polecenia „Do 'x' w każdej linii”. Więc my:W tym momencie bufor wygląda następująco
Teraz potrzebujemy tylko ogólnego czyszczenia, które odpowiada za większość bajtów w tej odpowiedzi
źródło
F #, 222 bajty
Wypróbuj online!
źródło
["ab"; "cd"] |> c |> p
, połączy się to z „|” znaków i drukuje je, np. „ab | cd”, który jest podstawowym pomysłem na wydruk tabeli. Reszta jest dość prosta, w miarę możliwości unikając białych znaków.dc , 167 bajtów
Wypróbuj online!
Jak to działa:
źródło
Perl, 120 bajtów
Uruchom z
-E
flagą:-2 bajty dzięki @GB .
źródło
C, 179 bajtów
Wypróbuj online!
Częściowo nie golfowy:
źródło
Rubin, 124 bajty
źródło
V ,
151150148136135130129125 125 bajtów12 bajtów zapisanych dzięki @ nmjcman101 do używania
<C-v>g<C-a>
liczb zamiastline('.')
2 bajty zapisane dzięki @DJMcMayhem do usuwania linii z wiodącymi spacjami za pomocą
ÇÓ/d
i za pomocądê
do usuwania dodatkowych spacji i przestawiania rzeczyTa odpowiedź konkuruje z odpowiedzią V @ nmjcman101 (która wykorzystuje
:set ve=all
).Ale teraz znalazłem sposób, aby usunąć teA ^[
i zaoszczędzić trochę bajtów, a my jesteśmy na parzystej liczbie bajtówWypróbuj online!
Hexdump:
Wyjaśnienie (niekompletne i nieaktualne)
Strategia polega na tym, że używam numerów linii do generowania punktów kodowych ASCII.
Uwaga:
^[
jest0x1b
,^V
jestC-v
Najpierw generujemy wszystkie postacie.
Bieżący bufor wygląda
Teraz wstawiamy nową linię między tymi znakami
źródło
32 SPACE ... 127 DEL
części kodu: Wypróbuj online! Używa tej schludnej rzeczy, w której możesz podświetlić kilka liczb, a następnieg^A
sprawia, że jest to rosnąca sekwencja (nowa w Vimie 8?):set ve=all
a następnie kursor przesunie się w miejsca, w których nie ma tekstu, umożliwiając łatwiejsze wstawianie rur i kopiowanie / wklejanie w miejscach, w których potrzebujesz, bezA <esc>
g^A
dzięki, uratowało mi to 12 bajtów :)V ,
13012099 bajtówKlub Sub 100. Nie jestem już przekonany, że
:se ve=all
to najlepszy sposób na zrobienie tego. To dodatkowe ... 11 bajtów tylko do pisania|
! Ale to właśnie mam.Publikuję to prawie konkurując z odpowiedzią @KritixiLuthos,
:se ve=all
aby uniknąć niektórychA <esc>
. Nie jestem przekonany, że którakolwiek z metod jest jeszcze lepsza, więc mam nadzieję, że może to zainspirować niektórych graczy w golfa i zobaczyć, która z metod jest lepsza.W połowie spodziewam się, że @DJMcMayhem skopie nam oba spodnie
Wypróbuj online!
Hexdump dla ciekawskich (jeśli będzie zainteresowanie, po prostu zmienię to na blok ukrytych znaków w stylu vim)
źródło
dd
jest to domniemane, jeśli po prostu to zrobiszd
. Możesz także zrobić<M-s>
to, co zawsze jest równoważne z\s
regex. Więc można skrócić go na adres:ç^ó*/d
. Ale jeśli zmienisz globalne polecenie dla odwrotności,:g!
możesz wyszukać każdą linię, która nie pasuje do znaku niebiałego.ÇÓ/d
co jest równoważne:g!/\S/normal dd
AWK , 200 bajtów
Sformatowany:
Wypróbuj online!
źródło
C 188 bajtów
Zwykle wygląda to tak:
źródło
C (249 bajtów)
Dodano nowe linie dla przejrzystości.
źródło
P
beprintf(
, jak pokazano tutaj: repl.it/JBRDJava,
434422321 bajtówJava prawdopodobnie nie jest najlepszym językiem do tego celu, ponieważ istnieje narzut klas i główna metoda ...
Główną metodę można wyeliminować za pomocą deklaracji statycznej, co dodatkowo zmniejsza odliczanie bajtów:
ale powoduje to błąd (po pomyślnym uruchomieniu):
Liczba bajtów int obejmuje znaki nowej linii lub wcięcia.
źródło
void main(){
, ani pomiędzywhile(s.length()<5)
is+=" "
. (Chyba że nie policzyłeś tego w liczbie bajtów). I można zaoszczędzić kilka bajtów, zmieniającd="Dec",c="Chr"
sięd=p("Dec"),c=p("Chr")
i podejmowania zmieniając połączeńp(d)
ip(c)
dod
ac
.Tcl , 233 bajty
Wypróbuj online!
źródło
32
na przykład („zamiast”Space
) i33!
(bez spacji pomiędzy33
i!
).R ,
235 228 221212 bajtówWypróbuj online!
Bardzo się starałem, aby uzyskać mniej niż 200 bajtów, ale te
paste
icollapse
mnie zabijają. Zwraca listę wierszy.źródło
JavaScript (ES6), 258 bajtów
źródło
PowerShell , 159 bajtów
Wypróbuj online!
Pierwsze dwa wiersze tworzą dosłowne ciągi znaków i pozostawiają je w potoku. Pierwszy używa operatora przecinka
,
do utworzenia tablicy, a następnie-join
s tej tablicy razem, aby utworzyć nagłówki. Drugi to zwykłe mnożenie ciągów.Trzeci wiersz iteruje
32..63
i każdej iteracji wysyła trzy wartości$_
,($_+32)
i($_+64)
do wewnętrznej pętli. Wewnętrzna pętla wykonujePadRight
wartość na (dodaje odpowiednie spacje, aby wstawić5
znaki). Jest to następnie łańcuch łączony+
z wynikiem zagnieżdżonego pseudo-trójskładnika( )[ ]
. Wybierze pseudo-trójargumentowy albochar
reprezentacja tego numeru, alboSpace
alboDEL
czy jest to odpowiednia wartość. Znów mamyPadRight
odpowiednie postacie.Te trzy kolumny (na przykład
32 Space
,64 @
,96 `
) są zamknięte w parens i-join
ed z markerami kolumn w jednym ciągu. Każdy z tych 32 łańcuchów jest następnie pozostawiany w rurociągu. Pod koniec wykonania domyślnieWrite-Output
wstawia nowy wiersz między elementami w potoku, więc otrzymujemy to za darmo.źródło
Perl,
165155 bajtówźródło
Python 2,
1564218 bajtówMój pierwszy golf, przepraszam za oczywiste błędy
Wypróbuj online!
Jeśli zastanawiasz się, pierwsza wersja była ciągiem zakodowanym w standardzie base64.
źródło
ljust(6) for
.x in [
. I IIRC nawiasy kwadratowe w środkujoin
można usunąć.05AB1E ,
8276 bajtówWypróbuj online!
Wciąż gra w golfa, można to znacznie poprawić.
žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø
wypycha wypełnione liczby odpowiednikiem tekstowym:vyð2×ý})3äøvy… | ©ý}
łączy je razem w tabeli:®”†… Chr ÿ”3ר¨'-34×.Á.Á»
dba o nagłówek tabeli:źródło
PHP,
163 149147 bajtówawaria
Używanie
%-N
jest warte bajtu, który zapisałyby prawe cyfry i znak.źródło
Stax , 53 bajty
Uruchom i debuguj
źródło
T-SQL, 242 bajty
Sformatowany:
Próbowałem kilku odmian, w tym zastępując różne popularne ciągi innymi zmiennymi, ale była to najkrótsza wersja, jaką znalazłem.
źródło
Python 3 , 154 bajtów
Wypróbuj online!
źródło
Attache , 144 bajty
Wypróbuj online!
źródło