Wydrukuj każdą postać, której Twój program nie ma

219

Twoim zadaniem jest zbudowanie programu (wykorzystującego tylko drukowane znaki ASCII i / lub tabulatory i znaki nowej linii), który wypisze dokładnie znaki w drukowanej przestrzeni ASCII ( 0x20do 0x7e), które nie pojawiają się w kodzie źródłowym programu (jednak w dowolnej kolejności wiele razy).

Wygrywa najkrótszy kod do wykonania tego w dowolnym języku.

Joe Z.
źródło
19
Są, ale nie są one w przedziale 0x20do 0x7e, które są określane jako „znaków ASCII”. Technicznie zakładki i znaki nowej linii są w rzeczywistości znakami kontrolnymi.
Joe Z.
3
Czy wolno nam drukować znaki nowej linii (lub inne znaki niedrukowalne ASCII)?
trzęsienie ziemi
1
Karty i znaki nowej linii nie są renderowane w taki sposób, że zajmują pozycję drukowania. Zmieniają pozycję. Zobacz funkcję „isprint” ANSI C.
Kaz
1
Jak ożywiło się to pytanie? Znowu zaczęło się głosować.
Joe Z.
3
@Timwi: Jeśli chcesz to zrobić, musisz również wypisać wszystkie znaki w przestrzeni znaków CJK (z wyjątkiem tych pojawiających się w kodzie). Jest to zbyt skomplikowane w zarządzaniu, więc ograniczyłem go do ASCII.
Joe Z.

Odpowiedzi:

274

Polyglot, 95

#undef X;A!"$%&'()*+-[,.]/0123456789:<=>?@BCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcghijklmopqrstvwxyz{|}~

Nic nie robi.

Johannes Kuhn
źródło
19
Nie, ale to jest polgot. Nie chcę tego niszczyć.
Johannes Kuhn
95
Podałem to do kompilatora GNU Fortran, co spowodowało błąd.
marinus
12
W C #undef X;whatever junk you wantdziała.
ugoren
6
Działa również w Pythonie (ponieważ używa #do komentarzy takich jak Ruby i Perl)
Klamka
87
„ Zwycięża najkrótszy kod do wykonania tego w dowolnym języku”. W przypadku braku kodu, który działa w dowolnym języku, ten wpis powinien wygrać, ponieważ jest to kod, który działa w największej liczbie języków. ;-D
msb
142

PHP 5.2, 4

<?<<

Zapisz jako plik wywołany NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.phpgdzieś w /home. short_open_tagmusi być Onw twoim php.ini.

Dane wyjściowe to:

PHP Parse error:  syntax error, unexpected T_SL in /home/wherever/NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php on line 1
Ry-
źródło
42
Haha, niezłe naginanie zasad.
Johannes Kuhn
6
Fajnie, ale niestety mogę zauważyć :sygnał wyjściowy.
Howard
78
Doceniam to, @TheGuywithTheHat, ale odpowiedziałem na to około rok temu, w przeciwieństwie do wczoraj.
Ry-
9
@TheGuywithTheHat To była jedna z odpowiedzi, gdy luka była zabawna, nowa i prowadziła do twojego linku do meta. Teraz już nie jest.
Johannes Kuhn
48

JavaScript - 88

alert("BCDFGHIJKMNPQUVXYZ".toLowerCase())// !#$%&'*+,-0123456789:;<=>?@[\]^_`{|}~AERTOWS

drukuje „bcdfghijkmnpquvxyz”

Xem
źródło
13
Wow, podoba mi się pomysł toLowerCase, jest genialny!
Pierre Arlaud
2
Możesz zapisać trzy znaki z odrobiną matematyki: "!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)ponieważ 95*72= 6840i przeniesienie zmarnowanych znaków do łańcucha pozwala na użycie cudzysłowów zamiast marnowania ich. Poza tym ukrywanie postaci w komentarzu jest tandetne.
Parasol
28

Biała spacja, 61 57 znaków

Nie jest najkrótszy, ale prawdopodobnie ma najprostszą logikę (tak naprawdę to tylko pętla).

Tutaj jest całkowicie komentowane, gdzie S jest spacją, T jest tabulatorem, L jest przesuwem wiersza:

SSSTSSSSSL     # push 0x20
LSSSL          # label S
SSSTL          # push 1
TSSS           # add
SLS            # duplicate top of stack
SLS            # duplicate again
TLSS           # output ASCII character
SSSTTTTTTSL    # push 0x7E
TSST           # subtract (result - 0x7E)
LTTSL          # branch to label S if top of stack is negative
LLL            # end

Dzięki @res za poprawienie powyższego (wymagany dodatkowy duplikat dla instrukcji rozgałęzienia) i mniejsze liczby do wypychania na stos.

DPenner 1
źródło
1
To nie działa tak, jak jest, ale można to naprawić, wstawiając duplikat na górze stosu (SLS) bezpośrednio przed gałęzią warunkową (LTTSL) - jest to konieczne, ponieważ polecenie gałęzi warunkowej usuwa górę stosu . Wynikowy 64-znakowy program działa zgodnie z reklamą. (Jeśli program jest przechowywany w pliku z rozszerzeniem .ws, można go przetestować online na stronie golf.shinh.org/checker.html )
res
1
Ponadto, długość program może być zmniejszona do 57 przy użyciu prawie ten sam program, ale z trzech popychany liczby -94, 127, 126 zmienione do 32, 1, 126, odpowiednio: SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL.
res
Wiem, że minęło ponad 5 lat, ale możesz zagrać w golfa 5 bajtów, zmieniając etykietę S na etykietę (pusta) ( LSSSLstaje się LSSLi LTTSLstaje się LTTL) i usuwając wyjście na końcu (trzy LLL). Wypróbuj online surowe 52 bajty lub tutaj z wyróżnieniem i wyjaśnieniem .
Kevin Cruijssen,
22

C, 83 74 69 znaków

main(z) {for(;++z<96;"\33iE!vk?}GkRP8z"[z/7]&1<<z%7&&putchar(z+32));}

Naprawdę próbowałem sprowadzić go poniżej 80 znaków, ale po prostu nie byłem w stanie tego zrobić. W końcu postanowiłem opublikować to, co mam, przy założeniu, że ja (lub ktoś inny) wymyślę rozwiązanie składające się z 79 znaków dziesięć minut po opublikowaniu tego. Okej, to nie było całkiem dziesięć minut, ale w zasadzie działało.

Naprawdę chciałem opublikować wersję, która nie musiała zawierać niepotrzebnego miejsca w kodzie źródłowym, ale wylądowała na dziwnej orbicie atraktora, odbijając się między garstką rozwiązań. Po wielu minutach próby wpchnięcia jednego z nich w stabilne rozwiązanie, poddałem się i dodałem przestrzeń.

chlebak
źródło
21

Skrypt golfowy, 26 24 znaki

"126,32>''+".~\-'.~\-"'-

Pobiera skrypt generowania zakresu, duplikuje go, wykonuje go, odejmuje go od wyniku, a następnie odejmuje kod odejmowania wyniku i drugi znak cudzysłowu.

John Dvorak
źródło
2
Cholera, to sprytne.
marinus
1
Usuń ''+, usuń program przed odejmowaniem, włóż noop .;(nie znalazłem lepszego sposobu na zakrycie kropki), użyj bloku kodu zamiast łańcucha -> {126,33>`-.;}.~16 znaków
Howard
Używając w dowolnej kolejności, bez względu na to, ile razy chcesz , możesz również usunąć średnik.
Howard
@Howard Obawiam się, że nie rozumiem twojego pomysłu. Możesz opublikować jako osobną odpowiedź.
John Dvorak,
@PeterTaylor Myślałem, że wydrukowałem spację?
John Dvorak,
20

Ryba - 80

zbcdjkpqruvwxaABCDEFGHIJKLMNOPQRSTUVWXYZ#!"'$%^&*()@!+-[]{},;:/\<>=?|~0123456789

Kiedy ryby popełniają błąd, drukuje „coś pachnie podejrzanie ...”. Ponieważ z jest złą instrukcją, od razu popełnia błąd

Cruncher
źródło
17

Wiem, że nie wygrywa żadnych konkursów. Chciałem tylko spróbować w języku, który nie jest zwykle używany, tylko do kopnięć.

Java - 209 195 152 140 znaków

class a{public static void main(String[]a){for(char c=0;;c++)System.out.print("publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:}".indexOf(c)<0?c:"");}}

Z podziałami i tabulatorami

class a{
    public static void main(String[]a) {
        for(char c=0;;c++)
            System.out.print("publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:"");
    }
}

Uwaga, jeśli wykonasz: program się nie kończy. Ha ha

Wyjaśnienie

  1. for(char c=0;;c++): Ponieważ a charmożna traktować jako int, używam tego na moją korzyść tutaj, aby zwiększyć wszystkie możliwe wartościc . Pomijam warunek zakończenia w pętli (ten, który przechodzi między dwoma średnikami), aby zaoszczędzić na znakach, ponieważ nie określono, że program musi się zakończyć. :)
  2. "publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:"": Niestety, nie jest to bardzo eleganckie podejście, ale wykonuje zadanie. Ręcznie wypisz każdy znak obecny w kodzie źródłowym jako Stringliterał, a następnie sprawdź, czy char cwystępuje w nim prąd indexOf(). Jeśli indexOf()połączenie zostanie zwrócone -1, nie istnieje i dlatego powinniśmy je wydrukować. Reszta po prostu używa potrójnego operatora, aby zaoszczędzić na postaciach i przestrzeni.
asteri
źródło
możesz coś wyjaśnić?
joey rohan
1
@joeyrohan Pewnie, właśnie dodałem wyjaśnienie poniżej. :)
asteri
fajne;) fajne rzeczy :)
joey rohan
2
Możesz umieścić CAŁĄ tabelę do wydruku ascii w komentarzu i stworzyć program Java, który nic nie zwraca. Pokonałbym twoją :-)
Pierre Arlaud
9
Mogłeś mi powiedzieć, że to wypisze każdą pojedynczą postać Unicode, zanim wykonam ją w moim terminalu.
nyuszika7h
14

Perl, 49 znaków

say grep/[^+-246\[-^aceghmprsy]/,map chr,041..126

To interesujące wyzwanie - to rodzaj anty-quine, a ja udało mi się kilka razy skrócić program, zwiększając zakres pojawiających się w nim postaci.

chlebak
źródło
14

Ruby, 81 78 68 66 62 57

(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}

Po prostu się sprawdza. Zduplikowane znaki zostały ręcznie usunięte.

Dzięki Josh za uratowanie 4 znaków i minitech za uratowanie 5 znaków!

Klamka
źródło
Nie możesz umieścić if po $> << x, aby zapisać jedną z linii końcowych?
Josh
@Josh Tak. Zrobię to teraz.
Klamka
Można go zabrać do 58:(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
Ry-
1
Ach, i przy lepszym wyborze nazwy zmiennej, 57:(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
Ry-
$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join55 bajtów przy użyciu innego podejścia.
twe4ked 12.03.17

12

Niezbyt poważnie, ale musiałem spróbować:

JSFuck (138152)

(tutaj skompilowane źródło)

Pierwotnym źródłem:

for(x=0x7e;x>0x19;x--){
    console.log(String.fromCharCode(x).replace(/[\[\]!\+\(\)]/ig, ''))
}

Wyświetla wszystkie znaki oprócz () + []!


2
(x)<=> [x][+[]], zwiększa rozmiar kodu, ale zmniejsza potrzebny alfabet.
FireFly,

12

Twoim zadaniem jest zbudowanie programu (używając tylko drukowalnych znaków ASCII i / lub tabulatorów i znaków nowej linii)

Rany, utrudniłeś APL (czy to delikatesy?)
Więc postanawiam zignorować wszystkie zasady !!!

APL (Dyalog), 3 10

⎕AV

Drukuje wektor atomowy (który zawiera wszystkie drukowalne znaki ASCII)


Okazuje się, że zupełnie zapomniałem o części „bez” ...
Ale to łatwa naprawa

⎕AV~'AV'''

~'AV'''oznacza wyklucz ( ~) znaki A, V i pojedynczy cudzysłów (oznaczone jako podwójne pojedyncze cudzysłowy)

Jeśli chodzi o drukowanie spoza ASCII, cóż, ignoruję wszystkie reguły.


„wypisz [s] dokładnie znaki w drukowalnej przestrzeni ASCII ( 0x20do 0x7e), które nie pojawiają się w kodzie źródłowym twojego programu”. Uważam, że dane wyjściowe mogą nie zawierać znaków poza drukowalną przestrzenią ASCII („dokładnie” to słowo kluczowe) , a Twój program zawiera litery „A” i „V”, więc nie należy ich drukować.
FireFly,

1
Przynajmniej będziesz chciał dodać ~do zestawu wykluczonych znaków. ;-) Btw, podobne rozwiązanie J byłobya.-.'a.-'''
FireFly

2
Możesz zignorować wszystkie zasady, ale to dyskwalifikuje cię od bycia zaakceptowaną odpowiedzią.
Joe Z.

11

GolfScript ( 18 16 znaków)

"),@`^^32>#.~".~

Demo online z dodatkową linią, która sprawdza poprawność i wyświetla liczbę błędnych znaków.

(Mam różne równoważne alternatywy. @`^Można je zastąpić \\`; #można je zastąpić przez `lub ]. Odpowiednią kombinację można zastosować z lewą Howarda, aby zrównać się z jego wynikiem 15, ponieważ odwrotne ukośniki nie muszą uciekać w bloki, tak jak robią to w literałach łańcuchowych: {),\`^32>].~}.~Ale Howard zasługuje na uznanie za tę sztuczkę).



2
Na szczęście ascii kończy się }~- jeszcze lepiej dla bloków kodu, zobacz moją nową odpowiedź ;-)
Howard

11

Brainfuck, 173

+++++[->++++++<]>>>++[------<+>]<++++>>----[----<+>]>-[-------<+>]>-[---<+>]<------->>-[---<+>]<+++++++++>>--[-----<+>]<+++++>>+[---------<++>]+++++++++++++[<[.+<]>[>]<-]\=,

Dość długo, mogę spróbować ponownie później.


6
napisz program, który nic nie robi i dodaj resztę ascii do źródła, najgorszy przypadek to 96 znaków.
Jasen

10

J ( 52 40)

Edycja: Duh, zapomniałem o e.

'''([email protected]#[)~95{32}a'(-.@e.#[)~95{.32}.a.

Stara wersja:

(>@(*/@('(>@*/''&~:).#]32{95}a'&~:)&.>)#])95{.32}.a.

Inny wariant (ta sama długość, ale mniejsza wydajność):

([#~*/"1@('([#~*/"1@''&:0)95{.32}a'&~:"0))95{.32}.a.

@JanDvorak: literówka
marinus

Cholera! Miałem nadzieję, że uda mi się wystarczająco nisko w Ruby, aby cię pokonać, a potem spadniesz aż do 40.: P
Klamka

Nowy wygląda na znacznie bardziej elegancki.
John Dvorak

1
@Doorknob: Mam jeden w APL, który ma tylko 24 znaki, ale zawiera znaki spoza ASCII.
marinus

Tak, zrobiłem ASCII, aby uniknąć języków takich jak APL.
Joe Z.

7

Python 3 - 68 61

x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"
exec(x)

... dzięki @WolframH za ulepszenia.


1
Myślę, że można umieścić exec(x)w nowej linii i zapisać ;in x. Ponadto w Pythonie 3 można używać x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)61 znaków (drukuje wiele spacji, co jest dozwolone).
WolframH

@WolframH genialny, dzięki!

7

PowerShell: 96

Należy zapisać i uruchomić jako skrypt.

diff([char[]](gc $MyInvocation.InvocationName))([char[]](32..126))-Pa|?{$_.SideIndicator-eq'=>'}

diff jest wbudowanym aliasem dla Compare-Object.

gcjest wbudowanym aliasem dla Get-Content.

$MyInvocation.InvocationName pobiera pełną ścieżkę do wykonywanego skryptu.

32..126jest dziesiętnym odpowiednikiem dla 0x20..0x7e, a zatem tworzy tablicę dziesiętnych kodów ASCII, których szukamy.

[char[]]pobiera zawartość następnego obiektu i umieszcza je w tablicy, dzieląc je i przekształcając na znaki ASCII. Mamy więc teraz dwie tablice znaków ASCII - jedną z tego skryptu, drugą zdefiniowaną przez kryteria wyzwania.

-Pa zestawy Compare-Object na format „Passthru”, więc na konsoli są wyprowadzane tylko te elementy, które znajdują się w różnych wejściach - wskaźniki, w których elementach znajdowały się dane wejściowe, które są nadal przechowywane w danych obiektu, ale nie są wyświetlane.

|?{$_.SideIndicator-eq'=>'}potok Compare-Objectwyjściowy do Where-Object, który filtruje go tylko do elementów, które są wyłączne dla drugiego wejścia.


Rozsądny i pouczający.
Stéphane Gourichon,

7

PHP - 92

<? //A"$%&'()*+[,.]0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#

Wynik:

nic

OP prosi o wydrukowanie wszystkich nieużywanych znaków, po prostu używam ich wszystkich


Co <?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'?
jocap

Wiedziałem, że będzie zgłoszenie, które po prostu wykorzysta wszystkie postacie.
MilkyWay90

To nie używa postaci!;>Xn
Jo King

6

JavaScript, 92

(function f(){for(i=32;126>i++;)!~(""+f).indexOf(c=String.fromCharCode(i))&&console.log(c)})()

Czy to uczciwe rozwiązanie? alert ('! "# $% ^ * + / -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [] ^ _` bcdfghijkmnopqsuvwxyz {|} ~') Wchodzi na 95 znaków i jest głupi jak diabli.: p

źródło
6

Java - 126 znaków

zminimalizowane:

class hjq{public static void main(String...w){for(char z='"'|0;++z!='a';)if("'()+.0;=OS".indexOf(z)==~0)System.out.print(z);}}

niezminimalizowane:

class hjq {
    public static void main(String... w) { 
        for (char z = '"'|0; ++z != 'a';) {
            if ("'()+.0;=OS".indexOf(z) == ~0) {
                System.out.print(z);
            }
        }
    }
}

Jest to interesujący problem, ponieważ poszczególne tokeny mogą skorzystać z ich dłuższej formy, ponieważ ponownie wykorzystuje znaki. Na przykład normalnie String[]byłby krótszy, ale String...eliminuje potrzebę nawiasów kwadratowych w ciągu warunkowym.

Znalazłem sztuczkę polegającą na próbie użycia znaków na początku i na końcu zakresu, aby można było wykluczyć je z wyjścia, zmieniając początek i koniec pętli.

W Javie kluczowym znakiem, który należy wykluczyć, jest to ", że posiadanie go w ciągu wymaga ucieczki, co dodaje \do twojego programu, który musi iść w ciągu, który dodaje \\. Usuwając "z ciągu warunkowego, usuwasz 4 znaki. Można to osiągnąć poprzez zapewnienie korzystania i !i rozpoczęcie od pętli #.

Wszystkie małe litery pojawiają się pod koniec zakresie, a tylko {, |, }a ~idzie za nimi. Ze względu na gadatliwość Javy większość małych liter jest używana tylko na płycie głównej. Podobnie {i }są trywialne dla programu Java, ponieważ wymaga ich płyta podstawowa.

|może być użyty, jeśli masz warunek lub warunek, ale nie mogłem znaleźć sposobu, aby skorzystać z takiego, który prowadzi do krótszego programu, niż użycie go |jako operatora bitowego. To |0sprawia, że ​​czuję się trochę brudny, ponieważ jest to jedyna część, która polega na tym, aby wprowadzić tam postać.

~0plony -1, co jest przydatne, ponieważ to właśnie musimy sprawdzić indexOf. Połączenie tego z użyciem !=warunkowej pętli <całkowicie eliminuje znak, co oznacza, że ​​nie musi on wchodzić do ciągu warunkowego.

ICR
źródło
5

sh (47)

tr</dev/urandom -cd \[:print:]|tr -d "`cat $0`"

Stosuje podejście autoreferencyjne. Zakłada, /dev/urandomże ostatecznie wyda co oktet co najmniej raz. Nie kończy się.

Jeśli założymy, że manjest zainstalowany, moglibyśmy zamiast tego skorzystać ze strony ascii(7)man (a tym samym mieć program kończący) ( 44 znaki, dzięki @fennec).

man ascii|tr -cd \[:print:]|tr -d "`cat $0`"
Robaczek świętojański
źródło
Czy mógłbyś użyć innego pliku, prawdopodobnie o krótszej nazwie, który zasadniczo gwarantuje, że ma wszystkie możliwe oktety? a może nawet zakończyć? Myślę jak / dev / memory czy coś takiego.
@fennec, jeśli założymy, że mani zshsą zainstalowane, man zshallwydaje się spełniać kryteria. Mógłbym dodać to jako odmianę.
FireFly
man asciimyślę, że mógłbym uratować ci kolejny list.
Których trużywasz? GNU trtraktuje znak -cat $0” jako operator zakresu, który przerywa wyjście.
Toby Speight
BTW, jeśli asciiprogram jest zainstalowany, możesz użyć tego zamiast man ascii.
Toby Speight
5

BitShift , 1038 bajtów

BitShift to język, który obsługuje tylko 0i 1jako składnia. Pomyślałem, że wydrukowanie wszystkich innych znaków będzie łatwe, ale ponieważ tak naprawdę nie obsługuje zapętlania, nadal skończył z ogromnymi 1038 bajtami.
Uważam jednak, że tak naprawdę nie jest możliwe pójście mniejszym niż to ..

101001100101011011010100110111010100100101011001101111010100100101011001000101011011010100101100110110101001001010110010001010110110101000001101010010010101100100010101101101010000010000011001010110110101000010000101011011010100110111010100100101011111100101011011010100110111010100100101011001101111010100100101011001000101011011010100000000011010100100101011001000101011011010100110010000101011011010100110111010100100101011001101001101010010010101100100010101101101010011001000010101101101010011011101010010010101111011111110010101101101010011011101010010010101100101100101011011010100010001010110110101001000010101101101010011011101010010010101110111110010101101101010011011101010010010101111111100101011011010100110111010100100101011111011110101001001010110010001010110110101001000100000101011011010100110111010100100101011111010011010100100101011001000101011011010100100000101011011010100110111010100100101011001101111010100100101011001000101011011010100010000010101101101010011011101010010010101101001101101010010010101101001101010

Wydruki

 !"#$%&'()*+,-./23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Wypróbuj tutaj

Bassdrop Cumberwubwubwub
źródło
4

Zdecydowanie najdłuższe rozwiązanie tutaj, ale kodowanie w Lino jest zawsze zabawne:

L.in.oleum -655 523 znaków

"libraries"/arch/cpu/base;/hmi/conout;/data/bytes;/data/string/t2s;/data/heap;/data/heap/connect/mgrab;"stockfile"a;"directors"displaystatus=engage;"injection"c=524;b<-bytes.bytesizeconvert:c;b<-heap.alloc:b;a<-heap.alloc:c;[filecommand]=readfile;[filename]=stockfile;[fileposition]=0;[fileblocksize]=c;[fileblockpointer]=b;arch.fileread;[string.psource]=b;[string.ptarget]=a;string.t2s;b<-heap.alloc:7fh;c=32;d=b;"f"[d_32]=c;+c;+d;?c<7fh>f;"w"d=[a];+a;?d=0>y;?d<32>w;?d>7eh>w;e=b;e+d;[e]=33;^w;"y"b+32;"v"conout.say:b;bye;

Brak komentarzy, po prostu czyta źródło skompilowane do pliku binarnego. Zapisz jako a.txtlub nie będzie się kompilować!

gronostaj
źródło
4
Nie, JSFuck jest dłuższy.
Joe Z.
4

Brainfuck, 133 123 114 110 bajtów

++++++++++++++++[->++++++>++>+++>++++>++<<<<<]>-->>->->+[---<.+.+<.+<.+<.+.+.+>>>>]++[-<.+.+.+<.+>>]<+.<+.<++.

Trochę więcej majsterkowania przy poprzednim rozwiązaniu (zanim zdałem sobie sprawę, że poniższe jest mniejsze - wszystko to było zanim zrobiłem ciężką optymalizację). Działa to poprzez zapisanie 4 zestawów liczb ascii i wydrukowanie ich przy użyciu skomplikowanej pętli, a następnie dodanie brakujących znaków (tj. Tych, które znajdują się między nieprawidłowymi liczbami ascii).

Oryginalne zgłoszenie

>>+++++++++++[<+<+>>->++>+++<<]<++>>++++++>>+++++[-<<<++++++>>>]<<<+<<[->>+.<<]>>++.++<[->+.<]>++.+>[-<+.>]<++.+>>[-<<+.>>]

Wykonuje następujące czynności:

  • Utwórz 4 rejestry zawierające 11. 13, 28, 33
  • Utwórz piątą z wartością 31, aby rozpocząć drukowanie
  • Drukuj ascii 32-42 (11)
  • Drukuj ascii 44
  • Drukuj ascii 47-59 (13)
  • Drukuj ascii 61
  • Drukuj ascii 63-90 (28)
  • Drukuj ascii 92
  • Drukuj ascii 94-126 (33)
FIQ
źródło
4

Haskell (70)

import Data.List
main=putStrLn$[' '..'~']\\" \\\"$'.=DLS[]aimnoprstu~"

Nudne zduplikowane znaki w programie w łańcuchu, odejmij od zestawu uniwersalnego. Daleko od zwycięzcy codegolf, choć jest zaskakująco czytelny ze względu na swoją długość.

(Teraz z odejmowaniem listy zamiast filter/ notWith.)

Robaczek świętojański
źródło
możesz zmienić import Data.Listnaimport List
dumny haskeller
. @ dumhaskeller, naprawdę? Nie działa, gdy próbuję runhaskell: „Nie można znaleźć modułu„ Lista ””. Zauważyłem jednak, że przeliczyłem liczbę znaków, więc poprawiłem to.
FireFly,
1
to dziwne, spróbuj z GhC lub Ghci? Działa dla mnie
dumny haskeller
@proudhaskeller nie, nie mogę go uruchomić. Dotyczy to GHC 7.8.3.
FireFly,
3

J - 21

(u:32+i.97)-.1!:1<":5

zapisz to do pliku o nazwie 5w bieżącym katalogu. Następnie load uruchom skrypt za pomocą0!:1<'5'

Lub 25 bez sztuczki z plikami:

(-.~".)'(":u:32+i.0-~95)'
jpjacobs
źródło
Zawiera kod źródłowy ', który nie jest usuwany z wyniku.
FireFly,
3

Clojure (142, 106, 103)

(defn -main[](let[c"(fn[l](pr(reduce disj(set(map char(range 32 126)))l)));-\\\"o"]((load-string c)c)))

sformatowany:

(defn -main []
  (let [c "(fn[l](pr(reduce disj(set(map char(range 32 126)))l)));-\\\"o"]
    ((load-string c) c)))

Pomyśl, że to robi, może potrzebować drobnych poprawek. wynik:

#{@ ` ! A B b # C $ D % E & F ' G H I * J + K k , L M . N / O 0 P Q q R S 4 T 5 U V v 7 W w 8 X x 9 Y y : Z z { < | = } > ^ ? _}

uruchamia na sobie ciąg znaków, który jest ewaluowalnym kodem clojure. Łańcuch ma na końcu kilka komentarzy, dzięki którym znaki używane poza łańcuchem (metoda główna itp.)

RedDeckWins
źródło
3

Python 2, 69

for x in range(38):print chr(x+59)#!"$%&'*,-./012467bdjklmqsuvwyz{|}~

Używam najdłuższej (jaką jestem w stanie znaleźć) sekwencji ciągłych znaków, którą mogę wydrukować i dodać pozostałe jako komentarz po kodzie.

mile
źródło
8
Nie zamierzam głosować na nic, co ma komentarz
John Dvorak
Moja odpowiedź powinna wskazywać najgorszy możliwy sposób rozwiązania tego zadania. (Użyj luki w komentarzach).
Johannes Kuhn
9
ok ... z wyjątkiem tego poliglota, który jest niczym innym jak komentarzem.
John Dvorak,
@JohannesKuhn Jednakże, ponieważ jest to najdłuższy kod, który działa, nie wygra konkursu. : P
Joe Z.
5
@JoeZ. wygrywa szerokim marginesem, jeśli podzielisz liczbę języków, w których działa
John Dvorak