Tiền tố chính xác bởi một chương trình trong mẫu


16

Bạn nên viết một chương trình hoặc chức năng xuất ra hoặc trả lại càng nhiều Chương I của Hoàng tử bé càng tốt. Chương trình hoặc chức năng của bạn phải là một khối mã M-by-N chỉ chứa các ký tự ascii có thể in được (mã từ 32 đến 126) và dòng mới ở cuối mỗi hàng.

Bạn chỉ có thể sử dụng tối đa 26 ký tự bạn chọn trong số 96 ký tự ascii có thể in (và các dòng mới ở cuối hàng).

Trong mỗi hàng và cột, mỗi ký tự phải khác biệt tương tự như câu đố sudoku tức là không thể có một chữ cái trong một hàng hoặc cột hai lần.

Một ví dụ codeblock đúng với M = 4, N = 3alphabet = {a,b,c,d,/,*}:

abcd
bcd*
*/ac

Mã chi tiết

  • Bạn có thể chọn hình dạng của khối mã (tức là MN).
  • Khối phải được điền đầy đủ các ký tự, tức là mỗi hàng phải có cùng độ dài.
  • Một dòng mới ở cuối hàng cuối cùng là tùy chọn.
  • Như đã viết ở trên trong mỗi hàng và cột, mỗi ký tự phải khác biệt.

Chi tiết đầu ra

  • Bạn nên xuất hoặc trả lại tiền tố của Chương I của Hoàng tử bé mà không có bất kỳ đầu ra bổ sung nào.
  • Nếu bạn đạt đến một dòng mới trong văn bản, bạn có thể biểu thị nó như bất kỳ biến thể phổ biến nào (\ r, \ n, \ r \ n) nhưng chỉ sử dụng một trong số chúng và tính nó là 1 byte cho điểm số.
  • Một dòng mới thêm là tùy chọn.

Điểm của bạn là độ dài của văn bản đầu ra không bao gồm một dòng mới bổ sung nếu có. Điểm cao hơn là tốt hơn.

Ví dụ trả lời

##Python3, score = 6

alphabet = `print('O\ce w)#X` (alphabet element count = 16)

    print('O\
    nce w')#X

Bạn có thể kiểm tra tính hợp lệ của mã của mình với chương trình Python 3 (ideone) này hoặc chương trình CJam (trực tuyến) này được cung cấp bởi @ MartinBüttner.


Điều này không giới hạn kích thước chương trình tối đa 26x26 sao?
bến tàu

@marinus Vâng, đúng vậy.
Randomra

Bạn có chắc chắn điều này là khả thi?
FUZxxl

@FUZxxl câu hỏi chứa một giải pháp tham chiếu có điểm 6. Hy vọng rằng câu hỏi được thiết kế sao cho không thể in toàn bộ nội dung (hoặc nó sẽ cần một bộ ngắt kết nối).
Martin Ender

@ MartinBüttner À! Tôi đã quên mất một tiền tố của ...
FUZxxl

Câu trả lời:


4

CJam, 47

"Once wh
en Imwas
msix yea
r2s oldm
I "N-'m/
Sc*2s-O"
saw"N/SO
o'aS"m2 
a"Oo2s-N
-S/OI*so
'yI-a"nr
wiNadI"c
cel'iaIS
/m2*Oo'x
 I-scel*
Ooel'c 2
2/'e*ON-

Dùng thử trực tuyến

Bảng chữ cái: "'*-/2INOSacdehilmnorswxy

Giải trình:

"Once wh
en Imwas
msix yea
r2s oldm
I "         push this string
N-          remove newlines
'm/Sc*      replace m's with spaces (the c is redundant)
2s-         convert 2 to string and remove 2's
O           push an empty string
"
saw"        push this string
N/          split into lines (effectively removes the newline)
S           push a space
Oo          print empty string (no-op)
'a          push 'a'
S           push a space
"m2 
a"          push this string
Oo          print empty string (no-op)
2s-         convert 2 to string and remove 2's
N-          remove newline
S/          split by space (effectively removes the space)
OI*so       print an empty string repeated 18 times (no-op)
'y          push 'y'
I-          subtract 18 -> 'g'
a           wrap in array (string) -> "g"
"nr
wiNadI"     push this string
c           convert to (first) character -> 'n'
c           convert to character (no-op)
el          convert to lowercase (no-op)
'i          push 'i'
a           wrap in array (string) -> "i"
IS/         split " " into slices of length 18 -> [" "]
m           (acting as -) remove space strings from "i" (no-op)
2*          repeat "i" 2 times -> "ii"
Oo          print empty string (no-op)
'x          push 'x'
I-          subtract 18 -> 'f'
sc          convert to string and back to char (no-op)
el          convert to lowercase (no-op)
*           join "ii" with separator 'f' -> "ifi"
Oo          print empty string (no-op)
el          convert to lowercase (no-op)
'c          push 'c'
2 2/        divide 2 by 2 -> 1
'e          push 'e'
*           repeat 'e' 1 time -> "e"
O           push empty string
N-          remove newlines (no-op)

7

Pip , điểm = 38

eyli:
"Once
when0
I was
si01x
year5
old I
0sMw1
1M 0"
X1RMh
Rnsxy
iR:'M
'aiR 
:5'si

Bảng chữ cái: "'015:IMORXacdehilnorswxy

(Tôi chắc chắn sẽ ghét thử điều này trong một ngôn ngữ lập trình thực sự .)

Giải trình:

eyl      Statements consisting of single variables are no-ops
i:       Assign to i the following:
"Once
when0
I was
si01x
year5
old I
0sMw1
1M 0"    ...this string
X1       ...repeated once (no-op to get alignment right)
RMh      ...with all 1s and 0s removed (h is preinitialized to 100)
Rns      ...and all newlines replaced with spaces.
xy       More no-ops
iR:'M'a  Replace every M with a, assigning result back to i
iR:5's   Replace every 5 with s, assigning result back to i
i        Auto-print i

4

Python 3, điểm = 11

Đây là một vấn đề thực sự khó khăn đối với Python, vì các hạn chế lặp lại các ký tự trên một dòng hoặc cột làm cho gần như không thể tạo ra nhiều hơn một chuỗi ký tự. Do đó, các cách khác nhau để nối các chuỗi với nhau khá vô dụng, vì bạn không thể bắt đầu các chuỗi theo bất kỳ cách hữu ích nào. Đây là nỗ lực tốt nhất của tôi:

x=chr 
print(
"Once\
 when"
,x(73)
)#prin

Lưu ý rằng có một khoảng trắng ở cuối dòng đầu tiên. Bí danh xcho chrlà cần thiết để tránh những nhân vật cùng kết thúc trong vòng hơn một cột. Các nhân vật bình luận ở cuối có thể là hầu hết mọi thứ.

Bảng chữ cái có 21 ký tự có thể in, cộng với dòng mới (lưu ý khoảng trắng ở đầu):

 "#(),37=O\cehinprtwx

Đầu ra là:

Một lần khi tôi


Lưu ý rằng điều này cũng hợp lệ trong Python 2. Grats về việc tìm kiếm một câu trả lời tốt.
mbomb007

3

CJam, điểm = 21

"Once wh
en I"N-o
N;S"was 
six y"N-

Bảng chữ cái: -;INOSacehinoswxy

Chỉ để có được quả bóng lăn; điều này có thể được đánh bại dễ dàng.


2

CJam, điểm = 15

Tôi đã có ý tưởng này được một thời gian nhưng tôi không có thời gian để ngồi xuống và xáo trộn mọi thứ xung quanh cho đến khi tôi nhận được sự độc đáo của cột cần thiết, vì vậy bây giờ đây là phiên bản trẻ con:

 79c32"*)+#,105468:;=>Ibef
,:=>Ibcef";7 6)#*219435+80
50I=>;9)6#*127438+ ":,bcfe
),68:>=Ibcef";20 5#*17394+
6)4*b123,97>:c"80f5=+;e# I
"9>+f=e# ),*0481362bI:;5c7

Bảng chữ cái (26): " #)*+,0123456789:;=>Ibcef

Hãy thử trực tuyến .

Giải trình

Ý tưởng cơ bản là sử dụng mã hóa cơ sở để chúng tôi có thể in hơn 26 loại ký tự. Mã cốt lõi là

79c                             e#  Push "O"
85032995607801617394 28b        e#  Push array of indices, encoding using base 28
123,97>:c" I                    e#  Push "abcdefghijklmnopqrstuvwxyz I\n"
"+
f=                              e#  Map indices to chars

Lưu ý rằng chúng tôi xử lý đầu tiên "O"cho "Once"riêng vì bao gồm nó trong chuỗi của chúng ta sẽ mất quá nhiều của bảng chữ cái của chúng tôi. Nếu chúng tôi muốn, chúng tôi có thể thử mở rộng chuỗi lập chỉ mục của mình, nhưng vì không có ký tự viết hoa nào xảy ra trong một thời gian ngoài "I"tôi không bận tâm quá nhiều về điều này.

Sau đó, chúng ta cần xây dựng số lượng lớn trên dòng thứ hai bằng cách nào đó. Cách tiếp cận tôi đã thực hiện là nhân lên nhiều lần với một số sức mạnh, sau đó thêm một hằng số và lặp lại, do đó, trong đoạn mã trên 85032995607801617394được thay thế bằng

32
7 6) # * 219435 +
9) 6 # * 127438 +
20 5 # * 17394 +

trong đó )là gia tăng và #lũy thừa trong CJam.

Sau đó, phần còn lại (phần khó chịu nhất) là đệm từng hàng để hoàn thành tiêu chí cột. Để làm điều này, chúng ta kết xuất các ký tự trong chuỗi và sử dụng ;để bật chúng. Thật không may, mặc dù chúng tôi rất muốn sử dụng e#cho các bình luận cũng như để làm cho mọi thứ dễ dàng hơn, nhưng thực tế đó #là phép lũy thừa cấm điều này, vì vậy điều này chỉ được thực hiện ở dòng cuối cùng.

Tôi khá chắc chắn phương pháp này có thể được mở rộng cho đến dấu phẩy trong câu đầu tiên, nhưng không may xáo trộn mọi thứ xung quanh để đáp ứng tiêu chí cột đang tỏ ra khó khăn, vì vậy tôi có thể cần một phương pháp khác để tạo số nguyên được mã hóa cơ sở.


1

Python 2, điểm = 13 (không hợp lệ)

Python không phải là ngôn ngữ tốt nhất cho việc này .... Khi kiểm tra thêm, có hai ns trong dòng đầu tiên của tôi. Không có biện pháp khắc phục đáng giá nào và tôi sẽ ngừng lãng phí thời gian với Python. Tôi hiện đang làm việc để tạo ra một giải pháp bằng ngôn ngữ khác, nhưng sẽ không chia sẻ cái nào.

print"Once wh\
en I",#Oncehtp
chr(0167)#Onwt

Bảng chữ cái (22): "#(),0167IOcehinprtw

Đầu ra: Once when I w


Dòng đầu tiên của bạn không hợp lệ, vì nó có hai ns. Vấn đề này gần như không thể xảy ra với Python, vì bạn chỉ có thể sử dụng dấu gạch chéo ngược dòng một lần (vì dấu gạch chéo ngược cần ở cột cuối cùng) và không có dòng nào có thể có hai dấu ngoặc kép giống nhau.
Blckknght

@Blckknght À, tôi nhớ cái đó rồi. Vâng. Câu trả lời của tôi có lẽ sẽ không tốt hơn ví dụ của OP sau đó ...
mbomb007
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.