HTMLでam * nテーブルを作成する


22

入力:

二十進整数mnそれは、それぞれのテーブルの行と列の数を与えます。 mおよびn1以上。

出力:

m行n列のHTMLのテーブル。

テーブルは、選択した最新のブラウザで表示可能である必要があります。ほとんどのブラウザは、タグが閉じられていなくてもすべてを適切に表示します。適切なインデントと間隔はオプションです。

各セルには少なくとも1つの(空白以外の)印刷可能な文字が必要です。

最初の行のセルは<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

MiServer 3.0使用したAPL(Dyalog Unicode)31 30 バイトSBCS

完全なプログラム。2要素リストの標準入力を要求し、[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バイト

@RickHitchcockのおかげで2バイト節約

カリー化構文の入力を受け取ります(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

スタックス、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」を2回書いたと思います。
ポテト

@ジャガイモああ、あなたは正しい。コード自体とTIOリンクは正しいものでしたが、私の説明にはタイプミスがありました。今修正する必要があります、ありがとう。
ケビンCruijssen

(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>違いにより問題ではありません。私はまだ外側のループの最初の反復であるかどうかを確認する必要があります。その場合はjandの両方mが必要で、内側のループを複数回行う必要がiありnます。0から上方にj<2移動してチェックするi>m-2代わりに、後方に移動してチェックすることもできますが、-1ではなく+1バイトになります。2を使用してのあなたのアプローチは、変更可能でループを分離mし、nしかし、確かに興味深いものです。:)
ケビンクルーイセン

2

APL(Dyalog Unicode)42 38 バイトSBCS

-4 ngnに感謝します。

完全なプログラム。2要素リスト[m、n]の入力をstdinに要求し、閉じていないタグを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バイト

ceilingcatのおかげで-2バイト

s配列は、それ以外の場合は、(私たちは、広告への最初の時間を設定)編集できません配列ではないポインタとして宣言する必要があります。ほとんどのブラウザは、終了タグが正しいかどうかさえ気にしないので、すべてのタグをで閉じます</t>


</t>2回表示される-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"))))

非常に多くの括弧…2バイトの@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ámあまりにもトリガー幸せ私は怖いです。今は大丈夫?
グラハム

はい、ただし、末尾の括弧:t,,((⎕-1),n←⎕)⍴rまたは最初の2つのコンマは必要ありません。
アダム

@Adámありがとう。私の日は暑い(28C)に違いない!
グラハム

マージhr:メイン式に'<table>'t(n⍴⊂'<th>A')t,,((⎕-1),n←⎕)⍴⊂'<td>A'
アダム

何かが正しくありません。<tr>ボディに1つだけ挿入します。各行にはが必要<tr>です。
アダム

1

網膜56 54バイト

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

オンラインでお試しください!編集:@CowsQuackのおかげで2バイト保存されました。説明:最初の段階では、Retina 1の文字列乗算を使用して適切な数のセルを生成し、次に適切な数の行を生成します。次に、2番目の段階では、tdsの最初の行をsに変更しthます。


あなたが入力をスペースで分割されようとしている知っている場合は、使用することができるはず.の代わりに\d
KritixiのLithos


1

K、58バイト

Kバージョンは、に含まれているものKDB+ 3.5 2017.11.30です。

上記のPython回答のポート。複数回参加してフラット化する必要があるため、最終的に1バイト長くなります。

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



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 / anonymous関数は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

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>タグを生成しません。
ポテト

@ポテト-ああ、私はそれを見ていなかった。修正されました。
テイラースコット

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を短縮し、「replace」ではなく「split、join」を使用して、いくつかのバイトをゴルフしました。

オンラインでお試しください!、コマンドラインオプション-dを使用してASTを表示します(注:これは新しいノードインタープリターを使用するため、Webサイトの古いバージョンではこれを実行できません。)

このプログラムは、キャロットの奇妙な性質のために、0から順にインデックスを付けられた入力を受け取り、3 23×4テーブルを出力します。

そのようにプログラムを実行し、 ./carrot -f prog.carrot input.txt

基本的に、ヘッダー行を作成し、次に庭の別のセル(2Dテープ)にデータ行を作成し、それらを連結します。


ニンジンは、庭と呼ばれる2Dテープで動作します。庭の各セルは、string、float、arrayの3つのスタックモードで構成されています。各モードには「スタック」と呼ばれる値があります(注:誤った呼び名)。これらのスタックは空で始まります。セルが特定のモードにあるとき、次のコマンドはこのモードに対応するスタックに影響します。たとえば、フロートモードでは、操作はスタックフロートに影響します。そしてもちろん、モードを切り替えるコマンドがあります。各演算子は各モードおよび各引数タイプに対してオーバーロードされる可能性があるため、モードは重要です。

さらに、2つの追加モード(これらはコマンドにのみ影響し、スタックには直接影響しません)、通常モードとキャレットモードがあります。通常モードは正常に機能します。このモードでは、引数を取り、スタックに直接影響する演算子があります。キャレットモードでは、(ほぼ)すべての文字が文字列として文字通り解釈され、後でスタックに応じて先頭に追加/追加されます。キャレットモードは、キャレット(追加)またはダウンキャレット(追加)で開始/終了します。

ニンジンは、庭の房、スタックストリングモード、キャレットモードで始まります。


キャレットモードから、文字列<th>Aは最初は空のstack-stringに追加されます。次に、*それを複製するコマンド$、入力、回数に従います。次に<tr>、down-caretの使用によってstack-stringの前に追加されますv。これにより、テーブルのヘッダー行が作成されます。

データ行を作成するには、ヘッダーを別のセルに複製します。lIPを右側の空のセルに移動し、セル内の文字列を左側に+追加(^h)します(基本的に右側のセルにコピーします)。()ほぼ同じテープで新しいキャロットプログラムであるサブシェルを開始し、左セルに文字列を取得^できるようにキャレットモードを終了しますh。これは、次の入力から1を引いた回数で*複製され($^F- 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.