Chương trình ngắn nhất có chương trình kết nối + đầu ra là hoán vị của 95 ký tự ASCII có thể in


12

Viết chương trình càng ngắn càng tốt (được đo bằng số byte), không có đầu vào, không chứa nhận xét và xuất chuỗi / ký tự, sao cho chương trình + đầu ra được nối dài chính xác 95 ký tự và chứa mọi ký tự ASCII có thể in được chính xác một lần , tức là chương trình + đầu ra là hoán vị của 95 ký tự với mã ASCII 32-126:

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

Trong trường hợp hòa, người chiến thắng là mục có chương trình kết hợp (95 ký tự) + đầu ra gần nhất với chuỗi trên, được đo bằng khoảng cách chỉnh sửa Levenshtein (nghĩa là số lần xóa ký tự đơn, chèn vào hoặc thay thế cần thiết để đưa nó vào thứ tự ASCII).


2
Vì vậy, điều này có nghĩa là nếu ví dụ chương trình chứa bất kỳ ký tự lặp lại nào thì nó sẽ tự động bị loại? Đó là thô.
hộp bánh mì


1
Bạn cũng có thể muốn kiểm soát xem cái cũ echo $0có bị loại hay không.
Peter Taylor

3
Các ký tự bên ngoài phạm vi ký tự ascii có thể in (và có thể trùng lặp với chúng) có được phép không? Hoặc phải chương trình + đầu ra chứa mọi ký tự có thể in chính xác một lần và không có gì nữa ?
primo

1
@primo Tôi cho rằng họ được phép. Tôi nghĩ rằng đã đến lúc viết một giải pháp "thay đổi và sử dụng" sử dụng các bản sao (mặc dù các chuỗi ký tự sẽ khó có được)
John Dvorak

Câu trả lời:


12

GolfScript, 14 ký tự

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

Đầu ra :

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

Thách thức (ít nhất là theo như tôi hiểu) là viết một chương trình có chương trìnhđầu ra là hoán vị của 95 ký tự ASCII có thể in, không viết chương trình ngắn nhất có thể tạo ra 95 ký tự ASCII có thể in được.
Frank Schmitt

Xin lỗi, là lỗi của tôi. Trong tiêu đề, nó đọc "chương trình + đầu ra", trong khi sau đó trong câu hỏi, nó đọc chương trình + đầu ra được nối .
Frank Schmitt

),- wow. Tôi thích điều đó.
John Dvorak

1
@JanDvorak codegolf.SE: nơi duy nhất mà mọi người cảm thấy phấn khích về một paren gần và dấu phẩy. : P
Doorknob

@Doorknob trong golfscript nó có nghĩa là "phải uncons (rparen) và tạo một mảng có kích thước đó (dấu phẩy)". Thực tế, bạn còn lại một chuỗi được rút ngắn bởi một ký tự (xoăn phải) và một mảng kết thúc ngay bên dưới vị trí ASCII của ký tự đó (tại |). Cắt bớt các ký tự không thể in được, dấu chấm và xor (khác biệt đặt đối xứng ở đây) với mã nguồn (phép trừ được thực hiện) sans nói phải xoăn, và bạn đã hoàn thành. Và vâng, chuỗi xor mảng là chuỗi.
John Dvorak

6

Perl, 89 ký tự

Đây là điều tốt nhất tôi có thể làm cho đến nay:

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

Đối với những người không trò chuyện trong Perl minutae, hai đối số cho printcâu lệnh có thể được hiển thị là ~(-($=)) . (73 * 2)tr///.

Chương trình xuất ra 6 ký tự:

591460

Đáng tiếc là mỗi lần lặp cấu trúc duy nhất mà tôi có thể nghĩ đến trong Perl ( for, while, until, map, grep) cổ phiếu ít nhất một nhân vật với print. Nếu dòng mới được phép xuất hiện trong đầu ra, thì tôi có thể sử dụng Perl 5.010 để đưa ra giải pháp 87 ký tự:

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

Hãy xem liệu tôi có thể in một số lớn hơn không :-)
John Dvorak

uh ... bạn có thể dịch dòng thứ hai cho tôi không?
John Dvorak

1
@JanDvorak $=là số lượng đường ngang trong thiết bị đầu ra hiện tại. Theo mặc định 60. ~-$=là nghịch đảo bitwise của hai phần bù âm của 60, điều này xảy ra 59. 73*2là 146. .,làm những gì bạn mong đợi ở họ. y[]{}là một cách khác để nói tr///, đó là toán tử chuyển ngữ. Nó mất $_và không làm gì cả, vì bạn đã không cho nó bất kỳ ký tự nào để thay thế. Nó trả về số lượng ký tự được thay thế, đó là 0. Vậy ta có ~-$= . 73*2 , y[]{}= 59 . 146 , 0= '591460`.
Dan

6

PHP 67 byte

<?=U4eB1gkFdA6J9snZD2IE8y5PhwQV^xHGmqYMfNjKpbR3vcLalCWi0_TtrOSXouz;

Đầu ra:

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

Có vẻ như cần có một giải pháp 65 byte, xuất ra 30 ký tự thay vì chỉ 28, nhưng tôi không thể đưa nó vào hàng. Thay vào đó, 6 ký tự không được sử dụng OSXouzđã được xử lý theo một trong các chuỗi ký tự.

Chỉnh sửa: Sau khi phản ánh thêm, không thể tạo nhiều hơn 28 ký tự theo cách này. UPPER ^ lowersẽ luôn dẫn đến một ký tự trong khoảng từ 32 đến 63, vì vậy tất cả 10 chữ số được yêu cầu @[\]_`{|}~. Bốn trong số 22 cái còn lại được sử dụng trong chính kịch bản, chỉ còn lại 18 cái có thể thu được bằng các chữ cái. Các tiebreaker có thể được cải thiện đáng kể, mặc dù.


À, chắc chắn rồi, barewords. Làm thế nào tôi có thể quên?
John Dvorak

3

Ruby, 91 ký tự

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

Đầu ra 6273.

%{...} lừa bị đánh cắp từ Jan Dvorak


Không có ý kiến. Như đã nêu rõ.
Julian Kuhn

@JohannesKuhn Ah, không nhận thấy điều đó. chỉnh sửa.
Doorknob

%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcefghijklmnqvwxyz|~};puts(?@.ord*98+1)là những gì tôi nghĩ rằng bạn muốn (cho 91 ký tự) với dấu chấm phẩy được chuyển sang sử dụng làm dấu tách có thể in (thay vì dòng mới) và với các chữ cái 'ord' được xóa từ bên trong dấu ngoặc nhọn.
res

@res Yep, thật khó để quản lý tất cả các chữ cái này: P
Doorknob

Bây giờ \ được bao gồm ba lần.
Howard

3

Perl, 61 ký tự

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

Đầu ra:

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

$:mặc định " \n-". x8lặp đi lặp lại tám lần; kết quả gồm 24 ký tự sau đó được phân chia theo bitwise với barestring 23 ký tự (cuối cùng -được giữ nguyên trạng). Phần thứ hai là chuỗi q 12 ký tự bitwise - và barestring 10 ký tự (2 ký tự cuối cùng bị loại bỏ).


1
Tôi thấy độ dài chương trình của bạn là 61 ký tự.
res

Cảm ơn. Trình soạn thảo văn bản của tôi đã báo cáo 62 ký tự vì EOF.
Grimmy

1

Ruby, 95 ký tự, 6 chỉnh sửa

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

Vâng. Đó là nó. Chỉ là một chuỗi ký tự trôi nổi tự do không bao giờ được in. Ruby hỗ trợ chuỗi ký tự (mượn từ Perl, tôi nghĩ) ở dạng phân cách phần trăm - dấu phân cách là bất kỳ ký tự không chữ và số nào, và nếu dấu phân cách mở là một dấu ngoặc mở (bất kỳ [({<), thì dấu phân cách đóng là tương ứng khung đóng (dấu ngoặc được cho phép).

Tôi nhận ra đây là một bản đệ trình cơ bản, nhưng trừ khi ai đó thực sự in một cái gì đó hoặc trừ khi có một ngôn ngữ với chuỗi ký tự tự do hai ký tự với một dấu phân cách đóng và mở khác nhau , đây là cách tốt nhất.


0

Tcl 96, chỉnh sửa khoảng cách 12

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

Một trong những khoảng trống nên là một tab, tôi sợ
John Dvorak

một tab hoặc không gian có thể in được?
Julian Kuhn

tab không thể in được (ASCII 9), nhưng không gian có thể in được (ASCII 32).
John Dvorak

1
[Chỉ thấy rằng OP chỉ làm rõ điều này sau khi bạn trả lời :)]
flornquake

1
join {!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghklmpqrstuvwxyz|~} dường như làm việc bằng cách sử dụng 95 ký tự? (Cảm ơn bạn đã tham gia. Xin lỗi về con tắc kè hoa - tiếc là tôi đã chỉnh sửa vội vàng, và đáng lẽ phải làm mọi thứ khác đi.)
res
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.