Menghasilkan tabel am * n dalam HTML


22

Memasukkan :

Dua bilangan bulat desimal mdan nyang masing-masing memberikan jumlah baris dan kolom tabel. mdan nlebih besar dari atau sama dengan 1.

Keluaran:

Tabel dalam HTML yang memiliki kolom m rows dan n.

Tabel tersebut harus dapat ditampilkan oleh peramban modern pilihan Anda. Sebagian besar browser akan menampilkan semuanya dengan benar bahkan jika tag tidak ditutup. Indentasi dan spasi yang tepat adalah opsional.

Harus ada setidaknya satu karakter yang dapat dicetak (non-spasi) di setiap sel.

Sel-sel di baris pertama harus menggunakan <th>tag sedangkan yang di baris berikut harus menggunakan <td>tag.

Kondisi menang:

Ini adalah sehingga kode-sumber terpendek untuk setiap bahasa menang.

Contoh input:

2 3

Contoh keluaran:

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

atau : <table><tr><th>A<th>A<th>A<tr><td>A<td>A<td>A


Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Mego

Jawaban:


7

APL (Dyalog Unicode) dengan MiServer 3.0 , 31 30 byte SBCS

Program lengkap. Anjurkan stdin untuk daftar dua elemen [m,n]dan cetak XHTML yang ketat untuk stdout.

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

Sesi contoh:

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

Cobalah online!

Penjelasan:

(... ).Render Render elemen HTML berikut:

⎕NEW _.Table (... ) Tabel baru dengan parameter berikut:

  (... ) ⍬ 1 konten berikut, tanpa gaya khusus, 1 baris tajuk:

   ⎕⍴0 input yang dievaluasi membentuk kembali nol (yaitu m-row, matriks n-kolom nol)


6

JavaScript (ES6), 70 byte

Disimpan 2 byte berkat @RickHitchcock

Mengambil input dalam sintaks currying (m)(n).

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

Cobalah online!

Demo




3

JavaScript, 65 byte

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

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


rekursi. bagus!
mazzy

2

05AB1E , 30 byte

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

Cobalah online!

Penjelasan

’<…È>’                           # 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 byte

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

Jalankan dan debug itu

Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.

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

Jalankan yang ini


2

Java 10, 139 133 102 byte

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;}

Cobalah online.

Penjelasan:

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

Saya pikir ada kesalahan ketik kecil, Anda menulis "th" dua kali.
kentang

@potato Ah, kamu benar. Kode itu sendiri dan tautan TIO benar, tetapi penjelasan saya salah ketik. Harus diperbaiki sekarang, terima kasih.
Kevin 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 bytes) Saya menemukan ini menarik, tetapi tidak layak diberi skor Anda saat ini. Anda mungkin bisa sedikit golf jawaban Anda menggunakan ide-ide di sini seperti bisa berubah-ubah m.
Olivier Grégoire

@ OlivierGrégoire Saya awalnya dapat dimodifikasi m, tetapi karena <th>/ <td>perbedaan itu tidak masalah. Saya masih perlu memeriksa apakah itu iterasi pertama dari loop luar, dalam hal ini saya membutuhkan keduanya jdan m, dan saya perlu melakukan loop dalam beberapa kali, dalam hal ini saya perlu idan n. Alih-alih naik dari 0 dan memeriksa j<2saya bisa mundur dan memeriksa i>m-2, tetapi itu akan menjadi +1 byte, bukan -1. Pendekatan Anda menggunakan dua loop terpisah dengan yang dapat dimodifikasi mdan nmemang menarik. :)
Kevin Cruijssen

2

APL (Dyalog Unicode) , 42 38 byte SBCS

-4 Terima kasih kepada ngn.

Program lengkap. Anjurkan stdin untuk daftar dua elemen [m, n] dan cetak tag tidak tertutup untuk stdout.

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

Cobalah online!

⊂'<th>A' lampirkan string ini untuk memperlakukannya secara keseluruhan

⎕⍴ cepat untuk dimensi dan siklis r eshape sel tunggal untuk matriks ukuran yang

…⍀ secara kumulatif menyisipkan fungsi berikut di antara setiap pasangan sel vertikal:

{'d'}@3 abaikan sel atas; tempatkan ddi posisi ke-3 di sel bawah

'<tr>',⍤1 tambahkan string ini setiap baris

ϵ daftar (ratakan)

'<table>', tambahkan string ini




@ ngn Semua sudah selesai. Terima kasih. Relevan .
Adm

2

C (gcc) , 107 99 98 97 byte

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

Cobalah online!

-8 byte berkat kentang

-2 bytes berkat ceilingcat

The sArray harus dideklarasikan sebagai array tidak pointer jika tidak maka tidak akan diedit (kita mengatur jam pertama untuk iklan). Sebagian besar browser bahkan tidak peduli jika tag penutup Anda benar, jadi kami tutup saja semua tag </t>.


Masih berfungsi dengan baik jika Anda menghapus </t>yang muncul dua kali dan -8 byte.
kentang

Anda dapat mencukur 4 byte lagi jika Anda memindahkan output baris baru ke loop dalam (juga, menghindari baris kosong): Cobalah online!
ErikF

2

R , 73 byte

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

Cobalah online!

Disimpan 7 byte dengan hack kotor - ganti "rep" dengan "<".


1

Haskell , 109 107 103 byte

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

Begitu banyak tanda kurung ... Terima kasih kepada @nimi untuk dua byte (dan hilangnya kedermawanan)!

Cobalah online!

Tanpa tag akhir implementasi langsung menang pada 87 byte ( Coba online ):

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

1

APL + WIN, 68 63 56 byte

12 byte total disimpan berkat Adám

Anjuran untuk jumlah baris diikuti oleh jumlah kolom dan output opsi non-penutupan:

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

@ Adám Terlalu memicu senang aku takut. Terlihat oke sekarang?
Graham

Ya, tetapi Anda tidak perlu atau parenting: t,,((⎕-1),n←⎕)⍴ratau dua koma pertama.
Adm

@ Adam Terima kasih. Ini bukan hari saya harus panas (28C)!
Graham

Menggabungkan hdan rmenjadi ekspresi utama:'<table>'t(n⍴⊂'<th>A')t,,((⎕-1),n←⎕)⍴⊂'<td>A'
Adám

Ada yang tidak beres. Anda hanya memasukkan satu <tr>untuk badan. Setiap baris membutuhkan a <tr>.
Adám

1

Retina , 56 54 byte

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

Cobalah online! Sunting: Disimpan 2 byte berkat @CowsQuack. Penjelasan: Tahap pertama menggunakan perkalian string Retina 1 terlebih dahulu untuk menghasilkan jumlah sel yang sesuai, kemudian untuk menghasilkan jumlah baris yang sesuai. Tahap kedua kemudian mengubah baris pertama tds menjadi ths.


Jika Anda tahu inputnya akan dipisah berdasarkan spasi, maka Anda seharusnya dapat menggunakannya .sebagai pengganti\d
Kritixi Lithos

1

Arang , 33 byte

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

Cobalah online!

Penjelasan

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

Versi K adalah apa pun yang termasuk dalam KDB+ 3.5 2017.11.30.

Port jawaban Python di atas. Berakhir menjadi 1 byte lebih lama karena harus mendaftar dan meratakan beberapa kali.

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

1

Perl 5 -p , 65 54 byte

-11 byte berkat pengingat @ msh2108

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

Cobalah online!


Simpan sendiri beberapa byte. Sebagai contoh dalam tantangan, Anda dapat menjatuhkan .'</table>'.
msh210


1

PowerShell Core , 72 68 byte

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

Cobalah online!

Berikut adalah kasus pengujian saya dan output yang diharapkan (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

Terima kasih, @ mazzy , untuk -4 byte!


1
Kurung adalah opsional. Coba Function F($m,$n){'<table><tr>'+'<th>A'*$n+('<tr>'+'<td>A'*$n)*--$m}.
mazzy


0

Dart , 45 63 byte

Solusi kerja:

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

Coba online di sini!

Lambda / fungsi anonim yang mengambil mdan nsebagai parameter, menampilkan output ke STDOUT.

Sejak tabel dengan tertutup <table>, <tr>, <th>, dan <td>tag masih membuat dalam browser modern (ex., Chrome), output adalah valid.

Solusi lama (rusak):

Upaya pertama saya lupa untuk beralih ke <td>setelah baris pertama:

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

Terima kasih kepada @Lynn karena menunjukkannya.


0

Google Sheets, 66 byte

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

Input ada di sel A1dan B1.
Tidak ada yang mewah, sungguh; itu hanya Reptfungsi bersarang .
Ini tidak menganggap m > n > 0dan bahwa mereka berdua bilangan bulat.


0

Jelly ,  33  32 byte

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

Pengambilan program secara penuh rows, columnsyang mencetak hasilnya.

Cobalah online!


hmm, juga 32 menggunakan tabel:

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

0

J, 64 byte

Port lain dari jawaban Python:

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

0

PHP, 161 Bytes

Cobalah online

Kode

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

Penjelasan

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 Bytes

Struktur tabel penuh lupa<tfooter> <thead>, <tbody>..etc..

Coba contoh fungsi

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

Penjelasan

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

Array dengan semua tag untuk tabel yang dibuatnya dan kemudian dengan str_repeatnomor yang merujuk ke indeks dalam array ditulis, kemudian ke strtrstring ditambah array dilewatkan


0

Yabasic , 124 byte

Fungsi anonim yang mengambil input dari bilangan bulat yang dibatasi ruang dan keluaran ke konsol.

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

Cobalah online!


Ini tidak menghasilkan tag <td>.
kentang

@potato - ahh, saya belum melihat itu. Itu diperbaiki.
Taylor Scott

0

Keempat (gforth) , 86 byte

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

Cobalah online!

Penjelasan

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

Wortel , 77 51 byte

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

(Saat mengerjakan ini, saya menemukan bug dengan htidak bekerja dan memperbaikinya)

Memotong beberapa byte dengan memperpendek html serta menggunakan "split, join", bukan "replace"

Cobalah online! , gunakan opsi baris perintah -duntuk melihat AST (Catatan: ini menggunakan penerjemah simpul baru, sehingga versi yang lebih lama di situs web tidak dapat menjalankan ini.)

Program ini mengambil input 0-diindeks dan dalam urutan terbalik, karena sifat aneh Carrot, sehingga 3 2mencetak tabel 3 × 4.

Jalankan program seperti itu, ./carrot -f prog.carrot input.txt

Pada dasarnya membuat baris tajuk, kemudian data baris pada sel lain dari kebun (rekaman 2D), dan menyatukannya bersama-sama.


Wortel bekerja pada pita 2D, yang disebut taman. Setiap sel di taman terdiri dari tiga mode tumpukan, string, float, array. Ada nilai untuk setiap mode, yang disebut "tumpukan" (catatan: keliru). Tumpukan ini mulai kosong. Ketika sel berada pada mode tertentu, perintah berikut akan memengaruhi tumpukan yang sesuai dengan mode ini, misalnya dalam mode float, operasi akan memengaruhi stack float. Dan tentu saja, ada perintah untuk beralih antar mode. Mode ini penting karena setiap operator dapat kelebihan beban untuk setiap mode dan setiap jenis argumen.

Selain itu, ada dua mode tambahan (ini hanya memengaruhi perintah, bukan tumpukan langsung), mode normal dan mode caret. Mode normal berfungsi normal, di mana ada operator yang mengambil argumen dan memengaruhi tumpukan secara langsung. Dalam mode caret, (hampir) setiap karakter ditafsirkan secara harfiah sebagai string, dan kemudian ditambahkan / ditambahkan sesuai dengan tumpukan. Mode caret dimulai / diakhiri dengan caret (append) atau down-caret (prepend).

Wortel dimulai di sel di kebun, dalam mode string-string, dan dalam mode caret.


Dimulai dengan caret-mode, string <th>Aditambahkan ke stack-string yang awalnya kosong. Kemudian ikuti *perintah yang menduplikatnya $, input, kali. Kemudian <tr>ditambahkan ke stack-string oleh penggunaan down-caret v. Ini menciptakan baris tajuk tabel.

Untuk membuat baris data, kami menduplikasi header ke sel lain. lmemindahkan IP ke sel kosong kanan, dan +menambahkan (^h)string dalam sel ke kiri (pada dasarnya menyalinnya ke sel di sebelah kanan). ()memulai subkulit, program Wortel baru dengan rekaman yang hampir sama, dan ^keluar dari mode caret sehingga kita bisa hmendapatkan string di sel kiri. Ini kemudian *digandakan oleh ($^F- 1), input berikutnya minus 1, kali.

Masih di sel kanan, Aatur array sel ini ke tumpukannya "h". Sbergabung dengan array stack dengan "d"dan mengatur string stack ke nilai ini. A"h"S"d"benar-benar hanya mengganti hs dengan ds untuk membentuk baris data. Sekarang hkita pindah ke sel awal yang mulai.

Sekarang kita menambahkan string stack sel ke kanan menggunakan sel ini +(^l). Yang tersisa hanyalah menambahkan <table>tag, jadi kami melakukan ini dengan vmenambahkannya terlebih dahulu.



0

Powershell, 63 byte

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

simpan sebagai new-mntable.ps1. Skrip uji:

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

output (ruang tambahan adalah opsional):

<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 byte, -replace

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

simpan sebagai new-mntable.ps1. Skrip uji:

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

keluaran:

<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

Bagaimana cara kerjanya:

  1. '<table>h'+'d'*--$args[0] - buat string seperti <table>hddd...
  2. 'h|d'- cari hatau dkarakter dalam string untuk diganti
  3. '<tr>'+'<t$0>A'*$args[1] - Ganti setiap karakter dengan string seperti <tr><t$0>A<t$0>A...
  4. di mana $0ditangkap group[0]- arang di -replace.

Powershell, 65 byte, scriptblock

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

simpan sebagai new-mntable.ps1. Skrip uji:

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

keluaran:

<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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.