HTML'de am * n tablosu üret


22

Giriş:

İki ondalık sayı mve nsırasıyla tablodaki satır ve sütun sayısını verir. mve n1'den büyük veya 1'e eşittir.

Çıktı :

HTML’de m satırı ve n sütunu olan bir tablo.

Masa, seçtiğiniz modern bir tarayıcı ile görüntülenebilir olmalıdır. Çoğu tarayıcı, etiketler kapalı olmasa bile her şeyi düzgün şekilde görüntüler. Doğru girinti ve boşluk isteğe bağlıdır.

Her hücrede en az bir tane (boşluk olmayan) yazdırılabilir karakter bulunmalıdır.

İlk satırdaki hücreler <th>etiketleri, sonraki satırlardakiler <td>etiketleri kullanmalıdır .

Kazanma koşulu:

Bu olduğundan her dil için en kısa kaynak kodu kazanır.

Giriş örneği:

2 3

Çıktı örneği:

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

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


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Mego

Yanıtlar:


7

APL (Dyalog Unicode) ile MiServer 3.0 , 31 30 bayt SBCS

Tam program İki eleman listesi için stdin ister [m,n]ve katı XHTML'yi stdout'a yazdırır.

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

Örnek oturum:

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

Çevrimiçi deneyin!

Açıklama:

().Render Aşağıdaki HTML öğesini işleyin:

⎕NEW _.Table () Aşağıdaki parametrelere sahip yeni bir Tablo:

  () ⍬ 1 Aşağıdaki içerik, özel stil yok, 1 başlık satırı:

   ⎕⍴0 değerlendirilen girdiler sıfırı yeniden şekillendirir (yani, m-satırı, sıfırların n-sütunu matrisi)


6

JavaScript (ES6), 70 bayt

@RickHitchcock sayesinde 2 bayt kaydedildi

Körleme sözdiziminde girdi alır (m)(n).

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

Çevrimiçi deneyin!

gösteri




3

JavaScript, 65 bayt

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

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


özyineleme. Güzel!
mazzy

2

05AB1E , 30 bayt

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

Çevrimiçi deneyin!

açıklama

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

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

Koş ve hata ayıkla

Ambalajsız, ağzı açılmış ve yorumlanmış gibi görünüyor.

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

Bunu çalıştır


2

Java 10, 139 133 102 bayt

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

Çevrimiçi deneyin.

Açıklama:

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

Bence küçük bir yazım hatası var, iki kez "th" yazdın.
patates,

@potato Ah, haklısın. Kodun kendisi ve TIO bağlantısı doğruydu, ancak açıklamamın bir yazım hatası vardı. Şimdi düzeltilmeli, teşekkürler.
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) Bunu ilginç buldum, fakat şu anki puanınız verilen buna değmez. Mutable gibi burada fikirleri kullanarak biraz cevabınızı golf muhtemelen m.
Olivier Grégoire

@ OlivierGrégoire Başlangıçta bir modifiye edilebiliyordum m, ancak <th>/ <td>farklılıkları nedeniyle farketmezdi. Hala ikisine de ihtiyacım bu durumda dış döngünün ilk yineleme, var olmadığını kontrol etmek gerekir jve mve ben bu durumda ben gerekmez, iç döngü birden çok kez yapmak gerekir ive n. 0'dan yukarı doğru j<2gitmek ve kontrol etmek i>m-2yerine geriye doğru gidip kontrol edebiliyordum , ancak -1 yerine +1 bayt olurdu. Değiştirilebilir mve iki ayrı döngü kullanma yaklaşımınız n, yine de ilginçtir. :)
Kevin Cruijssen

2

APL (Dyalog Unicode) , 42 38 bayt SBCS

-4 sayesinde ngn.

Tam program İki eleman listesi [m, n] için stdin ister ve kapatılmamış etiketleri stdout'a yazdırır.

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

Çevrimiçi deneyin!

⊂'<th>A' bir bütün olarak ele almak için bu dizeyi içine alın

⎕⍴ boyutlar için hızlı ve çevrimsel r bu boyuttaki bir matrise tek hücre eshape

…⍀ Her dikey hücre çifti arasına aşağıdaki işlevi kümülatif olarak yerleştirin:

{'d'}@3 üst hücreyi yoksay; dalt hücrede 3. sırada yer

'<tr>',⍤1 bu dizgiyi her satırda hazırla

ε nlist (düzleştirmek)

'<table>', bu dizeyi hazırla




@ngn Hepsi bitti. Teşekkürler. İlgili .
Ad

2

C (gcc) , 107 99 98 97 bayt

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

Çevrimiçi deneyin!

Patates sayesinde -8 bayt

Ceilingcat sayesinde -2 bayt

sBir dizi değil bir işaretçi aksi takdirde (ki biz reklama ilk h ayarlanır) düzenlenemez olarak dizi beyan edilmelidir. Çoğu tarayıcı, kapanış etiketinizin doğru olup olmadığını bile umursamıyor, bu yüzden sadece tüm etiketleri kapatıyoruz </t>.


</t>İki kez ve -8 bayt olarak belirirse , yine de iyi çalışıyor .
patates,

Yeni satırın çıktısını iç döngüye çıkardığınızda (ayrıca boş bir satır olmasını önler): 4 bayt'ı daha tıraş edebilirsiniz: Çevrimiçi deneyin!
ErikF

2

R , 73 bayt

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

Çevrimiçi deneyin!

Kirli bir hack ile 7 bayt kaydedildi - "rep" yerine "<" yaz.


1

Haskell , 109 107 103 bayt

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

Çok fazla parantez… İki byte için @ nimi'ye teşekkürler (ve jeneriklik kaybı)!

Çevrimiçi deneyin!

Son etiketler olmadan düz uygulama 87 baytta kazanır ( Çevrimiçi deneyin ):

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

1

APL + WIN, 68 63 56 bayt

Adám sayesinde toplam 12 bayt kurtarıldı

Satır sayısının ardından izlenen sütun sayısı ve kapanmayan seçeneği gösteren istemler:

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

@ Adám Çok tetik mutlu korkarım. Şimdi iyi görünüyor mu?
Graham

Evet, ama izleyen parene t,,((⎕-1),n←⎕)⍴rya da ilk iki virgüle ihtiyacınız yok .
Adham

@ Adám Teşekkürler. Bu benim günüm değil, sıcaklık (28C) olmalı!
Graham,

Birleştirme hve rana ifadeye:'<table>'t(n⍴⊂'<th>A')t,,((⎕-1),n←⎕)⍴⊂'<td>A'
Adám

Bir şey doğru değil. Sadece <tr>vücut için bir tane eklersiniz. Her satırın bir a <tr>.
Adham

1

Retina , 56 54 bayt

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

Çevrimiçi deneyin! Düzenleme: @CowsQuack sayesinde 2 bayt kaydedildi. Açıklama: İlk aşamada önce uygun sayıda hücre üretmek için daha sonra uygun sayıda satır üretmek üzere Retina 1'in dizi çarpımı kullanılır. İkinci aşama daha sonra ilk tds sırasını ths olarak değiştirir.


Eğer giriş boşluklarla bölünmüş olacak biliyorum, o zaman kullanmak mümkün olmalıdır .yerine\d
Kritixi Lithos

1

Kömür , 33 bayt

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

Çevrimiçi deneyin!

açıklama

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

K versiyonu neyin içerdiğidir KDB+ 3.5 2017.11.30.

Yukarıdaki Python Limanı cevabı. Birden çok kez listeleme ve düzleştirme zorunluluğu nedeniyle 1 bayt daha uzun sürer.

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

1

Perl 5 -p , 65 54 bayt

@ Msh2108's hatırlatma sayesinde -11 bayt

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

Çevrimiçi deneyin!


Kendine biraz bayt kurtar. Mücadelede bir örnek için, bırakabilirsiniz .'</table>'.
msh210


1

PowerShell Çekirdek , 72 68 bayt

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

Çevrimiçi deneyin!

İşte test durumlarım ve beklenen çıktıları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

-4 bayt için @ mazzy'ye teşekkürler !


1
Parantez isteğe bağlıdır. Dene Function F($m,$n){'<table><tr>'+'<th>A'*$n+('<tr>'+'<td>A'*$n)*--$m}.
mazzy


0

Dart , 45 63 bayt

Çalışma çözümü:

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

Burada çevrimiçi deneyin!

Lambda / anonim işlev alarak mve nparametre olarak, çıktısını görüntüler STDOUT.

Kapanmamış olan tablolar yana <table>, <tr>, <th>, ve <td>etiketleri yine modern tarayıcılarda render (ex., Krom), çıkış geçerlidir.

Eski (kırık) çözüm:

İlk denemem <td>ilk satırdan sonra geçmeyi unuttum :

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

Bunu işaret ettiği için @ Lynn'e teşekkür ederiz.


0

Google Sayfaları, 66 bayt

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

Giriş hücrede A1ve B1.
Hiçbir şey fantezi, gerçekten; bu sadece yuvalanmış Reptfonksiyonlar.
Bu mu varsayalım m > n > 0ve bu ikisi de tamsayılar konum.


0

Jöle ,  33  32 bayt

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

Tam bir program alma rows, columnssonucu basar.

Çevrimiçi deneyin!


hmm, ayrıca 32 tablo kullanarak:

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

0

J, 64 bayt

Python cevabının başka bir limanı:

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

0

PHP, 161 Bayt

Çevrimiçi deneyin

kod

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

açıklama

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 Bayt

Tam masa yapısı unuttum<tfooter> <thead>, <tbody>..etc..

İşlev örneğini deneyin

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

açıklama

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

Tablo için tüm etiketler içeren bir dizi o inşaatı oluyor ve birlikte daha sonra str_repeatdizide bir dizin refering bir sayı yazılır, sonra hiç strtrdize artı dizinin geçirilir


0

Yabasic , 124 bayt

Uzaydan ayrılmış tam sayılardan girdi alan ve konsola çıkan bir adsız işlev.

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

Çevrimiçi deneyin!


Bu, <td> etiketlerini üretmez.
patates

@ patates - ahh, bunu görmemiştim. Düzeltildi.
Taylor Scott

0

İleri (gforth) , 86 bayt

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

Çevrimiçi deneyin!

açıklama

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

Havuç , 77 51 bayt

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

(Bu konuda çalışırken, hçalışmayan ve düzelten bir hata keşfettim )

Bazı baytları html'leri kısaltarak ve "change" yerine "split, join" kullanarak golf oynadı

Çevrimiçi deneyin!, komut satırı seçeneğini kullanın-d AST'yi görmek kullanın (Not: Bu, yeni düğüm yorumlayıcısını kullanır, bu nedenle web sitesindeki eski sürüm bunu çalıştıramaz.)

Bu program 0 indeksli ve tersine sırayla girdi, çünkü Carrot'un tuhaf doğası, 3 2 3 × 4'lük bir tablo yazdırdı.

Programı böyle çalıştırın. ./carrot -f prog.carrot input.txt

Temel olarak başlık satırını oluşturur, ardından veriler bahçenin başka bir hücresinde sıralanır (2B bant) ve bunları bir araya getirir.


Havuç, bahçe adı verilen 2B bant üzerinde çalışır. Bahçedeki her hücre üç yığın modundan oluşur, string, float, array. Her mod için "stack" adı verilen bir değer vardır (not: yanlış isim). Bu yığınlar boş başlar. Bir hücre belirli bir moddayken, aşağıdaki komutlar bu moda karşılık gelen yığını etkiler, örneğin şamandıra modunda, işlemler yığın yüzmesini etkiler. Ve elbette, modlar arasında geçiş yapmak için komutlar var. Modlar önemlidir, çünkü her operatör her mod ve her bir argüman tipi için aşırı yüklenebilir.

Ek olarak, iki ek mod vardır (bunlar yalnızca doğrudan yığını değil komutları etkiler), normal mod ve şapka modu. Normal mod, normalde çalışır, burada argümanları alan ve yığını doğrudan etkileyen operatörler vardır. Şapka modunda (neredeyse) her karakter kelimenin tam anlamıyla bir dize olarak yorumlanır ve daha sonra yığına uygun olarak hazırlanır / eklenir. Şapka modu, şapkalarla (ekleme) veya aşağı şapkalarla (hazırlama) başlatılır / sonlandırılır.

Havuç, bahçedeki bir hücrede, yığın dizisi modunda ve şapka modunda başlar.


Caret modundan başlayarak, dize <th>Abaşlangıçta boş yığın dizgisine eklenir. Sonra *onu $, girişi, zamanları çoğaltan komutu izler . Sonra <tr>aşağı-doğru kullanımı ile yığın dizeye hazırlanır v. Bu, tablonun başlık satırını oluşturur.

Veri satırlarını oluşturmak için başlığı başka bir hücreye kopyalarız. lIP'yi sağdaki boş hücreye taşır ve hücrede bulunan dizgiyi sola +ekler (^h)(temel olarak sağdaki hücreye kopyalayarak). ()hemen hemen aynı bantla bir alt kabuk, yeni bir Carrot programı başlatır ve sol hücrede ipi alabilmek için ^caret modundan çıkar h. Bu daha sonra *tarafından çoğaltılır($^F- 1) sonraki girişi eksi 1, saatler.

Hala sağ hücrede, Abu hücrenin dizisini istifleme bölmesine ayarlar "h". Sstack dizisini birleştirir ve stack "d"dizesini bu değere ayarlar. A"h"S"d"gerçekten sadece veri satırlarını oluşturmak için s'yi hs ile değiştirir d. şimdih sola başlayan hücreye geçiyoruz.

Şimdi hücrenin yığın dizesini kullanarak bu hücrenin sağına ekliyoruz +(^l). Geriye kalan tek şey <table>etiketi eklemek , bu yüzden bunu vhazırlayarak yapıyoruz.



0

Powershell, 63 bayt

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

olarak kaydet new-mntable.ps1. Test komut dosyası:

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

çıktı (fazladan boşluk isteğe bağlıdır):

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

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

olarak kaydet new-mntable.ps1. Test komut dosyası:

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

çıktı:

<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

Nasıl çalışır:

  1. '<table>h'+'d'*--$args[0] - gibi bir dize oluşturmak <table>hddd...
  2. 'h|d'- değiştirmek için dizedeki arama hveya dkarakter
  3. '<tr>'+'<t$0>A'*$args[1] - Her bir karakterin yerine <tr><t$0>A<t$0>A...
  4. nerede $0yakalanır group[0]- içindeki karakter -replace.

Powershell, 65 bayt, scriptblock

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

olarak kaydet new-mntable.ps1. Test komut dosyası:

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

çıktı:

<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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.