Vorzeichenwechsel, Schleife und Display mit minimaler Polsterung

17

Eingang:

Zwei ganze Zahlen: eine negative, eine positive.

Ausgabe:

In der ersten Zeile die niedrigste bis höchste Ausgabe. In der zweiten Zeile haben wir die höchsten und niedrigsten Zahlen entfernt und alle einzelnen Zahlen mit einem Vorzeichen versehen. In der dritten Zeile haben wir die höchsten und niedrigsten Zahlen wieder entfernt und alle einzelnen Zahlen erneut mit einem Vorzeichen versehen. usw. (Das folgende Beispiel soll die Herausforderung verdeutlichen.)

Wichtig: Außerdem fügen wir Leerzeichen hinzu, damit die Zahlen in einer Spalte alle (rechts) ausgerichtet sind.
Die minimale Ausrichtung ist der Hauptteil dieser Herausforderung. Das bedeutet, dass Sie nicht einfach jede einzelne Zahl auf die gleiche Breite bringen können. Die Breite einer Spalte basiert auf der größten Zahlenbreite dieser bestimmten Spalte (und die Sequenz mit Vorzeichenwechsel soll den Zahlen eine gewisse Breite pro Spalte geben).


Beispielsweise:

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

Wie Sie oben sehen können, werden Leerzeichen an den positiven Zahlen hinzugefügt, wenn sie sich eine Spalte mit negativen Zahlen teilen, um dies auszugleichen -(dasselbe gilt für zweistellige Zahlen).

Herausforderungsregeln:

  • Die Eingabe muss aus zwei ganzen Zahlen bestehen
    • Sie können davon ausgehen, dass diese Ganzzahlen im Bereich -99- 99(einschließlich) liegen.
    • Die erste Ganzzahl ist negativ und die andere positiv.
  • Die Ausgabe kann in jedem vernünftigen Format erfolgen, sofern klar ist, dass Zeilen und richtig ausgerichtete Spalten vorhanden sind: ZB STDOUT; Rückgabe als String mit Zeilenumbrüchen; Rückkehr als Liste von Strings; usw. Ihr Anruf.
  • Die Ausgabe muss außerdem ein Trennzeichen Ihrer Wahl enthalten (mit Ausnahme von Leerzeichen, Tabulatoren, Zeilenumbrüchen, Ziffern oder -): Dh ,; und ;und |; und X; usw. sind alle akzeptablen Begrenzer.
  • Die Ausgabezeilen dürfen kein führendes oder nachfolgendes Trennzeichen enthalten.
  • Die Ausgabe kann EINE nachgestellte neue Zeile enthalten, und jede Zeile kann eine beliebige Anzahl nachgestellter Leerzeichen enthalten.

Allgemeine Regeln:

  • Das ist , also gewinnt die kürzeste Antwort in Bytes.
    Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden.
  • Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
  • Standardlücken sind verboten.
  • Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
  • Fügen Sie ggf. auch eine Erklärung hinzu.

Testfälle:

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
quelle
1
"Niemals außerhalb von -100-100" bedeutet das auch, niemals -100 oder 100 zu sein?
Jonathan Allan
@ JonathanAllan Ich denke schon. Es macht Sinn, -100 und 100 auszuschließen, denn wenn sie enthalten wären, würde eine dritte / vierte Ziffer hinzugefügt und alles würde für nur 2 Werte geändert
Mr. Xcoder
Verbunden. (Eine weitere Herausforderung, bei der das Auffüllen und Ausrichten eines Rasters die Hauptkomponente ist.)
Martin Ender
1
@ JonathanAllan Ich habe den Wortlaut ein wenig geändert. Sie können davon ausgehen, dass der kleinstmögliche negative Eingang -99und der größtmögliche positive Eingang ist 99.
Kevin Cruijssen
1
Vorgeschlagener Testfall: -3,15. Einige Antworten funktionieren nicht richtig.
Betseg

Antworten:

7

Jelly , 25 24 20 Bytes

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

Dies ist eine dyadische Verknüpfung, die ein Array von Zeilen zurückgibt.

Probieren Sie es online!

Wie es funktioniert

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

05AB1E , 59 Bytes

Ich bin wieder einmal durch den gleichen Fehler durchgeknallt, den ich vor Monaten
behoben habe, aber nie aufgedrängt habe ... Golfen sollte dennoch möglich sein.

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

Probieren Sie es online!

Emigna
quelle
Ich bin dem ziemlich nahe gekommen: ŸÐ',ý,gÍ;µ¦¨(D',ý,¼Es passt nicht ganz zu den Formatierungsspezifikationen, sehen Sie, ob Sie es verbessern können;)
Okx
1
@Okx: Ja, die Formatierung ist definitiv der schwierige Teil hier. Sowas Ÿ[Ðg1‹#',ý,¦(¨würde sonst reichen :)
Emigna
1
Funktioniert nicht richtig für Eingaben wie -3,15.
Betseg
@ Betseg: Recht du bist. Zurück zur alten Version.
Emigna
7

Java 8, 483 480 486 467 Bytes

(a,b)->{int f=0,l=b-a+3,z[][]=new int[l][l],y[]=new int[l],i,j,k=0;for(;b-a>=0;k++,a++,b--,f^=1)for(j=0,i=a;i<=b;i++)z[k][j++]=f<1?i:-i;String r="",s;for(i=0;i<l;y[i++]=k)for(j=0,k=1;j<l;k=f>k?f:k)f=(r+z[j++][i]).length();for(i=0;i<l;i++){k=z[i][0];if(i>0&&k==z[i][1]&k==z[i-1][2])break;for(j=0;j<l;){k=z[i][j];s="";for(f=(s+k).length();f++<y[j];s+=" ");f=z[i][++j];if(k==f){r+=(i>0&&z[i-1][1]==z[i][1]?s+0:"")+"\n";j=l;}else r+=s+k+(f==z[i][j+1]?"":",");}}return r;}

Bytes, die aufgrund einer Fehlerbehebung ausgelöst wurden.

Ok, das war VIEL mehr Zeit (und Bytes) , als ich dachte (in Java , die ist ..). Dies kann definitiv noch weiter verbessert werden, wahrscheinlich durch einen völlig anderen Ansatz, anstatt ein NxN-Grid-Array zu erstellen, um die Nullen auszufüllen und dann zu "streifen" (mit einem nervigen Randfall für den Testfall von -1,1sowie -12,12). .

Probieren Sie es online aus.

Erläuterung:

(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
quelle
6

Javascript (ES6), 269 Bytes

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

Erklärt:

(                                     // 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
quelle
Können Sie die neuen Testfälle hinzufügen?
Betseg
4

QBIC , 46 Bytes

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

Wie es funktioniert:

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

Glücklicherweise fügt QBasic beim Drucken einer Zahl automatisch den erforderlichen Abstand hinzu.

steenbergh
quelle
Ein weiterer Fall von der Suche nach der richtigen Sprache für die Arbeit :) +1
ElPedro
+1 Gibt es einen Online-Compiler für QBIC? Ich würde es gerne für alle Testfälle in Aktion sehen (obwohl ich es so nehme, richtet es alles automatisch aus). Wenn ich QBIC zum ersten Mal sehe, werden beim Lesen Ihrer Erklärung zwei Fragen gestellt: Beginnt der qStandardwert bei 1, wenn ich ihn richtig lese ? Beginnen alle Werte in QBIC bei 1, oder fehlt hier etwas? Und wofür steht das d/ wo d? Oder ist ddie aktuelle Nummer in der Schleife und die ?einfach notwendige Nummer im Code der for-Schleife abgegrenzt (anstatt ?die aktuelle Nummer zu sein, wie ich sie ursprünglich gelesen habe)?
Kevin Cruijssen
1
@ KevinCruijssen Leider noch kein Online-Dolmetscher. Ich arbeite an einem, aber es ist schwieriger als Sie denken, QBasic 4.5 in Ihrem Browser zum Laufen zu bringen :-). qbeginnt bei 1. Alle Kleinbuchstaben sind Zahlenvariablen und die Buchstaben q-zwerden mit initialisiert 1-10. Mehrere Befehle weisen Nummern automatisch in der Reihenfolge zu, in der sie im Code enthalten sind. dist in der Tat der Iterator in der inneren FOR-Schleife. Weitere Informationen finden Sie auch in der Vitrine - oder dieser
steenbergh
3

Perl 6 , 146 Bytes

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

Versuch es

Erzeugt eine Folge von Strings

Erweitert:

{  # 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
quelle
3

PHP 7.1, 277 Bytes

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

Online-Dolmetscher

Jörg Hülsermann
quelle
2
Können Sie einen Online-Dolmetscher verlinken?
Betseg
@betseg Fertig und stell fest, dass meine Version nicht richtig funktioniert hatte
Jörg Hülsermann
oh gawd benutze einfach php auf codegolf.se. HABE ALLE UPVOTES.
Evan Carroll
3

C # -Konsolenanwendung 196 Bytes

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
quelle
Willkommen bei PPCG! Sie können Ihren Code mit 4 Leerzeichen einrücken (siehe meine Bearbeitung). Beim Codegolf müssen Sie die kürzestmögliche Anzahl von Bytes (die Anzahl der Bytes in Ihrem Code) haben - das bedeutet kürzere Variablennamen und das Entfernen von Leerzeichen. Außerdem sollten Sie Ihre Byteanzahl in den Header eintragen, sobald Sie fertig sind.
Clismique
2

Javascript - 196 185 176 Bytes

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}

Ich bin mit einigen der neueren JS-Techniken nicht wirklich auf dem Laufenden, daher könnte man wahrscheinlich viel mehr Golf spielen.

Erstellt einfach eine gute, altmodische HTML-Tabelle, für die keine Breite für die Zellen definiert ist, sodass in der ersten Zeile standardmäßig der optimale Abstand für jeden Eintrag festgelegt wird. Es nutzt auch (ab) die "Funktion" von HTML, bei der keine schließenden Tags erforderlich sind, wenn zuerst ein neues öffnendes Tag hinzukommt.

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

Python 2 - 208 Bytes

Probieren Sie es online aus

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

Erstellt ein Array mit Auffüllwerten und verwendet es dann, um die erforderlichen formatierten Zeichenfolgen zu erstellen

Erläuterung:

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])
Totes Opossum
quelle
Hallo, willkommen bei PPCG! Leider ist es derzeit nicht korrekt. Sie haben allen Zahlen den gleichen Rand hinzugefügt und Leerzeichen als Trennzeichen hinzugefügt. Die Herausforderung bestand darin, ein Trennzeichen Ihrer Wahl (außer Leerzeichen) zu verwenden. Noch wichtiger ist jedoch, dass die Ausrichtung auf der Zahl mit der größten Breite in dieser bestimmten Spalte basiert. Bitte sehen Sie sich den wichtigen Abschnitt der Herausforderung sowie die Testfälle als Beispiel an. Sie sind nicht der erste, der es falsch macht, aber derzeit ist es für die angegebene Herausforderung nicht gültig. Fühlen Sie sich frei, zu löschen, zu ändern, um den Regeln zu entsprechen, und Ihre Antwort
wiederherzustellen
2
@KevinCruijssen Vielen Dank für den Hinweis! Ich habe meine Antwort aktualisiert
Dead Possum
1
Das sieht doch viel besser aus! Nur eine kleine Regel, die Sie vergessen haben: " Die Ausgabe kann auch ein Trennzeichen Ihrer Wahl enthalten (mit Ausnahme von Leerzeichen und Zeilenumbrüchen) : Dh ,und ;und |sind alle akzeptable Trennzeichen. " Derzeit verwenden Sie ein Leerzeichen als Trennzeichen. Aber die Hauptschwierigkeit der Weite wurde in der Tat angegangen, also machst du das bisher großartig! Nur diese kleine Änderung, und dann sollte es getan werden. :)
Kevin Cruijssen
1
Perfekt! +1 Gute Arbeit, alles zu korrigieren. Und noch einmal herzlich willkommen bei PPCG. (Übrigens, ist der Platz hier: %l[i], rangeerforderlich?)
Kevin Cruijssen
2
@ KevinCruijssen Ich hoffe, dass ich noch eine Weile bei PPCG bleiben kann, es scheint sehr interessant zu sein (nein, ein weiteres Byte gespart)
Dead Possum