Super Square Rain

11

Rozpoczęła się Zimowa Wyprzedaż Scream ™, a ty właśnie kupiłeś sobie intensywną minimalistyczną grę akcji, Super Square . Podczas grania dochodzisz do wniosku, że albo gra jest po prostu absurdalnie trudna, albo po prostu naprawdę w niej źle. W szczególności jest ten wzór „deszczu”, który wydaje się za każdym razem ...

wprowadź opis zdjęcia tutaj

Sfrustrowany decydujesz się na inne wyzwanie: narysuj wzór deszczu w sztuce ASCII!

Wejście

Dane wejściowe to pojedyncza dodatnia liczba całkowita wskazująca rozmiar wzorca n, podana przez STDIN lub argument funkcji.

Wynik

Wyjście to wzór deszczu o określonym rozmiarze, zwrócony jako ciąg lub wydrukowany za pomocą STDOUT. Wiodące lub końcowe białe znaki przed lub po całym obrazie są w porządku. Ponadto obraz nie musi znajdować się po lewej stronie ekranu, ale musi być wyraźnie widoczny.

Oto n = 10:

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

Oto n = 5:

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

I na koniec oto n = 1(tylko dwie najbardziej wewnętrzne ściany):

 - 

 - 

Konstrukcja (dla dodatkowej przejrzystości)

Obszar gry jest podzielony na dwie pary takich ćwiartek:

 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

Górne / dolne ćwiartki powinny się na przemian przechodzić między poziomymi ścianami reprezentowanymi przez łączniki -, a odstępami cieniowanymi kropkami .. Lewa / prawa ćwiartka powinny się na przemian przechodzić między przestrzeniami i pionowymi ścianami reprezentowanymi przez rury |. Główne przekątne są puste i zawsze powinny być wypełnione spacjami.

Wzór wielkości deszczu nma 2nściany, przy czym ściany z górnej / dolnej ćwiartki najbliżej środka i ściany naprzemiennie między ćwiartkami, gdy oddalamy się od środka.

Punktacja

To jest golf golfowy, więc kod w najmniejszej liczbie bajtów wygrywa.

Sp3000
źródło
4
Ta gra ... Wiem o czym mówisz. Ukradł mi około 40 godzin życia, dopóki go nie pokonałem. ^^
ThreeFx

Odpowiedzi:

3

CJam, 93 87 78 61 59 bajtów

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

Przyjmuje wartość nprzez STDIN

Kilka przykładów:

1
 - 

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

Można dużo grać w golfa, co zrobię jutro.

Wypróbuj online tutaj

Optymalizator
źródło
5

Haskell 150 bajtów

Zdaję sobie sprawę, że to nie wygra, chciałem tylko napisać mojego pierwszego codegolfa: 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)

Użyj, ładując do GHCi i sprawdzając, q ngdzie njest rozmiar.

Kilka przykładów:

*Main> q 1
 - 

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

Ktoś może zrobić lepiej, jestem dość nowy w Haskell.

Joseph Young
źródło
6
Nie martw się o wygraną. ;) Zwycięstwo dotyczy CJam i Pyth. Gra w golfa w innych językach polega na pokonaniu zgłoszeń w tej samej „klasie wagowej” i nauczeniu się nowych, niejasnych funkcji twojego języka. Witamy w PPCG!
Martin Ender
3

Python, 204 , 198 , 191 bajtów

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” to funkcja narzędzia, która zapisuje „b” w otoczeniu odzwierciedlonego „a”, z opcjonalnym ogranicznikiem (tak, parametry lambda mogą mieć wartości domyślne). „f” jest rekurencyjne, generując boki i środkowe części dla każdego poziomu „g” to funkcja deszczu, którą można wywołać za pomocą liczby całkowitej w celu zwrócenia żądanego tekstu.

swstephe
źródło
Właśnie zdałem sobie sprawę, że zapomniałem zezwolić na funkcje, które zwracają łańcuchy, na co zwykle zezwalam (edytowałem to w). Nadal możesz zaoszczędzić na kilku znakach, usuwając białe znaki i umieszczając linie 4, 5 w jednym wierszu :)
Sp3000
Przy odrobinie oceny zwarcia możesz sprowadzić to do 190 :) link
Sp3000
Przepraszam, przegłosowałem cię przez przypadek. Mogę to anulować, jeśli edytujesz.
nutki
1

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

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

Pobiera parametr na wejściu (znak końca linii wymagany do poprawnego działania):

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

Nie golfowany:

                         # 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
źródło