***風景***


28

目的:美しい(?)ASCIIアートの風景とスカイラインを生成するプログラムを作成します。

プログラムの入力は1つだけ0123456789abcです。charsの任意の組み合わせ/繰り返しで構成される文字列です。

入力文字ごとに、次のように構成された垂直線を出力します。

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

0123456789

abc代わりに、文字の後に1つの数字nが続き、下部にそれぞれ1,2または3つの穴(スペース)を持つ垂直線nを描画します。

クライスラービル

入力:2479742

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

タージマハル

入力: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

エッフェル塔

入力:011a2b3b5c9c9b5b3a2110

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

入力が空ではなく、整形式であると想定できます。A +からZ ++まで
、あらゆる言語が受け入れられます

これはコードゴルフです。最短のソースコードが勝ちます。
ルールの内容が明確でない場合は、コメント欄でお気軽にお問い合わせください。

楽しんで、数百メートルの高さの構造物を数バイトでキャプチャしてください!

(また、お気に入りの建物をソリューションに含めることを忘れないでください)

PS:いいえ、インターネットからデータをダウンロード/アクセスすることはできません。ファイル名をデータなどとして使用してください。公平を期し、コードゴルフのスキルのみを使用してください。


私には背の高い9のようです...:-?
ガブリエレダントーナ14年

ああ、私はそれを見ます:上部は「c9」として定義されています。つまり、高さ9の垂直線を描画し、下部の3つの文字を削ります。それはあなたに背の高い7のようです。ルールをもう一度読み、問題ないか教えてください。
ガブリエーレダントーナ14年

OK、オフセットの仕様を読み間違えました。
ハワード14年

回答:



5

ルビー、 88 85

楽しいチャレンジ!

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

コマンドラインで入力を受け取ります。例:

ruby landscapes.rb 011a2b3b5c9c9b5b3a2110

印刷されます:

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

5

Python 2.7-186

おそらく短くすることができます...

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)

サンプル実行:

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

シドニーハーバーブリッジ

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

ゴールデンゲートブリッジ/ 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

ところで素晴らしい質問です!


素晴らしいモニュメント!:)
ガブリエレダントーナ14年

5

C64 BASIC、276 PETSCII文字

私自身の解決策は、276文字と10行の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",".",".","."

(エミュレータでコピーして貼り付けて結果を確認します)。

そして最後に、私のお気に入りの記念碑、ブルックリン橋:)

ここに画像の説明を入力してください


5

C、130 126文字

競争に比べてやや長いが、私は言語を責める...

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

好きな建物については知りませんが、この辺りで最も有名建物の1つはGlobenです。

% ./a.out <<<24556667777776665542


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

の宣言順序を切り替えることで、文字を切り落とすことができchar b[99],*p;ますchar*p,b[99];。またputs、改行の印刷に使用する方が短い場合があります。
C0deH4cker 14年

@ C0deH4ckerいいね、ありがとう!これで4文字節約できます。
ホタル14年

@friolああ、私はそのようなことをまったく意味していませんでした、それは私が自分のお気に入りの建物と考えるものを知らないということです。:P
ホタル14年

3

APL(69 66)

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

例:

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

 。。
 。。
 ああ 
 おおおおおお 
 OO OOOO OO 
 OO OO OOOO OO OO 
 XX XXXXXXXXXXXX XX 
 XX XXXXXXXXXXXX XX 
XXXXXXXXXXXXXXXXXXXXXXXXX

      'XXXOOoo ...' [1 +⌽⍉⌽↑{z×(z <'abc'⍳⍵)<(1 +⍎⍺)≥z←⍳10} /↑2↑¨I⊂⍨⎕D∊⍨ I←⌽⍞]
011a2b3b5c9c9b5b3a2110
      ..      
      ..      
      ..      
      ああ      
     うーん     
     OOOO     
    OOOOOO    
   XXX XXX   
 XXX XXX 
XXX XXX

APLはよくわかりませんが、 'XXXOOoo ...'文字列の先頭にスペースが必要ですか?
ガブリエレダントーナ14年

@friol:はい、それは「空の」スペースを埋めるために使用されます
マリナス14年



2

PHP131 114バイト

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

オンラインでお試しください!

$ 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

05AB1E(レガシー)、34 バイト

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

ζ文字のリストだけでなく文字列でも機能するため、05AB1Eのレガシーバージョンを使用して2バイトを節約します。

オンラインでお試しください。

説明:

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)

私のお気に入りの「建物」については、このツリーで行きましょう。;)

b2b3b4b5b6b7898b7b6b5b4b3b2

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

1

Japt -R、36バイト

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

それを試してみてください

óȦ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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.