패턴으로 프로그램에 의해 왕자 접두사


16

많은 것을 출력하거나 반환하는 프로그램이나 함수를 작성해야합니다. 어린 왕자 장 . 프로그램 또는 함수는 인쇄 가능한 ASCII 문자 (32-126의 코드 포인트)와 각 행 끝에 줄 바꿈 만 포함 된 MxN 코드 블록이어야합니다.

당신은 할 수 있습니다 96 개의 인쇄 가능한 ASCII 문자와 행 끝에 줄 바꿈 문자 중에서 최대 26자를 선택할 .

각 행과 열에서 모든 문자는 고유해야합니다 스도쿠 퍼즐과 유사해야합니다. 즉, 행이나 열에 문자가 두 번있을 수 없습니다.

원래 올바른 예제와 코드 블록 M = 4, N = 3alphabet = {a,b,c,d,/,*}:

abcd
bcd*
*/ac

코드 세부 사항

  • 코드 블록의 모양을 선택할 수 있습니다 (예 : MN).
  • 블록은 문자로 완전히 채워 져야합니다. 즉 모든 행의 길이는 같아야합니다.
  • 마지막 행 끝의 후행 줄 바꿈은 선택 사항입니다.
  • 위에서 각 행과 열에 쓰여진 것처럼 모든 문자는 고유해야합니다.

출력 세부 사항

  • 추가 출력없이 The Little Prince 1 장의 접두사를 출력하거나 반환해야 합니다.
  • 텍스트에서 줄 바꿈에 도달하면 일반적인 변형 (\ 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) 프로그램으로 코드의 유효성을 확인할 수 있습니다@ MartinBüttner가 제공하는 또는 CJam 프로그램 (online) .


이것이 프로그램 크기를 최대 26x26으로 제한하지 않습니까?
marinus

@ marinus 그렇습니다.
randomra

이것이 해결할 수 있습니까?
FUZxxl

문제는 점수 6. 희망 질문과 참조 솔루션을 포함 @FUZxxl 그건하도록 설계되어 있지 전체 일을 인쇄 할 수 있습니다 (또는 넥타이 차단기를해야합니다).
Martin Ender

@ MartinBüttner 아! 나는 "... 접두사 ..."부분을 잊어 버렸습니다.
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

, 점수 = 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

파이썬 3, 점수 = 11

행이나 열의 문자 반복에 대한 제한으로 인해 둘 이상의 문자열 리터럴을 만드는 것이 거의 불가능하므로 이는 파이썬에서 정말 어려운 문제입니다. 따라서 문자열을 유용한 방법으로 시작할 수 없기 때문에 문자열을 결합하는 다양한 방법은 상당히 쓸모가 없습니다. 최선의 시도는 다음과 같습니다.

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

첫 번째 줄 끝에 공백이 있습니다. 별명 x에 대한이 chr두 개 이상의 열에서 끝나는 같은 문자를 방지하기 위해 필요하다. 끝에 주석 문자는 거의 모든 것이 될 수 있습니다.

알파벳은 21 개의 인쇄 가능한 문자와 개행 (시작시 공백에주의)입니다.

 "#(),37=O\cehinprtwx

출력은 다음과 같습니다

내가 한 번


이것은 파이썬 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 (잘못된)

파이썬은 이것에 가장 적합한 언어는 아닙니다 .... 추가 조사를 통해 n첫 줄에 두 개의 언어가 있습니다 . 가치있는 치료법은 없으며 파이썬으로 시간을 낭비하지 않을 것입니다. 현재 다른 언어로 솔루션을 만들고 있지만 아직 어느 언어도 공유하지는 않습니다.

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

알파벳 (22) : "#(),0167IOcehinprtw

산출: Once when I w


첫 번째 줄에는 두 줄이 있으므로 유효하지 않습니다. n s . 이 문제는 Python에서 거의 불가능합니다. 백 슬래시는 한 번만 사용할 수 있기 때문에 (백 슬래시는 마지막 열에 있어야하기 때문에) 두 줄에 같은 종류의 따옴표가있을 수 없기 때문입니다.
Blckknght

@Blckknght 아, 나는 그 것을 놓쳤다. 네. 내 대답은 아마 OP의 예보다 낫지 않을 것입니다 ...
mbomb007
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.