Super Square Rain

11

Scream ™ Winter Sale aktif dan Anda baru saja menangkap permainan aksi minimalis yang intens, Super Square . Setelah memainkannya, Anda menyadari bahwa permainan itu sangat sulit atau Anda benar- benar buruk. Secara khusus, ada pola "hujan" ini yang sepertinya membuat Anda setiap kali ...

masukkan deskripsi gambar di sini

Frustrasi, Anda memutuskan untuk memberi diri Anda tantangan yang berbeda: Gambar pola hujan dalam seni ASCII!

Memasukkan

Input adalah bilangan bulat positif tunggal yang menunjukkan ukuran pola n, yang diberikan melalui STDIN atau argumen fungsi.

Keluaran

Output adalah pola hujan pada ukuran yang ditentukan, dikembalikan sebagai string atau dicetak melalui STDOUT. Memimpin atau membuntuti spasi sebelum atau sesudah seluruh gambar tidak masalah. Selain itu, gambar tidak perlu rata ke kiri layar, tetapi harus jelas terlihat.

Inilah n = 10:

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

Inilah n = 5:

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

Dan akhirnya, inilah n = 1(hanya dua dinding terdalam):

 - 

 - 

Konstruksi (untuk kejelasan ekstra)

Area bermain dibagi menjadi dua pasang kuadran seperti:

 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

Kuadran atas / bawah harus bergantian antara dinding horizontal yang diwakili oleh tanda hubung -, dan celah yang diarsir dengan titik-titik .. Kuadran kiri / kanan harus bergantian antara ruang dan dinding vertikal yang diwakili oleh pipa |. Diagonal utama kosong, dan harus selalu diisi dengan spasi.

Pola hujan ukuran nmemiliki 2ndinding, dengan dinding dari kuadran atas / bawah paling dekat dengan pusat dan dinding bergantian antara kuadran saat kita bergerak menjauh dari pusat.

Mencetak gol

Ini adalah kode-golf, sehingga kode dalam byte paling sedikit menang.

Sp3000
sumber
4
Game ini ... Saya tahu apa yang Anda bicarakan. Itu mencuri seperti 40 jam hidup saya sampai saya mengalahkannya. ^^
ThreeFx

Jawaban:

3

CJam, 93 87 78 61 59 byte

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

Mengambil nilai nmelalui STDIN

Beberapa contoh:

1
 - 

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

Ini bisa bermain golf banyak, yang akan saya lakukan besok pagi.

Cobalah online di sini

Pengoptimal
sumber
5

Haskell 150 byte

Saya menyadari itu tidak akan menang, hanya ingin memposting codegolf pertama saya: 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)

Gunakan dengan memuat ke GHCi dan menelepon di q nmana nukurannya.

Beberapa contoh:

*Main> q 1
 - 

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

Seseorang mungkin bisa berbuat lebih baik, saya cukup baru di Haskell.

Joseph Young
sumber
6
Jangan khawatir tentang kemenangan. ;) Menang adalah untuk CJam dan Pyth. Bermain golf dalam bahasa lain adalah tentang mengalahkan pengiriman dalam "kelas berat" yang sama, dan mempelajari beberapa fitur baru yang tidak jelas dari bahasa Anda. Selamat datang di PPCG!
Martin Ender
3

Python, 204 , 198 , 191 byte

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" adalah fungsi utilitas yang menulis "b" dikelilingi oleh tercermin "a", dengan pembatas opsional, (ya parameter lambda dapat memiliki default). "f" bersifat rekursif, menghasilkan sisi dan bagian tengah untuk setiap level "g" adalah fungsi hujan, yang dapat dipanggil dengan integer untuk mengembalikan teks yang diminta.

swstephe
sumber
Saya baru sadar bahwa saya lupa untuk mengizinkan fungsi yang mengembalikan string, yang biasanya saya izinkan (telah mengeditnya di). Anda masih dapat menghemat beberapa karakter dengan menghapus spasi dan meletakkan baris 4, 5 pada satu baris :)
Sp3000
Dengan sedikit evaluasi hubung singkat, Anda dapat memperoleh ini hingga 190 :) tautan
Sp3000
Maaf, saya menurunkan Anda karena kecelakaan. Saya dapat membatalkannya jika Anda mengedit.
nutki
1

Perl 5: 74 byte (73 kode + -p)

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

Mengambil parameter pada input (karakter baris akhir diperlukan untuk fungsi yang tepat):

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

Tidak Disatukan:

                         # 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)
nutki
sumber