Сто квадратів!


10

Повернутися до основ ...

Як вчитель місцевої початкової (початкової) школи, вам потрібен спосіб викладати клас їх таблицям часу. У вашому розпорядженні у вас сто квадратів і багато червоних ручок. Вам також потрібно мати можливість швидко показати своєму класі правильні відповіді.

Тепер ти досить розумний, щоб написати програму, яка може робити таблиці разів, але чи зможеш ти їх намалювати на сто квадратних?

Змагання

Виведіть сто квадратних у stdout або еквівалент, використовуючи коди ansi-escape, щоб відтіняти числа, кратні вводу.

  • Виведіть сітку 10х10, що містить числа 1-100.
    • Не має значення вирівнювання двоцифрових чисел у кожному полі, доки воно не відповідає
    • Для одноцифрових чисел ви можете вписати дві цифри і використовувати те саме форматування, що і двозначні цифри, або по центру посередині поля.
  • Якщо число у вікні кратне вводу, пофарбуйте всю коробку в червоний колір.
    • Це означає всю скриньку, а не лише числову частину

Наприклад, давши вхід 3, надрукуйте задану сотню квадратів

сотня квадратних 3

Це кодовий гольф, тому найкоротша відповідь у байтах виграє!


2
Чи можемо ми надрукувати 01 замість 1. 02 за 2 і т.
Д.

1
Так що я не можу використовувати <table>, наприклад?
nicael

1
Чи має значення колір цифр? Це може бути whiteчи grey?
Bassdrop Cumberwubwubwub

1
@Keatinge Я ще не вирішив - я налаштований на так @nicael ні, він повинен використовувати ansi-escape або відповіді не будуть на одному і тому ж ігровому полі, @BassdropCumberwubwwwubub ви можете використовувати різні кольори, але якщо ви не ' повторне cursesйого використання не має значення - червоний все одно короткий.
Блакитний

@Keatinge так, ви можете використовувати прокладки - але тільки з нулями та одноцифровими числами
Синій

Відповіді:


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, а %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
Одного дня буде виклик, коли вам потрібно використовувати код буквально use у коді, і всі будуть плутатись;)
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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.