지수를 ASCII 아트로 변환


28

태스크

당신의 임무는 다음과 같이 문자열을 변환하는 것입니다.

abc^d+ef^g + hijk^l - M^NO^P (Ag^+)

이 같은 문자열로 :

   d   g       l    N P    +
abc +ef  + hijk  - M O  (Ag )

abc d + ef g + hijk l -M N O P (Ag + )에 대한 근사치

즉, 캐럿 바로 옆에있는 문자를 상위 행으로, 한 캐럿에 대해 한 문자 씩 올리십시오.

명세서

  • 출력에서 추가 후행 공백이 허용됩니다.
  • 같은 체인 된 캐럿 m^n^o은 입력으로 제공 되지 않습니다 .
  • 캐럿 바로 뒤에 공백이나 다른 캐럿이 오는 것은 아닙니다.
  • 캐럿 바로 앞에 공백이 생기지 않습니다.
  • 모든 캐럿 앞에는 하나 이상의 문자가오고 그 뒤에 하나 이상의 문자가옵니다.
  • 입력 문자열에는 인쇄 가능한 ASCII 문자 만 포함됩니다 (U + 0020-U + 007E)
  • 두 줄의 출력 대신 두 개의 문자열 배열을 출력 할 수 있습니다.

정규 표현식을 사용하는 사람들에게는 입력 문자열이 다음 정규 표현식과 일치합니다.

/^(?!.*(\^.\^|\^\^|\^ | \^))(?!\^)[ -~]*(?<!\^)$/

리더 보드


2
@TimmyD "입력 문자열에는 인쇄 가능한 ASCII 문자 만 포함됩니다 (U + 0020-U + 007E)"
Leaky Nun

3
지수에서 왜 멈추는가? H_2O를 처리하는 무언가를 원합니다!
Neil

1
@Neil 그때 당신 만의 도전을하고, 나는이 도전을 그 도전과 중복으로 마무리 할 수 ​​있습니다. :)
Leaky Nun

1
귀하의 예를 바탕으로 나는 그들이 말하는 것 superindices , 반드시 지수
루이스 Mendo

4
정규 표현식을 사용하는 사람들은 표현이 엄격하게 제한되어있는 매우 규칙적인 국가에서 온 사람들입니다. 사망의 주요 원인은 치명적인 역 추적입니다.
David Conrad

답변:


19

V , 15 14 바이트

ÄÒ +òf^xxé kPj

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

상당히 간단한 솔루션입니다. 완벽한 V에 대한 도전!

설명:

Ä                "Duplicate this current line
 Ò               "Replace this line with spaces
   +             "Move to the beginning of the next line
    ò         ò  "Recursively (The second ò is implicit):
     f^          "  Find a caret
       xx        "  Delete two characters. The second will be saved into the main register
         é       "  Insert a space
           k     "  Move up
            P    "  Paste from the main register
             j   "  Move down

편리하게는 재귀의 작동 방식에 따라 매 캐럿마다 한 번씩 실행됩니다.


2
vim은이 도전에 완벽한 언어입니다. +1
Downgoat

18

체다, 77 72 67 바이트

l->l.chars.vfuse.replace("^\n"," ").lines.map(j->"%-2s"%j).turn(3)

정규식이 없습니다!

나는 체다의 능력에 대한 훌륭한 시연이기 때문에이 답변을 좋아합니다. 주로 Conor가 추가 한 바꾸기 기능 덕분입니다. 개발할 PR은 만들어지지 않았으므로 바꾸기 기능 만 존재합니다. 은이 지점 (업데이트 : PR을 만들었고 이제는 설치할 수있는 최신 베타 지점에 있습니다 npm install -g cheddar-lang)

골프를 치는 방법을 찾았지만 불행히도 감독은 항목 길이가 같지 않을 때 이런 일이 발생합니다.

["   denifednud   denifednug       denifednul    denifednuN denifednuP    denifednu+ ", "abcdenifednu +efdenifednu  + hijkdenifednu  - Mdenifednu Odenifednu  (Agdenifednu )"]

정규식을 사용하여 많은 바이트를 절약 할 수 있었고 실제로 단지 체다 치즈 정규 표현식에했다 ... 유일한 문제는 정규식 기능이 없다는 것입니다 : /

설명

l->                    // Function take input as `l`
   l.chars             // Get array of chars in input
   .vfuse              // Join with newlines
   .replace("^\n"," ") // Replace `^\n` with a space globally
   .lines              // Get the lines (see below for more details on what this returns)
   .map(j->            // Loop through each "line" `j` is arg
       "%-2s"          // C-like printf format.
                       // think of as: padRight(j, " ", 2)
                       // see below for more details
        % j            // Pass j as the string to insert
   ).turn(3)           // Turn the string 270 degrees (see below)
   .vfuse              // Vertically fuse to get result (this is not needed as we can output an array of the lines)

더 나은 이해를 위해. 이것은 무엇입니까.lines 반환하는 것입니다1^2

["1", " 2"]

그만큼 .turn회전이 가진 :

1
 2

으로:

 2
1

더 명확하게 만드는 또 다른 예 :

1
 2
2
 2

된다 :

 2 2
1 2

왜 형식입니까?

무엇을 %-2s하고있는 것은 매우 간단하다. %"형식"을 시작하거나이 시점에서 변수가이 문자열에 삽입되도록 지정합니다. -문자열을 오른쪽으로 채우는 것을 의미 2하며 최대 길이입니다. 기본적으로 공백으로 채워집니다. s문자열임을 지정합니다. 그것이하는 일을 보려면 :

"%-2s" % "a"  == "a "
"%-2s" % " a" == " a"

2
: DI는 항상 체다를 투표합니다.
DJMcMayhem

@ DrGreenEggsandIronMan : D 감사합니다
Downgoat

1
체다에는 turn문자열에 대한 방법이 있습니까?
TuxCrafting

6
-1이 언어의 이름은 항상 배고프다.
반 시계 회전을 중지

@ TùxCräftîñg는 2D 배열에만 해당하므로 .lines를 사용하여 선을 가져옵니다.
Downgoat

10

펄, 21 + 1 = 22 바이트

say'';s/\^(.)/♥[A\1↓/

-p플래그로 실행하십시오 . 대체 원료로 ESC(바이트 0x1b) 및 (수직 탭0x0b )으로 .

세로 탭은 Martin Ender의 아이디어입니다. 2 바이트를 절약했습니다! 감사.


지수가 마지막 콘솔 프롬프트와 겹치지 않도록 시작시 커서를 한 줄 아래로 이동하지 않아도됩니까?
Martin Ender

나는 그것에 대해 확신하지 못했습니다. 나는 필요한만큼의 공간을 가지고 있다고 가정했지만, 약간 불쾌 할 수 있습니다. (일반적으로, 나는 이런 종류의 문제를 해결하기 위해 커서 움직임을 사용하는 것을 매우 자랑스럽게 생각하지 않지만, 이것이 가장 먼저 떠오른 것입니다 ...)
Lynn

2
나는 그것이 훌륭한 해결책이라고 생각하지만 결과는 의도 된대로 문자열을 인쇄하는 것과 시각적으로 구별 할 수 없어야합니다.
Martin Ender

1
멋진 솔루션
Thomas Weller

7

자바 스크립트 (ES6), 56 55 바이트

s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))

물론 구조에 대한 정규식. 첫 번째 문자는 캐럿을 찾지 않으면 모든 문자를 공백으로 바꿉니다.이 경우 캐럿을 삭제하고 그 뒤에 문자를 유지합니다. (이 문자들은 반드시 존재합니다.) 두 번째 문자는 각 캐럿과 그 뒤에 나오는 문자를 공백으로 바꾸는 명백한 문자입니다.

편집 : @Lynn 덕분에 1 바이트를 절약했습니다. 교체는 대체 문자열을 두 번째 대체에 재사용하여 대체가 정규 표현식 배열에 매핑되도록합니다.


2
같은 외모는 s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))바이트 짧습니다.
Lynn

@Lynn 정말 교활한 스턴트입니다!
Neil

7

파이썬 3 157 101 98 85 83 74 바이트

이 솔루션은 이전 문자가인지 여부를 추적 ^한 다음이를 기반으로 첫 번째 또는 두 번째 행에 출력할지 여부를 결정합니다.

의 배열로 출력합니다 ['firstline', 'secondline'].

a=['']*2
l=0
for c in input():x=c=='^';a[l]+=c*x;a[~l]+=' '*x;l=x
print(a)

저장 (13) (15)는 @LeakyNun 덕분에 바이트!

@Joffan 덕분에 7 바이트가 절약되었습니다!


1
좋은 유한 상태의 자동 장치.
Leaky Nun

그것을 가지고 더 좋을 거라 a=['','']및 CONCATENATE ' 'c직접적으로 a[l]a[~l]?
Joffan

6

파이썬 2, 73 바이트

l=['']*2;p=1
for c in input():b=c!='^';l[p]+=c*b;l[~p]+=' '*b;p=b
print l

정규식이 없습니다. 이전 문자가 이었는지 기억 ^하고, 현재 문자를 기준으로 맨 위 또는 맨 아래 줄에, 다른 하나의 공백을 넣으십시오.


4

Pyth, 17 바이트

CcsmX~Z1j;d;cQ\^2

             Q      input string
            c \^    split on '^'
   m                map for sections d:
    X      ;          insert a space at index:
     ~Z1                the old value of Z (initially 0), before setting Z to 1
                      into:
        j;d             the section joined on spaces
  s                 concatenate
 c              2   chop into groups of 2
C                   transpose

2 개의 문자열 배열을 반환합니다. (접두사j 줄 바꿈으로 결합하기 전에)

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


1
나는 당신의 성이 어떻게 발음되는지 궁금해 할 수 없습니다. : D
Lynn

4

MATL , 18 바이트

94=t1YSt~&vG*cw~Z)

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

94=    % Take input implicitly. Create logical array of the same size that contains
       % true for carets, false otherwise
t      % Push a copy of this array
1YS    % Circularly shift 1 unit to the right. This gives an array that contains true
       % for the elements right after a caret (superindices), and false for the rest 
t~     % Push a copy and negate
&v     % Concatenate vertically. This gives a 2D, 2-row array
G*     % Push the input again, multiply with broadcast. This gives a 2D array in
       % which the first row contains the superindices (characters after a caret)
       % and 0 for the rest; and the second row contains the non-superindices and
       % 0 for the superindices
c      % Convert to char
w      % Swap. Brings to top the array containing true for carets and false otherwise
~      % Negate
Z)     % Use as logical index to remove rows that contain carets. Display implicitly

4

루비, 47 + 1 ( -n플래그) = 48 바이트

puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")

다음과 같이 실행하십시오. ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'


$_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")-p대신에 1 바이트를 절약 할 수 있다고 생각합니다 -n.
Dom Hastings

1
@DomHastings는 작동하는지 여부에 관계없이 코드에 줄 바꿈이없는 것으로 보이며 추가 +$/하면 바이트를 절약하지 못합니다. 인수 사이에가 있으면 puts자동으로 줄 바꿈을합니다 ,.
밸류 잉크

아 ... 사용 테스트 ruby -p ... <<< 'input'했지만 줄 바꿈이 없으면 좋지 않습니다! 실제로, 나는 이전에 테스트에 줄 바꿈이 추가되었을 수도 있습니다 ...하지만 작동하지 않았으므로 확인할 수 없습니다!
Dom Hastings

@DomHastings 다시 살펴보면, gets대부분의 경우 후행 줄 바꿈이 포함되어 있기 때문에 후행 줄 바꿈이 포함되지 않은 파일을 파이프하면 파일이 나타나지 않고 출력이 잘못됩니다 . ruby -p ... inputfileRuby gets가 파일을 명령 행 인수 인 경우 파일로 경로 재 지정하므로 코드를 테스트하십시오 .
가치 잉크

알겠습니다. 파일의 후행 줄 바꿈도 문제를 해결할 것이라고 생각합니다. 나는 유창한 루비 스트가 아니므로 오늘 그것에 대해 조금 더 배운 것 같습니다. 감사!
Dom Hastings

3

파이썬 (2), 76 68 67 바이트

@LeakyNun 덕분에 -5 바이트

@ KevinLau-notKenny 덕분에 -3 바이트

@ValueInk 덕분에 -1 바이트

@DrGreenEggsandIronMan 덕분에 -0 바이트

import re
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]

이 익명 Lambda 함수는 입력 문자열을 유일한 인수로 사용하여 두 줄을 개행으로 구분하여 반환합니다. 이를 호출하기 전에 "f ="를 작성하여 이름을 지정하십시오.

매우 간단한 정규 표현식 : 첫 번째 부분은 다음 문자를 공백으로 바꿉니다. 캐릭터와 당근 캐럿 또는 문자 만 있지만 캐럿이없는 경우에만 가능합니다. 두 번째 부분은 문자열의 캐럿과 그 뒤의 문자를 공백으로 바꿉니다.


@LeakyNun : 어떤 이유로 든 라이브러리가 1을 가지고 있는지 궁금합니다. 내가 당신의 의견을 보았을 때 2.이 질문에 지금 복사하고있었습니다. 당신과 케빈에게 감사합니다!
KarlKastor

당신은 하나의 바이트를 취할 수from re import*
DJMcMayhem

@DrGreenEggsandIronMan 이것은 정확히 같은 숫자의 바이트를 사용하는 것 같습니다. (위 참조)
KarlKastor

이전 import 문을 유지하고 lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]-1 바이트를 처리하십시오
Value Ink


2

레티 나, 16 바이트

S`^
\^(.)
♥[A$1↓

Martin Ender가 지적한 내 Perl 답변 포트. 원시 ESC바이트 ( 0x1b)와 세로 탭 ( 0x0b)으로 교체하십시오 .


2

shell + TeX + catdvi, 51 43 바이트

tex '\empty$'$1'$\end'>n;catdvi *i|head -n2

용도는 tex아름다운 수학을 조판하고 사용하는 catdvi텍스트 표현을 할 수 있습니다. head 명령은 다른 방법으로 정크를 제거합니다 (페이지 번호 매기기, 후행 줄 바꿈).

편집 : /dev/null부작용을 무시하고 단일 문자 파일에 쓸 수있을 때 길고 적절하며 리디렉션되는 이유는 무엇 입니까?


입력: abc^d+ef^g + hijk^l - M^NO^P (Ag^+)

TeX 출력 (방정식으로 잘림) : "Beautiful" mathematics! 최종 출력 :

   d   g     l  N P   +
abc +ef +hijk -M O (Ag )

가정 : 빈 디렉토리 (또는 "i"로 끝나는 이름이없는 디렉토리)에서 시작하십시오. 입력은 쉘 스크립트에 대한 단일 인수입니다. 입력이 빈 문자열이 아닙니다.

누군가가 이것이 규칙 남용인지 특히 말해줍니다 catdvi.


2

하스켈, 74 56 55 바이트

g('^':c:r)=(c,' '):g r
g(c:r)=(' ',c):g r
g x=x
unzip.g

한 쌍의 문자열을 반환합니다. 사용 예 : unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")

g쌍의 목록을 작성합니다. 여기서 첫 번째 요소는 상단 라인의 문자이고 두 번째 요소는 하단 라인의 문자입니다. unzip한 쌍의 목록으로 바꿉니다.

편집 : @xnor unzip은 18 바이트를 절약 할 것을 제안했습니다 . @Laikoni는 저장할 바이트를 하나 더 발견했습니다. 감사!


당신은 할 수 있습니까 j=unzip.g?
xnor

@ xnor : 오, 저 자신을 보지 않는 것이 얼마나 바보입니까! 고마워요!
nimi

당신은 대체 할 수 g[]=[]와 함께 g x=x한 바이트를 저장합니다.
Laikoni

@Laikoni : 잘 발견되었습니다! 감사!
nimi

1

펄, 35 바이트

34 바이트 코드 + 1 -p

$_=s/\^(.)|./$1||$"/ger.s/\^./ /gr

용법

perl -pe '$_=s/\^(.)|./$1||$"/ger.s/\^./ /gr' <<< 'abc^d+ef^g + hijk^l - M^NO^P (Ag^+)'
   d   g       l    N P    + 
abc +ef  + hijk  - M O  (Ag )

참고 : 이것은 나중에 검색 한 Value Ink 의 답변 과 정확히 동일 합니다. 루비 솔루션에 실제로 추가되지 않으므로 필요한 경우 제거합니다.


1

자바 8 람다, 132 128 112 문자

i->{String[]r={"",""};for(char j=0,c;j<i.length();j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}

ungolfed 버전은 다음과 같습니다.

public class Q86647 {

    static String[] printExponents(char[] input) {
        String[] result = {"",""};
        for (char j = 0, c; j < input.length(); j++) {
            c = input[j];
            result[0] += c == 94 ? input[++j] : 32;
            result[1] += c == 94 ? 32 : c;
        }
        return result;
    }
}

캐럿이 있는지 여부를 확인하여 배열로 출력하므로 다음 문자가 맨 위 행에 배치되고 그렇지 않으면 공백이 생깁니다.


업데이트

4자를 저장하기 위해 문자를 ASCII 값으로 대체했습니다.

대신 char 배열을 입력으로 사용하도록 지적 한 @LeakyLun에게 감사드립니다.

더 많은 문자를 저장 int하기 char위해 를 전환 해 주신 @KevinCruijssen에게 감사드립니다 .


바이트 수를 줄일 수 있는지 입력 char[]하고 사용 하려고 할 for(char c:i)수 있습니다.
Leaky Nun

i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}with "abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray()를 입력 으로 사용하여 비트를 110 바이트로 내릴 수 있습니다 . ( 이러한 변경 사항 중 무시 )
Kevin Cruijssen

1

코코넛 , 122114 96 바이트

편집 : Leaky Nun의 도움으로 8 26 바이트 다운.

def e(s,l)=''==l and s or"^"==l[0]and l[1]+e(s+' ',l[2:])or' '+e(s+l[0],l[1:])
f=print..e$('\n')

그래서 오늘 파이썬을 배운 삼항 조건 연산자를 가지고, 또는 사실 그들 중 두 : <true_expr> if <condition> else <false_expr><condition> and <true_expr> or <false_expr>함께 마지막 한 문자 적은 비용으로 오는.
파이썬 버전이 될 수 준수 ideoned .


첫번째 시도:

def e(s,l):
 case l:
  match['^',c]+r:return c+e(s+' ',r)
  match[c]+r:return' '+e(s+c,r)
 else:return s
f=print..e$('\n')

f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")지문으로 전화

   d   g       l    N P    +
abc +ef  + hijk  - M O  (Ag )

코코넛에서 아직 골프를 타 본 사람이 있습니까? 패턴 매칭 및 함수 연결과 같은보다 기능적인 프로그래밍 개념으로 파이썬을 풍부하게합니다...위에 사용 된 ) 합니다. 이것이 코코넛에 대한 첫 번째 시도이므로 모든 팁을 주시면 감사하겠습니다.

유효한 파이썬 코드도 유효한 코코넛이고 짧은 파이썬 답변이 게시되어 있기 때문에 이것은 분명히 단축 될 수 있지만 순수하게 기능적인 솔루션을 찾으려고 노력했습니다.


삼항 연산자 ( x and y or z)를 사용 하여를 대체 할 수 있다고 생각 합니다 case.
Leaky Nun

s[0]=="^"대신 사용할 수도 있습니다match['^',c]+r in l
Leaky Nun

@LeakyNun 나는 대체없는 경우 match['^',c]+rs[0]=="^"다음, c그리고 r더 이상 바인딩됩니다. 이것이 어떻게 도움이 될까요?
Laikoni

당신이 사용할 수있는 s[1]대체 cs[2:]교체 r.
Leaky Nun

이제 삼항을 사용할 수 있습니다.
Leaky Nun

0

Dyalog APL, 34 바이트

{(0 1=⊂b/¯1⌽b){⍺\⍺/⍵}¨⊂⍵/⍨b←⍵≠'∧'}

두 줄로 구성된 요소를 2 개 가진 벡터를 반환합니다.

샘플 실행 (앞의 위쪽 화살표는 사람이 소비 할 수 있도록 2 행 벡터를 형식화하는 것입니다)

      ↑{(0 1=⊂b/¯1⌽b){⍺\⍺/⍵}¨⊂⍵/⍨b←⍵≠'∧'}'abc∧d+ef∧g + hijk∧l - M∧NO∧P (Ag∧+)'
   d   g       l    N P    + 
abc +ef  + hijk  - M O  (Ag )

코드가 아무것도하지 않는 것에 대한 내 질문에 대한 귀하의 의견 : 예, 그 코드는 중요합니다.
haykam

0

PowerShell v2 +, 88 83 바이트

-join([char[]]$args[0]|%{if($c){$_;$b+=' '}elseif($_-94){$b+=$_;' '}$c=$_-eq94});$b

다른 것보다 조금 길지만 작은 PowerShell 마법과 약간 다른 논리를 보여줍니다.

본질적으로 파이썬이 대답하는 것과 동일한 개념입니다. 우리는 문자별로 입력을 반복하고 이전 개념이 캐럿인지 여부를 기억합니다 ($c ) 하고 현재 문자를 적절한 지점에 넣습니다. 그러나 출력 위치를 결정하는 논리와 방법은 약간 다르게 처리되며 튜플 또는 별도의 변수가 없습니다. 이전 문자가 캐럿인지 테스트하고 문자를 파이프 라인에 출력하고 공백을 연결하는 경우 $b. 그렇지 않으면 현재 문자가 캐럿인지 확인하고 그렇지 않은 elseif($_-94)한 현재 문자를 연결 $b하고 파이프 라인에 공백을 출력합니다. 마지막으로, 현재 캐릭터가 다음 고 라운드에 대한 캐럿인지 여부를 설정했습니다.

파이프 라인에서 해당 문자를 모아서 함께 모아서 -join 문자열로 바꾸고 그것을 그대로 둡니다.$b 파이프 라인에 . 마지막에 출력은 그 사이에 줄 바꿈이 내재되어 있습니다.

비교를 위해 다음 은 85 바이트 의 @ xnor 's Python answer 의 직접 포트입니다 .

$a=,''*2;[char[]]$args[($l=0)]|%{$a[!$l]+="$_"*($c=$_-ne94);$a[$l]+=' '*$c;$l=!$c};$a

0

Gema, 42 41 자

\^?=?@set{s;$s }
?=\ @append{s;?}
\Z=\n$s

Gema는 입력을 스트림으로 처리하므로 한 번에 해결해야합니다. 첫 번째 행은 처리 된대로 즉시 작성되고 두 번째 행은 변수 $ s에 수집 된 다음 끝에 출력됩니다.

샘플 실행 :

bash-4.3$ gema '\^?=?@set{s;$s };?=\ @append{s;?};\Z=\n$s' <<< 'abc^d+ef^g + hijk^l - M^NO^P (Ag^+)'
   d   g       l    N P    +  
abc +ef  + hijk  - M O  (Ag )

0

계피 껌, 21 바이트

0000000: 5306 6533 bd92 d1db 8899 8381 a2f8 8f8c  S.e3............
0000010: 1230 249e a1                             .0$..

비경쟁. 온라인으로 사용해보십시오.

설명

나는 정규식 골퍼가별로 없기 때문에 더 좋은 방법이있을 것입니다.

문자열은 다음과 같이 압축 해제됩니다.

S(?<!\^)[^^]& &\^&`S\^.& 

(후행 공백에 유의하십시오)

첫 번째 S단계는 입력을 받고 음수 비하인드를 사용하여 선행 캐럿이없는 캐럿 이외의 모든 문자를 공백으로 바꾼 다음 모든 캐럿을 삭제합니다. 그런 다음 수정 된 입력 문자열을 줄 바꿈과 함께 즉시 출력하고 해당 S단계를 제거합니다 . STDIN이 이제 소진되었고 이전 단계에서 입력을 제공하지 않았으므로 다음 단계S 단계는 STDIN의 마지막 행을 다시 수신 한 다음 모든 캐럿 뒤에 문자를 공백으로 바꾸고 출력합니다.

Perl 의사 코드에서 :

$first_stage_sub_1 = ($input =~ s/(?<!\^)[^^]/ /gr);
$first_stage_sub_2 = ($first_stage_sub_1 =~ s/\^//gr);
print $first_stage_sub_2, "\n";

$second_stage_sub = ($input =~ s/\^./ /gr);
print $second_stage_sub, "\n";

0

J , 28 27 바이트

0|:t#]{."0~_1-_1|.t=.'^'~:]

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

                  t=.'^'~:]    0 for ^, 1 for the rest, define t
              _1|.             Shift right, now zeroes are for superscripts         
     ]{."0~_1-                 Prepend that many spaces to each character
   t#                          Remove the rows with carets
0|:                            Transpose

더 좋은 방법이 있어야합니다 ...

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