一百个方块!


10

回归本源...

作为当地小学(年级?)的老师,您需要一种方法来教您班级的时间表。您可以随意使用数百个正方形和大量的红笔。您还需要能够快速向班级显示正确答案。

现在,您足够聪明,可以编写一个可以执行时间表的程序,但是可以在100平方尺上绘制它们吗?

挑战

使用ansi-escape码将100平方输出到stdout或等价的数字,以数字的阴影表示,该数字是输入的倍数。

  • 输出包含数字1-100的10x10网格。
    • 只要保持一致,每个框中2位数字的对齐方式都没有关系
    • 对于1位数字,您可以填充至2位数字,并使用与2位数字相同的格式,或者在框中间居中。
  • 如果框中的数字是输入的倍数,请将整个框涂成红色。
    • 这意味着整个盒子,而不仅仅是数字部分

例如,给定输入3,打印给定的百平方

百平方3

这是代码高尔夫球,所以最短的答案以字节为单位!


2
我们可以打印01而不是
1。02

1
因此<table>,例如,我不能使用?
nicael

1
数字的颜色重要吗?它可以是whitegrey
Bassdrop Cumberwubwubwub

1
@Keatinge我还没有决定-我正在转向是@nicael否,它必须使用ansi-escapes或答案将不在同一游戏环境中,@ BassdropCumberwubwubwub您可以使用不同的颜色,但是除非您重新使用curses它没关系-红色反正很短。
蓝色

@Keatinge是的,你可以使用填充-但仅仅只有零和一个一个数字号码

Answers:


8

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

替换为八进制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)。

我们使用格式字符串'\33[%dm%s\33[m',其中第一个%d是0或41,而the %s是我们要打印的字符。


对于颜色,我们有以下公式:

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

我不会完全解释这一点,但是基本上它会遍历所有应显示为红色的矩形,并检查其中是否包含矩形(x, y)

注意使用运算符链接:我将其重写-1<A<5 and -1<B<35>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我写了一些东西(但是在过程中保存了一些字节,所以也许它也变得有点难听了……^^)
Lynn

1
@Lynn非常感谢您花费时间和精力来解释此代码。我非常感谢您的解释。它帮助我学到了很多东西!
shaunakde

1
不客气!:)
林恩

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 + 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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.