Do druku znaków ASCII (kody hex 20 do 7e) w kolejności są:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Pamiętaj, że jest tam miejsce).
Ciąg ten wyraźnie zawiera wszystkie drukowane znaki ASCII co najmniej raz w kolejności rosnącej podczas czytania od lewej do prawej, ale nie w malejącej kolejności.
Ciąg
REVERSED:~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! NORMAL: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
zawiera wszystkie drukowane znaki ASCII co najmniej raz, zarówno w kolejności rosnącej, jak i malejącej. Innymi słowy, gdy znaki są wyceniane za pomocą kodu numerycznego, najdłuższe rosnące i najdłużej malejące podsekwencje mają długość 95 (liczbę drukowalnych znaków ASCII).
Wyzwanie
Wybierz ciągły podzbiór N drukowalnych znaków ASCII, takich jak LMNOP
(N = 5). Napisz program, używając tylko tych N znaków, których wynik zawiera wszystkie 95 znaków ASCII w porządku rosnącym i malejącym, jak w powyższym przykładzie.
Zwycięzcą jest zgłoszenie z najniższą N. W przypadku remisów wygrywa najkrótszy kod w bajtach.
Notatki
- Ciągły podzbiór oznacza zestaw drukowalnych ASCII, które wszystkie pojawiają się w nieprzerwanej linii, takiej jak
LMNOP
lub89:;<=>
. - Twój ciągły podzbiór może „zapętlić się” z
~
miejsca na kosmos, ale to powoduje karę +3 na N. Tak więc{|}~
ma N = 4, ale{|}~ !
ma N = 6 + 3 = 9. - Twój program może zawierać tylko N drukowalnych znaków ASCII z wybranego przez ciebie ciągłego podzbioru. Nie wszystkie muszą się pojawiać i mogą pojawiać się wiele razy w dowolnej kolejności. (Wszystkie niedrukowalne ASCII i wszystkie nie-ASCII są niedozwolone. Oznacza to, że tabulacje i znaki nowej linii są niedozwolone.)
- Dane wyjściowe mogą zawierać tylko drukowane znaki ASCII i muszą mieć mniej niż 10000 znaków.
- Najdłużej rosnące i malejące podsekwencje wyjściowe muszą mieć długość 95 (jak wyjaśniono powyżej).
- Wyjście na standardowe wyjście. Brak danych wejściowych.
- N jest dodatnią liczbą całkowitą mniejszą niż 96.
źródło
Odpowiedzi:
Unary, N = 1
14680262330376163203871465704220787333741951071 bajtów
Używa tylko bajtu „0” (ASCII 49).
Grał w golfa około 4.13253e + 60 bajtów z rozwiązania @ Comintern. Kredyt wciąż mu :)
W oryginalnym Brainfuck:
źródło
Unary , N = 1
4132527913354820031118363262102424570092493175835499123283719 (4,1325279e + 60) bajtów
Kod źródłowy w unary jest oczywiście zbyt duży, aby opublikować tutaj. Można go łatwo odtworzyć, wpisując (lub generując) plik wypełniony „0” o tej samej długości co liczba bajtów powyżej.
Oto reprezentacja binarna:
I równoważny kod Brainf ** k (podział linii dla przejrzystości):
Wynik:
EDYCJA: Grał w golfa 9.097887e + 87 niepotrzebnych znaków.
źródło
Brainfuck, N = 2
24 383 bajty. Używa tylko - i. (ASCII 45 i 46). Wypróbuj tutaj: http://esoteric.sange.fi/brainfuck/impl/interp/i.html . Prawdopodobnie można go przeanalizować jako kod Morse'a z odpowiednimi spacjami.
Wymaga interpretera zgodnego z tradycyjną definicją Brainfuck, która wykorzystuje tablicę (co najmniej) 30 000 bajtów komórek, wszystkie zainicjowane na zero.
źródło
-
, następnie część zstępująca,.-.-.etc
a następnie część wstępująca (grupy 255,-
po których następuje a.
) O ile mogę stwierdzić, to wszystko tam jest. Wyjaśnij także edycję mojej odpowiedzi.-
z jednym.
na końcu :). Mój błąd.CJam - N = 3; 7659 bajtów
Wypróbuj na http://cjam.aditsu.net/
źródło
Brainf ** k, N = 4
Mój pierwszy program do pieprzenia mózgu. Wykorzystuje 3 znaki poza blokiem
+,-.
(Ascii 43 do 46.)410 bajtów (jeden
.
można usunąć z programu, jeśli liczba podwójna~~
może zostać zredukowana do jednej~
).Oto lista poleceń w tym obszarze tabeli ASCII (nie potrzebuję polecenia wejściowego):
Na szczęście pozostałe polecenia
<>[]
(przesuwanie wskaźnika danych i wykonywanie skoków warunkowych) nie są wymagane!Podziel na 3 linie dla zachowania przejrzystości: 1: Przyrost, aż dane osiągną 32. 2: Wyjście i przyrost, aż dane osiągną 126. 3: Wyjście i zmniejszenie, aż dane osiągną 32.
Wynik
Edytuj N = 2
Na odpowiedź @ nneonneo można zastąpić każdy
+
255-
znakami dla N = 2. pewne przegrupowanie kodu i wyjścia (wyświetlanie w dół, a następnie w górę) oznacza, że pierwszy wiersz można zmniejszyć do 256-126 = 130-
znaków. To przyszło mi do głowy po tym, jak poszedłem spać i nikt mnie nie pobił. https://codegolf.stackexchange.com/a/35801/15599źródło
~
zamiast,~~
ponieważ wciąż rosną i maleją podsekwencje.DO; N = 43 = 40 + 3
Unikam tutaj takich pospolitych znaków, jak
+
-
*
/
cyfry0-9
, przecinki,
i średniki;
.Byłem więc zmuszony do wyrażenia różnych liczb przy użyciu samych operacji
&
%
~
.Dalsza gra w golfa może być możliwa (znalezienie najmniejszych reprezentacji dla liczb 63 i 95 jest ćwiczeniem dla czytelnika).
Podzbiór ascii to 32 ... 41 i 97 ... 126.
Nie jestem pewien, czy znaki nowego wiersza są dozwolone w kodzie; jeśli nie, po prostu je usuń.
źródło
Wir , N = 2, 6486 bajtów
Używając tylko 2 znaków
01
.Wynik :
Myślę, że mogę grać w golfa więcej za pomocą pętli, ale kodowanie z zerami i jedynkami było okropne, więc tego nie zrobię.
Skomentował
Zauważ, że jest
O
il
jak0
i1
.źródło
Python 2.7 N = 45 = 42 + 3
To używa
string.printable
, sortuje i wypluwastdout
. I zapisać kilka znaków przez włożeniem.
wstdout.write
za pomocąeval
i ciąg formatowanie przy użyciuord
wartości znaków można używać.Koniec ze starym - N = 49 = 46 + 3
Niestety, chociaż python zawierastring.printable
listę, nie jest to kolejność ascii i nie ma sposobu, aby używać go bez a*
lub a.
, więc potrzeba mniej znaków, aby to zrobić ręcznie.Korzystanie z zakresu znaków:
Wersja oczywista: N = 63 = 60 + 3
To jest oczywista wersja wykorzystująca zakres znaków:
źródło
len('x')
oszczędzam mi kolejne 2 znaki.import
rozwiązanie będzie działać tylko wtedy, gdy masz;
, co dodaje znaczną liczbę znaków.DO; N = 61 = 58 + 3
Aby zrekompensować użycie tak dużego podzbioru, grałem w golfa w swoim kodzie.
Podzbiór ASCII to 32 ... 59 i 97 ... 126.
Unikanie
=
postaci było zabawnym wyzwaniem !źródło
;
. Być może będziesz w stanie użyć tego do rozszerzenia swojej odpowiedzi, bez stania się kopią drugiej.Python 2.7 N = 28 + 12 + 3 = 43
Używanie znaków,
cdefghijklmnopqrstuvwxyz{|}~
a następnie zawijanie do!"#$%&'()*+
Aby uniknąć używania
,.-
, musiałem użyć kilku sztuczek. Użyłem,exec
więc mogę przekształcić kod w ciągi, które pozwoliły mi używaćchr(ord('+') + len('xxx'))
dla.
ichr(ord('+') + len('x'))
dla,
. Każde miejsce, w którym potrzebowałem -1, użyłem ~ 0 w postaci~len('')
. Aby tego uniknąća
, użyłemchr(ord('c') + ~len('x'))
(99 - 2).Ciąg, który się skomponuje, ma N = 48, używa znaków,
abcdefghijklmnopqrstuvwxyz{|}~
a następnie zawija do!"#$%&'()*+,-.
Pamiętaj, że nowe wiersze i komentarze służą wyłącznie do odczytu.
źródło
Rubin - N = 48
Niech Ruby będzie Ruby i obejmie karę zawinięcia.
N = 48 <- 15 ('' - '.') + 30 ('a' - '~') + 3
lub
Stare:
N = 72 {punktacja liniowa} <- 72 ('.'-' u ') + nieprawidłowe znaki nowej linii
Jest tu trochę wymachiwania, aby uniknąć „v” w „wstecz”. Zostawiłem to, ponieważ lubię hack paczki („C *”).
źródło
x86_64 Kod maszynowy, format Mach-O
N = 2, 32768 znaków (zbyt duży, aby zmieścić się w limicie msg)
Edycja: Pastebin nie działa, więc pełny tekst można znaleźć pod adresem : http://www.ionoclast.com/random/golf.bin.txt
źródło
#include <unistd.h> int main() { char const s[] = "~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"! !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; write( 1, s, sizeof s ); }
Montaż powinien być znacznie lepszy.Rubin, N = 27
Używa
$
przez>
.źródło
Scala, N = 69
Wykorzystuje znaki
01246789\bdefu
( znaki ucieczki Unicode) jako fantazyjny sposób pisania(' 'to'~')++('~'to' ')map print
.źródło