*** 풍경 ***


28

목표 : 아름다운 (?) ASCII 예술 풍경과 스카이 라인을 생성하는 프로그램을 작성하십시오!

당신의 프로그램은 단 하나의 입력을 가지고 있습니다 : 문자의 조합 / 반복으로 구성된 문자열 0123456789abc.

각 입력 문자에 대해 다음과 같이 구성된 세로선을 출력하십시오.

         .
        ..
       ...
      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 ++
까지 모든 언어가 허용 됩니다.

이것은 가장 짧은 소스 코드 입니다.
규칙의 내용이 명확하지 않은 경우 아래 의견에 자유롭게 문의하십시오.

몇 바이트만으로도 100 미터 높이의 구조물을 즐기십시오!

(그리고 솔루션에 좋아하는 건물을 포함시키는 것을 잊지 마십시오)

추신 : 아니오, 인터넷에서 데이터를 다운로드 / 액세스 할 수 없으며 파일 이름을 데이터 및 그 밖의 모든 것으로 사용하십시오. 공정하고 코드 골프 기술 만 사용하십시오.


나에게 키가 큰 것 같다 ... :-?
Gabriele D' Antona

오, 나는 그것을 본다 : 상단은 "c9"로 정의된다. 즉, 높이 9의 수직선을 그리고 3 개의 하단 문자를 제거한다. 이것이 7 세 이상인 이유입니다. 규칙을 다시 읽고 괜찮다면 알려주십시오.
Gabriele D' Antona

좋아, 오프셋 사양을 잘못 읽었습니다.
Howard

답변:


5

골프 스크립트, 69

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

APL 솔루션에서 멀지 않은 곳에 있습니다.

온라인 테스트


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

파이썬 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

그런데 좋은 질문입니다!


위대한 기념물! :)
Gabriele D' Antona

5

C64 기본, 276 PETSCII 문자

내 자신의 솔루션은 276 자로 10 줄의 기본 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 문자

Kinda는 경쟁에 비해 오랫동안 비교했지만 언어를 비난합니다 ...

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

나는 가장 좋아하는 건물 에 대해 잘 모르지만 여기에서 가장 잘 알려진 건물 중 하나는 Globen 이므로 여기에 대한 나쁜 표현이 있습니다.

% ./a.out <<<24556667777776665542


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

당신의 선언 순서로 전환하여 문자를 잘라 수 char b[99],*p;는 읽는 정도 char*p,b[99];. 또한 puts개행 인쇄 에 사용 하는 것이 더 짧을 수도 있습니다 .
C0deH4cker 2016 년

@ C0deH4cker 감사합니다! 그것은 네 개의 문자를 저장합니다.
FireFly

@friol 아, 전혀 그런 의미는 아니 었습니다. 내가 가장 좋아하는 건물이라고 생각하는 것을 몰랐습니다. : P
FireFly

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 
 오 우 오 
 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

APL을 잘 모르지만 'XXXOOoo ...'문자열의 시작 부분에 공백이 필요합니까?
Gabriele D' Antona

@friol : 예, "빈"공간을 채우는 데 사용됩니다
marinus



2

PHP ,131 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

apt -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.