Zmiana znaku, zapętlenie i wyświetlanie przy minimalnym wypełnieniu

17

Wejście:

Dwie liczby całkowite: jedna ujemna, jedna dodatnia.

Wynik:

W pierwszym wierszu wyjście od najniższego do najwyższego. W drugim wierszu usunęliśmy najwyższe i najniższe liczby i zmieniliśmy wszystkie indywidualne liczby. W trzecim wierszu ponownie usunęliśmy najwyższe i najniższe liczby i ponownie zmieniliśmy wszystkie indywidualne liczby. itp. (Poniższy przykład powinien wyjaśnić wyzwanie.)

Ważne: Ponadto dodajemy spacje, aby wszystkie liczby w kolumnie były wyrównane (po prawej).
Minimalne wyrównanie jest główną częścią tego wyzwania, co oznacza, że ​​nie można po prostu ustawić każdej liczby tej samej szerokości. Szerokość kolumny jest oparta na największej szerokości liczbowej w tej konkretnej kolumnie (a sekwencja ze zmianą znaku ma dać liczbom pewną różnorodność szerokości na kolumnę).


Na przykład:

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

Jak widać powyżej, spacje są dodawane do liczb dodatnich, gdy dzielą kolumnę z liczbami ujemnymi, aby to zrekompensować -(to samo dotyczy liczb 2-cyfrowych).

Zasady konkursu:

  • Dane wejściowe muszą być dwiema liczbami całkowitymi
    • Możesz założyć, że te liczby całkowite są w zakresie -99- 99(włącznie).
    • Pierwsza liczba całkowita będzie ujemna, a druga będzie dodatnia.
  • Dane wyjściowe mogą być w dowolnym rozsądnym formacie, o ile jest jasne, że są wiersze i odpowiednio wyrównane kolumny: Tj. STDOUT; powrót jako ciąg znaków z nowymi liniami; powrót jako lista ciągów; itp. Twoje połączenie.
  • Wyjście musi również zawierać ogranicznik własnego wyboru (z wyjątkiem spacji, tabulacji, nowych linii, cyfr lub -): Ie ,; i ;i |; i X; itd. są akceptowalnymi ogranicznikami.
  • Linie wyjściowe nie mogą zawierać ogranicznika wiodącego ani końcowego.
  • Dane wyjściowe mogą zawierać JEDNĄ końcową linię nowego wiersza, a dowolny wiersz może zawierać dowolną liczbę końcowych spacji.

Główne zasady:

  • To jest , więc wygrywa najkrótsza odpowiedź w bajtach.
    Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania.
  • Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami, pełnych programów. Twoja decyzja.
  • Domyślne luki są zabronione.
  • Jeśli to możliwe, dodaj link z testem swojego kodu.
  • W razie potrzeby dodaj również wyjaśnienie.

Przypadki testowe:

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
Kevin Cruijssen
źródło
1
„Nigdy poza -100-100”, czy to oznacza, że ​​nigdy nie jest -100 lub 100?
Jonathan Allan
@JonathanAllan Myślę, że tak. Sensowne jest wykluczenie -100 i 100, ponieważ gdyby zostały uwzględnione, dodana zostanie trzecia / czwarta cyfra i wszystko zmieniłoby się tylko dla 2 wartości
Mr. Xcoder
Związane z. (Kolejne wyzwanie, w którym wypełnienie i wyrównywanie siatki jest głównym elementem).
Martin Ender
1
@JonathanAllan Zmieniłem nieco sformułowanie. Możesz założyć, że najmniejszy możliwy ujemny wkład jest, -99a największy możliwy dodatni jest 99.
Kevin Cruijssen,
1
Proponowany przypadek testowy: -3,15. Niektóre odpowiedzi nie działają poprawnie.
betseg

Odpowiedzi:

7

Galaretka , 25 24 20 bajtów

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

To diademiczne łącze, które zwraca tablicę wierszy.

Wypróbuj online!

Jak to działa

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.
Dennis
źródło
7

05AB1E , 59 bajtów

Po raz kolejny wpadłem w błąd z tym samym błędem, który napisałem poprawkę kilka miesięcy temu, ale nigdy nie naciskałem ...
Gra w golfa powinna być nadal możliwa.

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

Wypróbuj online!

Emigna
źródło
Byłem z tym bardzo blisko: ŸÐ',ý,gÍ;µ¦¨(D',ý,¼nie do końca pasuje do specyfikacji formatowania, sprawdź, czy możesz to poprawić;)
Okx
1
@Okx: Tak, formatowanie jest zdecydowanie trudną częścią. Coś takiego Ÿ[Ðg1‹#',ý,¦(¨wystarczyłoby inaczej :)
Emigna
1
Nie działa poprawnie dla wejść takich jak -3,15.
betseg
@betseg: Right you are. Przywrócono do starej wersji.
Emigna,
7

Java 8, 483 480 486 467 bajtów

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

Pobrano bajty z powodu naprawy błędów ..

Ok, zajęło to DUŻO więcej czasu (i bajtów) niż myślałem (w Javie to znaczy ...). Można to z pewnością jeszcze bardziej pograć w golfa, prawdopodobnie stosując zupełnie inne podejście zamiast tworzenia siatki NxN w celu wypełnienia, a następnie „usunięcia” zer (z irytującym przypadkiem krawędzi dla przypadku testowego -1,1, jak również -12,12) .

Wypróbuj online.

Wyjaśnienie:

(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`
Kevin Cruijssen
źródło
6

JavaScript (ES6), 269 bajtów

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

Wyjaśniono:

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

powelles
źródło
Czy możesz dodać nowe przypadki testowe?
betseg,
4

QBIC , 46 bajtów

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

Jak to działa:

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

Na szczęście podczas drukowania liczby QBasic automatycznie dodaje niezbędne dopełnienie.

Steenbergh
źródło
Kolejny przypadek znalezienia odpowiedniego języka do pracy :) +1
ElPedro
+1 Czy dostępny jest kompilator online dla QBIC? Chciałbym zobaczyć, jak działa w przypadku wszystkich przypadków testowych (choć wierzę, że wszystko automatycznie wyrównuje). Po raz pierwszy widzę QBIC, więc dwa pytania, kiedy czytam twoje wyjaśnienie: Jeśli poprawnie przeczytam, qdomyślna wartość zaczyna się od 1? Czy wszystkie wartości w QBIC zaczynają się od 1, czy też czegoś mi brakuje? A czym jest d/ gdzie jest dskrót? Czy dteż bieżąca liczba w pętli i po ?prostu niezbędna jest ograniczona w kodzie pętli for (zamiast ?być bieżącą liczbą, czyli jak ją początkowo czytałem)?
Kevin Cruijssen,
1
@KevinCruijssen Niestety, nie ma jeszcze tłumacza online. Pracuję nad jednym, ale trudniej niż myślisz, aby uruchomić QBasic 4.5 w przeglądarce :-). qzaczyna się od 1. Wszystkie małe litery są zmiennymi liczbowymi i litery q-zsą inicjowane 1-10. Kilka poleceń automatycznie przypisuje numery w kolejności, w jakiej znajdują się w kodzie. djest rzeczywiście iteratorem wewnętrznej pętli FOR. Aby uzyskać więcej informacji, zobacz także wizytówkę - lub
steenbergh
3

Perl 6 , 146 bajtów

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

Spróbuj

Tworzy sekwencję ciągów

Rozszerzony:

{  # 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
}
Brad Gilbert b2gills
źródło
3

PHP 7.1, 277 bajtów

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

Tłumacz online

Jörg Hülsermann
źródło
2
Czy możesz połączyć tłumacza online?
betseg
@betseg Gotowe i zdaję sobie sprawę, że moja wersja nie działała poprawnie
Jörg Hülsermann
oh gawd tylko używając php na codegolf.se. MAM WSZYSTKIE POPRAWKI.
Evan Carroll,
3

Aplikacja konsoli C # 196 bajtów

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();}
AkhilKumar
źródło
Witamy w PPCG! Możesz wciąć kod za pomocą 4 spacji (patrz moja edycja). W golfowym kodzie musisz mieć możliwie najkrótszą liczbę bajtów (ilość bajtów w kodzie) - oznacza to krótsze nazwy zmiennych i usuwanie spacji. Ponadto po zakończeniu należy podać liczbę bajtów w nagłówku.
clismique
2

JavaScript - 196 185 176 bajtów

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}

Nie jestem do końca przyzwyczajony do niektórych nowszych technik JS, więc prawdopodobnie można by grać w golfa o wiele więcej.

Po prostu tworzy dobrą staromodną tabelę HTML bez zdefiniowanej szerokości dla komórek, dzięki czemu pierwszy wiersz domyślnie ma szerokość każdego wpisu i ma optymalne odstępy. Wykorzystuje również (ab) „funkcję” HTML polegającą na tym, że nie wymaga zamykania tagów, jeśli nowy tag otwierający pojawi się jako pierwszy.

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

ElPedro
źródło
2

Python 2 - 208 bajtów

Wypróbuj 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])

Tworzy tablicę wartości dopełniania, a następnie używa jej do konstruowania potrzebnych sformatowanych ciągów

Wyjaśnienie:

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])
Dead Possum
źródło
Cześć, witamy w PPCG! Niestety obecnie nie jest poprawny. Dodałeś ten sam margines do wszystkich liczb, a także dodajesz spacje jako separator. Wyzwanie polegało na użyciu wybranego przez siebie ogranicznika (z wyjątkiem białych znaków), ale co ważniejsze: wyrównanie na podstawie liczby o największej szerokości w tej konkretnej kolumnie. Zobacz ważną część wyzwania, a także przykłady testowe jako przykład. Nie jesteś pierwszym, który zrobił to niepoprawnie, ale obecnie nie jest to poprawne w przypadku określonego wyzwania. Usuń, zmodyfikuj, aby zachować zgodność z zasadami, i
cofnij
2
@KevinCruijssen Dziękujemy za wskazanie tego! Zaktualizowałem swoją odpowiedź
Dead Possum,
1
To rzeczywiście wygląda o wiele lepiej! Tylko jedna mała zasada zapomnienia: „ Wyjście może również zawierać ogranicznik własnego wyboru (z wyjątkiem białych znaków i nowych linii) : Ie ,i ;i |są dopuszczalne ograniczniki. ” Obecnie używać spacji jako separatora. Ale główna trudność szerokości została rzeczywiście rozwiązana, więc jak dotąd radzisz sobie świetnie! Tylko ta niewielka zmiana, a potem należy to zrobić. :)
Kevin Cruijssen
1
Doskonały! +1 Dobra robota, wszystko koryguje. I jeszcze raz witamy w PPCG. (Btw, czy jest tu miejsce: %l[i], rangewymagane?)
Kevin Cruijssen
2
@KevinCruijssen Mam nadzieję, że pozostanę przy PPCG przez jakiś czas, wydaje się to bardzo interesujące (nie, zapisałem jeszcze jeden bajt)
Dead Possum