Süper Kare Yağmur


11

Scream ™ Kış İndirimi başladı ve kendinizi yoğun, minimalist bir aksiyon oyunu Super Square'e çevirdiniz . Oynadıktan sonra, ya oyunun sadece gülünç zor olduğunu ya da gerçekten çok kötü olduğunu fark edersiniz . Özellikle, her seferinde sizi yakalayan bu "yağmur" paterni var ...

resim açıklamasını buraya girin

Sinirli, kendinize farklı bir meydan okumaya karar verin: ASCII sanatında yağmur desenini çizin!

Giriş

Girdi, nSTDIN veya işlev bağımsız değişkeni ile verilen desenin boyutunu gösteren tek bir pozitif tamsayıdır .

Çıktı

Çıktı, belirtilen boyutta, dize olarak döndürülen veya STDOUT aracılığıyla yazdırılan yağmur desenidir. Tüm görüntüden önce veya sonra boşluk bırakma veya tamamlama iyi. Ayrıca, görüntünün ekranın sol tarafında düz durması gerekmez, ancak net bir şekilde fark edilebilir olması gerekir.

İşte n = 10:

 ...................
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ...................

İşte n = 5:

 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 

Ve son olarak, işte n = 1(sadece en içteki iki duvar):

 - 

 - 

İnşaat (ekstra netlik için)

Oyun alanı aşağıdaki gibi iki çift çeyreğe ayrılmıştır:

 AAAAAAAAA
B AAAAAAA B
BB AAAAA BB
BBB AAA BBB
BBBB A BBBB
BBBBB BBBBB
BBBB A BBBB
BBB AAA BBB
BB AAAAA BB
B AAAAAAA B
 AAAAAAAAA

Üst / alt kadranlar tire ile temsil edilen yatay duvarlar -ve noktalarla gölgeli boşluklar arasında değişmelidir .. Sol / sağ kadranlar, boşluklar ve borularla temsil edilen dikey duvarlar arasında değişmelidir |. Ana köşegenler boştur ve her zaman boşluklarla doldurulmalıdır.

Boyutta yağmur deseni nvardır 2nuzakta merkezi hareket ederken, üst / alt merkezine en yakın kadran ve kadran arasında değişen duvarlardan duvarlar ile duvar.

puanlama

Bu kod golf, bu yüzden en az bayt kod kazanır.


4
Bu oyun ... Neden bahsettiğini biliyorum. Ben yenene kadar 40 saat gibi çaldı. ^^
ThreeFx

Yanıtlar:


3

CJam, 93 87 78 61 59 bayt

ri:K_+){K" |"*KKI-z:I-I2%:L+<SL>\+_W%L'-'.?I2*Ig-*@I0=>N}fI

nSTDIN ile değer alır

Birkaç örnek:

1
 - 

 - 
2
 ... 
| - |
|   |
| - |
 ... 
5
 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 
10
 ................... 
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ................... 

Yarın ilk şeyi yapacağım bu çok golf olabilir.

Buradan çevrimiçi deneyin


5

Haskell 150 bayt

Kazanacağımın farkındayım, sadece ilk kod golfümü göndermek istedim: D

q n=putStr$unlines$iterate(\l->let[a,b]=if l!!0!!1=='-'then"|."else" -";c=[a:s++[a]|s<-l];t=' ':[b|x<-l!!0]++" "in t:c++[t])[" - ","   "," - "]!!(n-1)

GHCi'ye yükleyip boyutun q nnerede nolduğunu çağırarak kullanın .

Bazı örnekler:

*Main> q 1
 - 

 - 
*Main> q 2
 ... 
| - |
|   |
| - |
 ... 
*Main> q 5
 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 
*Main> q 10
 ................... 
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ................... 

Birisi muhtemelen daha iyisini yapabilir, Haskell için oldukça yeniyim.


6
Kazanma konusunda endişelenme. ;) Kazanmak CJam ve Pyth içindir. Diğer dillerde golf yapmak, aynı "ağırlık sınıfında" başvuruları yenmek ve dilinizin bazı yeni belirsiz özelliklerini öğrenmekle ilgilidir. PPCG'ye Hoşgeldiniz!
Martin Ender

3

Python, 204 , 198 , 191 bayt

r=lambda a,b,d=' ':d.join((a,b,a[::-1]))
def f(s,i,n):d=[r(s[:i],'.-'[(n-i)%2]*((n-i)*2-1))];return i==n and[r(s,' '*(2*(i%2)+1),'')]or d+f(s,i+1,n)+d
g=lambda n:'\n'.join(f('| '*(n/2),0,n))

"r", yansıtılan "a" ile çevrili "b" yi isteğe bağlı bir sınırlayıcıyla yazan bir yardımcı işlevdir (evet lambda parametrelerinin varsayılanları olabilir). "f" yinelemelidir, her seviye için kenarlar ve orta parçalar oluşturur "g", istenen metni döndürmek için bir tamsayı ile çağrılabilen yağmur işlevidir.


Ben sadece genellikle izin verdi (bu düzenledi) dizeleri döndüren işlevlere izin unuttum fark ettim.
Boşluğu

Kısa devre değerlendirmesi ile bunu
190'a

Üzgünüm, seni kazara indirdim. Düzenlerseniz iptal edebilirim.
nutki

1

Perl 5: 74 bayt (73 kod + -p)

#!perl -p
s/.*/ /;$a=qw(- .)[$|--]x
s/.+/$"$&$"/g,s/^|\z/ $a 
/g,$"^="\\"for($_)x$&

Parametreyi girişe alır (düzgün fonksiyon için gereken satır sonu karakteri):

$ perl rain.pl <<<"3"
 ----- 
  ...  
 | - | 
 |   | 
 | - | 
  ...  
 ----- 

Ungolfed:

                         # Read the input line into $_ (-p)
s/.*/ /;                 # Replace the input with a space (plus the original eol), saves the parameter in $&
for(($_)x$&) {           # Iterate $& times without affecting $_
  $c=s/.+/$"$&$"/g;      # Add $" (initially space) at the start and the end of each line, stores number of lines in $c
  $a=("-",".")[$|--]x$c; # Set $a to $c times minus or dot using magic $| (which iterates over 1 and 0 on decrement)
  s/^|\z/ $a \n/g;       # Equivalent to $_=" $a \n$_ $a \n"
  $"^="\\";              # Alternate $" between space and bar using the string xor 
}
                         # Print $_ (-p)
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.