Изменение знака, зацикливание и отображение с минимальным заполнением


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

Как вы можете видеть выше, пробелы добавляются к положительным числам, когда они совместно используют столбец с отрицательными числами для компенсации - (то же самое относится к двузначным числам).

Правила соревнований:

  • Ввод должен быть двумя целыми числами
    • Вы можете предположить, что эти целые числа находятся в диапазоне -99- 99(включительно).
    • Первое целое число будет отрицательным, а другое будет положительным.
  • Вывод может быть в любом приемлемом формате, если ясно, что есть строки и правильно выровненные столбцы: Т.е. 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?
Джонатан Аллан

@JonathanAllan Я так думаю. Это имеет смысл, исключая -100 и 100, потому что, если они были включены, будет добавлена ​​третья / четвертая цифра, и все будет изменено только для двух значений
г-н Xcoder

Связанный. (Еще одна проблема, где заполнение и выравнивание по правому краю сетки является основным компонентом.)
Мартин Эндер,

1
@JonathanAllan Я немного изменил формулировку. Вы можете предположить, что наименьшее возможное отрицательное значение равно -99и максимально возможное положительное значение 99.
Кевин Круйссен

1
Предлагаемый контрольный пример: -3,15. Некоторые ответы не работают должным образом.
Betseg

Ответы:


7

Желе , 25 24 20 байт

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

Это диадическая ссылка, которая возвращает массив строк.

Попробуйте онлайн!

Как это устроено

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',ý,¼он не совсем соответствует спецификациям форматирования, посмотрите, можете ли вы его улучшить;)
Okx

1
@Okx: Да, форматирование здесь определенно сложная часть. Нечто подобное Ÿ[Ðg1‹#',ý,¦(¨было бы достаточно в противном случае :)
Emigna

1
Не работает должным образом для входов, таких как -3,15.
Betseg

@betseg: ты прав. Вернулся к старой версии.
Эминья

7

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

Байты подняты из-за исправления ошибки.

Хорошо, это заняло ОЧЕНЬ больше времени (и байтов), чем я думал (в Java это ..). Это, безусловно, можно использовать еще немного, возможно, с использованием совершенно другого подхода вместо создания массива сетки NxN для заполнения, а затем «обрезки» нулей (с раздражающим краевым случаем для тестового случая -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

Javascript (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 (а ?не текущий номер, как я его изначально читал)?
Кевин Круйссен

1
@KevinCruijssen Нет онлайн-переводчика, извините. Я работаю над ним, но это труднее, чем вы думаете, запустить QBasic 4.5 в вашем браузере :-). qначинается с 1. Все строчные буквы являются числовыми переменными, и буквы q-zинициализируются в 1-10. И несколько команд автоматически присваивают номера в порядке их нахождения в коде. dдействительно является итератором внутреннего цикла FOR. Для получения более подробной информации см. Также витрина - или это
Steenbergh

3

Perl 6 , 146 байт

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

Попытайся

Создает последовательность строк

Expanded:

{  # 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 Done и понимаю , что мой вариант был правильно не работал
Йорг Hülsermann

о боже, просто используя php на codegolf.se. ИМЕЙ ВСЕ ГОЛОСОВАНИЯ.
Эван Кэрролл

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

Javascript - 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-таблицу без ширины, определенной для ячеек, поэтому в первой строке по умолчанию указывается ширина каждой записи без оптимального расстояния. Он также (ab) использует «особенность» 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

Python 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! К сожалению, в настоящее время это не правильно. Вы добавили одинаковое поле для всех чисел, а также добавили пробелы в качестве разделителя. Задача состояла в том, чтобы использовать выбранный вами разделитель (кроме пробелов), но что еще более важно: иметь выравнивание на основе числа с наибольшей шириной в этом конкретном столбце. Пожалуйста, ознакомьтесь с разделом « Важное задание», а также с примерами тестирования. Вы не первый, кто сделал это неправильно, но в настоящее время он не подходит для указанной задачи. Не стесняйтесь удалять, изменять, чтобы соответствовать правилам, и восстанавливать свой ответ
Кевин Круйссен

2
@KevinCruijssen Спасибо, что указали на это! Я обновил свой ответ
Мертвый Опоссум

1
Это действительно выглядит намного лучше! Только одно маленькое правило , вы забыли: « Выход может также содержать разделитель по вашему собственному выбору (для непечатаемых и новых линий , за исключением) : Ie ,и ;и |все приемлемые разделители. » В настоящее время используется пробел в качестве разделителя. Но основная трудность с шириной действительно была решена, так что у вас все отлично! Только это небольшое изменение, и тогда это должно быть сделано. :)
Кевин Круйссен

1
Отлично! +1 Хорошая работа, исправляя все. И еще раз добро пожаловать в PPCG. (Кстати, место здесь: %l[i], rangeтребуется?)
Кевин Круйссен

2
@KevinCruijssen Я надеюсь ненадолго задержаться на PPCG, это кажется очень интересным (нет, сохранил еще один байт)
Dead Possum
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.