พิมพ์ตัวละครทุกตัวที่โปรแกรมของคุณไม่มี


219

งานของคุณคือการสร้างโปรแกรม (ใช้เฉพาะอักขระ ASCII ที่พิมพ์ได้และ / หรือแท็บและการขึ้นบรรทัดใหม่) ที่พิมพ์อักขระทั้งหมดในพื้นที่ ASCII ที่พิมพ์ได้ ( 0x20ถึง0x7e) ที่ไม่ปรากฏในซอร์สโค้ดของโปรแกรม (ในลำดับใด ๆ หลายครั้งที่คุณต้องการ)

รหัสที่สั้นที่สุดในการทำเช่นนี้ในภาษาใด ๆ ที่ชนะ


19
พวกเขามี แต่พวกเขาไม่ได้อยู่ในช่วง0x20การ0x7eซึ่งได้รับการกำหนดให้เป็น "ตัวอักขระ ASCII" แท็บทางเทคนิคและการขึ้นบรรทัดใหม่เป็นอักขระควบคุมจริง ๆ
Joe Z.

3
เราได้รับอนุญาตให้พิมพ์บรรทัดใหม่ (หรืออักขระ ASCII อื่นที่ไม่สามารถพิมพ์ได้) หรือไม่?
flornquake

1
แท็บและการขึ้นบรรทัดใหม่จะไม่แสดงผลในลักษณะที่พวกเขาครอบครองตำแหน่งการพิมพ์ พวกเขาย้ายตำแหน่ง ดูฟังก์ชัน ANSI C "isprint"
Kaz

1
คำถามนี้ได้รับการฟื้นฟูอย่างไร มันเริ่มรับ upvotes อีกครั้ง
Joe Z.

3
@Timwi: หากคุณต้องการทำเช่นนั้นคุณจะต้องส่งออกอักขระทั้งหมดในพื้นที่อักขระ CJK ด้วย (ยกเว้นอักขระที่ปรากฏในรหัสของคุณ) มันซับซ้อนเกินกว่าที่จะจัดการดังนั้นฉันจึง จำกัด ให้เพียงแค่ ASCII
Joe Z.

คำตอบ:



274

Polyglot, 95

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

ไม่ทำอะไรเลย


19
ไม่ แต่นี่คือรูปหลายเหลี่ยม ฉันไม่ต้องการทำลายมัน
Johannes Kuhn

95
ฉันป้อนสิ่งนี้ลงในคอมไพเลอร์ GNU Fortran และแยกออก
marinus

12
ใน C ใช้#undef X;whatever junk you wantงานได้
ugoren

6
ทำงานใน Python ด้วย (เพราะใช้#สำหรับความคิดเห็นเช่น Ruby และ Perl)
Doorknob

87
"รหัสที่สั้นที่สุดที่จะทำเช่นนี้ในภาษาใดก็ได้ชนะ" สำหรับการขาดรหัสที่ทำงานในภาษาใด ๆรายการนี้ควรชนะเนื่องจากเป็นรหัสที่ทำงานในภาษาจำนวนมากที่สุด ;-D
msb

142

PHP 5.2, 4

<?<<

บันทึกเป็นไฟล์ที่เรียกว่าที่ไหนสักแห่งในNYUIOMK()'DEAQRWVX[Z]\^@CBGFJqwv{z}|~`bgfkj203547698;=>!#"%$&+*-.php จะต้องมีในของคุณ/homeshort_open_tagOnphp.ini

ผลลัพธ์คือ:

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

42
ฮ่าฮ่ากฎก้มดีมาก
โยฮันน์คุห์น

6
ดี แต่น่าเสียดายที่ฉันสามารถมองเห็น:ในผลลัพธ์
Howard


78
ฉันขอขอบคุณ @TheGuywithTheHat แต่ฉันตอบคำถามนี้เมื่อประมาณหนึ่งปีที่แล้วเมื่อเทียบกับเมื่อวาน
Ry-

9
@TheGuywithTheHat นี่เป็นหนึ่งในคำตอบเมื่อช่องโหว่เป็นเรื่องตลกใหม่และนำไปสู่การโพสต์เมตาที่เชื่อมโยงของคุณ ตอนนี้มันไม่ได้อีกต่อไป
Johannes Kuhn

48

JavaScript - 88

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

พิมพ์ "bcdfghijkmnpquvxyz"


13
ว้าวฉันชอบความคิด toLowerCase มันยอดเยี่ยม!
Pierre Arlaud

2
คุณสามารถบันทึกอักขระสามตัวพร้อมคณิตศาสตร์สักหน่อย"!#$%&*+,-13:<=>?@[\]^_`{|}~AERTOWS";alert('BCDFGHIJKMNPQUVXYZ'.toLowerCase()+95*72)เนื่องจาก: 95*72= 6840และการย้ายอักขระที่สูญเปล่าไปยังสตริงอนุญาตให้คุณใช้เครื่องหมายคำพูดแทนการสิ้นเปลือง นอกจากนั้นการซ่อนตัวละครในคอมเม้นท์ก็รู้สึกว่าวิเศษ
ร่ม

28

ช่องว่าง61 61ตัวอักษร

มันไม่ได้สั้นที่สุด แต่อาจมีตรรกะที่ง่ายที่สุด (มันเป็นแค่ลูปจริงๆ)

ที่นี่มีการแสดงความคิดเห็นอย่างสมบูรณ์โดยที่ S คือที่ว่างแท็บ T คือ L คือตัวดึงข้อมูลบรรทัด:

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

ขอบคุณ @res สำหรับการแก้ไขด้านบน (จำเป็นต้องทำซ้ำพิเศษสำหรับคำสั่งสาขา) และสำหรับจำนวนที่น้อยกว่าที่จะผลักดันสแต็ค


1
สิ่งนี้ไม่ทำงานตามที่เป็นอยู่ แต่สามารถแก้ไขได้โดยการแทรกสำเนาซ้ำซ้อนกัน (SLS) ที่อยู่หน้าสาขาที่มีเงื่อนไข (LTTSL) ทันที - มันจำเป็นเพราะคำสั่งสาขาตามเงื่อนไขจะลบด้านบนสุดของสแต็กออก . โปรแกรม 64- ตัวอักษรที่ได้นั้นทำงานตามที่โฆษณาไว้ (หากโปรแกรมถูกเก็บไว้ในไฟล์ที่มีนามสกุล. ws สามารถทดสอบออนไลน์ได้ที่golf.shinh.org/checker.html )
res

1
นอกจากนี้ระยะเวลาในโปรแกรมที่สามารถจะลดลงไป57ใช้เกือบโปรแกรมเดียวกัน แต่มีสามผลักหมายเลข -94, 127, 126 เปลี่ยนเป็น 32, 1, 126 SSSTSSSSSL LSSSL SSSTL TSSS SLS SLS TLSS SSSTTTTTTSL TSST LTTSL LLLตามลำดับ:
res

ฉันรู้ว่ามันใช้เวลานานกว่า 5 ปี แต่คุณสามารถเล่นกอล์ฟ 5 ไบต์ได้โดยเปลี่ยนป้าย S เป็นป้ายกำกับ (ว่าง) ( LSSSLกลายเป็นLSSLและLTTSLกลายเป็นLTTL) และลบทางออกเมื่อสิ้นสุด (สามLLL) ลองมันดิบออนไลน์52 ไบต์หรือนี่กับไฮไลต์และคำอธิบาย
Kevin Cruijssen

22

C, 83 74 69 ตัวอักษร

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

ฉันพยายามทำให้มันต่ำกว่า 80 ตัวอักษร แต่ฉันไม่สามารถดึงมันออกมาได้ ในที่สุดฉันก็ตัดสินใจที่จะโพสต์สิ่งที่ฉันมีบนสมมติฐานว่าฉัน (หรือคนอื่น) จะคิดแก้ปัญหา 79 ตัวอักษรสิบนาทีหลังจากโพสต์นี้ โอเคมันใช้เวลาไม่ถึงสิบนาที แต่ใช้งานได้ตามหลักการ

ฉันต้องการโพสต์เวอร์ชันที่ไม่ต้องมีช่องว่างในซอร์สโค้ด แต่อันที่จริงมีที่มาในวงโคจรที่มีเสน่ห์แปลก ๆ ซึ่งสะท้อนระหว่างโซลูชันจำนวนหนึ่ง หลังจากพยายามหลายนาทีเพื่อเขยิบหนึ่งในวิธีแก้ปัญหาที่เสถียรฉันก็ยอมแพ้และเพิ่มพื้นที่


21

Golfscript, 26 24 ตัวอักษร

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

ใช้สคริปต์การสร้างช่วงทำซ้ำเรียกใช้งานย่อจากผลลัพธ์จากนั้นย่อมาจากรหัสการลบผลลัพธ์และอักขระเครื่องหมายคำพูดอื่น


2
ประณามนั่นฉลาด
marinus

1
ลบออก''+โปรแกรมหลบหนีก่อนที่จะลบใส่ noop .;(ไม่พบวิธีที่ดีกว่าที่จะครอบคลุมจุด) ใช้ code block แทน string -> {126,33>`-.;}.~ซึ่งคือ 16 chars
Howard

และใช้งานในลำดับใด ๆ ก็ตามอย่างไรก็ตามหลายครั้งที่คุณต้องการคุณยังสามารถลบเครื่องหมายอัฒภาคได้
Howard

@Howard ฉันกลัวฉันไม่เข้าใจความคิดของคุณ คุณสามารถโพสต์เป็นคำตอบแยกต่างหาก
John Dvorak

@ PeterTaylor ฉันคิดว่าฉันพิมพ์ช่องว่าง?
John Dvorak

20

ปลา - 80

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

เมื่อข้อผิดพลาดของปลามันจะพิมพ์ "สิ่งที่มีกลิ่นคาว ... " เนื่องจาก z เป็นคำสั่งที่ไม่ถูกต้องมันจึงผิดพลาดทันที


17

ฉันรู้ว่ามันไม่ชนะการแข่งขันใด ๆ ฉันแค่อยากจะลองใช้ภาษาที่ไม่ได้ใช้ตามปกติสำหรับการเตะ

Java - 209 195 152 140 ตัวอักษร

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

ด้วยตัวแบ่งบรรทัดและแท็บ

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

ระวังหากคุณดำเนินการ: โปรแกรมไม่ยุติการทำงาน ฮ่าฮ่า

คำอธิบาย

  1. for(char c=0;;c++): เนื่องจากcharสามารถรักษาได้เป็นผมใช้ที่เพื่อประโยชน์ของฉันที่นี่เพื่อเพิ่มค่าผ่านทางที่เป็นไปได้ทั้งหมดint cฉันไม่ใช้เงื่อนไขยุติในลูป (เงื่อนไขที่จะอยู่ระหว่างเซมิโคลอนสองอัน) เพื่อบันทึกอักขระเนื่องจากไม่ได้ระบุว่าโปรแกรมต้องยุติการทำงาน :)
  2. "publicas{tvodmn(Srg[])h=0;w+ye.\"\\xO<?:} ".indexOf(c)<0?c:""น่าเศร้าไม่ใช่วิธีการที่สวยงามมาก แต่มันก็ทำให้งานสำเร็จ รายการตัวละครทุกตัวที่มีอยู่ในซอร์สโค้ดด้วยตนเองStringตามตัวอักษรจากนั้นตรวจสอบว่ากระแสchar cเกิดขึ้นภายในตัวมันด้วยindexOf()หรือไม่ หากการindexOf()โทรกลับ-1มาแสดงว่าไม่มีอยู่ดังนั้นเราควรพิมพ์ออกมา ส่วนที่เหลือนั้นใช้ตัวดำเนินการที่สามเพื่อประหยัดอักขระและพื้นที่

คุณอธิบายได้ไหม
joey rohan

1
@joeyrohan แน่ใจว่าเพิ่งเพิ่มคำอธิบายด้านล่าง :)
asteri

เจ๋ง;) สิ่งดีๆ :)
joey rohan

2
คุณสามารถใส่ตาราง ENTIRE ascii ที่พิมพ์ได้ในความคิดเห็นและสร้าง java programm ที่ไม่แสดงผลใด ๆ มันจะเอาชนะคุณ :-)
Pierre Arlaud

9
คุณสามารถบอกฉันได้ว่านี่จะเป็นการพิมพ์อักขระ Unicode ทุกตัวก่อนที่ฉันจะประมวลผลในเทอร์มินัลของฉัน
nyuszika7h

14

Perl, 49 ตัวอักษร

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

นี่เป็นความท้าทายที่น่าสนใจ - มันเป็นเรื่องต่อต้านควินน์และฉันพยายามที่จะทำให้โปรแกรมสั้นลงสองสามครั้งโดยการเพิ่มช่วงของตัวละครที่ปรากฏในนั้น


14

ทับทิม, 81 78 68 66 62 57

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

เพียงตรวจสอบตัวเอง อักขระที่ซ้ำกันถูกลบออกด้วยตนเอง

ขอบคุณ Josh สำหรับการบันทึก 4 ตัวอักษรและ minitech สำหรับการบันทึก 5 ตัว!


คุณไม่สามารถใส่คำสั่ง if หลังจาก $> << x เพื่อบันทึกบรรทัดสุดท้ายได้หรือไม่
Josh

@ Josh ใช่ ฉันจะทำตอนนี้
Doorknob

คุณสามารถไปที่ 58:(?!..?~).map{|x|$><<x if/[()ifmap{}|x?!.~\/\\\[\]$><]/!~x}
Ry-

1
อ่าและมีตัวเลือกชื่อตัวแปรที่ดีกว่า 57:(?!..?~).map{|a|$><<a if/[()ifmap{}|?!.~\/\\\[\]$><]/!~a}
Ry-

$><<((32..126).map(&:chr)-IO.read(__FILE__).chars).join55 ไบต์โดยใช้วิธีการอื่น
twe4ked


12

ไม่จริงจังมาก แต่ฉันต้องไป:

JSFuck (138152)

(แหล่งรวบรวมที่นี่)

แหล่งต้นฉบับ:

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

พิมพ์ตัวละครทั้งหมดยกเว้น() + []!


2
(x)<=> [x][+[]]เพิ่มขนาดรหัส แต่ทำให้ตัวอักษรมีขนาดเล็กลง
FireFly

12

งานของคุณคือสร้างโปรแกรม (ใช้เฉพาะอักขระ ASCII ที่พิมพ์ได้และ / หรือแท็บและบรรทัดใหม่)

เอ้ยคุณทำให้มันยากสำหรับ APL (นั่นเป็นตัวแยกแยะใช่ไหม)
ดังนั้นฉันจึงตัดสินใจละเว้นกฎทั้งหมด !!!

APL (Dyalog), 3 10

⎕AV

พิมพ์อะตอมมิกเวกเตอร์ (ซึ่งรวมถึงอักขระ ASCII ที่พิมพ์ได้ทั้งหมด)


ปรากฎว่าฉันลืมส่วนที่ "ไม่มี" อย่างสิ้นเชิง ...
แต่นั่นเป็นการแก้ไขที่ง่าย

⎕AV~'AV'''

~'AV'''หมายถึงไม่รวม ( ~) อักขระ A, V และเครื่องหมายคำพูดเดี่ยว (หนีเป็นเครื่องหมายคำพูดเดี่ยวสองเท่า)

เกี่ยวกับการพิมพ์ที่ไม่ใช่ ASCII ฉันก็ไม่สนใจกฎทั้งหมด


"พิมพ์ [s] อักขระทั้งหมดในพื้นที่ ASCII ที่พิมพ์ได้ ( 0x20ไป0x7e) ที่ไม่ปรากฏในซอร์สโค้ดของโปรแกรมของคุณ" ฉันเชื่อว่าเอาต์พุตอาจไม่มีอักขระนอกพื้นที่ ASCII ที่พิมพ์ได้ ("ตรง" เป็นคำหลัก) และโปรแกรมของคุณมี 'A' และ 'V' ดังนั้นจึงไม่ควรพิมพ์
FireFly

1
อย่างน้อยคุณจะต้องเพิ่ม~ชุดอักขระที่แยกออก ;-) Btw, วิธีแก้ปัญหา J ที่คล้ายกันคือa.-.'a.-'''
FireFly

2
คุณสามารถเพิกเฉยต่อกฎทั้งหมด แต่นั่นทำให้คุณตัดสิทธิ์จากการเป็นคำตอบที่ยอมรับได้
Joe Z.

11

GolfScript ( 18 16 ตัวอักษร)

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

การสาธิตออนไลน์พร้อมบรรทัดเพิ่มเติมซึ่งทำการตรวจสอบความถูกต้องและส่งออกจำนวนอักขระที่ผิดพลาด

(ฉันมีทางเลือกเทียบเท่าต่างๆ. @`^สามารถถูกแทนที่ด้วย\\`; #สามารถถูกแทนที่ด้วย`หรือ]การรวมกันที่เหมาะสมที่สามารถใช้กับเคล็ดลับของฮาวเวิร์ดจะเท่ากับคะแนนของเขา 15 เพราะ backslashes ไม่จำเป็นต้องหลบหนีในบล็อกวิธีการที่พวกเขาทำในสายอักขระตัวอักษร. {),\`^32>].~}.~แต่โฮเวิร์ดสมควรได้รับเครดิตสำหรับเคล็ดลับนั้น)


1
การละเมิดกฎที่ดี :-) golfscript.apphb.com/?c=ImAnficoLCszMj5cXC0uIi5%2B
John Dvorak

2
ASCII โชคดีที่จะสิ้นสุดลงใน}~- ดียิ่งขึ้นสำหรับบล็อกรหัสดูคำตอบใหม่ของฉัน ;-)
ฮาวเวิร์ด

11

Brainfuck, 173

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

ค่อนข้างนานฉันอาจลองอีกครั้งในภายหลัง


6
เขียนโปรแกรมที่ไม่ทำอะไรเลยและเพิ่มส่วนที่เหลือ od ascii ลงในซอร์สกรณีที่เลวร้ายที่สุดให้ความรู้สึกเหมือนตัวอักษร 96 ตัว
Jasen

10

J ( 52 40)

แก้ไข: Duh ลืมเกี่ยวกับ e.

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

เวอร์ชั่นเก่า:

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

ตัวแปรอื่น ๆ (ความยาวเท่ากัน แต่น้อยกว่าเอาต์พุต):

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

@JanDvorak: โห่ร้องคำราม
marinus

สาปมัน! ฉันหวังว่าฉันจะได้ทับทิมในระดับต่ำพอที่จะเอาชนะคุณและจากนั้นคุณทิ้งมันไปจนครบ 40: P
Doorknob

อันใหม่นั้นดูแปลกตากว่ามาก
John Dvorak

1
@ Doorknob: ฉันมีหนึ่งใน APL ที่มีเพียง 24 ตัวอักษร แต่มันมีตัวอักษรที่ไม่ใช่ ASCII
marinus

ใช่ฉันทำสิ่ง ASCII เพื่อหลีกเลี่ยงภาษาอย่าง APL
Joe Z.

7

Python 3 - 68 61

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

... ขอบคุณ @WolframH สำหรับการปรับปรุง


1
ฉันคิดว่าคุณสามารถใส่exec(x)ในบรรทัดใหม่และบันทึกใน; xนอกจากนี้ใน Python 3 คุณสามารถใช้x=r"print(*set(map(chr,range(32,127)))-set(x+'=\"'))"\nexec(x)สำหรับ 61 ตัวอักษร (พิมพ์หลายช่องว่างซึ่งได้รับอนุญาต)
WolframH

@ WolframH แยบยลขอบคุณ!

7

PowerShell: 96

จะต้องบันทึกและเรียกใช้เป็นสคริปต์

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

diffCompare-Objectเป็นตัวในนามแฝงสำหรับ

gcGet-Contentเป็นตัวในนามแฝงสำหรับ

$MyInvocation.InvocationName รับเส้นทางแบบเต็มไปยังสคริปต์ที่กำลังดำเนินการ

32..126เป็นทศนิยมเทียบเท่าสำหรับ0x20..0x7eและเพื่อสร้างอาร์เรย์ของรหัส ASCII ทศนิยมที่เรากำลังมองหา

[char[]]นำเนื้อหาของวัตถุถัดไปและทำให้พวกเขาเป็นอาร์เรย์ทำลายพวกเขาและแปลงเป็นอักขระ ASCII ดังนั้นตอนนี้เรามีอาร์เรย์ของอักขระ ASCII สองชุด - อันหนึ่งดึงมาจากสคริปต์นี้อีกชุดหนึ่งที่กำหนดโดยเกณฑ์ความท้าทาย

-Paตั้งค่าCompare-Objectเป็นรูปแบบ "Passthru" ดังนั้นเฉพาะรายการที่พบความแตกต่างระหว่างอินพุตเป็นเอาต์พุตที่คอนโซล - ตัวบ่งชี้ว่ารายการใดบ้างที่อินพุตยังคงถูกเก็บไว้ในข้อมูลของวัตถุ แต่ไม่แสดง

|?{$_.SideIndicator-eq'=>'}Compare-Objectเอาต์พุตของไปป์ไลน์Where-Objectซึ่งจะกรองลงไปยังไอเท็มพิเศษเฉพาะสำหรับอินพุตที่สอง


มีสติและให้คำแนะนำ
Stéphane Gourichon

7

PHP - 92

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

เอาท์พุท:

ไม่มีอะไร

OP ขอให้พิมพ์ตัวละครที่ไม่ได้ใช้ทั้งหมดฉันแค่ใช้มันทั้งหมด


เกี่ยวกับ<?='A"$%&\'()*+[,.]/0123456789:=-@ABCDEFGHIJKLMNOPQRSTUVWYZ\^_`abcdefghijklmopqrstuvwxyz{|}~#'อะไร
jocap

ฉันรู้ว่าจะมีการส่งที่เพิ่งใช้อักขระทั้งหมด
MilkyWay90

สิ่งนี้ไม่ได้ใช้ตัวละคร!;>Xn
โจคิง

6

Javascript, 92

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

นี่เป็นทางออกที่ยุติธรรมหรือไม่ การแจ้งเตือน ('! "# $% ^ * + / -. / 0123456789:; <=>? @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [] ^ _` bcdfghijkmnopqsuvwxyz {|} ~') มาที่ 95 chars และโง่เหมือนนรก: p
tristin

2
@tristin: จ้ะจาวาสคริปต์เป็น verbose เล็กน้อยเมื่อมันมาถึง charcode เพื่อสตริง และมันจะไม่ส่งออกตัวละครทุกตัวที่โปรแกรมของคุณไม่มี ข้อความแจ้งเตือนของคุณอยู่ในโปรแกรมของคุณเช่นกัน :)
C5H8NNaO4

1
ฮ่าฮ่าอ๊ะ โอ้ดี
tristin

6

Java - 126 ตัวอักษร

ลดลง:

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

unminimized:

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

นี่เป็นปัญหาที่น่าสนใจเพราะโทเค็นส่วนบุคคลอาจได้รับประโยชน์จากรูปแบบที่ยาวขึ้นเพราะใช้อักขระซ้ำ ตัวอย่างเช่นโดยทั่วไปString[]จะสั้นกว่า แต่ไม่String...จำเป็นต้องใช้วงเล็บเหลี่ยมในสตริงที่มีเงื่อนไข

ฉันพบว่ากลอุบายคือการพยายามและใช้อักขระที่จุดเริ่มต้นและจุดสิ้นสุดของช่วงเพื่อให้คุณสามารถแยกพวกเขาออกจากผลลัพธ์ได้โดยเพียงแค่เปลี่ยนลูปเริ่มต้นและสิ้นสุด

สำหรับ Java เป็นตัวละครสำคัญที่จะไม่รวมเป็น"เพราะมีว่าในสตริงต้องหลบหนีมันซึ่งจะเพิ่มให้กับโปรแกรมของคุณซึ่งต้องไปในสตริงซึ่งจะเพิ่ม\ \\ด้วยการลบ"สตริงที่มีเงื่อนไขของคุณคุณจะลบอักขระ 4 ตัว นี้สามารถทำได้โดยการทำให้แน่ใจว่าคุณใช้และและเริ่มต้นของคุณจากวง!#

ทุกตัวอักษรตัวพิมพ์เล็กปรากฏอยู่ใกล้กับจุดสิ้นสุดของช่วงมีเพียง{, |, }และ~มาหลังจากที่พวกเขา เนื่องจากการใช้คำฟุ่มเฟือยของ Java ตัวอักษรตัวเล็กส่วนใหญ่จึงใช้สำหรับหม้อไอน้ำ ในทำนองเดียวกัน{และ}เป็นเรื่องเล็กน้อยสำหรับโปรแกรม Java เพราะต้นแบบต้องใช้พวกเขา

|สามารถใช้ถ้าคุณมีหรือเงื่อนไข แต่ฉันไม่สามารถหาวิธีที่จะใช้ประโยชน์จากหนึ่งที่นำไปสู่โปรแกรมที่สั้นกว่าเพียงแค่ใช้|เป็นผู้ประกอบการระดับบิต |0ทำให้ฉันรู้สึกเล็ก ๆ น้อย ๆ ที่สกปรกเพราะมันเป็นเพียงส่วนหนึ่งที่ nop เพียงเพื่อให้ได้ตัวอักษรที่อยู่ในนั้น

~0อัตราผลตอบแทนซึ่งเป็นประโยชน์เพราะนั่นคือสิ่งที่เราจะต้องตรวจสอบกับ-1 indexOfการรวมสิ่งนี้เข้ากับการใช้!=สำหรับลูปแบบมีเงื่อนไขจะกำจัด<อักขระทั้งหมดซึ่งหมายความว่าไม่จำเป็นต้องเข้าไปในสตริงที่มีเงื่อนไข


5

ดวลจุดโทษ (47)

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

ใช้วิธีการอ้างอิงตนเอง สมมติว่า/dev/urandomในที่สุดจะส่งออกทุกออคเต็ตอย่างน้อยหนึ่งครั้ง ไม่สิ้นสุด

หากเราสมมติว่าmanมีการติดตั้งเราสามารถใช้ascii(7)manpage แทน (และมีโปรแกรมที่ยกเลิก) ( 44 chars ขอบคุณ @fennec)

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

คุณสามารถใช้ไฟล์อื่นอาจมีชื่อที่สั้นกว่าซึ่งรับประกันได้ว่ามีออคเต็ตที่เป็นไปได้ทั้งหมดหรือไม่? และอาจถึงขั้นยุติ? ฉันกำลังคิดเหมือน / dev / หน่วยความจำหรือบางอย่าง

@fennec ถ้าเราคิดว่าmanและzshมีการติดตั้งman zshallดูเหมือนว่าจะเหมาะสมเกณฑ์ ฉันสามารถเพิ่มมันเป็นรูปแบบ
FireFly

man asciiฉันสามารถช่วยคุณจดหมายอีกฉบับหนึ่งได้ฉันคิดว่า

ซึ่งtrที่คุณใช้? GNU trถือว่า-"in" cat $0เป็นตัวดำเนินการช่วงซึ่งแบ่งเอาต์พุต
Toby Speight

BTW ถ้าโปรแกรมมีการติดตั้งคุณสามารถใช้ในสถานที่ของascii man ascii
Toby Speight

5

BitShift 1038 ไบต์

BitShift เป็นภาษาที่รองรับ0และ1เป็นไวยากรณ์เท่านั้น ฉันคิดว่ามันจะง่ายต่อการพิมพ์ตัวละครอื่น ๆ ทั้งหมด แต่เนื่องจากมันไม่รองรับการวนซ้ำมันจึงยังคงมีขนาดใหญ่ถึง 1,038 ไบต์
อย่างไรก็ตามฉันเชื่อว่ามันเป็นไปไม่ได้ที่จะเล็กไปกว่านี้อีก ..

101001100101011011010100110111010100100101011001101111010100100101011001000101011011010100101100110110101001001010110010001010110110101000001101010010010101100100010101101101010000010000011001010110110101000010000101011011010100110111010100100101011111100101011011010100110111010100100101011001101111010100100101011001000101011011010100000000011010100100101011001000101011011010100110010000101011011010100110111010100100101011001101001101010010010101100100010101101101010011001000010101101101010011011101010010010101111011111110010101101101010011011101010010010101100101100101011011010100010001010110110101001000010101101101010011011101010010010101110111110010101101101010011011101010010010101111111100101011011010100110111010100100101011111011110101001001010110010001010110110101001000100000101011011010100110111010100100101011111010011010100100101011001000101011011010100100000101011011010100110111010100100101011001101111010100100101011001000101011011010100010000010101101101010011011101010010010101101001101101010010010101101001101010

พิมพ์

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

ลองที่นี่


4

ทางออกที่ยาวที่สุดที่นี่แน่นอน แต่การเขียนโค้ดใน Lino สนุกเสมอ:

L.in.oleum -655 523 ตัวอักษร

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

ไม่มีความคิดเห็นเพียงแค่อ่านแหล่งที่รวบรวมเป็นไบนารี บันทึกเป็นa.txtหรือมันจะไม่รวบรวม!


4
ไม่, JSFuck อันหนึ่งยาวกว่า
Joe Z.

4

Brainfuck, 133 123 114 110 ไบต์

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

การแก้ไขปัญหาเล็กน้อยก่อนหน้านี้ (ก่อนที่ฉันจะรู้ว่าด้านล่างนั้นเล็กกว่า - แม้ว่านี่จะเป็นก่อนที่ฉันจะเพิ่มประสิทธิภาพอย่างหนัก) วิธีนี้ใช้งานได้โดยการเก็บหมายเลข ASCII 4 ชุดและพิมพ์ด้วยการวนลูปที่ยุ่งยากและจากนั้นให้อักขระที่หายไปหลังจากนั้น (เช่นตัวเลขที่อยู่ระหว่างหมายเลข ascii ที่ไม่ถูกต้อง)

ส่งต้นฉบับ

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

มันทำต่อไปนี้:

  • สร้างการลงทะเบียน 4 รายการที่มี 11. 13, 28, 33
  • สร้างที่ 5 ด้วยค่า 31 เพื่อเริ่มการพิมพ์
  • พิมพ์ ascii 32-42 (11)
  • พิมพ์ ascii 44
  • พิมพ์ ascii 47-59 (13)
  • พิมพ์ ascii 61
  • พิมพ์ ascii 63-90 (28)
  • พิมพ์ ascii 92
  • พิมพ์ ascii 94-126 (33)

4

Haskell (70)

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

โซลูชันที่ซ้ำซ้อนตัวอักษรในโปรแกรมในสตริงลบออกจากชุดสากล ห่างไกลจากผู้ชนะ codegolf ถึงแม้ว่ามันจะชัดเจนสำหรับความยาวของมัน

(ขณะนี้มีการลบรายการแทนfilter/ notWith.)


คุณสามารถเปลี่ยนimport Data.Listเป็นimport List
ภูมิใจ haskeller

. @ proudhaskeller ใช่มั้ย ดูเหมือนจะไม่ทำงานเมื่อฉันลองด้วยrunhaskell: "ไม่พบโมดูล 'รายการ'" ฉันสังเกตว่าฉันผิดจำนวนตัวละคร แต่ฉันก็แก้ไขมัน
FireFly

1
ก็แปลกดีลองด้วย ghc หรือ ghci มันใช้งานได้สำหรับฉัน
ภูมิใจ Haskeller

@proudhaskeller ไม่สามารถใช้งานได้ นี่คือกับ GHC 7.8.3
FireFly

3

J - 21

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

เขียนสิ่งนี้ลงในไฟล์ที่เรียกว่า5ในไดเรกทอรีปัจจุบัน จากนั้นโหลดรันสคริปต์ด้วย0!:1<'5'

หรือ 25 ที่ไม่มีเคล็ดลับไฟล์:

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

ซอร์สโค้ดประกอบด้วย'ซึ่งไม่ได้ถูกลบออกจากเอาต์พุต
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)))

จัดรูปแบบ:

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

คิดว่าทำเช่นนี้อาจต้องปรับแต่ง เอาท์พุท:

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

รันสตริงซึ่งเป็นรหัส clojure ที่ประเมินได้ในตัวเอง สตริงมีความคิดเห็นในตอนท้ายเพื่อรับอักขระที่ใช้นอกสตริง (เมธอดหลัก ฯลฯ )


3

Python 2, 69

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

ฉันใช้ลำดับที่ยาวที่สุด (ที่ฉันสามารถหาได้) ของตัวอักษรต่อเนื่องที่ฉันสามารถพิมพ์ออกมาและเพิ่มคนอื่น ๆ เป็นความคิดเห็นหลังจากรหัส


8
ฉันจะไม่ลงคะแนนเสียงใด ๆ ที่มีความคิดเห็น
John Dvorak

คำตอบของฉันควรแสดงวิธีที่เลวร้ายที่สุดในการแก้ปัญหานี้ (ใช้ช่องโหว่ความคิดเห็น)
โยฮันน์คุห์น

9
ตกลง ... ยกเว้นคนที่พูดได้หลายภาษาที่ไม่มีอะไรนอกจากความคิดเห็น
John Dvorak

@JohannesKuhn อย่างไรก็ตามเนื่องจากเป็นรหัสที่ใช้งานได้ยาวนานที่สุดจึงไม่ชนะการประกวด : P
Joe Z.

5
@JoeZ มันจะชนะโดยมีกำไรที่กว้างถ้าคุณแบ่งตามจำนวนภาษาที่ใช้ใน
John Dvorak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.