In mọi ký tự mà chương trình của bạn không có


221

Nhiệm vụ của bạn là xây dựng một chương trình (chỉ sử dụng các ký tự ASCII có thể in và / hoặc các tab và dòng mới) in ra chính xác các ký tự trong không gian ASCII có thể in ( 0x20đến 0x7e) không xuất hiện trong mã nguồn của chương trình của bạn (theo bất kỳ thứ tự nào, tuy nhiên theo bất kỳ thứ tự nào) nhiều lần bạn muốn).

Mã ngắn nhất để làm điều này trong bất kỳ ngôn ngữ nào sẽ thắng.


19
Họ đang có, nhưng chúng không nằm trong phạm vi 0x20cho 0x7e, được định nghĩa là "ký tự ASCII in". Các tab kỹ thuật và dòng mới thực sự là các ký tự điều khiển.
Joe Z.

3
Chúng tôi có được phép in dòng mới (hoặc bất kỳ ký tự ASCII không thể in nào khác) không?
flornquake

1
Tab và dòng mới không hiển thị theo cách chúng chiếm vị trí in. Họ di chuyển vị trí. Xem chức năng "isprint" ANSI C.
Kaz

1
Làm thế nào mà câu hỏi này được hồi sinh? Nó bắt đầu nhận được upvote một lần nữa.
Joe Z.

3
@Timwi: Nếu bạn muốn làm điều đó, bạn cũng phải xuất tất cả các ký tự trong không gian ký tự CJK (không bao gồm các ký tự xuất hiện trong mã của bạn). Nó quá phức tạp để quản lý, vì vậy tôi đã giới hạn nó chỉ ở ASCII.
Joe Z.

Câu trả lời:



274

Đa sắc, 95

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

Không lam gi cả.


19
Không, nhưng đây là một polygot. Tôi không muốn phá hủy nó.
Julian Kuhn

95
Tôi đã đưa nó vào trình biên dịch GNU Fortran và nó đã bị lỗi.
bến tàu

12
Trong C, #undef X;whatever junk you wanthoạt động.
ugoren

6
Cũng hoạt động trong Python (vì nó sử dụng #cho các nhận xét như Ruby và Perl)
Doorknob

87
"Mã ngắn nhất để làm điều này trong bất kỳ ngôn ngữ nào sẽ thắng." Đối với việc thiếu mã hoạt động trong bất kỳ ngôn ngữ nào , mục này sẽ giành chiến thắng, vì đó là mã hoạt động với số lượng ngôn ngữ lớn nhất. ;-D
msb

142

PHP 5.2, 4

<?<<

Lưu dưới dạng một tệp được gọi NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.phpở đâu đó trong /home. short_open_tagcần phải được Onở bạn php.ini.

Đầu ra là:

PHP Parse error:  syntax error, unexpected T_SL in /home/wherever/NYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php on line 1

42
Haha, uốn cong tốt đẹp của các quy tắc.
Julian Kuhn

6
Đẹp, nhưng tiếc là tôi có thể phát hiện ra một :trong đầu ra.
Howard


78
Tôi đánh giá cao nó, @TheGuywithTheHat, nhưng tôi đã trả lời điều này khoảng một năm trước, trái ngược với ngày hôm qua.
Ry-

9
@TheGuywithTheHat Đây là một trong những câu trả lời khi kẽ hở là hài hước, mới và dẫn đến bài đăng meta được liên kết của bạn. Bây giờ nó không còn nữa.
Julian Kuhn

48

JavaScript - 88

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

in "bcdfghijkmnpquvxyz"


13
Wow tôi thích ý tưởng toLowerCase, thật tuyệt vời!
Pierre Arlaud

2
Bạn có thể lưu ba ký tự với một chút toán học: "!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)bởi vì 95*72= 6840và di chuyển các ký tự bị lãng phí thành một chuỗi cho phép bạn sử dụng dấu ngoặc kép thay vì lãng phí chúng. Bên cạnh đó, việc ẩn các nhân vật trong một bình luận cảm thấy nhảm.
Ô dù

28

Khoảng trắng, 61 57 ký tự

Nó không phải là ngắn nhất nhưng nó có thể có logic đơn giản nhất (nó thực sự chỉ là một vòng lặp).

Ở đây nó được nhận xét hoàn toàn, trong đó S là không gian, T là tab, L là nguồn cấp dữ liệu:

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

Cảm ơn @res đã sửa lỗi ở trên (yêu cầu sao chép thêm cho lệnh rẽ nhánh) và cho các số nhỏ hơn để đẩy lên ngăn xếp.


1
Điều này không hoạt động như bình thường, nhưng có thể được khắc phục bằng cách chèn một ngăn xếp trùng lặp (SLS) ngay lập tức trước nhánh có điều kiện (LTTSL) - cần thiết vì lệnh nhánh có điều kiện loại bỏ đỉnh ngăn xếp . Chương trình 64 ký tự kết quả hoạt động như quảng cáo. (Nếu chương trình được lưu trữ trong một tập tin với phần mở rộng .ws, nó có thể được kiểm tra trực tuyến tại golf.shinh.org/checker.html )
res

1
Ngoài ra, độ dài chương trình có thể giảm xuống còn 57 bằng cách sử dụng gần như cùng một chương trình nhưng với ba số được đẩy lần lượt là -94, 127, 126 thay đổi thành 32, 1, 126 , SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLL.
res

Tôi biết đã hơn 5 năm, nhưng bạn có thể chơi golf 5 byte bằng cách thay đổi nhãn S thành nhãn (trống) ( LSSSLtrở thành LSSLLTTSLtrở thành LTTL) và xóa lối ra ở cuối (ba LLL). Hãy thử trực tuyến 52 byte thô hoặc ở đây với phần tô sáng và giải thích .
Kevin Cruijssen

22

C, 83 74 69 ký tự

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

Tôi thực sự đã cố gắng giảm nó xuống dưới 80 ký tự, nhưng tôi không thể kéo nó ra. Cuối cùng tôi đã quyết định đăng những gì tôi có, với giả định rằng tôi (hoặc ai đó) sẽ tìm ra giải pháp 79 ký tự mười phút sau khi đăng bài này. Được rồi, nó không phải là mười phút, nhưng nó hoạt động trên nguyên tắc.

Tôi thực sự muốn đăng một phiên bản không cần phải có một không gian vô cớ trong mã nguồn, nhưng phiên bản đó đã rơi vào quỹ đạo thu hút kỳ lạ, nảy lên giữa một số giải pháp. Sau nhiều phút cố gắng đẩy một trong số họ vào một giải pháp ổn định, tôi đã từ bỏ và thêm không gian.


21

Golf, 26 24 ký tự

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

Lấy một kịch bản tạo phạm vi, sao chép nó, thực thi nó, tạo ra nó từ kết quả của nó, sau đó tạo ra mã trừ kết quả và ký tự trích dẫn khác.


2
Chết tiệt, thật thông minh.
bến tàu

1
Xóa ''+, thoát khỏi chương trình trước khi trừ, đặt vào một noop .;(không tìm thấy cách nào tốt hơn để che dấu chấm), sử dụng khối mã thay vì chuỗi -> {126,33>`-.;}.~đó là 16 ký tự
Howard

Và sử dụng theo bất kỳ thứ tự nào, tuy nhiên nhiều lần bạn muốn, bạn cũng có thể xóa dấu chấm phẩy.
Howard

@ Làm thế nào tôi sợ tôi không hiểu ý tưởng của bạn. Bạn có thể đăng nó như một câu trả lời riêng biệt.
John Dvorak

@PeterTaylor Tôi nghĩ tôi đã in một khoảng trắng?
John Dvorak

20

Cá - 80

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

Khi cá gặp lỗi, nó sẽ in ra "thứ gì đó có mùi tanh ...". Vì z là một hướng dẫn xấu nên nó bị lỗi ngay lập tức


17

Tôi biết nó không chiến thắng bất kỳ cuộc thi nào. Tôi chỉ muốn thử nó trong một ngôn ngữ không được sử dụng thông thường, chỉ để đá.

Java - 209 195 152 140 ký tự

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:"");}}

Với dấu ngắt dòng và tab

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:"");
    }
}

Coi chừng nếu bạn thực thi: chương trình không chấm dứt. Haha

Giải trình

  1. for(char c=0;;c++): Vì a charcó thể được coi là một int, tôi sử dụng điều đó cho lợi thế của mình ở đây để gia tăng thông qua tất cả các giá trị có thể củac . Tôi bỏ qua điều kiện kết thúc trong vòng lặp (điều kiện sẽ đi giữa hai dấu chấm phẩy) để lưu các ký tự, vì nó không quy định rằng chương trình phải chấm dứt. :)
  2. "publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:"": Đáng buồn thay, không phải là một cách tiếp cận rất thanh lịch, nhưng nó hoàn thành công việc. Liệt kê thủ công mọi ký tự có trong mã nguồn dưới dạng Stringchữ, sau đó kiểm tra xem dòng điện có char cxảy ra trong đó không indexOf(). Nếu indexOf()cuộc gọi trở lại -1, nó không tồn tại và do đó chúng ta nên in nó. Phần còn lại của nó chỉ sử dụng toán tử ternary để tiết kiệm ký tự và không gian.

bạn có thể giải thích một chút không?
joey rohan

1
@joeyrohan Chắc chắn, chỉ cần thêm một lời giải thích bên dưới nó. :)
asteri

tuyệt vời;) những thứ tốt đẹp :)
joey rohan

2
Bạn có thể đặt bảng có thể in ENTIRE ascii trong một bình luận và tạo một chương trình java không trả về gì. Nó sẽ đánh bại bạn :-)
Pierre Arlaud

9
Bạn có thể nói với tôi rằng điều này sẽ in từng ký tự Unicode trước khi tôi thực hiện nó trong thiết bị đầu cuối của mình.
nyuszika7h

14

Perl, 49 ký tự

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

Đây là một thử thách thú vị - đó là loại chống quine và tôi đã cố gắng rút ngắn chương trình một vài lần bằng cách tăng phạm vi các ký tự xuất hiện trong đó.


14

Ruby, 81 78 68 66 62 57

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

Đơn giản chỉ cần kiểm tra chính nó. Nhân vật trùng lặp được loại bỏ bằng tay.

Cảm ơn Josh vì đã lưu 4 ký tự và minitech để lưu 5 ký tự!


Bạn không thể đặt if sau $> << x để lưu một trong các dòng kết thúc?
Josh

@Josh Vâng. Tôi se lam điêu đo ngay.
Doorknob

Bạn có thể mang nó đến 58:(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
Ry-

1
À, và với sự lựa chọn tốt hơn về tên biến, 57:(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
Ry-

$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join55 byte sử dụng một cách tiếp cận khác nhau.
twe4ked

14

Befunge (48)

<|::-1,+*88:<+3*87
6<@.**85
9>"()~&"/%$ |!#';=?}

Đầu ra: {zyxwvutsrqponmlkjihgfedcba` _ ^] [ZYXWVUTSRQPONMLKJIHGFEDCBA240


Bò thần! Công việc tốt đẹp!
Cruncher

12

Không nghiêm trọng lắm, nhưng tôi phải cho nó đi:

Mã xác nhận (138152)

(nguồn tổng hợp tại đây)

Nguồn chính thức:

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

In tất cả các ký tự ngoại trừ () + []!


2
(x)<=> [x][+[]], tăng kích thước mã nhưng làm cho bảng chữ cái cần nhỏ hơn.
FireFly

12

Nhiệm vụ của bạn là xây dựng một chương trình (chỉ sử dụng các ký tự ASCII có thể in và / hoặc các tab và dòng mới)

Trời ạ, bạn đã làm khó APL (Đó có phải là delibarate không?)
Vì vậy tôi quyết định bỏ qua tất cả các quy tắc !!!

APL (Dyalog), 3 10

⎕AV

In vectơ nguyên tử (bao gồm tất cả các ký tự ASCII có thể sử dụng được)


Hóa ra tôi hoàn toàn quên mất phần "không có" ...
Nhưng đó là một sửa chữa dễ dàng

⎕AV~'AV'''

~'AV'''có nghĩa là loại trừ ( ~) các ký tự A, V và trích dẫn đơn (thoát dưới dạng trích dẫn đơn nhân đôi)

Về việc in không phải ASCII, tốt, tôi đang bỏ qua tất cả các quy tắc.


"In chính xác các ký tự trong không gian ASCII có thể in ( 0x20đến 0x7e) không xuất hiện trong mã nguồn chương trình của bạn" Tôi tin rằng đầu ra có thể không chứa các ký tự bên ngoài không gian ASCII có thể in ("chính xác" là từ khóa) và chương trình của bạn chứa 'A' và 'V' để chúng không được in.
FireFly

1
Ít nhất bạn sẽ muốn thêm ~vào tập hợp các ký tự bị loại trừ. ;-) Btw, một giải pháp J tương tự sẽ làa.-.'a.-'''
FireFly

2
Bạn có thể bỏ qua tất cả các quy tắc, nhưng điều đó không đủ điều kiện để bạn trở thành câu trả lời được chấp nhận.
Joe Z.

11

GolfScript ( 18 16 ký tự)

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

Bản demo trực tuyến có thêm một dòng kiểm tra tính chính xác và xuất ra số lượng ký tự bị lỗi.

(Tôi có lựa chọn thay thế tương đương khác nhau. @`^Có thể được thay thế bằng \\`; #có thể được thay thế bằng `hoặc ]Sự kết hợp thích hợp có thể được sử dụng với lừa Howard để bằng điểm số của mình là 15 vì backslashes không cần thoát trong khối theo cách mà họ làm trong xâu.: {),\`^32>].~}.~Nhưng Howard xứng đáng nhận được tín dụng cho mánh khóe đó).


1
lạm dụng quy tắc tốt đẹp :-) golfscript.apphb.com/?c=ImAnficoLCszMj5cXC0uIi5%2B
John Dvorak

2
May mắn thay, ascii kết thúc }~- thậm chí tốt hơn cho các khối mã, xem câu trả lời mới của tôi ;-)
Howard

11

Brainfuck, 173

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

Khá lâu, tôi có thể thử lại sau.


6
viết một chương trình không có gì và thêm phần còn lại vào nguồn, trường hợp xấu nhất có cảm giác là 96 ký tự.
Jasen

10

J ( 52 40)

Chỉnh sửa: Duh, quên về e.

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

Phiên bản cũ:

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

Biến thể khác (cùng chiều dài nhưng đầu ra ít hơn):

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

@JanDvorak: whoops typo
marinus

Khỉ thật! Tôi đã hy vọng tôi có thể đủ thấp trong Ruby để đánh bại bạn và sau đó bạn thả nó xuống còn 40 .: P
Doorknob

Cái mới có vẻ kỳ quặc hơn nhiều.
John Dvorak

1
@Doorknob: Tôi có một ký tự trong APL chỉ có 24 ký tự nhưng nó có các ký tự không phải ASCII trong đó.
bến tàu

Vâng, tôi đã làm điều ASCII để tránh các ngôn ngữ như APL.
Joe Z.

7

Con trăn 3 - 68 61

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

... Cảm ơn @WolframH vì những cải tiến.


1
Tôi nghĩ bạn có thể đặt exec(x)một dòng mới và lưu ;vào x. Ngoài ra, trong Python 3, bạn có thể sử dụng x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)cho 61 ký tự (in nhiều khoảng trắng, được phép).
WolframH

@WolframH khéo léo, cảm ơn!

7

PowerShell: 96

Phải được lưu và chạy như một kịch bản.

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

diff là một bí danh tích hợp cho Compare-Object.

gclà một bí danh tích hợp cho Get-Content.

$MyInvocation.InvocationName được đường dẫn đầy đủ đến tập lệnh đang được thực thi.

32..126là số thập phân tương đương 0x20..0x7evà do đó tạo ra một mảng các mã ASCII thập phân mà chúng tôi đang tìm kiếm.

[char[]]lấy nội dung của đối tượng tiếp theo và đặt chúng thành một mảng, phá vỡ chúng và chuyển đổi chúng thành các ký tự ASCII. Vì vậy, hiện tại chúng tôi có hai mảng ký tự ASCII - một mảng được lấy từ tập lệnh này, một mảng được xác định bởi các tiêu chí thách thức.

-Pađặt Compare-Objectthành định dạng "Passthru", do đó, chỉ các mục được tìm thấy khác nhau giữa các đầu vào là đầu ra tại bàn điều khiển - các chỉ báo về các mục trong đó đầu vào vẫn được lưu trữ trong dữ liệu của đối tượng, nhưng không được hiển thị.

|?{$_.SideIndicator-eq'=>'}Compare-Objectđầu ra của ống dẫn Where-Object, chỉ lọc nó xuống các mục chỉ dành riêng cho đầu vào thứ hai.


Sane và hướng dẫn.
Stéphane Gourichon 19/03/2015

7

PHP - 92

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

Đầu ra:

không có gì

OP yêu cầu in tất cả các ký tự không sử dụng, tôi chỉ sử dụng tất cả các ký tự


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

Tôi biết rằng sẽ có một bài nộp chỉ sử dụng tất cả các nhân vật.
MilkyWay90

Điều này không sử dụng các nhân vật!;>Xn
Jo King

6

Javascript, 92

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

Đây có phải là một giải pháp công bằng? alert ('! "# $% ^ * + / - / 0123456789:;. <? => @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [] ^ _' bcdfghijkmnopqsuvwxyz {|} ~ ') Đi kèm ở 95 ký tự và là câm như là địa ngục: p.
tristin

2
@tristin: P yeah javascript hơi dài dòng khi nói đến charcode thành chuỗi. Và không phải nó xuất ra mọi ký tự mà chương trình của bạn không có. Văn bản cảnh báo của bạn cũng có trong chương trình của bạn :)
C5H8NNaO4

1
Haha, ôi. Ồ tốt
tristin

6

Java - 126 ký tự

giảm thiểu:

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

chưa được tối ưu hóa:

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

Đây là một vấn đề thú vị, bởi vì các mã thông báo riêng lẻ có thể được hưởng lợi từ hình thức dài hơn của chúng vì nó sử dụng lại các ký tự. Ví dụ, thông thường String[]sẽ ngắn hơn, nhưng String...loại bỏ sự cần thiết cho dấu ngoặc vuông trong chuỗi điều kiện.

Tôi đã tìm thấy mẹo là thử và sử dụng các ký tự ở đầu và cuối của phạm vi để bạn có thể loại trừ chúng khỏi đầu ra chỉ bằng cách thay đổi bắt đầu và kết thúc vòng lặp của bạn.

Đối với Java, một ký tự chính cần loại trừ là "bởi vì có chuỗi đó yêu cầu thoát nó, điều này thêm \vào chương trình của bạn, cần phải đi vào chuỗi, bổ sung \\. Bằng cách xóa "khỏi chuỗi điều kiện của bạn, bạn loại bỏ 4 ký tự. Điều này có thể đạt được bằng cách đảm bảo bạn sử dụng !và bắt đầu vòng lặp của bạn từ #.

Tất cả các chữ thường xuất hiện ở gần cuối của dãy núi này, chỉ với {, |, }~sắp tới sau khi họ. Do tính dài dòng của Java, hầu hết các chữ cái viết thường chỉ được sử dụng cho bản tóm tắt. Tương tự như vậy, {}là tầm thường đối với một chương trình Java, bởi vì bản tóm tắt yêu cầu chúng.

|có thể được sử dụng nếu bạn có hoặc có điều kiện, nhưng tôi không thể tìm ra cách tận dụng lợi thế của chương trình dẫn đến chương trình ngắn hơn là chỉ sử dụng |như một toán tử bitwise. Điều này |0khiến tôi cảm thấy hơi bẩn thỉu, bởi vì đó là phần duy nhất chỉ là một nhân vật chính để có được nhân vật trong đó.

~0sản lượng -1, rất tiện lợi vì đó là những gì chúng ta cần kiểm tra indexOf. Kết hợp điều này với việc sử dụng !=cho vòng lặp có điều kiện sẽ loại bỏ <hoàn toàn ký tự, điều đó có nghĩa là nó không cần phải đi vào bên trong chuỗi điều kiện.


5

sh (47)

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

Sử dụng phương pháp tự tham khảo. Giả /dev/urandomđịnh cuối cùng sẽ xuất ra mỗi octet ít nhất một lần. Không chấm dứt.

Nếu chúng tôi cho rằng đã manđược cài đặt, thay vào đó chúng tôi có thể sử dụng ascii(7)trang này (và do đó có chương trình chấm dứt) ( 44 ký tự, cảm ơn @fennec).

man ascii|tr -cd \[:print:]|tr -d "`cat $0`"

Bạn có thể sử dụng một tệp khác, có thể với một tên ngắn hơn, về cơ bản được đảm bảo có tất cả các octet có thể? và thậm chí có thể chấm dứt? Tôi đang suy nghĩ như / dev / bộ nhớ hoặc một cái gì đó.

@fennec nếu chúng tôi giả định rằng manzshđược cài đặt, man zshalldường như phù hợp với tiêu chí. Tôi có thể thêm nó như là một biến thể.
FireFly

man asciiTôi có thể tiết kiệm cho bạn một lá thư khác, tôi nghĩ.

Bạn trđang sử dụng cái gì GNU trcoi -" cat $0" là toán tử phạm vi, phá vỡ đầu ra.
Toby Speight

BTW, nếu asciichương trình được cài đặt, bạn có thể sử dụng nó thay cho man ascii.
Toby Speight

5

BitShift , 1038 byte

BitShift là một ngôn ngữ chỉ hỗ trợ 01theo cú pháp. Tôi hình dung sẽ dễ dàng in tất cả các ký tự khác, nhưng vì nó không thực sự hỗ trợ việc lặp, nó vẫn kết thúc với số lượng lớn 1038 byte.
Tuy nhiên, tôi tin rằng nó không thực sự có thể đi nhỏ hơn thế này ..

101001100101011011010100110111010100100101011001101111010100100101011001000101011011010100101100110110101001001010110010001010110110101000001101010010010101100100010101101101010000010000011001010110110101000010000101011011010100110111010100100101011111100101011011010100110111010100100101011001101111010100100101011001000101011011010100000000011010100100101011001000101011011010100110010000101011011010100110111010100100101011001101001101010010010101100100010101101101010011001000010101101101010011011101010010010101111011111110010101101101010011011101010010010101100101100101011011010100010001010110110101001000010101101101010011011101010010010101110111110010101101101010011011101010010010101111111100101011011010100110111010100100101011111011110101001001010110010001010110110101001000100000101011011010100110111010100100101011111010011010100100101011001000101011011010100100000101011011010100110111010100100101011001101111010100100101011001000101011011010100010000010101101101010011011101010010010101101001101101010010010101101001101010

Bản in

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

Hãy thử nó ở đây


4

Chắc chắn là giải pháp dài nhất ở đây, nhưng mã hóa trong Lino luôn thú vị:

L.in. Tomb -655 523 ký tự

"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;

Không có ý kiến, chỉ đọc các nguồn được biên dịch thành nhị phân. Lưu dưới dạng a.txthoặc nó sẽ không biên dịch!


4
Không, cái JSFuck dài hơn.
Joe Z.

4

Brainfuck, 133 123 114 110 byte

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

Một chút mày mò hơn với một giải pháp trước đây (trước khi tôi nhận ra phần dưới đây nhỏ hơn - mặc dù đây là trước khi tôi thực hiện một số tối ưu hóa nặng nề). Điều này hoạt động bằng cách lưu trữ 4 bộ số ascii và in chúng với một số vòng lặp khó khăn, sau đó đưa ra các ký tự bị thiếu sau đó (tức là các bộ nằm giữa các số ascii không hợp lệ).

Trình gốc

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

Nó làm như sau:

  • Tạo 4 thanh ghi chứa 11. 13, 28, 33
  • Tạo số 5 với giá trị 31 để bắt đầu in
  • In ascii 32-42 (11)
  • In ascii 44
  • In ascii 47-59 (13)
  • In ascii 61
  • In ascii 63-90 (28)
  • In ascii 92
  • In ascii 94-126 (33)

4

Haskell (70)

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

Giải pháp nhân đôi nhàm chán trong các chương trình trong chuỗi, trừ-từ-phổ-bộ. Khác xa với một người chiến thắng codegolf, mặc dù nó đáng ngạc nhiên rõ ràng về chiều dài của nó.

(Bây giờ với phép trừ danh sách thay vì filter/ notWith.)


bạn có thể đổi import Data.Listthànhimport List
tự hào

. @ kiêu hãnh hả? Nó dường như không hoạt động khi tôi thử với runhaskell: "Không thể tìm thấy mô-đun 'Danh sách'". Tôi nhận thấy tôi đã nhầm lẫn số lượng nhân vật, vì vậy tôi đã sửa nó.
FireFly

1
tốt, đó là lạ, thử nó với ghc hay ghci? Nó hoạt động với tôi
tự hào

@proudhaskeller không, không thể làm cho nó hoạt động. Đây là với GHC 7.8.3.
FireFly

3

J - 21

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

ghi tệp này vào một tệp được gọi 5trong thư mục hiện tại. Sau đó tải thực thi tập lệnh với0!:1<'5'

Hoặc 25 mà không có thủ thuật tập tin:

(-.~".)'(":u:32+i.0-~95)'

Mã nguồn chứa ', không bị xóa khỏi đầu ra.
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)))

định dạng:

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

Hãy nghĩ rằng điều này làm nó, có thể cần một số điều chỉnh. đầu ra:

#{@ ` ! 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 { < | = } > ^ ? _}

tự chạy chuỗi, mã clojure có thể đánh giá được. Chuỗi có một số nhận xét ở cuối để có được các ký tự được sử dụng bên ngoài chuỗi (phương thức chính, v.v.)


3

Con trăn 2, 69

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

Tôi sử dụng chuỗi ký tự liên tục dài nhất (mà tôi có thể tìm thấy) mà tôi có thể in ra và thêm các ký tự khác dưới dạng nhận xét sau mã.


8
Tôi sẽ không nêu lên bất cứ điều gì có bình luận
John Dvorak

Câu trả lời của tôi sẽ chỉ ra cách tồi tệ nhất có thể để giải quyết nhiệm vụ này. (Sử dụng lỗ hổng bình luận).
Julian Kuhn

9
ok ... ngoại trừ polyglot đó không có gì ngoài một bình luận.
John Dvorak

@JohannesKuhn Tuy nhiên, vì đây là mã dài nhất hoạt động, nó sẽ không chiến thắng trong cuộc thi. : P
Joe Z.

5
@JoeZ. nó thắng với tỷ lệ chênh lệch cao nếu bạn chia cho số lượng ngôn ngữ mà nó hoạt động
John Dvorak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.