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

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

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





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

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


По-прежнему работает нормально, если вы удалите, </t>что появляется дважды и -8 байт.
— картошка

Вы можете сбрить еще 4 байта, если переместите вывод новой строки во внутренний цикл (кроме того, он избегает пустой строки): попробуйте онлайн!
— ErikF


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

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

1

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

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

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

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


Сэкономьте себе несколько байтов. В качестве примера в вызове, вы можете бросить .'</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 за указание на это.


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

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

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                      

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добавляя его.



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.