*** Landschaften ***

28

Ziel : Schreiben Sie ein Programm, das schöne (?) ASCII-Kunstlandschaften und -skyline erzeugt!

Ihr Programm hat nur eine Eingabe: eine Zeichenfolge, die aus einer beliebigen Kombination / Wiederholung der Zeichen besteht 0123456789abc.

Geben Sie für jedes eingegebene Zeichen eine vertikale Linie aus, die wie folgt aufgebaut ist:

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

0123456789

Auf Buchstaben abcfolgt eine Zahl n, und die vertikale Linie n wird mit 1,2 bzw. 3 Löchern (Leerzeichen) unten gezeichnet.

Beispiele

Das Crysler-Gebäude

Eingabe: 2479742

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

Der Taj Mahal

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

Der Eiffelturm

Eingabe: 011a2b3b5c9c9b5b3a2110

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

Sie können davon ausgehen, dass die Eingabe nicht leer und wohlgeformt ist.
Jede Sprache von A + bis Z ++ wird akzeptiert .

Das ist Code-Golf: Der kürzeste Quellcode gewinnt .
Wenn irgendetwas in den Regeln nicht klar ist, können Sie unten in den Kommentaren nachfragen.

Viel Spaß und erfassen Sie hundert Meter hohe Strukturen in wenigen Bytes!

(und vergessen Sie nicht, Ihr Lieblingsgebäude in Ihre Lösung aufzunehmen)

PS: Nein, Sie können keine Daten aus dem Internet herunterladen / darauf zugreifen, Ihren Dateinamen als Daten verwenden und all das Zeug. Seien Sie fair und setzen Sie nur Ihre Code-Golf-Fähigkeiten ein.

Gabriele D'Antona
quelle
Scheint mir groß 9 ...: -?
Gabriele D'Antona
Oh, ich verstehe: Die Oberseite ist als "c9" definiert, das heißt: Zeichne eine vertikale Linie mit der Höhe 9 und rasiere die 3 unteren Zeichen ab. Das ist der Grund, warum es für Sie eine große Zahl von 7 ist. Lesen Sie die Regeln noch einmal und sagen Sie mir, ob es in Ordnung ist.
Gabriele D'Antona
ok, ich habe deine angabe zum offset falsch verstanden.
Howard

Antworten:

5

GolfScript, 69

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

Nicht weit weg von der APL-Lösung.

Online testen

Flüchtigkeit
quelle
5

Rubin, 88 85

Eine lustige Herausforderung!

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

Übernimmt Eingaben auf der Kommandozeile, zB:

ruby landscapes.rb 011a2b3b5c9c9b5b3a2110

Druckt aus:

      ..      
      ..      
      ..      
      oo      
     oooo     
     OOOO     
    OOOOOO    
   XXX  XXX   
 XXX      XXX 
XXX        XXX
Paul Prestidge
quelle
5

Python 2.7 - 186

Kann wohl kürzer sein ...

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)

Probelauf:

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 Hafenbrücke

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

Golden gate bridge / Cisco-Logo

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

Tolle Frage übrigens!


quelle
Großartige Denkmäler! :)
Gabriele D'Antona
5

C64 BASIC, 276 PETSCII-Zeichen

Meine eigene Lösung mit 276 Zeichen und 10 Zeilen 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",".",".","."

(Kopieren und Einfügen in einen Emulator, um das Ergebnis zu sehen).

Und schließlich mein Lieblingsdenkmal, die Brooklyn Bridge :)

Bildbeschreibung hier eingeben

Gabriele D'Antona
quelle
5

C 130 126 Zeichen

Ein bisschen lang im Vergleich zur Konkurrenz, aber ich beschuldige die Sprache ...

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

Ich weiß nichts über Lieblingsgebäude , aber eines der bekannteren hier ist Globen , also hier ist eine schlechte Wiedergabe davon.

% ./a.out <<<24556667777776665542


       ......       
    oooooooooooo    
  oooooooooooooooo  
 OOOOOOOOOOOOOOOOOO 
 OOOOOOOOOOOOOOOOOO 
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
FireFly
quelle
Sie können ein Zeichen abhacken, indem Sie die Deklarationsreihenfolge char b[99],*p;so ändern, dass es lautet char*p,b[99];. Es kann auch kürzer sein, um putsdie neue Zeile zu drucken.
C0deH4cker
@ C0deH4cker nett, danke! Das spart mir vier Zeichen.
FireFly
@friol oh, das habe ich überhaupt nicht so gemeint, ich weiß nur nicht, was ich für mein Lieblingsgebäude halten würde. : P
FireFly
3

APL ( 69 66)

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

Beispiele:

      'XXXOOoo ...' [1 + ⌽⍉⌽ ↑ {z × (z <'abc'⍳⍵) <(1 + ⍎⍺) ≥z ← ⍳10} / ↑ 2 ↑ ¨I⊂⍨⎕D∊⍨ Ich ← ⌽⍞]
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∊⍨ Ich ← ⌽⍞]
011a2b3b5c9c9b5b3a2110
      ..      
      ..      
      ..      
      oo      
     oooo     
     OOOO     
    OOOOOO    
   XXX XXX   
 XXX XXX 
XXX XXX
Marinus
quelle
Ich kenne APL nicht sehr gut, aber sind Sie sicher, dass Sie das Leerzeichen am Anfang der Zeichenfolge "XXXOOoo ..." benötigen?
Gabriele D'Antona
@friol: ja, es wird verwendet, um den "leeren" Raum zu füllen
Marinus
2

PHP ,131 114 Bytes

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

Probieren Sie es 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
quelle
1

Perl 6 , 93 Bytes

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

Ein Block, der die Zeichenfolge aufnimmt und nach stdout druckt.

Probieren Sie es online!

bb94
quelle
1

05AB1E (Legacy) , 34 Byte

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

Verwendet die Legacy-Version von 05AB1E, um 2 Byte zu sparen, da ζauch Zeichenfolgen statt nur Zeichenlisten verarbeitet werden .

Probieren Sie es online aus.

Erläuterung:

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)

Was mein Lieblingsgebäude angeht, lassen Sie uns mit diesem Baum gehen. ;)

b2b3b4b5b6b7898b7b6b5b4b3b2

       .       
      ...      
     .....     
    ooooooo    
   ooooooooo   
  OOOOOOOOOOO  
 OOOOOOOOOOOOO 
XXXXXXXXXXXXXXX
      XXX      
      XXX      
Kevin Cruijssen
quelle
1

Japt -R , 36 Bytes

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

Versuch es

óȦ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
Zottelig
quelle