เขียนบทสนทนาทั้งหมดโดยใช้คนที่ไม่บริสุทธิ์


55

อักขระ ASCIIจากรหัสทศนิยม 33-126 คือ:

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

โปรดสังเกตว่าในแบบอักษรส่วนใหญ่ 25 ตัวอักษรเหล่านี้มี "หลุม" ในพวกเขา: ( ประเภทที่มากกว่า 0คุณอาจพูด)

#$%&04689@ABDOPQRabdegopq

อีก 68 ตัวอักษร "ไม่บริสุทธิ์" คือ:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

งานของคุณคือการเขียนโปรแกรมที่สั้นที่สุดเท่าที่จะทำได้โดยใช้เฉพาะอักขระที่ไม่มีการตัดทอนซึ่งแสดงผลอักขระที่อยู่ในแต่ละครั้งในลำดับใด ๆ

เนื่องจาก Space, Tab และ newlines (Line Feed และ / หรือ Carriage Return) เป็นพื้นที่ว่างที่อาจปรากฏในโปรแกรมหรือเอาท์พุตของมัน พวกเขายังคงนับรวมจำนวนอักขระ ห้ามใช้อักขระ ASCII อื่น (และไม่ใช่อักขระที่ไม่ใช่ ASCII)

หมายเหตุ

  • คุณไม่จำเป็นต้องใช้อักขระที่ไม่ได้ตัดทั้งหมดหรืออย่างใดอย่างหนึ่งเท่านั้น
  • ผลลัพธ์อาจไม่มีอักขระที่ไม่ได้หุ้ม
  • ภาษาช่องว่างอาจจะใช้
  • เอาต์พุตควรไปที่ stdout หรือสามารถไปที่ไฟล์ ไม่ควรมีอินพุต

โบนัส:เพื่อความสนุกลองพิมพ์ตัวละครที่ไม่ได้ใช้ตัวละครทั้งหมด ฉันสงสัยว่ามันสามารถทำได้ในภาษาที่มีอยู่


9
+1 สำหรับชื่อ เราทำสิ่งที่รักเช่นนี้
จาค็อบ

1
โซลูชัน Perl อยู่ที่ไหน!
Pierre Arlaud

4
ก็ไม่มีทางออกใน Haskell หรือ C; mainถ้าหากมันเป็นโปรแกรมที่คุณต้องการแล้วคุณจำเป็นที่จะสะกด
Rhymoid

2
โบนัสสามารถทำได้โดยใช้ช่องว่าง
Joshua

1
ไม่มีใครเคยสังเกตเห็นว่าฉันลืมได้อย่างไร~?
งานอดิเรกของ Calvin

คำตอบ:


18

Pyth , 43 35 ตัวอักษร

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

ลองมันนี่

พิมพ์อักขระตามลำดับยกเว้นว่า 9 อยู่ที่จุดเริ่มต้นบรรทัดใหม่จะถูกคั่น

สตริงมีอักขระทั้งหมด 7 ตัวที่มากกว่าที่จำเป็นยกเว้นว่า 9 จะกลายเป็น @ ดังนั้นมันจึงเป็นกรณีพิเศษ อัลกอริทึมต้องขอบคุณ @Howard

คำอธิบาย:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.

24

GolfScript, 37 36 ตัวอักษร

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

ลองรหัสที่นี่

สตริงมีอักขระต้องห้าม xor'ed ที่มี 25 โชคดีที่อักขระทั้งหมดถูกแมปกับอักขระที่ถูกต้อง


22

Brainfuck 119

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

เอ่อ--ตอนเริ่มต้น ... คุณขี่จักรยานกลับไปที่ 254 ในการลงทะเบียนครั้งแรกที่นั่น?
WallyWest

1
Yup :) ทำให้ลูปสั้นลง 36 (เพื่อให้ได้ 35)
Teun Pronk

แน่นอนว่ามันเต้น 275 ของฉัน ... ทำได้ดีมาก ...
WallyWest

@ งานอดิเรกของ Calvin ฉันค่อนข้างแน่ใจว่าไม่อนุญาตให้ป้อนข้อมูลขออภัย OP อาจต้องการชี้แจง
isaacg

@isaacg ฉันรู้ว่า thats ทำไมรหัสหลักของฉันไม่ได้ใช้ป้อนข้อมูลและตัวอย่างสุดท้ายไม่ได้เป็นหนึ่งร้ายแรง :)
Teun Pronk

20

โบนัส - dc, 179 ตัวอักษร

โอ้ดีความท้าทายชุดอักขระที่ จำกัด อีกตัวหนึ่งที่Pอนุญาต

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

เนื่องจากdcเห็นได้ชัดว่าไม่ชัดเจนพอที่จะอธิบาย (แปลก ๆ ที่ฉันคิดเรื่องแปลก ๆ ที่นี่!) นี่เป็นภาพรวม:

ส่วนใหญ่เป็นเครื่องคิดเลข RPN ที่มีความแม่นยำทางคณิตศาสตร์โดยพลการ แต่สำหรับความท้าทายนี้ฉันใช้ประโยชน์จากPคำสั่งซึ่งตีความตัวเลขเป็นชุดอักขระในฐาน 256 และพิมพ์ออกมา ตัวอย่าง: 65 Pพิมพ์A(รหัส ASCII 65) 16706 Pพิมพ์AB(16706 = 65 * 256 + 66)

นอกเหนือจากนั้นคุณลักษณะที่น่าสนใจอื่น ๆ เท่านั้นคือมันรับรู้เลขฐานสิบหกทั้งหมด0-9A-Fแม้ว่าพวกเขาจะไม่ได้อยู่ในเลขฐานสิบหก การป้อนข้อมูลทศนิยมเป็นค่าเริ่มต้นเพื่อให้การป้อนข้อมูลโทเค็น999หมาย9 hundreds + 9 tens + 9และABCหมายถึงการทำให้มันเทียบเท่ากับ10 hundreds + 11 tens + 121122

ความสามารถในการใช้ตัวเลขABDในรูปทศนิยมบางส่วนนั้นทำให้ไม่สามารถใช้งาน12357ได้และส่วนที่เหลือในการเลือกการสั่งซื้อและการจัดกลุ่ม (ถ้าฉันต้องตัวเลขบางx, y, zและพวกเขาจะไม่ representable ด้วยตัวเลขที่ได้รับอนุญาตแล้วฉันพยายามเป็นตัวแทนx*256*256+y*256+zแทน.)

โปรแกรมอาจจะสั้นลงเล็กน้อยโดยใช้กลุ่มที่ใหญ่กว่า ฉันไม่ได้ไป 3 ไบต์ต่อตัวเลข


1
@DigitalTrauma อีกวิธีคือโบนัสเมื่อสิ้นสุดคำชี้แจงปัญหา

ฮา! ฉันคิดถึงสิ่งนั้น! ยอดเยี่ยม! +1
บาดเจ็บทางดิจิตอล

คุณอธิบายได้ไหม และมีสถานที่ที่เราสามารถเรียกใช้สิ่งนี้ได้หรือไม่?
งานอดิเรกของ Calvin

4
สถานที่ที่คุณสามารถวิ่งได้ dc ไม่ใช่ภาษาโง่ ๆ ที่ออกแบบมาเพื่อการอ่านที่ยากต่อการอ่าน แต่เป็นเครื่องคิดเลขที่จริงจัง รันบนเครื่องยูนิกซ์ (หรือ cygwin) en.wikipedia.org/wiki/Dc_(computer_program)

@ Calvin'sHobbies หากคุณมีการเข้าถึงเพียงใดเกี่ยวกับเครื่อง Linux หรือ Unix (รวมทั้ง OSX) เพียงบันทึกเป็นไฟล์ข้อความเช่น bonus.dc dc bonus.dcแล้วเรียกใช้ dc เป็นหนึ่งในภาษาที่เก่าแก่ที่สุดในนั้นและได้รับการติดตั้งถาวรใน * ระวังมานานหลายทศวรรษ มันไม่เป็นที่รู้จักกันดี แต่อาจเป็นเพราะอาร์เคนของอาร์เคนและไวยากรณ์ที่อ่านไม่ได้ ดีสำหรับบางรหัสกอล์ฟท้าทายแม้ว่า ;-)
ดิจิตอลบาดเจ็บ

12

Bash + coreutils, 56 ไบต์

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

โชคดีที่มีมันการเพิ่ม 7 ลงในค่า ascii ของอักขระ holed จะให้ผลลัพธ์อักขระที่ไม่มีการใส่ทั้งหมด (ยกเว้น "9") เราก็แค่แปลงรูปนี้กลับกันแล้วก็แปลงที่คล้ายกัน (ลบ 12 จาก "E") เพื่อให้ได้ "9"

เอาท์พุท:

#$%&0468@ABDOPQRabdegopq
9

7
ฉันชอบวิธีที่บรรทัดแรกลบ 7 ออกจากกลุ่มของอักขระและมันมีการ-7แสดงที่ชัดเจนระหว่างอักขระเครื่องหมายวรรคตอนและข้อเท็จจริงทั้งสองนั้นไม่มีความเกี่ยวข้องกัน

@ WumpusQ.Wumbley ฉันไม่ได้สังเกตว่า :)
Trauma Digital

6

Perl - 49 ไบต์

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

นี่เป็นทางออกของโฮเวิร์ดในภาษา Perl XORing สตริงกับ 25 #$%&04689@ABDOPQRabdegopqการส่งออกเป็นไฟล์ที่มีชื่อ ฉันมีความคิดที่จะใช้symlinkและชื่อไฟล์เป็นรูปแบบผลลัพธ์เพราะทุกอย่างถูกแบน

นี่เป็นอีกหนึ่งทางออกของ Perl ที่ฉันคิดขึ้นมา มันอาจจะปรับปรุงได้มากและมันก็ค่อนข้างยาวดังนั้นตอนนี้ฉันจะอยู่ในรูปแบบที่อ่านได้

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

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

for, while, map, say, print, eval, s///eและชื่อตัวแปรใด ๆ ที่ไม่สามารถนำมาใช้ (ตัวแปรเริ่มต้นด้วย@หรือ$ใน Perl) ซึ่งทำให้ยากลำบากนี้

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


ฉันจะให้ +1 กับคุณสำหรับความคิดสร้างสรรค์! การใช้รหัสที่ฉลาดมาก!
WallyWest

ฉันรู้ว่ามันค่อนข้างเก่า แต่ก็เป็นไปได้ที่จะพิมพ์ผลลัพธ์ไปที่หน้าจอและบันทึกสองสามไบต์โดยใช้-pแฟล็กและ*_=\(... ): ลองออนไลน์!
Dom Hastings

@ DomHastings เจ๋ง! ฉันคิดว่า-pธงจะถูกแบนแม้ว่าจะpมีรู
hmatt1

5

MATLAB, 36 ไบต์

ดังนั้น .... เพียง 1 ไบต์มากกว่าผู้ชนะปัจจุบัน (isaacg)! ซึ่งในการตรวจสอบเพิ่มเติมฉันได้ทำสิ่งที่ฉันทำไปแล้วเช่นกัน ไม่เป็นอันตรายในการพลิกโฉมพวงมาลัย ...

ฉันรู้ว่านี่เป็นความท้าทายที่เก่าแก่ แต่ฉันก็รู้ว่าหลังจากฉันสนใจ

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

ถ้าเพียง แต่ฉันสามารถให้ MATLAB เข้าใจว่าฉันต้องการสตริงที่ไม่มี''คำแนะนำ ... แยกกันทุกคน?


4

Brainfuck 303 275

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

Brainfuck ภาษาลับสุดยอดที่ไม่บริสุทธิ์ (นอกเหนือจาก Whitespace);)


1
โปรดลบชิ้นส่วนเก่าไม่ผ่าน
isaacg

2
ฉันเห็นว่าคุณใช้คำพูด (ไม่รู้ชื่อจริง) สำหรับตัวอย่างโค้ดของคุณ อาจจะง่ายกว่าในการเลือกรหัสของคุณและกดCtrl+ K:)
Teun Pronk

@isaacg เรียบร้อยแล้ว TeunPronk ทำแล้ว!
WallyWest

6
หรือแค่กด spacebar 4 ครั้งถ้ามันเป็นเพียงหนึ่งหรือสองบรรทัด @TununPronk นี่? `นั่นเป็น backtick (เรียกอีกอย่างว่าสำเนียงหลุมฝังศพแม้ว่า " คำพูดที่อ้างถึง " เป็นคำใหม่สำหรับฉัน: P)
Doorknob

1
@Doorknob จากนั้นเราทั้งสองเรียนรู้บางสิ่งบางอย่างในวันนี้ถึงแม้ว่าสิ่งที่คุณเรียนรู้จะผิด แต่อย่างใด: P
Teun Pronk

4

JS - 196 - ลองดู

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')

1
เอ้ยนี่มันบ้า ดูเหมือนว่าเจเอสเป็นหนึ่งในภาษา abusable ที่สุด =)
flawr

ใช้งานได้ใช่ แต่นี่เป็นเพียงจุดเปรียบเทียบกับรายการของฉัน ... ขอโทษ @bebe แต่ฉันออกไปข้างนอกคุณ JS เวลานี้ ...
WallyWest

1
@WallyWest ฉันประกาศสงคราม
bebe

1
217 : h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')- inline l, shortened m, ประกาศiเมื่อใช้ครั้งแรก, สร้าง vars พิเศษอีกสองสามอันสำหรับรูปแบบซ้ำ ๆ (คุณสามารถปรับปรุงสิ่งนี้ได้โดยปรับแต่งลำดับของ chars ที่ส่งออก, แต่นั่นไม่ใช่ความอดทนของฉัน: P)
Alconja

2

GolfScript, 89 ตัวอักษร

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

เพียงแค่สร้างอาร์เรย์ของอักขระ ASCII ทั้งหมดและลบอักขระที่ไม่ใช่ "holed" ออกจากพวกเขา

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string

2

Befunge 98 - 69 bytes

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

ทำได้ใน 3 ส่วน หนึ่งที่ค่าของตัวอักษรที่ไม่บริสุทธิ์แตกต่างจากตัวอักษรแบบ holed คูณ 5 จากนั้นตัวอักษรที่แตกต่างกัน 1 และสุดท้ายก็คือรายชื่อตัวละครแบบ unholed ที่ต่างกัน 3 ตัว คำสั่งโปรแกรมยุติใน Befunge คือ "@" (ค่าถ่าน 64) ดังนั้นตอนท้ายฉันโหลด "?" (ค่าถ่าน 63) เพิ่ม 1 จากนั้นใส่รหัสนั้นลงในคำสั่ง 's'

ฉันอาจจะเล่นกอล์ฟให้มากกว่านี้ด้วยการรวมสามอย่างนี้เข้าด้วยกัน

>:5j2 ,(differ value)_

ส่วน แต่อาจไม่มาก


2

JavaScript 240 228

การส่งครั้งแรก:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

ตอนนี้เป็นการเริ่มต้นที่ดีนี่คือวิธีที่จะแยก ...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

แล้วฉันก็คิดว่า ... "ต้องมีวิธีที่ง่ายกว่า ... " และมี ...

แก้ไขการส่ง: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

เห็นฉันสามารถใช้eval (โดย piecing มันเข้าด้วยกันแรงบันดาลใจจาก @bebe; ซึ่งเป็นมากเร็วกว่าการใช้constructorของconstructorของnumber... ) ฉันเจาะลงไป 228 ... ฉันรู้ว่ามันอาจจะไม่ชนะนี้ท้าทายกอล์ฟโดยเฉพาะอย่างยิ่ง แต่นี่เป็นเพียงวิธีของฉันในการแสดงว่าคุณสามารถละเมิดจาวาสคริปต์มากแค่ไหนและยังได้รับผลลัพธ์ที่ต้องการ ...


2

หน้าหลัก - โรคนอนไม่หลับ , 50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

มันออก:

abdegopq04689@ABDOPQR#$%&

โบนัส - โรคนอนไม่หลับ, 268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

มันออก:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

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

เพียงเพื่อแสดงภาษาอื่นที่สามารถใช้งานได้ด้วยจำนวนอักขระที่ จำกัด โดยวิธีการมันสามารถเขียนเพียงเกี่ยวกับการส่งออกใด ๆ ที่มีเพียง 3 ตัวอักษรที่ไม่ซ้ำกันในแหล่งที่มา

ปัจจุบันนี้เป็นภาษาเดียวที่สามารถทำทั้งความท้าทายหลักและโบนัสในคำตอบที่มีอยู่ทั้งหมด

นอนไม่หลับล่าม


1

Befunge 98 - 46 ไบต์

Befunge-ified เวอร์ชันของรายการ Pyth ของ isaacg:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <

1

Japt , 33 ไบต์

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

ลองออนไลน์!

อัลกอริทึมเช่นเดียวกับการส่ง Pyth ของ isaacgเพิ่งจะสั้นลงใน Japt

มันทำงานอย่างไร

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

7+2           Obviously the number 9
    "..."c-7  Apply -7 on each char's charcode of this string
   +          String concatenation

ใช่มันคือ JS ซึ่งเป็นหนึ่งในภาษาที่ใช้งานไม่ได้มากที่สุดสั้นลง (และคุณไม่ต้องการalertหรือconsole.logที่นี่)

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