Operatore ASCII art


22

Sfida

Dato un operatore ASCII dall'elenco seguente e un numero n, disegna una rappresentazione ASCII dell'operatore usando quell'operatore come carattere con i segmenti di linea dell'operatore con lunghezza n .

Ingresso

Un carattere ASCII dall'elenco = + - x /e un numero intero ndove n >= 1. (Sto usando xinvece di *e /invece di ÷, ma potresti usare uno dei due, qualunque sia più semplice). Per +e x, devi solo gestire i numeri dispari per evitare problemi con l'allineamento.

Produzione

Un disegno ASCII dell'operatore composto dal personaggio con segmenti di lunghezza n. Le porzioni orizzontali devono avere spazi tra i caratteri per compensare le differenze di distanza verticale / orizzontale.

Regole

Questo è , quindi vince il codice più breve in byte. Sono vietate le scappatoie standard.

Esempi

Ingresso: + 3

  +
+ + +
  +

Ingresso: = 4

= = = =
= = = =

Ingresso: = 10

= = = = = = = = = =
= = = = = = = = = =

Ingresso: - 2

- -

Ingresso: / 10

         /
        /
       /
      /
     /
    /
   /
  /
 /
/

Ingresso: x 7

x     x
 x   x
  x x
   x
  x x
 x   x
x     x

puoi aggiungere il test case per = 10?
Rod,

1
Suppongo che "x" e "+" implichino numeri dispari? (Ho appena visto DrMcMoylex porre quasi la stessa domanda.)
Martin Rosenau

1
@MartinRosenau Sì, dalla sezione Input: "Per + e x, devi solo gestire i numeri dispari per evitare problemi con l'allineamento."
corvus_192,

Perché X e / non sono distanziati?
Adám,

1
è consentito lo spazio bianco iniziale?
Adám,

Risposte:


5

Pip , 62 59 56 byte

55 byte di codice, +1 per la -Sbandiera.

[sXbRA_AEv-_aM,b(Y^aWR_Xb/2s)MyRVsX,b.aYaXbJsxyRL2x]@Aa

Si noti che questa soluzione funziona con ingresso ÷per divisione e *per la moltiplicazione, sebbene utilizzi tali caratteri ASCII per disegnare dell'arte /e x, rispettivamente. OP ha chiarito che va bene. Provalo online!

Come?

Ecco un parzialmente distanziata e commentata . Si noti che ae bsono gli argomenti della riga di comando, cioè l'operatore e le dimensioni rispettivamente. Il -Sflag controlla la modalità di output degli elenchi: si unisce prima ai newline, ma unisce tutti gli elenchi nidificati negli spazi.

[                 Build a list of all possible figures:
 sXbRA_AEv-_aM,b   0 - Multiplication
 (Y^aWR_Xb/2s)My   1 - Addition
 RVsX,b.a          2 - Division
 YaXbJs            3 - Subtraction
 x                 4 - Empty
 yRL2              5 - Equals
 x                 6 - Empty
] @ Aa            Index, mod 7, with ASCII value of a

Ed ecco le singole sezioni:

Moltiplicazione

Per ogni riga nella figura, generiamo una stringa di spazi e quindi sostituiamo due di essi con il carattere di input. Per riga i, vogliamo sostituire gli spazi nell'indice ie b-1-i; ma nota che quest'ultimo può usare l'indice negativo -1-i. (È ancora più breve perché la variabilev è preinizializzata in negati v e 1.)

sXbRA_AEv-_aM,b
            M,b  Map this function to range(b):
sXb                Space, repeated b times
     _             Function arg
      AE           (Implicitly) convert to list and append element...
        v-_        -1 minus function arg
   RA              Replace the characters at those indices...
           a       ... with input character
                 The resulting list is output with one item per line

aggiunta

Usando la strategia dal mio Disegna una risposta quadrata vuota , definiamo una funzione che racchiude +in b/2copie del suo argomento e restituisce il risultato come un elenco di caratteri. (La divisione dei numeri interi //non è necessaria perché l'operatore di ripetizione delle stringhe Xsi tronca automaticamente in numero intero.) Innanzitutto, chiamiamo questa funzione su uno spazio, dando [" ";" ";"+";" ";" "]; quindi, mappiamo la stessa funzione a quel risultato, dando [" ";" ";"+";" ";" "]sulla maggior parte delle linee ma ["+";"+";"+";"+";"+"]sulla linea centrale. Questo elenco nidificato viene quindi emesso, a causa del -Sflag, con spazi tra tutti i caratteri su una riga e le nuove righe tra le righe.

(Y^aWR_Xb/2s)My
                 Anonymous function:
      _Xb/2        Function arg, repeated b/2 times (implicitly rounded down)
   aWR             Wrap a in two copies of the above
  ^                Split resulting string into list of chars
 Y               Yank that function into y
(          s)    Apply function y to space
             My  Map y to that result

Divisione

Ogni riga ha spazi tra b-1e 0, seguiti dal carattere di input a.

RVsX,b.a
    ,b    Range(b)
  sX      Space, repeated that many times (works itemwise)
      .a  Concatenate a (itemwise)
RV        Reverse (puts the larger number of spaces at the beginning)
          Outputs newline-separated

Sottrazione

Crea una riga separata dallo spazio del carattere di input. Salva una copia per dopo.

YaXbJs
 aXb    b copies of a
    Js  Join on space
Y       Yank into y (overwrites the function from earlier, but we're done using it anyway)
        This is a string, so it just gets output

È uguale a

La fase di sottrazione memorizzava la metà di ciò di cui abbiamo bisogno - ysolo il doppio.

yRL2  (Implicitly) convert y to list and repeat it twice
      Outputs newline-separated

I xvalori fittizi sono lì per riempire l'elenco principale in modo che l'indicizzazione modulare fornisca un indice univoco per ciascun carattere di input in +-*÷=.


13

V , 78, 72, 71, 68, 65, 63, 62 , 61 byte

Ç=ü-/Àé X
ç^Ó/é Àä$
ç+/ÀÄM|ÀR+ 
ç=/Ä
ç¯/lòhYpX
çx/rxòl3Äjxlrx

Provalo online!

Come sempre, la battaglia collo-a-collo con 05AB1E è davvero divertente!

Poiché questo contiene caratteri non ASCII, ecco un hexdump:

0000000: c73d fc2d 2fc0 e920 580a e75e d32f e920  .=.-/.. X..^./. 
0000010: c0e4 240a e72b 2fc0 c44d 7cc0 522b 200a  ..$..+/..M|.R+ .
0000020: e73d 2fc4 0ae7 af2f 6cf2 6859 7058 0ae7  .=/..../l.hYpX..
0000030: 782f 7278 f26c 33c4 6a78 6c72 78         x/rx.l3.jxlrx

Questo crea spazi iniziali nell'output per =e -, ma questo sembra essere consentito . Se ciò non è consentito, sentiti libero di commentare e lo farò tornare indietro.

Spiegazione

Il "comando globale" (ad es. ç) Applica un certo set di comandi a ogni riga che corrisponde a una certa regex. La sintassi è

ç<compressed regex>/<commands>

Questo è il modo più semplice per simulare un'istruzione condizionale / switch. Nella mia risposta originale, ho semplicemente creato l'intera arte ASCII sul lato destro per ogni diverso personaggio che dobbiamo cercare. Tuttavia, molte di queste uscite richiedono comandi simili. Quindi li ho combinati. Il primo comando ('Ç') è in realtà l'inverso del comando globale, applica il comando a ogni riga che non corrisponde alla regex. Quindi il primo comando è:

Ç=ü-        " On every line not containing an '=' or an '-' (e.g. inputs '/', '+', and 'x'):
    /Àé     "   Insert *n* spaces
        X   "   Delete one of them

Il seguente comando è per input '=' e '-'. Questi due sono comodamente facili e simili. Dopo questo comando, non abbiamo bisogno di ulteriori elaborazioni per -.

ç^Ó         " On every line that starts with non-whitespace (e.g. every line not affected by our previous command):
   /é       "   Insert one space
            "   Move back a character
      À     "   Make *n* copies
       ä$   "   Of every character on this line

Da qui eseguiamo solo alcuni comandi extra per ogni singolo input possibile. Per +:

ç+/         " On every line containing a '+':
   ÀÄ       "   Make *n* copies of this line
     M|     "   Move to the first character of the middle line
       À    "   *n* times:
        R+  "   Replace the next two characters with '+ '

Il comando per uguali è molto semplice. Abbiamo appena duplicato con Ä. Per /:

ç¯          " On every line containing a '/':
  /l        "   Move one character to the right
    ò       "   Recursively:
     h      "     Move one character to the left
      Yp    "     Make a copy of this line
        X   "     Delete one character
         ò  "   End loop (implicit)

L'ultimo è il più complicato. Fondamentalmente è una porta di questa risposta .

çx              " On every line containing a 'x':
  /rx           "   Replace the first character with an 'x'
     ò          "   Recursively:
      l         "     Move one char to the right
       3Ä       "     Make 3 copies of this line
         j      "     Move down one line
          x     "     Delete one char
           l    "     Move one char to the right
            rx  "     Replace this char with an 'x'

quindi che cosa servono più linee?
Conor O'Brien,

@Conorobrien Sì. Ilç comando (oltre a cercare e sostituire, /e ?) simula tutti parte della riga di comando di vim, dove devi
premere invio

13

05AB1E , 81 76 74 73 70 69 68 65 64 62 60 59 57 56 byte

Attualmente in guerra con la V risposta . Sto venendo per te Dr. McMoylex: p.

Anche in guerra con la risposta Pip . Ti guarderò, signor DLosc.


Codice:

Ç6&"¹s<ú.s.Bívy¹'xQiÂðñ}, ¹×S)»¹'=Qƒ= ;ƒ¹})D¦»»Rû.c"#è.V

O in una forma più leggibile:

  Ç6&
"¹s<ú.s.Bívy¹'xQiÂðñ},
 ¹×S)»¹'=Qƒ=
 ;ƒ¹})D¦»»Rû.c"
#è.V

Utilizza la codifica CP-1252 . Provalo online!


1
Eccoci di nuovo ...: P
DJMcMayhem

1
@DrMcMoylex Hahaha, bei vecchi tempi :).
Adnan,

30
Più leggibile ... totalmente ...
Oliver Ni

1
Per una determinata definizione di "leggibile".
Matt Lacey,


7

Python 3, 304 283 278 byte

Abbastanza semplice, crea una matrice di caratteri e applica le diverse operazioni in base a quale è. L' =e -hanno spazi finali se non è troppo male.

EDIT: Grazie a @Shebang e @Rod per i loro suggerimenti che hanno finito per salvare 21 byte!

EDIT2: Grazie a @Artyer per aver salvato 5 byte!

t,s=input().split()
s=int(s)
r=range(s)
b=[[' ']*s for x in r]
exec(['for x in r:b[s//2][x]=b[x][s//2]=t','b=[t*s]'+'*2'*(t=='='),'for x in r:b[x][s-x-1]='+'b[x][x]='*(t=='x')+'t'][(t>'+')+(t in'x/')])
if t in'-=+':b=[[x+' 'for x in l]for l in b]
print(*map(''.join,b),sep='\n')

Puoi salvare 8 byte rimuovendo la if'-'==tlinea di condizione e sostituendo quella sopra di essa con if t in'=-':b=[[t+' ']*s]*(2*(t>'-'))(credo).
Kade,

è possibile racchiudere le funzioni all'interno di un elenco ed eseguire utilizzando exec: exec(['+ block','/ block','x block','= block','- block']['+/x=-'.find(t)])per salvare ~ 18 byte
Rod

Sì, gli spazi finali / le nuove righe sono accettabili.
Yodle,

Per la prima riga, do .split()(No args si divide su spazi bianchi). Alla riga 6, hai perso uno spazio ( b=[[x+' 'for). È possibile effettuare l'ultima riga print(*map(''.join,b),sep='\n')per 1 byte in meno.
Artyer,

7

JavaScript (ES6), 238 225 215 202 196 byte

(c,n)=>[...Array(i=n*(c=="="?4:c+1-1?2:c<"-"?n+n:n+1))].map(_=>--i%(n+(c=='/'|c>'w'||n))?c>'w'?i%n&&~-i%(n+2)?" ":c:c<'-'?i%(n*2)-n&&(~i&1|(n/2^i/n/2))?" ":c:c=="/"?i%n?" ":c:i%2?c:" ":`
`).join``

Probabilmente potrebbe essere giocato a golf, ma è un inizio.


6

Scala, 275 byte

(i,c)=>if(c<44){val b=(" "*(i-1)+"+\n")*((i-1)/2)
b+"+ "*i+"\n"+b}else
if(c<46)"- "*i else
if(c<48)i-1 to(0,-1)map(" "*_+"/\n")mkString else
if(c<62)"= "*i+"\n"+"= "*i
else{val a=0 to i/2-1 map(x=>" "*x+"x"+" "*((i/2-x)*2-1)+"x"+" "*x+"\n")mkString;a+" "*(i/2)+"x"+a.reverse}

Uso:

val f:((Int,Char)=>String)=...
print(f(10, '/'))

Spiegazione:

Il codice verifica il valore ascii del carattere per scegliere il modo giusto di generare l'immagine. I valori ascii degli operatori in questione sono: ('+' -> 43), ('-' ->45), ('/' -> 47), ('=' -> 61), ('x' -> 120)

(i,c)=>                              //define a function
  if(c<44){                            //if c is a plus
    val b=(" "*(i-1)+"+\n")*((i-1)/2)    //define the top/bottom part b as (i-1)/2 times (i-1) spaces, a plus sign and a newlineine
    b+"+ "*i+"\n"+b                      //return b, i times a plus and a space, a newline and b
  }else if(c<46)                       //if c is a '-'
    "- "*i                               //return "- " repeated i times
  else if(c<48)                        //if c is a '/'
    i-1 to(0,-1)                         //create a range from i-1 to 0 in steps of -1
    map(" "*_+"/\n")                     //map each number to that number of spaces plus a "/" and a newline
    mkString                             //join them together
  else if(c<62)                        //if c is '='
    "= "*i+"\n"+"= "*i                   //return "= " repeated i times, a newline and "= " repeated i times again
  else{                                //if c if 'x'
    val a=                               //define a, which will be the top part, as...
      0 to i/2-1                         //a range from 0 to i/2-1
      map(n=>                            //map each number n to
        " "*n                              //n spaces
        +"x"                               //plus an "x"
        +" "*((i/2-n)*2-1)                 //plus ((i/2)-n)*2-1 spaces
        +"x"                               //plus an "x"
        +" "*n                             //plus n spaces
        +"\n"                              //and a newline
      )mkString;                         //join them
    a+" "*(i/2)+"x"+a.reverse          //return a, i/2 spaces, "x" and the reverse of a 
  }

5

JavaScript (ES6), 156 byte

(c,n)=>[...Array(n--)].map((_,i,a)=>a.map((_,j)=>({'/':a=i+j-n,x:a&&i-j,'-':a=i+i-n,'+':a&&j+j-n,'=':a+2&&a-2}[c]?' ':c)).join(c=='='|c<'/'?' ':'')).join`\n`

Dove \nrappresenta il carattere letterale di newline.


In Firefox 49, ottengo SyntaxError: invalid property idcome è attualmente scritto, ma cambiando i backtick attorno alla barra in apostrofi è stato risolto. (Perché hai le
punte posteriori

Inoltre, le uscite per +, -e =un aspetto diverso rispetto alle chiamate sfida per: "porzioni orizzontali devono avere spazi tra i caratteri per compensare le differenze di distanza verticale / orizzontale."
ETHproductions

@ETHproductions a) errore di battitura b) scusate, l'ho trascurato, risolverò più tardi.
Neil,

Questo è ridicolmente breve però. Spero che risolverlo non aggiunga troppi byte.
ETHproductions

@ETHproductions Grazie. Penso che questo abbia un costo di 19 byte.
Neil,

4

Dyalog APL , 91 86 byte

Necessità ⎕IO←0, che è predefinita su molti sistemi. Prende n come argomento di sinistra e uno di + - × ÷ = come argomento di destra.

{s←⌈⍎⍕32
t' '
d←⌽∘.=⍨⍺
s2 6:t[d∨⌽d6=s]
5=s:t[↑,/2↑¨∨/¨(⌊⍺÷2)=⍳⍺ ⍺]
(2-s)(2×⍺)⍴t}

Spiegazione

{
    s     3  2              calculate ceil(3 f 2), where f is the given symbol
    t  ' '                     create a string with a space before the symbol
    d   ∘.=⍨                  Boolean \ diagonal
    s  2 6: t[d   d  6 = s]  if ÷ or × index t with one or both diagonals
 find coordinates that are in the middle of at least one dimension
 pad with zeros for spacing
 use that to index into t
    5 = s: t[  ,/ 2↑¨ ∨/¨ (⌊  ÷ 2) =   ⍺]
 - or =:
    (2 - s) (2 × ⍺)  t        one or two rows of double-spaced symbols
}

3

Mathematica, 191 byte

e=#~Mod~2==1&;StringRiffle[Normal@SparseArray[{a_,b_}/;(a+b==d+1||a==b)[e@b&&a<3,,e@b&&(a==⌈d/2⌉||b==d),,e@b&&a<2,,a+b==d+1][[Last@ToCharacterCode@#~Mod~10]]:>#,{d=#2,2d-1}," "],"
"," "]&

Funzione anonima. Accetta una stringa e un numero come input e restituisce una stringa come output. Di gran lunga non il più breve, ma comunque divertente da scrivere.


3

C, 396 byte

#define p(x) printf(x);
i,j,k,m;f(char s,int n){i=k=0;if(s==45)for(;i<n;++i)p("- ")m=n/2;if(s==43)for(;i<n;++i)for(j=0;j<=m;++j)if(i-m)p(j-m?"  ":"+\n")else{for(;k<n;++k)p("+ ")p("\n")j+=m;}if(s==61)for(;i<2;++i){for(k=0;k<n;++k)p("= ")p("\n")}j=n;if(s==47)for(;i<n;++i){--j;for(k=0;k<j;++k)p(" ")p("/\n")}if(s==120)for(;i<n;++i){k=m-abs(m-i);for(j=0;j<n-k;++j)p(j-k?" ":"x")p(i-m?"\bx\n":"\n")}}

Chiama con:

int main()
{
   f('x', 5);
   return 0;
}

2

SOML , 104 100 byte (non concorrenti)

    Cd³³b»E +=?ce*d+e{t}bd*Oe{t}} ==?b*tt} -=?b*t} /=?bc*b{j:d+p}} x=?"”cb*e{jj⁴⁴d;d+++tGG;c+;}XOdoe{O

Questo è un po 'in competizione poiché sono abbastanza sicuro che tutto ciò che ho usato qui abbia documenti su github prima della data di pubblicazione delle domande, ma il parser non ha il supporto per alcune funzioni che ho usato in modo idk.


2

PHP, 306 292 281 282 281 275 270 byte

$r=str_pad("",2*$n=$argv[2],($c=$argv[1])." ")."\n";if(",">$c)$r=($m=str_repeat(str_pad($c,$n," ",0)."\n",$n/2))."$r$m";if(9<$c)$r.=$r;if(w<$c)for($r=$c;$i<$n;$r[$i*(2+$n)]=$r[++$i*$n-1]=x)$r[$i*$n+$i+$n]="\n";if("/"==$c)for($r=$s="";$i++<$n;$s.=" ")$r="$s/\n$r";echo$r;

Ooh questo è ingombrante ... ha bisogno di ulteriore golf.
Potrei salvare 4 byte con interruzioni di riga fisiche o un byte inserendo "\ n" in una variabile.


1
Nice.per il "+", penso che devi abbinare l'altezza e non sempre 3. Inoltre dovresti essere più in grado di usare il golf se () invece di case / break;
Crypto,

2

C #, 744 byte

È lungo 1 milione di caratteri, penso, ma non mi interessa, sono così felice di aver risolto questo ...

golfed:

string A(string s,int n){string O="";Func<string,int,string>R=(a,b)=>{return string.Join("",Enumerable.Repeat(a,b))+"\r\n";};switch(s){case"+":for(int i=0;i<n;i++){if(i==n/2){O+=R("+",n);}else{O+="+".PadLeft(n-n/2,' ').PadRight(n-n/2,' ')+"\r\n";}}return O;case"=":return R("=",n)+R("=",n);case "-":return R("-",n);case "/":for(int i=n;i>0;i--){O+="/".PadLeft(i)+"\r\n";}return O;case "x":int x=0;string[]r=new string[n];for(int i=n;i>0;i--){if(n-x-x<0){O+="x".PadLeft(x+1)+"\r\n";break;}string row=string.Join("",Enumerable.Repeat(" ",x))+"x"+string.Join("",Enumerable.Repeat(" ",n-x-x))+"x"+"\r\n";O+=row;x++;r[x]=row;if(i==n/2)break;}for(int i=r.Length-1;i>0;i--){if(string.IsNullOrEmpty(r[i]))continue;O+=r[i];}return O;default:return "";}}

Ungolfed:

public string A(string s, int n)
{
  string O = "";

  Func<string, int, string> R = (a, b) =>
  {
    return string.Join("", Enumerable.Repeat(a, b)) + "\r\n";
  };

  switch (s)
  {
    case "+":
      for (int i = 0; i < n; i++)
      {
        if (i == n / 2)
        {
          O += R("+", n);
        }
        else
        {
          O += "+".PadLeft(n - n / 2, ' ').PadRight(n - n / 2, ' ') + "\r\n";
        }
      }
      return O;
    case "=":
      return R("=", n) + R("=", n);
    case "-":
      return R("-", n);
    case "/":
      for (int i = n; i > 0; i--)
      {
        O += "/".PadLeft(i) + "\r\n";
      }
      return O;
    case "x":
      int x = 0;
      string[] r = new string[n];
      for (int i = n; i > 0; i--)
      {
        if (n - x - x < 0)
        {
          O += "x".PadLeft(x + 1) + "\r\n";
          break;
        }
        string row = string.Join("", Enumerable.Repeat(" ", x))
          + "x"
          + string.Join("", Enumerable.Repeat(" ", n - x - x)) + "x" + "\r\n";
        O += row;
        x++;
        r[x] = row;
        if (i == n / 2)
          break;
      }
      for (int i = r.Length - 1; i > 0; i--)
      {
        if (string.IsNullOrEmpty(r[i]))
          continue;
        O += r[i];
      }
      return O;
    default:
      return "";
  }
}

test:

+: 3, 5, 7, 9, 11
/: 7, 8, 9, 10
-: 3, 4, 5, 6
=: 3, 4, 5, 6, 7
x: 5, 7, 9, 11

Troppo da incollare e formattare qui, ho creato un pastebin:

pastebin


Si prega di golf e fornire un conteggio di byte.
mbomb007,

2

C, 331 byte

i,j;f(o,n){if(47==o)for(i=n;i;puts("")){for(j=i--;j--;putchar(j?32:o)){}}
if(43==o)for(i=n;i--;puts("")){for(j=n;j--;printf(i==n/2||!j?"+ ":" ")){}}
if(45==o)for(i=n;i--;putchar(o)){}
if(61==o)for(i=3;i--;puts("")){for(j=n;j--;putchar(i&1?32:o)){}}
if(120==o)for(i=n;i;puts("")){for(j=0;j++<n;putchar(j==i||j==n-i+1?o:32)){}i--;}}

L'operatore viene passato come codice ASCII in oe il carattere viene conteggiato in n. Ho solo aggiunto spazi tra caratteri orizzontalmente consecutivi nel segno più, poiché questo era l'unico in cui l'output sarebbe stato distorto se non lo avessi fatto e nel compito diceva solo "dovrebbe". Uso due cicli nidificati con il conto alla rovescia (tranne per il punto in -cui ho bisogno di una sola riga).

= Tre linee, una vuota, diritta in avanti

+usando a printfcausa degli spazi

- dritto

/ fare stampare il ciclo interno a zero e iniziare dal contatore del ciclo esterno

xavere la stampa del loop interno sul contatore del loop esterno e il suo "inverso" n-i. Devo ancora vedere perché sono fuori posto qui.

Chiamata di esempio:

#include <stdio.h>
/*  =       61
    +       43
    -       45
    /       47
    Space   32
    x       120
*/
int main(int argc, char **argv){
    printf("%s\n%s\n",argv[1], argv[2]);
    f(*argv[1],strtol(argv[2],NULL,10));
}

1

Lua, 402 344 312 byte

312:

r,p,b,x=string.rep,print,' ','x'function d(s,n)h,l=(n+1)/2,s..b;e=r(l,n)if s=='-'then p(e)elseif s=='='then p(e)p(e)else for f=1,n do p(s=='/'and(r(b,n-f)..s)or s=='+'and(f~=h and r(' ',n-1)..'+'or r('+ ',n))or f<h and r(b,f-1)..x..r(b,n-2*f)..x or f>h and r(b,n-f)..x..r(b,2*f-2-n)..x or r(b,f-1)..x)end end end

344:

r,p,b,x=string.rep,print,' ','x'function d(s,n)h,l=(n+1)/2,s..b;e=r(l,n)if s=='-'then p(e)elseif s=='='then p(e)p(e)else for f=1,n do if s=='/'then p(r(b,n-f)..s)elseif s=='+'then p(f~=h and r(' ',n-1)..'+'or r('+ ',n))elseif s=='x'then p(f<h and r(b,f-1)..x..r(b,n-2*f)..x or f>h and r(b,n-f)..x..r(b,2*f-2-n)..x or r(b,f-1)..x)end end end end

402:

r,p,b,x=string.rep,print,' ','x'function d(s,n)h=(n+1)/2;if s=='-'then p(r(s..b,n))end;if s=='='then p(r(s..b,n))p(r(s..b,n))end;if s=='/'then for i=1,n do p(r(b,n-i)..s)end end;if s=='+'then for i=1,n do p(i~=h and r(' ',n-1)..'+'or r('+ ',n))end end;if s=='x'then for i=1,n do if i<h then p(r(b,i-1)..x..r(b,n-2*i)..x)elseif i>h then p(r(b,n-i)..x..r(b,-n+2*i-2)..x)else p(r(b,i-1)..x)end end end end

90 caratteri ridotti ed è ora doloroso guardarli anche se espansi. : |


"Sembra anche che questa sia una vecchia sfida. Oops" Non c'è niente di sbagliato nel rispondere alle vecchie sfide.
Steadybox
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.