スーパースクエアレイン


11

Scream™ウィンターセールが始まり、あなたは自分に強烈なミニマリストアクションゲーム、Super Squareを手に入れました。それをプレイすると、あなたはそのゲームがとてつもなく難しいか、あなたがそれが本当に下手だということに気づきます。特に、毎回あなたを得るように思われるこの「雨」パターンがあります...

ここに画像の説明を入力してください

欲求不満のあなたは、自分自身に別の挑戦をすることにします。ASCIIアートで雨のパターンを描いてください!

入力

入力は、パターンのサイズを示す単一の正の整数で、nSTDINまたは関数の引数を介して指定されます。

出力

出力は、指定されたサイズの雨パターンで、文字列として返されるか、STDOUTを介して出力されます。画像全体の前後の前後の空白は問題ありません。さらに、画像は画面の左に面一である必要はありませんが、はっきりと識別できる必要があります。

ここにありn = 10ます:

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

ここにありn = 5ます:

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

そして最後に、ここにありますn = 1(最も内側の2つの壁のみ)。

 - 

 - 

構造(わかりやすくするため)

プレイエリアは、次のように2つのペアの象限に分割されます。

 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

上下の四分円は、ハイフン-で表される水平な壁と、ドットでシェーディングされたギャップの間を交互に繰り返す必要があり.ます。左/右の四分円は、スペースとパイプで表される垂直壁の間で交互になります|。主な対角線は空であり、常にスペースで埋める必要があります。

雨の大きさのパターンにn2n壁があり、中心に最も近い上/下象限の壁と、中心から遠ざかるにつれて壁が象限と交互になります。

得点

これはコードゴルフなので、最小バイトのコードが優先されます。


4
このゲーム...私はあなたが話していることを知っています。それは私がそれを打つまで私の人生の40時間のように盗んだ。^^
ThreeFx 14

回答:


3

CJam、93 87 78 61 59バイト

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

nSTDINを介して値を取得します

いくつかの例:

1
 - 

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

これはたくさんのゴルフができますが、明日最初にやるつもりです。

こちらからオンラインでお試しください


5

Haskell 150バイト

私はそれが勝つつもりはないことを理解し、ちょうど私の最初のcodegolfを投稿したかったです: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にロードして、サイズq nがwhere を呼び出すことで使用しnます。

いくつかの例:

*Main> q 1
 - 

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

誰かがおそらくもっと良くできるでしょう、私はHaskellにかなり新しいです。


6
勝つことを心配しないでください。;)CJamとPythが勝ちです。他の言語でゴルフをすることは、同じ「重量クラス」で提出物を破って、あなたの言語のいくつかの新しいあいまいな機能を学ぶことです。PPCGへようこそ!
マーティンエンダー14

3

パイソン、204198、191のバイト

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」は、オプションの区切り文字を使用して、反映された「a」に囲まれた「b」を書き込むユーティリティ関数です(はい、ラムダパラメータにデフォルトを設定できます)。「f」は再帰的で、各レベルの側面と中間部分を生成します。「g」はレイン関数です。これは整数で呼び出して、要求されたテキストを返すことができます。


文字列を返す関数を許可するのを忘れてしまったことに気づきました。空白を削除し、4行目、5行目を1行に入れることで、いくつかの文字を節約できます:)
Sp3000

少しの短絡評価により、これを190まで下げることができます:) リンク
Sp3000 14

申し訳ありませんが、私はあなたを偶然に落胆させました。編集したらキャンセルできます。
nutki

1

Perl 5:74バイト(73コード+ -p

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

入力のパラメーターを取ります(適切な機能に必要な行末文字):

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

ゴルフをしていない:

                         # 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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.