반대 각 알파벳


35

영어 알파벳 문자가 주어지면 임무는 입력에 반 대각 알파벳을 만드는 것입니다.

Semi-Diagonal 알파벳을 작성하는 방법?

간단한 설명 : 첫째, 당신은, 알파벳에서 문자의 위치를 가지고는 P( P1 인덱스 여기). 그런 다음 한 줄에 입력 (포함)이 될 때까지 각 문자를 인쇄하고, P-1그 문자 P시간을 앞에두고 반복 하여 공백을 삽입합니다.

:

  • 주어진 경우 F, 프로그램은 다음을 출력해야합니다 :

    에이 
     BB 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
    
  • 주어진 경우 K, 프로그램은 다음을 출력해야합니다 :

    에이
     BB 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
          구찌 
           HHHHHHHH 
            IIIIIIIII 
             JJJJJJJJJJJ 
              KKKKKKKKKKK 
    
  • 주어진 경우 A, 프로그램은 다음을 출력해야합니다 :

    A
    

규칙

  • 소문자 또는 대문자를 선택할 수 있지만 일관성이 있어야합니다.

  • 다음과 같이 외부 공간이있을 수 있습니다.

    • 하나의 일관된 선행 공간 (각 줄에).
    • 후행 또는 선행 개행.
    • 후행 공백.
  • 입력 및 출력은 모든 표준 평균에 의해 취해질 수 있으며 기본 허점이 적용됩니다.

  • 버전을 제공하는 한 대신 라인 목록을 출력 할 수 있습니다 .

  • 이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

이 도전에서 영감을 얻었습니다 .


문자열 목록으로 출력됩니까?
Adám

2
왜 공감해야합니까? 무엇을 개선 할 수 있습니까?

1
"P는 1- 색인입니다"라고 말하면 여기서 도전이나 예를 언급합니까?
Dave

3
@pizzakingme 아닙니다.

답변:


10

파이썬 3 , 59 바이트

lambda l:[' '*i+'%c '%(i+65)*-~i for i in range(ord(l)-64)]

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

파이썬 3 , 61 바이트

lambda l:[' '*i+-~i*(chr(i+65)+' ')for i in range(ord(l)-64)]

온라인으로 사용해보십시오! (예쁜 인쇄 버전으로 연결)


8
나는 공감할 이유가 전혀 없다. @downvoter가 설명 할 수 있습니까?
Mr. Xcoder

1
나는 그냥 misclick, 혹은 누군가가 설명의 부족 (후자는 IMO 매우 가능성이) 좋아하지 않는 상상 것
코너 오브라이언

나는 파이썬을 싫어하고 파이썬으로 구현할 수 없으므로 대답이 유용하지 않습니까? 농담이지만 ​​버튼 툴팁은 아마도이 사이트의 규칙에 맞지 않을 것입니다
Thomas Weller

Xcoder 씨가 1 명의 담당자를 가지고 있다고 말합니까?
Stan Strum



7

PowerShell , 45 42 바이트

65..$args[0]|%{" "*$i+++"$([char]$_) "*$i}

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

입력을 리터럴 문자로 취한 다음, 대문자를 통해 해당 지점까지 반복합니다. 각 반복은 적절한 수의 공백을 추가 한 다음 char \ space 하이브리드를 추가합니다.

TessellatingHeckler 덕분에 3 바이트를 절약했습니다.


@TessellatingHeckler 실제로. 나는 "$args"그렇게 많이 골프를 쳤는데 , 여기서 효과가 없을 것 [0]입니다. 하하.
AdmBorkBork

5

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

입력과 출력 모두에 대해 소문자로 작동합니다. 각 줄에 선행 공간과 후행 공간을 출력합니다.

f=(c,k=10,C=k.toString(36),r=s=>`${s} `.repeat(k-9))=>r``+r(C)+(C==c?'':`
`+f(c,k+1))

데모


`${s} `(s+"")1 바이트 절약 으로 대체 가능
Luke

@Luke이 공간이 필요합니다. 로 바꿀 수 (s+" ")있지만 시간이 오래 걸립니다.
Arnauld

5

APL (Dyalog) , 26 바이트

스칼라 문자를 묻습니다. 줄 목록을 인쇄합니다.

(∊⍴∘'',' ',¨⍨⊢⍴⊃∘⎕A)¨⍳⎕A⍳⎕

온라인으로 사용해보십시오! (1 바이트의 ASCII 아트 버전이 있음)

 입력 프롬프트

⎕A⍳ 찾을 ɩ ndex에서 lphabet

 먼저 많은 ɩ의 ntegers

( 다음의 암묵적 기능을 각각에 적용하십시오.

⊃∘⎕AA lphabet  에서 논증의 편지를 고르십시오

⊢⍴ 주기적으로 인수 길이로 재구성

' ',¨⍨ 각각에 공백을 추가

⍴∘'', 인수 길이의 문자열 앞에 공백을 넣습니다.

ε NLIST (편평한)


ASCII 아트 버전 은 맨 왼쪽에 있습니다. 문자열 목록을 문자표로 혼합하십시오.


4

펄 5 , 31 바이트

30 바이트 코드 + 1 -l.

print$"x$-,"$_ "x++$-for A..<>

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


깃발 say대신에 이것을 사용하여이를 줄일 수 있습니다 -l: 온라인으로 사용해보십시오!
Xcali

@Xcali 나는 찢어졌다 -E/ -M5.01, 나는 say과거에 상당히 사용 했고, 아마도 제한된 소스 챌린지 또는 이와 유사한 say대안에 대한 대안 이라는 사실을 남용 할 것이지만 print, -3을 위해, 나는 계속 할 것이다. 지금 그대로입니다. 공정한 논쟁이 메타 포스트를 참조하십시오 . 그래도 입력 감사합니다!
Dom Hastings

3

Dyalog APL, 38 바이트

{↑{(y/' '),(2×y←⎕A⍳⍵)⍴⍵,' '}¨⎕A↑⍨⎕A⍳⍵}

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

어떻게?

⎕A↑⍨ -알파벳까지

⎕A⍳⍵ -입력 문자

¨ -각 문자마다

    ⍵,' ' -문자와 공백을 가져

    (...)⍴ -모양을 바꾸다

    2×y←⎕A⍳⍵ -알파벳 문자의 두 배 색인

    (y/' ') -및 문자 색인 공간을 추가합니다

-그리고 평평 해지다


3

APL (Dyalog Classic) , 26 바이트

{↑{(≠\⍵<⍳3×⍵)\⍵⊃⎕A}¨⍳⎕A⍳⍵}

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

설명

                      ⍳⎕A⍳⍵  generate indexes up to position of right arg 
{                          on each index apply function
   (≠\⍵<⍳3×⍵)                generate boolean mask for expansion (each line has a length 3 times its index ⍵, starting with  blanks and then alternating letter blank)
             \⍵⊃⎕A          expand character in position 
                             mix result into text matrix

좋은 ... 4 APL-er는 같은 문제를 동시에 해결합니다! :) 난 당신이 바깥 쪽을 제거 할 수있는 codegolf 생각 {}, 교체 , 그리고는 "전체 프로그램"이 아닌 함수의 주장한다. 그것은 당신의 솔루션을 지금까지 최고로 만들 것입니다.
ngn

좋은 징조 여야합니다 :) 제안 해 주셔서 감사합니다. 나는 그것이 행한 것을 보았지만 선을 그릴 위치를 확신하지 못했습니다. curlies를 제거하고 혼합하면 3 바이트를 절약 할 수 있다고 생각합니다.
Gil

3

V , 28, 26, 25 , 23 바이트 ( 경쟁 )

¬A[/a
lDÓ./& ò
ò-Ûä$Û>

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

오랜 시간 동안 특정 기능 을 추가 계획 이었지만 ,이 과제는 마침내 그 일을하게되었습니다.

출력에는 각 줄에 선행 공백 하나와 후행 줄 바꿈 하나가 포함됩니다.

16 진 덤프 :

00000000: ac41 5b2f 1261 0a6c 44d3 2e2f 2620 f20a  .A[/.a.lD../& ..
00000010: f22d dbe4 24db 3e                        .-..$.>

설명:

¬A[         " Insert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ['
   /        " Search for...
    <C-r>a  "   The input
l           " Move one character to the right
 D          " And delete every character after the cursor
  Ó         " Search for...
   .        "   Any character
    /       " And replace it with...
     & ò    "   That character followed by a space and a newline
ò           " Recursively...
 -          "   Move to the beginning of the next line up
  Ûä$       "   Make *line number* copies of the current line
     Û>     "   And indent this line by *line number* spaces

1
이것은 경쟁입니다. 제목 말을 제거 할 수 있습니다.

그것은 나 같은 새로운 메타를 알지 못하는 사람들에게 유용합니다
Conor O'Brien

3

05AB1E , 10 바이트

A¹¡н«ðâƶāú

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

Adnan 에게 -2 감사합니다 .

»별도의 줄에 인쇄하도록 추가하십시오 .


<하나의 일관된 선행 공간이 좋으므로 생략 할 수 있습니다.
Emigna

@Emigna 감사합니다!
Outgolfer Erik

A¹¡н«ðâƶāú10 바이트 동안 작동합니다
Adnan

@Adnan 나는 그것이 ¹¡작동하지 않을 것이라고 생각합니다 ... 오. 그래서 거기에 a «가 있습니다. : p
Outgolfer Erik

3

R, 94 88 바이트

주세페 덕분에 -6 바이트

function(x,l=LETTERS)for(i in 1:match(x,l))cat(rep(' ',i-1),rep(paste(l[i],' '),i),'\n')}

언 골프 드 :

f=function(x,l=letters){
  for(i in 1:which(l==x)){
    A=paste(l[i],' ')
    cat(rep(' ',i-1),rep(A,i),'\n')
  }
}

88 바이트 : 익명 함수를 반환하는 것이 좋습니다 f. 한 줄짜리 이므로 중괄호를 제거 할 수 있으며 바이트 matchwhich저장하는 대신 사용하십시오 .
주세페


stdin에서 입력을받는 68 바이트
주세페

3

하스켈, 52 44 바이트

f k=[[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]

줄 목록을 반환합니다.

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

f k=                  -- main function is f, input parameter k
  [   |s<-['A'..k]]   -- for each s from ['A'..k]
     >>=              -- map (and collect the results in a single string) the function: 
         (['A'..s]>>) --  replace each element in ['A'..s] with
    [  ,  ]           --  over the list, containing
     " "              --   a single space to get the indent
        s:" "         --   s followed by space to get the letter sequence

편집 : @jferard : 3 바이트를 저장했습니다. 감사!


49 바이트 :f k=[tail$[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]
jferard

@ jferard : 감사합니다. 도전을 다시 읽은 결과 줄당 선행 공백이 허용되므로을 (를) 필요로하지 않습니다 tail$.
nimi

2

자바 스크립트 (ES8), 92 바이트

c=>(g=n=>n>9?[...g(n-1),`${n.toString(36)} `.repeat(n-=9).padStart(n*3)]:[])(parseInt(c,36))

소문자를 사용합니다. 줄에는 선행 및 후행 공간이 하나씩 있습니다. 행 배열을 반환합니다.

테스트 스 니펫

let f=

c=>(g=n=>n>9?[...g(n-1),`${n.toString(36)} `.repeat(n-=9).padStart(n*3)]:[])(parseInt(c,36))

;O.innerText=f("k").join`\n`
<pre id=O></pre>


2

껍질 , 13 바이트

z+ḣ∞øzRNC1…'A

작은 따옴표로 묶은 문자를 명령 행 인수로 사용하여 결과를 STDOUT에 인쇄합니다. 온라인으로 사용해보십시오!

설명

Husk에서 문자열 목록을 인쇄하는 방식을 활용하고 있습니다. 공백으로 내부 목록을 조인하고 줄 바꿈으로 외부 목록을 조인합니다.

z+ḣ∞øzRNC1…'A  Implicit input, say 'C'
          …'A  Range from A: "ABC"
        C1     Cut into strings of length 1: ["A","B","C"]
     z N       Zip with positive integers
      R        using repetition: x = [["A"],["B","B"],["C","C","C"]]
   ∞ø          The empty string repeated infinitely: ["","","",...
  ḣ            Prefixes: [[],[""],["",""],["","",""],...
z+             Zip with x using concatenation: [["A"],["","B","B"],["","","C","C","C"]]
               Implicitly join each inner list with spaces, join the resulting strings with newlines and print.

2

05AB1E , 15 14 13 바이트

Adnan 덕분에 1 바이트 절약

A¹¡н«ƶ€S»¶¡āú»

온라인으로 사용해보십시오! 또는 아스키 아트 버전

설명

A                # push lowercase alphabet
 ¹¡              # split at input
   н             # get the first part
    «            # append the input
     ƶ           # repeat each a number of times corresponding to its 1-based index
      €S         # split each to a list of chars
        »        # join on spaces and newlines
         ¶¡      # split on newlines
           āú    # prepend spaces to each corresponding to its 1-based index
             »   # join on newlines


@EriktheOutgolfer : 우리는 비슷하게했지만 리프팅 전에 공간을 추가하여 조인의 필요성을 없애는 아주 좋은 아이디어는 당신을 더 짧게 만들었습니다. 나는 앞 / 뒤 공간과 목록으로 출력이 괜찮다는 것을 읽지
못했기 때문에

tl; dr : 벡터화 : p
Outgolfer Erik

A¹¡н«대신에 ADIk>£작동
Adnan

@Adnan : 감사합니다! 나는 마지막 편지를받는 A¹¡н것을 고려하지 않았지만 «충분히 좋지 않았다 : P
Emigna


2

Q 기본, 79 74 72 바이트

바이트 절약을 위한 Taylor Scott에게 감사합니다 (2 회!)

FOR i=1TO ASC(INPUT$(1))-64
?TAB(i)
FOR j=1TO i
?CHR$(64+i)" ";
NEXT j,i

대문자를 사용합니다. 입력은 키를 누르는 것으로 화면에 표시되지 않습니다.

설명

우리는 루프 i에서 1알파벳에서 제한 편지의 위치까지 (1 기). 각각에 대해 ;를 사용하여 화면의 i열로 이동합니다 . 그런 다음, 우리 는 알파벳 의 th 문자 뒤에 공백 을 인쇄합니다 .iTABii


결과적으로이 INPUT$(1)명령 z$을 -2 바이트의 델타 변수에 대한 직접 대체로 사용할 수 있습니다
Taylor Scott

@TaylorScott 감사합니다!
DLosc 2016 년

2

Japt -R , 24 23 17 15 바이트

선행 줄 바꿈과 각 줄의 선행 및 후행 공백을 포함하여 배열을 출력합니다.

IòUc ÏçSiXd¹iYç

그것을 테스트

  • 초기 배열을 생성하는 더 좋은 방법을 지적하여 Oliver의 도움으로 1 바이트를 절약하고 6을 더 절약했습니다 .

1

, 18 바이트

F⁺⌕αθ¹«P×⁺§αι ⁺ι¹↘

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


아니, 당신은 05AB1E가 숯을 이길 수 없습니다 ... : P
완전히 인간적인

@totallyhuman 복수 : p
Outgolfer Erik

슬프게도 임의의 선행 공백은 허용되지 않으며 E…·?θ⁺× κ⪫× κι14 바이트로 작업을 수행합니다.
Neil

@Neil 하나의 선행 공백이 허용되지만 어떻게 ?거기에 들어 갔는지 잘 모르겠습니다 . A대신 내가 생각 해야합니다 . 아 잠깐만, 무슨 말인지 알 겠어.
Outgolfer Erik



1

자바 스크립트, 102 94 바이트

Neil 덕분에 2 바이트 절약

f=
a=>[...Array(parseInt(a,36)-9)].map((a,b)=>''.padEnd(b).padEnd(b*3+1,(b+10).toString(36)+' '))

console.log(f('k').join`\n`)


1

레티 나 , 51 바이트

^.
$&$&
}T`L`_L`^.
.
$.`$* $&$.`$* ¶
+`(\w) \B
$&$1

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

^.
$&$&

(첫 번째) 글자를 복제하십시오.

}T`L`_L`^.

알파벳에서 1을 다시 회전 시키거나 중복 된 경우 삭제하십시오 A. 복제 할 때까지 복제 및 회전을 유지합니다 A.이 시점에서 삭제가 복제를 취소하고 루프가 완료됩니다.

.
$.`$* $&$.`$* ¶

각 글자를 한 줄로 바꾸고 양면에 글자가 채워져 있습니다.

+`(\w) \B
$&$1

기존 문자 오른쪽의 모든 패딩 공간 쌍 사이에 중복 문자를 삽입하십시오.



1

, 15 바이트

F…·AS«P⪫E…@ιι ↘

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

 …·AS           Inclusive character range from A to the input
F    «          Loop over each character
         …@ι    Exclusive range from @ to the current character
        E   ι   Replace each element with the current character
       ⪫        Join with spaces
      P         Print without moving the cursor.
              ↘ Move the cursor down and right.

추가 패딩이 합법적이라면 14 바이트에서 작동합니다.

E…·?θ⁺× κ⪫× κι

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


1

Mathematica, 70 바이트

(T=Table)[""<>{" "~T~i,T[Alphabet[][[i]]<>" ",i]},{i,LetterNumber@#}]&

소문자

리스트를 출력

수정을위한 감사 @ngenisis

의 경우 버전 장소 Column@처음에


1

Excel VBA, 72 바이트

셀에서 입력 A1을 받고 VBE 즉시 창으로 출력하는 익명 VBE 즉시 창 기능

For i=1To Asc([A1])-64:[B1]=i:?Space(i-1)[REPT(CHAR(B1+64)&" ",B1)]:Next

1

Pyth , 17 바이트

.e+*kd*+bdhk<GhxG

여기서 시도하십시오 (예쁜 인쇄 버전).


어떻게 작동합니까?

  • hxG -소문자 알파벳으로 된 입력 색인을받습니다.

  • <G -알파벳 입력 후 모든 문자를 다듬습니다.

  • .e열거 형 맵. 색인이 as k이고 문자가 as 인 트림 된 알파벳을 매핑합니다 b.

  • *kd- k공백을 추가 하십시오.

  • +bd- b+ 공백 (현재 문자 + 공백)

  • *...hk-반복 k+1하세요.

  • +(...)(...) -연결


1
Pyth에 대해 내가 가장 좋아하는 것 중 하나는 답변을 작성하고 누군가가 성격에 대한 동일한 답변, 성격을 쓴 것을 찾는 것입니다. 파이썬에는 "최고의 답변이있다"는 말이 완벽합니다!
Dave

내가 더 잘 할 수 있다면 그래 @pizzakingme, 궁금
씨 Xcoder

공간 추가가 잘못되었다고 생각합니다. 더 낫습니다.
Dave

@pizzakingme .e+*kdjd*bhk<GhxG17 바이트도 얻을 수 있습니다
Mr. Xcoder

16 바이트 :.e+*kd*+bdhkhcGQ
Dave

1

C ++ (gcc) , 164 바이트

#include<iostream>
#define f for(int i=0;i<o-'`';i++)
using namespace std;int main(){char c;cin>>c;for(char o='a';o<=c;o++){f cout<<' ';f cout<<o<<' ';cout<<'\n';}}

오랜만에 숨어있는 나의 첫 시도!

아래의 ungolfed 코드 :

#include <iostream>

using namespace std;
#define f for (auto i = 0; i < output - '`'; i++)

int main()
{
  char input;

  cin >> input;

  for (char output = 'a'; output <= input; output++)
  {
    f cout << ' ';

    f cout << output << ' ';

    cout << endl;
  }
}

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


골프를해야 할 일이 많다는 것을 알고 있지만, 지금까지 내가 얻은 것 중 가장 작은 것입니다.
드라이 즈
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.