Operatör ASCII sanatı


22

Meydan okuma

Aşağıdaki listeden bir ASCII işleci ve bir sayı n verildiğinde, bu işleci n uzunluğuna sahip olan operatörün çizgi bölümleriyle karakter olarak kullanan işleci bir ASCII gösterimi çizin .

Giriş

Listeden bir ASCII karakteri = + - x /ve nnerede bir tamsayı n >= 1. (Bunun xyerine *ve /yerine kullanıyorum ÷, ancak hangisini daha kolaysa, ikisini de kullanabilirsiniz. İçin +ve xyalnızca hizalama ile sorunları önlemek için tek sayılar işlemek zorunda.

Çıktı

Operatörün ASCII çizimi, n uzunlukta uzunluklu karakterden oluşur. Yatay bölümler, dikey / yatay mesafe farklarını dengelemek için karakterler arasında boşluk bırakmalıdır.

kurallar

Bu , bayt cinsinden en kısa kod kazanır. Standart boşluklar yasaktır.

Örnekler

Giriş: + 3

  +
+ + +
  +

Giriş: = 4

= = = =
= = = =

Giriş: = 10

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

Giriş: - 2

- -

Giriş: / 10

         /
        /
       /
      /
     /
    /
   /
  /
 /
/

Giriş: x 7

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

için test davası ekleyebilir misiniz = 10?
Rod,

1
"X" ve "+" un tuhaf sayıları ima ettiğini varsayalım. (DrMcMoylex'in neredeyse aynı soruyu sorduğunu gördüm.)
Martin Rosenau

1
@MartinRosenau Evet, Girdi bölümünden: "+ ve x için, hizalama sorunlarını önlemek için yalnızca tek sayıları kullanmanız gerekir."
corvus_192

Neden X ve / aralıklı değil?
Ad

1
önde gelen boşluklara izin verilir mi?
Ad

Yanıtlar:


5

Pip , 62 59 56 bayt

55 bayt kodu, -Sbayrak için +1 .

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

Not Bu çözüm girişi ile çalıştığını ÷bölünme ve *bunun ASCII sanatı çizmek için bu karakterleri kullanır olsa çoğalması için /ve xsırasıyla. OP bunun yolunda olduğunu açıklığa kavuşturdu . Çevrimiçi deneyin!

Nasıl?

İşte kısmen boşluk bırakılmış ve yorumlanmış bir versiyon . Not, ave börneğin, operatör ve sırasıyla boyutu komut satırı bağımsız değişken vardır. -SBayrak denetimleri nasıl listeleri çıktı şunlardır: ilk satırbaşıyla üzerinde katılır, ancak boşluklar üzerinde herhangi iç içe listeleri katılır.

[                 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

Ve işte bireysel bölümler:

Çarpma işlemi

Şekildeki her satır için, bir boşluk dizisi oluşturuyoruz ve ardından ikisini giriş karakteriyle değiştiriyoruz. Satır için i, biz endeksinde boşluk değiştirmek istiyor ive b-1-i; ancak ikincisinin negatif dizini kullanabileceğini unutmayın -1-i. (Bu değişken daha da kısadır, çünkü değişken vnegati v e 1'e önceden başlatılmıştır .)

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

İlave

Dan stratejisini kullanarak benim içi boş kare çizin cevabı, bir sarar bir işlev tanımlamak +içinde b/2onun argüman kopyalarının ve karakterlerin bir listesi olarak sonuç döndürür. ( //Dize tekrarı işleci Xotomatik olarak tamsayıya kısaldığından dolayı tamsayı bölme gerekli değildir .) İlk önce, bu işlevi bir boşlukta çağırırız [" ";" ";"+";" ";" "]; daha sonra aynı işlevi bu sonuçla eşleriz [" ";" ";"+";" ";" "], çoğu satırda ancak ["+";"+";"+";"+";"+"]orta satırda. Bu iç içe geçmiş liste, -Sbayrağından dolayı , bir satırdaki tüm karakterler arasındaki boşluklarla satırlar arasındaki yeni satırlarla birlikte çıkar.

(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

Bölünme

Her bir satır arasında yer alır b-1ve 0giriş karakteri ve ardından boşluk, 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

Çıkarma

Giriş karakterinden boşlukla ayrılmış bir satır yapın. Bir kopyasını daha sonra saklayın.

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

Eşittir

Çıkarma adımı ihtiyacımız olanın yarısını depoladı - ysadece iki katına çıkarın.

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

Sahte xdeğerler, ana listeyi doldurmak için vardır, böylece modüler indeksleme, her giriş karakteri için benzersiz bir indeks verir +-*÷=.


13

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

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

Çevrimiçi deneyin!

Her zaman olduğu gibi, 05AB1E ile yapılan boyun ve boyun savaşı gerçekten eğlenceli!

Bu ASCII olmayan karakterler içerdiğinden, burada bir 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

Bu için çıktıda gelen boşluklar oluşturabilir yok =ve -fakat buna izin gibi görünüyor . Buna izin verilmezse, yorum yapmaktan çekinmeyin; geri alayım.

açıklama

"Global command" (örneğin ç), belirli bir regex ile eşleşen her satıra belirli bir komut seti uygular. Sözdizimi

ç<compressed regex>/<commands>

Koşullu / anahtar deyimini simüle etmenin en kolay yolu budur. Orijinal cevabımda, aramamız gereken her farklı karakter için ASCII sanatının tamamını sağ tarafta oluşturdum. Ancak, bu çıktıların çoğu benzer komutları gerektirir. Bu yüzden onları birleştirdim. İlk komut ( 'Ç') her satıra komutu uygular, aslında küresel komuta tersidir değil normal ifade eşleştirme. Yani ilk komut:

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

Aşağıdaki komut '=' ve '-' girişleri içindir. Bu ikisi uygun şekilde kolay ve benzerdir. Bu komuttan sonra, artık işlem yapmamız gerekmez -.

ç^Ó         " 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

Buradan, mümkün olan her giriş için sadece bazı ekstra komutlar veriyoruz. İçin +:

ç+/         " 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 '+ '

Eşittir için komut çok basittir. Sadece onu kopyaladık Ä. İçin /:

ç¯          " 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)

Sonuncusu en karmaşık olanıdır. Temelde bu cevabın bir limanıdır .

ç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'

bu yüzden çoklu hatlar bunun için kullanılıyor mu?
Conor O'Brien,

@Conorobrien Evet. çKomutu (yanı sıra arama ve değiştirme, /ve ?) aslında komutu çalıştırmak için Enter tuşuna basmanız şart Vim komutları hattı, tüm benzetmek parçası
DJMcMayhem

13

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

Şu anda V cevabı ile savaşta . Senin için geliyorum Dr. McMoylex: s.

Ayrıca Pip cevabı ile savaşta . Seni izleyeceğim Bay DLosc.


Kod:

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

Veya daha okunabilir bir biçimde:

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

CP-1252 kodlamasını kullanır . Çevrimiçi deneyin!


1
İşte yine
başlıyoruz

1
@DrMcMoylex Hahaha, eski güzel zamanlar :).
Adnan

30
Daha okunabilir ... tamamen ...
Oliver Ni

1
Belirli bir "okunabilir" tanımı için.
Matt Lacey


7

Python 3, 304 283 278 bayt

Yeterince basit, sadece bir karakter matrisi yapar ve hangisi olduğuna bağlı olarak farklı işlemleri uygular. =Ve -bu çok kötü değilse sonunda boşluk.

EDIT: 21 bayt tasarruf ile sonuçlanan önerileri için @Shebang ve @Rod'a teşekkürler!

EDIT2: 5 bayt tasarrufu için @Artyer teşekkürler!

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

if'-'==tKoşul çizgisini kaldırarak ve üstündeki çizgiyi değiştirerek 8 bayt tasarruf edebilirsiniz if t in'=-':b=[[t+' ']*s]*(2*(t>'-'))(sanırım).
Kade

fonksiyonları bir listenin içine sarabilir ve exec ile çalışabilirsiniz: exec(['+ block','/ block','x block','= block','- block']['+/x=-'.find(t)])~ 18 bayt kaydetmek için
Rod

Evet, sondaki boşluklar / yeni satırlar kabul edilebilir.
Yodle

İlk satır için .split()şunları yapın (Hiçbir boşluk beyaz boşlukta bölünmez). 6. satırda, bir boşluğu ( b=[[x+' 'for) kaçırdınız . Son satırı print(*map(''.join,b),sep='\n')1 bayt için yapabilirsiniz.
Artyer

7

JavaScript (ES6), 238 225 215 202 196 bayt

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

Muhtemelen golf oynayabilirdi, ama bu bir başlangıç.


6

Scala, 275 bayt

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

Kullanımı:

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

Açıklama:

Kod, görüntünün oluşturulmasının doğru yolunu seçmek için karakterin ascii değerini test eder. Söz konusu operatörlerin ascii değerleri: ('+' -> 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 bayt

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

Nerede \nliteral satır karakteri temsil eder.


Firefox 49'da SyntaxError: invalid property idhalihazırda yazıldığı gibi anladım, ancak kesme çizgisinin etrafındaki backtickleri kesme işareti düzeltmek için düzeltdim. (Neden orada kesme işareti yerine geri
tepmeleriniz var

Ayrıca için çıkış +, -ve =zorluk, aramalar daha görünüm farklı: "yatay bölümleri yatay / düşey mesafe farkları telafi etmek için karakter arası boşluk olmalıdır."
ETHProductions

@ETHproductions a) yazım hatası b) üzgünüm, daha sonra tamir edeceğini göz ardı ettim.
Neil

Bu gülünç olsa da kısa. Umarım onu ​​düzeltmek çok fazla bayt eklemez.
ETHProductions,

@ETHproductions Teşekkürler. Bunun 19 bayta mal olduğunu düşünüyorum.
Neil

4

Dyalog APL , 91 86 bayt

⎕IO←0Birçok sistemde varsayılan olan ihtiyaçlar . Alır n sol argüman olarak ve biri + - × ÷ = olarak doğru argüman.

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

açıklama

{
    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 bayt

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}," "],"
"," "]&

Anonim işlev Girdi olarak bir dize ve bir sayı alır ve çıktı olarak bir dize döndürür. Çok kısa değil, ama yine de yazmak eğlenceli.


3

C, 396 bayt

#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")}}

İle ara:

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

2

SOML , 104 100 bayt (yarışmayan)

    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

Bu tür bir rekabet, burada kullandığım her şeyin bu soruların gönderilme tarihinden önce github'da dokümanlar bulunduğundan, ancak ayrıştırıcının bu kadar idk kullandığım bazı işlevleri desteklemediğinden emin olduğumdan oldukça eminim.


2

PHP, 306 292 281 282 281 275 270 bayt

$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 bu hantal ... daha fazla golf oynamak istiyor.
Bir değişkene "\ n" koyarak 4 byte'lık fiziksel satır ya da bir byte'lık kurtarabilirim.


1
Nice. "+" İçin, her zaman 3 değil, yükseklikle eşleşmeniz gerektiğini düşünüyorum. Ayrıca, durum (mola yerine if () yerine if ();
Kripto

2

C #, 744 Bayt

1 milyon karakter uzunluğunda sanırım, ama umrumda değil, bunu çözdüğüm için çok mutluyum ...

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

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

Buraya yapıştırmak ve biçimlendirmek için çok fazla, bir pastebin oluşturdum:

pastebin


Lütfen golf oynayın ve bayt sayısı sağlayın.
mbomb007

2

C, 331 Bayt

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

Operatör ASCII kodu olarak girilir ove karakter sayılır n. Sadece art arda gelen karakterlerin arasına artı işaretine boşluklar ekledim, çünkü yapmasaydım ve görevde sadece "yapmalı" dediğimde çıktının çarpıtılacağı tek yerdi. Geriye doğru sayan iki iç içe döngü kullanıyorum ( -sadece bir satıra ihtiyacım olan yer hariç ).

= Üç Satır, bir tanesi boş, yalındır

+printfboşluklardan dolayı kullanma

- basit

/ iç döngü sıfır olarak yazdırılmalı ve dış döngü sayacında başlanmalıdır

xiç döngü dış döngünün sayacında ve "ters" olarak yazdırılmalıdır n-i. Hâlâ neden burada neden tek başıma olduğuma bakmaya ihtiyacım var.

Örnek arama:

#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 bayt

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 karakter düştü ve genişlediğinde bile bakmak artık acı verici. : |


“Ayrıca, bu eski bir meydan okuma gibi görünüyor. Hata” Eski zorluklara cevap vermede yanlış bir şey yok.
Steadybox
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.