Masuk ganti, lingkarkan, dan tampilkan dengan bantalan minimal


17

Memasukkan:

Dua bilangan bulat: satu negatif, satu positif.

Keluaran:

Pada baris pertama, output terendah ke tertinggi. Pada baris kedua kami telah menghapus angka tertinggi dan terendah dan menandatangani-ubah semua nomor individual. Pada baris ketiga kami telah menghapus angka tertinggi dan terendah lagi dan menandatangani-ubah semua angka individual lagi. dll. (Contoh di bawah ini harus membuat tantangan lebih jelas.)

Penting: Selain itu, kami menambahkan spasi sehingga angka-angka dalam kolom semua disejajarkan (ke kanan).
Penjajaran minimal adalah bagian utama dari tantangan ini, ini berarti Anda tidak bisa hanya membuat setiap angka sama lebar. Lebar kolom didasarkan pada jumlah-lebar terbesar dari kolom spesifik itu (dan urutan dengan tanda-perubahan adalah untuk memberi angka beberapa variasi dalam lebar per kolom).


Sebagai contoh:

Input: -3,6

Output:
-3,-2,-1, 0, 1, 2, 3, 4,5,6   // sequence from lowest to highest
 2, 1, 0,-1,-2,-3,-4,-5       // -3 and 6 removed; then all signs changed
-1, 0, 1, 2, 3, 4             // 2 and -5 removed; then all signs changed again
 0,-1,-2,-3                   // -1 and 4 removed; then all signs changed again
 1, 2                         // 0 and -3 removed; then all signs changed again
                              // only two numbers left, so we're done

Seperti yang Anda lihat di atas, spasi ditambahkan pada angka positif, ketika mereka berbagi kolom dengan angka negatif untuk mengkompensasi -(hal yang sama akan berlaku untuk angka 2 digit).

Aturan tantangan:

  • Input harus berupa dua bilangan bulat
    • Anda dapat menganggap bilangan bulat ini berada dalam kisaran -99- 99(inklusif).
    • Bilangan bulat pertama akan negatif, dan yang lainnya akan positif.
  • Output bisa dalam format yang masuk akal, selama jelas ada baris dan kolom yang tepat: Ie STDOUT; kembali sebagai String dengan baris baru; kembali sebagai daftar String; dll. Panggilan Anda.
  • Output juga harus mengandung pembatas pilihan Anda sendiri (kecuali untuk spasi, tab, baris baru, angka atau -): Yaitu ,; dan ;dan |; dan X; dll. adalah pembatas yang dapat diterima.
  • Baris output mungkin tidak mengandung pembatas terkemuka atau akhir.
  • Output mungkin berisi SATU trailing baris baru, dan baris apa pun dapat berisi jumlah spasi tambahan.

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat, program lengkap. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
  • Juga, silakan tambahkan penjelasan jika perlu.

Kasus uji:

Input: -3,6

Output:
-3,-2,-1, 0, 1, 2, 3, 4,5,6
 2, 1, 0,-1,-2,-3,-4,-5
-1, 0, 1, 2, 3, 4
 0,-1,-2,-3
 1, 2

Input: -1,1

Output:
-1,0,1
 0

Input: -2,8

Output:
-2,-1, 0, 1, 2, 3, 4, 5, 6,7,8
 1, 0,-1,-2,-3,-4,-5,-6,-7
 0, 1, 2, 3, 4, 5, 6
-1,-2,-3,-4,-5
 2, 3, 4
-3

Input: -15,8

Output: 
-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6,7,8
 14, 13, 12, 11, 10,  9, 8, 7, 6, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7
-13,-12,-11,-10, -9, -8,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6
 12, 11, 10,  9,  8,  7, 6, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5
-11,-10, -9, -8, -7, -6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4
 10,  9,  8,  7,  6,  5, 4, 3, 2, 1, 0,-1,-2,-3
 -9, -8, -7, -6, -5, -4,-3,-2,-1, 0, 1, 2
  8,  7,  6,  5,  4,  3, 2, 1, 0,-1
 -7, -6, -5, -4, -3, -2,-1, 0
  6,  5,  4,  3,  2,  1
 -5, -4, -3, -2
  4,  3

Input: -3,15

Output:
-3,-2,-1, 0, 1, 2, 3, 4,  5, 6,  7,  8,  9, 10, 11, 12, 13,14,15
 2, 1, 0,-1,-2,-3,-4,-5, -6,-7, -8, -9,-10,-11,-12,-13,-14
-1, 0, 1, 2, 3, 4, 5, 6,  7, 8,  9, 10, 11, 12, 13
 0,-1,-2,-3,-4,-5,-6,-7, -8,-9,-10,-11,-12
 1, 2, 3, 4, 5, 6, 7, 8,  9,10, 11
-2,-3,-4,-5,-6,-7,-8,-9,-10
 3, 4, 5, 6, 7, 8, 9
-4,-5,-6,-7,-8
 5, 6, 7
-6

Input: -12,12

Output:
-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8,  9, 10,11,12
 11, 10,  9, 8, 7, 6, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11
-10, -9, -8,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10
  9,  8,  7, 6, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,-8,-9
 -8, -7, -6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8
  7,  6,  5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7
 -6, -5, -4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6
  5,  4,  3, 2, 1, 0,-1,-2,-3,-4,-5
 -4, -3, -2,-1, 0, 1, 2, 3, 4
  3,  2,  1, 0,-1,-2,-3
 -2, -1,  0, 1, 2
  1,  0, -1
  0

1
"Never outside -100-100" apakah itu termasuk tidak pernah menjadi -100 atau 100 juga?
Jonathan Allan

@ Jonathan Allan saya pikir begitu. Masuk akal tidak termasuk -100 dan 100, karena jika mereka dimasukkan, digit ke-3 / ke-4 akan ditambahkan dan semuanya akan diubah hanya untuk 2 nilai
Tn. Xcoder

Terkait (Tantangan lain di mana bantalan dan meluruskan kisi-kisi adalah komponen utama.)
Martin Ender 9'17

1
@ Jonathan Allan Saya sudah sedikit mengubah kata-katanya. Anda dapat mengasumsikan input negatif terkecil yang mungkin -99dan input positif terbesar yang mungkin 99.
Kevin Cruijssen

1
Kasus uji yang diusulkan: -3,15. Beberapa jawaban tidak berfungsi dengan baik.
betseg

Jawaban:


7

Jelly , 25 24 20 byte

rµḊṖNµÐĿZbȷG€Ỵ€Zj€”,

Ini adalah tautan diad yang mengembalikan array baris.

Cobalah online!

Bagaimana itu bekerja

rµḊṖNµÐĿZbȷG€Ỵ€Zj€”,  Dyadic link. Arguments: a, b

r                      Range; yield [a, ..., b].
 µ   µÐĿ               Apply the enclosed chain until the results are no longer
                       unique. Return the array of results.
  Ḋ                      Dequeue; remove the first item.
   Ṗ                     Pop; remove the last item.
    N                    Negate; multiply all remaining integers by -1.
       Z               Zip; transpose rows and columns.
        bȷ             Base 1000; map each n to [n].
          G€           Grid each; in each row, pad all integers to the same length,
                       separating the (singleton) rows by linefeeds.
            Ỵ€         Split each result at linefeeds.
              Z        Zip to restore the original layout.
               j€”,    Join each row, separating by commata.

7

05AB1E , 59 byte

Sekali lagi saya dikacaukan oleh bug yang sama saya menulis perbaikan selama berbulan-bulan yang lalu tetapi tidak pernah mendorong ...
Golf masih harus dimungkinkan.

Ÿ[Ðg1‹#ˆ¦(¨]\\¯vy€g}})J.Bvyð0:S})øvyZs\})U¯vyvyXNèyg-ú}',ý,

Cobalah online!


Saya sudah cukup dekat dengan ini ŸÐ',ý,gÍ;µ¦¨(D',ý,¼
:,

1
@Okx: Ya formatnya jelas bagian yang sulit di sini. Sesuatu seperti Ÿ[Ðg1‹#',ý,¦(¨akan cukup kalau tidak :)
Emigna

1
Tidak berfungsi dengan baik untuk input seperti -3,15.
betseg

@betseg: HANYA Anda. Kembali ke versi lama.
Emigna

7

Java 8, 483 480 486 467 byte

(a,b)->{int f=0,l=b-a+3,z[][]=new int[l][l],y[]=new int[l],i,j,k=0;for(;b-a>=0;k++,a++,b--,f^=1)for(j=0,i=a;i<=b;i++)z[k][j++]=f<1?i:-i;String r="",s;for(i=0;i<l;y[i++]=k)for(j=0,k=1;j<l;k=f>k?f:k)f=(r+z[j++][i]).length();for(i=0;i<l;i++){k=z[i][0];if(i>0&&k==z[i][1]&k==z[i-1][2])break;for(j=0;j<l;){k=z[i][j];s="";for(f=(s+k).length();f++<y[j];s+=" ");f=z[i][++j];if(k==f){r+=(i>0&&z[i-1][1]==z[i][1]?s+0:"")+"\n";j=l;}else r+=s+k+(f==z[i][j+1]?"":",");}}return r;}

Bytes dinaikkan karena perbaikan bug ..

Ok, ini mengambil BANYAK lebih banyak waktu (dan byte) daripada yang saya kira (di Jawa itu ..). Ini pasti bisa dipoles lagi, mungkin dengan menggunakan pendekatan yang sama sekali berbeda daripada membuat NxN grid-array untuk mengisi dan kemudian 'menghapus' nol (dengan kasus tepi yang mengganggu untuk kasus uji -1,1, serta -12,12) .

Cobalah online.

Penjelasan:

(a,b)->{        // Method with two integer parameters and String return-type
  int f=0,      //  Flag-integer, starting at 0
      l=b-a+3,  //  Size of the NxN matrix,
                //  plus two additional zeros (so we won't go OutOfBounds)
      z[][]=new int[l][l],
                //  Integer-matrix (default filled with zeros)
      y[] = new int[l],
                //  Temp integer-array to store the largest length per column
      i,j,k=0;  //  Index-integers
  for(;b-a>=0   //  Loop as long as `b-a` is not negative yet
      ;         //    After every iteration:
       k++,     //     Increase `k` by 1
       a++,     //     Increase `a` by 1
       b--,     //     Decrease `b` by 1
       f^=1)    //     Toggle the flag-integer `f` (0→1 or 1→0)
    for(j=0,i=a;i<=b;i++)
                //   Inner loop `i` in the range [`a`, `b`]
      z[k][j++]=//    Set all the values in the matrix to:
        f<1?    //     If the flag is 0:
         i      //      Simply use `i`
        :       //     Else (flag is 1):
         -i;    //      Use the negative form of `i` instead
  String r="",  //  The return-String
         s;     //  Temp-String used for the spaces
  for(i=0;i<l;  //  Loop `i` over the rows of the matrix
      ;y[i++]=k)//    After every iteration: Set the max column-width
    for(j=0,k=1;j<l;
                //   Inner loop `j` over the cells of each row
        k=f>k?f:k)
                //     After every iteration: Set `k` to the highest of `k` and `f`
      f=(r+z[j++][i]).length();
                //    Determine current number's width
                //    (NOTE: `f` is no longer the flag, so we re-use it as temp value)
  for(i=0;i<l;i++){
                //  Loop `i` over the rows of the matrix again
    k=z[i][0];  //   Set `k` to the first number of this row
    if(i>0      //   If this isn't the first row
       &&k==z[i][1]&k==z[i-1][2])
                //   and the first number of this row, second number of this row,
                //   AND third number of the previous row all equal (all three are 0)
      break;    //    Stop loop `i`
    for(j=0;j<l;){
                //   Inner loop `j` over the cells of each row
      k=z[i][j];//    Set `k` to the number of the current cell
      s="";     //    Make String `s` empty again
      for(f=(s+k).length();f++<y[j];s+=" ");
                //    Append the correct amount of spaces to `s`,
                //    based on the maximum width of this column, and the current number
      f=z[i][++j];
                //    Go to the next cell, and set `f` to it's value
      if(k==f){ //    If the current number `k` equals the next number `f` (both are 0)
        r+=     //     Append result-String `r` with:
          (i>0  //      If this isn't the first row
           &&z[i-1][1]==z[i][1]?
                //      and the second number of this and the previous rows 
                //      are the same (both are 0):
            s+0 //       Append the appropriate amount of spaces and a '0'
           :    //      Else:
            "") //       Leave `r` the same
          +"\n";//     And append a new-line
         j=l;}  //     And then stop the inner loop `j`
      else      //    Else:
       r+=s     //     Append result-String `r` with the appropriate amount of spaces
          +k    //     and the number 
          +(f==z[i][j+1]?"":",");}}
                //     and a comma if it's not the last number of the row
  return r;}    //  Return the result `r`

6

Javascript (ES6), 269 byte

(a,b,d=~a+b+2,o=Array(~~(d/2)+1).fill([...Array(d)].map(_=>a++)).map((e,i)=>e.slice(i,-i||a.a)).map((e,i)=>i%2==0?e:e.map(e=>e*-1)))=>o.map(e=>e.map((e,i)=>' '.repeat(Math.max(...[...o.map(e=>e[i]).filter(e=>e!=a.a)].map(e=>[...e+''].length))-`${e}`.length)+e)).join`
`

Dijelaskan:

(                                     // begin arrow function

  a,b,                                // input

  d=~a+b+2,                           // distance from a to b

  o=Array(~~(d/2)+1)                  // create an outer array of
                                      // (distance divided by 2 
                                      // floored + 1) length

    .fill(                            // fill each outer element
                                      // with the following:

      [...Array(d)]                   // create inner array of the 
                                      // distance length and 
                                      // fill with undefined

        .map(_=>a++)                  // map each inner element 
                                      // iterating from a to b
    ) 
    .map(                             // map outer array

      (e,i)=>e.slice(i,-i||a.a)       // remove n elements from each end 
                                      // of the inner array corresponding 
                                      // to the outer index with a special 
                                      // case of changing 0 to undefined
    )
    .map(                             // map outer array

      (e,i)=>i%2==0?e:e.map(e=>e*-1)  // sign change the inner elements
                                      // in every other outer element
    )
)=>                                   // arrow function return

  o                                   // outer array

    .map(                             // map outer array

      e=>e.map(                       // map each inner array

        (e,i)=>' '.repeat(            // repeat space character the
                                      // following amount:

          Math.max(...                // spread the following array to
                                      // max arguments:

            [...                      // spread the following to an
                                      // array:

              o                       // outer array

                .map(e=>e[i])         // map returning each element of
                                      // the same inner index from the
                                      // outer array

                .filter(e=>e!=a.a)    // remove undefined elements
            ]
            .map(e=>[...e+''].length) // map each element to the  
                                      // length of the string

          )                           // returns the max string 
                                      // length of each column

          -`${e}`.length              // subtract the current 
                                      // element's string length 
                                      // from the max string length

      )                               // returns the appropriate amount
                                      // of padding

      +e                              // add the element to the padding
    )
  ).join`
`                                     // join each element of outer
                                      // array as string with newline

const f = (a,b,d=~a+b+2,o=Array(~~(d/2)+1).fill([...Array(d)].map(_=>a++)).map((e,i)=>e.slice(i,-i||a.a)).map((e,i)=>i%2==0?e:e.map(e=>e*-1)))=>o.map(e=>e.map((e,i)=>' '.repeat(Math.max(...[...o.map(e=>e[i]).filter(e=>e!=a.a)].map(e=>[...e+''].length))-`${e}`.length)+e)).join`
`
console.log('Test Case: -1,1')
console.log(f(-1,1))
console.log('Test Case: -3,6')
console.log(f(-3,6))
console.log('Test Case: -2,8')
console.log(f(-2,8))
console.log('Test Case: -15,8')
console.log(f(-15,8))
console.log('Test Case: -3,15')
console.log(f(-3,15))
console.log('Test Case: -12,12')
console.log(f(-12,12))


Bisakah Anda menambahkan test case baru?
betseg

4

QBIC , 46 byte

::[0,-1*a+b,2|[a,b|?d*q';`]q=q*-1┘a=a+1┘b=b-1?

Bagaimana itu bekerja:

::           Read the negative and positive ints as a and b
[0,-1*a+b,2| FOR(c = 0; c < range(a, b); c+=2) {} This creates the proper amount of lines.
  [a,b|      For each line, loop from lower to upper
    ?d*q     Print the current point in the range, accounting for the sign-switch
     ';`     And suppress newlines. The ' and ` stops interpreting special QBIC commands.
  ]          NEXT line
  q=q*-1┘    Between the lines, flip the sign-flipper
  a=a+1┘     Increase the lower bound
  b=b-1?     Decrease the upper bound, print a newline
             The outermost FOR loop is auto-closed at EOF.

Untungnya, ketika mencetak nomor, QBasic secara otomatis menambahkan padding yang diperlukan.


Kasus lain untuk menemukan bahasa yang tepat untuk melakukan pekerjaan itu :) +1
ElPedro

+1 Apakah ada kompiler online untuk QBIC yang tersedia? Saya ingin melihatnya beraksi untuk semua kasus uji (meskipun saya mengambil kata Anda itu menyelaraskan semuanya). Pertama kali saya melihat QBIC, jadi dua pertanyaan ketika saya membaca penjelasan Anda: Jika saya membacanya dengan benar q, nilai default dimulai dari 1? Apakah semua nilai dalam QBIC mulai dari 1, atau ada sesuatu yang saya lewatkan di sini? Dan apa d/ di mana melakukan dberdiri untuk? Atau apakah dnomor saat ini dalam loop dan ?hanya perlu dibatasi dalam kode for-loop (bukan ?nomor saat ini, yang merupakan cara saya awalnya membacanya)?
Kevin Cruijssen

1
@KevinCruijssen Belum ada juru bahasa online, maaf. Saya sedang mengerjakan satu, tetapi ini lebih sulit daripada yang Anda pikirkan untuk menjalankan QBasic 4.5 di browser Anda :-). qdimulai pada 1. Semua huruf kecil adalah vars angka dan huruf q-zdiinisialisasi ke 1-10. Dan beberapa perintah menetapkan nomor secara otomatis dalam urutan yang ditemukan dalam kode. dmemang merupakan iterator pada for-loop bagian dalam. Untuk lebih jelasnya, lihat juga showcase - atau ini
steenbergh

3

Perl 6 , 146 byte

{$_:=(($^a..$^b).List,{-«.[1..*-2]}...3>*).List;$/:=[map {"%{.max}s"},roundrobin($_)».chars];map {join ',',map {$^a.fmt: $^b},flat($_ Z $/)},$_}

Cobalah

Menghasilkan urutan string

Diperluas:

{  # bare block lambda with placeholder parameters 「$a」 and 「$b」

  # generate the data
  $_ := (                 # bind to $_ so it isn't itemized

                          # produce a sequence
    ( $^a .. $^b ).List,  # seed the sequence, and declare parameters
    { \ .[ 1 .. *-2 ] } # get all the values except the ends and negate
    ...                   # keep producing until
    3 > *                 # the length of the produced list is less than 3

  ).List;                 # turn the Seq into a List


  # generate the fmt arguments
  $/ := [                 # bind an array to 「$/」 so it isn't a Seq
    map
      { "%{ .max }s" },   # turn into a 「.fmt」 argument ("%2s")

      roundrobin($_)\     # turn the "matrix" 90 degrees
      ».chars             # get the string length of each number
  ];


  # combine them together
  map
    {
      join ',',
        map
          { $^a.fmt: $^b }, # pad each value out
          flat(
            $_ Z $/         # zip the individual number and it's associated fmt
          )
    },
    $_                      # map over the data generated earlier
}

3

PHP 7.1, 277 Bytes

for([,$a,$b]=$argv,$c=count($r=range($a,$b))/2;$c-->0;$r=range(-$r[1],-$r[count($r)-2]))$y[]=array_map(strlen,$x[]=$r);for($i=0;$i<count($y[0]);$i++)$z[$i]=max(array_column($y,$i));foreach($x as $g){$o=[];foreach($g as$k=>$v)$o[]=sprintf("%$z[$k]d",$v);echo join(",",$o)."\n";}

Penerjemah Online


2
Bisakah Anda menautkan penerjemah online?
betseg

@betseg Selesai dan sadari bahwa versi saya tidak bekerja dengan benar
Jörg Hülsermann

oh Tuhan hanya menggunakan php di codegolf.se. MEMILIKI SEMUA PERBAIKAN.
Evan Carroll

3

Aplikasi konsol C # 196 Bytes

static void p(int a,int b){string S="",d ="";int c=-1;for(int i=b;i >=a;i--){c=c==1?c=-1:c=1;for(int j = a;j<=i;j++){S=j!=a?",":S="";d=d+S+(j*c);}d+= "\r\n";a++;}Console.Write(d);Console.Read();}

Selamat datang di PPCG! Anda dapat membuat indentasi kode Anda menggunakan 4 spasi (lihat edit saya). Dalam golf kode, Anda harus memiliki byte-count terpendek (jumlah byte dalam kode Anda) yang mungkin - itu berarti nama variabel lebih pendek, dan penghapusan spasi. Juga, Anda harus memasukkan byte-count Anda di header Anda setelah selesai.
clismique

2

Javascript - 196 185 176 bytes

function f(i,j){l=[];for(x=i;x<j+1;x++)l.push(x);h='<table>';while(l.length>0){h+='<tr>';for(x=0;x<l.length;x++){h+='<td align=right>'+l[x];l[x]*=-1}l.shift();l.pop()}return h}

Saya tidak terlalu cepat dengan beberapa teknik JS baru jadi ini mungkin bisa bermain golf lebih banyak.

Cukup membuat tabel HTML kuno yang bagus tanpa lebar yang ditentukan untuk sel sehingga baris pertama default untuk lebar setiap entri dengan jarak optimal yang padat. Itu juga (ab) menggunakan "fitur" HTML yang tidak memerlukan tag penutup jika tag pembuka baru muncul terlebih dahulu.

<script>
function f(i,j){l=[];for(x=i;x<j+1;x++)l.push(x);h='<table>';while(l.length>0){h+='<tr>';for(x=0;x<l.length;x++){h+='<td align=right>'+l[x];l[x]*=-1}l.shift();l.pop()}return h}
document.write(f(-1,1))
</script>

<script>
function f(i,j){l=[];for(x=i;x<j+1;x++)l.push(x);h='<table>';while(l.length>0){h+='<tr>';for(x=0;x<l.length;x++){h+='<td align=right>'+l[x];l[x]*=-1}l.shift();l.pop()}return h}
document.write(f(-3,6))
</script>

<script>
function f(i,j){l=[];for(x=i;x<j+1;x++)l.push(x);h='<table>';while(l.length>0){h+='<tr>';for(x=0;x<l.length;x++){h+='<td align=right>'+l[x];l[x]*=-1}h+='</tr>';l.shift();l.pop()}return h}
document.write(f(-2,8))
</script>

<script>
function f(i,j){l=[];for(x=i;x<j+1;x++)l.push(x);h='<table>';while(l.length>0){h+='<tr>';for(x=0;x<l.length;x++){h+='<td align=right>'+l[x];l[x]*=-1}h+='</tr>';l.shift();l.pop()}return h}
document.write(f(-15,8))
</script>

<script>
function f(i,j){l=[];for(x=i;x<j+1;x++)l.push(x);h='<table>';while(l.length>0){h+='<tr>';for(x=0;x<l.length;x++){h+='<td align=right>'+l[x];l[x]*=-1}h+='</tr>';l.shift();l.pop()}return h}
document.write(f(-3,15))
</script>

<script>
function f(i,j){l=[];for(x=i;x<j+1;x++)l.push(x);h='<table>';while(l.length>0){h+='<tr>';for(x=0;x<l.length;x++){h+='<td align=right>'+l[x];l[x]*=-1}h+='</tr>';l.shift();l.pop()}return h}
document.write(f(-12,12))
</script>


2

Python 2 - 208 byte

Cobalah online

d,u=input()
l=[x for x in range(d,u+1)]
M=map(lambda x:~9<x<21-u-u%2and 2or 3,l)
M[-1]-=1
M[-2]-=1
while len(l)>0:print','.join(map(lambda i:('%'+'%d'%M[i]+'d')%l[i],range(len(l))));l=map(lambda e:-e,l[1:-1])

Membuat array nilai padding dan kemudian menggunakannya untuk membangun string formated yang dibutuhkan

Penjelasan:

d,u=input()
# create list of all values
l=[x for x in range(d,u+1)]
# create array of padding values
# by default, padding 2 used for numbers in [-9;9] and 3 for all other (limited with -99 and 99)
# but contracting list moves numbers larger that 9 under ones, that are <=9
# so upper limit of padding 2 is limited with 21-u-u%2
# (~9 == -10)
M=map(lambda x:~9<x<21-u-u%2and 2or 3,l)
# last two elements should have lower padding as there won't be any other numbers it their columns
M[-1]-=1
M[-2]-=1
while len(l)>0:
    # create formatted string for every element in l
    # join all strings with comma
    print','.join(map(lambda i:('%'+'%d'%M[i]+'d')%l[i],range(len(l))))
    # get slice without first and last element and change sigh
    l=map(lambda e:-e,l[1:-1])

Hai, selamat datang di PPCG! Sayangnya, saat ini tidak benar. Anda telah menambahkan margin yang sama ke semua angka, serta menambahkan spasi sebagai pembatas. Tantangannya adalah menggunakan pembatas pilihan Anda (kecuali spasi putih), tetapi yang lebih penting: memiliki penyelarasan berdasarkan angka dengan lebar terbesar di kolom tertentu. Silakan lihat bagian Penting dari tantangan, serta contoh-contoh pengujian sebagai contoh. Anda bukan orang pertama yang salah melakukannya, tetapi saat ini tidak valid dengan tantangan yang ditentukan. Jangan ragu untuk menghapus, memodifikasi untuk mematuhi aturan, dan membatalkan penghapusan jawaban Anda
Kevin Cruijssen

2
@KevinCruijssen Terima kasih telah menunjukkan ini! Saya telah memperbarui jawaban saya
Dead Possum

1
Itu memang terlihat jauh lebih baik! Hanya satu aturan kecil yang Anda lupa: " Outputnya mungkin juga mengandung pembatas pilihan Anda sendiri (kecuali untuk spasi putih dan baris baru) : Yaitu ,dan ;dan |semua pembatas yang dapat diterima. " Saat ini Anda menggunakan spasi sebagai pembatas. Namun kesulitan utama dari lebar memang telah diatasi, jadi sejauh ini Anda melakukan yang terbaik! Hanya perubahan kecil ini, dan kemudian itu harus dilakukan. :)
Kevin Cruijssen

1
Sempurna! +1 Pekerjaan bagus mengoreksi semuanya. Dan sekali lagi selamat datang di PPCG. (Btw, apakah ada ruang di sini: %l[i], rangewajib?)
Kevin Cruijssen

2
@KevinCruijssen Saya berharap untuk bertahan di PPCG untuk sementara waktu, sepertinya sangat menarik (tidak, disimpan satu byte lagi)
Dead Possum
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.