E harfi ile E


19

Senin görevin, beş girdi verilen aşağıdaki "E" şeklinde ASCII sanatı harfi görüntülemek için.

Örnekler:

Giriş: 7,2,+,|,-(Not: Bu tam giriş biçimini izlemeniz gerekmez ve kullanmıyorsanız, kendi giriş biçiminizin nasıl çalıştığını açıklamanız gerekir)

Açıklama:

  • 7 sol ve sağ kenar karakterleri dahil toplam genişlik.

  • 2 Dikey karakter sayısı.

  • + Kenarlarda görüntülenmesi gereken karakter.

  • | Kenarlar arasında dikey olarak görüntülenmesi gereken karakter.

  • - Yatay olarak görüntülenmesi gereken karakter.

Yukarıdaki örneğin çıktısı:

+-----+ 
|
|
+-----+
|
|
+-----+


Diğer örnekler:

Giriş: 7,2,@,|,-

Çıktı:

@-----@
|
|
@-----@
|
|
@-----@


Giriş: 7,2,+,|,#

Çıktı:

+#####+
|
|
+#####+
|
|
+#####+


Giriş: 8,3,+,|,#

Çıktı:

+######+
|
|
|
+######+
|
|
|
+######+


Giriş: 8,3,+,@,#

Çıktı:

+######+
@
@
@
+######+
@
@
@
+######+


Giriş: 9,4,^,$,!

Çıktı:

^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^


Hile ve standart boşluklara izin verilmez.

Kodunuz STDERR'a hiçbir şey yazdırmamalıdır.

Kodunuz giriş olarak seçtiğiniz herhangi bir karakter kodlamasını kabul edebilir, ancak seçtiğiniz herhangi bir karakter kodlaması en azından 95 yazdırılabilir ASCII karakterini desteklemelidir.

Bu zorluğu başarıyla tamamlayan bayt cinsinden en kısa kod kazanan koddur.

Liderler Sıralaması


27
'Girdi yok' özel durumundan hoşlanmıyorum. Benim düşünceme göre, meydan okumaya hiçbir şey katmıyor ve hiçbir şey için çok karmaşık.
Yytsi

3
Başlık Ebir girdi olarak verebilir ve s Eile yapmak olabilir Emi?
trichoplax

3
Beğenmeme rağmen, 'girdi yok' gerçekten ne anlama geliyor? Floroid çözümüm, girdiyi geçmezseniz sonsuzluğun geri kalanına asılacaktır. Çözümümün rekabet edebilmesi için 5 sıfırı geçmeniz gerekecek ve girdilerin sıfır olup olmadığını kontrol edip buna göre davranmalıyım ...? -1.
Yytsi

4
@TheBitByte Gerçekten yanlış olduğunu düşündüğüm şeyleri görmek için ikinci yorumuma bakın. Şimdi bunu düzenledin, +1.
Yytsi

1
@Kevin Yup. 'Girdi yok' yorumuyla biraz karışıklık yaşıyordum. Boş dize aklımdaki 'girdi yok' ile eşit değil. Ve kodu bir tercümanın içinde çalıştırmak için çok kullanıldım, tam olarak girdinin beslenmesini bekledim, bu yüzden bunu oraya attım.
Yytsi

Yanıtlar:


6

05AB1E , 16 14 bayt

Í×s.ø©|`×`»D®»

açıklama

Í×                  # create a string of the correct nr of horizontal chars
  s.ø               # add the corner char on both sides
     ©              # save in register while keeping it on the stack
      |`            # push the remaining inputs to the top of the stack
        ×`          # push the correct nr of vertical chars on the stack
          »         # join on newline (joining the top vertical and horizontal sections)
           D        # duplicate this
            ®       # push the horizontal part again
             »      # join everything on newline

Çevrimiçi deneyin!

Adnan sayesinde 4 bayt kurtardı.


1
Merak ettikten sonra neden ©p'yi kullanıyorsunuz?
Adnan

1
@Adnan: İyi yakaladın! Ben gidiyordum, ama onu kullanarak sona erdi ve kaldırmayı unuttum :)
Emigna

1
@muddyfish: Bu bölümün belli olmadığı sorusundaki açıklamayı okumak, bu yüzden kaçırdım. Bana bildirdiğiniz için teşekkürler!
Emigna

1
Burada çalışan bir özel Surround komut da var: Í×s.øU×S»X»D»Xr».
Adnan

2
@Adnan: Haklısın. İyi düşünmek! Bunu daha önce hiç kullanmadım :)
Emigna

6

Python, 53 51 55 Bayt

lambda a,b,c,d,e:d.join("\n"*-~b).join([c+e*(a-2)+c]*3)

@Nimi sayesinde +4 Bayt

anonim lambda fonksiyonu, çağırmak, yazmak f= önce . Misal:

>>> print f(4,1,"€","|","-")
€--€
|
€--€
|
€--€

alternatif, 53 Bayt

lambda a,b,c,d,e:((c+e*a+c+"\n"+(d+"\n")*b)*3)[:-b*2]

girişsiz özel durum ile eski versiyon, 69 65 63 Bayt

meydan okuma gereksinimlerini değiştirmek için yay ...

lambda a=1,b=1,(c,d,e)="+|-":d.join("\n"*-~b).join([c+e*a+c]*3)

2
Küçük hata: ilk argüman ( 2örneğin), köşeler dahil olmak üzere çizginin toplam uzunluğudur, bu nedenle şeklin için doğru girdi f(4,1 ...).
nimi

@nimi bahşiş için teşekkürler. (4 bayt :() Operasyonel İlk örnek biraz kafa karıştırıcı olduğunu (diğer cevapların bazıları bu hata içerisinde muhtelif var).
KarlKastor

4

C 167 161 159 bayt

Evet.

#define p putchar
i,j;g(a,c,e){p(c);for(i=2;i++<a;)p(e);p(c);p(10);}h(b,d){for(i=0;i++<b;){p(d);p(10);}}f(a,b,c,d,e){g(a,c,e);h(b,d);g(a,c,e);h(b,d);g(a,c,e);}

Bazı test senaryolarıyla Ideone'da deneyin


2
("") -> p ('\ n')? hatta işe yarayacaksa p (10)
16:03

Bunu nasıl özledim! Teşekkürler @RiaD.
16:34

Ayrıca 2 ile döngü başlatırsanız, daha fazla bayt kaydedeceksiniz
RiaD

3

Yakut, 54 45 42 bayt

->x,y,c,v,h{[c+h*~-~-x+c+$/]*3*((v+$/)*y)}

Girdinin farklı kısmını ayrı parametreler olarak alan ve sonucu tam bir dize olarak döndüren anonim bir işlevdir.

Örneğin,

f=->x,y,c,v,h{[c+h*~-~-x+c+$/]*3*((v+$/)*y)}
puts f[6, 2, 'Ø', 'V', '>']

baskılar

Ø>>>>Ø
V
V
Ø>>>>Ø
V
V
Ø>>>>Ø

3

Javascript (ES6), 64 bayt

(h,v,e,V,H)=>(v=(h=e+H.repeat(h-2)+e)+`
${V}`.repeat(v)+`
`)+v+h

Misal

let f =
(h,v,e,V,H)=>(v=(h=e+H.repeat(h-2)+e)+`
${V}`.repeat(v)+`
`)+v+h

console.log(f(8,3,'+','@','#'))


Bu, giriş yapılmayan özel durumu ele alıyor mu?
Conor O'Brien

{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }satır içi çalıştırıldığında.
noɥʇʎԀʎzɐɹƆ

@AgentCrazyPython - IE'de çalıştırılsın mı? Hiçbir desteği vardır için.repeat()
Arnauld

@Arnauld naw, safari
noɥʇʎԀʎzɐɹƆ

oh, bu ES6 ...
noɥʇʎԀʎzɐɹƆ


3

R, 80 bayt

Oldukça tekrarlayan:

function(h,v,a,b,c)cat(t<-c(a,rep(c,h),a,"\n"),d<-rep(c(b,"\n"),v),t,d,t,sep="")

Kurtulmamış:

function(h,v,a,b,c)

cat(t<-c(a,rep(c,h),a,"\n"),
    d<-rep(c(b,"\n"),v),
    t,d,t,
    sep="")


2

Pyth, 19 bayt

jP*3,++Jw*-E2wJj*Ew

Köşe karakterin STDIN'ine yatay satır, yatay karakter sayısı, yatay karakter, dikey karakter sayısı ve dikey karakter içeren satır sonu girdisi alan ve sonucu basan bir program.

Çevrimiçi deneyin

Nasıl çalışır

jP*3,++Jw*-E2wJj*Ew  Program.
       Jw            Get the corner character. Store in J
           E         Get the number of horizontal characters
          - 2        -2
         *   w       Get the horizontal character and repeat it that many times
      +              Add J at the beginning of that
     +         J     and at the end
                 E   Get the number of vertical characters
                * w  Get the vertical character and repeat it that many times
               j     Join the above on newlines
    ,                Construct a 2-element list from the horizontal and vertical strings
  *3                 Repeat it 3 times
 P                   Everything except the last element
j                    Join the above on newlines
                     Implicitly print

2

MATLAB, 95 92 91 85 81 bayt

MATLAB 'E' işlevi. (değiştir: Octave üzerinde çalışmıyor)

function a=e(n,m,c,h,v);a(1:n)=h;a=[c a c];a(2:m+1,1)=v;a=[a;a;a];a=a(1:3+2*m,:);

Ve ungolfed:

function a=e(n,m,c,h,v); %Declare the function
a(1:n)=h;                %Initialise return with top line excluding the corners
a=[c a c];               %Then add corner pieces
a(2:m+1,1)=v;            %Next add the first vertical part
a=[a;a;a];               %Repeat three times vertically to get an E with a tail
a=a(1:3+2*m,:);          %And then lop off the tail

Fonksiyon şöyle adlandırılmalıdır:

e(5,2,'*','-','|')

Hangi dönecektir:

+-----+
|      
|      
+-----+
|      
|      
+-----+

Bu muhtemelen biraz basitleştirilebilir, üzerinde çalışmaya devam edeceğim. Giriş almak için tüm işlev bildirimine sahip olmaktan hoşlanmıyorum, bu yüzden bunu geliştirip geliştiremeyeceğimi göreceğim.


  • İlk satırın köşeleri olmadan çizgiyi oluşturması ve daha sonra köşeleri eklemesi için ilk satırın oluşturulmasını basitleştirerek 3 bayt kaydedildi, bu da dizin oluşturma sayısını azaltır.

  • İlk köşeden başlayarak kaydedilen başka bir bayt.

  • Daha 6 değiştirerek bayt repmat(a,3,1)ile görüşmesi [a;a;a].

  • aBelirli bir başlatma olmadan kullanarak 4 bayt kaydedildi (zaten işlev bildiriminde bildirildi) - teşekkürler @LuisMendo


1
@LuisMendo ilginç. Aslında a=[c a c]orada vardı ama normalde olmayan bir değişken erişim indeks ve süreçte oluşturamaz gibi şeyler küçültmek için kaldırıldı. Bu bir işlev olduğunu unuttum azaten işlev beyanında dönüş değeri olarak bildirildi. Teşekkürler :)
Tom Carpenter

Aslında bunu bir işlevde olmasa bile yapabilirsiniz - var olmayan bir değişkenin indekslenmesi onu yaratır. Her gün yeni şeyler öğrenin.
Tom Carpenter

2

Perl, 40 + 1 ( -n) = 41 bayt

14 bayt tasarrufu ve programın 10'dan büyük girişle çalışmasına izin verdiği için @Ton Hospel'e teşekkürler .

/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3

İhtiyaç -n olduğu gibi -E(veya-M5.010 ) çalıştırmak için. Örneğin :

perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$
!
4
9'

1
@TheBitByte Tamam, tamam, teşekkürler.
Dada

2
Bu zaten çok iyi. Ancak giriş formatı ile biraz oynayabilir ve aynı zamanda zorluğun tekrarların bir dosyaya < 10koyduğunu /(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3(kullandığından beri $') ve perl -M5.010 -n prog.pl <<< '^!S\n4\n9'48 bayt (2 ekstra ) ile çağrılarak (gerçek satırları kullanın ) söyleme kusurunu çözebilirsiniz. ile birleştirilemeyeceği için handikap -e)
Ton Hospel

@TonHospel Teşekkürler. Doğru, bunun sayılarla işe yaramayacağını bile fark etmemiştim >10.. Giriş formatı ile harika bir çalışma, teşekkürler.
Dada

Bu, giriş formatını seçme özgürlüğünü kötüye kullanmaya yaklaşıyor, ancak: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'41 bayt (artık yok $') ve aynı zamanda sahte son
satırdan kurtuldu

@TonHospel Gerçekten, ilk önerinizden sonra bu çözümü buldum, ancak girdi biçimi nedeniyle çok rahat değildim ... İkimiz de düşündüğümüzden beri cevabımı değiştirdim, ama yine de gibi hissediyorum biraz ucuz ...
Dada

2

Dyalog APL , 31 29 bayt

Yatay karakter, genişlik, bağlantı karakteri, yükseklik, dikey karakter - bu sırayla istenir.

h↓⊃⍪/3/⊂↑(⍞⍴⍨h←⎕),⊂⍞{∊⍺⍵⍺}⎕⍴⍞

⎕⍴⍞ girdi-yatay-karakter ve girdi-genişlik zamanlarını tekrarlayın ( aşağıda)

⍞{...} fonksiyonda olacak giriş-bağlantı-karakteri ...

∊⍺⍵⍺ düzleştir [[kavşak], [ufuk çizgileri], [kavşak]]

listenin bir parçası olabilmesi için kapsülleyin

(...), başında ...

h←⎕ giriş yükseklik

⍞⍴⍨ girdi-dikey-karakter ve birçok kez tekrarlayın

karakter listesini bir karakter tablosuna dönüştür

kapsüllemek (böylece bir bütün olarak tekrarlanabilir)

3/ üç kez tekrarla

    
┗━ ┗━ ┗━

⍪/ üç parçayı dikey olarak birleştirin


┣━
┣━
┗━

(bu onları da içine alır, bu yüzden ...

kapsüllemeyi kaldır

h↓ilk h'yi bırak (satırlar)

┏━
┣━
┗━

TryAPL çevrimiçi!


2

C, 130 bayt

#define p putchar
#define E for(o=0;o++<O;p(10))p(S);
#define W for(p(P),D=0;D++<C-2;)p(_);p(P);p(10);
f(C,O,P,S,_,D,o){W E W E W}

Kullanımı:

main(){f(7,2,'+','|','-');}

Çıktı

+-----+
|
|
+-----+
|
|
+-----+

defineS içindeki noktalı virgüllerin kaldırılması ve f(C,O,P,S,_,D,o){W;E;W;E;W;}bir bayt olarak kaydedilmesi.
betseg

2

C #, 108 bayt

(m,n,e,v,h)=>{string x=e+new string(h,m-2)+e+"\n",y=new string(v,n).Replace(v+"",v+"\n");return x+y+x+y+x;};

Her yatay ve dikey çizgiyi oluşturan ve son çıktıyı oluşturan anonim işlev.

Ungolfed işlevi:

(m,n,e,v,h)=>
{
    string x = e + new string(h, m - 2) + e + "\n",
        y = new string(v, n).Replace(v + "", v + "\n");
    return x + y + x + y + x;
};

Test senaryolarıyla birlikte tam program:

using System;

namespace LetterEWithoutE
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,int,char,char,char,string>f= (m,n,e,v,h)=>{string x=e+new string(h,m-2)+e+"\n",y=new string(v,n).Replace(v+"",v+"\n");return x+y+x+y+x;};

            Console.WriteLine(f(7,2,'+','|','-'));
            Console.WriteLine(f(7,2,'@','|','-'));
            Console.WriteLine(f(7,2,'@','|','#'));
            Console.WriteLine(f(8,3,'+','|','#'));
            Console.WriteLine(f(8,3,'+','@','#'));
            Console.WriteLine(f(9,4,'^','$','!'));
        }
    }
}

2

MATL , 15 bayt

Düzeltme için muddyfish'e teşekkürler

2-Y"yv!iiY"!yyy

Çevrimiçi deneyin!

açıklama

Her adımdan sonraki yığın içerikleri, meydan okumadaki ilk örnek kullanılarak anlaşılırlık için belirtilmiştir.

2-    % Implicitly input number of repetitions of the char of the horizontal line.
      % Subtract 2
      %   STACK: 5
Y"    % Implicitly input char of the horizontal line. Apply run-length decoding
      %   STACK: '-----' (string)
y     % Implicitly input (from below) the char of the corners. Duplicate onto the top
      %   STACK: '+', '-----', '+'
v!    % Concatenate all the stack horizontally. We now have the horizontal line
      % including the corners
      %   STACK: '+-----+'
iiY"  % Take two inputs: char of the vertical line and number of repetitions
      %   STACK: '+-----+', '||'
!     % Transpose. This tranforms the string into a vertical char array, which
      % gives the vertical line
      %   STACK: '+-----+', ['|';'|'] (vertical char array)
y     % Duplicate from below: this pushes a new copy of the horizontal line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+'
y     % Duplicate from below: this pushes a new copy of the vertical line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+', ['|';'|'],
y     % Duplicate from below: this pushes a new copy of the horizontal line
      % onto the top of the stack
      %   STACK: '+-----+', ['|';'|'], '+-----+', ['|';'|'], '+-----+'
      % Implicitly display

1

Bash + coreutils, 105 bayt

printf -- "$3`printf -- "$4%.0s" $(seq $1)`$3`printf "\n$5%.0s" $(seq $2)`%.0s\n" {1..3}|sed -n 1,$(($2*2+3))p

İçinde depolandığı dosyanın ismini varsayarsak A.sh kullanım şöyle olur:

bash A.sh <Horizontal Segment Length w/out Edge Chars> <Vertical Segment Length> '<Left/Right Edge Char>' '<Char Between Edges>' '<Vertical Char>'

--Karakter girişlerden birini olur, her ihtimale ihtiyaç vardır -veprintf çift tire olmadan çok güzel bir dize başında tire işlemez anlaşılan.

açıklama

Girdinin 5 2 + * |...

  1. $3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)

    İlk yatay segmenti ve dikey segmenti birlikte oluşturun. Bunun sonucu:

    +*****+
    |
    |
    
  2. printf -- "$3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)%.0s\n" {1..3}

    Önceden oluşturulan parça 3zamanlarını tekrarlayın . Bu şimdi şöyle sonuçlanıyor:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    |
    |
    
  3. printf -- "$3printf -- "$4%.0s" $(seq $1)$3printf "\n$5%.0s" $(seq $2)%.0s\n" {1..3}|sed -n 1,$(($2*2+3))p

    Son olarak sed, sadece ilk <Vertical Segment Length>*2+3satırlarını çıkararak son 2 satır segmentinden kurtulmak için önceki çıkışı borulayın E. Sonunda Eistediğimizi elde ederiz:

    +*****+
    |
    |
    +*****+
    |
    |
    +*****+
    

1

PowerShell v2 +, 60 59 bayt

param($a,$b,$c,$d,$e)(,($x="$c$($e*($a-2))$c")+,$d*$b)*2;$x

Girdiyi ayrı komut satırı bağımsız değişkenleri olarak alır. Yatay dizgiyi oluşturur, $xdaha sonra kullanmak üzere saklar , ardından virgül operatörü ile bir dizi haline getirir ,. $dBir $böğe dizisine formüle edilen dizi birleştirmesini (yani sonuna öğelerin eklenmesini) gerçekleştirir . Bu da, başka bir virgül operatörü ile iki elemandan oluşan bir diziye formüle edilir ve boru hattında bırakılır. Ardından yatay $xboru hattında bırakılır. Öğesinin varsayılan biçimlendirmesini kötüye kullanırWrite-OutputÖğelerin arasına yeni satır koymak kullanır.

Misal

PS C:\Tools\Scripts\golfing> .\the-letter-e-without-e.ps1 5 3 "z" "v" "d"
zdddz
v
v
v
zdddz
v
v
v
zdddz

1

Python 3, 60 bayt

Bir işlev

def p(a,b,c,d,e):q=c+e*(a-2)+c;return(q+'\n'+(d+'\n')*b)*2+q

Test durumu

>>> print(p(8,2,'+','|','#'))
+######+
|
|
+######+
|
|
+######+

çıktıda 2 çok fazla çizgi var
Blue

1

Brainf * ck, 147 bayt

,>,>++++++++[<------<------>>-]<<-->>>,>,>,>+++>++>++++++++++<<[-<<<.<<<[->>+>>>.<<<<<]>>[-<<+>>]>.>>>>>.<[-<<<<<<[->+>>.>>>>.<<<<<<<]>[<+>-]]>>>>]

Girilen ilk 5 karakter olarak stdin'den girdi alır. İlk ikisinin ASCII kodlarından 48 tanesi çıkarılmıştır, bu nedenle 0-9 beklendiği gibi davranır. 9'dan büyük sayılar için sayıya 48 ekleyin ve karşılık gelen karakteri kullanın. Diğer üç karakter meydan okumada belirtildiği gibidir.

Eminim bu en uygun çözüm değildir ama hayat golf brainf * ck için çok kısa.

Yorumlarla:

[
    Input: number number corner vertical horizontal
    Numbers are single digits; add 48 and use the ASCII character corresponding
    to the number you want for numbers > 9.
    First number is the number of characters across. Second is the number down.

    Layout: {first number-2} {second number} {temp} {a} {b} {c}
]

,>,>++++++++[<------<------>>-]<<-->>>,>,>,
now we should have the first five cells with the specified layout
the 6th will hold 3 as a counter and the 7th 2 and the 8th 10 '\n'

>+++>++>++++++++++<<
[  while the 6th cell is not 0
    -
    <<<.    print corner
    <<<[->>+>>>.<<<<<]  print horizontal characters
    >>[-<<+>>]         copy temp back to 1st cell
    >.>>>>>.           print corner and newline
    <
    [ If the second counter is not zero
        -
        <<<<<<[->+>>.>>>>.<<<<<<<]  print vertical and newline n times
        >[<+>-]           copy temp back to 2nd cell
    ]
    >>>>
]

Örnek çalışma:

sean@SEANSBOX:~/Dropbox/Code/BF$ ./bf E.b
94^$!
^!!!!!!!^
$
$
$
$
^!!!!!!!^
$
$
$
$
^!!!!!!!^

1

PHP, 97 bayt

list(,$w,$h,$c,$v,$r)=$argv;echo$b=str_pad($a=str_pad($c,++$w,$r)."$c\n",--$h*2+$w,"$v\n"),$b,$a;

döngü yok, sadece yerleşik.

İle çalıştırın php -r '<code>' <parameters>.


1

Java 7, 205129 bayt

String c(int w,int h,String a,char b,char c){String r=a,n="\n",l="";for(;w-->2;r+=c);r+=a+n;for(;h-->0;l+=b+n);return r+l+r+l+r;}

İsimsiz bir yabancı sayesinde -76 bayt.
Not: Bir dahaki sefere başkalarının yayınlarını düzenlemeyin. Golf için bir şey varsa, lütfen yorum olarak bırakın veya tamamen farklı bir yaklaşım kullanıyorsa, kendi cevabınızı yapabilirsiniz. Yine de, tüm bu baytları golf oynadığınız için teşekkürler - kim olursanız olun ..

Test edilmemiş ve test durumları:

Burada deneyin.

class M {
    static String c(int w, int h, String a, char b, char c){
        String r = a,
               n = "\n",
               l = "";
        for(; w-- > 2; r += c);
        r += a+n;
        for( ;h-- > 0; l += b+n);
        return r+l+r+l+r;
    }

    public static void main(String[] a) {
        System.out.print(c(7, 2, "+", '|', '-'));
        System.out.print(c(9, 4, "?", '¡', '¿'));
    }
}

Çıktı:

+-----+
|    
|    
+-----+
|    
|    
+-----+

?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?
¡      
¡      
¡      
¡      
?¿¿¿¿¿¿¿?

0

Raket 124 bayt

(λ(w h a b c)(for((i 3))(display a)(for((i w))(display c))(display a)(when(< i 2)(displayln "")(for((j h))(displayln b)))))

Daha okunabilir form:

(define(f w h a b c)
  (for((i 3))
    (display a)
    (for((i w))
      (display c))
    (display a)
    (when(< i 2)
      (displayln "")
      (for((j h))
        (displayln b)))))

Test yapmak:

(f 7 2 "+" "|" "-" )

+-------+
|
|
+-------+
|
|
+-------+

0

C ++, 121 Bayt

#import<string>
#import<iostream>
#define f(w,h,C,W,H){std::string s(w,W),t;s=C+s+C+"\n";for(int i=h;i--;)t=t+H+"\n";std::cout<<s+t+s+t+s;}

Ungolfed:

#import<string>
#import<iostream>
#define f(w,h,C,W,H){
    std::string s(w,W),t;  //define two strings, one empty, one with horizontal characters
    s = C+s+C+"\n";        //assemble a horizontal bar
    for(int i=h;i--;) 
        t=t+H+"\n";        //assemble a vertical bar
    std::cout<<s+t+s+t+s;  //print
}

C ++ 'da C gibi tipsiz fonksiyonlar bildirmesine izin verilmez. Fakat tıpkı bir fonksiyon gibi davranan makrolar tamamen mümkündür. Unutulmamış sürümün her birine "\" eklemeden, ancak makronun son satırına kadar derlenmeyeceğini de unutmayın. {} Öğesini kaldırarak iki ek bayt kaydedebilirsiniz, ancak daha sonra makroyu arka arkaya iki kez kullanamazsınız.

Kullanımı:

int main() {
    f(4,2,'+','-','|')
    f(2,1,'@','#','i')
    return 0;
}

Çıktı:

+----+
|
|
+----+
|
|
+----+
@##@
i
@##@
i
@##@

Çevrimiçi deneyin


0

CJam , 23 bayt

riri)N*r2*\r*\@r**a3*\*

Çevrimiçi deneyin!

Giriş verilen sırada, ancak virgül kullanmak yerine boşlukla ayrılmalıdır. Zorluğun bir kısmı, CJam'in birleştirme operasyonu* için girdiyi doğru sıraya sokmak ; Karşılaştırma için girişi yeniden düzenlemek 4 bayt tasarruf edebilir .

Girişler dublajlanırsa A B C D E, program şu şekilde çalışır:

ri     e# get A as integer
ri)N*  e# create B+1 newlines
r2*    e# create 2 Cs
\r*    e# join newlines with D (hereafter ND)
\@     e# bring A & Cs to the front
r*     e# create A Es
*      e# join, puts Es between Cs (hereafter CEC)
a3*    e# makes 3 copies of CEC strings
\*     e# join, puts NDs between CECs

0

Lua (5.2), 144 bayt

k,a,p,q=loadstring,arg,io.write,print l,d=k"for i=3,a[1]do p(a[5])end",k"for i=1,a[2]do q(a[4])end"b=a[3]p(b)l()q(b)d()p(b)l()q(b)d()p(b)l()p(b)

Çevrimiçi deneyin! (Kodlama Alanı)

Şu anda böyle bir şey çıkarmalıdır:

+@@@@@+
l
l
+@@@@@+
l
l
+@@@@@+

Kendi girdisi: 7 2 + l @

Proje-> derleme seçeneklerindeki girdiyi değiştirebilir ve her biri örnekteki gibi değerleri virgüllerle değil boşluklarla ayırarak değerleri değiştirebilirsiniz.


0

QBIC, 44 bayt

::;;;X=A[q,a-2|X=X+C]X=X+A ?X[1,2|[1,b|?B]?X

açıklama

::;;;                 Get the input parameters, 2 numbers and 3 strings
X=A[q,a-2|X=X+C]X=X+A Build the horizontal string: The corner string, x-2 times the filler string and another corner
?X                    Print the horizontal string
[1,2|                 Do the next thing twice
[1,b|?B]?X            Print the right number of vertical strings, then the horizontal string.

0

PHP, 94 Bayt

<?list($v,$h,$p,$d,$r)=$_GET[a];for($h++;$i<=2*$h;)echo$i++%$h?$d:str_pad($p,$v-1,$r).$p,"\n";

Bir diziyi önerilen dizeyle aynı sırayla girin


,"\n"Bunun yerine kullanırsanız ."\n", üçlü için parantezleri bırakabilirsiniz.
Titus

for($h++;$i<=2*$h;)ve $i++%$hbaşka bir bayt kaydeder.
Titus

$v-1için yalnızca 3 yatay karakter verir [5,2,+,|,-]. Sol ve sağ kenar karakterler hariç yatay karakter sayısı
Titus

@Titus doğru, düzenlemenizi geri aldım. 5 Yatay araçlar 3 2 kenarlı karakterler = 5. Soruyu inceleyin. Ve diğer fikirler için Teşekkür Ederim
Jörg Hülsermann
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.