Kelimeler -> Şehir Skyline


40

Meydan okuma

Programınız veya fonksiyonunuz STDIN'den bir tek string girişi veya bir fonksiyon parametresini kabul edecektir. Girişin yalnızca alfabetik karakterler (a-zA-Z), boşluklar ve tam durur içereceğini varsayabilirsiniz. Girdi büyük / küçük harfe duyarsızdır, bu nedenle 'a' ile tam olarak 'A' muamelesi yaptığınız gibi davranmalısınız.

Dizideki her karakter için, aşağıdaki şartnameye göre bir binanın bir gösterimini göstereceksiniz.

Her binanın üst çizgisinde alt çizgi, ikinci çizgisinde eğik çizgi, boşluk, ters eğik çizgi ile belirtilen bir çatısı olmalıdır.

 _
/ \

Daha sonra, her bir tarafta bir duvar (|) ve ortada bir boşlukla temsil edilen harf numarasıyla (a = 1, b = 2, c = 3 vb.) Eşleşen birkaç katınız olacaktır. Alt kat (ve sadece alt kat), duvarlar arasında alt çizgi olan bir temele sahip olmalıdır. Bunun gibi, böyle...

|_|

Mesela 'b' şuna benzerdi

 _
/ \
| |
|_|

Şimdi, çok yüksek, dar binaların dayanamayacağını ve tabanda daha geniş olması gerektiğini biliyoruz, bu nedenle hiçbir bina ilave bir destek olmadan üç kattan daha yükseğe çıkamaz. Bu yüzden her üç seviye (daha az değil) bir 'genişleyen katman' eklemelisiniz. Genişletme katmanı, altındaki bölümün duvarlarının hemen üzerinde bir eğik çizgi ve ters eğik çizgiden oluşur ve aşağıdaki bölüm, yukarıdaki bölümden daha geniş iki boşluk olmalıdır. Ekstra katman binanın yüksekliğine göre sayılmaz.

Binalar üst üste gelmemeli, aralarında gereksiz yere olmamalıdır ve zemin her zaman düzdür, bu nedenle tüm binaların tabanı aynı seviyede olmalıdır.

Örneğin, 'abcdefga' böyle görünecek.

                           _
                          / \
                     _    | |
                _   / \   | |
           _   / \  | |   | |
          / \  | |  | |  /   \
       _  | |  | |  | |  |   |
    _ / \ | |  | | /   \ |   |
 _ / \| | | | /   \|   | |   |  _
/ \| || |/   \|   ||   |/     \/ \
|_||_||_||___||___||___||_____||_|

Dize girişindeki boşluklar çift boşlukla gösterilmelidir.

Dize girişindeki tam duraklar bunun gibi molozlarla gösterilmelidir.

/\/\

Diğer örnekler

Giriş = Hello world.

Çıktı =

                                                   _                                                  
                                                  / \                                                 
                                                  | |                                                 
                                                  | |                                                 
                                                  | |                                                 
                                                 /   \                                                
                                                 |   |                                                
                                                 |   |                       _                        
                                                 |   |                      / \                       
                                                /     \                     | |                       
                                                |     |                     | |                       
                                   _            |     |          _          | |                       
                                  / \           |     |         / \        /   \                      
                                  | |          /       \        | |        |   |                      
                                  | |          |       |        | |        |   |                      
                _        _        | |          |       |        | |        |   |        _             
               / \      / \      /   \         |       |       /   \      /     \      / \            
               | |      | |      |   |        /         \      |   |      |     |      | |            
               | |      | |      |   |        |         |      |   |      |     |      | |            
               | |      | |      |   |        |         |      |   |      |     |      | |            
   _          /   \    /   \    /     \       |         |     /     \    /       \    /   \           
  / \         |   |    |   |    |     |      /           \    |     |    |       |    |   |           
  | |         |   |    |   |    |     |      |           |    |     |    |       |    |   |           
  | |         |   |    |   |    |     |      |           |    |     |    |       |    |   |           
  | |    _   /     \  /     \  /       \     |           |   /       \  /         \  /     \          
 /   \  / \  |     |  |     |  |       |    /             \  |       |  |         |  |     |   _      
 |   |  | |  |     |  |     |  |       |    |             |  |       |  |         |  |     |  / \     
 |   |  | |  |     |  |     |  |       |    |             |  |       |  |         |  |     |  | |     
 |   |  | | /       \/       \/         \   |             | /         \/           \/       \ | |     
/     \/   \|       ||       ||         |  /               \|         ||           ||       | | |     
|     ||   ||       ||       ||         |  |               ||         ||           ||       |/   \    
|_____||___||_______||_______||_________|  |_______________||_________||___________||_______||___|/\/\

Giriş = lorem ipsum

                                                                                             _                  
                                                                                            / \                 
                                                                              _             | |                 
                                                                             / \            | |                 
                          _                                                  | |            | |                 
                         / \                                                 | |           /   \                
                         | |                                    _            | |           |   |                
                         | |                                   / \          /   \          |   |                
              _          | |                                   | |          |   |          |   |                
             / \        /   \                                  | |          |   |         /     \               
             | |        |   |              _                   | |          |   |         |     |         _     
             | |        |   |             / \                 /   \        /     \        |     |        / \    
    _        | |        |   |             | |                 |   |        |     |        |     |        | |    
   / \      /   \      /     \            | |                 |   |        |     |       /       \       | |    
   | |      |   |      |     |            | |                 |   |        |     |       |       |       | |    
   | |      |   |      |     |           /   \               /     \      /       \      |       |      /   \   
   | |      |   |      |     |           |   |        _      |     |      |       |      |       |      |   |   
  /   \    /     \    /       \          |   |       / \     |     |      |       |     /         \     |   |   
  |   |    |     |    |       |          |   |       | |     |     |      |       |     |         |     |   |   
  |   |    |     |    |       |         /     \      | |    /       \    /         \    |         |    /     \  
  |   |    |     |    |       |         |     |      | |    |       |    |         |    |         |    |     |  
 /     \  /       \  /         \   _    |     |     /   \   |       |    |         |   /           \   |     |  
 |     |  |       |  |         |  / \   |     |     |   |   |       |    |         |   |           |   |     |  
 |     |  |       |  |         |  | |  /       \    |   |  /         \  /           \  |           |  /       \ 
 |     |  |       |  |         |  | |  |       |    |   |  |         |  |           |  |           |  |       | 
/       \/         \/           \ | |  |       |   /     \ |         |  |           | /             \ |       | 
|       ||         ||           |/   \ |       |   |     | |         |  |           | |             | |       | 
|       ||         ||           ||   |/         \  |     |/           \/             \|             |/         \
|_______||_________||___________||___||_________|  |_____||___________||_____________||_____________||_________|

Giriş = a.a.a.x.x.x.a.a.a

                             _                    _                    _                             
                            / \                  / \                  / \                            
                            | |                  | |                  | |                            
                            | |                  | |                  | |                            
                            | |                  | |                  | |                            
                           /   \                /   \                /   \                           
                           |   |                |   |                |   |                           
                           |   |                |   |                |   |                           
                           |   |                |   |                |   |                           
                          /     \              /     \              /     \                          
                          |     |              |     |              |     |                          
                          |     |              |     |              |     |                          
                          |     |              |     |              |     |                          
                         /       \            /       \            /       \                         
                         |       |            |       |            |       |                         
                         |       |            |       |            |       |                         
                         |       |            |       |            |       |                         
                        /         \          /         \          /         \                        
                        |         |          |         |          |         |                        
                        |         |          |         |          |         |                        
                        |         |          |         |          |         |                        
                       /           \        /           \        /           \                       
                       |           |        |           |        |           |                       
                       |           |        |           |        |           |                       
                       |           |        |           |        |           |                       
                      /             \      /             \      /             \                      
                      |             |      |             |      |             |                      
                      |             |      |             |      |             |                      
                      |             |      |             |      |             |                      
                     /               \    /               \    /               \                     
 _      _      _     |               |    |               |    |               |     _      _      _ 
/ \    / \    / \    |               |    |               |    |               |    / \    / \    / \
|_|/\/\|_|/\/\|_|/\/\|_______________|/\/\|_______________|/\/\|_______________|/\/\|_|/\/\|_|/\/\|_|

kurallar

  • Elbette bu kod golf, bayt cinsinden en düşük puan kazanır
  • Standart boşluk yönetimi kuralları geçerlidir
  • Çıktıdan önce veya sonra herhangi bir sayıda boş satır eklenebilir
  • Tüm sonucun bir dizgede çıktısını seçebilir veya çıktıyı, her bir elemanın bir çıktı satırını temsil ettiği bir dizi olarak sunabilir veya STDOUT'a gönderebilirsiniz.

Not

Bu benim PPCG'ye ilk gönderim, bu yüzden lütfen beni rahatça izleyin. Kum havuzundan geçti. Olumsuz noktalar veya olası gelişmeler lütfen yorum olarak gönderin; elimden geleni yapacağım


7
Dönüştürme [a,z]ve [A,Z]karşı [1,26]anlamsız bir gereksinimi gibi görünüyor. Giriş olarak sadece bir liste tamsayıları kullanmak çok daha iyi olurdu ( 0moloz için giriş olması gerekir). Ayrıca, yalnızca 21 saat boyunca Sandbox’a girdikten sonra , birden fazla kullanıcıdan oy almak veya geri bildirim almak için beklemeden mücadelenizi yayınlamak, "sanal alandan geçti" olarak sayılmaz. İnsanlara incelemeleri için bolca zaman tanımak için Sandbox'ta en az 48-72 saat boyunca zorluk bırakmanız önerilir.
Mego

2
Bana bunu hatırlatıyor . Güzel ilk sorun, ama önermek değiştirmekte düşünün [a,z], [1.26]parça Mego bahsetti. . Bu isteğe sahip (genellikle zorluk önemli bir parçası (burada değil) olmadıkça en iyisi
Stewie Griffin

2
Söyleyeceğim, bu çok güzel bir ilk meydan okuma. Siteye Hoşgeldiniz!
DJMcMayhem

1
Tamsayılarla az eşlemenin ne demek istediğini anlayabilirim. Bu, mücadelenin ilk yinelemesinde anlamlıydı, ancak netlik ve kısalık için düzenleme yapıldığından (kaldırdığım bir arka plan vardı) harfler artık alakalı değil. En kısa sürede uygun şekilde düzenleyeceğim
Darren H

1
Ben kişisel olarak az, mekan, dönem tercih ederim.
isaacg 19:16

Yanıtlar:


10

JavaScript (ES6), 330 326 ... 315 309 bayt

ASCII sanatını özyinelemeyle, alt kattan başlayarak ve her aşama için birkaç düzenli ifade uygulayarak oluşturur:

(a,l,R=(E,b)=>E.split`:`.map((e,i)=>l=(l||a).replace(RegExp(e,'g'),b?b.split`:`[i]:n=>(x=(n.charCodeAt()-65)%32)<0?x+1?'/y/y':n+n:x%3+'_'.repeat((x/3<<1)+1)+0)))=>(L=l)?(R('/y:_:/xy:1:2:/xx(x+)y:0(x+)0:3','  :x: _ :3:1: 2$10 :/$1y:0'),L==l?(l=a.join`
`,R('\\d:x:y','|: :\\'),l):f([l].concat(a),l)):f(R('.'),l)

Nasıl çalışır

1) Alt kat

Giriş dizesini aşağıdaki gibi bir alt kata çevirerek başlarız:

"ab cd.df.hcab"  -->  "0_01_0  2_00___0/y/y0___02___0/y/y1_____02_00_01_0"

nerede:

  • y ters eğik çizgi için daha kısa bir diğer addır (kaçmayı gerektirir)
  • Bir diziden hemen önceki basamak ( 0, 1veya 2) _binanın sol duvarıdır. Bir sonraki “genişletme katmanından” önce üzerine yerleştirilmesi gereken duvar sayısını temsil eder.
  • Bir diziden sonraki hane _binanın sağ duvarıdır ve daima olarak ayarlanır 0.

2) Her aşamada uygulanan düzenli ifadeler

Özyinelemeli işlem, aşağıdaki normal ifadeleri kullanarak, önceki katta 9 değişiklik yapılmasından oluşur:

  1. /\/y/g=> " "(molozu çıkarın)
  2. /_/g=> "x"(binanın temelini veya üstünü sağlam bir blokla değiştirin)
  3. /\/xy/g=> " _ "(son genişletme katmanını binanın tepesiyle değiştirin)
  4. /1/g=> "3"(Geçici değiştirmek 1ile 3- Son adımı bakınız)
  5. /2/g=> "1"(Yerine 2ile 1)
  6. /\/xx(x+)y/g=> " 2$10 "(genişletme katmanını yeni, daha dar bir duvarla değiştirin)
  7. /0(x+)0/g=> "/$1y"(duvarın üstünü genişleyen bir katmanla değiştirin)
  8. /3/g=> "0"(Yerine 3ile 0)

Örneğin, burada art arda dönüşümler 2___0(a tarafından oluşturulan alt kat 'f'):

"2___0" > "1xxx0" > "0xxx0" > "/xxxy" > " 2x0 " > " 1x0 " > " 0x0 " > " /xy " > "  _  "

                                                                                   _   
                                                                        /xy       /xy  
                                                              0x0       0x0       0x0  
                                                    1x0       1x0       1x0       1x0  
                                          2x0       2x0       2x0       2x0       2x0  
                               /xxxy     /xxxy     /xxxy     /xxxy     /xxxy     /xxxy 
                     0xxx0     0xxx0     0xxx0     0xxx0     0xxx0     0xxx0     0xxx0 
           1xxx0     1xxx0     1xxx0     1xxx0     1xxx0     1xxx0     1xxx0     1xxx0 
 2___0     2___0     2___0     2___0     2___0     2___0     2___0     2___0     2___0 

Not : Binanın üst kısmı a ile değiştirilir x. Bu, yukarıdaki diyagramda gösterilmemiştir.

3) Nihai sonuca uygulanan düzenli ifadeler

Yenileme, değiştirilecek başka bir şey olmadığında durur, bu da en yüksek binanın tepesinin üstünde olduğumuz anlamına gelir.

Şimdi her şeyi bir başka düzenli ifadeyle temizlememiz gerekiyor:

  1. /\d/g=> "|"(rakamları borularla değiştirin)
  2. /x/g=> " "(katı blokları boşluklarla değiştirin)
  3. /y/g=> "\"( yters eğik çizgi ile değiştirin )

Örneğin:

  _            _  
 /xy          / \ 
 0x0          | | 
 1x0          | | 
 2x0   -->    | | 
/xxxy        /   \
0xxx0        |   |
1xxx0        |   |
2___0        |___|

gösteri

let f =

(a,l,R=(E,b)=>E.split`:`.map((e,i)=>l=(l||a).replace(RegExp(e,'g'),b?b.split`:`[i]:n=>(x=(n.charCodeAt()-65)%32)<0?x+1?'/y/y':n+n:x%3+'_'.repeat((x/3<<1)+1)+0)))=>(L=l)?(R('/y:_:/xy:1:2:/xx(x+)y:0(x+)0:3','  :x: _ :3:1: 2$10 :/$1y:0'),L==l?(l=a.join`
`,R('\\d:x:y','|: :\\'),l):f([l].concat(a),l)):f(R('.'),l)

console.log(f('ab cd.df.hcab'));

Katkıda bulunanlar:
Hedi sayesinde 4 bayt kaydedildi
8 Bayt sayesinde kaydedildi Charles değil


Bir tamsayı olarak bir giriş almak isteyen herkes için bekliyoruz ama böyle bir giriş olmayan rekabet olmalıdır öneririm
mbomb007

@ mbomb007 - Bu sabittir. Şu anki optimizasyonlarım, rezillerin maliyetini telafi etmez .charCodeAt().
Arnauld

Buna gerek yok new içindenew RegExp(e,'g')
Hedi

Bu yaklaşımı çok seviyorum. Yardımcı olabilecek bazı fikirler: 1. yEğik çizginiz için kaçmayı gerektirmeyen bir karakter kullanın . Eğer kullanırsanız 2. _zemin kat için, hala regex ile üst ayırt edebilir: /_ /.
Charles,

1
@NotthatCharles - Aslında "çift boşluk" kuralını hiç fark etmedim. ;) Bu sabittir.
Arnauld

7

PHP, 386 376 367 364 362 358 356 bayt

ilk yaklaşım; hala golf oynayabilir.

foreach(str_split($argv[1])as$c)for($n=28,$w='.'!=$c?1+2*ceil(1/3*$n=31&ord($c)):4,$p=$y=0;$y<36;){$s=str_pad("",$w,$y||!$n?" ":_);if($n>26&&!$y){$s="/\\/\\";$n=-1;}elseif($n-->0){$s[$p]=$s[$w-$p-1]="|";if($n%3<1){$o[$y++].=$s;$s=str_pad("",$w);$s[$p]="/";$s[$w-++$p]="\\";}}$o[$y++].=$s;if(!$n)$o[$y++].=str_pad(_,$w," ",2);}for($y=36;$y--;)echo"$o[$y]
";

PHP, 366 362 361 360 357 bayt

bir subfunction ile benzer bir yaklaşım:

function a($p,$r){global$o,$w,$y;$o[$y++].=str_pad(str_pad($r[0],2*$p,$r[1]).$r[2],$w," ",2);}foreach(str_split($argv[1])as$i=>$c)for($n=28,$w='.'!=$c?1+2*$p=ceil(1/3*$n=31&ord($c)):$p=4,$y=0;$y<36;)if($n>26&&!$y)$o[$n=$y++].="/\\/\\";elseif($n-->0){a($p,$y?"| |":"|_|");if($n%3<1)a($p--,"/ \\");if(!$n)a(1," _");}else a(0,"");for($y=36;$y--;)echo"$o[$y]
";

ikinci yaklaşım için arıza

function a($p,$r)
{
    global$o,$w,$y;
    $o[$y++].=                  // 3. add result to current line, increase line counter
        str_pad(                // 2. pad ...
        str_pad($r[0],2*$p,$r[1]).$r[2]     // 1. A + inner width(=2*$p-1) times B + C
        ,$w," ",2);             // ... to $w with blanks on both sides # 2==STR_PAD_BOTH
}

foreach(str_split($argv[1])as$i=>$c)
    for(
    $n=28,
    $w='.'!=$c                          // $w=total width
        ?1+2*$p=ceil(1/3*$n=31&ord($c)) // $n=storey count, $p=(inner width+1)/2
        :$p=4                           // $n=28, $p <= $w=4 for rubble
    ,
    $y=0;$y<36;)                        // $y=line counter
        if($n>26&&!$y)
            $o[$n=$y++].="/\\/\\";      // bottom line=rubble, $n=0
        elseif($n-->0)
        {
            a($p,$y?"| |":"|_|");       // add storey
            if($n%3<1)a($p--,"/ \\");   // add widening layer/roof
            if(!$n)a(1," _");           // add roof top
        }
        else
            a(0,"");                    // idk why str_pad doesn´t yield a warning here

for($y=36;$y--;)if($s=rtrim($o[$y]))echo"$s\n"; // output

: 16 lider yeni satırlar izin değilse bayt
değiştirin echo"$o[$y]\n;ile if($s=rtrim($o[$y]))echo"$s\n";.

-3 herhangi biri için bayt ;<=>?[\]^_{|}~) yerine 1: moloz olarak ($n=31&ord($c))birlikte $n) 2, $n=28,$w='.'!=$cile ($n=31&ord($c))<27) ve 3 4ile ($n=28)/7.

Başka için -8 >, ^veya ~moloz: Geri 3)


1
if(!$n){$o[$y++].=str_pad(_,$w," ",2);}-2 Parantezler için bayt
Jörg Hülsermann

ve çıktı 3 bayt daha kısa yapılabilir for($y=36;$y--;)echo"$o[$y]\n";:; fakat 2 bayttan daha fazla tasarruf sağlayan yeni bir yaklaşımım var.
Titus

1
İkinci yaklaşım için php.net/manual/en/functions.anonymous.php `işlev a '($ p, $ r) kullanın ($ o, $ w, $ y)' yerine küresel
Jörg Hülsermann

@ JörgHülsermann: usesadece isimsiz fonksiyonlar için çalışır. 2 bayt kurtarır; ancak bu işlevi $a=bir isim (+3 bayt) vermek yerine bir değişkende saklamak $ve dört çağrıdan her birine bir tane eklemek zorunda kalacağım .
Titus

4

Pyth, 93 79 bayt

K"/\\"j_.tsm?hJxGdC_m.[hyNk\ +\_mj*hy/k4?nkJ\ \_?%k4"||"Kh=+J=Nh/J3[F*2|@d;Krz0

Çevrimiçi deneyin. Test odası.

açıklama

Bunu çok uzun zamandan beri varsayılan olarak sakladım.


4

Perl, 147 146 bayt

İçin +1 içerir -p

STDIN'deki giriş ile çalıştırın, örn.

citysky.pl <<< " abcdefgxyz."

citysky.pl:

#!/usr/bin/perl -p
s%.%@{[map chr~-ord(lc$&)*4/3-4*(abs||-9),-9..9]}%g;y/M\xa248
A|-\xc6\0-\xff/MA||
A}-\xc6A/d,$a=(lc$a).$_ for($_)x36;*_=a;s/\x9f.*?\K\x9f/\xa3/g;y%A\xc6\x9f-\xa3\x0b-\xff%__/|||\\ %

Gösterildiği gibi çalışır, ancak \xhhiddia edilen puanı almak için kaçışları gerçek değerleriyle değiştirin. Bunu bu komut satırını kullanarak yapabilirsiniz:

perl -0pi -e 's/\\x(..)/chr hex $1/eg;s/\n$//' citysky.pl

Başka bir yaklaşımı henüz araştırmadım, bu yüzden çok yenilebilir ...


2

Haskell, 289 bayt

c?l=c++l++c
c%s=("|"?(drop 2(r s)>>c)):s
g 46=["/\\"?""]
g 32=["  "]
g x="_"%h(mod x 32)
h 1=["/ \\"," _ "]
h x=(" "%h(x-1))!x
v!x|mod x 3/=1=v|z<-'/':r v++"\\"=z:map(" "?)v
r v=v!!0>>" "
f t|l<-map(g.fromEnum)t,m<-maximum(map length l)-1=unlines[l>>= \x->(x++cycle[r x])!!i|i<-[m,m-1..0]]

2

Ruby, 245

->s{a=['']*36
w=' '
s.chars{|c|a[u=0]+=c<?!?w*2:c<?/?"/\\"*2:(h=c.upcase.ord-64
1.upto(1+h+=(h-1)/3){|t|u=[u,l=1+2*((f=h-t)/4)].max
a[t]+=w*(a[0].size-a[t].size)+(f<-1?w:f<0??_:(f%4<1?[?/,?\\]:[?|]*2)*(w*l)).center(u+2)}
"|#{?_*u}|")}
a.reverse}

İstediğin kadar fazla yeni satıra izin veriyorsun, bu yüzden bu konuda özgürüm. Bunun yanı sıra, süreç aşağıdaki gibidir:

  1. Bir çıkış dizisi başlat a.
  2. Her karakter için:
    1. o 'eğer eklemek  içina[0]
    2. o ise '', eklemek /\/\içina[0]
    3. aksi takdirde:
      1. yüksekliği hesapla ( c.upcase.ord + (c.upcase.ord-1)/3)
      2. içindeki her satır için a:
        1. satır boşluklarla doldurun. a[t]+=w*(a[0].size-a[t].size)
        2. eğer yukarıda biriz h, bir_
        3. başka bir şey varsa, yüksekliği a 
        4. Aksi takdirde, yüksekliği, orta | |veya / \uygun genişliğin ( 1+2*((h-t)/4) altındaysakh-t%4==0
        5. eklemek "|___|"doğru genişliği içina[0]
  3. dönüş a.reverse

Bahse girerim önlemek için matematiği çözersem küçültebilirim. reverse


2

PHP, 297 bayt

foreach(str_split($argv[1])as$c)for($j=0,$h=ord($c)-64,$g=$h+$f=ceil($h/3),$w=$v=$h<0?$h<-18?2:4:2*$f+1;$j<36;$j++,$g--,$v-=$h>0&&$v>1?($g%4||!$j)?0*$n="|$s|":2+0*$n="/$s\\":$v+0*$n=['','_','',0,'/\/\\'][$v],$o[$j].=str_pad($n,$w,' ',2))$s=str_repeat($j?' ':'_',$v-2);krsort($o);echo join($o,'
');

Daha okunaklı bir sürüm:

foreach (str_split($argv[1]) as $character) {
    for (
        $line = 0,
        $buildingHeight = ord($character) - 64,
        $floorsLeft = $buildingHeight + $supportFloors = ceil($buildingHeight / 3),
        $buildingWidth = $widthOnThisFloor = $buildingHeight < 0
            ? $buildingHeight < -18
                ? 2
                : 4
            : 2 * $supportFloors + 1;

        $line < 36;

        // The body of the for-loop is executed between these statements

        $line++,
        $floorsLeft--,
        $widthOnThisFloor -= $buildingHeight > 0 && $widthOnThisFloor > 1
            ? ($floorsLeft % 4 || !$line)
                ? 0 * $floorString = "|$middleSpacing|"
                : 2 + 0 * $floorString = "/$middleSpacing\\"
            : $widthOnThisFloor + 0 * $floorString = ['', '_', '', 0, '/\/\\'][$widthOnThisFloor],
        $outputArray[$line] .= str_pad($floorString, $buildingWidth, ' ', 2)
    ) {
        $middleSpacing = str_repeat($line ? ' ' : '_', $widthOnThisFloor - 2);
    }
}
krsort($outputArray);
echo join($outputArray, '
');
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.