Yamaca küçük kutular


13

Aslen Malvina Reynolds tarafından, sözleri olan banliyö yayılımı hakkında Little Boxes adında hicivli bir şarkı var:

Yamaca Küçük kutuları,
ticky-yapışkan yapılmış küçük kutular,
yamaca Küçük kutuları,
küçük kutular hepsi aynı.
Yeşil ve pembe
olan var, mavi ve sarı olan var,
hepsi yapışkan yapışkan.
Ve hepsi aynı görünüyor.

Buradaki işiniz n>1, evin boyutunu temsil eden bir tamsayı girdisi verildiğinde , aşağıdaki renkleri (0xRRGGBB notasyonunda) kullanarak dört "küçük kutuyu" çıktılar:

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

Konsolunuzda tam olarak bu renkler yoksa, mümkün olan en yakın rengi kullanabilirsiniz (örn. ANSI çıkış kodları).

Evler n _zemini ve çatıyı temsil edecek şekilde inşa edilmiştir . Duvarları temsil eden n/2(yuvarlatılmış) |karakterlerle çevrilidir . Çatılar her zaman 2yüksektir ve /sol kenarda iki \, sağ kenarda iki ve n-2 -çatı tepe noktasını temsil eder. Evler büyüdükçe, çatının karşılaştırmalı boyutu küçülür; bu amaçlanmıştır.

İşte büyüklükte bir ev 2:

 /\
/__\
|__|

İşte boyutu 3:

 /-\
/___\
|   |
|___|

İşte boyutu 7:

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

Böylece , birincisi yeşil, ikincisi pembe (macenta), üçüncüsü mavi, dördüncüsü sarı olmak üzere, yukarıda açıklandığı gibi 7dört evden bir girdi verilir 7. Renklerin bu sırayla çıktıları önemlidir.

Boyut örnek resim 3:

resim açıklamasını buraya girin

kurallar

  • Evler, aralarında net bir ayrım olduğu sürece yatay veya dikey olabilir.
  • Önde gelen / sondaki yeni satırlar veya diğer boşluklar, evlerin uygun şekilde hizalanması koşuluyla isteğe bağlıdır.
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • Çıktı konsola olabilir, görüntü olarak kaydedilebilir vb.
  • Standart boşluklar yasaktır.
  • Bu bu nedenle her zamanki golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Yanıtlar:


5

JavaScript (ES6), Krom / ateş, 156 148 151 150 bayt

@Shaggy sayesinde 8 bayt kaydedildi @Neil
sayesinde 1 bayt kaydedildi

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

gösteri

Renkli çıktıyı almak için tarayıcınızın konsolunu açtığınızdan emin olun.


Tarayıcımın konsolu açıkken Snippet olarak benim için iyi çalışıyor. 3 basamaklı onaltılık kodları kullanarak 8 bayt tasarruf edin
Shaggy

@ Shaggy Öneriler için teşekkürler!
Arnauld

Öncü 0gerekli mi?
Jonathan Frech

@JonathanFrech Evet. Başında sıfır olmadan bu geçerli #RGBCSS renk kodları olmaz.
Arnauld

Bence geniş evlerde yükseklik yanlış.
Neil

5

Piton 2 , 123 121 119 111 109 108 bayt

  • Caird Coinheringaahing sayesinde iki bayt tasarruf etti ; kaçmak yerine gerçek yazdırılamaz ASCII karakterini kullanma ( \33)
  • input()Bir işlevi tanımlamak yerine kullanarak tüm bir programı yazarak bir bayt kaydedilebilir (ve kaydedilebilir)
  • ElPedro sayesinde yedi bayt kurtardı ; gerçeğini kullanarak str(90+n)birlikte 0<=n<=9olduğunu"9%s"%n
  • Dize birleştirme yerine dize biçimlendirme kullanarak iki üç bayt kaydedildi

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

Çevrimiçi deneyin!

Evleri renklendirmek için ANSI kaçış kodlarını kullanır .



1
112 "2543" döngüsünü kullanarak ve dize biçimlendirmesini kullanarak - Çevrimiçi deneyin!
ElPedro

2
@ElPedro Teşekkürler. Bana gerçekleşmedi 90ve 2,5,4,3özetlenen bir araya geldi.
Jonathan Frech

3

Excel VBA, 243 Bayt

A1Aralıktan giriş ve çıkışa giden anonim VBE anında pencere işleviA2: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"

Çıktı

Çıktı


2

Japt , 79 76 74 73 72 bayt

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

Deneyin ("Çalıştır" tuşuna basmadan önce tarayıcınızın konsolunu açın).

ETH'ye, dün gece telefonumda çalışırken test etmeme yardımcı olduğu için teşekkürler.


açıklama

Örtük tamsayı girişi U

3#²¤r1'f ò3 w

Önce eşlemek için 3 basamaklı onaltılık bir renk dizisi oluşturuyoruz. Ait charCode ²178 böyledir 3#²bize 3178. verir Biz bir taban-2 dizeye o dönüştürmek ¤ve daha sonra tüm tekrarlarını değiştirmek 1ile f. ò3dizeyi uzunluk 3 dizelerden oluşan bir diziye böler ve diziyi wtersine çevirir.
(Bunu bir şekilde kısaltmanın bir yolunu bulmalıyım.)

£Ol

Biz kullanarak diziyi üzerinde harita £ile - Xve - Geçerli elemanı olmanın Olkonsola günlükleri. Biri evi, diğeri CSS'yi içeren 2 ip geçireceğiz.

Xi`¬l:#

İkinci dize, sıkıştırılmış dizenin ibaşına eklenecek Xşekilde oluşturulur color:#.

"%c /{ç- ¤}\\

%cCSS gibi ikinci dizeyi kullanmak konsolu söyler. Evin en üst satırı ç, -karakter Uzamanlarının tekrarlanması ( ) ve daha sonra ikinci elemandan (0 ile indekslenmiş) dilimlenmesiyle oluşturulur ¤. Kuşaklar, dize birleştirme için bir tür kısayol görevi görür.

/{ç'_}\\

İkinci satır da benzer şekilde inşa edildi, bu kez _karakter Usüreleri tekrarlanıyor .

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

Evin gövdesi, önce |karakteri iki kez tekrarlayarak ²ve daha sonra Udizin 1'deki dizeye tekrarlanan boşluklar ekleyerek oluşturulur . Sonuçta elde edilen dize bir satırsonuna ( R) eklenir ve bu dize tekrarlanır U/2-0.5.

|{ç'_}|"

Son olarak, son satır ikinci ile aynı şekilde oluşturulur.


1

Python 2 , 120 bayt

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)

Çevrimiçi deneyin! (yerel terminalde test edilen gerçek renkler yerine kaçış karakterlerini gösterir)


Bence evleriniz girdiler için çok yüksek n=2.
Jonathan Frech

@JonathanFrech evet düzelteceğim ... yanlış tavan yaklaşım görünüşte DÜZENLEME: sabit
Erik the Outgolfer

Soru use the closest available, parlak renkler yerine normal renkleri kullandığınız görülüyor. Parlak renkler - bence - istenen renklere daha yakın olacaktı.
Jonathan Frech

@JonathanFrech Hmm, seninki de normal renkleri kullanıyor gibi görünüyor, ama evet parlak olanlar daha yakın.
Outgolfer Erik

1
@ElPedro Her neyse onun benimkinden daha iyi çıktı: p
Erik the Outgolfer

1

Yabasik , 220 bayt

Girdiyi tamsayı nolarak alan ve terminale 4 renkli ev veren bir anonim işlev .

Yabsic'te özel bir dize yineleme veya değiştirme işlevinin olmaması bu yanıtı gerçekten acıtıyor.

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

Bu sürüm grafik modu gerektirir ve bu nedenle TIO üzerinde çalışmaz.

Çıktı

Aşağıdakiler için giriş değeri n=7.

Çıktı


1

SmileBASIC, 115 bayt

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

Ayrıca 115 bayt olan bir diğeri:

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

İhtiyacım olan renk kodları (4 bit RGBI'da) 5, 11, 9, 7'dir. Bu, !!J*8-J*2+5J 0 değilse, bu 13-J*2(11,9,7 veriyor) kullanılarak oluşturulur ve eğer sonuç, sadece 5.

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.