用HTML生成am * n表


22

输入:

两个十进制整数mn分别给出表的行数和列数。 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


评论不作进一步讨论;此对话已转移至聊天
Mego,

Answers:


7

带有MiServer 3.0的APL(Dyalog Unicode)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个字节

@RickHitchcock节省了2个字节

以currying语法接受输入(m)(n)

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

在线尝试!

演示版




3

JavaScript,65个字节

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

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


递归。真好!
mazzy

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

爪哇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字节)我发现这一点很有趣,但考虑到您的当前分数,不值得。您可能可以使用诸如mutable之类的想法来回答您的问题m
奥利维尔·格雷戈尔(OlivierGrégoire)'18年

@OlivierGrégoire我最初有一个可修改的m,但是由于<th>/ <td>差异而已。我仍然需要检查它是否是外循环的第一次迭代,在这种情况下,我需要同时使用jand m,并且需要多次进行内循环,在这种情况下,我需要使用iand n。而不是从0向上检查,j<2我可以向后检查i>m-2,但是它将是+1字节而不是-1。你使用两种方法分离循环与修改m,并n的确是有趣的,虽然。:)
Kevin Cruijssen

2

APL(Dyalog Unicode)42 38 字节SBCS

-4感谢ngn。

完整程序。提示stdin输入两个元素的列表[m,n],并将未关闭的标签输出到stdout。

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

在线尝试!

⊂'<th>A' 将该字符串括起来以将其视为一个整体

⎕⍴ 提示输入尺寸并循环r单细胞ESHAPE到大小的矩阵

…⍀ 在每对垂直单元格之间累积插入以下功能:

{'d'}@3 忽略上单元;地点d在底部单元格的第3个位置

'<tr>',⍤1 在每行前添加此字符串

ϵ NLIST(扁平化)

'<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个字节归功于ceilingcat

必须将s数组声明为不是指针的数组,否则它将不可编辑(我们将第一个h设置为ad)。大多数浏览器甚至都不在乎您的结束标记是否正确,因此我们仅使用来关闭所有标记</t>


如果您删除</t>出现两次和-8个字节的,仍然可以正常工作。
土豆

如果将输出新行移动到内部循环(您还可以避免出现空行),则可以再减少4个字节:在线尝试!
ErikF

2

R,73字节

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

在线尝试!

用肮脏的hack保存了7个字节-用“ <”替换“ rep”。


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字节

多亏了Adám,总共节省了12个字节

提示输入行数,然后输入列数,并输出非关闭选项:

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

恐怕@AdámToo会触发快乐。现在看起来还好吗?
格雷厄姆

是的,但是您不需要或后面的括号:t,,((⎕-1),n←⎕)⍴r或前两个逗号。
阿达姆(Adám)'18年

@Adám谢谢。不是我的日子一定是高温(28C)!
格雷厄姆

合并hr进入主表达:'<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

在线尝试!编辑:由于@CowsQuack,节省了2个字节。说明:第一阶段首先使用Retina 1的字符串乘法来生成适当数量的单元格,然后生成适当数量的行。然后,第二阶段将tds 的第一行更改为ths。


如果你知道输入将会用空格进行分割,那么你应该能够使用.,而不是\d
Kritixi LITHOS

1

木炭,33字节

<table><tr>×<th>AηF⊖θ«<tr>×<td>Aη

在线尝试!

说明

<table><tr>                         Print "<table><tr>"
           ×<th>Aη                  Print "<th>A" * second input
                  F⊖θ«            For i in (implicit) range over first input
                        <tr>        Print("<tr>")
                            ×<td>Aη Print("<td>A") * second input

1

K,58个字节

K版本是包含的内容KDB+ 3.5 2017.11.30

上面的Python回答的端口。由于必须征募和压平多次,最终导致长度增加了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 '18年


1

PowerShell Core72 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}
mazzy


0

飞镖45 63字节

工作解决方案:

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

在这里在线尝试!

Lambda /匿名函数采用mn作为参数,将输出显示到STDOUT

由于与未关闭表<table><tr><th>,和<td>标签仍然在现代浏览器渲染(例如,铬),输出有效。

旧的(损坏的)解决方案:

我的第一次尝试忘了切换到<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

果冻 33  32 字节

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

带有的完整程序rowscolumns可打印结果。

在线尝试!


嗯,也用表32:

Ịị⁾hdṭ”t⁾<>j;ðþZṭ€“<tr>”ṭ“¢ssɱU»

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

第四(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(注意:此操作使用新的节点解释器,因此网站上的旧版本无法运行此命令。)

由于Carrot的怪异性质,该程序采用输入0索引并以相反的顺序进行输入,因此 3 2打印了3×4表格。

像这样运行程序 ./carrot -f prog.carrot input.txt

基本上创建标题行,然后在花园的另一个单元(2D磁带)上创建数据行,并将它们连接在一起。


Carrot在称为花园的2D磁带上​​工作。花园中的每个单元由三种堆叠模式组成,即字符串,浮点和数组。每种模式都有一个值,称为“堆栈”(注:误称)。这些堆栈开始为空。当单元处于特定模式时,以下命令将影响与此模式相对应的堆栈,例如在浮点模式下,操作将影响堆栈的浮点。当然,还有用于在模式之间切换的命令。这些模式很重要,因为每个运算符可以为每种模式和每种参数类型重载。

此外,还有两种附加模式(它们仅影响命令,不直接影响堆栈),普通模式和插入符号模式。普通模式正常工作,其中有一些运算符接受参数并直接影响堆栈。在插入符模式下,(几乎)每个字符都按字面意义解释为字符串,并随后相应地在堆栈前添加/附加。插入号模式以插入号(追加)或向下插入号(前置)开始/结束。

胡萝卜开始在花园中的一个单元格中,处于堆栈字符串模式和插入符号模式。


从插入号模式开始,该字符串<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'-搜索hd字符串中的字符以进行替换
  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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.