*** paesaggi ***


28

Obiettivo : scrivere un programma che generi bellissimi paesaggi (?) In stile ASCII e skyline!

Il tuo programma ha un solo input: una stringa composta da qualsiasi combinazione / ripetizione dei caratteri 0123456789abc.

Per ogni carattere di input, emettere una linea verticale composta come segue:

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

0123456789

Le lettere abcinvece sono seguite da un numero n e disegnano la linea verticale n con rispettivamente 1,2 o 3 fori (spazi) nella parte inferiore.

Esempi

L'edificio Crysler

Ingresso: 2479742

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

Il Taj Mahal

Ingresso: 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

La Torre Eiffel

Ingresso: 011a2b3b5c9c9b5b3a2110

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

Puoi supporre che l'input non sia vuoto e che sia ben formato.
È accettata qualsiasi lingua, da A + a Z ++ .

Questo è code-golf: vince il codice sorgente più corto .
Se qualcosa nelle regole non è chiaro, non esitare a chiedere di seguito nei commenti.

Divertiti e cattura strutture alte centinaia di metri in pochi byte!

(e non dimenticare di includere il tuo edificio preferito nella tua soluzione)

PS: no, non è possibile scaricare / accedere ai dati da Internet, utilizzare il nome del file come dati e tutto il resto. Sii onesto e usa solo le tue abilità nel code-golf.


Sembra alto 9 per me ...: -?
Gabriele D'Antona,

Oh, lo vedo: la parte superiore è definita come "c9", ciò significa: traccia una linea verticale con altezza 9 e radere i 3 caratteri inferiori. Ecco perché ti sembra alto 7. Leggi di nuovo le regole e dimmi se va bene.
Gabriele D'Antona,

ok, ho letto male la tua specifica dell'offset.
Howard,

Risposte:


5

GolfScript, 69

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

Non lontano dalla soluzione APL.

Test online


5

Rubino, 88 85

Sfida divertente!

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

Riceve input dalla riga di comando, ad esempio:

ruby landscapes.rb 011a2b3b5c9c9b5b3a2110

Stampa:

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

5

Python 2.7 - 186

Probabilmente può essere più breve ...

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)

Esecuzione di esempio:

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

Golden gate bridge / 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

Ottima domanda a proposito!


Grandi monumenti! :)
Gabriele D'Antona il

5

C64 BASIC, 276 caratteri PETSCII

La mia soluzione, fino a 276 caratteri e 10 linee di 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",".",".","."

(copia e incolla in un emulatore per vedere il risultato).

E infine, il mio monumento preferito, il Ponte di Brooklyn :)

inserisci qui la descrizione dell'immagine


5

C, 130 126 caratteri

Abbastanza a lungo rispetto alla concorrenza, ma ho la colpa della lingua ...

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;}

Non conosco l' edificio preferito , ma uno dei più riconoscibili qui è Globen , quindi ecco una cattiva interpretazione di esso.

% ./a.out <<<24556667777776665542


       ......       
    oooooooooooo    
  oooooooooooooooo  
 OOOOOOOOOOOOOOOOOO 
 OOOOOOOOOOOOOOOOOO 
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX

Puoi tagliare un personaggio cambiando l'ordine delle dichiarazioni in char b[99],*p;modo che legga char*p,b[99];. Inoltre potrebbe essere più breve da utilizzare putsper la stampa della nuova riga.
C0deH4cker,

@ C0deH4cker bello, grazie! Questo mi fa risparmiare quattro caratteri.
FireFly

@friol oh, non intendevo affatto così, è solo che non so cosa considererei il mio edificio preferito. : P
FireFly,

3

APL ( 69 66)

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

Esempi:

      '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

Non conosco molto bene l'APL, ma sei sicuro di aver bisogno dello spazio all'inizio della stringa 'XXXOOoo ...'?
Gabriele D'Antona,

@Friol: sì, è usato per riempire lo spazio "vuoto"
Marin

2

PowerShell , 127 byte

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

Provalo online!



2

PHP ,131 114 byte

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

Provalo 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

1

Perl 6 , 93 byte

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

Un blocco che contiene la stringa e stampa su stdout.

Provalo online!


1

05AB1E (legacy) , 34 byte

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

Utilizza la versione legacy di 05AB1E per salvare 2 byte, poiché ζfunziona anche su stringhe anziché su semplici elenchi di caratteri.

Provalo online.

Spiegazione:

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)

Per quanto riguarda il mio "edificio" preferito, andiamo con questo albero. ;)

b2b3b4b5b6b7898b7b6b5b4b3b2

       .       
      ...      
     .....     
    ooooooo    
   ooooooooo   
  OOOOOOOOOOO  
 OOOOOOOOOOOOO 
XXXXXXXXXXXXXXX
      XXX      
      XXX      

1

Japt -R , 36 byte

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

Provalo

óȦ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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.