Một trăm hình vuông!


10

Trở lại vấn đề cơ bản...

Là một giáo viên tại trường tiểu học địa phương (lớp?), Bạn cần một cách để dạy lớp của bạn bảng thời gian của họ. Theo ý của bạn, bạn có hàng trăm hình vuông và một đống bút màu đỏ. Bạn cũng cần có thể hiển thị cho lớp của bạn các câu trả lời chính xác một cách nhanh chóng.

Bây giờ, bạn đủ thông minh để viết một chương trình có thể thực hiện các bảng lần, nhưng bạn có thể vẽ chúng trên một trăm ô vuông không?

Các thách thức

Xuất một trăm ô vuông sang thiết bị xuất chuẩn hoặc tương đương bằng cách sử dụng mã thoát ansi để tô màu theo số là bội số của đầu vào.

  • Xuất ra một lưới 10x10 chứa các số 1-100.
    • Không liên quan đến việc căn chỉnh các số có 2 chữ số trong mỗi hộp miễn là nó phù hợp
    • Đối với các số có 1 chữ số, bạn có thể đệm thành 2 chữ số và sử dụng định dạng tương tự như số có 2 chữ số hoặc chính giữa ở giữa hộp.
  • Nếu số trong hộp là bội số của đầu vào, tô màu toàn bộ hộp màu đỏ.
    • Điều này có nghĩa là toàn bộ hộp, không chỉ là phần số

Ví dụ, cho đầu vào 3, in hàng trăm hình vuông đã cho

trăm vuông 3

Đây là mã golf nên câu trả lời ngắn nhất tính bằng byte sẽ thắng!


2
Chúng ta có thể in 01 thay vì 1. 02 cho 2, v.v.
Keatinge

1
Vì vậy, tôi không thể sử dụng <table>, ví dụ?
nicael

1
Màu của các con số có quan trọng không? Nó có thể whitehay greykhông?
Bassdrop Cumberwubwubwub

1
@Keatinge Tôi chưa quyết định - Tôi đang hướng tới có @nicael không, nó phải sử dụng ansi-escapes hoặc câu trả lời sẽ không nằm trên cùng một sân chơi, @BassdropCumberwubwubwub bạn có thể sử dụng các màu khác nhau nhưng trừ khi bạn Việc sử dụng curseslại không nên quan trọng - dù sao thì màu đỏ cũng ngắn.
Màu xanh

@Keatinge có, bạn có thể sử dụng phần đệm - nhưng chỉ với số không và một số có một chữ số
Blue

Câu trả lời:


8

Python 2, 166 byte

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))

Thay thế bằng số bát phân 033(ký tự thoát ANSI).

nhập mô tả hình ảnh ở đây

Giải trình

Chúng tôi coi đầu ra là một 41×21lưới và trực tiếp tính toán ký tự và màu sắc tại mỗi điểm.

Đó là, cấu trúc của mã là:

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

cho một số chức năng F.

Kết quả Fluôn luôn có dạng sau:

Chúng tôi sử dụng chuỗi định dạng '\33[%dm%s\33[m', trong đó đầu tiên %dlà 0 hoặc 41 và %slà ký tự chúng tôi muốn in.


Đối với màu sắc , chúng tôi có công thức sau đây:

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

Tôi sẽ không giải thích đầy đủ về điều này, nhưng về cơ bản, nó lặp lại trên tất cả các hình chữ nhật nên được tô màu đỏ và kiểm tra xem (x, y)có nằm trong bất kỳ hình nào trong số chúng không.

Lưu ý việc sử dụng chuỗi vận hành: Tôi viết lại -1<A<5 and -1<B<3vào 5>A>-1<B<3.


Đối với nhân vật , chúng tôi có công thức sau:

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

Nếu y % 2 == 0sau đó cho x = 0, 1, …điều này sẽ tạo ra+---+---+---…

Nếu y % 2 == 1sau đó cho x = 0, 1, …điều này sẽ tạo ra| p |p+1|p+2…


2
Một trong những ngày này, sẽ có một thách thức khi bạn thực sự cần sử dụng một chữ ♥ trong mã, và mọi người sẽ bối rối;)
FryAmTheEggman

Rất thích xem một lời giải thích.
shaunakde

@shaunakde Tôi đã viết một cái gì đó lên (nhưng đã lưu một số byte trong quá trình, vì vậy có lẽ nó cũng khó hơn một chút để theo dõi ^^)
Lynn

1
@Lynn Cảm ơn bạn rất nhiều vì đã dành thời gian và năng lượng để giải thích mã này. Tôi rất biết ơn về lời giải thích này. Nó giúp tôi học hỏi được nhiều điều!
shaunakde

1
Bạn được chào đón! :)
Lynn

4

Julia, 219 182 169 167 byte

!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)

Được sử dụng như thế này: !7

Ung dung:

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

Lưu ý rằng điều này là rất vô căn cứ, cho khả năng đọc tối đa.


0

HTML + Javascript, 379

HTML:

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

Javascript:

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.