셰브론을 Soliduses로 변환


23

공백, 개행 및 꺾쇠 괄호 만 포함하는 문자열을 사용하는 프로그램을 작성하십시오. <, >( chevrons ). 모양이 입력에 해당 하지만 원래 입력의 각 행 (미학 용) 사이에 공백 열이 삽입 된 상태에서 시계 방향으로 1/4 회전하여 공백, 줄 바꾸기 및 슬래시 : /, \( soliduses )를 출력 합니다.

예를 들어, 입력이 다음과 같은 경우 :

<>

결과는 다음과 같습니다.

/\
\/

입력이이 경우 :

><<<>
 <><

결과는 다음과 같습니다.

   \/
/\ /\
\/ /\
/\ /\
   \/

입력이이 경우 :

>>  <<
<>  <>
  <
  ><

결과는 다음과 같습니다.

      /\ \/
      \/ \/
\/ /\    
/\      
      /\ /\
      \/ /\

마지막 두 예제에서 원래 입력 행 사이에 단일 공백 ​​열이 있는지 확인하십시오.

일반적인 방법 (명령 행, stdin)으로 입력을 받아 출력을 인쇄하는 전체 프로그램을 작성하거나 출력을 인쇄하거나 리턴하는 문자열 인수로 함수를 작성할 수 있습니다.

입력에서 공백의 선행 및 후행 행 또는 열은 출력에 없어도됩니다. 또한 결과 모양이 올바른 한 어떤 위치에서든 출력에 선행 및 / 또는 후행 공백 및 / 또는 줄 바꿈이있을 수 있습니다. 다시 말해, 아스키 아트의 번역은 중요하지 않으며, 모양과 서로의 관계 만 중요 합니다.

선택적으로 입력에 후행 줄 바꿈이 있다고 가정 할 수 있습니다.

바이트 단위의 가장 짧은 코드가 이깁니다.


입력이 직사각형이고 후행 공백이 있다고 가정 할 수 있습니까?
orlp

@orlp 아니요. 후행 줄 바꿈을 가정 할 수 있지만 반드시 직사각형 일 필요는 없습니다.
캘빈의 취미

답변:



3

CJam, 37 바이트

qN/_z,S*f{+"< >""/\    \/ "3/er}W%zN*

CJam 통역사 에서 온라인으로 사용해보십시오 .

작동 원리

qN/                                   e# Read from STDIN and split at linefeeds.
   _z,                                e# Zip a copy and push the results length.
                                      e# This computes the maximum line length.
      S*                              e# Repeat " " that many times.
        f{                     }      e# For each line:
                                      e#   Push the string of spaces.
          +                           e#   Append it to the line.

           "< >""/\    \/ "3/         e#   Push "< >" and ["/\ " "   " "\/ "].
                             er       e#   Perform transliteration.
                                W%z   e# Reverse the lines and zip.
                                      e# This rotates by 90 degrees.
                                   N* e# Join, separating by linefeeds.  

2

파이썬 2, 105 바이트

def f(s):
 for row in map(None,*s.split("\n")):print" ".join("\/ /\ "[1-cmp(c,"<")::3]for c in row[::-1])

모든 잘못된 이유로, 이것은 가장 좋은 용도 중 하나 여야합니다 map(None, ...) 지금까지 내가 사용했던 합니다. 출력은 완벽한 사각형으로 채워집니다.

두 번째 예를 보자.

><<<>
 <><

map(None,*s.split("\n"))가난한 사람의 수행 zip_longest:

[('>', ' '), ('<', '<'), ('<', '>'), ('<', '<'), ('>', None)]

두 번째 줄이 첫 번째 줄보다 짧아서 None끝 부분에 표시됩니다. 일반적으로 이것은 문제가 될 수 있지만 어떤 이유로 든 거의 모든 것이 Python 2, 특히

>>> None < ""
True

표현하는 것이이 수단 1-cmp(c,"<")반환 0, 1, 2에 대한 ">", "<", None각각은, 우리 중 하나를 추출하는 문자열 슬라이스 트릭을 사용할 수 있도록 "\/", "/\", " ". 이것을 사용하여 출력을 한 줄씩 인쇄하고 2 문자 그룹을 공백으로 결합합니다.


+1 이것은 질문을 읽을 때 내 머릿속에서 본 해결책입니다. 이미 여기에 있다는 사실에 놀라지 말아야합니다. P
Kade

1

스칼라 201 개 188 180 문자

(s:String)(Seq("")0/:s.lines.flatMap(l⇒Seq(l,l))){case((v,i),l)(l.map(c⇒if(Set('>','<')(c))if(c%4==i)'/'else'\\'else c)+:v,2-i)}._1.init.transpose.map(_.mkString).mkString("\n")

노트:

제공된 문자열에 길이가 같은 모든 줄이있는 경우에만 작동합니다 (즉, 공백으로 채워짐)

설명:

난의 튜플의 초기치 배 사용하고 Seq[String]Int(쓰는 대신 Seq.empty[String]짧은 기록 IM을 Seq("")하고 .init, 스크롤 문자열의 집합에서 동작 스크롤 후), 각 스트링은 원래의 입력에 라인이고, 라인마다 두 배가됩니다. 여기서 트릭은 숯의 모듈로를 테스트하는 것이 었습니다. 이후 '<'값이 60이고, '>'값은 모듈로 4에 대한 시험, 62는 접어도 반전을 수행하는 이유는 0 또는 2를 수득한다 Int0으로 설정하고 0 내지 2 사이의 대칭 2-i. 모든 홀수 라인은지도한다 '>''/''<''\\', 모든 심지어 라인이 매핑해야합니다 '>''\\'와'<''/'. 이것이 내가 테스트하는 이유입니다c%4==i그리고 1 개의 돌로 2 마리의 새를 때렸습니다. 접기는 문자열의 초기 시퀀스를 반대로 "재 구축"한 다음 (마지막 줄을 삭제 한 후) 시퀀스를 바꿉니다 (그래서 모든 문자열의 길이가 정확히 같아야합니다). 관련된 암시 적 때문에 _.mkString각 줄 (이전의 열) mkString("\n")에 대한 최종 출력을해야합니다.


0

펄-119

@l=map[/./g],reverse<>;do{print;$_=join(' ',map({'<'=>'/\\','>'=>'\/'}->{$_->[$b]}||'  ',@l))."\n";$b++;}while(/[^ 
]/)

먼저, @l각 입력 행의 문자를 역순으로 나타내는 문자를 나타내는 목록 목록으로 지정됩니다. 그런 다음 문자 열을 반복하여 꺾쇠 괄호를 해당 슬래시로 바꾸고 요소를 공백으로 결합하고 결합 된 슬래시를 선으로 인쇄합니다.

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