직교 방향 작업 : 정확히 하나의

작업 : 정확히 하나의 문자로 구성된 입력이 주어지면 <>^v화살표 방향의 인쇄 가능한 ASCII 문자 (공백에서 물결표까지)로 구성된 두 번째 입력을 출력합니다.

프로그램에 대한 두 번째 입력이이라고 가정 해 봅시다 ABC. 이것이해야 할 일입니다.

  • 입력 >: 인쇄 ABC.
  • 입력 <: 인쇄 CBA.
  • 입력 ^: 인쇄 C\nB\nA또는 입력이 -90 ° 회전했습니다.
  • 입력 v: 인쇄 A\nB\nC또는 입력이 90 ° 회전했습니다.

테스트 사례

input => \n output
---
">", "thanks!" =>
thanks!
---
"<", "Hello, World!" =>
!dlroW ,olleH
---
"^", "This is text." =>
.
t
x
e
t

s
i

s
i
h
T
---
"v", "Tokyo" =>
T
o
k
y
o
---
"<", ">>>" =>
>>>

이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.



답변

MATL , 10 6 바이트

Martin 덕분에 4 바이트가 절약되었습니다!

19\qX!

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

19\            % implicitly take input (a character) and compute mod-19 of its ASCII code
   q           % subtract 1. Gives 17, 2, 3, 4 for the characters '^<v>' respectively.
               % These numbers correspond to 1, 2, 3, 4 modulo 4, and so are the numbers
               % of 90-degree rotations required by each character
    X!         % implicitly take input (string). Rotate the computed number of times
               % in steps of 90 degrees. Implicitly display

모듈로 연산이없는 이전 버전 : 10 바이트

'^<v>'=fX!

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

'^<v>'         % push string
      =        % implicitly take input (a char) and test for equality
       f       % find index of matching character
        X!     % implicitly take input (string). Rotate that number of times
               % in steps of 90 degrees. Implicitly display

답변

파이썬 3, 64 51 48 바이트

xnor 덕분에 6 바이트를 절약했습니다.

Lynn 덕분에 7 바이트가 절약되었습니다.

저장된 3에서 DSM 모건 덕분 바이트 정도 파이썬.

lambda c,s:'\n'[c<'?':].join(s[::1|-(c in'<^')])

이 함수는 다음 문자 중 하나를 허용합니다. <>^v 첫 번째 인수로 를, 두 번째 인수로 회전해야하는 문자열을 허용합니다.


더 읽기 쉬운 버전은 다음과 같습니다.

lambda c, s: ('\n' if c in '^v' else '').join(s[::-1 if c in'<^' else 1])

답변

하스켈, 57 바이트

f">"=id
f"<"=reverse
f"v"=init.((:"\n")=<<)
f _=f"<".f"v"

사용 예 : f "v" "ABC" -> "A\nB\nC".

방향 >의 idendity 기능입니다 <그것의 인수를 반전 v문자열의 각 문자에 줄 바꿈을 추가하고 마지막을 삭제하고 ^있다 v다음 <.


답변

apt, 9 바이트

VzUc %B+1

@DonMuesli의 답변에서 영감을 얻었지만 CJam이 정확히 동일한 기술을 사용하는 것을 보았습니다. 온라인으로 테스트하십시오!

작동 원리

           // Implicit: U = arrow char, V = text
  Uc %B    // Take the char code of U, mod 11.
           // This converts ">", "v", "<", and "^" to 7, 8, 5, and 6, respectively.
Vz     +1  // Add one and rotate V by 90° clockwise that many times.

답변

CJam, 13 바이트

l(iB%{W%z}*N*

입력은 회전 할 문자열 바로 뒤에 오는 방향 문자입니다.

여기에서 테스트하십시오.

설명

모듈로 마술을 위해 예. 4 개의 문자 modulo 11을 취하면 다음과 같이 매핑됩니다.

> 7
v 8
< 5
^ 6

이들은 모두 별개의 모듈로 4이며 더 중요하게는 깔끔하게 증가하고 3, 0, 1, 2있습니다. 즉, 우리는 mod 11회전 결과를 사용하여 얼마나 자주 회전해야하는지 결정할 수 있습니다 ( mod 4어쨌든 네 번의 회전이 작동하지 않기 때문에 명시적인 필요 없음). 우리는 일반적으로 이러한 숫자를 1만큼 오프셋해야합니다. >실제로 산출 8하고 no-op가됩니다. 그러나 숫자를 회전시키는 방식은 실제로 첫 번째 응용 프로그램의 문자열을 뒤집어 항상 하나의 회전을 무료로 얻습니다.

l    e# Read input.
(i   e# Pull off the first character and convert to its character code.
B%   e# Modulo 11.
{    e# That many times...
 W%  e#   Reverse... on the first iteration this reverses the string. Afterwards
     e#   we'll have an Nx1 or 1xN grid of characters on the stack, where
     e#   this reverses the rows instead.
 z   e#   Transpose. On the first iteration, this simply wraps the string in
     e#   array, turning it into a grid without changing its orientation further
     e#   beyond the reversal that just happened. On subsequent iterations, a
     e#   transpose combined with reversing the rows rotates the grid 90 degrees
     e#   clockwise.
}*
N*   e# Join with linefeeds.

답변

피스, 17 15

jWgz\^_W}z"<^"w

여기에서 시도 하거나 Test Suite를 실행하십시오.

Jakube 덕분에 2 바이트가 절약되었습니다!

또는 모드 트릭을 사용하십시오.

@s_MBjBz)h%Cw11

여기서 사용해보십시오 .


답변

줄리아, 51 바이트

f(d,s)=join(d"<^"?reverse(s):s,d"^v"?"\n":"")

이것은 a Char와 문자열 을 받아들이고 문자열을 반환 하는 함수입니다 .

하자 d방향을 나타내는 문자를하고 s문자열합니다. 경우 d왼쪽 또는까지, 우리는의 반대를 사용 s그렇지 않으면 우리가 사용하기 s로 주어진. d왼쪽이나 오른쪽 이면 구분 기호를 빈 문자열로, d위쪽이나 아래쪽 이면 줄 바꾸기 를 구성합니다. 문자열과 구분 기호를로 전달하면 문자열의 join각 문자 사이에 구분 기호가 삽입되고 문자열이 반환됩니다.

모든 테스트 사례를 온라인으로 확인