태그 보관물: ascii-art

ascii-art

ASCII 예술 반영 문자는 변경되지 않고 위치 만 변경됩니다.

이 도전에서는 텍스트 블록이 주어지며 텍스트를 반영해야합니다.

입력:

  1. 반영 할 문자열입니다. 텍스트가 요소 인 텍스트 배열 은 텍스트 로 제공 되지 않을 수 있습니다. 예를 들어, "ab\ncd"['a','b','\n','c','d']허용되지만, ['ab','cd']또는 [['a','b'],['c','d']]하지 않습니다. 모든 줄의 문자 수가 동일하다고 가정 할 수 있습니다 (필요한 경우 공백으로 채워짐).
  2. TrueY 반사를 False나타내고 X 반사를 나타내는 부울

두 입력은 임의의 순서로 전달 될 수 있습니다.

산출:

반영된 문자열. 문자는 변경되지 않고 위치 만 변경됩니다. 결과 이미지 블록은 왼쪽 상단에 정렬되어야합니다 (첫 번째 행과 열에는 각각 공백이 아닌 문자가 포함되어야 함). 후행 공백 (행 중 하나)이 허용됩니다.

테스트 사례 :

False
  o /
--|/
  |
 / \

/ o
 /|--
  |
 \ /

True
  o /
--|/
  |
 / \

 / \
  |
--|/
  o /

True
text

text

False
text

txet

True
P
P
C
G

G
C
P
P

False
P
P
C
G

P
P
C
G

True
abcde
fghij
kl mn
opqrs
tuvwx

tuvwx
opqrs
kl mn
fghij
abcde

이것은 이므로 가장 좋아하는 언어로 가장 짧은 답변으로 답변하십시오!



답변

C #을 168 144 141 120 바이트

using System.Linq;i=>y=>string.Join("\n",y?i.Split('\n').Reverse():i.Split('\n').Select(x=>string.Concat(x.Reverse())));

새로운 버전은 명백한 문자열을 사용합니다 .IEnumerable을 사용하는 오버로드에 참여하십시오. 첫 번째 솔루션은 실수로 그것을 사용했기 때문에 3 진의 다른 쪽에도 사용할 수있었습니다.

최신 정보:

새 버전은 익명의 람다이며 카레를 사용하여 총 21 바이트를 절약합니다. f("text")(false)f가 익명 함수 인 곳으로 사용법이 변경됩니다 .

언 골프 드 :

using System.Linq;

//Using currying to save one byte
input => IsYReflect =>
         //Lambda makes return implicit
         string.Join("\n", IsYReflect
            //Y Reflect, just need to reverse the array
            ? input.Split('\n').Reverse()
            //X Reflect, reverse each line into an IEnumerable
            : input.Split('\n').Select(x => string.Concat(x.Reverse())));

답변

파이크, 7 바이트

!I_)ncX

여기 사용해보십시오!

!I )    - if not boolean:
  _     -  input = reversed(input)
    nc  - input.split("\n")
      X - splat(input)
        -  (print lines backwards)

답변

브레인 퍽, 143 (140) 131 바이트

,[,[---------->+<[>-]>[->]<,]<[[<]>[++++++++++.>]++++++++++.<[<]<]],[---------->+<[++++++++++>-]>[-<<[.<]++++++++++.[>]>>]<,]<[.<]

비트 C #을.

그 도전은 Brainfuck에게는 충분히 쉬웠고, 나는 그것을해야 할 정도로 피곤했습니다.

0x00입력 시작시 부울을 (거짓) 또는 다른 (거친) 바이트로 가져온 다음 사각형으로 채워진 문자열을 가져옵니다.

Y 플립의 후행 줄 바꿈을 출력하고 X 플립의 경우 줄 바꿈을 출력하지 않습니다.

시작 왼쪽의 메모리 위치를 지원하고 (여전히 필요한지 확실하지 않은) 통역사가 필요하고 EOF를로 제공합니다 0x00. 그러한 통역사가 여기 있습니다 . 분명히 입력 때문에 널 바이트를 지원하지 않습니다.

코드에는 10 +또는 10을 가진 많은 블록이 있습니다 -. 그것들은 아마 줄어들 수 있습니다.

댓글 버전

, get mode
[ check truthy input
    ,[ loop thru input
        ---------- subtract newline
        >+ set flag
        < go back to char
        [ was not newline
            > move to flag
            - reset flag
        ]
        > move to flag or one past flag
        [ hit flag; was newline
            - reset flag
            > skip a cell
        ]
        < go to next position
        , read next input
    ]
    < find end of line
    [ loop thru lines
        [<]> find start of line
        [ loop thru line
            ++++++++++ add newline back
            . print this cell
            > go to next cell
        ]
        ++++++++++ change to newline
        . print newline
        <[<]< find end of previous line
    ]
]
,[ loop thru any input left
    ---------- subtract newline
    >+ set flag
    < go back to char
    [ was not newline
        ++++++++++ add newline back
        > move to flag
        - reset flag
    ]
    > move to flag or one past flag
    [ hit flag; was newline
        - clear flag
        < go back to char
        < go back to line chars
        [ loop thru line
            . print this cell
            < go to previous cell
        ]
        ++++++++++. print newline
        [>]>> find empty cell
    ]
    < go to next position
    , read next input
]
< go to line
[ loop thru line
    . print this cell
    < go to previous cell
]

답변

32 비트 x86 머신 코드, 76 바이트

16 진수로 :

31c031c9495789f7fcf2aef7d15192b00a89f7f2ae5829f7f7f787f95f4b89c3741287d94b534b8a041eaa75f95b01dea4e2f2c348f7e101c6b00a5651f3a4595e29ce4f4b0f44c3aa75f0c3

입력 : EBX: 방향 플래그 (0/1), ESI: 입력 문자열, EDI: 출력 버퍼. 입력은 직사각형이어야합니다.

0:  31 c0               xor eax,eax         ;EAX=0
2:  31 c9               xor ecx,ecx
4:  49                  dec ecx             ;ECX=(uint)-1
5:  57                  push edi
6:  89 f7               mov edi,esi
8:  fc                  cld
9:  f2 ae               repne scasb         ;Scan input string for terminating NULL
b:  f7 d1               not ecx             ;ECX==<input string length (including NULL)>
d:  51                  push ecx
e:  92                  xchg edx,eax        ;EDX=0
f:  b0 0a               mov al,0x0a         ;'\n'
11: 89 f7               mov edi,esi
13: f2 ae               repne scasb         ;Scan input string for the first newline
15: 58                  pop eax             ;EAX==<input string length (including NULL)>
16: 29 f7               sub edi,esi         ;EDI==<single line length (including '\n')>
18: f7 f7               div edi             ;EAX==<# of lines>
1a: 87 f9               xchg ecx,edi        ;ECX=EDI
1c: 5f                  pop edi             ;EDI=<dest buffer>
1d: 4b                  dec ebx             ;Test input flag (0/1)
1e: 89 c3               mov ebx,eax         ;EBX=<# of lines>
20: 74 12               je _vertical
22: 87 d9               xchg ecx,ebx        ;Horisontal flip, exchange ECX & EBX so we can use LOOP
24: 4b                  dec ebx             ;EBX=<single line length (excluding '\n')>
_hfouter:
25: 53                  push ebx
_hfinner:
26: 4b                  dec ebx             ;Decrement inner loop counter
27: 8a 04 1e            mov al,[esi+ebx]    ;AL=ESI[EBX]
2a: aa                  stosb               ;*EDI++=AL
2b: 75 f9               jne _hfinner        ;EBX==0 => break
2d: 5b                  pop ebx
2e: 01 de               add esi,ebx         ;*ESI=='\n' (\0 on the last line)
30: a4                  movsb               ;*EDI++=*ESI++, ESI now points to the next line
31: e2 f2               loop _hfouter       ;--ECX==0 => break
33: c3                  ret                 ;Nothing more to do here
_vertical:
34: 48                  dec eax             ;# of strings less one
35: f7 e1               mul ecx             ;Line length (including '\n')
37: 01 c6               add esi,eax         ;ESI+=ECX*(EAX-1), ESI now points to the beginning of the last line
39: b0 0a               mov al,0x0a         ;'\n'
_vfloop:
3b: 56                  push esi
3c: 51                  push ecx
3d: f3 a4               rep movsb           ;Copy the whole line to the output including newline/NULL at the end
3f: 59                  pop ecx
40: 5e                  pop esi
41: 29 ce               sub esi,ecx         ;Set ESI to the beginning of the previous line
43: 4f                  dec edi             ;*EDI=='\n' (0 on the first iteration), should overwrite it with correct value
44: 4b                  dec ebx             ;Decrement loop counter
45: 0f 44 c3            cmove eax,ebx       ;if (EBX==0) EAX=EBX, this clears EAX on the last iteration
48: aa                  stosb               ;*EDI++=EBX?'\n':0
49: 75 f0               jne _vfloop         ;EBX==0 => break
4b: c3                  ret

답변

하스켈, 51 49 45 바이트

r=reverse
f b=unlines.last(map r:[r|b]).lines

사용 예 :

f True "abc\ndef\nghi\njkl"
"jkl\nghi\ndef\nabc\n"

f False "abc\ndef\nghi\njkl"
"cba\nfed\nihg\nlkj\n"

줄로 나누고, 줄을 뒤집거나 (True) 각 줄을 뒤집거나 (False) 단일 문자열로 다시 결합합니다. (A)의 경우 True, 입력, map r:[r|b]두 기능의 목록 [<reverse each line>, <reverse lines>]과에 대한 False하나 개의 함수와 입력 A의리스트 [<reverse each line>]. last이리스트의 마지막 요소를 선택합니다.


답변

젤리 , 8 바이트

ṣ⁷ṚU⁴?j⁷

여기에서 시도하십시오.

ṣ⁷         Split over newlines.
  ṚU⁴?     If ⁴ (2nd argument), then Ṛ (reverse rank ∞), else U (reverse rank 1).
      j⁷   Join with newlines.

답변

파이썬, 56 바이트

lambda s,r:'\n'.join(s[::2*bool(r)-1].split('\n')[::-1])

문자열 s과 진실 / 거짓 값으로 전화하십시오 r.