ซุปเปอร์สแควร์เรน


11

ขาย Scream ™ฤดูหนาวอยู่และคุณเพียงแค่จับตัวเองเป็นเกมการกระทำที่เรียบง่ายที่รุนแรงซูเปอร์สแควร์ เมื่อเล่นมันคุณมาตระหนักว่าทั้งเกมเพียงอย่างหนักขันหรือคุณเพียงแค่มันไม่ดีที่มัน โดยเฉพาะอย่างยิ่งมีรูปแบบ "ฝน"ที่ดูเหมือนจะให้คุณทุกครั้ง ...

ป้อนคำอธิบายรูปภาพที่นี่

ท้อแท้คุณตัดสินใจที่จะให้ความท้าทายที่แตกต่าง: วาดลวดลายฝนในงานศิลปะ ASCII!

อินพุต

อินพุตเป็นจำนวนเต็มบวกเดียวที่ระบุขนาดของรูปแบบที่nกำหนดผ่าน STDIN หรืออาร์กิวเมนต์ของฟังก์ชัน

เอาท์พุต

เอาต์พุตเป็นรูปแบบฝนที่ขนาดที่ระบุส่งคืนเป็นสตริงหรือพิมพ์ผ่าน STDOUT นำหน้าหรือตามช่องว่างก่อนหรือหลังภาพทั้งหมดก็โอเค นอกจากนี้รูปภาพไม่จำเป็นต้องลบออกทางด้านซ้ายของหน้าจอ แต่ต้องมองเห็นได้ชัดเจน

ที่นี่n = 10:

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

ที่นี่n = 5:

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

และในที่สุดนี่คือn = 1(เพียงผนังสองด้านในสุด):

 - 

 - 

การก่อสร้าง (เพื่อความชัดเจนเป็นพิเศษ)

พื้นที่เล่นแบ่งออกเป็นสองควอเดอร์ดังนี้:

 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

ด้านบน / แนวทางที่ต่ำกว่าควรจะสลับกันระหว่างผนังแนวนอนแสดงโดยยัติภังค์และช่องว่างที่มีจุดสีเทา- .ซ้าย / แนวทางที่เหมาะสมควรจะสลับกันระหว่างช่องว่างและผนังแนวตั้งตัวแทนจากท่อ |เส้นทแยงมุมหลักว่างเปล่าและควรเติมด้วยช่องว่างเสมอ

รูปแบบขนาดของฝนnมี2nผนังโดยผนังจากจตุภาคบน / ล่างใกล้กับศูนย์กลางและผนังสลับกันระหว่างจตุภาคในขณะที่เราย้ายออกจากศูนย์กลาง

เกณฑ์การให้คะแนน

นี่คือโค้ดกอล์ฟดังนั้นโค้ดในจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ


4
เกมนี้ ... ฉันรู้ว่าคุณกำลังพูดถึงอะไร มันขโมยมาได้ 40 ชั่วโมงในชีวิตของฉันจนกว่าฉันจะชนะ ^^
ThreeFx

คำตอบ:


3

CJam, 93 87 78 61 59 ไบต์

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

รับค่าnผ่านทาง STDIN

ตัวอย่างไม่กี่:

1
 - 

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

นี้สามารถเล่นกอล์ฟได้มากซึ่งฉันจะทำสิ่งแรกในวันพรุ่งนี้

ลองออนไลน์ได้ที่นี่


5

Haskell 150 ไบต์

ฉันรู้ว่ามันจะไม่ชนะ แต่ต้องการโพสต์ครั้งแรกของฉัน: 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ที่nขนาด

ตัวอย่างบางส่วน:

*Main> q 1
 - 

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

บางคนอาจทำได้ดีกว่านี้ฉันค่อนข้างใหม่กับ Haskell


6
ไม่ต้องกังวลกับการชนะ ;) การชนะคือสำหรับ CJam และ Pyth การเล่นกอล์ฟในภาษาอื่น ๆ เกี่ยวกับการตีการส่งในระดับน้ำหนักเดียวกันและเรียนรู้คุณสมบัติที่ไม่ชัดเจนของภาษาของคุณ ยินดีต้อนรับสู่ PPCG!
Martin Ender

3

Python, 204 , 198 , 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" เป็นฟังก์ชั่นยูทิลิตี้ที่เขียน "b" ล้อมรอบด้วยการสะท้อน "a" ด้วยตัวคั่นเพิ่มเติม (พารามิเตอร์แลมบ์ดาใช่สามารถมีค่าเริ่มต้นได้) "f" เป็นแบบเรียกซ้ำการสร้างด้านข้างและส่วนกลางสำหรับแต่ละระดับ "g" คือฟังก์ชั่นฝนซึ่งสามารถเรียกได้ด้วยจำนวนเต็มเพื่อส่งคืนข้อความที่ร้องขอ


ฉันเพิ่งรู้ว่าฉันลืมอนุญาตฟังก์ชั่นที่ส่งคืนสตริงซึ่งฉันมักจะอนุญาต (มีการแก้ไขใน) คุณยังสามารถบันทึกในไม่กี่ตัวอักษรโดยการลบช่องว่างและวางสาย 4, 5 ในหนึ่งบรรทัด :)
SP3000

ด้วยการประเมินผลการลัดวงจรเล็กน้อยคุณสามารถลงลิงค์
Sp3000

ขออภัยฉันลงคะแนนคุณโดยอุบัติเหตุ ฉันสามารถยกเลิกได้หากคุณแก้ไข
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"
 ----- 
  ...  
 | - | 
 |   | 
 | - | 
  ...  
 ----- 

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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.