내 ASCII 아트를 잘라


14

ASCII 아트가 있다고 가정 해 보겠습니다.

          ___
        ,"---".
        :     ;
         `-.-'
          | |
          | |
          | |
       _.-\_/-._
    _ / |     | \ _
   / /   `---'   \ \
  /  `-----------'  \
 /,-""-.       ,-""-.\
( i-..-i       i-..-i )
|`|    |-------|    |'|
\ `-..-'  ,=.  `-..-'/
 `--------|=|-------'
          | |
          \ \
           ) ) hjw
          / /
         ( (

( 소스 )

그러나 나는 실제로 정원 통로의 그림을 원하기 때문에이 조이스틱의 케이블에 집중하고 싶습니다.

 ,=.
-|=|-
 | |
 \ \
  ) )
 / /
( (

한 줄씩 복사하거나 블록 선택 모드로 텍스트 편집기를 사용하거나 코드를 작성할 수 있습니다!

따라서 내 코드에는 다섯 가지 인수가 필요합니다.

  • 줄 바꿈으로 구분 된 문자열 인 ASCII 아트입니다.
  • 왼쪽 위 모서리의 X 축 (1 인덱스, 왼쪽 열부터 양의 정수)
  • 왼쪽 위 모서리의 Y 축 (1 인덱스, 맨 위 행, 양의 정수)
  • 결과 이미지의 너비 (양의 정수)
  • 결과 이미지의 높이 (양의 정수)

테스트 사례

ASCII 이미지 :

          ___
        ,"---".
        :     ;
         `-.-'
          | |
          | |
          | |
       _.-\_/-._
    _ / |     | \ _
   / /   `---'   \ \
  /  `-----------'  \
 /,-""-.       ,-""-.\
( i-..-i       i-..-i )
|`|    |-------|    |'|
\ `-..-'  ,=.  `-..-'/
 `--------|=|-------'
          | |
          \ \
           ) ) hjw
          / /
         ( (

정원 경로

  • X : 10
  • Y : 15
  • 폭 : 5
  • 높이 : 7

결과:

 ,=.
-|=|-
 | |
 \ \
  ) )
 / /
( (

DB 아이콘

  • X : 3
  • Y : 12
  • 폭 : 6
  • 높이 : 4

산출:

,-""-.
i-..-i
|    |
`-..-'

외국인 장로

  • X : 9
  • Y : 1
  • 폭 : 7
  • 높이 : 10
  ___
,"---".
:     ;
 `-.-'
  | |
  | |
  | |
.-\_/-.
|     |
 `---'

서명

  • X : 16
  • Y : 19
  • 폭 : 3
  • 높이 : 1
hjw

규칙

  • 편리한 방법으로 출력 할 수 있습니다 .
  • 전체 프로그램 또는 기능이 허용됩니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

8
X와 Y를 0 인덱스로 취할 수 있습니까?
TFeld

8
또한, 테스트 케이스 1, YBEW해야 15하고, TC 2, X해야한다3
TFeld

2
공백이있는 사각형에 입력이 채워 졌다고 가정 할 수 있습니까?
DLosc

6
그것이 바로 정원길 인 아스키 아트를 보았을 때의 생각입니다. 나는 전혀 다른 생각을하지 않았다 ...
Jo King

3
테스트 사례에서 많은 X 및 Y 값이 올바르지 않은 것 같습니다 (일부는 0 인덱싱됩니까?!)-최소한 : 정원 경로의 Y는 15이어야합니다. DB 아이콘의 X는 3이어야합니다.
Jonathan Allan

답변:


22

Canvas , 1 바이트

여기 사용해보십시오!

높이, 너비, Y, X 및 ASCII 아트를 순서대로 입력으로 사용합니다.

Canvas의 ASCII 아트 객체에 대한 거의 모든 것이 0- 인덱싱되지만 어떤 이유로 1- 인덱싱됩니다. ¯ \ _ (ツ) _ / ¯


canvas : D의 예상 답변 (mb 숯은 비슷한 것을 가지고 있음)
Dead Possum

이게 무슨 마법이야!
AJFaraday

@AJFaraday 나는 ASCII 아트 조작을 위해 특별히 만들어진 언어가 ASCII 아트의 특정 부분을 얻기 위해 내장 기능을 가지고 있지 않을 것이라고 기대하지 않습니까? : p
dzaima


4

, 7 바이트

δJθηTζε

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 인덱스가 0 인 코디 딘태를 취합니다. 설명:

δ

ASCII 아트를 인쇄하십시오.

Jθη

원하는 사각형의 왼쪽 상단으로 이동하십시오.

Tζε

캔버스를 원하는 크기로 자릅니다.


3

-n , 21 바이트

_@>--b@<dM(a^n--c+,e)

온라인으로 사용해보십시오!

또는 0 인덱싱이 허용되는 경우 ...

-n, 17 바이트 :

_@>b@<dM(a^nc+,e)

온라인으로 사용해보십시오!

설명

다섯 개의 인수를 모두 명령 행 인수로 사용합니다.

                   a-e are the 5 cmdline args; n is newline
         a^n       Split a on newlines
              ,e   Range(e)
            c+     Add c to each element
        (       )  Use the resulting range(c,c+e) to slice into the list of lines
       M           To each line, map this function:
_                   The line
 @>b                Slice, keeping indices b and greater
    @<d             Slice, keeping indices less than d
                   Print, joining on newlines (-n flag)

위의 솔루션은 입력이 완벽한 직사각형이라고 가정합니다. 즉 선의 길이는 모두 같습니다. 그렇지 않으면 2 바이트가 더 필요합니다 ( -l대신 사용 -n).

(Z(a^nZDsb+,d)c+,e)      0-indexed, 19 bytes
(Z(a^nZDs--b+,d)--c+,e)  1-indexed, 23 bytes


3

apt -R , 13 11 바이트

·tWÉY ®tVÉX

시도 해봐

덕분에 2 바이트 절약 Kamil Drakari

솔루션이 1 기반 색인 작성을 사용해야하는 불필요한 요구 사항이 아닌 경우 9 바이트.

·tWY ®tVX

설명

                :Implicit input of string U and integers V=X, W=Y, X=Width & Y=Height
·               :Split U on newlines
 t              :Slice
  WÉ            : From 0-based index W-1
    Y           : To length Y
      ®         :Map
       t        :  Substring
        VÉ      :   From 0-based index V-1
          X     :   To length X
                :Implicitly join with newlines and output

내 테스트에서, 당신은 절약 할 수 있습니다 2 바이트 로 슬라이스를 전환하여 t, 그리고 또 다른 2 바이트 0 색인에 의해합니다. OP가 0 인덱싱이 허용되는지 테스트 사례를 수정했는지 명확하지 않기 때문에 두 번째 항목을 기다리는 것이 좋습니다.
Kamil Drakari

@KamilDrakari의 좋은 점-이 t방법은 배열에서도 작동 한다는 것을 완전히 잊어 버렸습니다 .
Shaggy


2

J , 45 바이트

f=:4 :0
'a b c d'=.x-#:10
y{~<(a+i.b);c+i.d
)

온라인으로 사용해보십시오!

노트 : J 는 왼쪽과 오른쪽으로 최대 2 개의 인수를 허용합니다. 오른쪽 인수는 ASCII 아트 문자열이고 왼쪽은 UHXW 값 목록입니다.

줄 바꿈을 시뮬레이트하고 함수 호출에는 문자열을 배열로 변환하는 코드가 있습니다.


2

V , 16 바이트

ÀGÀ|<C-v>@cl@djyHVGp

온라인으로 사용해보십시오!

입력은 완벽한 사각형이되도록 공백으로 채워질 것으로 예상됩니다. 또한 'Y'입력은 'X'앞에옵니다.

16 진 덤프 :

00000000: c047 c07c 1640 636c 4064 6a79 4856 4770  .G.|.@cl@djyHVGp

2

C (GCC) , 118 (109) 바이트

입력에 들쭉날쭉 한 줄이 포함될 수 있습니다. 줄 바꿈이 y 범위에 있으면 줄 바꿈이 인쇄됩니다.

제안에 대한 천장 고양이 덕분에.

f(s,x,y,w,h,a,b,c)char*s;{for(b=1,a=0;*s;a=c?!b++:a,s++)((c=*s==10)|++a>=x&a-x<w)&b>=y&b-y<h-c&&putchar(*s);}

온라인으로 사용해보십시오!




1

배쉬 + 코어 유틸리티, 37

cut -b$1-$[$1+$3-1]|tail +$2|head -$4

흥미롭게도, GNU tail 8.28 (Ubuntu 18.04)은 +NUM형식을 허용 하지만 TIO의 GNU tail 8.29는이를 위해 2 바이트가 더 필요합니다 -n+NUM.

온라인으로 사용해보십시오!

나는 이것을 모두하는 sed것이 더 짧을 수도 있다고 생각 했지만 50 바이트에서는 그렇지 않습니다.

sed -nr "$2,$[$2+$4-1]s/.{$[$1-1]}(.{,$3}).*/\1/p"

1

K4 , 31 바이트

해결책:

{[a;x;y;w;h]a .-1+(y;x)+!:'h,w}

예 :

q)ASCII:("          ___";"        ,\"---\".";"        :     ;";"         `-.-'";"          | |";"          | |";"          | |";"       _.-\\_/-._";"    _ / |     | \\ _";"   / /   `---'   \\ \\";"  /  `-----------'  \\";" /,-\"\"-.       ,-\"\"-.\\";"( i-..-i       i-..-i )";"|`|    |-------|    |'|";"\\ `-..-'  ,=.  `-..-'/";" `--------|=|-------'";"          | |";"          \\ \\";"           ) ) hjw";"          / /";"         ( (")
q)k){[a;x;y;w;h]a .-1+(y;x)+!:'h,w}[ASCII;10;15;5;7]
" ,=. "
"-|=|-"
" | | "
" \\ \\ "
"  ) )"
" / / "
"( (  "
q)k){[a;x;y;w;h].[a;-1+(y;x)+!:'h,w]}[ASCII;3;12;6;4]
",-\"\"-."
"i-..-i"
"|    |"
"`-..-'"
q)k){[a;x;y;w;h].[a;-1+(y;x)+!:'h,w]}[ASCII;9;1;7;10]
"  ___  "
",\"---\"."
":     ;"
" `-.-' "
"  | |  "
"  | |  "
"  | |  "
".-\\_/-."
"|     |"
" `---' "
q)k){[a;x;y;w;h].[a;-1+(y;x)+!:'h,w]}[ASCII;16;19;3;1]
"hjw"

설명:

1 인덱싱 된 입력을 가져 와서 x / y 좌표를 생성하고 ASCII 아트로 인덱스하십시오.

{[a;x;y;w;h]a .-1+(y;x)+!:'h,w} / the solution
{[a;x;y;w;h]                  } / lambda taking 5 inputs, a(scii), x, y, w(idth), h(eight)
                           h,w  / concatenate height and width, e.g. 7 5
                        !:'     / range til each, e.g. (0 1 2 3 4 5 6;0 1 2 3 4)
                  (y;x)+        / add list y x to it, e.g. (15 16 17 18 19 20 21;10 11 12 13 14)
               -1+              / subtract 1, e.g. (14 15 16 17 18 19 20;9 10 11 12 13)
            a .                 / index into a at these coordinates

1

R , 62 바이트

아마도 전체 텍스트를 행렬로 읽을 필요가 없기 때문에 R의 텍스트 문제에 대한 놀랍도록 짧은 해결책 일 것입니다.

function(x,y,w,h)write(substr(readLines()[y+1:h-1],x,x+w-1),1)

온라인으로 사용해보십시오!


1

\ / \ /> 123 바이트

j:j8+}j+}j}pppp80x
{:}i:0(?v:a=?x@s1+:
~~~~1+0!/000y
yp:qqqq~
q{y?=p:+1q:}}g$q:pp:
1}x}p}ap:q~q+1{{y!?:-
ys{{
~!u.*2(0:;!?h

입력은 한 줄의 공백으로 구분 된 입력 변수로 구성됩니다 x , y, w, 및h , 이후 다음 줄에 아스키 기술 하였다.

설명

이 코드는 아스키 아트를 코드 자체에 배치하여 \ / \ />의 자체 수정 기능을 사용합니다.

암호

그런 다음 코드에서 지정된 사각형의 문자를 가져 와서 출력합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.