โปรแกรมที่สั้นที่สุดที่มีโปรแกรม + เอาท์พุทต่อกันคือการเรียงลำดับของอักขระ ASCII ที่พิมพ์ได้ 95 ตัว


12

เขียนโปรแกรมที่สั้นที่สุดเท่าที่จะเป็นไปได้ (วัดโดยจำนวนไบต์) ไม่มีการป้อนข้อมูลไม่มีความคิดเห็นและส่งออกสตริงอักขระ / ลำดับเช่นโปรแกรมที่ต่อกัน + เอาต์พุตมีความยาว 95 ตัวอักษรและประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เพียงครั้งเดียวคือโปรแกรม + เอาท์พุทคือการเรียงสับเปลี่ยนของ 95 ตัวอักษรด้วยรหัส ASCII 32-126:

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

ในกรณีที่เสมอกันผู้ชนะคือรายการที่มีโปรแกรมตัดต่อ (95 ตัวอักษร) + เอาต์พุตใกล้กับสตริงด้านบนดังที่วัดโดยLevenshtein edit-distance (เช่นจำนวนการลบตัวอักษรเดี่ยวการแทรกหรือ การแทนที่จำเป็นต้องใส่ลงในคำสั่ง ASCII)


2
ดังนั้นหมายความว่าถ้าโปรแกรมนั้นมีตัวอักษรซ้ำ ๆ กันมันจะถูกตัดสิทธิ์โดยอัตโนมัติหรือไม่? นั่นมันหยาบ
breadbox

5
ที่เกี่ยวข้อง: codegolf.stackexchange.com/questions/12368/ …
John Dvorak

1
คุณอาจต้องการกฎว่าเก่าecho $0ถูกตัดสิทธิ์
Peter Taylor

3
อนุญาตให้ใช้อักขระภายนอกช่วงอักขระ ASCII ที่พิมพ์ได้ (และอาจซ้ำซ้อนกับข้อมูลนั้น) หรือไม่ หรือโปรแกรม + output จะต้องประกอบด้วยตัวอักษรที่พิมพ์ได้ทุกครั้งและไม่มีอะไรมากไปกว่านี้ ?
primo

1
@primo ฉันคิดว่าพวกเขาได้รับอนุญาต ฉันคิดว่าถึงเวลาเขียนโซลูชัน "shift-and-eval" ที่ใช้คำซ้ำ (แม้ว่าตัวอักษรของสตริงจะหายาก)
John Dvorak

คำตอบ:


12

GolfScript 14 ตัวอักษร

{`),32>46-^}.~

ผลผลิต :

 !"#$%&'(*+/015789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_abcdefghijklmnopqrstuvwxyz|

ความท้าทาย (อย่างน้อยเท่าที่ฉันเข้าใจ) คือการเขียนโปรแกรมที่มีโปรแกรมและเอาต์พุตเป็นการเปลี่ยนแปลงของตัวอักษร ASCII 95 ที่พิมพ์ได้ไม่ต้องเขียนโปรแกรมที่สั้นที่สุดเท่าที่จะเป็นไปได้ที่พิมพ์ ASCII 95 ตัวอักษร
Frank Schmitt

ขอโทษที่ฉันทำผิด ในชื่อมันอ่าน "โปรแกรม + การส่งออก" ในขณะที่ต่อมาในคำถามมันอ่านการตัดแบ่งโปรแกรม + เอาท์พุท
Frank Schmitt

),- ว้าว. ฉันชอบแบบนั้น.
John Dvorak

1
@JanDvorak codegolf.SE: สถานที่เดียวที่ผู้คนตื่นเต้นเกี่ยวกับการถ่ายภาพระยะใกล้และเครื่องหมายจุลภาค : P
Doorknob

@ Doorknob ใน golfscript มันหมายถึง "Right uncons (rparen) และสร้างอาร์เรย์ที่มีขนาด (comma)" ด้วยเหตุนี้คุณจะเหลือสตริงที่สั้นลงด้วยอักขระหนึ่งตัว (เป็นหยิกขวา) และอาร์เรย์ที่ลงท้ายด้วยตำแหน่ง ASCII ของอักขระนั้น (at |) ตัดตัวอักษรที่ไม่สามารถพิมพ์ออกได้ระยะเวลาและ xor (ความแตกต่างของชุดสมมาตรที่นี่) พร้อมด้วยซอร์สโค้ด (ใช้การลบ) sans พูดว่าหยิกขวาแล้วคุณก็ทำเสร็จแล้ว และใช่แล้วสตริง xor คือสตริง
John Dvorak

6

Perl, 89 ตัวอักษร

นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้:

q< !"#%&'()+/8:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\^_`abcdefghjklmosuvwxz|>;
print~-$=.73*2,y[]{}

สำหรับผู้ที่ไม่คุ้นเคยใน Perl minutae ทั้งสองมีปากเสียงกับprintคำสั่งอาจจะกลายเป็นและ~(-($=)) . (73 * 2)tr///

โปรแกรมแสดงผล 6 ตัวอักษร:

591460

แต่น่าเสียดายที่ทุกคนสร้างย้ำเดียวที่ฉันสามารถคิดใน Perl ( for, while, until, map, grep) printหุ้นอย่างน้อยหนึ่งตัวละครด้วย หากบรรทัดใหม่ได้รับอนุญาตให้ปรากฏในผลลัพธ์ฉันสามารถใช้ Perl 5.010 เพื่อแก้ปัญหาตัวละคร 87 ตัว:

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

ลองดูว่าฉันสามารถพิมพ์ตัวเลขที่ใหญ่กว่านี้ได้ไหม:
John Dvorak

เอ่อ ... คุณช่วยแปลบรรทัดที่สองให้ฉันได้ไหม
John Dvorak

1
@JanDvorak $=คือจำนวนเส้นแนวนอนในอุปกรณ์ส่งออกปัจจุบัน โดยค่าเริ่มต้น 60 ~-$=เป็นค่าที่เหมาะสมผกผันของทั้งสองของเชิงลบสมบูรณ์ 60 59ซึ่งเกิดขึ้นเป็น 73*2146 คือ.และ,ทำสิ่งที่คุณคาดหวังจากพวกเขา y[]{}เป็นอีกวิธีที่จะพูดtr///ซึ่งเป็นตัวดำเนินการทับศัพท์ ต้องใช้$_และไม่ทำอะไรเลยเพราะคุณไม่ได้ให้อักขระใด ๆ มาแทนที่ 0ก็จะส่งกลับจำนวนอักขระแทนที่ซึ่งเป็น ดังนั้นเราจึงมี~-$= . 73*2 , y[]{}= 59 . 146 , 0= '591460`
ด่าน

6

PHP 67 ไบต์

<?=U4eB1gkFdA6J9snZD2IE8y5PhwQV^xHGmqYMfNjKpbR3vcLalCWi0_TtrOSXouz;

เอาท์พุท:

-|"/@>& *+}:[!],'~(){.\`7#%$

ดูเหมือนว่าควรมีโซลูชัน 65 ไบต์เอาท์พุท 30 ตัวอักษรแทนที่จะเป็น 28 เท่านั้น แต่ฉันไม่สามารถเข้าแถวได้ อักขระที่ไม่ได้ใช้ทั้ง 6 ตัวOSXouzถูกยึดติดกับตัวอักษรสตริงตัวใดตัวหนึ่งแทน

แก้ไข:เมื่อพิจารณาเพิ่มเติมจะไม่สามารถสร้างอักขระได้มากกว่า 28 ตัวในลักษณะนี้ UPPER ^ lowerจะส่งผลให้มีอักขระระหว่าง 32 ถึง 63 ดังนั้นจึงจำเป็นต้องใช้ 10 หลัก@[\]_`{|}~ทั้งหมด 22 ส่วนที่เหลืออีกสี่ตัวถูกใช้ในสคริปต์โดยเหลือเพียง 18 ตัวเท่านั้นซึ่งสามารถรับได้ด้วยตัวอักษรเพียงอย่างเดียว tiebreaker สามารถปรับปรุงได้อย่างมีนัยสำคัญแม้ว่า


อ่าแน่นอนว่า barewords ฉันจะลืมได้อย่างไร
John Dvorak

3

Ruby, 91 ตัวอักษร

%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcefghijklmnqvwxyz|~};puts(?@‌​.ord*98+1)

6273เอาท์พุท

%{...} เคล็ดลับที่ถูกขโมยไปจาก Jan Dvorak


โดยไม่ต้องแสดงความคิดเห็น. ตามที่ระบุไว้อย่างชัดเจน
Johannes Kuhn

@JohannesKuhn Ah ไม่ได้สังเกตว่า แก้ไข
Doorknob

%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcefghijklmnqvwxyz|~};puts(?@.ord*98+1)คือสิ่งที่ฉันคิดว่าคุณต้องการ (สำหรับตัวละคร 91 ตัว) โดยใช้เครื่องหมายอัฒภาคย้ายมาเพื่อใช้เป็นตัวคั่นที่พิมพ์ได้ (แทนที่จะขึ้นบรรทัดใหม่) และด้วยตัวอักษร 'ord' ที่ถูกลบออกจากภายในวงเล็บปีกกา
res

@res ใช่มันยากที่จะจัดการตัวอักษรเหล่านี้ทั้งหมด: P
Doorknob

ตอนนี้ \ รวมอยู่สามครั้ง
Howard

3

Perl, 61 ตัวอักษร

print$:x8^CJIBQTOWAEULHVGFNMKRPZY,q<#"/;*g~?|={.>&+u15m97ws26

เอาท์พุท:

c@db[yo]le_ah\jfD`kX}zS-! %)('v304

$:" \n-"เริ่มต้นที่ x8ซ้ำมันแปดครั้ง ผลลัพธ์ 24 ตัวอักษรจะถูกกำหนดเป็น bitored พร้อมกับ barestring 23 ตัวอักษร (ตัวสุดท้าย-จะเป็นไปตามที่เป็นอยู่) ส่วนที่สองคือคิวสตริง 12 ตัวอักษรบิตและ - barestring 10 ตัวอักษร (ตัวอักษร 2 ตัวสุดท้ายจะถูกทิ้ง)


1
ฉันพบความยาวโปรแกรมของคุณคือ 61 ตัวอักษร
res

ขอบคุณ เครื่องมือแก้ไขข้อความของฉันรายงานตัวอักษร 62 ตัวเนื่องจาก EOF
Grimmy

1

Ruby, 95 ตัวอักษร, 6 การแก้ไข

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

อ๋อ แค่นั้นแหละ. เพียงแค่ตัวอักษรสตริงลอยฟรีที่ไม่เคยพิมพ์ Ruby สนับสนุนตัวอักษรสตริง (ยืมมาจาก Perl ฉันคิดว่า) ในรูปแบบเปอร์เซ็นต์ตัวคั่น - ตัวคั่นเป็นอักขระที่ไม่ใช่ตัวอักษรและตัวเลขและถ้าตัวคั่นเปิดเป็นวงเล็บเปิด (ใด ๆ[({<) ตัวคั่นการปิดจะสอดคล้องกัน วงเล็บปิด (อนุญาตให้ใช้วงเล็บเหลี่ยมซ้อนกัน)

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


0

Tcl 96 แก้ไขระยะทาง 12

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

หนึ่งในช่องว่างควรเป็นแท็บฉันกลัว
John Dvorak

แท็บหรือช่องว่างสามารถพิมพ์ได้?
Johannes Kuhn

แท็บไม่สามารถพิมพ์ได้ (ASCII 9) แต่พื้นที่สามารถพิมพ์ได้ (ASCII 32)
John Dvorak

1
[เพิ่งเห็นว่า OP อธิบายเฉพาะเรื่องนี้หลังจากที่คุณตอบ :)]
flornquake

1
join {!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghklmpqrstuvwxyz|~} ดูเหมือนว่าจะทำงานโดยใช้ 95 ตัวอักษร? (ขอบคุณสำหรับผลงานของคุณขออภัยเกี่ยวกับกิ้งก่า - น่าเสียดายที่ฉันแก้ไขอย่างเร่งรีบและน่าจะทำสิ่งที่แตกต่างออกไป)
res
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.