百の広場!


10

基本に立ち返って...

地元の小学校(学年?)の教師として、クラスに時間割を教える方法が必要です。あなたの処分で、あなたは100個の正方形とたくさんの赤ペンを持っています。また、クラスに正解をすばやく表示できるようにする必要もあります。

さて、あなたはタイムテーブルを実行できるプログラムを書くのに十分賢いですが、100の正方形にそれらを描くことができますか?

チャレンジ

入力の倍数である数値に陰影を付けるためにANSIエスケープコードを使用して、100平方を標準出力または同等のものに出力します。

  • 1〜100の数字を含む10x10グリッドを出力します。
    • 各ボックス内の2桁の数字の配置が一貫している限り、それは問題ではありません
    • 1桁の数字の場合は、2桁にパディングして、2桁の数字と同じフォーマットを使用するか、ボックスの中央に配置することができます。
  • ボックス内の数値が入力の倍数である場合は、ボックス全体を赤で着色します。
    • これは、数字部分だけでなく、ボックス全体を意味します

たとえば、入力が与えられた場合、与え3られた100平方を印刷します

百平方3

これはコードゴルフなので、バイトでの最短の答えが勝ちます!


2
我々は、などなど、2 1. 02の代わりに01を印刷することができます
Keatinge

1
<table>たとえば、は使用できませんか?
nicael 2016年

1
数字の色は重要ですか?それはできますwhitegrey
Bassdrop Cumberwubwubwub

1
@Keatingeまだ決めていません-はい@nicaelいいえに向かっていますcursesそれを再利用することは問題ではありません-とにかく赤は短いです。
ブルー

@Keatingeはい、パディングを使用できますが、ゼロと1桁の数字のみ
Blue

回答:


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

8進数033(ANSIエスケープ文字)で置き換えます。

ここに画像の説明を入力してください

説明

出力を41×21グリッドとして扱い、各ポイントで文字と色を直接計算します。

つまり、コードの構造は次のとおりです。

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

いくつかの機能のためにF

の結果Fは常に次の形式になります。

'\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)、それらの中にあるかどうかをチェックします。

演算子チェーンの使用に注意してください:私は書き直しました -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
最近の1つ、実際にコードでリテラル♥を使用する必要があるという課題があり、誰もが混乱するでしょう;)
FryAmTheEggman

説明を見たいです。
shaunakde

@shaunakde私は何かを書きました(しかし、プロセスでいくつかのバイトを節約したので、たぶんフォローするのが少し難しくなりました…^^)
Lynn

1
@Lynnこのコードを説明するために時間と労力を割いていただき、ありがとうございます。この説明には大変感謝しています。それは私がたくさん学ぶのを助けました!
shaunakde

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.