입력에 대각선 알파벳


26

이 게시물에서 영감을 얻었 습니다 . 이 질문을 중복으로 표시하는 사람들은 실제로 내 질문이 링크 된 질문의 수정 사항인지 확인하기 위해 질문을 읽어보십시오. 링크 된 것은 입력을 요구하지 않고 알파벳을 대각선으로 만 인쇄하는 것입니다.

도전

1-26 사이의 입력이 있으면 알파벳을 대각선으로 인쇄하지만 주어진 입력의 색인에서 세로로 인쇄를 시작하십시오.

주어진 입력 :

16

프로그램은 다음을 출력해야합니다 :

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

입력:

4

산출:

a
 b
  c
   d
   e
   f
   g
   h
   i
   j
   k
   l
   m
   n
   o
   p
   q
   r
   s
   t
   v
   w
   x
   y
   z

입력:

1

산출:

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z

입력:

26

산출:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
                q
                 r
                  s
                   t
                    u
                     v
                      w
                       x
                        y
                         z

채점

이것은 이므로 각 언어에서 가장 짧은 답변이 이깁니다.

행운을 빕니다!


6
0 또는 1 인덱싱을 사용하도록 선택할 수 있습니까?
notjagan

일관된 선행 공간이 허용됩니까?
주세페

후행 공백이 허용됩니까?
Dom Hastings

대문자를 사용해도됩니까?
Adám

문자열 목록을 반환해도됩니까?
Adám

답변:


13

, 9 바이트

↘✂β⁰N↓✂βη

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

작동 원리

↘✂β⁰N↓✂βη
 ✂β⁰N         the alphabet from position 0 to the input
↘               print diagonally, down and to the right
        ✂βη    the alphabet starting from the position of the input
       ↓        print downwards

이 솔루션은 더 이상 현재 버전의 Charcoal (버그 수정으로 인해)에서 작동하지 않지만이 문제는로 10 바이트 동안 해결되었습니다 ↘✂β⁰N↓✂βIθ.


2
왜 그런지 잘 모르겠습니다. 몇 주 전에 소개 된 버그 일 수 있습니다. (보통을 Iθ대신 사용해야 합니다 η.)
Neil

@Neil 오늘 고장난 것 같습니다. Iθ를 사용하면 문제가 해결됩니다.
JP de la Torre

…βN대신 1 바이트를 사용하여 저장하십시오 ✂β⁰N.
Neil

7

05AB1E , 11 바이트

AvNI<‚Wysú,

05AB1E를 처음 사용하므로 팁을 얻을 수 있습니다.

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

로부터 인덱스 제로를 입력하는 경우 0에이 25허용되며, 이는 생략 10 바이트 일 수있다 <.


니 이스! 정확히 내가 가진 것. "리프트"를 시도했지만 계획대로 작동하지 않습니다. 나는 그것이 매우 최적이라고 생각합니다 :).
매직 문어 Urn

4

자바 스크립트 (ES2017), 73 72 71 66 바이트

@JustinMariner 덕분에 바이트를 절약했습니다.

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+`
`:''

1
이것은 before가 있기 때문에 끝에 10after z를 추가합니다 . 버그가 잡힌 및 사용하여 68 바이트 golfed : TIO를++xx.toString()padStart
저스틴 마리너

@JustinMariner 덕분에, 나는 ... 나는 그것에 대해 ES8로 전환 할 수도 있습니다 생각
ETHproductions

카레로 무엇이든 구할 수 있습니까? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
Shaggy

@Shaggy 어쩌면 그 유형의 카레가 허용되는지 모르겠습니다.
ETHproductions

아, 같은 견과류, 외모 제안 이 가능하기는 합의 :( 더 이상 없다
얽히고 설킨

4

파이썬 2, 61 58 57 바이트

n=input()-1
for i in range(26):print(' '*i)[:n]+chr(i+97)

Rod 덕분에 -3 바이트

Mr. Xcoder 덕분에 -1 바이트 더



@Pavel 입력 줄이 하나 뿐이지 만 루프가 반복 input될 때마다 호출 되지 않습니다 for.
notjagan


첨자를 사용하여 57 바이트 .
Mr. Xcoder


4

루비, 51 46 43 바이트

->n{(0..25).map{|x|(' '*x)[0,n-1]<<(x+97)}}

문자열 목록을 반환합니다.

파이썬 사람들이 아래 첨자로 무언가를하고있는 것처럼 보입니다. Xcoder의 ppperry 솔루션 개선에서 영감을 얻어 -5 바이트.

rjust(51 바이트)의 이전 솔루션 :

->n{i=0;(?a..?z).map{|c|c.rjust i+=n>c.ord-97?1:0}}


3

R, 99 89 바이트

@MickeyT는 10 바이트를 저장했습니다

기능

function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")

데모

f <- function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")
f(1)
f(10)
f(15)
f(26)

1
약간의 비용 절감. 오히려 ifelse시도하십시오 min. print.noquote로 대체 할 수 catA를 '\n'붙여 넣기한다. 는 \n직선 캐리지 리턴 될 수 있습니다. 기능 몸체의 중괄호를 떨어 뜨릴 수 있습니다.
MickyT

write대신 에 다음을 사용하여 더 많은 비용을 절약 할 수 있습니다 .catpastewrite(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
user2390246

3

레티 나 , 72 68 바이트

^
z
{2=`
$`
}T`l`_l`^.
\D
$.`$* $&¶
\d+
$* 
s`( *)( +)(?=.*¶\1 $)
$1

온라인으로 사용해보십시오! 출력에는 후행 공백이 포함됩니다. $if 0 인덱싱이 허용 되기 전에 공백을 삭제하여 1 바이트를 저장하십시오 . 편집 : @MartinEnder의 알파벳 생성기를 사용하여 4 바이트를 저장했습니다. 설명:

^
z
{2=`
$`
}T`l`_l`^.

알파벳을 삽입하십시오.

\D
$.`$* $&¶

그것을 대각선으로 돌리십시오.

\d+
$* 

입력을 공백으로 단항으로 변환하십시오.

s`( *)( +)(?=.*¶\1 $)
$1

끝이 빈 줄보다 길지 않도록 긴 줄을 자릅니다.


2

수학, 103 바이트

(T=Table;a=Alphabet[];c=Column)[c/@{T[""<>{T[" ",i],a[[i]]},{i,#}],T[""<>{T[" ",#],a[[i]]},{i,#,26}]}]&

2

피스 , 21 17 15 바이트

배터리가 3 % 인 휴대 전화에서 완료했습니다.

VlG+*d?>QNNQ@GN

설명:

VlG        For each character in the alphabet (G)
+          Concatenate...
 *d        Space (d) times...
   ?>QNNQ  Ternary; if Q (input) is less than N, return N, else Q
 @GN       The Nth character of the alphabet (G)

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


1
@totallyhuman 방금 뉴 멕시코 라스 베이거스에서 놀라운 피자를 먹었습니다
Stan Strum

상당히 짧은 접근 방식을 찾았으며 본인의 답변 을 게시하기로 결정했습니다 .
Mr. Xcoder

@ Mr.Xcoder 그래, 잘 했어.
Stan Strum




2

하스켈, 58 54 바이트

f n=do m<-[1..26];([2..min n m]>>" ")++['`'..]!!m:"\n"

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

작동 원리

f n=                  -- input number is n
  do m<-[1..26]       -- for each m from [1..26], construct a string and concatenate
                      -- them into a single string. The string is:
   [2..min n m]>>" "  -- min(n,m)-1 spaces,
      ++              -- followed by
   ['`'..]!!m         -- the m-th char after `
      :               -- followed by
   "\n"               -- a newline 

편집 : @Lynn은 4 바이트를 저장했습니다. 감사!



@ 린; 감사! 나는 항상 목록에 대한 표기법을 잊어 버립니다.
nimi



1

자바 스크립트 (Node.js) , 72 바이트

n=>[..."abcdefghijklmnopqrstuvwxyz"].map((e,i)=>" ".repeat(i<n?i:n-1)+e)

문자열 목록을 반환합니다.

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


왜 node.js를 물어봐도 될까요? 유효한 일반 JS처럼 보인다
Downgoat

@Downgoat 그것은 TIO 자동 서식입니다
코너 오브라이언

btw.padStart
다음을

내가 ETH의 대답으로 그것을 기본적으로 생각하게 된 방법 NVM 대기
Downgoat

ES8로 전환하고 padEnd대신에 바이트를 저장하십시오 repeat.
Shaggy

1

수학, 67 바이트

SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&

SparseArray문자열을 반환합니다 . 시각화하려면 Grid@앞에 추가하십시오 .

Wolfram Sandbox에서 사용해보십시오

용법

Grid@SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&[5]
a
 b
  c
   d
    e
    f
    g

    ⋮

    z 






1

C # (. NET 코어) , 66 + 18 바이트

n=>new int[26].Select((x,i)=>$"{(char)(i+97)}".PadLeft(i<n?i+1:n))

바이트 수는 또한 포함합니다

using System.Linq;

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

각 줄마다 하나씩 문자열 모음을 반환합니다. 허용되지 않으면 대답은 문자열 내부 string.Concat()\n내부에서 17 바이트만큼 팽창 합니다.

설명:

n =>
    new int[26]                      // Create a new collection of size 26
    .Select((x, i) =>                // Replace its members with:
        $"{(char)(i + 97)}"          // String of an alphabet character corresponding to the index
        .PadLeft(i < n ? i + 1 : n)  // Add spaces to the left
    )

1

MATL, 14 바이트

26:tiXl2Y2oZ?c

MATL Online 에서 사용해보십시오

설명

26      % number literal
:       % range; vector of equally spaced values [1...26]
t       % duplicate
i       % explicitly grab the input
Xl      % clamp the array to have a maximum value of the input
2Y2     % predefined literal: ['a'...'z']
o       % convert to a numeric array
Z?      % create sparse matrix using the first two inputs as the rows/columns 
        % and the letters 'a'...'z' as the values
c       % convert back to character and implicitly display

1

Pyth , 12 바이트

j.e+<*kdtQbG

여기 사용해보십시오!

문자열 목록이 허용되면 11 바이트 로 단축 할 수 있습니다 .

.e+<*kdtQbG

Pyth , 12 바이트

VG+<*dxGNtQN

여기 사용해보십시오!

Pyth , 14 바이트

jm+<*d;tQ@Gd26

여기에서 시도하십시오.

문자열 목록이 허용되면이를 13 바이트 로 단축 할 수 있습니다 .

m+<*d;tQ@Gd26

이것들은 어떻게 작동합니까?

대부분의 다른 답변과 달리이 방법은 세 가지 솔루션 모두에서 소문자 알파벳을 매핑 / 반복합니다.

설명 # 1

j.e+<*kdtQbG - Full program.

 .e        G - Enumerated map over "abcdefghijklmnopqrstuvwxyz", with indexes k and values b.
     *kd     - Repeat a space a number of times equal to the letter's index.
    <   tQ   - Crop the spaces after the input.
   +      b  - Concatenate with the letter.
j            - (Optional): Join by newlines.

설명 # 2

VG+<*dxGNtQN  - Full program.

VG            - For N in "abcdefghijklmnopqrstuvwxyz".
      xGN     - Index of the letter in the alphabet.
    *d        - Repeat the space a number of times equal to the index above.
   <     tQ   - But crop anything higher than the input.
  +        N  - Append the letter (at the end)

설명 # 3

jm+<*d;tQ@Gd26 - Full program.

 m          26 - Map over [0...26) with a variable d.
    *d;        - Space repeated d times.
   <   tQ      - Crop anything whose length is higher than the input.
  +      @Gd   - Concatenate with the letter at that index in the alphabet.
j              - (Optional): Join by newlines.



1

q / kdb +, 33 31 바이트

해결책:

-1{(&[x-1;til 26]#'" "),'.Q.a};

예:

q)-1{(&[x-1;til 26]#'" "),'.Q.a}16;
a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

설명:

최소 입력 길이와) 범위까지의 공백 목록 (26) 0..25을 작성하고 알파벳의 각 문자와 결합하여 표준 출력으로 인쇄하십시오.

-1{(&[x-1;til 26]#'" "),'.Q.a}; / solution
-1                            ; / print result to stdout and swallow return
  {                          }  / lambda function
                         .Q.a   / "abcd..xyz"
                       ,'       / concatenate (,) each
   (                  )         / do all this together
    &[   ;      ]               / minimum of each 
      x-1                       / implicit input (e.g. 10) minus 1 (e.g. 9)
          til 26                / 0 1 2 ... 23 24 25
                   '#" "        / take " " each number of times (0 1 2 )

노트:

  • 대괄호를 다시 조정하여 -2 바이트

1

Java 1.8 (람다 제외), 98 바이트

void m(int i){int c=0,o=97;String s="";for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);}

논리는 간단합니다. 입력 데이터 유효성 검사를 제공하지 않으며 매우 나쁩니다!

  • 업데이트 : 기능 만! @Olivier Grégoire에게 감사합니다

1
일부 바이트를 절약하려면 다음을 사용하십시오. for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);또한 전체 프로그램 대신 함수 또는 람다 만 작성할 수 있습니다.
Olivier Grégoire

함수 본문 만 포함하면 독자는 무엇을 a[0]의미 하는지 어떻게 알 수 있습니까? 나는 스 니펫이 컴파일되지 않으면 불공평하다고 생각합니다. 도전은 구성이 풍부한 언어와 마찬가지로 흥미 롭습니다.
더글러스 개최

1
안녕하세요! 나는 스 니펫이 아니라 함수 또는 람다라고 말했습니다. ;-) 따라서 void f(int i){...}(정적 필요 없음) 또는 i->{...}전체 프로그램 대신 쓸 수 있습니다 . 모든 Java 팁을 참조하십시오 . 참조 이 같은 문제에 대한 내 대답을 예로서,. 사이트에서 재미있게 보내십시오! :-)
Olivier Grégoire
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.