***Paysages***

28

Objectif : écrire un programme qui génère de beaux (?) Paysages et horizons d'art ASCII!

Votre programme n'a qu'une seule entrée: une chaîne composée de n'importe quelle combinaison / répétition des caractères 0123456789abc.

Pour chaque caractère saisi, sortez une ligne verticale composée comme suit:

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

0123456789

Les lettres abcsont à la place suivies d'un chiffre n et tracent la ligne verticale n avec respectivement 1,2 ou 3 trous (espaces) en bas.

Exemples

Le bâtiment Crysler

Entrée: 2479742

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

Le Taj Mahal

Entrée: 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 tour Eiffel

Entrée: 011a2b3b5c9c9b5b3a2110

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

Vous pouvez supposer que l'entrée n'est pas vide et qu'elle est bien formée.
Toutes les langues sont acceptées, de A + à Z ++ .

C'est le code-golf: le code source le plus court l'emporte .
Si quelque chose dans les règles n'est pas clair, n'hésitez pas à demander ci-dessous dans les commentaires.

Amusez-vous et capturez des structures de centaines de mètres de haut en quelques octets!

(et n'oubliez pas d'inclure votre bâtiment préféré dans votre solution)

PS: non, vous ne pouvez pas télécharger / accéder aux données depuis Internet, utilisez votre nom de fichier comme données et tout ça. Soyez juste et utilisez uniquement vos compétences de golf de code.

Gabriele D'Antona
la source
Semble grand 9 pour moi ...: -?
Gabriele D'Antona
Oh, je le vois: le haut est défini comme "c9", cela signifie: tracer une ligne verticale avec une hauteur de 9 et raser les 3 caractères du bas. C'est pourquoi il vous semble grand 7. Relisez les règles et dites-moi si ça va.
Gabriele D'Antona
ok, j'ai mal lu votre spécification de l'offset.
Howard

Réponses:

5

GolfScript, 69

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

Non loin de la solution APL.

Testez en ligne

Volatilité
la source
5

Rubis, 88 85

Défi amusant!

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

Prend des informations sur la ligne de commande, par exemple:

ruby landscapes.rb 011a2b3b5c9c9b5b3a2110

Imprime:

      ..      
      ..      
      ..      
      oo      
     oooo     
     OOOO     
    OOOOOO    
   XXX  XXX   
 XXX      XXX 
XXX        XXX
Paul Prestidge
la source
5

Python 2.7 - 186

Peut probablement être plus court ...

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)

Exemple d'exécution:

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

Pont du port de Sydney

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

Pont du 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

Grande question au fait!


la source
Grands monuments! :)
Gabriele D'Antona
5

C64 BASIC, 276 caractères PETSCII

Ma propre solution, avec 276 caractères et 10 lignes de 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",".",".","."

(copiez et collez dans un émulateur pour voir le résultat).

Et enfin, mon monument préféré, le pont de Brooklyn :)

entrez la description de l'image ici

Gabriele D'Antona
la source
5

C, 130 126 caractères

Un peu long par rapport à la concurrence, mais je blâme la langue ...

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

Je ne connais pas le bâtiment préféré , mais l'un des plus reconnaissables ici est Globen , alors voici une mauvaise interprétation de celui-ci.

% ./a.out <<<24556667777776665542


       ......       
    oooooooooooo    
  oooooooooooooooo  
 OOOOOOOOOOOOOOOOOO 
 OOOOOOOOOOOOOOOOOO 
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
Luciole
la source
Vous pouvez couper un caractère en changeant l'ordre de déclaration de char b[99],*p;sorte qu'il soit lu char*p,b[99];. Il peut également être plus court à utiliser putspour imprimer la nouvelle ligne.
C0deH4cker
@ C0deH4cker sympa, merci! Cela me sauve quatre caractères.
FireFly
@friol oh, je ne le pensais pas du tout comme ça, c'est juste que je ne sais pas ce que je considérerais comme mon bâtiment préféré. : P
FireFly
3

APL ( 69 66)

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

Exemples:

      '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
la source
Je ne connais pas très bien APL, mais êtes-vous sûr d'avoir besoin de l'espace au début de la chaîne 'XXXOOoo ...'?
Gabriele D'Antona
@friol: oui, il est utilisé pour remplir l'espace "vide"
marinus
2

Toile , 35 33 octets

±{⌐╷≡?┤╵“`Fc|C!‟m]c96- ×11╋╋}})⤢⇵

Essayez-le ici!

dzaima
la source
2

PHP ,131 114 octets

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

Essayez-le en ligne!

$ 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
la source
1

Perl 6 , 93 octets

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

Un bloc qui prend la chaîne et s'imprime sur stdout.

Essayez-le en ligne!

bb94
la source
1

05AB1E (hérité) , 34 octets

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

Utilise la version héritée de 05AB1E pour économiser 2 octets, car ζfonctionne également sur des chaînes au lieu de simplement des listes de caractères.

Essayez-le en ligne.

Explication:

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)

Quant à mon «bâtiment» préféré, allons-y avec cet arbre. ;)

b2b3b4b5b6b7898b7b6b5b4b3b2

       .       
      ...      
     .....     
    ooooooo    
   ooooooooo   
  OOOOOOOOOOO  
 OOOOOOOOOOOOO 
XXXXXXXXXXXXXXX
      XXX      
      XXX      
Kevin Cruijssen
la source
1

Japt -R , 36 octets

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

Essayez-le

óȦ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
Hirsute
la source