백 사각형!


10

기본으로 돌아 가기 ...

지역 초등학교 (학년?) 학교 교사는 수업 시간표를 가르 칠 수있는 방법이 필요합니다. 당신의 처분에, 당신은 백 정사각형과 많은 빨간 펜이 있습니다. 또한 수업에 정답을 신속하게 보여줄 수 있어야합니다.

이제, 당신은 시간 테이블을 할 수있는 프로그램을 작성하기에 충분히 영리하지만, 그것들을 백 제곱에 그릴 수 있습니까?

도전

입력-배수 인 숫자로 음영 처리하기 위해 an-escape 코드 를 사용하여 stdout 또는 그에 상응하는 백 제곱을 출력합니다 .

  • 1 ~ 100의 숫자가 포함 된 10x10 격자를 출력합니다.
    • 구성되는 한 각 상자에서 2 자리 숫자를 정렬하는 것은 중요하지 않습니다.
    • 1 자리 숫자의 경우 2 자리 숫자로 채울 수 있으며 2 자리 숫자와 동일한 형식을 사용하거나 상자 가운데 가운데에있을 수 있습니다.
  • 상자의 숫자가 입력의 배수 인 경우 전체 상자의 색을 빨간색으로 지정하십시오.
    • 이것은 숫자 부분뿐만 아니라 전체 상자를 의미합니다.

예를 들어, 입력 3이 주어지면 주어진 백 제곱을 인쇄하십시오.

백 평방 3

이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다!


2
1 등 대신 01을 2 등으로 인쇄 할 수 있습니까?
Keatinge

1
예를 들어을 사용할 수 <table>없습니까?
nicael

1
숫자의 색상이 중요합니까? 그것은 할 수 white또는 grey?
Bassdrop Cumberwubwubwub 2016 년

1
@Keatinge 아직 결정하지 않았습니다-예 @nicael을 향해 향하고 있습니다. 아니면 탈출을 사용하거나 대답이 같은 경기장에 있지 않을 것입니다. @ BassdropCumberwubwubwub 다른 색상을 사용할 수는 있지만 다시 사용 curses하는 것은 중요하지 않습니다-어쨌든 빨간색이 짧습니다.
Blue

@Keatinge 네 패딩을 사용할 수 있습니다. 그러나 0과 1 자리 숫자로만 가능합니다
Blue

답변:


8

파이썬 2, 166 바이트

R=range;n=input()
for y in R(21):print''.join('♥[%dm%s♥[m'%(any(5>x-k%10*4>-1<y-k/10*2<3for k in R(n-1,100,n))*41,('+---|%2d '%(x/4+y*5-4))[y%2*4+x%4])for x in R(41))

8 진수 033(ANSI 이스케이프 문자)로 바꿉니다 .

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

설명

출력을 41×21그리드 로 취급하고 각 지점에서 문자와 색상을 직접 계산합니다.

즉, 코드의 구조는 다음과 같습니다

n = input()
for y in range(21):
    print ''.join(F(x, y) for x in range(41))

어떤 기능을 위해 F.

결과 F는 항상 다음과 같은 형식입니다.

  • ANSI 제어 시퀀스 도입 자 ( \33[).
  • SGR 코드 : 0m재설정, 또는 41m빨간색 배경입니다.
  • 단일 문자. ( +, -, |, 공간, 또는 숫자)
  • SGR 재설정 순서 ( \33[m).

우리는 format string을 사용하는데 '\33[%dm%s\33[m', 첫 번째 %d는 0 또는 41이고, %s우리는 인쇄하고자하는 문자입니다.


를 들어 색상 , 우리는 다음과 같은 공식을 가지고 :

any(5>x-k%10*4>-1<y-k/10*2<3for k in R(n-1,100,n))*41

나는 이것을 완전히 설명하지는 않지만 기본적으로 빨간색으로 표시되어야하는 모든 사각형을 반복하고 그 (x, y)안에 있는지 확인 합니다.

운영자 체인의 사용을 참고 : I 재 작성 -1<A<5 and -1<B<3으로 5>A>-1<B<3.


를 들어 문자 , 우리는 다음과 같은 공식을 가지고 :

('+---|%2d '%(x/4+y*5-4))[y%2*4+x%4]

만약 y % 2 == 0을 위해 다음 x = 0, 1, …이 생성됩니다+---+---+---…

만약 y % 2 == 1을 위해 다음 x = 0, 1, …이 생성됩니다| p |p+1|p+2…


2
요즘 중 하나는 당신이 실제로 코드 ♥ 리터럴을 사용할 필요가 도전이있을거야, 그리고 모든 사람들이 혼동 될 것이다)
FryAmTheEggman

설명을보고 싶습니다.
shaunakde

(^^ ... 그래서 아마 그것은 또한 약간 더 열심히 수행에 도착하지만, 그 과정에서 일부 바이트를 저장) 내가 뭔가를 쓴 @shaunakde

1
@Lynn이 코드를 설명하는 데 많은 시간과 노력을 기울여 주셔서 감사합니다. 이 설명에 매우 감사합니다. 많이 배울 수있었습니다!
shaunakde 2016 년

1
당신은 매우 환영합니다! :)
Lynn

4

줄리아, 219 182 169 167 바이트

!n=(~j=j%n<1;k(v=j->"---",c=+,s="$c\e[m";l=~)=println([(l(j)?"\e[;;41m$c":s)v(j)for j=10i+(1:10)]...,s);i=0;k();for i=0:9 k(j->lpad(j,3),|);k(l=j->~j|~(j+10(i<9)))end)

이런 식으로 사용 : !7

언 골프 드 :

function !(n::Integer)
     for j=(1:10)     #This loop generates the top of the box
       if (j%n==0)
         print("\e[;;41m+---") #"\e[;;41m" is the ANSI escape code
                               #for red background colour in Julia
       else
         print("+\e[m---")     #"\e[m" resets to original colours
       end
     end
     println("+\e[m")
     for i=0:9
       for j=10i+(1:10)  #This loop generates the rows with the numbers
         if (j%n==0)
           print("\e[;;41m|",lpad(j,3))
         else
           print("|\e[m",lpad(j,3))
         end
       end
       println("|\e[m")
       for j=10i+(1:10)  #This loop generates the other rows
         if (j%n==0)||((j+10)%n==0&&i<9)
           print("\e[;;41m+---")
         else
           print("+\e[m---")
         end
       end
       println("+\e[m")
     end
   end

최대한의 가독성 을 위해이 방법은 매우 제한 이 없습니다 .


0

HTML + 자바 스크립트, 379

HTML :

<input id=a value=3><pre id=z>

자바 스크립트 :

for(i=0,s=`\n|`,o='+';i++<109;x=i<10?` ${i} `:i-100?' '+i:i,s+=x+'|',o+=x='---+',i%10||(o+=s+'\n+',s=`\n|`));z.innerHTML=[...o+x].map((x,i)=>`<span id=i${i}>${x}</span>`).join``;f=m=>window['i'+m].style.background='red';for(j=k=+a.value;j<=100;j+=k){p=(j/10|0)*84+((m=j%10)?(m-1)*4:-48);'000102030442434445468485868788'.match(/../g).map(x=>f(+x+p))}

jsfiddle.

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