*** Krajobrazy ***

28

Cel : Napisz program, który generuje piękne (?) Krajobrazy ASCII i sylwetki na tle nieba!

Twój program ma tylko jedno wejście: ciąg znaków złożony z dowolnej kombinacji / powtórzeń znaków 0123456789abc.

Dla każdego znaku wejściowego wypisz pionową linię złożoną w następujący sposób:

         .
        ..
       ...
      oooo
     ooooo
    OOOOOO
   OOOOOOO
  XXXXXXXX
 XXXXXXXXX
XXXXXXXXXX

0123456789

abcZamiast liter po jednej cyfrze n i narysuj pionową linię nz odpowiednio 1,2 lub 3 otworami (spacjami) na dole.

Przykłady

Budynek Cryslera

Dane wejściowe: 2479742

   .
   .
  ...
  ooo
  ooo
 OOOOO
 OOOOO
XXXXXXX
XXXXXXX
XXXXXXX

Tadż Mahal

Dane wejściowe: 0804023324554233204080

 .                  .
 .                  .
 o                  o
 o        oo        o
 O O     OOOO     O O
 O O  OO OOOO OO  O O
 X X XXXXXXXXXXXX X X
 X X XXXXXXXXXXXX X X
XXXXXXXXXXXXXXXXXXXXXX

Wieża Eiffla

Dane wejściowe: 011a2b3b5c9c9b5b3a2110

      ..
      ..
      ..
      oo
     oooo
     OOOO
    OOOOOO
   XXX  XXX
 XXX      XXX
XXX        XXX

Możesz założyć, że dane wejściowe nie są puste i że są dobrze uformowane.
Dowolny język jest akceptowany, od A + do Z ++ .

To jest golf-golf: wygrywa najkrótszy kod źródłowy .
Jeśli cokolwiek z zasad jest niejasne, możesz zapytać poniżej w komentarzach.

Baw się dobrze i zdobądź setki metrów wysokości w kilka bajtów!

(i nie zapomnij dołączyć swojego ulubionego budynku do swojego rozwiązania)

PS: nie, nie możesz pobierać / uzyskiwać dostępu do danych z Internetu, używać nazwy pliku jako danych i tym podobnych rzeczy. Bądź uczciwy i używaj tylko swoich umiejętności gry w golfa.

Gabriele D'Antona
źródło
Wydaje mi się, że ma 9 lat ...: -?
Gabriele D'Antona
Och, rozumiem: góra jest zdefiniowana jako „c9”, co oznacza: narysuj linię pionową o wysokości 9 i zetrzyj 3 dolne znaki. To dlatego wydaje ci się wysoka 7. Przeczytaj zasady ponownie i powiedz, czy jest w porządku.
Gabriele D'Antona
ok, źle odczytałem specyfikację przesunięcia.
Howard

Odpowiedzi:

5

GolfScript, 69

'XXXOOoo...':s\{.96>{96-.' '*\@>+}{47-<' '10*+10<s\}if}%10/zip-1%n*\;

Niedaleko rozwiązania APL.

Przetestuj online

Zmienność
źródło
5

Rubin, 88 85

Zabawne wyzwanie!

9.downto(0){|h|puts$*[0].gsub(/(\D?)(.)/){'XXXOOoo... '[h<$1.hex-9||$2.hex<h ?-1:h]}}

Pobiera dane z wiersza poleceń, np .:

ruby landscapes.rb 011a2b3b5c9c9b5b3a2110

Wydrukuje:

      ..      
      ..      
      ..      
      oo      
     oooo     
     OOOO     
    OOOOOO    
   XXX  XXX   
 XXX      XXX 
XXX        XXX
Paul Prestidge
źródło
5

Python 2.7 - 186

Prawdopodobnie może być krótszy ...

x=[]
l=iter(raw_input())
a="XXX00oo..."
for i in l:
 try:i=int(i);o=0
 except:o=" abc".index(i);i=int(next(l))
 x.append(" "*o+a[o:i+1]+" "*(9-i))
for i in zip(*x)[::-1]:print''.join(i)

Przykładowy przebieg:

08040233245542332040800000247974200000011a2b3b5c9c9b5b3a2110
                             .              ..
 .                  .        .              ..
 .                  .       ...             ..
 o                  o       ooo             oo
 o        oo        o       ooo            oooo
 0 0     0000     0 0      00000           0000
 0 0  00 0000 00  0 0      00000          000000
 X X XXXXXXXXXXXX X X     XXXXXXX        XXX  XXX
 X X XXXXXXXXXXXX X X     XXXXXXX      XXX      XXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX        XXX

Sydney Harbour Bridge

a1a13443a1a2a3a4a5a6a6a7a7a8a8a8a8a9a9a9a9a9a9a8a8a8a8a7a7a6a6a5a4a4a3a2a13443a1a1
                   ......
               ..............
             ..................
           oooooooooooooooooooooo
          oooooooooooooooooooooooo
   00    000000000000000000000000000    00
  0000  00000000000000000000000000000  0000
  XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  XXXX                                 XXXX

Most Golden Gate / logo Cisco

a2a0a0a4a0a06a0a0a4a0a0a2a0a0a4a0a06a0a0a4a0a0a2



      o           o
      o           o
   0  0  0     0  0  0
   0  0  0     0  0  0
X  X  X  X  X  X  X  X  X
X  X  X  X  X  X  X  X  X
      X           X

Nawiasem mówiąc, świetne pytanie!


źródło
Wielkie zabytki! :)
Gabriele D'Antona
5

C64 BASIC, 276 znaków PETSCII

Moje własne rozwiązanie, grałem w golfa do 276 znaków i 10 linii BASIC V2.0!

0inputa$:dIc$(10):fOi=0to9:rE c$(i):nE:fOr=0to9
1z=1
2c=aS(mI(a$,z,z+1))
3ifc>57tHgO8
4ifc>=57-r tH?c$(9-r);:gO6
5?" ";
6z=z+1:ifz<=len(a$)gO2
7?:nE:eN
8z=z+1:w=aS(mI(a$,z,z+1)):ifw>=57-r aNc<=73-r tH?c$(9-r);:gO6
9?" ";:gO6:dA"x","x","x","o","o","W","W",".",".","."

(skopiuj i wklej w emulatorze, aby zobaczyć wynik).

I wreszcie mój ulubiony pomnik, Most Brookliński :)

wprowadź opis zdjęcia tutaj

Gabriele D'Antona
źródło
5

C, 130 126 znaków

Trochę dawno w porównaniu do konkurencji, ale obwiniam język ...

char*p,b[99];r=10,q;main(o){for(gets(&b);r--;puts(""))
for(p=b;q=*p++;)o=q<60?putchar("XXXOOoo... "[o<r&r<q-47?r:10]),-1:q-97;}

Nie wiem o ulubionym budynku, ale jednym z bardziej rozpoznawalnych tutaj jest Globen , więc tutaj jest to kiepska interpretacja.

% ./a.out <<<24556667777776665542


       ......       
    oooooooooooo    
  oooooooooooooooo  
 OOOOOOOOOOOOOOOOOO 
 OOOOOOOOOOOOOOOOOO 
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
Robaczek świętojański
źródło
Możesz odciąć znak, zmieniając kolejność deklaracji char b[99],*p;tak, aby czytał char*p,b[99];. Również może być krótszy w użyciu putsdo drukowania nowego wiersza.
C0deH4cker
@ C0deH4cker ładne, dzięki! To oszczędza mi cztery znaki.
FireFly,
@ Friol oh, wcale nie miałem tego na myśli, po prostu nie wiem, co uważam za mój ulubiony budynek. : P
FireFly
3

APL ( 69 66)

' XXXOOoo...'[1+⌽⍉⌽↑{z×(z<' abc'⍳⍵)<(1+⍎⍺)≥z←⍳10}/↑2↑¨I⊂⍨⎕D∊⍨I←⌽⍞]

Przykłady:

      „XXXOOoo ...” [1 + ⌽⍉⌽ ↑ {z × (z <'abc'⍳⍵) <(1 + ⍎⍺) ≥z ← ⍳10} / ↑ 2 ↑ ¨I⊂⍨⎕D∊⍨ I ← ⌽⍞]
0804023324554233204080

 . .
 . .
 oo 
 o oo o 
 OO OOOO OO 
 OO OO OOOO OO OO 
 XX XXXXXXXXXXXX XX 
 XX XXXXXXXXXXXX XX 
XXXXXXXXXXXXXXXXXXXXXX

      „XXXOOoo ...” [1 + ⌽⍉⌽ ↑ {z × (z <'abc'⍳⍵) <(1 + ⍎⍺) ≥z ← ⍳10} / ↑ 2 ↑ ¨I⊂⍨⎕D∊⍨ I ← ⌽⍞]
011a2b3b5c9c9b5b3a2110
      ..      
      ..      
      ..      
      oo      
     oooo     
     OOOO     
    OOOOOO    
   XXX XXX   
 XXX XXX 
XXX XXX
marinus
źródło
Nie znam bardzo dobrze APL, ale czy na pewno potrzebujesz miejsca na początku ciągu „XXXOOoo ...”?
Gabriele D'Antona
@friol: tak, służy do wypełnienia „pustej” przestrzeni
marinus
2

PowerShell , 127 bajtów

$r=,''*10
$args|% t*y|%{if($_-in97..99){$b=$_-96}else{,' '*$b+'XXXOOoo...'[$b.."$_"]+,' '*(9-"$_")|%{$r[--$i]+=$_}
$b=$i=0}}
$r

Wypróbuj online!

mazzy
źródło
2

PHP ,131 114 bajtów

for($b=10;$b--;print"
")foreach(str_split($argn)as$a)$c=strpos(' abc',$a)?:!print$a<$b|$b<$c?' ':'XXXOOoo...'[$b];

Wypróbuj online!

$ echo 2479742|php -nF land.php 
   . 
   . 
  ... 
  ooo 
  ooo 
 OOOOO 
 OOOOO 
XXXXXXX 
XXXXXXX 
XXXXXXX 


$ echo 011a2b3b5c9c9b5b3a2110|php -nF land.php 
      .. 
      .. 
      .. 
      oo 
     oooo 
     OOOO 
    OOOOOO 
   XXX  XXX 
 XXX      XXX 
XXX        XXX 


$ echo a2a0a0a4a0a06a0a0a4a0a0a2a0a0a4a0a06a0a0a4a0a0a2|php -nF land.php 



      o           o 
      o           o 
   O  O  O     O  O  O 
   O  O  O     O  O  O 
X  X  X  X  X  X  X  X  X 
X  X  X  X  X  X  X  X  X 
      X           X
Russ G.
źródło
1

Perl 6 , 93 bajtów

{for 9...0 ->\n {say .subst(/(\D)?(.)/,{'XXXOOoo... '.comb[$1>=n>=ord($0//0)-96??n!!10]}):g}}

Blok, który pobiera ciąg i wypisuje na standardowe wyjście.

Wypróbuj online!

bb94
źródło
1

05AB1E (starsza wersja) , 34 bajty

Rvy.ïi"XXXOOoo..."y>£ëðAykÝǝ])ζRí»

Używa starszej wersji 05AB1E, aby zapisać 2 bajty, ponieważ ζdziała również na ciągach zamiast samych list znaków.

Wypróbuj online.

Wyjaśnienie:

R                  # Reverse the (implicit) input-string
 v                 # Loop `y` over each character:
  yi             #  If `y` is a digit:
      "XXXOOoo..." #   Push string "XXXOOoo..."
        y        #   And only leave the first `y`+1 characters as substring
     ë             #  Else (`y` is a letter):
       Ayk         #   Get the index of `y` in the lowercase alphabet
          Ý        #   Create a list in the range [0, alphabet-index]
      ð    ǝ       #   Replace in the string at the top of the stack the characters at
                   #   those indices with a space
 ]                 # Close the if-else statement and loop
  )                # Wrap all strings on the stack into a list
   ζ               # Zip/transpose; swapping rows/columns
    Rí             # Reverse this list, as well as each individual line
      »            # And join the strings by newlines
                   # (after which the result is output implicitly)

Jeśli chodzi o mój ulubiony „budynek”, chodźmy z tym drzewem. ;)

b2b3b4b5b6b7898b7b6b5b4b3b2

       .       
      ...      
     .....     
    ooooooo    
   ooooooooo   
  OOOOOOOOOOO  
 OOOOOOOOOOOOO 
XXXXXXXXXXXXXXX
      XXX      
      XXX      
Kevin Cruijssen
źródło
1

Japt -R , 36 bajtów

óȦnãÒXÌ î"XXXOOoo..."hSpXÎnD)s9Ãz3

Spróbuj

óȦnãÒXÌ î"..."hSpXÎnD)s9Ãz3     :Implicit input of string
ó                                 :Partition at
 È                                :Characters that return true when passed through the following function
  ¦                               :  Test for inequality with
   n                              :  Convert to number
    Ã                             :End function
     £                            :Map each X
      Ò                           :  Bitwise increment
       XÌ                         :  Last character of X
          î                       :  Slice the following to that length
           "..."                  :    Literal string
                h                 :    Replace as many characters as necessary at the start of that string with
                 S                :      Space
                  p               :      Repeat
                   XÎ             :        First character of X
                     n            :        Convert from base
                      D           :        14
                       )          :      End repeat
                        s9        :      Slice off the first 9 characters
                          Ã       :End map
                           z3     :Rotate clockwise by 90 degrees 3 times
                                  :Implicit output, joined by newlines
Kudłaty
źródło