최소한의 패딩으로 부호 변경, 루프 및 표시


17

입력:

두 개의 정수 : 하나의 음수, 하나의 양수.

산출:

첫 번째 라인에서 최저에서 최고로 출력합니다. 두 번째 줄에서 가장 높은 숫자와 가장 낮은 숫자를 제거하고 모든 개별 숫자를 부호 변경했습니다 . 세 번째 줄에서 가장 높은 숫자와 가장 낮은 숫자를 다시 제거하고 모든 개별 숫자를 다시 서명했습니다. 등 (아래 예는 문제를보다 명확하게해야합니다.)

중요 : 또한 공백을 추가하여 열의 숫자가 모두 오른쪽에 정렬되도록합니다.
최소 정렬은 이 과제 의 주요 부분이므로 모든 단일 숫자를 동일한 너비로 만들 수는 없습니다. 열의 너비는 해당 열의 가장 큰 수 너비를 기반으로합니다 (그리고 부호 변경 순서는 숫자에 따라 열당 너비가 다양 함).


예를 들면 다음과 같습니다.

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

위에서 볼 수 있듯이, 공백이 음수를 갖는 열을 공유 할 때 양수로 추가됩니다 -(2 자리 숫자에도 동일 함).

도전 규칙 :

  • 입력은 2 개의 정수 여야합니다
    • 이 정수가 -99- 99(포함) 범위 에 있다고 가정 할 수 있습니다 .
    • 첫 번째 정수는 음수이고 다른 정수는 양수입니다.
  • 행과 열이 올바르게 정렬되어 있으면 출력 형식이 합리적 일 수 있습니다. Ie STDOUT; 줄 바꿈을 사용하여 문자열로 반환; 문자열 목록으로 리턴; 등. 당신의 전화.
  • 출력에는 또한 사용자가 선택한 구분 기호가 포함되어야합니다 (공백, 탭, 줄 -바꾸기 , 숫자 또는 제외) : Ie ,; 과 ;|; 그리고 X; 등은 모두 허용 가능한 구분 기호입니다.
  • 출력 라인에는 선행 또는 후행 구분 기호가 포함되지 않을 수 있습니다.
  • 출력에는 하나의 후행 줄 바꿈이 포함될 수 있으며 모든 줄에는 여러 개의 후행 공백이 포함될 수 있습니다.

일반 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하지 마십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수가있는 기능 / 방법, 전체 프로그램을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다.
  • 가능하면 코드 테스트 링크를 추가하십시오.
  • 또한 필요한 경우 설명을 추가하십시오.

테스트 사례 :

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
"100-100을 벗어난 적이 없다"는 것도 -100이나 100도 포함하지 않습니까?
Jonathan Allan

@JonathanAllan 그렇게 생각합니다. -100과 100을 제외하는 것이 합리적입니다. 포함 된 경우
3/4/4

관련. (패딩 및 오른쪽 맞춤 그리드가 주요 구성 요소 인 또 다른 과제)
Martin Ender

1
@JonathanAllan 나는 문구를 조금 변경했습니다. 가능한 가장 작은 음의 입력이 -99있고 가장 큰 가능한 양의 입력이 있다고 가정 할 수 있습니다 99.
Kevin Cruijssen

1
제안 된 테스트 사례 : -3,15. 일부 답변이 제대로 작동하지 않습니다.
betseg

답변:


7

젤리 , 25 24 20 바이트

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

이것은 행 배열을 반환하는 2 진 링크입니다.

온라인으로 사용해보십시오!

작동 원리

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 바이트

다시 한 번 나는 몇 달 전에 픽스를 썼지 만 결코 밀리지 않은 것과 같은 버그로 망쳤습니다
. 그래도 골프는 가능해야합니다.

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

온라인으로 사용해보십시오!


나는 이것에 꽤 가까워 ŸÐ',ý,gÍ;µ¦¨(D',ý,¼
졌다

1
@Okx : 예, 포맷은 확실히 어려운 부분입니다. 같은 뭔가 Ÿ[Ðg1‹#',ý,¦(¨: 그렇지 않으면 충분하다
Emigna

1
-3,15와 같은 입력에 대해 제대로 작동하지 않습니다.
betseg

@betseg : 엄청나게. 이전 버전으로 되돌 렸습니다.
Emigna

7

자바 8, 483 480 486 467 바이트

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

버그 수정으로 인한 바이트 ..

좋아,이 걸렸다 많은에게 내가 생각했던 것보다 더 많은 시간 (바이트) (자바에서를 ..). 이것은 확실히 (의 테스트 케이스에 대한 성가신 가장자리 케이스와 아마 완전히 다른 접근 방식을 사용하는 대신 0을 '빼내야'다음 채우기 위해에서는 N × N 그리드 배열을 생성하고하여 좀 더 golfed 할 수 있습니다 -1,1뿐만 아니라 같이 -12,12) .

온라인으로 사용해보십시오.

설명:

(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

자바 스크립트 (ES6), 269 바이트

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

설명 :

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


새로운 테스트 사례를 추가 할 수 있습니까?
betseg

4

QBIC , 46 바이트

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

작동 방식 :

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

다행히도 숫자를 인쇄 할 때 QBasic은 필요한 패딩을 자동으로 추가합니다.


일을하기에 적합한 언어를 찾는 또 하나의 사례 :) +1
ElPedro

+1 QBIC 용 온라인 컴파일러가 있습니까? 모든 테스트 사례에서 실제로 사용하고 싶습니다 (모든 단어를 자동 정렬하지만 단어를 사용하더라도). 처음 QBIC이 표시되므로 설명을 읽을 때 두 가지 질문이 있습니다. 올바르게 읽으면 q기본값이 1에서 시작합니까? QBIC의 모든 값이 1에서 시작합니까, 아니면 여기에 빠진 것이 있습니까? 그리고 무엇 d않습니다 / d스탠드는? 아니면 d루프의 현재 숫자와 ?for 루프의 코드에서 필요한 숫자가 구분되어 ?있습니까 (현재 숫자 대신에 처음 읽은 방법)?
Kevin Cruijssen

1
@KevinCruijssen 아직 온라인 통역사가 없습니다. 죄송합니다. 나는 하나에서 일하고 있지만 브라우저에서 QBasic 4.5를 실행하는 것이 생각보다 어렵습니다 :-). q1에서 시작합니다. 모든 소문자는 숫자 변수이며 문자 q-z는로 초기화됩니다 1-10. 그리고 여러 명령은 코드에서 찾은 순서대로 번호를 자동 할당합니다. d실제로 내부 FOR 루프의 반복자입니다. 자세한 내용은 참조 쇼케이스 나 -
steenbergh

3

펄 6 , 146 바이트

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

시도 해봐

일련의 문자열을 생성합니다

넓히는:

{  # 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 바이트

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

온라인 통역


2
온라인 통역사를 연결할 수 있습니까?
betseg

@betseg 완료하고 내 버전이 제대로 작동하지 않음을 인식
Jörg Hülsermann

codegolf.se에서 PHP를 사용하는 것이 좋습니다. 모든 찬송가를 가지고 있습니다.
Evan Carroll

3

C # 콘솔 응용 프로그램 196 바이트

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

PPCG에 오신 것을 환영합니다! 4 개의 공백을 사용하여 코드를 들여 쓸 수 있습니다 (편집 참조). 코드 골프에서는 가능한 짧은 바이트 수 (코드의 바이트 수)가 있어야합니다. 즉, 변수 이름이 짧고 공백이 제거됩니다. 또한 완료되면 바이트 수를 헤더에 넣어야합니다.
clismique

2

자바 - 196 185 176 바이트

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}

나는 새로운 JS 기술 중 일부를 실제로 사용하지 않기 때문에 아마도 훨씬 더 골프를 칠 수 있습니다.

셀에 너비가 정의되지 않은 좋은 구식 HTML 테이블을 만들면 첫 번째 행의 기본값은 각 항목의 너비가 최적의 간격으로 설정됩니다. 또한 새로운 시작 태그가 먼저 나오는 경우 닫기 태그를 요구하지 않는 HTML의 "기능"을 사용합니다.

<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

파이썬 2-208 바이트

온라인으로 사용해보십시오

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

패딩 값의 배열을 작성한 다음이를 사용하여 필요한 형식화 된 문자열을 구성합니다.

설명:

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

안녕하세요, PPCG에 오신 것을 환영합니다! 불행히도 현재 올바르지 않습니다. 모든 숫자에 동일한 여백을 추가하고 공백을 구분 기호로 추가했습니다. 문제는 선택한 구분 기호 (공백 제외)를 사용하는 것이었지만 더 중요한 것은 특정 열에서 너비가 가장 큰 숫자를 기준으로 정렬하는 것입니다. 챌린지 의 중요 섹션과 테스트 사례를 참조하십시오 . 당신은 그것을 잘못한 첫 번째 사람은 아니지만 현재 지정된 도전에 대해 유효하지 않습니다. 자유롭게 삭제하고 규칙을 준수하도록 수정 한 후 답을 삭제 취소하십시오.
Kevin Cruijssen

2
@KevinCruijssen 이것을 지적 해 주셔서 감사합니다! 내 답변을 업데이트했습니다
Dead Possum

1
실제로 훨씬 좋아 보인다! 하나의 작은 규칙은 잊었다 " 출력은 또한 자신의 선택의 구분 기호를 포함 할 수 있습니다 (공백과 새로운 라인을 제외하고) : 즉 ,;|모든 허용 구분 기호입니다. "현재는 구분 기호로 공간을 사용합니다. 그러나 너비의 주요 어려움은 실제로 해결되었으므로 지금까지 큰 성과를 거두고 있습니다! 이 작은 변화 만 수행해야합니다. :)
Kevin Cruijssen

1
완전한! +1 모든 것을 수정하는 것이 좋습니다. 그리고 다시 PPCG에 오신 것을 환영합니다. (Btw, 여기에 공간이 %l[i], range필요합니까?)
Kevin Cruijssen

2
@KevinCruijssen 나는 잠시 동안 PPCG를 고수하기를 희망합니다. 매우 흥미로워 보입니다 (아닙니다, 1 바이트를 더 절약했습니다)
Dead Possum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.