슈퍼 스퀘어 비


11

Scream ™ Winter Sale이 시작되었고 강렬한 미니멀리즘 액션 게임 인 Super Square를 시작했습니다 . 게임을 플레이하면 게임이 엄청나게 어려워 지거나 정말 나쁘다는 것을 깨닫게 됩니다. 특히, 매번 당신을 얻는 것처럼 보이는 이 "비"패턴 이 있습니다 ...

여기에 이미지 설명을 입력하십시오

좌절, 당신은 자신에게 다른 도전을하기로 결정 : ASCII 아트에서 비 패턴을 그려!

입력

입력은 nSTDIN 또는 함수 인수를 통해 주어진 패턴의 크기를 나타내는 단일 양의 정수 입니다.

산출

출력은 지정된 크기의 레인 패턴으로, 문자열로 반환되거나 STDOUT을 통해 인쇄됩니다. 전체 이미지 앞뒤에 공백이 오거나 괜찮습니다. 또한 이미지를 화면 왼쪽으로 플러시 할 필요는 없지만 명확하게 식별 할 수 있어야합니다.

여기 있습니다 n = 10:

 ...................
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ...................

여기 있습니다 n = 5:

 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 

그리고 마지막으로 여기에 n = 1(가장 안쪽 두 벽) :

 - 

 - 

구성 (명확성을 위해)

경기 구역은 다음과 같이 두 쌍의 사분면으로 나뉩니다.

 AAAAAAAAA
B AAAAAAA B
BB AAAAA BB
BBB AAA BBB
BBBB A BBBB
BBBBB BBBBB
BBBB A BBBB
BBB AAA BBB
BB AAAAA BB
B AAAAAAA B
 AAAAAAAAA

상한 / 하한 사분면은 하이픈으로 표시된 수평 벽 -과 점으로 음영 처리 된 간격 사이를 번갈아 표시해야합니다 .. 왼쪽 / 오른쪽 사분면은 파이프로 표시되는 공간 과 수직 벽 사이에서 번갈아 가야합니다 |. 주 대각선은 비어 있으며 항상 공백으로 채워야합니다.

크기의 비 패턴 n에는 2n벽이 있으며 중앙에서 가장 가까운 상하부 사분면의 벽과 중심에서 멀어 질 때 사분면 사이에 벽이 번갈아 나타납니다.

채점

이것은 코드 골프이므로 가장 적은 바이트의 코드가 이깁니다.


4
이 게임은 ... 당신이 무슨 말을하는지 알고 있습니다. 내가 이길 때까지 내 인생의 40 시간처럼 훔쳤다. ^^
ThreeFx

답변:


3

CJam, 93 87 78 61 59 바이트

ri:K_+){K" |"*KKI-z:I-I2%:L+<SL>\+_W%L'-'.?I2*Ig-*@I0=>N}fI

nSTDIN을 통한 가치 창출

몇 가지 예 :

1
 - 

 - 
2
 ... 
| - |
|   |
| - |
 ... 
5
 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 
10
 ................... 
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ................... 

이것은 골프를 많이 할 수 있으며, 내일 가장 먼저 할 것입니다.

여기에서 온라인으로 사용해보십시오


5

하스켈 150 바이트

이길 수 없다는 것을 깨달았습니다. 첫 번째 codegolf를 게시하고 싶었습니다. : D

q n=putStr$unlines$iterate(\l->let[a,b]=if l!!0!!1=='-'then"|."else" -";c=[a:s++[a]|s<-l];t=' ':[b|x<-l!!0]++" "in t:c++[t])[" - ","   "," - "]!!(n-1)

GHCi에로드 하고 크기가 q n어디에 있는지 호출하여 사용하십시오 n.

몇 가지 예 :

*Main> q 1
 - 

 - 
*Main> q 2
 ... 
| - |
|   |
| - |
 ... 
*Main> q 5
 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 
*Main> q 10
 ................... 
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ................... 

누군가 더 잘할 수 있습니다. 저는 Haskell을 처음 사용합니다.


6
승리에 대해 걱정하지 마십시오. ;) 우승은 CJam과 Pyth를위한 것입니다. 다른 언어로 골프를 치는 것은 같은 "무게 수업"으로 제출물을 치는 것과 언어의 새로운 모호한 기능을 배우는 것입니다. PPCG에 오신 것을 환영합니다!
Martin Ender

3

파이썬, 204 , 198,191 바이트

r=lambda a,b,d=' ':d.join((a,b,a[::-1]))
def f(s,i,n):d=[r(s[:i],'.-'[(n-i)%2]*((n-i)*2-1))];return i==n and[r(s,' '*(2*(i%2)+1),'')]or d+f(s,i+1,n)+d
g=lambda n:'\n'.join(f('| '*(n/2),0,n))

"r"은 선택적인 분리 문자를 사용하여 "a"로 둘러싸인 "b"를 기록하는 유틸리티 함수입니다 (예 : 람다 매개 변수는 기본값을 가질 수 있음). "f"는 재귀 적이며 각 수준에 대해 측면과 중간 부분을 생성합니다. "g"는 rain 함수이며 정수로 호출하여 요청 된 텍스트를 반환 할 수 있습니다.


방금 문자열을 반환하는 함수를 허용하는 것을 잊어 버렸습니다. 일반적으로 허용합니다 (편집했습니다). 공백을 제거하고 한 줄에 4, 5 줄을 넣으면 몇
자를

약간의 단락 평가를 통해 이것을 190으로 줄일 수 있습니다 :) 링크
Sp3000

죄송합니다. 우연히 당신을 다운 보트했습니다. 편집하면 취소 할 수 있습니다.
nutki

1

Perl 5 : 74 바이트 (73 코드 + -p)

#!perl -p
s/.*/ /;$a=qw(- .)[$|--]x
s/.+/$"$&$"/g,s/^|\z/ $a 
/g,$"^="\\"for($_)x$&

입력에 매개 변수를 사용합니다 (올바른 기능에 필요한 줄 끝 문자).

$ perl rain.pl <<<"3"
 ----- 
  ...  
 | - | 
 |   | 
 | - | 
  ...  
 ----- 

언 골프 드 :

                         # Read the input line into $_ (-p)
s/.*/ /;                 # Replace the input with a space (plus the original eol), saves the parameter in $&
for(($_)x$&) {           # Iterate $& times without affecting $_
  $c=s/.+/$"$&$"/g;      # Add $" (initially space) at the start and the end of each line, stores number of lines in $c
  $a=("-",".")[$|--]x$c; # Set $a to $c times minus or dot using magic $| (which iterates over 1 and 0 on decrement)
  s/^|\z/ $a \n/g;       # Equivalent to $_=" $a \n$_ $a \n"
  $"^="\\";              # Alternate $" between space and bar using the string xor 
}
                         # Print $_ (-p)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.