알파벳 삼각형


48

이 정확한 텍스트를 인쇄해야합니다.

A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A

명세서

  • 출력 끝에 추가 후행 줄 바꿈이 허용됩니다.
  • 추가 후행 줄 바꿈을 포함하여 각 줄 끝에 추가 후행 공백 (U + 0020)이 허용됩니다.
  • 모든 대문자 대신 소문자를 모두 사용할 수 있지만 부분적으로 대문자를 부분적으로 인쇄 할 수는 없습니다.
  • 텍스트를 전체 프로그램으로 인쇄하는 대신 텍스트를 함수 출력으로 반환 할 수 있습니다.

채점

이것은 삼각형이고 삼각형은 3면이고 3은 소수이므로 코드는 바이트 수 측면에서 작아야합니다.


22
그래서 많은 알파벳 최근
downrep_nation

1
내 synesthesia는 @downrep_nation에 푹 빠졌다
DoctorHeckle

5
"삼각형은 3 개의 변을 가지고 3은 작은 수를 가지므로 코드의 바이트 수는 작아야합니다." 합법적 인 것 같다
로한 Jhunjhunwala

1
1로만 구성된 숫자의 제곱은 관련이있는 것 같습니다 : 1 * 1 = 1 ~ = A, 11 * 11 = 121 ~ = ABA, 111 * 111 = 12321 ~ = ABCBA ...
Caridorc

1
"삼각형에는 3 개의면이 있고 ..."Illuminati가 확인되었습니다.
HyperNeutrino

답변:


38

Vim, 37 바이트

:h<_↵↵↵YZZPP$xqqxYpGP√2G$A♥-€k$q24@qJ

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

전설

↵ = Return
√ = Ctrl+V
♥ = Ctrl+R
€ = Escape

2
정말 멋진 GIF입니다.
AdmBorkBork

13
나는 Vim의 답변에 놀라지 않을 것입니다.
DanTheMan

Vim에 유창하지 않은 사람들에게 이것이 어떻게 작동하는지 설명해 주시겠습니까?
R. Kap

6
@ R.Kap Vim을 다운로드하고 솔루션을 직접 시험해 보는 것이 좋습니다. 솔루션을 스트로크로 전개하는 것을 볼 수 있습니다! 본질적으로, 나는 도움말 파일 ( :h<_↵↵↵YZZP) 에서 알파벳을 훔친 다음 qq…q맨 위 줄에서 반복적으로 문자를 자르고 삼각형을 수직으로 자라기 위해 두 번 복사 한 다음 잘린 문자를 모든 줄에 추가 하는 매크로 ( ) 를 기록합니다 수평으로 자라고 이 매크로를 24 번 더 반복하여 완전한 삼각형을 그립니다.
Lynn

31

로고 232 207 196 190 바이트

누군가 삼각형이라고 했습니까?

나침반과 각도기를 꺼내고 그래픽 방식으로하겠습니다. 형상은 정삼각형을 사용하여 결과를 정렬합니다. 이전에는 이등변 삼각형이 있었지만 소수점 이하 자릿수가 너무 많습니다. 이 변경 사항은 출력을 압축하여 화면 준비 및 글꼴 변경 양을 줄였습니다.

나는 Calormen 온라인 통역사 를 사용하여 이것을 해석 했습니다. 화면 공간이 충분하지 않으면 줄 바꿈되지만 몇 가지 숫자로 바이올린을 처리 할 수도 있습니다. 브라우저에서 "F11"전체 화면 모드를 사용했습니다.

ht
pu
to r:n:b:l repeat:n[rt:b label char 90-:n lt:b fd:l] end
to t:s
fd 12 rt 120 bk 6
repeat 2[r:s 90 12]
repeat 2[rt 120 r:s 90-heading 24]
end
rt 90 label "Z lt 210
repeat 25[t repcount]

r절차는 한 줄의 n문자를 그립니다 . 사용하도록 지시 된 세그먼트 수에 따라 문자가 자동으로 결정됩니다. 이 b매개 변수는 글자가 올바른 방향을 가리 키도록 일시적으로 회전하는 정도를 알려줍니다. 이 l매개 변수는 문자 사이의 선형 거리를 결정합니다.

t절차는 다음 위치로 단계 및 호출 r할 때 적절한 회전 삼각형을 만들기 위해 네 번 기능을. 특수 처리로 한 번 호출하는 것보다 적은 바이트가 필요했기 때문에 수직면에 대해 두 번 호출했습니다. 절차가 끝나면 거북이가 다음 삼각형을 시작하기 위해 위의 한 단계 위에 위치합니다.

Z특수한 경우이므로 직접 인쇄하고 마치 삼각형을 완성한 것처럼 회전합니다. 마지막으로 t25 회라고합니다.

주석이 달린 사진 진행 중완성 된 결과


3
상자 밖으로. 잘 했어요
CousinCocaine

19

하스켈, 58 바이트

f x=init x++reverse x
t=unlines$f[f['A'..c]|c<-['A'..'Z']]

t출력을 문자열로 반환 하는 함수 를 정의합니다 .

f x=               define a helper function
init x             take the argument minus its last element
++                 and concatenate it with
reverse x          the argument reversed, producing ex. [a,b,c,b,a] from [a,b,c]

t=                                    define the main function
           [         |c<-['A'..'Z']]  for every char c from 'A' to 'Z'...
             ['A'..c]                 generate the range from 'A' to c
            f                         call the helper function to "reflect" it
          f                           call the helper function on the entire list
  unlines$                            join on newlines

12

젤리 , 16 13 바이트

Ṗ;Ṛ
ØAḣJÇ€Çj⁷

3 바이트를 사용하지 않은 @LeakyNun에게 감사합니다!

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

작동 원리

Ṗ;Ṛ        Helper link. Argument: A (array)

Ṗ          Pop; yield A without its last element.
  Ṛ        Reversed; yield A with inverted order.
 ;         Concatenate the results to both sides.


ØAḣJÇ€Çj⁷  Main link. No arguments.

ØA         Alphabet; set link argument and return value to "A...Z".
   J       Indices; yield [1, ..., 26].
  ḣ        Head; take the first, the first two, etc. elements of the alphabet.
           This yields ["A", AB", ..., "A...Z"].
    ǀ     Apply the helper link to each string.
      Ç    Apply the helper link to the array itself.
       j⁷  Join, separating by linefeeds.


@LeakyNun 감사합니다.
Dennis

4
세계에서 이것이 어떻게 작동하는지 궁금합니다.
Socratic Phoenix

아마 링크 복제기를 사용하면 1 바이트를 절약 할 수 있습니다
Leaky Nun

3
@MathieuRodic Jelly는 이해하는 256 개의 문자를 각각 단일 바이트로 인코딩하는 사용자 지정 코드 페이지를 사용합니다. 헤더 의 바이트 링크가이를 가리 킵니다.
Dennis

10

파이썬, 74 바이트

def f(x=66,s='A'):
 t=s+s[-2::-1];print t
 if x<91:f(x+1,s+chr(x));print t

인자없이 인자를 출력하는 파이썬 2 함수. 핵심 아이디어는 재귀와 함께 삼각형의 전후 패턴을 생성하는 것입니다. 먼저 문자 'A'를 'Z'까지 인쇄하고 다시 'A'로 인쇄하는이 간단한 기능을 고려하십시오.

def f(x=65):
 t=chr(x);print t
 if x<90:f(x+1);print t 

이 기능은 먼저 "A"(문자 코드 65)를 인쇄 한 다음 "B"(66) 등을 "Z"(90)로 인쇄합니다. 거기서부터 재귀가 중지됩니다. 재귀 스택 아래로 돌아가는 t동안 "Y"에서 "A"까지 같은 레이어에 인쇄 된 문자 를 인쇄합니다.

메인 코드는 s지금까지 문자열에 누적되고 위아래 문자열을 인쇄 한다는 점을 제외하고는 동일하게 수행 s+s[-2::-1]됩니다.

2 바이트의 xsot 덕분입니다.

Python 3에서 모든 것을 한 줄에 넣음으로써 바이트가 더 짧아집니다 (73 바이트).

def f(x=66,s='A'):t=s+s[-2::-1];print(t);x>90or[f(x+1,s+chr(x)),print(t)]

변수를 오프셋하면 2 바이트를 절약 할 수 있습니다 (예 :) f(x=66,s='A'). 이를 통해 s함수 본문 대신 함수 호출에서 업데이트 할 수 있습니다 .
xsot

파이썬 2 버전과 마찬가지로 파이썬 3 버전은 Z와 뒤로가는 가장 긴 행을 가지려면 89 대신 90의 값이 필요하다고 생각합니다.
Tebbe

@Tebbe 감사합니다.
xnor

8

브레인 퍽, 1,733 121 119 바이트

----[---->+<]>++.<++++++++++.<+++++[<+++++>-]<+>>>.<[>>[>.]<[>+>+<<-]>+.>[<<+> >-]<[<.]<-]>>[>[>]<[-]<[<]>>[.>]<<[.<]>]

약간 더 읽기 쉬운 버전 :

----[---->+<]>++.<
++++++++++.<
+++++[<+++++>-]<+
>>
>.<
[
  >>[>.]<
  [>+>+<<-]
  >+.>
  [<<+>>-]
  <[<.]<
  -
]
>>
[
  >[>]<
  [-]
  <[<]>
  >[.>]<<[.<]>
]

올 가능성이있는 설명.


각 캐릭터를 수동으로 만드는 대신 루프를 사용해보십시오.
Leaky Nun

@LeakyNun 나는 그것에 대해 어떻게하는지 모른다. 어떤 제안?
DanTheMan

4
네, 4 시간 만 잤어요
Leaky Nun

1
프로그램이 출력보다 작게 된 것을 축하합니다!
GuitarPicker

1
1612 바이트에서 골프를 어떻게합니까?
FantaC

8

05AB1E , 20 13 12 6 바이트

Adnan 덕분에 2 바이트를 절약했습니다. Magic Octopus Urn 및 일부 새로운 언어 기능
덕분에 6 바이트가 절약되었습니다 .

Aη€ûû»

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

설명

Aη       # push prefixes of alphabet
  €û     # palendromize each prefix
    û    # palendromize the whole list
     »   # join on newlines

아주 좋아요! 당신은 변경할 수 있습니다 Œ26£.p접두사 명령이다. 또한으로 변경 D,하면 =팝업없이 인쇄됩니다.
Adnan

gF,!
Adnan

@Adnan : 감사합니다! 나는 어딘가에 접두사 명령이 있다는 것을 알았습니다.) 확장 된 명령을 거의 확인하지 않습니다.
Emigna

2
이 분기 명령 Â은 매우 훌륭하고 정말 깔끔한 기능입니다.
마일

1
@carusocomputing : 불행히도 û도전보다 새로운 것이며이 답변을 경쟁이 아닌 것으로 만들 것입니다.
Emigna

6

J, 26 23 22 바이트

f(f=:,1}.|.)\u:65+i.26

설명

,1}.|.  Monad f: Input: A
    |.  Reverse the items in A
 1}.    Drop the first item in the reversed A
,       Join A and the previous

f(f=:,1}.|.)\u:65+i.26
                  i.26  Create the range [0, 1, ..., 25]
               65+      Add 65 to each
             u:         Convert to characters to get 'A..Z'
  f=:,1}.|.             Define a verb f
 (         )\           Call f monadically on each prefix of 'A..Z'
f                       Call f again on that result

f=:,1}.|.이것을 시도
Leaky Nun

@LeakyNun 고마워 왜 그들이 다르다고 생각하는지 모르겠습니다.
마일




5

C, 272 247 234 230 144 137 바이트 :

( sigalor의 훌륭한 골프 팁 및 트릭 덕분에 이전 방법에서 많은 바이트 ( 272 -> 230)를 절약했습니다 ! )

( 약 100 바이트 (저장 230 -> 144나은 방법으로 전환함으로써). )

main(q,i,e,x){for(q=0;q<51;q++){i=q>25 ? 25-(q-25):q;for(e=65;e<66+i;e++)printf("%c",e);for(x=64+i;x>64;x--)printf("%c",x);printf("\n");}}

에 대한 첫 번째 답변 C. 최근에 스스로 학습을 시작 했으므로 어떻게 진행되는지 봅시다.

행동에 C! (아이디어)


1
아, 그냥 C 답변을 추가하고 싶었습니다 ... 어쨌든, 나는 당신을 도울 것입니다.;) 첫째, 이것은 코드 골프입니다. 완벽한 코드를 작성할 필요는 없습니다. 컴파일러 경고는 완벽합니다. 그렇기 때문에 main()의 반환 유형과 심지어를 제거 할 수 있습니다 #include <stdio.h>. GCC (그리고 Ideone과 같은 사이트)도 괜찮습니다. 다음으로, 변수 정의를 함수의 매개 변수 목록에 '외주'할 수 있습니다. 하자 for(int i=65;...for(i=65...변경 main()main(i). 다른 모든 int 변수에 대해서도 동일한 작업을 수행하십시오 (GCC 기본 결측 유형은 int).
sigalor

@sigalor 팁 주셔서 감사합니다! :) 단 하나의 질문 : 왜로 변경 main()해야 main(i)합니까?
R. Kap

@sigalor 사실, 이제 많은 컴파일 오류가 발생합니다.
R. Kap

ifor 루프의 초기화에서 변수를 선언하지 않으면 다른 곳에서 선언해야합니다. 그리고 (적어도 C에서는) 함수의 매개 변수를 일반 변수처럼 사용할 수 있으므로 문제가 없습니다. Btw, 어떤 컴파일러를 사용하고 있습니까?
sigalor

@sigalor 현재 CIdeone에 있습니다. 몇 가지 <variable> undeclared오류가 발생합니다.
R. Kap

5

자바 스크립트 (ES6), 81 바이트

[...'ZYXWVUTSRQPONMLKJIHGFEDCBA'].reduce((p,c)=>c+`
`+p.replace(/^|$/gm,c)+`
`+c)

5

Mathematica 59 바이트

Column@FromCharacterCode[#@#@26+64]&[#-Abs@Range[1-#,#-1]&]

나는 //Column끝에서 를 제거하고 코드 접두어가 Column@작동 한다고 생각 합니다.
Yytsi

2
당신이 계산 한 것 같은 단일 바이트. Mathematica가 기본적으로 지원하는 단일 바이트 코드 페이지가 있는지 의심합니다. 그들은 UTF-8에서 3 바이트만큼 되었기 때문에 plain보다 아무것도 저장하지 않습니다 [[...]]. 또한 ColumnMathematica 노트북에 줄 목록처럼 표시되기 때문에 합법적인지 확실하지 않습니다 . 스크립트 파일에서이 코드를 실행하면 아무 것도 표시되지 않습니다. 그러나 Print/@동일한 바이트 수이며 두 경우 모두 작동합니다.
Martin Ender

주소가 긴 페이지에 링크하려면 다음을 수행하십시오 [what you see](actual link).. 전의. [Example Link](https://www.example.com)로 표시되는 실시 예 링크
스탠 스트 럼


4

R, 63 61 59 바이트

for(i in c(1:26,25:1))cat(LETTERS[c(1:i,i:1-1)],"
",sep="")

유용하게 LETTTERS[0]모든 문자를 반환하지 않습니다.

편집 : @ leakynun 덕분에 하나를 잃었습니다.

편집 : @ plannapus 덕분에 두 가지 더


1
대신 리터럴 개행 문자를 사용할 수 있습니다\n
Leaky Nun

3

TSQL, 159 바이트

DECLARE @ varchar(52)='ABCDEFGHIJKLMNOPQRSTUVWXY',@o varchar(max)SELECT @+='Z'+REVERSE(@)+'
',@o=@
WHILE''<@
SELECT @=STUFF(@,LEN(@)/2,2,''),@o=@+@o+@
PRINT @o

깡깡이


1
나는 그것을 시도했지만 250+ 바이트로 끝났으므로 결코 게시하지 않았습니다. 실제로, 당신은 나의 것보다 더 나은 해결책을 가지고 있습니다. 다시 한 번 :)
아누 즈 Tripathi

3

자바 스크립트 (외부 라이브러리 사용 가능), 135 바이트

_.Range(1,51).WriteLine(x=>(g=_.Range(65,x>25?52-x:x)).Write("",y=>(w=String.fromCharCode)(y))+(g.Reverse().Skip(1).Write("",y=>w(y))))

라이브러리 링크 : https://github.com/mvegh1/Enumerable

코드 설명 : 1부터 시작하여 51의 개수로 int 범위를 만듭니다. 각각에 대해 복잡한 pred에 따라 행을 작성하십시오. 전역 변수와 캐싱 및 voila를 사용하여 JS 마법사를 수행하십시오. WriteLine의 각 int에 대해 왼쪽 범위의 int를 작성하고 전역 "g"에 저장하고 ""구분 기호를 사용하여 String Joining (Write)을 작성 하고 각 int를 int char 코드에 대한 String 맵핑에 맵핑합니다. 그런 다음 시퀀스를 반대로하고 첫 번째 요소를 건너 뛰어 원래 순서의 마지막 요소와 일치하므로 첫 번째 요소를 건너 뛰어 같은 논리를 사용하여 오른쪽을 연결합니다. 편집 : 라이브러리의 Write 내부를 업데이트했습니다. 빈 시퀀스는 이제 null 대신 빈 문자열을 씁니다. 이것은 또한 대답에서 15 바이트를 깎았습니다.

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


1
라이브러리를 가져 오는 데 필요한 바이트를 포함하지 않아도됩니까?
MatthewRock

1
Idk, Ive는 라이브러리를 사용하여 20 개가 넘는 답변을 게시했으며 당신은 나에게 그 말을 가장 먼저 할 것입니다. 내 대답 어쨌든 승리하지 않기 때문에 사람이 정말 걱정 같아요
applejacks01

1
@ applejacks01 가져 오지 않으면 확실히 상단에 "JS + Enumerable"과 같은 것을 말해야합니다. "Bash + Coreutils"와 유사
mbomb007

2
수입품을 세는 것이 일반적입니다. Python + SymPy 답변은 여전히 import sympy또는 from sympy import*맨 위에 있습니다. 강타 + X 만 설치해야하기 때문에 답변이 다릅니다 X를 , 어떻게 든 그것을 사용하지.
Dennis

1
@PatrickRoberts 챌린지가 게시되기 전에 라이브러리가 존재하는 한 가능합니다. 파이썬 대답은 사용하기 sympy, numpy, scipy모든 시간을, 등.
Dennis

3

파워 쉘, 61 52 바이트

9 바이트를 절약 한 TimmyD에게 감사합니다!

65..90+89..65|%{-join[char[]]((65..$_-ne$_)+$_..65)}

대문자의 ASCII 값을 앞뒤로 반복합니다. 각 숫자에 대해 첫 번째 X 숫자의 배열을 만들고 X-1 번째 숫자를 제거한 다음 첫 번째 X 숫자의 역을 추가하여 문자로 캐스트하고 문자열에 조인합니다.


안녕, 고마워! 나는 65..90..65성공하지 못한 채 변덕에 꽂혀 있었다 . 범위를 함께 추가 할 수 없었습니다.
Ben Owen

3

체다 , 102 96 79 69 67 바이트

Downgoat 덕분에 17 바이트, 10 개 이상 영감

"A"+(2@"27+@"(25|>1)).bytes.map(i->65@"(64+i)+@"((64+i)|>65)).vfuse

문자열이 배열은 가능하지만 배열은 불가능하다는 사실은 두 범위를 문자열로 변환하고 연결 한 다음 배열로 다시 변환해야한다는 것을 의미합니다.

또한 vfuse선도적 인 newliens 를 생산 한다는 사실 은 첫 번째 줄을 수동으로 생성 한 다음 나머지 줄에 연결해야한다는 것을 의미합니다.

@" dyad (두 인수 함수)는 문자열로 직접 변환 할 수 있지만 역 범위에서는 작동하지 않습니다 (첫 번째 인수가 두 번째 인수보다 큰 경우).

범위는 절반을 포함했습니다. 버그 수정 후 포함되었습니다.

용법

cheddar> "A"+(2@"27+@"(25|>1)).bytes.map(i->(65@"(64+i)+@"((64+i)|>65))).vfuse
"A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A"

체다, 55 바이트 (비경쟁)

에서 최신 버전 의 모든 수정과, 대답은 :

(|>25+24|>0).map(i->65@"(65+i)+(i?(64+i)@"65:"")).vfuse

그러나 도전 후에 만들어졌습니다.


@"(1|>26)할 수 있습니다1@"26
Downgoat

String.letters할 수 있습니다(65@"91)
Downgoat

String.letters.slice(0,i)어쩌면65@"(66+i)
Downgoat

아하, 나는 당신이 봤는데 볼 격자 당신의 bytecount가 있습니다.
steenbergh


3

VBA, 94 바이트

Function T:For j=-25To 25:k=25-Abs(j):For i=-k To k:T=T &Chr(65+k-Abs(i)):Next:T=T &vbLf:Next

? T를 사용하여 즉시 창에서 호출

진행 상황을 설명하기 위해 : 알파벳 순회와 줄 길이를 모두 반영하기 위해 Abs 함수를 두 번 사용합니다. pre-Abs 변수의 제로 크로싱에 해당하는 두 경우 모두 단일 극단 값으로 인해 작업에 적합합니다.

프로그램이나 함수가 아닌 VBA 직접 실행 창에서 간단한 명령 집합으로 다음이 72 바이트가 필요합니다.

For j=-25To 25:k=25-Abs(j):For i=-k To k:?Chr(65+k-Abs(i));:Next:?:Next

(@GuitarPicker 덕분에)


1
아이슬란드 깃발을 제출할 때 비슷한 논리를 사용했습니다. 직접 창에서 완전히 실행하고 함수 선언을 건너 뛰어 더 골프를 칠 수 없습니까? 아니면 익숙하지 않은 규칙을 어기는 것입니까?
GuitarPicker

@GuitarPicker; 즉각적인 창에서 실행이 완전한 프로그램으로 간주되는지 확실하지 않지만, 그렇다면 8 바이트가 더 적습니다. 로 시작하는 대신로 Function T:끝납니다 :?T(단, 한 번만 작동하지만 그 후에 T를 ""로 재설정해야하지만이 삼각형 중 하나 이상이 필요한 사람은 누구입니까?)
Joffan

2
당신이 ?갈 때 T가 필요하지 않습니다 ;.
GuitarPicker

그 방법을 사용하여 71로 줄일 수있었습니다. 힌트 : vbCrLf도 필요하지 않습니다.
GuitarPicker

1
그래, 나도 똑같아. 반품이 필요합니다.
Joffan

3

파이썬, 73 71 바이트

재귀에 대한 @xnor에게 감사합니다

f=lambda x=66,s='A',t='':x/92*t or t+f(x+1,s+chr(x),s+s[-2::-1]+"\n")+t

설명

  • 매개 변수 :
    • x 알파벳에서 다음 문자의 ASCII 값입니다
    • s 알파벳의 누산기
    • t삼각형의 선입니다 (예 : s+ s backwards)
  • 반환 : t알파벳이 완료된 경우 (예 : 중앙에 있음)
  • 그 외 : t+f(...)+t와 :
    • x 증분
    • s 다음 편지와 함께 추가
    • ts+ s backwards+로 재설정\n

최신 정보

  • -2 [16-08-05] @xnor 덕분에 선행 \n(+1) 및 단축 된 조건부 (-3)를 모두 제거합니다

1
t다음 루프로 넘어가 는 영리한 방법 입니다. 그래도 추가 줄 바꿈이 있습니다. x=66,s='A''그것을 제거합니다. 기본 케이스는로 단축 할 수 있습니다 x/92*t or .
xnor

3

HTML + CSS, 884 자

(763 자 HTML + 121 자 CSS)

MonkeyZeus답변에 대한 Leaky Nun의견 을 확대하는 입니다. (댓글을 잘못 읽을 수도 있지만…)

p{margin:0}p:before{content:"ABCDEFGH"}p:after{content:"HGFEDCBA"}a:before{content:"IJKLMNOP"}a:after{content:"PONMLKJI"}
<pre>A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
<p>I</p><p>IJI</p><p>IJKJI</p><p>IJKLKJI</p><p>IJKLMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNOPONMLKJI</p><p><a>Q</p><p><a>QRQ</p><p><a>QRSRQ</p><p><a>QRSTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXYZYXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTSRQ</p><p><a>QRSRQ</p><p><a>QRQ</p><p><a>Q</a></p><p>IJKLMNOPONMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMLKJI</p><p>IJKLKJI</p><p>IJKJI</p><p>IJI</p><p>I</p>ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A


3

Brachylog , 37 29 바이트

그의 지원에 대한 Fatalize의 크레딧.

Fatalize 덕분에 4 바이트, 또 다른 4 바이트에 대한 영감.

@A:1&e:"a"yr:1&cw@Nw\
:Lc.r.!

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

술어 0 (주 술어)

@A:1&e:"a"yr:1&cw@Nw\
@A:1&                  Apply predicate 1 to @A, which is
                       basically "abcdefghijklmnopqrstuvwxyz"
     e                 Choose one element from the result (choice point)
      :"a"yr               generate substring from element to "a"
            :1&            apply predicate 1
               c           concatenate
                w          write to STDOUT
                 @Nw       write "\n" to STDOUT
                    \  Backtrack to last choice point to choose
                       another element until there is no more
                       choice left, then halt.

술어 1 (보조 술어)

이것은 기본적으로 주어진 문자열에서 회문을 만듭니다.

:Lc.r.!
:Lc.     output is [input:L]
   .r.   output reversed is still output
      !  stop searching after the first output

,A술어 1에서을 대체 하여 h1 바이트를 절약 할 수 있습니다 .
치명적

또한 대체하여 2 바이트를 저장할 수 :1:2yt.:2&.a와 추가 !조건 2의 끝에서 (컷 선택 점)
Fatalize


3

R, 127125 바이트

k=cat;L=LETTERS;for(i in 1:26)k(c(L[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))

이 솔루션, 특히 두 개의 for루프에 완전히 만족 하지는 않지만 더 나은 것을 얻을 수는 없습니다!
LETTERS대문자를 포함합니다.

언 골프 :

for(i in 1:26){
  cat(c(LETTERS[1:i],LETTERS[(i-1):0],"\n"))
               }

for(i in 1:26){
  cat(c(LETTERS[0:(26-i)],LETTERS[ifelse((25-i)>=0,25-i,0):0],"\n"))
               }

ifelseunsing에 대한 짧은 방법이며 다음 if... else...과 같이 작동합니다.ifelse(condition,action if TRUE, action if FALSE)

다른 125 바이트의 해결책 :

for(i in 1:26)(k=cat)(c((L=LETTERS)[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))


3

자바 131 바이트

문자열을 사용하지 않는 경우 (131 바이트)

public static void main(String[] args) {
    for(int i = 0 ,k=1; i>-1; i+=k){
        for(int c= 65, d = 1; c>64;){
            d = d>-1 & c < 65+i?1:-1;
            System.out.print((char)c+((c+=d)<65?"\n":""));
        }
        k = k>-1 & i < 25?1:-1;
    }
}

코드 골프

for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));

문자열 포함 (173 바이트)

String a="abcdefghijklmnopqrstuvwxyz";
for(int i = 1 ,k=1; i>0; i+=k==1?1:-1){
    System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i));
    k = k>-1 & i < 26?1:-1;
}

코드 골프

String a="abcdefghijklmnopqrstuvwxyz";for(int i=1,k=1;i>0;k=k>-1&i<26?1:-1,System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i)),i+=k==1?1:-1);

manatworkKevin Cruijssen 덕분에


2
PPCG에 오신 것을 환영합니다. “코드 골프에 어떻게 대답해야합니까? 에서 어떤 힌트? "섹션 코드 골프 태그의 정보 페이지 . 이러한 종류의 문제에 대한 답변은 코드 크기를 줄이기위한 노력을 제시 할 것으로 예상됩니다. 여기 에서 Java의 골프 팁<모든 언어>의 골프 팁에 대한 도움말을 찾을 수 있습니다 .
manatwork

1
4 개의 삼항 연산자를 사용하며 모든 조건은 괄호로 묶습니다. 8자를 저장하기 위해 그것들을 제거 할 수 있습니다.
manatwork

1
d와 k는 -1 아래로 갈 수 없습니다. 그런 다음 k d!=-1d>-1동일 하게을 대체 할 수 있습니다 . (BTW, 당신은 골프 버전을 고치는 것을 잊었다.)
manatwork

루프 본문에서 명령문을 증분 섹션으로 이동하여 3 바이트를 절약했습니다.
Syamesh K

1
안녕하세요, 저는 꽤 오랜만 것을 알고,하지만 당신은 골프 두 가지 수 있습니다 i+=k==1?1:-1될 수 있습니다 i+=kSystem.out.print((char)c+(c+d<65?"\n":"")),c+=d==1?1:-1);수 있습니다 System.out.print((char)c+((c+=d)<65?"\n":"")));. 따라서 전체적으로 ( 131 바이트 )가됩니다.for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));
Kevin Cruijssen


2

Sesos , 27 바이트

0000000: a85ab9 ac5daa f8b1c7 785f9b b961f7 665c1b 73ccfc  .Z..]....x_..a.f\.s..
0000015: c01ecb 987303                                     ....s.

온라인으로 사용해보십시오! 확인 디버그를 생성 sbin에 코드를 볼 수 있습니다.

Sesos 어셈블리

위의 바이너리 파일은 다음 SASM 코드를 조합하여 생성되었습니다.

add 65, rwd 1, add 10, rwd 2, add 25
jmp
    fwd 3
    jmp
        put, fwd 1
    jnz
    rwd 1
    jmp
        fwd 1, add 1, fwd 1, add 1, rwd 2, sub 1
    jnz
    fwd 2
    jmp
        rwd 2, add 1, fwd 2, sub 1
    jnz
    rwd 1, add 1, rwd 2
    jmp
        put, rwd 1
    jnz
    rwd 1, sub 1
jnz
fwd 3
jmp
    jmp
        put, fwd 1
    jnz
    rwd 1, get, rwd 1
    jmp
        put, rwd 1
    jnz
    fwd 2
; jnz (implicit)

2

/// , 208 바이트

/'/\/\///+/BA
AB'-/DC+CD'&/FE-EF')/HG&GH'=/JI)IJ'|/LK=KL'7/NM|MN'1/PO7OP'q/RQ1QR'p/TSqST'6/VUpUV'[/XW6WX/A
A+C+C-E-E&G&G)I)I=K=K|M|M7O7O1Q1QqSqSpUpU6W6W[Y[YZY[Y[W6W6UpUpSqSqQ1Q1O7O7M|M|K=K=I)I)G&G&E-E-C+C+A
A

물론 우승하지는 않지만 마틴 엔더를 포식하는 것은 여기에 있습니다 ...

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