톱니 알파벳 그리기 C E G I K M

오늘은 간단한 것입니다. 높이에 양의 정수가 주어지면 “톱니 알파벳”을 그리는 가장 짧은 프로그램을 작성하십시오. 프로그래밍 언어로 시작할 때 프로그래밍 언어의 이름을 작성해야합니다.

예를 들어, 언어가 Python이고 입력이 1출력 인 경우 다음과 같아야합니다.

ABCDEFGHIJKLMNOPythonQRSTUVWXYZ

입력이 2출력 이면 다음과 같아야합니다.

 B D F H J L N Python R T V X Z
A C E G I K M O      Q S U W Y

입력이 4출력 이면 다음과 같아야합니다.

   D     J     Python     V
  C E   I K   O      Q   U W
 B   F H   L N        R T   X Z
A     G     M          S     Y

노트

  • A 항상 왼쪽 하단에서 시작합니다.
  • 입력은 stdin 또는 function call 또는 이와 유사한 것을 통해 이루어질 수 있습니다. 표준 출력으로 출력합니다.
  • 위의 입력 26은 작동하지 않아도됩니다.
  • 후행 공백이 없습니다.


답변

n 이 높이를 보유하는 경우 :

C + 이스케이프 코드 : 81

x;main(y){for(y=n--;x<26;x++)printf("\033[%d;%dH%c",n?x/n&1?y++:y--:y,x+1,x+65);}

C : 110

x;char a[702]={[0 ...701]=32};main(y){for(y=--n;x<26;a[x*27-1]=10)a[27*(n?x/n&1?y++:y--:y)+x]=x+++65;puts(a);}

답변

C, 134

n,m,c,p;
main(r){
for(scanf("%d",&n),m=--n?n*2:1;n+r--;puts(""))
for(c=-1,p=1;c++<25;)
p+=(c-n-r)%m*((c-n+r)%m)?1:1-printf("%*c",p,c+65);
}

몇 가지 경고와 함께 gcc에서 컴파일합니다. 줄 바꿈은 문자 수에 포함되지 않습니다.

122 개 문자 입력이 이미 저장되어있는 경우 n.

개선을위한 user2992539 , tolosedc65 덕분에 .


답변

TI-BASIC-148 바이트 (원시 텍스트), 186 바이트 (그래픽)

OP에 응답하여 멋진 TI-83 (및 최신)은 16 x 8 크기 (표준 큰 텍스트 만 사용) 또는 94 x 62 픽셀 (작은 텍스트의 경우 약 10 줄) ).

이제 이것은 약간의 문제가 있습니다 (명백하고 싶습니다). 인터프리터는 크기 부과를 “무시”할 수 없습니다. 즉, 톱니 높이를 20으로 설정하려고하면 코드가 완전히 실행되지 못하게하는 오류가 발생합니다. 나는 는 시스템에서 실행하지 않을 제외하고, 무한 환경에서 올바른 출력을 생성 할 코드를 작성합니다.

이것을 말하면서, 프로그램의 (실행중인) 버전을 제시합니다. 그것들은 모두 N실행하기 전에 원하는 높이로 설정된 변수 에 따라 다릅니다 .

  • 원시 텍스트 접근

    :ClrHome
    :"ABCDEFGHIJKLMNOPQRSTI-BASICUVWXYZ"→Str1
    :8→R
    :For(C,1,16
    :If N=1
    :Then
    :0→F
    :Else
    :If R<2 or 10-R>N
    :1→F
    :If R>7
    :-1→F
    :End
    :If C≠20
    :Then
    :Output(R,C,sub(Str1,C,1
    :Else
    :Output(R,C,sub(Str1,C,8
    :C+7→C
    :End
    :R+F→R
    :End
    

    관계없이 단말기의 변경이 작업을하기 위해 For(C,1,16For(C,1,33과 상한 검사를 제거 ( R<2 or). 출력은 다음과 5→N같습니다.

  • 그래픽 접근 방식 ( AxisOff명확성 이 필요할 수도 있음 )

    :ClrDraw
    :N*6→N
    :"ABCDEFGHIJKLMNOPQRSTI-BASICUVWXYZ"→Str1
    :57→R
    :For(C,1,56
    :If N=6
    :Then
    :0→F
    :Else
    :If R<7 or 64-R>N
    :6→F
    :If R>51
    :-6→F
    :End
    :If C≠20
    :Then
    :If C>50
    :Then
    :Text(R,C,sub(Str1,C-23,1
    :Else
    :Text(R,C,sub(Str1,C,1
    :End
    :Else
    :Text(R,C,sub(Str1,C,8
    :C+30→C
    :End
    :R+F→R
    :End
    

    이것은 두 가지 사소한 문제로 정상적으로 작동합니다. 너비는 문제가 없지만 높이는 여전히 문제가됩니다. 그러나 나는 글자의 간격을 두지 않았으므로 어떤 경우에는 (문자가 톱니에서 오르거나 떨어지기 시작할 때) 글자가 후계자에 의해 잘릴 수 있습니다. 터미널에 관계없이 작동하게하려면 상한 검사 ( R<7 or)를 제거하십시오 . 그런 다음 그래프를 따릅니다.


답변

Pure Bash (coreutils 없음), 181 바이트

m=$1
for l in A Bash {C..Z};{
((m))||s=++
((m>$1-2))&&s=--
for((m=$1==1?1:m,m$s,i=0;i<$1;i++));{
((i-m))&&a[i]+=${l//?/ }||a[i]+=$l
}
}
shopt -s extglob
printf %s\\n "${a[@]%%+( )}"

산출:

cat -E후행 줄 바꿈이 없음을 증명하기 위해 파이프되었습니다 .

$ ./sawtooth.sh 1 | cat -E
ABashCDEFGHIJKLMNOPQRSTUVWXYZ$
$ ./sawtooth.sh 5 | cat -E
       E       M       U$
      D F     L N     T V$
     C   G   K   O   S   W$
 Bash     H J     P R     X Z$
A          I       Q       Y$
$

답변

자바 스크립트 (ES6) 231 244

버그 수정, 일부 재정렬 및 ​​높이 = 1을 관리하는 다른 방법 편집
또한 OP에서 허용하는 함수로 변경되었으므로 입력에 대한 prompt ()가 없습니다.

이 과제에 가장 적합하지 않은 일반 알고리즘에는 변경 사항이 없습니다.

F=h=>{for(p=s=[i=z=b=t=''];++p<h;)i=1,z=b=' ',s[p]=t;for(p=--h,k=64;++k<91;)s[p]+=t+String.fromCharCode(k),k-74||(s=s.map((x,q)=>x+(p-q?'         ':'avascript'))),p-=i,p<0|p>h?(i=-i,p-=i+i,t=z,b=t+t):t+=b;console.log(s.join('\n'))}

설명

F=h=>{
  // row in s for output must be initialized to ''. In the same step I make other initializations
  for(p=s=[i=z=b=t='']; ++p < h;) // initialize for height 1, all increment and spacing can be null
    i=1,z=b=' ',s[p]=t; // the for body is entered only if height > 1, initializing spacing and increment to the right values
  for(p=--h,k=64;++k<91;)
    s[p]+=t+String.fromCharCode(k),
    k-74||(s=s.map((x,q)=>x+(p-q?'         ':'avascript'))), // if 'J' modify each line of output adding the name or spacing
    p-=i,p<0|p>h?(i=-i,p-=i+i,t=z,b=t+t):t+=b; // index bouncing
  console.log(s.join('\n'))
}

1

ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ

3가

  C   G            K   O   S   W
 B D F H Javascript L N P R T V X Z
A   E   I            M   Q   U   Y

상단에 4

   D     Javascript     P     V
  C E   I          K   O Q   U W
 B   F H            L N   R T   X Z
A     G              M     S     Y

7 추락

      G                    S
     F H                  R T
    E   I                Q   U
   D     Javascript     P     V
  C                K   O       W
 B                  L N         X Z
A                    M           Y

답변

자바 (393)

항상 골프를위한 훌륭한 언어 :

public class P{public static void main(String[]a){int h=Integer.valueOf(a[0]);String x="ABCDEFGHIJKLMNOPQRSTUVWXYZ";String[]l=new String[h];Arrays.fill(l,"");int i=h-1;int d=-1;for(char c:x.toCharArray()){for(int n=0;n<l.length;n++){String k=(n==i)?(c=='J')?"Java":c+"":(c=='J')?"    ":" ";l[n]+=k;}if(i==0&&d==-1)d=1;if(i==h-1&&d==1)d=-1;if(h>1)i+=d;}for(String s:l){System.out.println(s);}}}

답변

루비, 112 바이트

o="#{' '*29}
"*h
26.times{|i|o[(h-i%(h<2?1:2*h-2)-1).abs*30+i+(i>17?3:0)]=(i+65).chr}
puts o.gsub('R   ','Ruby')

에 입력이 저장 될 것으로 예상합니다 h.

설명이 필요한지 알려주세요.