Bana bir Kule Bloğu yazdır


16

Mümkün olan en kısa kodla bir kule bloğu yazdırın.

Giriş:

Giriş, kule bloğunun kaç katına sahip olduğunu tanımlar. Bir katta kapının her iki tarafında bir pencere vardır. Pencere 3x3 karmadan oluşmaktadır.

4 katlı kule bloğuna bir örnek aşağıdadır:

      =====================
      )V V V V V V V V V V(
     )V V V V V V V V V V V(
    )V V V V V V V V V V V V(
   )V V V V V V V V V V V V V(
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : _______ : : : : :
   : : ### : I     I : ### : :
   : : ### : I     I : ### : :
   : : ### : I     I : ### : :
   : : : : : I     I : : : : :

Güncelleme:

Giriş bir veya daha büyük olmalıdır.

Çizgilerin sonundaki boşluklara izin verilir.

Örneğimde, her satırın üç önde gelen alanı var. Bu zorunlu değildir, sadece girişi olan kule bloğu vardır.


2
Giriş 1'den küçük olabilir mi?
nmjcman101

2
Satırların sonundaki boşluklara izin veriliyor mu?
ngenisis

Sorularınız için teşekkürler - lütfen sorumun güncellemesine bakın.
Belfield

Yanıtlar:


6

V , 72 bayt

13iV r(É)3ñįlxñÄ21r=GÙÒ~Ù14R: ÙÄ2w3r#7w.3ÄkdGÀpG4k5w7r_bêojrIÎfIl5r 

Çevrimiçi deneyin!

İşte yazdırılamayan karakterler içerdiğinden bir hexdump:

00000000: 3133 6956 201b 7228 c929 33f1 c4af 6c78  13iV .r(.)3...lx
00000010: f1c4 3231 723d 47d9 d27e d931 3452 3a20  ..21r=G..~.14R: 
00000020: 1bd9 c432 7733 7223 3777 2e33 c46b 6447  ...2w3r#7w.3.kdG
00000030: c070 4734 6b35 7737 725f 1662 ea6f 6a72  .pG4k5w7r_.b.ojr
00000040: 49ce 6649 6c35 7220                      I.fIl5r

Garip bir böcekle karşılaştım. Ortadaki bölüm: dGÀpGolmalıydı:, ÀäGGama bu 1 girişleri için çalışmıyor ve neden olduğu hakkında hiçbir fikrim yok.¯\_(ツ)_/¯


8

Mathematica 301 288 258 bayt

" "~(s=If[#2==0,"",#~StringRepeat~#2]&)~3<>{"="~s~21,"
",s[" ",12-#]<>{")","v "~s~#,"v(
"}&/@9~Range~12,"~"~s~27,"
",s[(x=(u=": ")~s~13<>":
")<>{y=u<>{z=": ### ",v=u~s~5,w=z<>": :
"},y,y,x},#-1],v,"_"~s~7," ",v,"
",m=u<>{z,u,n="I     I ",w},m,m,v,n,w}&

Pozitif bir tamsayı alan ve bir dize çıkaran saf fonksiyon. Mathematica görünüşte tek boşluklu fontları tek aralıklı olarak görüntülemediği için çıktı dizesi doğru görünmeyecek:

resim açıklamasını buraya girin

Nedenini tam olarak anlamıyorum, eğer Printdize eğer monospace olarak biçimlendirir :

resim açıklamasını buraya girin

Düzenle: " "Her satırın başına dahil etmeyerek birkaç bayt kaydetti . sYalnızca bir katın olduğu durumun işlenmesinin tanımı değiştirildi ( StringRepeatdize 0sürelerini tekrarlamaktan hoşlanmıyor ).

Düzenleme 2: sayesinde LegionMammal978 ve aslında StringJoinolduğunu Listable, bu artık iç içe listelerin anlaşılmaz bir kabus ve ayrıca 30 daha kısa bayt.


1
En azından 26 bayt değiştirerek kaydedilebilir a<>b<>...<>xile a<>{b,...,x}belli bölgelerinde.
LegionMammal978

4

Piton 2 , 275 270 262 246 240 236 bayt

@ Flp.Tkc bir ipucu ile ve döngü için ilk değiştirerek bir çift kaydetti.

16 @ Flp.Tkc'den daha fazla yardım alarak kaydedildi

a,h,b,c,w=' ',"I  ",": "," :","#"*3;d,e,j=b*2+w+a+b+h,b*5+h,[b*14]
print'\n'.join([a*3+'='*21]+[a*(4-x)+')'+'V '*(x+8)+'V('for x in 1,2,3,4]+['-'*27]+(j+[b*2+w+c*6+a+w+c*2]*3+j)*(input()-1)+[b*5+"_"*7+c*5]+[d+a+d[::-1]]*3+[e+a+e[::-1]])

Çevrimiçi deneyin!

Kulenin her satırını bir dize olarak oluşturur ve diziyi sonuna kadar basan bir diziye ekler. Eğer kimse tam bir açıklama isterse nasıl çalıştığını hatırlayabiliyorsam kindarca veririm ☺


3

PowerShell , 193 bayt

"   "+"="*21
3..0|%{" "*$_+")"+"V "*(12-$_)+"V("}
"~"*27
--$args[0]..0|%{($b=": "*5)+(($a=": "*4),'_______ ')[!$_]+$b;,(': : ### : '+($a,($c='I     I '))[!$_]+': ### : :')*3;$b+($a,$c)[!$_]+$b}

Çevrimiçi deneyin!

(Hala burada veya orada birkaç bayt olabileceğini hissediyorum. 190'ın altı yapılabilir.)

İlk üç çizgi 3..0|%{...}, doğru sayı ve eğimi elde etmek için bir döngü ile birlikte dize çarpma ve birleştirme kullanarak çatıyı oluşturur V.

Girişten sonraki hat çalışır-indirildiği önceden --$args[0]aşağı 0bir döngü (önceden eksiltme kullanarak endeks için izin verdiği !$_yerine $_-eq1sonradan birkaç bayt tasarruf). Her döngü yinelemesinde, bir dizi dize oluşturuyoruz, değişkenleri ayarlıyoruz $bve $ayol boyunca. Ayrıca (... , ...)[...], ortadaki uygun dizeleri seçmek için sözde üçlüleri kullanıyoruz , böylece birinci kattaki giriş yolunu doğru şekilde alabiliriz.

Dizelerin her biri ayrı ayrı boru hattında bırakılır ve varsayılanlar Write-Outputarasına satırsonu ekler, böylece bunları ücretsiz olarak alırız.


3

T-SQL, 378 372 353 331 325 bayt

golfed:

DECLARE @ INT=3

,@h varchar(max)=REPLICATE('~',27)SELECT @h+='
: '+a+IIF(n>@*5-6,IIF(n%5=0,'_______ ','I     I '),t)+a+':'FROM(SELECT
IIF(n%5%4=0,t,': ### : ')a,*FROM(SELECT': : : : 't,number n,*FROM spt_values)x)y
WHERE type='P'and n<@*5SET @=0WHILE @<4SELECT
@h=SPACE(@)+')'+REPLICATE('V ',12-@)+'V(
'+@h,@+=1PRINT'   '+REPLICATE('=',21)+'
'+@h

Ungolfed:

DECLARE @ INT=3

,@h varchar(max)=REPLICATE('~',27)
SELECT @h+='
: '+a+IIF(n>@*5-6,IIF(n%5=0,'_______ ','I     I '),t)+a+':'
FROM
(SELECT IIF(n%5%4=0,t,': ### : ')a,*
FROM
(SELECT': : : : 't,number n,*
FROM spt_values)x)y
WHERE type='P'and n<@*5
WHILE @>=0
  SELECT @h=SPACE(3-@)+')'+REPLICATE('V ',9+@)+'V(
'+@h,@-=1
PRINT'   '+REPLICATE('=',21)+'
'+@h

Denemek


2

C 409 406 402 bayt

#define P(x)p(": ",x);
#define S(x)p(x,1);
#define L P(2)p("#",3);p(" :",6);S(" ###");S(" : :\n")
#define Q p("V ",i+++9)
p(s,n)char*s;{printf(s,--n?p(s,n):0);}i;t(n){p(" ",3);p("=",21);S("\n   )")Q;S("V(\n  )")Q;S("V(\n )")Q;S("V(\n)")Q;S("V(\n")p("~",27);S("\n")for(;--n;){P(13)S(":\n")L;L;L;P(13)S(":\n")}P(5)p("_",7);p(" :",5);S("\n")p(": : ### : I     I : ### : :\n",3);P(5)S("I     I")p(" :",5);}

İle ara:

int main()
{
    t(4);
}

1

Toplu, 373 bayt

@echo off
set s=###
echo    %s:#========%
for %%s in ("   )" "  )V " " )V V " ")V V V ")do echo %%~sV%s:#= V V V%(
echo %s:#=~~~~~~~~~%
set t=: : ### : I     I : ### : :
set s=%t:I     I=: : : :%
for /l %i in (2,1,%1)do echo %s:###=: :%&echo %s%&echo %s%&echo %s%&echo %s:###=: :%
set s=%t:###=: :%
echo %s:I     I=_______%
echo %t%
echo %t%
echo %t%
echo %s%

Birkaç baytlık tıraş olan 3'ün katları olduğunu fark ederek sırt ve oluk oluşturur. Son ekin her satır için aynı olduğunu fark ederek çatıyı oluşturur (ve yine birkaç kat tekrarlama içerir). Zemin kat penceresi olan en ilginç duvar çizgisiyle başlayarak ve duvarın diğer bölümlerini oluşturmak için ayrıntıları kaldırarak duvarları inşa eder.


1

Javascript, 335 bayt

y=z=>{a="   "+"=".repeat(21);for(b=9;13>b;b++)a+="\n"+" ".repeat(12-b)+")"+"V ".repeat(b)+"V(";a+="\n"+"~".repeat(27);b="\n"+": ".repeat(14);c=": : ### : : : : : : ### : :";for(d=0;d<z-1;d++)a+=b+"\n"+c+"\n"+c+b;a+="\n: : : : : _______ : : : :\n"+": : ### : I     I : ### : :\n".repeat(3)+": : : : : I     I : : : : :";console.log(a)};

y()Argümanla z, y(z)istenen çıktıyı üretecek bir işlev oluşturur .

Örnek Kullanım:

y=z=>{a="   "+"=".repeat(21);for(b=9;13>b;b++)a+="\n"+" ".repeat(12-b)+")"+"V ".repeat(b)+"V(";a+="\n"+"~".repeat(27);b="\n"+": ".repeat(14);c=": : ### : : : : : : ### : :";for(d=0;d<z-1;d++)a+=b+"\n"+c+"\n"+c+b;a+="\n: : : : : _______ : : : :\n"+": : ### : I     I : ### : :\n".repeat(3)+": : : : : I     I : : : : :";console.log(a)};

console.log(y(3));

Normal JavaScript'ten code-golf JS'ye geçiyorum. Herhangi bir ipucu büyük mutluluk duyacağız.


1

Tuval , 62 61 bayt

⁶=⁵×V7× * )×4*∔/‾²m~7«× ×∔│8 ×:*5*#33*62╋│⁸*∔l4-_7× 5×Ie4*∔╋╋

Burada deneyin! Gerekli olmasa bile 0 girişi beklendiği gibi çalışır.


hey, evin yüksekliği bu komut dosyası kullanılarak nasıl değiştirilir?
t-clausen.dk

Yaşlı gözlerim sağ kutudaki sayıyı kaçırdı
t-clausen.dk
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.