Thay đổi dấu hiệu, vòng lặp và hiển thị với phần đệm tối thiểu


17

Đầu vào:

Hai số nguyên: một số âm, một số dương.

Đầu ra:

Trên đầu ra dòng đầu tiên thấp nhất đến cao nhất. Trên dòng thứ hai, chúng tôi đã xóa các số cao nhất và thấp nhất và thay đổi tất cả các số riêng lẻ. Trên dòng thứ ba, chúng tôi đã loại bỏ các số cao nhất và thấp nhất một lần nữa và thay đổi lại tất cả các số riêng lẻ. vv (Ví dụ dưới đây sẽ làm cho thách thức rõ ràng hơn.)

Quan trọng: Ngoài ra, chúng tôi thêm khoảng trắng để các số trong một cột được căn chỉnh tất cả (bên phải).
Căn chỉnh tối thiểu là phần chính của thử thách này, điều này có nghĩa là bạn không thể tạo mọi số đơn lẻ có cùng chiều rộng. Độ rộng của một cột dựa trên chiều rộng số lớn nhất của cột cụ thể đó (và chuỗi có thay đổi ký hiệu là cung cấp cho các số một số chiều rộng khác nhau trên mỗi cột).


Ví dụ:

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

Như bạn có thể thấy ở trên, khoảng trắng được thêm vào các số dương, khi chúng chia sẻ một cột với các số âm để bù cho -(các số tương tự sẽ áp dụng cho các số có 2 chữ số).

Quy tắc thử thách:

  • Đầu vào phải là hai số nguyên
    • Bạn có thể giả sử các số nguyên này nằm trong phạm vi -99- 99(bao gồm).
    • Số nguyên đầu tiên sẽ là số âm và số còn lại sẽ dương.
  • Đầu ra có thể ở bất kỳ định dạng hợp lý nào, miễn là rõ ràng có các hàng và các cột được căn chỉnh chính xác: Tức là STDOUT; trở lại dưới dạng Chuỗi với dòng mới; trở lại như danh sách các Chuỗi; vv Cuộc gọi của bạn.
  • Đầu ra cũng phải chứa một dấu phân cách của sự lựa chọn của riêng bạn (ngoại trừ khoảng trắng, tab, dòng mới, chữ số hoặc -): Tức là ,; và ;|; và X; vv là tất cả các dấu phân cách chấp nhận được.
  • Các dòng đầu ra có thể không chứa một dấu phân cách hàng đầu hoặc dấu.
  • Đầu ra có thể chứa MỘT dòng mới, và bất kỳ dòng nào cũng có thể chứa bất kỳ số lượng dấu cách nào.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp, các chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
  • Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.

Các trường hợp thử nghiệm:

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
"Không bao giờ nằm ​​ngoài -100-100" có bao gồm không bao giờ là -100 hoặc 100 không?
Jonathan Allan

@Jonathan Allan Tôi nghĩ vậy. Điều này có ý nghĩa loại trừ -100 và 100, bởi vì nếu chúng được bao gồm, một chữ số 3/4 sẽ được thêm vào và mọi thứ sẽ được thay đổi chỉ với 2 giá trị
Ông Xcoder

Liên quan. (Một thách thức khác trong đó việc đệm và sắp xếp đúng lưới là thành phần chính.)
Martin Ender

1
@Jonathan ALLan Tôi đã thay đổi từ ngữ một chút. Bạn có thể giả sử đầu vào tiêu cực nhỏ nhất có thể là -99và đầu vào tích cực lớn nhất có thể là 99.
Kevin Cruijssen

1
Trường hợp thử nghiệm đề xuất: -3,15. Một số câu trả lời không hoạt động đúng.
betseg

Câu trả lời:


7

Thạch , 25 24 20 byte

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

Đây là một liên kết dyadic trả về một mảng các hàng.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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

Một lần nữa, tôi lại gặp phải lỗi tương tự. Tôi đã viết một bản sửa lỗi trong nhiều tháng trước nhưng chưa bao giờ đẩy ...
Chơi gôn vẫn có thể xảy ra.

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

Hãy thử trực tuyến!


Tôi đã khá gần với điều này ŸÐ',ý,gÍ;µ¦¨(D',ý,¼
:,

1
@Okx: Vâng, định dạng chắc chắn là phần khó khăn ở đây. Một cái gì đó như thế Ÿ[Ðg1‹#',ý,¦(¨là đủ nếu không :)
Emigna

1
Không hoạt động đúng cho các đầu vào như -3,15.
betseg

@betseg: Bạn là ai. Hoàn nguyên trở lại phiên bản cũ.
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 tăng do lỗi-sửa chữa ..

Ok, điều này mất RẤT NHIỀU thời gian hơn (và byte) hơn tôi nghĩ (trong Java có nghĩa là ..). Điều này chắc chắn có thể được đánh gôn thêm, có thể bằng cách sử dụng một cách tiếp cận hoàn toàn khác thay vì tạo một mảng lưới NxN để điền vào và sau đó 'loại bỏ' các số không (với trường hợp cạnh khó chịu cho trường hợp thử nghiệm -1,1, cũng như -12,12) .

Hãy thử trực tuyến.

Giải trình:

(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`
`

Giải thích:

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


Bạn có thể thêm các trường hợp thử nghiệm mới?
betseg

4

QBIC , 46 byte

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

Làm thế nào nó hoạt động:

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

May mắn thay, khi in một số, QBasic tự động thêm phần đệm cần thiết.


Một trường hợp khác về việc tìm đúng ngôn ngữ để thực hiện công việc :) +1
ElPedro

+1 Có trình biên dịch trực tuyến cho QBIC không? Tôi muốn thấy nó hoạt động cho tất cả các trường hợp thử nghiệm (mặc dù tôi hiểu từ của bạn nó tự động căn chỉnh mọi thứ). Lần đầu tiên tôi nhìn thấy QBIC, vì vậy hai câu hỏi khi tôi đọc lời giải thích của bạn: Nếu tôi đọc chính xác qgiá trị mặc định của nó bắt đầu từ 1? Có phải tất cả các giá trị trong QBIC bắt đầu từ 1 hoặc có điều gì tôi đang thiếu ở đây không? Và cái d/ dđứng ở đâu là gì? Hoặc là dsố hiện tại trong vòng lặp và ?chỉ đơn giản là một giới hạn cần thiết trong mã của vòng lặp for (thay vì ?là số hiện tại, đó là cách ban đầu tôi đọc nó)?
Kevin Cruijssen

1
@KevinCruijssen Chưa có thông dịch viên trực tuyến, xin lỗi. Tôi đang làm việc trên một, nhưng khó hơn bạn nghĩ để chạy QBasic 4.5 trong trình duyệt của bạn :-). qbắt đầu từ 1. Tất cả các chữ cái viết thường là số vars và các chữ cái q-zđược khởi tạo 1-10. Và một số lệnh tự động gán số theo thứ tự chúng được tìm thấy trong mã. dthực sự là trình vòng lặp trên vòng lặp FOR bên trong. Để biết thêm chi tiết, xem thêm phần giới thiệu - hoặc cái này
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 $/)},$_}

Thử nó

Tạo ra một chuỗi các chuỗi

Mở rộng:

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

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

Phiên dịch trực tuyến


2
Bạn có thể liên kết một thông dịch viên trực tuyến?
betseg

@betseg Xong và nhận ra rằng phiên bản của tôi đã không hoạt động chính xác
Jörg Hülsermann

oh gawd chỉ sử dụng php trên codegolf.se. CÓ TẤT CẢ CÁC UPVOTES.
Evan Carroll

3

Ứng dụng bảng điều khiển C # 196 byte

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

Chào mừng đến với PPCG! Bạn có thể thụt mã của mình bằng 4 dấu cách (xem phần chỉnh sửa của tôi). Trong mã golf, bạn cần có số byte ngắn nhất (số lượng byte trong mã của bạn) có thể - có nghĩa là tên biến ngắn hơn và loại bỏ khoảng trắng. Ngoài ra, bạn nên đặt số byte của bạn trong tiêu đề của bạn sau khi hoàn thành.
clismique

2

Javascript - 196 185 176 byte

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}

Tôi không thực sự bắt kịp với một số kỹ thuật JS mới hơn nên có thể chơi golf nhiều hơn nữa.

Đơn giản chỉ cần tạo một bảng HTML kiểu cũ tốt, không có chiều rộng được xác định cho các ô để hàng đầu tiên mặc định theo chiều rộng của mỗi mục nhập có khoảng cách tối ưu. Nó cũng (ab) sử dụng "tính năng" của HTML là không yêu cầu đóng thẻ nếu thẻ mở mới xuất hiện trước.

<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

Dùng thử trực tuyến

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

Tạo mảng các giá trị đệm và sau đó sử dụng nó để xây dựng các chuỗi được định dạng cần thiết

Giải trình:

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

Xin chào, chào mừng đến với PPCG! Thật không may, hiện tại nó không chính xác. Bạn đã thêm cùng một lề cho tất cả các số, cũng như thêm khoảng trắng làm dấu phân cách. Thách thức là sử dụng một dấu phân cách bạn chọn (trừ khoảng trắng), nhưng quan trọng hơn: có sự căn chỉnh dựa trên số có chiều rộng lớn nhất trong cột cụ thể đó. Vui lòng xem phần Quan trọng của thử thách, cũng như các trường hợp thử nghiệm làm ví dụ. Bạn không phải là người đầu tiên làm điều đó không chính xác, nhưng hiện tại nó không hợp lệ với thử thách được chỉ định. Vui lòng xóa, sửa đổi để tuân thủ các quy tắc và hủy bỏ câu trả lời của bạn
Kevin Cruijssen 17/03/2017

2
@KevinCruijssen Cảm ơn bạn đã chỉ ra điều này! Tôi đã cập nhật câu trả lời của mình
Dead Possum

1
Điều đó thực sự trông tốt hơn rất nhiều! Chỉ có một nguyên tắc nhỏ bạn quên: " Sản lượng cũng có thể chứa một dấu phân cách của sự lựa chọn của riêng bạn (trừ khoảng trắng và mới-lines) : Ie ,;|tất cả đều delimiters chấp nhận được. " Hiện nay bạn sử dụng một không gian như delimiter. Nhưng khó khăn chính của chiều rộng thực sự đã được khắc phục, vì vậy bạn đang làm rất tốt! Chỉ thay đổi nhỏ này, và sau đó nó nên được thực hiện. :)
Kevin Cruijssen 17/03/2017

1
Hoàn hảo! +1 Công việc tốt sửa mọi thứ. Và một lần nữa chào mừng bạn đến với PPCG. (Btw, là không gian ở đây: %l[i], rangebắt buộc phải không?)
Kevin Cruijssen 17/03/2017

2
@KevinCruijssen Tôi hy vọng sẽ gắn bó với PPCG trong một thời gian, nó có vẻ rất thú vị (không, đã lưu thêm một byte)
Dead Possum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.