Зміна знаків, циклічне відображення та дисплей із мінімальним накладом


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; повернення як String з новими рядками; повернення як список рядків; твій дзвінок.
  • Вихідні дані також повинні містити роздільник, за власним вибором (за винятком пробілів, вкладок, нових рядків, цифр або -): тобто ,; і ;і |; і 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, тому що якби вони були включені, буде додано 3-ту / четверту цифру, і все буде змінено лише на 2 значення
Містер 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',ý,¼це не зовсім відповідає специфікаціям форматування, дивіться, чи можете ви його покращити;)
Ок

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-loop (замість того, щоб ?бути поточним числом, як я його спочатку читав)?
Kevin Cruijssen

1
@KevinCruijssen Немає онлайн-перекладача, вибачте. Я працюю над одним, але важче, ніж ви думаєте, запустити QBasic 4.5 у своєму браузері :-). qпочинається з 1. Усі малі літери мають числові значення і букви q-zініціалізовані до 1-10. І кілька команд автоматично призначають номери в тому порядку, який вони знаходять у коді. dнасправді є ітератором внутрішньої петлі FOR. Детальніше дивіться також у вітрині - або це
Стінберг

3

Perl 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

ой гауд просто за допомогою 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 пробілів (див. Мою редагування). У коді гольфу вам потрібно мати найкоротший рахунок байтів (кількість байтів у вашому коді) - це означає коротші назви змінних та видалення пробілів. Крім того, ви повинні помістити свій підрахунок байтів у своєму заголовку після завершення.
клісмік

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 Дякую за вказівку на це! Я оновив свою відповідь
Dead Possum

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

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

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