จดหมาย E กับ E


19

งานของคุณคือการแสดงตัวอักษร ASCII ด้านล่างตัวอักษร "E" ตามที่กำหนดจากอินพุตห้าตัว

ตัวอย่าง:

อินพุต: 7,2,+,|,-(หมายเหตุ: คุณไม่ต้องทำตามรูปแบบการป้อนข้อมูลที่แน่นอนนี้และหากคุณไม่ได้ใช้งานคุณจะต้องอธิบายว่ารูปแบบการป้อนข้อมูลของคุณทำงานอย่างไร)

คำอธิบาย:

  • 7 ความกว้างทั้งหมดรวมถึงอักขระขอบซ้ายและขวา

  • 2 จำนวนอักขระแนวตั้ง

  • + อักขระที่ควรแสดงที่ขอบ

  • | อักขระที่ควรแสดงในแนวตั้งระหว่างขอบ

  • - อักขระที่ควรแสดงในแนวนอน

ผลลัพธ์ของตัวอย่างข้างต้น:

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


ตัวอย่างอื่น ๆ :

การป้อนข้อมูล: 7,2,@,|,-

เอาท์พุท:

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


การป้อนข้อมูล: 7,2,+,|,#

เอาท์พุท:

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


การป้อนข้อมูล: 8,3,+,|,#

เอาท์พุท:

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


การป้อนข้อมูล: 8,3,+,@,#

เอาท์พุท:

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


การป้อนข้อมูล: 9,4,^,$,!

เอาท์พุท:

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


ไม่อนุญาตการโกงและช่องโหว่มาตรฐาน

รหัสของคุณต้องไม่พิมพ์อะไรไปยัง STDERR

รหัสของคุณอาจยอมรับการเข้ารหัสอักขระใด ๆ ที่คุณเลือกเป็นอินพุต แต่การเข้ารหัสอักขระใด ๆ ที่คุณเลือกจะต้องสนับสนุนอักขระ ASCII ที่พิมพ์ได้ 95 ตัว

รหัสที่สั้นที่สุดในหน่วยไบต์ที่ทำให้การท้าทายนี้สำเร็จเป็นรหัสที่ชนะ

ลีดเดอร์บอร์ด


27
ฉันไม่ชอบกรณีพิเศษของ 'ไม่ป้อนข้อมูล' ในความคิดของฉันมันไม่ได้เพิ่มอะไรให้กับความท้าทายและยุ่งยากอะไรมากมาย
Yytsi

3
เป็นชื่อเพราะคุณสามารถให้Eเป็นอินพุตและสร้างEด้วยEs หรือไม่?
trichoplax

3
แม้ฉันจะไม่ชอบก็ตาม 'ไม่มีอินพุต' หมายถึงอะไรจริง ๆ ? วิธีการแก้ปัญหา Floroid ของฉันจะแขวนสำหรับส่วนที่เหลือของนิรันดร์ถ้าคุณไม่ผ่านการป้อนข้อมูล สำหรับวิธีการแก้ปัญหาของฉันที่จะแข่งขันคุณจะต้องผ่าน5ศูนย์และฉันจะต้องตรวจสอบว่าปัจจัยการผลิตเป็นศูนย์และปฏิบัติตาม ... ? -1
Yytsi

4
@TheBitByte ดูความคิดเห็นที่สองของฉันเพื่อดูสิ่งที่ฉันคิดว่าผิดกับมัน ตอนนี้คุณแก้ไขสิ่งนั้นแล้ว +1
Yytsi

1
@Kevin Yup ฉันแค่สับสนเล็กน้อยกับการตีความ 'ไม่ป้อนข้อมูล' สตริงว่างไม่เท่ากับ 'ไม่มีอินพุต' ในใจของฉัน และฉันก็คุ้นเคยกับการเรียกใช้รหัสในล่ามซึ่งฉันรอการป้อนข้อมูลที่แท้จริงดังนั้นฉันจึงโยนมันออกไปที่นั่น
Yytsi

คำตอบ:


6

05AB1E , 16 14 ไบต์

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

คำอธิบาย

Í×                  # 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

ลองออนไลน์!

บันทึกแล้ว 4 ไบต์ขอบคุณ Adnan


1
จากความอยากรู้ทำไมคุณใช้©register: p
Adnan

1
@Adnan: จับได้ดี! ฉันกำลังจะไป แต่จบลงไม่ได้ใช้มันและลืมที่จะเอามันออกไป :)
Emigna

1
@muddyfish: การอ่านคำอธิบายจากคำถามที่ส่วนไม่ชัดเจนดังนั้นฉันจึงพลาดไป ขอบคุณสำหรับการให้ฉันรู้ว่า!
Emigna

1
นอกจากนี้ยังมีคำสั่งเซอร์ราวด์พิเศษที่ใช้งานได้ที่นี่: Í×s.øU×S»X»D»Xr».
Adnan

2
@Adnan: ใช่คุณ ความคิดที่ดี! ฉันไม่เคยใช้มันมาก่อน :)
Emigna

6

Python, 53 51 55 ไบต์

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

+4 ไบต์ขอบคุณ @nimi

ฟังก์ชั่นแลมบ์ดานิรนามเพื่อเรียกใช้เขียนf=ก่อน ตัวอย่าง:

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

ทางเลือก 53 ไบต์

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

รุ่นเก่าที่มีกรณีพิเศษไม่มีอินพุต69 65 63 ไบต์

ใช่เปลี่ยนความต้องการตรงกลางที่ท้าทาย ...

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

2
ข้อผิดพลาดเล็ก ๆ : อาร์กิวเมนต์แรก ( 2ในตัวอย่างของคุณ) f(4,1 ...)เป็นความยาวรวมของเส้นรวมทั้งมุมเพื่อให้การป้อนข้อมูลที่เหมาะสมสำหรับรูปร่างของคุณคือ
nimi

@nimi ขอบคุณสำหรับเคล็ดลับ (+4 bytes :() ตัวอย่างแรก OPs ค่อนข้างสับสน (คำตอบอื่น ๆ บางข้อมีข้อผิดพลาดนี้เช่นกัน)
KarlKastor

4

C, 167 161 159 ไบต์

ใช่.

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

ลองใช้กับ Ideone ในบางกรณีทดสอบ


2
ทำให้ ("") -> p ('\ n') หรือไม่ หรือแม้กระทั่ง p (10) ถ้ามันจะใช้งานได้
RiaD

ฉันพลาดได้อย่างไร! ขอบคุณ @RiaD
betseg

นอกจากนี้ถ้าคุณเริ่มวนซ้ำด้วย 2 คุณจะบันทึกเป็นไบต์มากขึ้น
RiaD

3

Ruby, 54 45 42 ไบต์

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

มันเป็นฟังก์ชั่นที่ไม่ระบุชื่อที่ใช้ส่วนต่าง ๆ ของอินพุตเป็นพารามิเตอร์แยกและส่งกลับผลลัพธ์เป็นสตริงที่สมบูรณ์

ตัวอย่างเช่น,

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

พิมพ์

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

3

Javascript (ES6), 64 ไบต์

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

ตัวอย่าง

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,'+','@','#'))


สิ่งนี้จัดการกรณีพิเศษที่ไม่มีอินพุตหรือไม่?
Conor O'Brien

{ "message": "Script error.", "filename": "", "lineno": 0, "colno": 0 }เมื่อเรียกใช้แบบอินไลน์
noɥʇʎԀʎzɐɹƆ

@AgentCrazyPython - ทำงานบน IE หรือไม่ ไม่มีการสนับสนุนสำหรับ.repeat()
Arnauld

@Arnauld naw, ซาฟารี
noɐɹƆzɐɹƆ

โอ้มันเป็น ES6 ...
ɥʇʎԀʎzɐɹƆ


3

R, 80 ไบต์

สวยซ้ำ ๆ :

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="")

Ungolfed:

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 ไบต์

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

โปรแกรมที่รับอินพุตที่คั่นด้วยบรรทัดใหม่บน STDIN ของอักขระมุมจำนวนอักขระแนวนอนอักขระแนวนอนจำนวนอักขระแนวตั้งและอักขระแนวตั้งและพิมพ์ผลลัพธ์

ลองออนไลน์

มันทำงานอย่างไร

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 ไบต์

ฟังก์ชัน MATLAB 'E' (แก้ไข: ไม่ทำงานในระดับแปดเสียง)

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,:);

และไม่ดี

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

ฟังก์ชั่นควรจะเรียกว่าชอบ:

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

ซึ่งจะส่งคืน:

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

นี่อาจเป็นเรื่องง่ายนิดหน่อยฉันจะทำต่อไป ฉันไม่ชอบให้มีการประกาศฟังก์ชั่นทั้งหมดเพื่อรับอินพุตดังนั้นจะดูว่าฉันสามารถปรับปรุงได้หรือไม่


  • 3 ไบต์ที่บันทึกไว้โดยทำให้การสร้างบรรทัดแรกเป็นเรื่องง่ายโดยไม่ต้องมีมุมจากนั้นเพิ่มมุมเนื่องจากจะช่วยลดจำนวนครั้งในการสร้างดัชนีที่จำเป็น

  • อีกหนึ่งไบต์ที่บันทึกโดยเริ่มจากมุมแรก

  • 6 ไบต์มากขึ้นโดยการเปลี่ยนการโทรที่มีrepmat(a,3,1)[a;a;a]

  • บันทึก 4 ไบต์โดยใช้aโดยไม่มีการกำหนดค่าเริ่มต้นเฉพาะ (ซึ่งประกาศไว้แล้วในการประกาศฟังก์ชัน) - ขอบคุณ @LuisMendo


1
@ LuisMendo น่าสนใจ เดิมทีฉันมีa=[c a c]อยู่ในนั้น แต่ลบมันออกเพื่อลดขนาดสิ่งต่าง ๆ ลงตามปกติคุณไม่สามารถสร้างดัชนีการเข้าถึงตัวแปรที่ไม่มีอยู่จริงและสร้างมันขึ้นมาในกระบวนการ ฉันลืมว่านี่เป็นฟังก์ชั่นดังนั้นaประกาศไว้แล้วในฟังก์ชั่นการประกาศเป็นค่าตอบแทน ขอบคุณ :)
Tom Carpenter

ในความเป็นจริงคุณสามารถทำได้แม้ว่าจะไม่ได้อยู่ในฟังก์ชั่น - การสร้างดัชนีตัวแปรที่ไม่มีอยู่จริงจะสร้างมันขึ้นมา เรียนรู้สิ่งใหม่ทุกวัน
Tom Carpenter

2

Perl, 40 + 1 ( -n) = 41 ไบต์

ขอบคุณ@Ton Hospelสำหรับการบันทึก 14 ไบต์และอนุญาตให้โปรแกรมทำงานกับรายการที่มากกว่า 10

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

ต้องการ-nรวมถึง-E(หรือ-M5.010) เพื่อเรียกใช้ ตัวอย่างเช่น

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

1
@TheBitByte โอเคเยี่ยมมากขอบคุณมาก
Dada

2
นี่เป็นสิ่งที่ดีมากอยู่แล้ว แต่คุณสามารถเล่นได้เล็กน้อยด้วยรูปแบบการป้อนข้อมูลและแก้ไขข้อบกพร่องที่ความท้าทายไม่ได้พูดซ้ำ< 10โดยการใส่/(.)(.)/;$,=$' x<>;say+($1.$2x(<>-2).$1.$/)x3ไฟล์ (เนื่องจากใช้$') และการโทรด้วยperl -M5.010 -n prog.pl <<< '^!S\n4\n9'(ใช้ newlines จริง) ซึ่งนับเป็น 48 ไบต์ (2 พิเศษ แต้มต่อเนื่องจากมันไม่สามารถใช้ร่วมกับ-e)
Ton Hospel

@TonHospel ขอบคุณ ใช่ฉันไม่เคยสังเกตด้วยซ้ำว่าสิ่งนี้จะไม่สามารถใช้ได้กับตัวเลข>10.. ทำงานได้ดีกับรูปแบบอินพุตขอบคุณ
Dada

นี่กำลังใกล้เคียงกับการใช้เสรีภาพในการเลือกรูปแบบการป้อนข้อมูลที่ไม่เหมาะสม แต่: perl -nE '/.$/;$,=$/.<>x<>;say+($`.$&x(<>-2).$`)x3' <<< '^$\n!\n4\n9'คือ 41 ไบต์ (ไม่มาก$') และยังกำจัดบรรทัดใหม่ที่ตามมาน่า
เกรงขาม

@TonHospel แน่นอนฉันคิดวิธีแก้ปัญหาหลังจากคำแนะนำแรกของคุณ แต่ฉันไม่สบายใจเพราะรูปแบบการป้อนข้อมูล ... เนื่องจากเราทั้งคู่คิดถึงมันฉันเปลี่ยนคำตอบ แต่ยังรู้สึกเหมือน มันช่างเป็นเรื่องยาก ...
Dada

2

Dyalog APL , 31 29 ไบต์

แสดงพร้อมต์สำหรับอักขระแนวนอน, ความกว้าง, อักขระแยก, ความสูง, อักขระแนวตั้ง - ตามลำดับ

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

⎕⍴⍞ป้อนอักขระแนวนอนและทำซ้ำครั้งความกว้างของอินพุต ( ด้านล่าง)

⍞{... }input-junction-character ซึ่งจะเป็นก์ชั่นในฟังก์ชัน ...

∊⍺⍵⍺ แบน [[แยก], [แนวนอน], [แยก]]

แค็ปซูลเพื่อให้สามารถเป็นส่วนหนึ่งของรายการ

(... ),prepend ...

h←⎕ การป้อนข้อมูลที่มีความสูง

⍞⍴⍨ ป้อนอักขระแนวตั้งและทำซ้ำหลายครั้ง

ทำรายการของสตริงลงในตารางอักขระ

แค็ปซูล (ดังนั้นจึงสามารถทำซ้ำทั้งหมด)

3/ ทำซ้ำสามครั้ง

    
┗━ ┗━ ┗━

⍪/ ต่อสามชิ้นเข้าด้วยกัน


┣━
┣━
┗━

(นี่มันหุ้มพวกเขาไว้ด้วยดังนั้นเราต้อง ... )

ลบการห่อหุ้ม

h↓ปล่อยh (แถว) แรก

┏━
┣━
┗━

ลองใช้ออนไลน์!


2

C, 130 ไบต์

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

การใช้งาน:

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

เอาท์พุต

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

การลบเครื่องหมายอัฒภาคในdefines และเพิ่มเป็นf(C,O,P,S,_,D,o){W;E;W;E;W;}บันทึกไบต์
betseg

2

C #, 108 ไบต์

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

ฟังก์ชั่นไม่ระบุชื่อซึ่งสร้างแต่ละบรรทัดแนวนอนและแนวตั้งและสร้างผลลัพธ์สุดท้าย

ฟังก์ชั่น Ungolfed:

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

โปรแกรมเต็มรูปแบบพร้อมกรณีทดสอบ:

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 ไบต์

ขอบคุณ @muddyfish สำหรับการแก้ไข

2-Y"yv!iiY"!yyy

ลองออนไลน์!

คำอธิบาย

เนื้อหาสแต็คหลังจากแต่ละขั้นตอนจะถูกระบุเพื่อความชัดเจนโดยใช้ตัวอย่างแรกในความท้าทาย

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 ไบต์

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

สมมติว่าไฟล์ที่เก็บชื่อนี้อยู่ภายใน A.shการใช้งานจะเป็น:

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

--มีความจำเป็นเพียงในกรณีที่หนึ่งของปัจจัยการผลิตตัวอักษรที่เกิดขึ้นจะเป็น-และprintfเห็นได้ชัดว่าไม่ได้จัดการกับขีดกลางในการเริ่มต้นของสตริงที่ดีมากโดยไม่ต้องดับเบิลขีดกลาง

คำอธิบาย

สมมติว่าอินพุตคือ5 2 + * |...

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

    สร้างส่วนแนวนอนแรกและส่วนแนวตั้งทั้งหมดเข้าด้วยกัน สิ่งนี้จะส่งผลให้:

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

    ทำซ้ำส่วนที่สร้างไว้ก่อนหน้านี้3ซ้ำ ตอนนี้ผลลัพธ์ใน:

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

    สุดท้ายท่อส่งออกก่อนหน้านี้เพื่อsedที่จะกำจัดของสุดท้าย 2 กลุ่มสายโดยเฉพาะการแสดงผลครั้งแรกที่สายของ<Vertical Segment Length>*2+3 Eในที่สุดเราก็ได้สิ่งที่Eเราต้องการ:

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

1

PowerShell v2 +, 60 59 ไบต์

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

รับอินพุตเป็นอาร์กิวเมนต์บรรทัดรับคำสั่งแต่ละรายการ โครงสร้างสตริงแนวนอนร้านค้าที่เข้ามาเพื่อใช้ในภายหลังแล้วรูปแบบที่เข้าแถวด้วยจุลภาคประกอบการ$x ,ดำเนินการเชื่อมต่ออาร์เรย์ (เช่นการเพิ่มองค์ประกอบไปยังจุดสิ้นสุด) ของ$dสูตรในอาร์เรย์ของ$bองค์ประกอบ ในทางกลับกันจะถูกกำหนดเป็นอาร์เรย์ของสององค์ประกอบที่มีเครื่องหมายคอมมาอีกตัวหนึ่งและวางอยู่บนไพพ์ไลน์ จากนั้นแนวนอน$xจะอยู่บนท่อ การละเมิดการจัดรูปแบบเริ่มต้นของWrite-Outputการวางบรรทัดใหม่ระหว่างองค์ประกอบ

ตัวอย่าง

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 ไบต์

ฟังก์ชั่น

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

กรณีทดสอบ

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

คุณมีขีดกลางจำนวนมากเกินไป 2 อันในผลลัพธ์
Blue

1

Brainf * ck, 147 ไบต์

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

รับอินพุตจาก stdin เมื่อป้อนตัวอักษร 5 ตัวแรก สองคนแรกมี 48 ลบออกจากรหัส ASCII ของพวกเขาดังนั้น 0-9 พฤติกรรมตามที่คาดไว้ สำหรับตัวเลข> 9 ให้เพิ่ม 48 ในจำนวนและใช้อักขระที่สอดคล้องกัน อีกสามตัวละครที่ระบุไว้ในความท้าทาย

ฉันแน่ใจว่ามันไม่ใช่ทางออกที่ดีที่สุด แต่ชีวิตนั้นสั้นเกินกว่าที่จะเล่นกอล์ฟ * ck

ด้วยความคิดเห็น:

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

ตัวอย่างการเรียกใช้:

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

1

PHP, 97 ไบต์

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;

ไม่มีวนในตัวเท่านั้น

php -r '<code>' <parameters>ทำงานด้วย


1

Java 7, 205 129 ไบต์

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

-76 ไบต์ขอบคุณคนแปลกหน้า
PS: อย่าไปแก้ไขโพสต์ของคนอื่นในครั้งต่อไป หากคุณมีบางสิ่งบางอย่างในการเล่นกอล์ฟกรุณาทิ้งไว้เป็นความคิดเห็นหรือถ้ามันใช้วิธีการที่แตกต่างอย่างสิ้นเชิงคุณสามารถสร้างคำตอบของคุณเอง ยังคงขอบคุณสำหรับการเล่นกอล์ฟเก็บไบต์เหล่านี้ทั้งหมด - ใครก็ตามที่คุณ ..

กรณีที่ไม่ได้รับการทดสอบ &:

ลองที่นี่

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, "?", '¡', '¿'));
    }
}

เอาท์พุท:

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

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

0

แร็กเก็ต 124 ไบต์

(λ(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)))))

แบบอ่านเพิ่มเติมได้:

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

การทดสอบ:

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

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

0

C ++, 121 ไบต์

#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 ++ มันไม่ได้รับอนุญาตให้ประกาศฟังก์ชั่นที่ไม่มีประเภทเหมือนใน C แต่แมโครที่ทำตัวเหมือนฟังก์ชั่นจะเป็นไปได้โดยสิ้นเชิง โปรดทราบว่าเวอร์ชันที่ไม่ได้ปรับแต่งจะไม่รวบรวมจนกว่าคุณจะเพิ่ม "\" ให้กับแต่ละรายการ แต่เป็นบรรทัดสุดท้ายของแมโคร คุณอาจบันทึกสองไบต์เพิ่มเติมได้โดยลบ {} แต่คุณไม่สามารถใช้มาโครสองครั้งติดต่อกัน

การใช้งาน:

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

เอาท์พุท:

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

ลองออนไลน์


0

CJam , 23 ไบต์

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

ลองออนไลน์!

อินพุตอยู่ในลำดับที่กำหนด แต่ควรคั่นด้วยช่องว่างแทนที่จะใช้เครื่องหมายจุลภาค บางส่วนของความยากลำบากจะได้รับการป้อนข้อมูลการสั่งซื้อที่เหมาะสมสำหรับ CJam ของการเข้าร่วมการดำเนินงาน* ; สำหรับการเปรียบเทียบการจัดเรียงอินพุตใหม่สามารถบันทึกได้ 4 ไบต์ไบต์

หากอินพุทนั้นขนานนามA B C D Eโปรแกรมจะทำงานดังนี้:

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 ไบต์

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)

ลองออนไลน์! (กราวนด์โค้ด)

มันควรจะแสดงผลออกมาแบบนั้นตอนนี้:

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

อินพุตของคุณเอง: 7 2 + l @

คุณสามารถเปลี่ยนอินพุตใน project-> ตัวเลือกการคอมไพล์และเปลี่ยนค่าแต่ละค่าในตัวอย่าง แต่ไม่ได้คั่นด้วยเครื่องหมายจุลภาค แต่แยกด้วยช่องว่าง


0

QBIC ขนาด 44 ไบต์

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

คำอธิบาย

::;;;                 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 ไบต์

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

อินพุตจัดรูปแบบอาร์เรย์ในลำดับเดียวกันกับสตริงที่แนะนำ


หากคุณใช้,"\n"แทนคุณ."\n"สามารถดร็อป parens สำหรับ ternary
ติตัส

for($h++;$i<=2*$h;)และ$i++%$hบันทึกไบต์อื่น
ติตัส

$v-1ให้เพียง 3 [5,2,+,|,-]ตัวอักษรในแนวนอนสำหรับ จำนวนอักขระแนวนอนไม่รวมอักขระขอบซ้ายและขวา
ติตัส

@ ชื่อที่ถูกต้องฉันมีการย้อนกลับการแก้ไขของคุณ 5 แนวนอนหมายถึง 3 ตัวอักษรที่มี 2 ขอบ = 5. ตรวจดูคำถาม และสำหรับความคิดอื่น ๆ ขอขอบคุณ
JörgHülsermann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.