เราลืมอะไรไป


31

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

เช่นถ้าโปรแกรมของเรา

aabacba

จากนั้นbcbจะส่งออกa, aaacaจะต้องมีการส่งออกbและจะเอาท์พุทaababac

ไม่สำคัญว่าโปรแกรมที่ไม่ได้แก้ไขจะทำอะไร

คำตอบจะได้คะแนนเป็นไบต์โดยมีเป้าหมายเพื่อลดจำนวนไบต์


4
เนื่องจากความท้าทายนี้ไม่ได้ติดแท็ก quine เราจะอ่านซอร์สโค้ดของเราเองได้ไหม
Dennis

1
@ เดนนิชชัวร์ เป็นแขกของฉัน
Wheat Wizard

2
หากจำนวนไบต์ทั้งหมดในโปรแกรมของเราเป็นตัวเลขเราจะส่งออกโดยใช้รหัสทางออกได้หรือไม่
Mr. Xcoder

15
ฉันคิดว่านี่น่าจะดีกว่าเมื่อมีความท้าทายด้านรหัสที่คุณต้องเพิ่มจำนวนอักขระที่ไม่ต่อเนื่องให้มากที่สุด
Notts90

2
ควรระบุมากกว่า 1 ไบต์แทนที่จะไม่ว่าง : P หรือสิ่งที่ Notts90 พูด
Magic Octopus Urn

คำตอบ:


70

zsh, 603 594 566 561 548 440 415 399 378 370 ไบต์

ec
ho \\n;ca t<<<$'\x20';exi t
d$c -e8BC6P
d0c -eKp
$'\172\163\150' $'\055\143' $'\146\157\162 v \151\156 \173\043\056\056\134\175\175\073\173 \146\147\162\145\160 \055\161 $\166 '$0$'\174\174\074\074\074$\166\073\175'
$'\145v\141\154' $':\073\072\046\046\145\170\151\164';#%&()*+,/9=>?@ADEFGHIJLMNOQRSTUVWXYZ[]^_`jklmsuwy
0# $#;for b in {$..z};{ fgrep -q $b $0||<<<$b;}

ขึ้นอยู่กับ coreutils dc+

ลองออนไลน์!

นั่นคือ ... การเดินทาง

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

ดูที่ส่วนแรกเราจัดการก่อน

  • การลบบรรทัดใหม่ด้วย ec\nho \\n
  • การลบช่องว่างด้วยca t<<<$'\x20'(ตามด้วยexi tเพื่อหลีกเลี่ยงการเรียกใช้โค้ดในภายหลังซึ่งจะส่งผลให้เกิดการส่งออกภายนอก)
  • $การลบด้วยd$c -e8BC6P( 8BC6= 9226คือ36*256 + 10และ 36 และ 10 เป็นค่าไบต์ของ$อักขระและบรรทัดใหม่ตามลำดับเราใช้เลขฐานสิบหกเป็นทศนิยมเพื่อหลีกเลี่ยงการรวมไว้ในความคิดเห็นขนาดใหญ่ในบรรทัด 6)
  • 0ลบด้วยd0c -eKp( Kได้รับความแม่นยำทศนิยมซึ่งเป็น0ค่าเริ่มต้น)

ในส่วนถัดไปอักขระที่ใช้เท่านั้น (นอกเหนือจากขยะที่ท้ายบรรทัดที่สอง) คือ$'\01234567v;ช่องว่างและบรรทัดใหม่ ในจำนวนนี้มีสี่ตัวที่เหลือดังนั้นส่วนที่เหลือ ( '\1234567v) จะไม่สามารถเกิดขึ้นได้ในบรรทัดสุดท้าย การขยายค่า Escape ฐานแปด ( $'\123'แทนอักขระ ASCII ด้วยค่า 123 8 ) เราจะได้รับ:

zsh -c 'for v in {#..\}};{ fgrep -q $v '$0'||<<<$v;}'
eval ':;:&&exit'

บรรทัดแรกวนรอบอักขระทั้งหมดที่ใช้ในโปรแกรมและค้นหาแต่ละรายการในซอร์สโค้ดของตัวเอง ( $0คือชื่อไฟล์ของสคริปต์ที่กำลังเรียกใช้) โดยพิมพ์อักขระใด ๆ ที่ไม่พบ

บรรทัดที่สองนั้นดูแปลกไปเล็กน้อยและดูเหมือนจะทำสิ่งเดียวกันexitกับพวงนปภ. อย่างไรก็ตามการเข้ารหัสexitเป็นฐานแปดโดยตรงส่งผลในการ$'\145\170\151\164'ซึ่งไม่ได้มีหรือ2 3เราต้องทำให้สิ่งนี้มีความยืดหยุ่นน้อยลงในการลบออก นี่เป็นเพราะหาก'\014567vมีการลบใด ๆทำลายบรรทัดแรกบรรทัดที่สองก็จะแตกออกทำให้ส่วนที่เหลือของรหัสในการดำเนินการ อย่างไรก็ตามเราต้องการให้มันแตกหาก2หรือ3ถูกลบเพื่อให้บรรทัดที่ 3 และ 4 สามารถทำงานได้ สิ่งนี้สามารถทำได้โดยการใส่รองเท้าใน:และ;ซึ่งมี 2 และ 3 ในการแสดงฐานแปดของพวกเขาตามลำดับ

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

หากexitไม่ได้รับการเรียกในส่วนแรก (เช่นมันถูกทำให้ยุ่งเหยิงโดยการลบหนึ่งใน'\01234567v) เราจะย้ายไปยังส่วนที่สองซึ่งเราต้องทำสิ่งเดียวกันให้สำเร็จโดยไม่ต้องใช้ตัวอักษรเหล่านี้ บรรทัดสุดท้ายคล้ายกับบรรทัดแรกที่ถอดรหัสยกเว้นว่าเราสามารถสัญญาช่วงของลูปเพื่อบันทึกสองสามไบต์เพราะเรารู้แล้วว่าตัวละครทั้งหมดยกเว้น'\01234567vได้รับการคุ้มครอง นอกจากนี้ยังมี0# $#ก่อนหน้าซึ่งแสดงความคิดเห็นและป้องกันไม่ให้สร้างผลลัพธ์ภายนอกหาก0หรือ$ลบออก


5
ว้าวน่าประทับใจมากเมื่อพิจารณาจำนวนตัวละครที่เกี่ยวข้อง! มองไปข้างหน้าอย่างแน่นอนเห็นคำอธิบายที่
Kevin Cruijssen

3
@KevinCruijssen ที่นี่คุณไป :)
Doorknob

1
@Doorknob ถ้านี่ไม่ชนะคุณ 548 internets ฉันไม่รู้ว่ามันทำอะไร จริงๆแล้วรุ่น 603 ไบต์นั้นช่างน่าประทับใจจริงๆ!
Magic Octopus Urn

3
คำตอบเดียวที่น่าสนใจ
htmlcoderexe

21

เรติน่า 1 ไบต์

1

ลองออนไลน์!

เมื่ออินสแตนซ์ทั้งหมดของไบต์เดียว (1 ) 1จะถูกลบออกเป็น เรียบง่ายพอสมควร


6
ฉันกำลังค้นหา TIO เพื่อหาสิ่งนี้ - คุณเอาชนะฉัน Btw นี่เป็นรูปหลาย
เหลี่ยม

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

@Rogem ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดย "งานนี้ใน C. " คุณมีคอมไพเลอร์ C ซึ่งแสดงผล1สำหรับโปรแกรมเปล่าหรือไม่? โดยไม่คำนึงถึงฉันคิดว่าคำตอบในคำถามใช้วิธีการและพฤติกรรมที่แตกต่างกัน IMO คำตอบหลายภาษาจะได้รับการรับประกันก็ต่อเมื่อวิธีการยังคงเหมือนเดิม (โดยทั่วไปนี่ไม่ใช่ภาษาพูดหลายภาษาเนื่องจากรหัสจริงแตกต่างกันสำหรับคำตอบด้านล่าง) คุณสามารถลงคะแนนได้อย่างที่คุณต้องการ แต่คำตอบที่ถูกต้องคือคำตอบที่ถูกต้อง ฉันจะเก็บคำตอบไว้เหมือนเดิมฉันไม่ต้องการเก็บคำตอบไว้ที่บ้าน
Conor O'Brien

11

Lenguage, 216173027061157310 ไบต์

216173027061157310 = (144115617572598740 + 144115241762960340 + 144115194786755540) / 2. มี216173027061157310 - 144115617572598740 $s216173027061157310 - 144115241762960340 # s และ216173027061157310 - 144115194786755540ช่องว่าง

144115617572598740 #s และช่องว่างเข้ารหัสโปรแกรม BF ต่อไปนี้:

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

ลองออนไลน์!

144115241762960340 $s และช่องว่างเข้ารหัสโปรแกรม BF ต่อไปนี้:

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

ลองออนไลน์!

144115194786755540 $s และ#s เข้ารหัสโปรแกรม BF ต่อไปนี้:

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

ลองออนไลน์!

แก้ไข: บันทึก 72057832274401770 ไบต์ขอบคุณ @Nitrodon


ทำไมไม่ใช้Uและ byte 127 ลองออนไลน์! หรือแม้แต่เพียงไบต์ nul และ soh?
Jo King

@ โจกิ้งฉันไม่รู้ว่าUมันเป็นไบต์ ASCII ที่พิมพ์ได้สั้นที่สุดที่สามารถส่งออกได้ ฉันไม่ต้องการใช้ไบต์ที่ไม่สามารถพิมพ์ได้
Neil

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

7
ฉันไม่สามารถช่วย แต่ upvote เพราะ "แก้ไข: บันทึกแล้ว 72057832274401770 bytes ... "
Mr Lister


9

Polyglot * , 1 ไบต์ ( รอการยืนยัน )

0

ลองออนไลน์! (ใช้รูปสามเหลี่ยม)

*: ใช้งานได้ในหลากหลายภาษา (ค่อนข้างกว้าง) (ยกเว้นภาษา esolang เช่น 4,> <> และสิ่งที่คล้ายกันและข้อยกเว้นอื่น ๆ ) เหมือนกันกับคำตอบของเยลลี่ในซอร์สโค้ด แต่วิธีการของ I / O นั้นแตกต่างกัน - เอาต์พุตนั้นผ่านทางรหัสทางออก เมื่อมีการลบออก0จากซอร์สโค้ดพวกเขาจะเหลือโปรแกรมที่ว่างเปล่าซึ่งมักจะไม่มีข้อผิดพลาดและให้รหัสออก0ในภาษาส่วนใหญ่


3

sed , 1 ไบต์



ลองออนไลน์!

แตกต่างอย่างสิ้นเชิงจากคำตอบของจอประสาทตาหรือคำตอบของเยลลี่


ฉันไม่เห็นรหัสใด ๆ นั่นจะไม่ทำให้มันเป็นคำตอบ 0 ไบต์? มันทำงานอย่างไร
เสา

15
@Mast มีบรรทัดใหม่ ..... คุณจะมีปัญหาในการอ่านโปรแกรมที่เขียนในช่องว่างถ้าคุณคิดเช่นนั้น
user202729

3

เอกสิทธิ์ (ไม่แข่งขัน) 96 ไบต์

00000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0101 0101 0101 0101 0101 0101  ................

นี่คือการxxdถ่ายโอนข้อมูล

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


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