에펠 탑 : "A"에서 큰 "A"만들기


20

라인의 번호를 부여하는 함수를 작성 n하는합니다 bigA.

  • 가로 막대 bigA는 가운데 줄에 있어야하며, n짝 수면
  • 출력용 모노 스페이스 글꼴을 가정

출력은 줄 바꿈을 위해 명확한 줄 바꿈이 있고 왼쪽 패딩에 올바른 공백이있는 문자열 (또는 유사한 문자 배열)이어야합니다 (\ t는 4 공백으로 가정 할 수 있음). 오른쪽에 공백이있을 수 있습니다.

n = 1

A

n = 2

 A
AAA

n = 3

  A
 AAA
A   A

n = 4

   A
  A A
 AAAAA
A     A

n = 5

    A
   A A
  AAAAA
 A     A
A       A

이것은 더 작은 "H"에서 "H"를 생성함으로써 영감을 얻었습니다.


오른쪽에 공백을 추가해도됩니까? 또한 후행 줄 바꿈이 허용됩니까?
Bubbler

@ 버블 러, 오른쪽의 공백은 괜찮습니다. 그러나 줄 바꿈은 없습니다.
Budd

문자열 대신 2D 문자형 배열을 반환 할 수 있습니까? (힌트 : 일반적으로 모든 종류의 출력을 허용하는 것이 좋습니다)
Olivier Grégoire

1
@ OlivierGrégoire 물론, 줄을 분명하게 구분하지 않는 한 (예 : "\ n"요소, 중첩 배열)
Budd

1
@TonHospel, 아니, 그것은 정말로 이것의 지갑을 물리칩니다
Budd

답변:


12

05AB1E , 13 바이트

암호:

Ð;î¹)'A1376SΛ

05AB1E 인코딩을 사용합니다 . 온라인으로 사용해보십시오!

설명:

Ð                  # Triplicate the input.
 ;î                # Compute ceiling(n / 2).
   ¹               # Push the first input again.
    )              # Wrap into an array. For input 7, this would result in:
                     [7, 7, 4, 7].
     'A            # Push the character 'A'
       1376S       # Push the array [1, 3, 7, 6]. These are the directions of the canvas.
                     This essentially translates to [↗, ↘, ↖, ←].
            Λ      # Write to canvas using the previous three parameters.

캔버스

아마도 캔버스를 조금 더 (그리고 다른 많은 기능들) 문서화해야하지만, 기본적으로 요약합니다. 캔버스는 주어진 매개 변수 유형에 따라 다른 '모드'를 갖습니다. 캔버스 명령에는 <length> <string> <direction>의 세 가지 매개 변수가 있습니다.

길이 및 방향 매개 변수는리스트이므로, 이들리스트를 압축하여 실행할 명령 세트를 작성합니다. 문자열 매개 변수는 문자 A 이므로 모든 명령에서 사용되는 채우기 문자입니다. 캔버스는 이것을 다음 명령어 세트 (입력 7)로 해석합니다.

  • 문자열 A 방향으로 길이 7 의 선을 그 립니다.
  • A 를 direction 방향으로 길이 7 의 선을 그 립니다.
  • A 를 direction 방향으로 길이 4 의 선을 그 립니다.
  • 문자열 A 방향으로 길이 7 의 선을 그 립니다.

지시 사항은 다음과 같은 방식으로 번역됩니다.

7   0   1
  ↖ ↑ ↗
6 ← X → 2
  ↙ ↓ ↘
5   4   3

아무것도 출력되지 않으면 05AB1E는 자동으로 캔버스 결과를 출력합니다.


1
캔버스 설명에 대단히 감사합니다, 그것은 훌륭한 기능입니다 :-)
Kaldo

TIL 3
중의

@ thecoder16 네 번, quintuplicate, ..., decuplicate
Magic Octopus Urn

와우. 나는 중복되지 않은 것이 의심되었지만 다른 모든 사람들과 마찬가지로 존재합니다. 물론 우리는 영어 xD로 쓸모없는 단어를 가지고 있습니다
Quintec

1
@KevinCruijssen Hey, 모든 늦은 답변에 대해 사과드립니다. 지난 몇 주 동안 나에게 매우 바빴습니다. 지금 당장 원하는 것이지만 원하는 경우 언제든지 팁 페이지에 추가하십시오.
Adnan

6

, 17 15 바이트

NθP×θAM⊘θ↗P^×θA

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

Nθ

입력 n.

P×θA

큰 가로 막대를 인쇄합니다 A. (짝수의 경우 n+1어쨌든 오른쪽이 겹칩니다.)

M⊘θ↗

큰 상단으로 이동하십시오 A.

P^×θA

큰 양면을 인쇄합니다 A.


4

파이썬 2 , 80 바이트

lambda n:'\n'.join(' '*(n+~i)+('A'+' A'[i==n/2]*n*2)[:i*2]+'A'for i in range(n))

온라인으로 사용해보십시오!

원하는 출력을 왼쪽 공백, 왼쪽 A+ 중간 공백 또는 As 및 오른쪽 으로 나눕니다 A. 고정 문자열에서 슬라이싱을 사용하여 중간 부분을 계산하십시오. 이것은 같은 방식으로 첫 번째 줄을 생성 할 수있게합니다.


4

Stax , 15 바이트

┴3╬*ôP^x'┌_╓J²♫

실행 및 디버깅

압축 해제, 압축 해제 및 주석 처리 된 프로그램은 다음과 같습니다.

m       map over [1 .. input] using rest of the program, output each result
'A      "A" literal
xhi=    is the iteration index equal to (integer) half the input?
65*     multiply by 65 (character code of "A")
]i*     repeat that character (" " or  "A") i times
+       concat to initial "A"
x)      left pad to the original input
|p      palindromize (concatenate the reverse minus the last character)

이것을 실행



4

파이썬 3.6 , 79 바이트 또는 73 바이트

문자의 가로 부분을 정렬하기 위해 f- 문자열 사용 :

lambda n:'\n'.join(f"{'A'+' A'[i==n//2]*2*i:>{n+i}}"[:-1]+'A'for i in range(n))

\b하나를 삭제하는 데 사용 A(아마도 부정 행위) :

lambda n:'\n'.join(f"{'A'+' A'[i==n//2]*2*i:>{n+i}}\bA"for i in range(n))


3

J , 65 바이트

f=:3 :''' A''{~1(([:(<@;]+i.@+:)<.@-:)y)}([:(}:@|."1,.])=/~@i.)y'

온라인으로 사용해보십시오!

대략적으로 줄일 수 있습니다. 동사를 암묵적으로 만드는 것만으로도 12 바이트이지만 문제가 있습니다.

설명:

3 : '...' 명시적인 한 줄짜리 동사를 나타냅니다

y 논쟁이다

=/~@i. 인수의 크기를 가진 항등 행렬을 만듭니다.

    =/~@i. 4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

([:(}:@|."1,.]) 각 행의 마지막 요소가 삭제 된 미러 사본과 함께 ID 매트릭스 앞에 붙습니다.

    ]a =. ([:(}:@|."1,.])=/~@i.) 4
0 0 0 1 0 0 0
0 0 1 0 1 0 0
0 1 0 0 0 1 0
1 0 0 0 0 0 1

1(...)}(...) 왼쪽에 의해 선택된 오른쪽 인수의 위치를 ​​1로 변경

([:(<@;]+i.@+:)<.@-:) -다음을 수행하여 선택을 준비합니다.

               <.@-: - halves the argument and finds the floor (finds the row number)
    <@;              - box the row, followed by a list of columns:  
        ]+i.@+:      - a list form the argumnt to the doubled row number

    ([:(<@;]+i.@+:)<.@-:) 4
┌───────────┐
│┌─┬───────┐│
││2│2 3 4 5││
│└─┴───────┘│
└───────────┘

    1(([:(<@;]+i.@+:)<.@-:) 4)}a
0 0 0 1 0 0 0
0 0 1 0 1 0 0
0 1 1 1 1 1 0
1 0 0 0 0 0 1

' A'{~ 0과 'A'위치에 1이있는 공간을 렌더링합니다.

    ' A'{~1(([:(<@;]+i.@+:)<.@-:) 4)}a
   A   
  A A  
 AAAAA 
A     A



2

SOGL V0.12 , 12 바이트

 A*:╚╥≤.»I:ž

여기 사용해보십시오!

설명:

 A*           repeat "A" input times
   :          duplicate it
    ╚         create a "/" diagonal of one of the copies of As
     ╥        palindromize it horizontally
      ≤       get the other copy of the "A"s on top
       .»I:   push floor(input/2)+1 twice
           ž  and at those coordinates in the palindromized diagonals place in the row of As

2

Japt -R , 20 19 바이트

Çç" A"gZ¶Uz¹i'A êÃû

시도 해봐


설명

                        :Implicit input of integer U
Ç                       :Create the range [0,U) and pass each Z through a function
         Uz             :  Floor divide U by 2
       Z¶               :  Test for equality with Z (true=1, false=0)
  " A"g                 :  Get the character in the string " A" at that index
 ç                      :  Repeat Z times
           ¹            :  (Closes a few nested methods)
            i'A         :  Prepend an "A"
                ê       :  Palindromise
                 Ã      :End function
                  û     :Centre pad each element to the length of the longest element
                        :Implicitly join with newlines and output

대안

(저는 저축을 발견하는 데 도움이되기를 바랍니다!)

Æ'AúXÄ" A"gX¶Uz¹êÃû

1
바이트가 더 긴 또 다른 대안 :ç h'AUz)¬íp ®i'A êÃû
ETHproductions

@ETHproductions는 교체 p ²그리고 그것은 또한 19 바이트입니다.
얽히고 설킨

내 괴물 보다 +1 더 낫다 .
Oliver


1

젤리 , 23 20 19 18 바이트

=þ`o\L‘HĊƲ¦UŒBị⁾A 

온라인으로 사용해보십시오!

=þ` 크기의 항등 행렬을 만듭니다. n .

L‘HĊƲ가로 막대의 행 색인을 찾아 해당 행을 ¦선택하고 적용 하여 가로 막대 o\를 만듭니다.

U거꾸로 "A"가없고 ŒB(palindromize; vectorizes) "A"의 후반을 만듭니다.

ị⁾A(서식을 손질하기되는 공간)을 대체 0의 공간과와 1와의 A들.


1

T-SQL , 182 177 바이트

DECLARE @n INT=5DECLARE @ INT=0a:DECLARE @s VARCHAR(9)=STR(POWER(10,@),@n)PRINT REPLACE(REPLACE(@s+REVERSE(LEFT(@s,@n-1)),'1','A'),'0',IIF(@=@n/2,'A',' '))SET @+=1IF @<@n GOTO a

첫 번째 버전 (182 바이트) :

DECLARE @n INT=5DECLARE @ INT=0WHILE @<@n BEGIN DECLARE @s VARCHAR(9)=STR(POWER(10,@),@n)PRINT REPLACE(REPLACE(@s+REVERSE(LEFT(@s,@n-1)),'1','A'),'0',IIF(@=@n/2,'A',' '))SET @+=1 END

위 버전은 @ n = 9까지 작동합니다.

다음은 @ n = 23까지 작동하지만 2 바이트가 더있는 다른 버전입니다.

DECLARE @n INT=5DECLARE @ INT=0WHILE @<@n BEGIN DECLARE @s VARCHAR(23)=STR(POWER(10.,@),@n)PRINT REPLACE(REPLACE(@s+REVERSE(LEFT(@s,@n-1)),'1','A'),'0',IIF(@=@n/2,'A',' '))SET @+=1 END

언 골프 드 :

DECLARE @n INT=5

DECLARE @i INT=0
WHILE @i<@n BEGIN
    DECLARE @s VARCHAR(9)=STR(POWER(10,@i),@n)
    PRINT REPLACE(REPLACE(@s+REVERSE(LEFT(@s,@n-1)),'1','A'),'0',IIF(@i=@n/2,'A',' '))
    SET @i+=1
END

1

Haskell , 98 97 95 바이트 및 109 바이트

두 가지 매우 다른 접근법. 첫 번째 (95 바이트) :

c!n=([1..n]>>c)++"A"
f n=unlines[" "!(n-x)++drop 3([" "!(abs$n`div`2-x+1)!!0]!(2*x))|x<-[1..n]]

두 번째 (109 바이트) :

m True='A'
m _=' '
g n=unlines[[m(abs(n-j)==l||l==q&&elem j[q+1..q+n])|j<-[1..2*n]]|l<-[0..n-1],q<-[n`div`2]]

여기에서 사용해보십시오! ; 여기에서 수정 된 버전을 사용해보십시오!

여기에서 세 번째 버전을 사용해보십시오!


PPCG에 오신 것을 환영합니다! infix operator정의l 하여 첫 번째 접근 방식에서 바이트를 저장할 수 있습니다 .
Laikoni

m True='A'로 단축됩니다 m b|b='A'.
Laikoni

2 바이트도 저장할 수있는 것으로 나타났습니다. 감사! :)
Radek

1

파이썬 2 , 70 바이트 또는 65 바이트

@Budd가 주석에 명시된 것처럼 문자열 목록은 허용 가능한 결과입니다.

lambda n:['%*sA\n'%(n+i,('A'+i*2*' A'[i==n/2])[:-1])for i in range(n)]

온라인으로 사용해보십시오!


를 사용하여 겉보기에 건전한 해결책 \b. 콘솔에서 작업을 수행하는 TIO에서 펑키하게 보입니다.

lambda n:['%*s\bA\n'%(n+i,'A'+i*2*' A'[i==n/2])for i in range(n)]

온라인으로 사용해보십시오!


0

자바 스크립트, 124 바이트

상당히 순진한 솔루션으로 js 기술을 연습 할 수 있습니다.

for(i=-1,p=" ".repeat(n-1)+"A ";++i<n;console.log(i-~~(n/2)?p:p.slice(0,i)+"A".repeat(n)),p=p.slice(1,n)+" "+p.slice(n-1)){}

개봉

for(
 //create the first line
 i=-1, p=" ".repeat(n-1)+"A "; 
 ++i<n;
 console.log( 
 //if we are not at the bar
      i-~~(n/2)?
 //otherwise, use the modified previous line
      p
 //slice the start of the previous line and add As
      :p.slice(0,i)+"A".repeat(n)), 
 //add a space in between the previous line and remove padding on each side
 p=p.slice(1,n)+" "+p.slice(n-1)){}


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.