Создайте таблицу * в 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

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

(⎕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

Принимает ввод в синтаксисе карри (m)(n).

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

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

демонстрация

Arnauld
источник
3

JavaScript, 65 байт

f=(m,n)=>m?f(--m,n)+'<tr>'+`<t${m?'d':'h'}>x`.repeat(n):'<table>'

document.write(f(4,3));

l4m2
источник
рекурсии. хороший!
Маззи
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
Emigna
источник
2

Stax , 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
Кевин Круйссен
источник
Я думаю, что есть небольшая опечатка, вы написали "th" дважды.
картошка
@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 I первоначально имел модифицируемых m, но из - за <th>/ <td>различий это не имеет значения. Мне все еще нужно проверить, является ли это первой итерацией внешнего цикла, в этом случае мне нужны оба jи m, и мне нужно сделать внутренний цикл несколько раз, в этом случае мне нужно iи n. Вместо того, чтобы идти вверх от 0 и проверять, j<2я мог бы пойти назад и проверить i>m-2, но это будет +1 байт вместо -1. Ваш подход использования двух разделенных циклов с возможностью изменения mи n, тем не менее, действительно интересен. :)
Кевин Круйссен
2

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

-4 благодаря нгн.

Полная программа. Запрашивает стандартный ввод для двухэлементного списка [m, n] и печатает незамкнутые теги в стандартный вывод.

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

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

⊂'<th>A' приложите эту строку, чтобы рассматривать ее как целое

⎕⍴ запрос на размеры и циклически г eshape на одну ячейку с матрицей такого размера

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

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

'<tr>',⍤1 добавьте эту строку в каждую строку

ε NLIST (Flatten)

'<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>.

LambdaBeta
источник
По-прежнему работает нормально, если вы удалите, </t>что появляется дважды и -8 байт.
картошка
Вы можете сбрить еще 4 байта, если переместите вывод новой строки во внутренний цикл (кроме того, он избегает пустой строки): попробуйте онлайн!
ErikF
2

R , 73 байта

function(n,m)cat("<table><tr>","<th>A"<m,c("<tr>","<td>A"<m)<n-1)
"<"=rep

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

Сохранено 7 байтов с грязным хаком - замените «rep» на «<».

Jayce
источник
1

Хаскелл , 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>"
Angs
источник
1

APL + WIN, 68 63 56 байт

Всего 12 байтов сохранено благодаря Адаму

Запрашивает количество строк, за которыми следует число столбцов, и выводит закрывающую опцию:

t←⊂'<tr>'⋄'<table>'t(n⍴⊂'<th>A'),,t,((⎕-1),n←⎕)⍴⊂'<td>A'
Грэхем
источник
@ Adám Я тоже боюсь. Выглядит хорошо сейчас?
Грэм
Да, но вам не нужны ни заключительные парены, t,,((⎕-1),n←⎕)⍴rни первые две запятые.
Адам
@ Adám Спасибо. Это не мой день, должно быть тепло (28C)!
Грэм
Слить 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.

Порт Питона ответ выше. Заканчивается на 1 байт длиннее из-за необходимости зачисления и выравнивания несколько раз.

{,/"<table><tr>",(y#,"<th>A"),(x-1)#,("<tr>",/y#,"<td>A")}
hoosierEE
источник
1

Perl 5 -p , 65 54 байта

-11 байт благодаря напоминанию @ msh2108

/ /;$_="<table><tr>"."<th>A"x$'.('<tr>'.'<td>B'x$')x$`

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

Xcali
источник
Сэкономьте себе несколько байтов. В качестве примера в вызове, вы можете бросить .'</table>'.
msh210
1

PowerShell Core , 72 68 байт

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

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

Вот мои тесты и ожидаемые результаты (Cf, TIO)

  • т = 2; п = 3 <table><tr><th>A<th>A<th>A<tr><td>A<td>A<td>A
  • м = 1; п = 3 <table><tr><th>A<th>A<th>A
  • м = 4; п = 2 <table><tr><th>A<th>A<tr><td>A<td>A<tr><td>A<td>A<tr><td>A<td>A
  • т = 2; п = 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 за указание на это.

vasilescur
источник
0

Google Sheets, 66 байт

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

Вход находится в ячейке A1и B1.
В этом нет ничего особенного; это просто вложенные Reptфункции.
Это действительно предположить , m > n > 0и что они оба целые числа.

Инженер Тост
источник
0

Желе ,  33  32 байта

“<td>A”ẋ”h3¦s5ẋ€ṭ€“<tr>”ṭ“¢ssɱU»

Полная программа приема rows, columnsкоторая печатает результат.

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


хм, также 32, используя таблицу:

Ịị⁾hdṭ”t⁾<>j;ðþZṭ€“<tr>”ṭ“¢ssɱU»
Джонатан Аллан
источник
0

J, 64 байта

Еще один порт ответа Python:

4 :0
'<table><tr>',(;y#<'<th>A'),;(<:x)#<('<tr>',(;y#<'<td>A'))
)
hoosierEE
источник
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

YaBasic , 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

Forth (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                      
reffu
источник
0

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

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

(Работая над этим, я обнаружил ошибку с hнеработающим и исправил ее)

Гольф несколько байтов, сокращая html, а также используя «split, join» вместо «replace»

Попробуйте онлайн! , используйте параметр командной строки-d чтобы увидеть AST (Примечание: здесь используется новый интерпретатор узлов, поэтому более старая версия на веб-сайте не может его запустить.)

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

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

В основном создает строку заголовка, затем строки данных в другой ячейке сада (2D-лента) и объединяет их вместе.


Морковь работает на двухмерной ленте, которая называется сад. Каждая клетка в саду состоит из трех стековых режимов: string, float, array. Для каждого режима есть значение, называемое «стеком» (примечание: неправильное обозначение). Эти стеки начинаются пустыми. Когда ячейка находится в определенном режиме, следующие команды будут влиять на стек, соответствующий этому режиму, например, в режиме с плавающей запятой, операции будут влиять на смещение стека. И конечно, есть команды для переключения между режимами. Режимы важны, потому что каждый оператор может быть перегружен для каждого режима и каждого типа аргумента.

Кроме того, есть два дополнительных режима (они влияют только на команды, а не непосредственно на стек), обычный режим и режим каретки. Нормальный режим работает нормально, где есть операторы, принимающие аргументы и напрямую влияющие на стек. В режиме каретки (почти) каждый символ интерпретируется буквально как строка, а затем добавляется / добавляется в соответствии со стеком. Режим каретки запускается / заканчивается каретками (добавление) или нижними каретками (предварительно).

Морковь начинается в клетке в саду, в режиме стековой строки и в режиме каретки.


Начиная с режима каретки, строка <th>Aдобавляется в изначально пустую строку стека. Затем следует *команда, которая дублирует его $, ввод, время. Затем <tr>добавляется к строке стека с помощью нижнего кареткиv . Это создает строку заголовка таблицы.

Чтобы создать строки данных, мы дублируем заголовок в другую ячейку. lперемещает IP в правую пустую ячейку и +добавляет (^h)строку в ячейку слева (по сути, копируя ее в ячейку справа). ()запускает подоболочку, новую программу Carrot с почти той же лентой, и ^выходит из режима каретки, чтобы мы могли hполучить строку в левой ячейке. Это затем *дублируется($^F- 1) следующим вводом минус 1 раз.

Находясь в правой ячейке, Aустанавливает для массива этой ячейки его разбивку по стеку "h". Sприсоединяет массив стека с помощью "d"и устанавливает строку стека в это значение. A"h"S"d"на самом деле просто заменяет hs на ds, чтобы сформировать строки данных. Теперь hпереместимся в левую стартовую ячейку.

Теперь мы добавляем строку стека ячейки справа к этой ячейке, используя +(^l). Осталось только добавить <table>тег, поэтому мы делаем это, vдобавляя его.

Kritixi Lithos
источник
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
Mazzy
источник