Changement de signe, boucle et affichage avec un rembourrage minimal

17

Contribution:

Deux entiers: un négatif, un positif.

Production:

Sur la première ligne, sortie du plus bas au plus haut. Sur la deuxième ligne, nous avons supprimé les numéros les plus élevés et les plus bas et signé tous les numéros individuels. Sur la troisième ligne, nous avons à nouveau supprimé les numéros les plus élevés et les plus bas et signé à nouveau tous les numéros individuels. etc. (L'exemple ci-dessous devrait rendre le défi plus clair.)

Important: De plus, nous ajoutons des espaces afin que les nombres dans une colonne soient tous alignés (à droite).
L'alignement minimal est la partie principale de ce défi, cela signifie que vous ne pouvez pas simplement faire en sorte que chaque numéro ait la même largeur. La largeur d'une colonne est basée sur la plus grande largeur de nombre de cette colonne spécifique (et la séquence avec changement de signe vise à donner aux nombres une certaine variété de largeur par colonne).


Par exemple:

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

Comme vous pouvez le voir ci-dessus, des espaces sont ajoutés aux nombres positifs, lorsqu'ils partagent une colonne avec des nombres négatifs pour compenser le -(la même chose s'appliquerait aux nombres à 2 chiffres).

Règles du défi:

  • L'entrée doit être composée de deux entiers
    • Vous pouvez supposer que ces nombres entiers sont dans la plage -99- 99(inclus).
    • Le premier entier sera négatif et l'autre sera positif.
  • La sortie peut être dans n'importe quel format raisonnable, tant qu'il est clair qu'il y a des lignes et des colonnes correctement alignées: Ie STDOUT; retour en tant que chaîne avec des nouvelles lignes; retour sous forme de liste de chaînes; etc. Votre appel.
  • La sortie doit également contenir un délimiteur de votre choix (sauf pour les espaces, les tabulations, les nouvelles lignes, les chiffres ou -): Ie ,; et ;et |; et X; etc. sont tous des délimiteurs acceptables.
  • Les lignes de sortie peuvent ne pas contenir de délimiteur de début ou de fin.
  • La sortie peut contenir UNE nouvelle ligne de fin et n'importe quelle ligne peut contenir un nombre quelconque d'espaces de fin.

Règles générales:

  • C'est le , donc la réponse la plus courte en octets l'emporte.
    Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation.
  • Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés, des programmes complets. Ton appel.
  • Les failles par défaut sont interdites.
  • Si possible, veuillez ajouter un lien avec un test pour votre code.
  • Veuillez également ajouter une explication si nécessaire.

Cas de test:

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
la source
1
"Jamais en dehors de -100-100" cela inclut-il de ne jamais être aussi -100 ou 100?
Jonathan Allan
@JonathanAllan Je pense que oui. Il est logique d'exclure -100 et 100, car s'ils étaient inclus, un 3ème / 4ème chiffre sera ajouté et tout serait changé pour seulement 2 valeurs
M. Xcoder
En relation. (Un autre défi où le rembourrage et l'alignement à droite d'une grille est le composant principal.)
Martin Ender
1
@JonathanAllan J'ai un peu changé le libellé. Vous pouvez supposer que la plus petite entrée négative possible est -99la plus grande entrée positive possible 99.
Kevin Cruijssen
1
Cas de test proposé: -3,15. Certaines réponses ne fonctionnent pas correctement.
betseg

Réponses:

7

Gelée , 25 24 20 octets

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

Il s'agit d'un lien dyadique qui renvoie un tableau de lignes.

Essayez-le en ligne!

Comment ça fonctionne

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

05AB1E , 59 octets

Encore une fois, je suis foutu par le même bug que j'ai écrit un correctif il y a des mois mais que je n'ai jamais poussé ... Le
golf devrait quand même être possible.

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

Essayez-le en ligne!

Emigna
la source
Je suis assez proche de cela: ŸÐ',ý,gÍ;µ¦¨(D',ý,¼il ne correspond pas tout à fait aux spécifications de formatage, voyez si vous pouvez l'améliorer;)
Okx
1
@Okx: Oui, le formatage est certainement la partie difficile ici. Quelque chose comme ça Ÿ[Ðg1‹#',ý,¦(¨suffirait sinon :)
Emigna
1
Ne fonctionne pas correctement pour des entrées comme -3,15.
betseg
@betseg: C'est vrai. Revenu à l'ancienne version.
Emigna
7

Java 8, 483 480 486 467 octets

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

Octets levés en raison d'une correction de bogue.

Ok, cela a pris BEAUCOUP plus de temps (et d'octets) que je ne le pensais (en Java c'est-à-dire ..). Cela peut certainement être joué un peu plus, probablement en utilisant une approche complètement différente au lieu de créer un tableau de grille NxN pour remplir puis `` supprimer '' les zéros (avec un cas de bord ennuyeux pour le cas de test de -1,1, ainsi que-12,12 ) .

Essayez-le en ligne.

Explication:

(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
la source
6

Javascript (ES6), 269 octets

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

Expliqué:

(                                     // 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
la source
Pouvez-vous ajouter les nouveaux cas de test?
betseg
4

QBIC , 46 octets

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

Comment ça fonctionne:

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

Heureusement, lors de l'impression d'un nombre, QBasic ajoute automatiquement le remplissage nécessaire.

steenbergh
la source
Un autre cas de trouver la bonne langue pour faire le travail :) +1
ElPedro
+1 Existe-t-il un compilateur en ligne pour QBIC? Je voudrais le voir en action pour tous les cas de test (même si je crois sur parole, il aligne automatiquement tout). La première fois que je vois QBIC, donc deux questions quand je lis votre explication: Si je la lis correctement, qla valeur par défaut commence à 1? Est-ce que toutes les valeurs dans QBIC commencent à 1, ou est-ce qu'il manque quelque chose ici? Et quel est le d/ où signifie le d? Ou est-ce que dle numéro actuel dans la boucle et ?simplement un nécessaire sont délimités dans le code de la boucle for (au lieu d' ?être le numéro actuel, c'est ainsi que je l'ai lu initialement)?
Kevin Cruijssen
1
@KevinCruijssen Pas encore d'interprète en ligne, désolé. J'en travaille sur un, mais il est plus difficile que vous ne le pensez de faire fonctionner QBasic 4.5 dans votre navigateur :-). qcommence à 1. Toutes les lettres minuscules sont des nombres vars et les lettres q-zsont initialisées à 1-10. Et plusieurs commandes attribuent automatiquement des numéros dans l'ordre où ils se trouvent dans le code. dest en effet l'itérateur de la boucle FOR interne. Pour plus de détails, voir aussi la vitrine - ou celle-ci
steenbergh
3

Perl 6 , 146 octets

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

Essayez-le

Produit une séquence de chaînes

Étendu:

{  # 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
la source
3

PHP 7.1, 277 octets

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

Interprète en ligne

Jörg Hülsermann
la source
2
Pouvez-vous lier un interprète en ligne?
betseg
@betseg Fait et réalise que ma version n'a pas fonctionné correctement
Jörg Hülsermann
oh gawd juste en utilisant php sur codegolf.se. AVOIR TOUTES LES UPVOTES.
Evan Carroll
3

Application console C # 196 octets

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
la source
Bienvenue chez PPCG! Vous pouvez mettre en retrait votre code en utilisant 4 espaces (voir ma modification). Dans le golf de code, vous devez avoir le nombre d'octets le plus court possible (la quantité d'octets dans votre code) - ce qui signifie des noms de variable plus courts et la suppression des espaces. En outre, vous devez mettre votre nombre d'octets dans votre en-tête une fois terminé.
clismique
2

Javascript - 196 185 176 octets

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}

Je ne suis pas vraiment au courant de certaines des nouvelles techniques JS, donc cela pourrait probablement être beaucoup plus joué.

Crée simplement un bon tableau HTML à l'ancienne sans largeur définie pour les cellules, de sorte que la première ligne par défaut correspond à la largeur de chaque espacement optimal. Il (ab) utilise également la «fonctionnalité» de HTML de ne pas exiger de balises de fermeture si une nouvelle balise d'ouverture arrive en premier.

<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
la source
2

Python 2 - 208 octets

Essayez-le en ligne

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

Crée un tableau de valeurs de remplissage, puis l'utilise pour construire les chaînes formatées nécessaires

Explication:

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])
Possum mort
la source
Salut, bienvenue chez PPCG! Malheureusement, ce n'est actuellement pas correct. Vous avez ajouté la même marge à tous les nombres et ajouté des espaces comme délimiteur. Le défi était d'utiliser un délimiteur de votre choix (sauf les espaces blancs), mais plus important encore: avoir l'alignement basé sur le nombre avec la plus grande largeur dans cette colonne spécifique. Veuillez consulter la section Important du défi, ainsi que les cas de test comme exemple. Vous n'êtes pas le premier à le faire incorrectement, mais actuellement il n'est pas valide avec le défi spécifié. N'hésitez pas à supprimer, modifier pour se conformer aux règles et annuler la suppression de votre réponse
Kevin Cruijssen
2
@KevinCruijssen Merci d'avoir signalé cela! J'ai mis à jour ma réponse
Dead Possum
1
Cela semble en effet beaucoup mieux! Une seule petite règle que vous avez oubliée: " La sortie peut également contenir un délimiteur de votre choix (sauf pour les espaces blancs et les nouvelles lignes) : Ie ,et ;et |sont tous des délimiteurs acceptables. " Actuellement, vous utilisez un espace comme délimiteur. Mais la principale difficulté de la largeur a bien été résolue, vous vous débrouillez bien jusqu'à présent! Seul ce petit changement, et alors il faut le faire. :)
Kevin Cruijssen
1
Parfait! +1 Bon travail pour tout corriger. Et encore une fois, bienvenue à PPCG. (Btw, l'espace est-il ici: %l[i], rangenécessaire?)
Kevin Cruijssen
2
@KevinCruijssen J'espère rester dans PPCG pendant un certain temps, cela semble très intéressant (non, économisé un octet de plus)
Dead Possum