คำนำหน้าหลักการโดยโปรแกรมในรูปแบบ


16

คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่ส่งออกหรือส่งคืนของบทที่หนึ่งของเจ้าชายน้อยที่สุดเท่าที่จะทำได้ โปรแกรมหรือฟังก์ชั่นของคุณจะต้องเป็นบล็อคโค้ด M-by-N ที่มีอักขระ ASCII ที่พิมพ์ได้เท่านั้น (codepoint ตั้งแต่ 32 ถึง 126) และขึ้นบรรทัดใหม่ที่ท้ายแต่ละแถว

คุณสามารถใช้อักขระที่คุณเลือกได้ไม่เกิน 26 ตัวจากอักขระ ASCII ที่พิมพ์ได้ 96 ตัว (และขึ้นบรรทัดใหม่ที่ท้ายแถว)

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

codeblock ตัวอย่างที่ถูกต้องด้วยM = 4, N = 3และalphabet = {a,b,c,d,/,*}:

abcd
bcd*
*/ac

รายละเอียดรหัส

  • คุณสามารถเลือกรูปร่างของการบล็อกรหัสของคุณ (เช่นMและN)
  • บล็อกต้องเต็มไปด้วยอักขระทั้งหมดเช่นทุกแถวจะต้องมีความยาวเท่ากัน
  • ขึ้นบรรทัดใหม่ท้ายท้ายแถวสุดท้ายเป็นทางเลือก
  • ดังที่เขียนไว้ด้านบนในแต่ละแถวและคอลัมน์อักขระทุกตัวจะต้องแตกต่างกัน

รายละเอียดผลลัพธ์

  • คุณควรเอาท์พุทหรือคืนคำนำหน้าของบทที่ 1 ของ The Little Prince โดยไม่ต้องเพิ่มเอาต์พุต
  • หากคุณมาถึงบรรทัดใหม่ในข้อความคุณสามารถแสดงว่ามันเป็นตัวแปรทั่วไป (\ r, \ n, \ r \ n) แต่ใช้เพียงหนึ่งในนั้นและนับเป็น 1 ไบต์ถึงคะแนน
  • ขึ้นบรรทัดใหม่ที่ต่อท้ายเป็นตัวเลือก

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

ตัวอย่างคำตอบ

##Python3, score = 6

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

    print('O\
    nce w')#X

คุณสามารถตรวจสอบความถูกต้องของรหัสของคุณด้วยโปรแกรม Python 3 (ideone) นี้หรือโปรแกรม CJam (ออนไลน์) ที่จัดทำโดย @ MartinBüttner


สิ่งนี้ไม่ จำกัด ขนาดโปรแกรมเป็น 26x26 หรือไม่
marinus

@marinus ใช่แล้ว
randomra

คุณแน่ใจเหรอ
FUZxxl

@FUZxxl คำถามมีวิธีแก้ไขปัญหาอ้างอิงด้วยคะแนน 6 หวังว่าคำถามนี้ได้รับการออกแบบมาเพื่อไม่ให้พิมพ์สิ่งทั้งหมด (หรือจะต้องใช้ตัวแบ่งสัญญาณ)
Martin Ender

@ MartinBüttner Ah! ฉันลืมเกี่ยวกับส่วน "คำนำหน้าของ ... "
FUZxxl

คำตอบ:


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-

ลองออนไลน์

ตัวอักษร: "'*-/2INOSacdehilmnorswxy

คำอธิบาย:

"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คะแนน = 38

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

ตัวอักษร: "'015:IMORXacdehilnorswxy

(ฉันแน่ใจว่าจะเกลียดการลองใช้ภาษาโปรแกรมจริง )

คำอธิบาย:

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 คะแนน = 11

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

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

โปรดทราบว่ามีช่องว่างที่ท้ายบรรทัดแรก นามแฝงxสำหรับchrเป็นสิ่งที่จำเป็นเพื่อหลีกเลี่ยงตัวอักษรเดียวกันสิ้นสุดในมากกว่าหนึ่งคอลัมน์ ตัวอักษรในตอนท้ายอาจเป็นอะไรก็ได้

ตัวอักษรเป็น 21 ตัวอักษรที่พิมพ์ได้รวมถึงการขึ้นบรรทัดใหม่ (หมายเหตุช่องว่างที่จุดเริ่มต้น):

 "#(),37=O\cehinprtwx

ผลลัพธ์คือ:

เมื่อฉัน


โปรดทราบว่านี่ใช้ได้ใน Python 2 ด้วย พยายามหาคำตอบที่ดี
mbomb007

3

CJam คะแนน = 21

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

ตัวอักษร: -;INOSacehinoswxy

เพียงเพื่อให้ได้ลูกบอลกลิ้ง; สิ่งนี้อาจถูกตีได้ง่าย


2

CJam คะแนน = 15

ฉันมีความคิดนี้มาระยะหนึ่งแล้ว แต่ฉันยังไม่มีเวลานั่งลงและสับเปลี่ยนสิ่งต่าง ๆ รอบ ๆ จนกว่าฉันจะได้รับความโดดเด่นของคอลัมน์ที่ต้องการดังนั้นนี่เป็นเวอร์ชั่นสำหรับเด็กตอนนี้:

 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

ตัวอักษร (26): " #)*+,0123456789:;=>Ibcef

ลองมันออนไลน์

คำอธิบาย

แนวคิดพื้นฐานคือการใช้ประโยชน์จากการเข้ารหัสพื้นฐานเพื่อให้เราสามารถพิมพ์ตัวอักษรได้มากกว่า 26 ชนิด รหัสหลักคือ

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

โปรดทราบว่าเราปฏิบัติครั้งแรก"O"สำหรับการ"Once"แยกเพราะรวมไว้ในสายของเราจะใช้เวลามากเกินไปของตัวอักษรของเรา หากเราต้องการเราสามารถลองขยายสตริงการจัดทำดัชนีของเราได้ แต่เนื่องจากไม่มีตัวอักษรตัวพิมพ์ใหญ่เกิดขึ้นอีกซักพักแล้วนอกเหนือจากนี้"I"ฉันก็ไม่ได้สนใจอะไรมากไปกว่านี้

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

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

ที่)เพิ่มขึ้นและ#มีการยกกำลังใน CJam

ส่วนที่เหลือ (ส่วนที่น่ารำคาญที่สุด) คือช่องว่างภายในแต่ละแถวเพื่อเติมเต็มเกณฑ์ของคอลัมน์ ในการทำเช่นนี้เราทิ้งแผนภูมิไว้ในสตริงและใช้;เพื่อแสดง น่าเสียดายที่ในขณะที่เราต้องการใช้e#ความคิดเห็นเป็นอย่างมากและทำให้สิ่งต่าง ๆ ง่ายขึ้นความจริงที่ว่าการ#ยกกำลังนี้ห้ามไม่ให้ทำเช่นนี้ดังนั้นจะทำในบรรทัดสุดท้ายเท่านั้น

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


1

Python 2 คะแนน = 13 (ไม่ถูกต้อง)

Python ไม่ใช่ภาษาที่ดีที่สุดสำหรับสิ่งนี้ .... เมื่อตรวจสอบเพิ่มเติมมีสองnบรรทัดในบรรทัดแรกของฉัน ไม่มีวิธีการรักษาที่คุ้มค่าและฉันจะหยุดเสียเวลากับ Python ขณะนี้ฉันกำลังทำงานเพื่อแก้ปัญหาในภาษาอื่น แต่จะยังไม่แบ่งปันอันไหน

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

ตัวอักษร (22): "#(),0167IOcehinprtw

เอาท์พุท: Once when I w


บรรทัดแรกของคุณไม่ถูกต้องเพราะมันมีสองns ปัญหานี้แทบจะเป็นไปไม่ได้ใน Python เนื่องจากคุณสามารถใช้เครื่องหมายทับขวาของการต่อบรรทัดหนึ่งครั้ง (เนื่องจากเครื่องหมายทับขวาต้องอยู่ในคอลัมน์สุดท้าย) และไม่มีบรรทัดใดที่สามารถมีเครื่องหมายอัญประกาศชนิดเดียวกันได้
Blckknght

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