วาดบ้าน ASCII


25

นี่คือหน้าต่าง:

---
| |
---

มาเพิ่มกำแพง|กันบ้าง วางสองช่องว่างไว้ที่ด้านใดด้านหนึ่งเพื่อให้หน้าต่างมีพื้นที่เหลือเฟือ

|  ---  |
|  | |  |
|  ---  |

ตอนนี้ขอเพิ่มหลังคาและเพดาน เพื่อให้หน้าต่างอยู่ตรงกลางของห้องลองเพิ่มอีกหนึ่งแถวด้านบนและด้านล่าง

---------
|       |
|  ---  |
|  | |  |
|  ---  |
|       |
---------

ตอนนี้เพียงเพิ่มหลังคา ใส่เครื่องหมายสแลชซ้ายสุดและแบ็กสแลชขวาสุดเท่าที่จะทำได้และเรามี:

/       \
---------
|       |
|  ---  |
|  | |  |
|  ---  |
|       |
---------

จากนั้นเลื่อนสแลชหนึ่งและขวาหนึ่ง เลื่อนแบ็กสแลชขึ้นหนึ่งอันแล้วซ้ายหนึ่งครั้ง:

 /     \
/       \
---------
|       |
|  ---  |
|  | |  |
|  ---  |
|       |
---------

ทำซ้ำจนกระทั่งเครื่องหมายสแลชทั้งสองตอบสนองจากนั้นเพิ่มเครื่องหมายดอกจันที่พบ

    *
   / \
  /   \
 /     \
/       \
---------
|       |
|  ---  |
|  | |  |
|  ---  |
|       |
---------

และคุณทำเสร็จแล้ว! นี่คือบ้าน 1x1 บ้าน 2x2 จะมีลักษณะเช่นนี้:

        *
       / \
      /   \
     /     \
    /       \
   /         \
  /           \
 /             \
/               \
-----------------
|       |       |
|  ---  |  ---  |
|  | |  |  | |  |
|  ---  |  ---  |
|       |       |
|-------|-------|
|       |       |
|  ---  |  ---  |
|  | |  |  | |  |
|  ---  |  ---  |
|       |       |
-----------------

และบ้าน 3x2:

            *
           / \
          /   \
         /     \
        /       \
       /         \
      /           \
     /             \
    /               \
   /                 \
  /                   \
 /                     \
/                       \
-------------------------
|       |       |       |
|  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |
|       |       |       |
|-------|-------|-------|
|       |       |       |
|  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |
|       |       |       |
-------------------------

ความท้าทาย

คุณต้องเขียนโปรแกรมเต็มรูปแบบที่ใช้จำนวนเต็มสองจำนวน x และ y และพิมพ์บ้านที่มีความกว้างห้องXและห้องYสูง โปรแกรมของคุณควรจะสามารถจัดการกับบ้านได้ถึง 10x10 IO สามารถอยู่ในรูปแบบที่สมเหตุสมผล อนุญาตให้เว้นวรรคต่อท้ายในแต่ละบรรทัดและอนุญาตให้ขึ้นบรรทัดใหม่ได้หนึ่งบรรทัด

คำตอบที่สั้นที่สุดในการชนะไบต์

คำตอบ:


12

เป็นกลุ่ม122 , 89 Keystrokes

"aDJ"bD9i-<esc>Y2pVr <C-v>jr|$.Y4p3l<C-v>jljlr-jR| |<esc>{l<C-v>}d@apjdG@bp}Vr-{YPVr r/$r\qqYPllxx|P@qq@qddr*

ลองออนไลน์!

ฉันได้พัฒนาทักษะการเล่นกอล์ฟของฉันอย่างมีนัยสำคัญตั้งแต่ฉันโพสต์คำตอบนี้ดังนั้นฉันตัดสินใจที่จะกลับไปและเขียนสิ่งนี้ทั้งหมดตั้งแต่เริ่มต้น บันทึกสามสิบสามไบต์ในกระบวนการ!

สมมติว่าอินพุตเป็นสองบรรทัดแยกกันดังนั้นบัฟเฟอร์จะมีลักษณะเช่นนี้ก่อนที่คุณจะเริ่มพิมพ์:

3
4

ฉันมีคำอธิบายอย่างละเอียด แต่ฉันไม่รู้สึกอยากจะเขียนซ้ำอีกเลยตั้งแต่ต้น ... > _ <ลองดูประวัติการแก้ไขถ้าคุณยังอยากเห็นมัน


9

Python 3.6 (เผยแพร่ล่วงหน้า), 221 210 203 ไบต์

x,y=eval(input())
w=8*x+1;p='-'*w+'\n'
for v in['*',*[f'/{" "*i}\\'for i in range(1,w-1,2)],p+p.join([''.join(f'{"".join([f"|{(a*3)[:3]:^7}"]*x)}|\n'for a in(*' -','| |',*'- '))]*y)+p]:print(v.center(w))

อ่าน 2 จำนวนเต็ม (คั่นด้วยเครื่องหมายจุลภาค) จาก stdin พิมพ์เฮ้าส์ไปยัง stdout

รุ่นที่อ่านได้:

x, y = eval(input())
w = 8 * x + 1 # total width (in characters)
p = '-' * w + '\n' # floors
for v in [
    '*', # asterisk
    *[f'/{" "*i}\\' for i in range(1, w-1, 2)], # roof
    p + p.join([''.join(f'{"".join([f"|{(a*3)[:3]:^7}"]*x)}|\n' for a in (*' -','| |',*'- '))]*y) + p # rooms
]:
    print(v.center(w))

2
คุณลักษณะนี้ใช้อะไร 3.6.0a0 เพียงแค่f'{name}'การจัดรูปแบบสตริง?
แมว

@tac: เฉพาะสตริง fเท่านั้นใช่
vaultah

1
คุณติดตั้ง 3.6 เป็นอย่างไร ฉันรอ f-strings อย่างกระตือรือร้น แต่ไม่สามารถคิดได้ว่าจะติดตั้งด้วยตนเองได้อย่างไร (จากนั้นอีกครั้งการสนับสนุน Cygwin ก็ไม่ได้ยอดเยี่ยม)
Sp3000

@ Sp3000: ฉันสร้างมันจากแหล่ง
vaultah

@ Sp3000 Python 3.3+ จะไม่สร้างบน Cygwin
Mego

7

Python 2, 190 181 ไบต์

w,h=input();W=w*4
for i in range(~W,h*6+1):print['-'[i%(h*6):]*(W-~W)or['  %s  '%' -|-  - -  -|- '[~i%6::5],'-'*7][i%6<1].join('|'*-~w),' '*~i+['/%*c'%(w*8-~i*2,92),'*'][W<-i]][i<0]

ค่อนข้างแน่ใจว่ามีสนามกอล์ฟโดยเฉพาะอย่างยิ่งหน้าต่าง แต่ตอนนี้มีบางอย่าง 1,2ความกว้างและความสูงขาเข้าคั่นด้วยเครื่องหมายจุลภาคเช่น

คำอธิบายที่รวดเร็วและคร่าวๆ:

                *          <--- i = ~W = -w*4 - 1.    <---\
               / \         <--\ i = -W = -w*4             | Preceding spaces
              /   \           |                           | are calculated
             /     \          |                           | the same way
            /       \      <--/ i = -1                <---/
   /--->    ---------      <--- i = 0                 
   |        |       |      <--\ i = 1                 <---\
Check       |  ---  |         |                           | Calculate inner string
i%(h*6)     |  | |  |         |                           | and use to join '|'s
is zero     |  ---  |         |                           | (ditto with |-------|)
   |        |       |      <--/ i = h*6 - 1           <---/
   \--->    ---------      <--- i = h*6

            ^       ^
            \-------/

          W-~W = w*8 + 1

3

JavaScript (ES6), 292 270 238 215 200 ไบต์

ขอบคุณ @Neil ที่ช่วยกันตัดทอน!

a=>b=>[(p=(c,d=' ')=>d.repeat(c))(m=4*a)+'*',...[...Array(m)].map((c,i)=>p(--m)+`/${p(i*2+1)}\\‌`),y=p(8*a+1,'-')].join`
`+p(b,`
`+[x=p(a,'|'+p(7)),w=p(a,'|  ---  '),p(a,'|  | |  '),w,x,y].join`|
`)

โทรเป็น: F(a)(b)

สร้างหลังคาจากนั้นประกอบบ้านแกนกับสตริงชั้นซ้ำ


เมื่อฉันเห็นคำตอบของคุณฉันไตร่ตรองว่าคุณควรจะใช้หรือไม่join`|\n` และตอนนี้ฉันหวังว่าฉันจะได้แสดงความคิดเห็นในเวลานั้น คงจะเป็นข้อแก้ตัวที่ดีในการเพิ่มความคิดเห็นบางส่วนของฉันที่แนะนำให้คุณใช้9*aในบางจุดซึ่งฉันไม่เคยส่งเพราะสั้นเกินไป
Neil

สูตรของคุณ4*a-1ดูไม่ถูกต้องฉันคิดว่าน่าจะเป็นแบบ4*aนี้จะช่วยให้คุณประหยัดได้ 4 ไบต์
Neil

m-i-1--mจะกลายเป็น จะกลายเป็น9*a-a 8*a
Neil

1
ตอนนี้คุณไม่ได้ใช้แม่แบบใด ๆ ในสตริงของคุณและคุณสามารถทำได้ `` *\n${[...Array(m)].map(...).join\ n }\n'' แต่คุณสามารถไปได้ดีขึ้นและเข้าร่วมสตริงก่อนและหลังในเวลาเดียวกัน:a=>b=>(p=(c,d=' ')=>d.repeat(c),[p(m=4*a)+`*`,...[...Array(m)].map((c,i)=>p(--m)+'/'+p(i*2+1)+'\\'),y=p(8*a+1,'-')].join`\n`+p(b,`\n`+[x=p(a,'| '),w=p(a,'| --- '),p(a,'| | | '),w,x,y].join`|\n`))
Neil

1
`/${p(i*2+1)}\\‌`โกนหนึ่งไบต์มากขึ้นด้วย
Neil

3

C ++, 282 ไบต์, แก้ไขปัญหากับรายการก่อนหน้า:

#include<cstdio>
int main(){for(int r=2,c=2,x,y,q,u,h=c*4,w=h*2,i=0;i<h+r*6+2;i++)for(q=0;q<w+2;q++)x=q%8,y=i%8,u=(i-h-1)%6,putchar(q==w+1?10:i<=h?!i&&q==h?42:i==h-q?47:i==q-h?92:32:!u&&x||!u&&(i<h+2||i==h+r*6+1)||(u==2||u==4)&&x>2&&x<6?45:!x||u==3&&(x==3||x==5)?124:32);return 0;}

เอาท์พุท:

        *
       / \
      /   \
     /     \
    /       \
   /         \
  /           \
 /             \
/               \
-----------------
|       |       |
|  ---  |  ---  |
|  | |  |  | |  |
|  ---  |  ---  |
|       |       |
|-------|-------|
|       |       |
|  ---  |  ---  |
|  | |  |  | |  |
|  ---  |  ---  |
|       |       |
-----------------

3

Ruby, Rev B 165 ไบต์

w=1-2*r=-4*x=gets.to_i
puts (r-1..h=6*gets.to_i).map{|n|n<0?(n<r ??*:?/+' '*(w+n*2)+?\\).center(w):n%h<1?(?-*w):'|CCBABCC'.tr('CBA','   | \-'[1222>>n%6*2&6,3])*x+?|}

ใช้วงเดียวและลูกเล่นกอล์ฟอื่น ๆ

Ruby, Rev A 179 ไบต์

w=1+8*x=gets.to_i
y=gets.to_i
b=(0..x*4).map{|n|(n<1??*:?/+' '*(n*2-1)+?\\).center(w)}
a=(2..y*6).map{|n|('|CCBABCC'.tr('CBA','   | \\-'[4888>>n%6*2&6,3]))*x+?|}
puts b,s=?-*w,a,s

Ungolfed

  x=gets.to_i
  y=gets.to_i

  w=x*8+1                                  #calculate width of house

  b=(0..x*4).map{|n|                       #design a roof line by line
    (n<1??*:?/+' '*(n*2-1)+?\\).center(w)  #first line is *, second line is /[spaces]\
  }                                        #centre correctly to the width of the house by padding

  a=(2..y*6).map{|n|                       #design a front facade line by line
    ('|CCBABCC'.                           #template for each row
      tr('CBA','   | \\-'[4888>>n%6*2&6,3])#substitute CBA for 3 characters from the string according to magic number 4888
    )*x+?|                                 #we need x copies, finishing with a |
  }

  puts b,s=?-*w,a,s                        #print a roof, a line of -, a facade and another line of -

| \-'ฉันคิดว่าคุณสามารถวางทับขวาหนึ่งในสตริงคือ
Sp3000

@ Sp3000 มันใช้งานได้ดีขอบคุณ ฉันเดา\-ว่าไม่ได้หมายความว่าอะไรเป็นลำดับการหลบหนีดังนั้น\-จะถูกแยกวิเคราะห์เป็น 2 ตัวอักษร แน่นอนว่า-มีความหมายพิเศษtrดังนั้นเราจึงต้องการสตริง' \-'สำหรับหน้าต่างเพื่อหลบหนี-(การแมป C-> พื้นที่, B-> -และ A-> -เนื่องจากไม่มีตัวอักษรเหลืออีก) สำหรับชั้นเรามีเพียง สตริง'-'และในกรณีนี้trดูเหมือนจะมีความสุขที่จะตีความมันเหมือนตัวอักษรมากกว่าตัวอักษรพิเศษการกำหนด C = B = A = '-'ทั้งหมดมันเป็นเรื่องยากที่จะทำงาน ฉันแน่ใจว่าจะต้องเล่นกอล์ฟมากกว่านี้จะแก้ไขในภายหลัง
เลเวลริเวอร์เซนต์

2

C ++, 258 ไบต์ทดสอบที่นี่

#include<cstdio>
int main(){for(int r=10,c=10,x,y,q,u,h=c*4,w=h*2,i=0;i<h+r*8+2;i++)for(q=0;q<w+2;q++)x=q%8,y=i%8,u=(i-(h+1))%8,putchar(q==w+1?10:i<=h?!i&&q==h?42:i==h-q?47:i==q-h?92:32:!u||(u==3||u==5)&&x>2&&x<6?45:!x||u==4&&(x==3||x==5)?124:32);return 0;}

ผล:

                                        *                                        
                                       / \                                       
                                      /   \                                      
                                     /     \                                     
                                    /       \                                    
                                   /         \                                   
                                  /           \                                  
                                 /             \                                 
                                /               \                                
                               /                 \                               
                              /                   \                              
                             /                     \                             
                            /                       \                            
                           /                         \                           
                          /                           \                          
                         /                             \                         
                        /                               \                        
                       /                                 \                       
                      /                                   \                      
                     /                                     \                     
                    /                                       \                    
                   /                                         \                   
                  /                                           \                  
                 /                                             \                 
                /                                               \                
               /                                                 \               
              /                                                   \              
             /                                                     \             
            /                                                       \            
           /                                                         \           
          /                                                           \          
         /                                                             \         
        /                                                               \        
       /                                                                 \       
      /                                                                   \      
     /                                                                     \     
    /                                                                       \    
   /                                                                         \   
  /                                                                           \  
 /                                                                             \ 
/                                                                               \
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |       |       |
|       |       |       |       |       |       |       |       |       |       |
---------------------------------------------------------------------------------

1
สิ่งนี้ไม่ตรงกับภาพของ OP ทางลาดชั้นเป็นที่สูงขึ้นและในภาพ OP -เท่านั้นด้านบนและด้านล่างพื้นเป็นเส้นที่มั่นคงของ ชั้นกลางแตกออกด้วย|
ระดับแม่น้ำเซนต์

@ สตีฟเวอร์ริลล์ขอบคุณที่ชี้ให้เห็นว่าฉันทำผิดพลาดเหมือนกันทุกประการในการส่งของฉันเอง FP
DJMcMayhem

2

C #, 361 353 ไบต์

string b(int w,int h){string m="",s,f,o=m,x,y,n="\n",p="|",q=" ";int i=0,v=w*4;Func<int,string,string>r=(j,c)=>{for(s="";j-->0;)s+=c;return s;};m+=r(v,q)+"*\n";for(;i<v;)m+=r(v-i-1,q)+'/'+r(i++*2+1,q)+"\\\n";f=r(w*8+1,"-");m+=f;x=n+r(w,p+r(7,q))+p;y=n+r(w,"|  ---  ")+p;o=x+y+n+r(w,"|  | |  ")+p+y+x;for(i=1;i++<h;)m+=o+x.Replace(q,'-');return m+o+n+f;}

โปรแกรมเต็มรูปแบบ:

using System;
class House
{
    static int Main()
    {
        var x = new House();
        Console.WriteLine(x.b(1,1));
        Console.WriteLine();
        Console.WriteLine(x.b(2,2));
        Console.WriteLine();
        Console.WriteLine(x.b(2,3));
        Console.WriteLine();
        Console.WriteLine(x.b(9,9));
        Console.WriteLine();
        Console.Read();
        Console.WriteLine(x.b(10, 10)); // Looks broken because Bash to small
        Console.Read();
        return 0;
    }

    string b(int w,int h){string m="",s,f,o=m,x,y,n="\n",p="|",q=" ";int i=0,v=w*4;Func<int,string,string>r=(j,c)=>{for(s="";j-->0;)s+=c;return s;};m+=r(v,q)+"*\n";for(;i<v;)m+=r(v-i-1,q)+'/'+r(i++*2+1,q)+"\\\n";f=r(w*8+1,"-");m+=f;x=n+r(w,p+r(7,q))+p;y=n+r(w,"|  ---  ")+p;o=x+y+n+r(w,"|  | |  ")+p+y+x;for(i=1;i++<h;)m+=o+x.Replace(q,'-');return m+o+n+f;}

    // Without extra vars
    string b1(int w, int h)
    {
        string m = "", s, f, o = m, x, y;
        int i = 0, v = w*4;
        Func<int,string,string> r = (j,c) => {
            for(s = ""; j-->0;) s += c;
            return s;
        };
        /// Roof
        m += r(v, " ") + "*\n";
        for (; i < v;) m += r(v - i - 1, " ") + '/' + r(i++ * 2 + 1, " ") + "\\\n";
        /// Ceiling
        f = r(w * 8 + 1, "-");
        m += f;
        /// Room
        x = "\n" + r(w, "|" + r(7, " ")) + "|";
        y = "\n" + r(w, "|  ---  ") + "|";
        o = x + y + "\n" + r(w, "|  | |  ") + "|" + y + x;
        for (i = 1; i++ < h;) m += o + x.Replace(' ','-');
        /// Floor
        return m + o + "\n" + f;
    }

    string build(int width, int height)
    {
        // House, tempStr, floor, room, x/y = room_row1/2
        string house = "", s, ceil, room = "", x, y;
        int i, v = width*4;
        Func<int,string,string> rep = (j,c) => {
            s = "";
            for(; j>0; j--) s += c;
            return s;
        };
        /// Roof
        house += rep(v, " ") + "*\n";
        for (i = 0; i < v;) {
            // LEFT Indent + '/' + Distance + '\'
            house += rep(v - i - 1, " ") + '/' + rep(i++ * 2 + 1, " ") + "\\\n";
        }
        /// Ceiling
        ceil = rep(width * 8 + 1, "-");
        house += ceil;
        /// Room
        x = "\n" + rep(width, "|" + rep(7, " ")) + "|";
        y = "\n" + rep(width, "|  ---  ") + "|";
        room = x + y + "\n" + rep(width, "|  | |  ") + "|" + y + x;
        for (i = 1; i < height; i++) {
            house += room;// + x.Replace(' ','-');
            house += "\n" + rep(width, "|" + rep(7, "-")) + "|";
        }
        /// Floor
        house += room + "\n" + ceil;
        return house;
    }
}

Nice เคล็ดลับทั่วไปสองข้อที่ใช้ที่นี่: คุณสามารถบันทึกอักขระจำนวนหนึ่งได้โดยการดูอย่างใกล้ชิดที่ for-loops ของคุณ ( s=""สามารถใส่ในห่วง for (j) ห่วง (พิจารณาj-->0ถึงสภาพเช่นกันและi++<hใน วนรอบสุดท้าย) i=0สามารถย้ายออกจาก for for ไปยังการประกาศการบันทึก byte นอกจากนี้คุณยังสามารถบันทึก byte โดยการนำสตริงว่างเปล่าที่กำหนดกลับมาใช้ใหม่ (เมื่อmกำหนดแล้วคุณสามารถกำหนดการo=mบันทึก""ได้แทนที่ยังใช้สตริงดังนั้นคุณจึงสามารถ ใช้qแทนของ' 'คุณและไม่จำเป็นต้องมีช่องว่างหลังจาก>เมื่อประกาศrสิ่งเล็ก ๆ น้อย ๆ ;)
VisualMelon

บางครั้งมันเป็นสิ่งเล็ก ๆ ที่สร้างความแตกต่าง ขอบคุณ: D
DW.com

1

VBA ขนาด 284 ไบต์

Function H(W,S)
L=vbLf:H=Space(4*W)&"*"&L
For R=1 To 4*W:H=H &Space(4*W-R)&"/"&Space(2*R-1)&"\"&L:Next
J=".":P=String(W,J)&"|"&L
D=String(8*W+1,"-")&L
E=Replace(P,J,"|       ")
F=Replace(P,J,"|  ---  ")
H=H &Replace(String(S,J),J,D &E &F &Replace(P,J,"|  | |  ")&F &E)&D
End Function

ฟังก์ชั่นแทนที่เป็นเครื่องมือที่เหมาะสำหรับการทำสำเนาหลายชุดในแบบที่ฟังก์ชั่น String นั้นไม่ต้องการ

เรียกใช้เพื่อผลที่ดีที่สุดในหน้าต่าง Immediate ของตัวแก้ไข VBA: ?H(8,8)ตัวอย่าง

?H(8,8)
                                *
                               / \
                              /   \
                             /     \
                            /       \
                           /         \
                          /           \
                         /             \
                        /               \
                       /                 \
                      /                   \
                     /                     \
                    /                       \
                   /                         \
                  /                           \
                 /                             \
                /                               \
               /                                 \
              /                                   \
             /                                     \
            /                                       \
           /                                         \
          /                                           \
         /                                             \
        /                                               \
       /                                                 \
      /                                                   \
     /                                                     \
    /                                                       \
   /                                                         \
  /                                                           \
 /                                                             \
/                                                               \
-----------------------------------------------------------------
|       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |
-----------------------------------------------------------------
|       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |
-----------------------------------------------------------------
|       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |
-----------------------------------------------------------------
|       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |
-----------------------------------------------------------------
|       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |
-----------------------------------------------------------------
|       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |
-----------------------------------------------------------------
|       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |
-----------------------------------------------------------------
|       |       |       |       |       |       |       |       |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |  | |  |
|  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |  ---  |
|       |       |       |       |       |       |       |       |
-----------------------------------------------------------------
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.