กล่องเล็ก ๆ บนเนินเขา


13

มีเพลงเหน็บแนมที่เรียกว่าLittle Boxesเดิมโดย Malvina Reynolds เกี่ยวกับการแผ่กิ่งก้านสาขาชานเมืองที่มีเนื้อเพลงดังนี้:

กล่องเล็ก ๆ ที่อยู่บนเนินเขา
กล่องเล็ก ๆ ที่ทำจากไม่มีเล่ห์เหลี่ยม
กล่องเล็ก ๆ บนเนินเขา
กล่องเล็ก ๆ ทั้งหมดเหมือนกัน
มีสีเขียวหนึ่งอันสีชมพูหนึ่ง
อันสีฟ้าหนึ่งอันสีเหลือง
และพวกมันล้วนทำจากสิ่งที่ไม่มีรสนิยมที่ดี
และพวกมันทั้งหมดก็ดูเหมือนกัน

งานของคุณที่นี่ได้รับการป้อนข้อมูลจำนวนเต็มที่n>1แสดงขนาดของบ้านเอาท์พุทสี่ "กล่องเล็ก" โดยใช้สีต่อไปนี้ (ในสัญกรณ์ 0xRRGGBB):

Green -- 0x00FF00
Pink --- 0xFF00FF (technically magenta)
Blue --- 0x0000FF
Yellow - 0xFFFF00

หากคอนโซลเฉพาะของคุณไม่มีสีที่แน่นอนเหล่านี้คุณสามารถใช้ที่ใกล้เคียงที่สุดที่มีอยู่ (เช่นรหัสหลบหนี ANSI)

บ้านสร้างด้วยn _พื้นและหลังคา พวกเขาถูกล้อมรอบด้วยตัวอักษรn/2(ปัดขึ้น) |แทนผนัง หลังคา2สูงเสมอและอยู่สองแห่ง/ที่ขอบด้านซ้ายสองหลังคาที่\อยู่ด้านขวาและn-2 -แสดงถึงหลังคาสูงสุด เมื่อบ้านมีขนาดใหญ่ขึ้นขนาดของหลังคาเปรียบเทียบก็จะเล็กลง สิ่งนี้มีจุดประสงค์

นี่คือบ้านขนาด2:

 /\
/__\
|__|

ขนาดของที่นี่3:

 /-\
/___\
|   |
|___|

ขนาดของที่นี่7:

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

ดังนั้นเมื่อได้รับอินพุต7เอาต์พุตขนาดสี่บ้าน7ตามที่อธิบายไว้ข้างต้นโดยมีตัวแรกเป็นสีเขียวตัวที่สองเป็นสีชมพู (สีม่วงแดง) ที่สามที่เป็นสีฟ้าและที่สี่เป็นสีเหลือง ผลลัพธ์ของสีในลำดับนั้นมีความสำคัญ

ภาพตัวอย่างขนาด3:

ป้อนคำอธิบายรูปภาพที่นี่

กฎระเบียบ

  • บ้านสามารถเป็นแนวนอนหรือแนวตั้งตราบใดที่มีการแยกชัดเจนระหว่างพวกเขา
  • ขึ้นบรรทัดใหม่ / ลากขึ้นบรรทัดใหม่หรือพื้นที่ว่างอื่นเป็นทางเลือกโดยมีเงื่อนไขว่าบ้านจะเข้าแถวอย่างเหมาะสม
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • เอาต์พุตสามารถไปที่คอนโซลบันทึกเป็นรูปภาพและอื่น ๆ
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการเล่นกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

คำตอบ:


5

JavaScript (ES6), Chrome / Firefox, 156 148 151 150 ไบต์

บันทึก 8 ไบต์ขอบคุณ @Shaggy
บันทึกแล้ว 1 ไบต์ขอบคุณ @Neil

n=>['0f0','f0f','00f','ff0'].map(c=>console.log(`%c /${'-'[r='repeat'](n-2)}\\
/${s='_'[r](n)}\\
${(`|${' '[r](n)}|
`)[r](~-n/2)}|${s}|`,'color:#'+c))

การสาธิต

ตรวจสอบให้แน่ใจว่าได้เปิดคอนโซลของเบราว์เซอร์ของคุณเพื่อรับเอาท์พุทสี


ทำงานได้ดีสำหรับฉันในฐานะ Snippet โดยที่คอนโซลของเบราว์เซอร์เปิดอยู่ บันทึก 8 ไบต์โดยใช้รหัสเลขฐานสิบสามหลัก: tio.run/##NYvRCsIgGEbv9xSDFr/ …
Shaggy

@Shaggy ขอบคุณสำหรับคำแนะนำ!
Arnauld

ผู้นำ0เป็นสิ่งจำเป็นหรือไม่?
Jonathan Frech

@JonathanFrech ใช่ หากไม่มีศูนย์นำหน้านั่นจะไม่ใช่#RGBรหัสสี CSS ที่ถูกต้อง
Arnauld

ฉันคิดว่าความสูงผิดกับบ้านที่กว้างขึ้น
Neil

5

Python 2 , 123 121 119 111 109 108 ไบต์

  • สองไบต์ที่บันทึกไว้ต้องขอบคุณcaird coinheringaahing ; ใช้อักขระ ASCII ที่ไม่สามารถพิมพ์ได้จริงแทนที่จะหนีออกมา ( \33)
  • ไม่สามารถ (และทำ) บันทึกไบต์ด้วยการเขียนโปรแกรมทั้งหมดโดยใช้input()แทนการกำหนดฟังก์ชั่น
  • บันทึกเจ็ดไบต์ด้วยElPedro ; ใช้ความจริงที่ว่าstr(90+n)ด้วย0<=n<=9คือ"9%s"%n
  • บันทึกสองสามไบต์โดยใช้การจัดรูปแบบสตริงแทนที่การต่อสตริง

N=input()
for(n)in"2543":Z="_"*N;print"[9%sm /"%n+~-~-N*"-"+"\ \n/%s\\\n"%Z+~-N/2*("|%s|\n"%" "*N)+"|%s|"%Z

ลองออนไลน์!

ใช้รหัสหลบหนี ANSIสำหรับระบายสีบ้าน



1
112 โดยวนลูป "2543" และใช้การจัดรูปแบบสตริง - ลองออนไลน์!
ElPedro

2
@ElPedro ขอบคุณ ไม่ได้เกิดขึ้นกับฉันว่า90และ2,5,4,3สรุปคือการต่อกันได้อย่างมีประสิทธิภาพ
Jonathan Frech

3

Excel VBA ขนาด 243 ไบต์

ฟังก์ชันหน้าต่าง VBE แบบไม่ระบุชื่อทันทีที่รับอินพุตจากA1และส่งออกไปยังช่วงA2:A5

[C1]=vbLf:For i=1To 4:Cells(i+1,1)=[" /"&Rept("-",A1-2)&"\"&C1&"/"&Rept("_",A1)&"\"&C1&Rept("|"&Rept(" ",A1)&"|"&C1,A1/2)&"|"&Rept("_",A1)&"|"]:Cells(i+1,1).Font.Color=Array(32768,&HFF00FF,rgbBlue,65535)(i-1):Next:Cells.Font.Name="Courier New"

เอาท์พุต

เอาท์พุต


2

Japt , 79 76 74 73 72 ไบต์

3#²¤r1'f ò3 w £Ol"%c /{ç- ¤}\\
/{ç'_}\\
{/2-½ ç"|{ç}|
"}|{ç'_}|"Xi`¬l:#

ลองใช้ (เปิดคอนโซลของเบราว์เซอร์ก่อนกด "Run")

ขอบคุณ ETH ที่ช่วยฉันทดสอบเมื่อคืนนี้ในขณะที่ฉันกำลังทำมันอยู่ในโทรศัพท์ของฉัน


คำอธิบาย

การป้อนข้อมูลจำนวนเต็มโดยนัย U

3#²¤r1'f ò3 w

ก่อนอื่นเราสร้างอาเรย์ของสีฐานสิบหก 3 หลักเพื่อแมป charcode ของ²เป็น 178 เพื่อ3#²ช่วยให้เรา 3178. เราแปลงที่เป็นสตริงฐาน-2 ด้วย¤แล้วแทนที่เกิดขึ้นทั้งหมดด้วย1 แยกสตริงออกเป็นอาร์เรย์ของสตริงความยาว 3 และย้อนกลับอาร์เรย์นั้น (ฉันต้องหาวิธีที่จะย่อให้สั้นลงอย่างใด)fò3w

£Ol

เราแมปแถวลำดับโดยใช้£- โดยXเป็นองค์ประกอบปัจจุบัน - และOlล็อกเพื่อคอนโซล เราจะส่ง 2 สายไปที่หนึ่งที่มีบ้านและหนึ่งที่มี CSS

Xi`¬l:#

สตริงที่สองถูกสร้างโดยใช้iต้องเพิ่มด้วยเชือกที่ถูกบีบอัดXcolor:#

"%c /{ç- ¤}\\

%cบอกคอนโซลที่จะใช้สายที่สองเป็น CSS บรรทัดบนสุดของบ้านที่ถูกสร้างขึ้นโดยการทำซ้ำ ( ç) สำหรับ-ตัวละครUครั้งแล้วหั่นว่าจากองค์ประกอบที่สอง (0 จัดทำดัชนี) ¤ด้วย เครื่องมือจัดฟันทำหน้าที่เป็นทางลัดสำหรับเรียงต่อกันของสตริง

/{ç'_}\\

บรรทัดที่สองนั้นสร้างขึ้นในลักษณะที่คล้ายกันในครั้งนี้การทำซ้ำ_ตัวละครUครั้ง

{/2-½ çRi|²iUç 1}

ร่างกายของบ้านที่ถูกสร้างขึ้นเป็นครั้งแรกโดยการทำซ้ำ|ตัวละครสองครั้ง²แล้วใส่พื้นที่ซ้ำแล้วซ้ำอีกUครั้งเป็นสตริงที่ที่ดัชนี 1. สตริงผลลัพธ์จะใช้ได้แล้วไปขึ้นบรรทัดใหม่ ( R) และสตริงที่ซ้ำแล้วซ้ำอีกU/2-0.5ครั้ง

|{ç'_}|"

ในที่สุดบรรทัดสุดท้ายจะถูกสร้างในลักษณะเดียวกับบรรทัดที่สอง


1

Python 2 , 120 ไบต์

n=input()
for i in'2543':s='_'*n;print'[1;3'+i+('m /'+'-'*(n-2)+'\ \n/%s\\\n'%s+(-~n/2-1)*('|'+' '*n+'|\n')+'|%s|\n'%s)

ลองออนไลน์! (แสดง escape chars แทนสีจริงทดสอบบน terminal ท้องถิ่น)


n=2ผมคิดว่าบ้านของคุณจะสูงเกินไปสำหรับปัจจัยการผลิตเช่น
Jonathan Frech

@JonathanFrech อ๋อฉันจะแก้ไข ... วิธีเพดานผิดที่เห็นได้ชัดแก้ไข: แก้ไข
Erik the Outgolfer

คำถามบอกว่าถึงuse the closest availableแม้ว่าคุณจะใช้สีปกติแทนสีสดใส สีสดใส - ฉันคิดว่า - อย่างไรก็ตามจะใกล้เคียงกับสีที่ต้องการ
Jonathan Frech

@ JonathanFrech อืมดูเหมือนว่าคุณจะใช้สีปกติเหมือนกัน แต่ก็ใช่ว่าสีสดใสนั้นจะเข้ามาใกล้
Erik the Outgolfer

1
@ElPedro ยังไงก็ตามเขากลับดีกว่าของฉัน: p
Erik the Outgolfer

1

Yabasic , 220 ไบต์

ฟังก์ชั่นที่ไม่ระบุชื่อที่รับอินพุตเป็นจำนวนเต็มnและส่งเอาต์พุต 4 สีที่บ้านไปยังเทอร์มินัล

การขาดฟังก์ชั่นการทำซ้ำหรือแทนที่สตริงโดยเฉพาะใน yabsic ทำให้การตอบสนองนี้เจ็บปวดจริงๆ

Clear Screen
Input""n
b$="__"
c$="|  "
For i=1To n-2
a$=a$+"-"
b$=b$+"_"
c$=c$+" "
Next
c$=c$+"|\n"
For i=1To n-4
d$=d$+c$
Next
For i=0To 3
?Color(Mid$("gremagbluyel",1+3*i,3))" /"+a$+"\\\n/"+b$+"\\\n"+d$+"|"+b$+"|"
Next

รุ่นนี้ต้องใช้โหมดกราฟิกและดังนั้นจึงไม่สามารถใช้งานได้ใน TIO

เอาท์พุต

n=7มูลค่าการป้อนข้อมูลสำหรับด้านล่างเป็น

เอาท์พุต


1

SmileBASIC ขนาด 115 ไบต์

INPUT N
H.H 6H 4H 2DEF H C
COLOR C+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

อีกอันหนึ่งซึ่งมีขนาด 115 ไบต์:

INPUT N
FOR J=0TO 3COLOR!!J*8-J*2+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

รหัสสีที่ฉันต้องการ (ใน RGBI 4 บิต) คือ 5, 11, 9, 7 สิ่งนี้ถูกสร้างขึ้นโดยใช้!!J*8-J*2+5หาก J ไม่ใช่ 0 นี่คือ13-J*2(ให้ 11,9,7) และถ้าเป็นผลลัพธ์ที่ได้คือ เพียง 5

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