Створіть таблицю am * n в HTML


22

Вхід:

Два десяткових цілих числа mі nвідповідно дають кількість рядків і стовпців таблиці. mі nє більшою або дорівнює 1.

Вихід:

Таблиця в HTML, яка має m рядків і n стовпців.

Таблицю має відображати сучасний браузер на ваш вибір. Більшість браузерів відображатиме все належним чином, навіть якщо теги не закриті. Належне відступ та проміжок необов’язкове.

У кожній комірці має бути принаймні один символ для друку (не пробіл).

Клітини в першому рядку повинні використовувати <th>теги, а в наступних рядках - <td>теги.

Умова виграшу:

Це тому виграє найкоротший вихідний код для кожної мови.

Приклад введення:

2 3

Приклад виводу:

<table>
 <tr>
   <th>A</th>
   <th>A</th>
   <th>A</th>
 </tr>
 <tr>
   <td>A</td>
   <td>A</td>
   <td>A</td>
 </tr>
</table>

або: <table><tr><th>A<th>A<th>A<tr><td>A<td>A<td>A


Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Мего

Відповіді:


7

APL (Dyalog Unicode) з MiServer 3.0 , 31 30 байт SBCS

Повна програма. Запрошує stdin для двоелементного списку [m,n]та друкує строгий XHTML для stdout.

(⎕NEW _.Table((⎕⍴0)⍬1)).Render

Приклад сеансу:

      )xload C:\Users\Adam.DYALOG\Documents\MiServer\miserver.dws
C:\Users\Adam.DYALOG\Documents\MiServer\miserver.dws saved Wed Mar  7 17:19:40 2018
      Load ''
Development environment loaded
MiSite "C:/Users/Adam.DYALOG/Documents/MiServer/MS3/" loaded
      (⎕NEW _.Table((⎕⍴0)⍬1)).Render
⎕:
      2 3
<table id="id691498143"><thead><tr><th>0</th><th>0</th><th>0</th></tr></thead><tbody><tr><td>0</td><td>0</td><td>0</td></tr></tbody></table>

Спробуйте в Інтернеті!

Пояснення:

().Render Надайте наступний HTML-елемент:

⎕NEW _.Table () Нова таблиця з такими параметрами:

  () ⍬ 1 Наступний вміст, без спеціальної стилізації, 1 рядок заголовка:

   ⎕⍴0 оцінено вхідні перестановки нульові (тобто m-рядок, n-стовпчикова матриця нулів)


6

JavaScript (ES6), 70 байт

Збережено 2 байти завдяки @RickHitchcock

Здійснює введення в синтаксис currying (m)(n).

m=>n=>'<table>'+(g=c=>'<tr>'+`<t${c}>A`.repeat(n))`h`+g`d`.repeat(m-1)

Спробуйте в Інтернеті!

Демо





2

05AB1E , 30 байт

’<…È>’sF"<tr>"„hdNĀè"<tÿ>A"I×J

Спробуйте в Інтернеті!

Пояснення

’<…È>’                           # push "<table>"
      sF                         # no-of-rows times do:
        "<tr>"                   # push "<tr>"
              „hd                # push "hd"
                 NĀ              # push the iteration counter truthified
                   è             # index into the 2-char string with this
                    "<tÿ>A"      # insert the result into the string "<tÿ>A" instead of ÿ
                           I×    # repeat this string no-of-columns times
                             J   # join the stack to a single string

2

Стакс , 28 байт

üÉ$♠═?S┼╪├8°‼←sí☼←T≡┴╜ô‼\↑0ⁿ

Запустіть і налагоджуйте його

Розпакований, неозорений та прокоментований, це виглядає приблизно так.

"<table>"P  print "table"
"<th>A"*    "<th>A" repeated specified number of times
,D          repeat the rest of the program specified number of times
  "<tr>"p   print "<tr>" with no newline
  Q         print top of stack without popping
  .hd|t     replace "h" with "d"

Виконати цей


2

Java 10, 139 133 102 байти

m->n->{var r="<table>";for(int j=0,i;j++<m;)for(r+="<tr>",i=n;i-->0;r+=j<2?"<th>A":"<td>B");return r;}

Спробуйте в Інтернеті.

Пояснення:

n->m->{                  // Method with two integer parameters and String return-type
  var r="<table>";       //  Result-String, starting at "<table>"
  for(int j=0,i;j++<m;)  //  Loop `j` over the rows in the range [0, `m`)
    for(r+="<tr>",       //   Append "<tr>" to the result
        i=n;i-->0;       //   Inner loop `i` over the columns in the range [`n`, 0)
      r+=j<2?            //    If `j` is 1 (first iteration):
          "<th>A"        //     Append "<th>A" to the result
         :               //    Else:
          "<td>B");      //     Append "<td>B" to the result
  return r;}             //  Return the result

Я думаю, що є невеликий помилок, ти два рази писав "го".
картопля

@potato Ах, ти маєш рацію. Сам код і TIO-посилання були правильними, але в моєму поясненні було написано помилку. Слід виправити зараз, дякую.
Кевін Круїссен

(m,n)->{var l="<tr>";for(;n-->0;)l+="<td>A";var s="<table>"+l.replace('d','h');for(;--m>0;)s+=l;return s;}(106 байт) Я вважаю це цікавим, але не варто його враховувати ваш поточний бал. Ви, ймовірно, можете пограти трохи на свою відповідь, використовуючи тут ідеї, подібні до змінних m.
Олів'є Грегоар

@ OlivierGrégoire Спочатку я змінився m, але через <th>/ <td>відмінності це не мало значення. Мені все ж потрібно перевірити, чи це перша ітерація зовнішньої петлі, і в цьому випадку мені потрібно jі те m, і мені потрібно зробити внутрішню петлю кілька разів, і в цьому випадку мені потрібно iі n. Замість того, щоб j<2піднятися вгору від 0 і перевірити, я міг би повернутися назад і перевірити i>m-2, але це буде +1 байт замість -1. Ваш підхід до використання двох відокремлених циклів із можливістю модифікування, mі nце дійсно цікаво. :)
Кевін Круїссен

2

APL (Dyalog Unicode) , 42 38 байт SBCS

-4 завдяки ngn.

Повна програма. Запрошує stdin для двоелементного списку [m, n] та друкує незакриті теги до stdout.

'<table>',∊'<tr>',⍤1{'d'}@3⍀⎕⍴⊂'<th>A'

Спробуйте в Інтернеті!

⊂'<th>A' додайте цей рядок, щоб розглянути його в цілому

⎕⍴ запит на розміри і циклічно г eshape на одну клітинку з матрицею такого розміру

…⍀ кумулятивно вставити наступну функцію між кожною вертикальною парою комірок:

{'d'}@3 ігнорувати верхню клітинку; місце dна 3-й позиції в нижній комірці

'<tr>',⍤1 додайте цей рядок кожен рядок

ϵ список (згладити)

'<table>', додати цей рядок




@ngn Все готово. Спасибі. Відповідні .
Адам

2

C (gcc) , 107 99 98 97 байт

i;f(x,y){char s[]="<th>A";for(puts("<table><tr>");x--;s[2]=96+puts("<tr>"))for(i=y;i--;)puts(s);}

Спробуйте в Інтернеті!

-8 байт завдяки картоплі

-2 байти завдяки стельовій коті

sМасив повинен бути оголошений як маса не покажчик в іншому випадку він не буде редагується (ми встановлюємо першу годину на рекламу). Більшість браузерів навіть не хвилюється, чи правильний ваш закривальний тег, тому ми просто закриваємо всі теги </t>.


Все одно добре працює, якщо ви видалите те, </t>що з’являється двічі та -8 байт.
картопля

Ви можете збрити ще 4 байти, якщо перемістите виведення нового рядка у внутрішній цикл (також, це дозволяє уникнути порожнього рядка): Спробуйте це в Інтернеті!
ЕрікФ


1

Haskell , 109 107 103 байт

n!i="<t"++n++'>':i++"</t"++n++">"
r#c="able"!("r"!([1..c]*>"h"!"H")++([2..r]*>("r"!([1..c]*>"d"!"A"))))

Стільки круглих дужок… Завдяки @nimi за два байти (і втрата загальності)!

Спробуйте в Інтернеті!

Без кінцевих тегів пряма реалізація виграє на 87 байт ( Спробуйте в Інтернеті ):

r?c="<table><tr>"++([1..c]*>"<th>H")++([2..r]*>("<tr>"++([1..c]*>"<td>A")))++"</table>"

1

APL + WIN, 68 63 56 байт

Всього збережено 12 байт завдяки Adám

Підказки щодо кількості рядків з подальшим числом стовпців та варіантів виходу із закриттям:

t←⊂'<tr>'⋄'<table>'t(n⍴⊂'<th>A'),,t,((⎕-1),n←⎕)⍴⊂'<td>A'

@ Adám Занадто тригер щасливий, я боюся. Зараз добре?
Грем

Так, але вам не потрібні або кінцеві паролі: t,,((⎕-1),n←⎕)⍴rабо перші дві коми.
Адам

@ Adám Дякую Це не мій день, повинно бути тепло (28С)!
Грем

Об’єднайтесь hі r'<table>'t(n⍴⊂'<th>A')t,,((⎕-1),n←⎕)⍴⊂'<td>A'
перейдіть

Щось неправильно. Ви вставляєте лише один <tr>для тіла. Кожен рядок потребує а <tr>.
Адам

1

Сітківка , 56 54 байти

(.+) (.+)
<table>$1*$(<tr>$2*$(<td>@
T`\d`\h`^.*?r.*?r

Спробуйте в Інтернеті! Редагувати: збережено 2 байти завдяки @CowsQuack. Пояснення: На першому етапі спочатку використовується множення рядків Retina 1 для створення відповідної кількості комірок, потім для створення відповідної кількості рядків. Потім другий етап змінює перший рядок tds на ths.


Якщо ви знаєте, що вхід буде розділений на пробіли, тоді ви повинні мати можливість використовувати .замість\d
Kritixi Lithos


1

К, 58 байт

K версія - це все, що включено KDB+ 3.5 2017.11.30.

Порт відповіді Python вище. Закінчується на 1 байт довше через необхідність зарахувати та вирівняти кілька разів.

{,/"<table><tr>",(y#,"<th>A"),(x-1)#,("<tr>",/y#,"<td>A")}



1

PowerShell Core , 72 68 байт

Function F($m,$n){'<table><tr>'+'<th>A'*$n+('<tr>'+'<td>A'*$n)*--$m}

Спробуйте в Інтернеті!

Ось мої тестові випадки та очікувані результати (Cf, TIO)

  • m = 2; n = 3 <table><tr><th>A<th>A<th>A<tr><td>A<td>A<td>A
  • m = 1; n = 3 <table><tr><th>A<th>A<th>A
  • m = 4; n = 2 <table><tr><th>A<th>A<tr><td>A<td>A<tr><td>A<td>A<tr><td>A<td>A
  • m = 2; n = 8 <table><tr><th>A<th>A<th>A<th>A<th>A<th>A<th>A<th>A<tr><td>A<td>A<td>A<td>A<td>A<td>A<td>A<td>A

Дякую, @ mazzy , за -4 байти!


1
Дужки необов’язкові. Спробуйте Function F($m,$n){'<table><tr>'+'<th>A'*$n+('<tr>'+'<td>A'*$n)*--$m}.
маззи


0

Дартс , 45 63 байти

Робоче рішення:

(m,n){print('<table><tr>'+'<th>A'*n+('<tr>'+'<td>A'*n)*(m-1));}

Спробуйте його онлайн тут!

Лямбда / анонімне функціонування mтаn як параметри, відображає вихід до STDOUT.

Так як таблиці з незакритих <table>, <tr>,<th> , і <td>теги по- , як і раніше роблять в сучасних браузерах (напр., Chrome), вихід дійсний.

Старе (зламане) рішення:

Моя перша спроба забула перейти на <td>перший рядок:

(m,n){print('<table><tr>'+'<th>A'*n+('<tr>'+'<th>A'*n)*(m-1));}

Дякуємо @Lynn за те, що вказав на це.


0

Google Таблиці, 66 байт

="<table><tr>"&Rept("<th>A",B1)&Rept("<tr>"&Rept("<td>A",B1),A1-1)

Введення знаходиться в комірці A1та B1.
Насправді немає нічого фантазійного; це просто вкладені Reptфункції.
Це робить припустити , m > n > 0і що вони обидва цілі числа.



0

J, 64 байти

Ще один порт відповіді Python:

4 :0
'<table><tr>',(;y#<'<th>A'),;(<:x)#<('<tr>',(;y#<'<td>A'))
)

0

PHP, 161 байт

Спробуйте в Інтернеті

Код

function f($m,$n){$t=["table>","th>","td>","tr>","</"];echo strtr("
<0<3".str_repeat("<1A41",$n)."43".str_repeat("<3".str_repeat("
<2A42",$n)."43",$m-1)."40",$t);}

Пояснення

function f($m,$n){
  $t=["table>","th>","td>","tr>","</"];           //array representing the tags its created
  echo strtr("<0<3".str_repeat("<1A41",$n)."43"   //strtr it's called and uses 
                                                  //the array to replace values
           .str_repeat("<3".                      //repeat the tags
                         str_repeat("<2A42",$n)   //repeat the tags again
                            ."43",$m-1)."40",$t); 
   //its repeated m-1 times because head is counted as one row
  }

PHP, 193 байт

Повна структура столу забула<tfooter> <thead>, <tbody>..etc..

Спробуйте приклад функції

function f($m,$n)   {$t=["table>","thead>","tbody>","th>","td>","tbody>","tr>"];
echo strtr(
      "<0<1".str_repeat("<3A</3",$n).
      "</1<2".str_repeat(
                  "<6".str_repeat("<4A</4",$n)
                       ."</6",$m-1)."</2</0",
  $t);
  }

Пояснення

$t=["table>","thead>","tbody>","th>","td>","tbody>","tr>"];

Масив з усіма тегами для таблиці це влаштується , а потім str_repeatряд відсилаючи до індексу в масиві записуються, а потім в strtrрядок плюс масив передається


0

Ябасич , 124 байти

Анонімна функція, яка приймає вхід із цілих чисел та виходів на консоль.

?"<table>"
input""i,j
For c=1To i
?"<tr>"
For r=1To j
If c=1?"<th>H</th>"
If c>1?"<td>D</td>"
Next
?"</tr>"
Next
?"</table>"

Спробуйте в Інтернеті!


Це не створює тегів <td>.
картопля

@potato - ах, я цього не бачив. Це виправлено.
Тейлор Скотт

0

Четвертий (gforth) , 86 байт

: f ." <table>" 0 do ." <tr>" dup 0 do j if ." <td>A" else ." <th>A" then loop loop ; 

Спробуйте в Інтернеті!

Пояснення

." <table>"         \ output <table>
0 do                \ start loop from 0 to m-1
   ." <tr>"         \ output <tr>
   dup 0 do         \ duplicate n and loop from 0 to n-1
      j if          \ if the outer loop index is true (not 0)
         ." <td>A"  \ output <td>A
      else          \ if outer loop index is false (0)
         ." <th>A"  \ output <th>A
      then          \ end if-else
   loop             \ end inner loop
loop                \ end outer loop                      

0

Морква , 77 51 байт

<th>A^*$v<tr>vl+(^h)*($^F- 1)A"h"S"d"h+(^l)v<table>

(Працюючи над цим, я виявив помилку, що hне працює, і виправив її)

Отримавши кілька байтів, скорочуючи html, а також використовуючи "розділити, приєднатися" замість "замінити"

Спробуйте в Інтернеті!, скористайтеся параметром командного рядка-d щоб переглянути AST (Примітка: для цього використовується новий інтерпретатор вузла, тому старіша версія веб-сайту не може це запустити.)

Таким чином, ця програма приймає 0-індексований вхід і в зворотному порядку через дивну природу Моррока 3 2 друкуючи 3 × 4 таблиці.

Запускайте програму так, ./carrot -f prog.carrot input.txt

В основному створюється рядок заголовка, потім дані рядки на іншій комірці саду (2D стрічка) і об'єднують їх разом.


Морква працює на 2D стрічці, яку називають садовою. Кожна комірка в саду складається з трьох режимів стека, string, float, масив. Для кожного режиму є значення, яке називається "стек" (примітка: неправильне значення). Ці стеки починаються порожніми. Коли комірка знаходиться в певному режимі, наступні команди впливатимуть на стек, який відповідає цьому режиму, наприклад, у плаваючому режимі, операції впливатимуть на поплавок стека. І звичайно, є команди для перемикання між режимами. Режими важливі, оскільки кожен оператор може бути перевантажений для кожного режиму та кожного типу аргументів.

Крім того, є два додаткові режими (вони впливають лише на команди, а не на стек безпосередньо), звичайний режим і режим каретки. Нормальний режим працює нормально, де є оператори, які беруть аргументи і безпосередньо впливають на стек. У режимі карети (майже) кожен символ трактується буквально як рядок, а згодом попередньо додається / додається відповідно до стеку. Режим каретки запускається / закінчується доглядом (додавати) або знизу (попередньо).

Морква починається в осередку на саду, в режимі стека-рядка та в режимі каретки.


Починаючи в режимі каретки, рядок <th>Aдодається до спочатку порожнього стека. Потім слід *команда, що дублює його $, введення, рази. Потім <tr>додається до стека-рядка за допомогою нижньої карети v. Це створює рядок заголовка таблиці.

Для створення рядків даних ми копіюємо заголовок до іншої комірки. lпереміщує IP в праву порожню клітинку і +додає (^h)рядок у комірці зліва (по суті, копіюючи її в комірку праворуч). ()запускає підзарядку, нову програму «Морква» майже з тією ж стрічкою та ^виходить із режиму каретки, щоб ми могли hотримати рядок у лівій комірці. Потім це *дублюється ($^F- 1)наступним входом мінус 1 рази.

Ще в правій комірці Aвстановлює масив цієї комірки на її складання, розділене на "h". Sприєднується до масиву стека by "d"і встановлює рядок стека до цього значення. A"h"S"d"насправді просто замінює hs на ds для формування рядків даних. Теперh переходимо до лівої вихідної комірки.

Тепер ми додаємо рядок стека комірки праворуч до цієї комірки, використовуючи +(^l). Залишилося лише додати <table>тег, тому ми робимо це, попередньо vдодавши його.



0

Powershell, 63 байти

$m,$n=$args;$t='h';'<table>';1..$m|%{'<tr>'+"<t$t>A"*$n;$t='d'}

збережіть як new-mntable.ps1. Тестовий сценарій:

.\new-mntable.ps1 2 3
.\new-mntable.ps1 1 3
.\new-mntable.ps1 4 2
.\new-mntable.ps1 2 8

вихід (додаткові пробіли необов’язкові):

<table>
<tr><th>A<th>A<th>A
<tr><td>A<td>A<td>A
<table>
<tr><th>A<th>A<th>A
<table>
<tr><th>A<th>A
<tr><td>A<td>A
<tr><td>A<td>A
<tr><td>A<td>A
<table>
<tr><th>A<th>A<th>A<th>A<th>A<th>A<th>A<th>A
<tr><td>A<td>A<td>A<td>A<td>A<td>A<td>A<td>A

Powershell, 65 байт, -replace

'<table>h'+'d'*--$args[0]-replace'h|d',('<tr>'+'<t$0>A'*$args[1])

збережіть як new-mntable.ps1. Тестовий сценарій:

.\new-mntable.ps1 2 3
.\new-mntable.ps1 1 3
.\new-mntable.ps1 4 2
.\new-mntable.ps1 2 8

вихід:

<table><tr><th>A<th>A<th>A<tr><td>A<td>A<td>A
<table><tr><th>A<th>A<th>A
<table><tr><th>A<th>A<tr><td>A<td>A<tr><td>A<td>A<tr><td>A<td>A
<table><tr><th>A<th>A<th>A<th>A<th>A<th>A<th>A<th>A<tr><td>A<td>A<td>A<td>A<td>A<td>A<td>A<td>A

Як це працює:

  1. '<table>h'+'d'*--$args[0] - створити подібний рядок <table>hddd...
  2. 'h|d'- пошук hабо dсимволи в рядку для заміни
  3. '<tr>'+'<t$0>A'*$args[1] - замініть кожну таблицю на зразок рядка <tr><t$0>A<t$0>A...
  4. де $0захоплений group[0]- знаком у -replace.

Powershell, 65 байт, scriptblock

$m,$n=$args;'<table>';&($r={'<tr>'+"<t$args>A"*$n})h;(&$r d)*--$m

збережіть як new-mntable.ps1. Тестовий сценарій:

.\new-mntable.ps1 2 3
.\new-mntable.ps1 1 3
.\new-mntable.ps1 4 2
.\new-mntable.ps1 2 8

вихід:

<table>
<tr><th>A<th>A<th>A
<tr><td>A<td>A<td>A
<table>
<tr><th>A<th>A<th>A

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