“tac”구현 : 파일에서 줄을 반대로 인쇄 대해 sed어떻게 구현에

사이에 새끼 고양이 질문 및보고 U & L에서이 질문을 몇 가지에 대해 sed어떻게 구현에 대해, 마법 tac?


목표

파일의 행을 뒤집어 인쇄하는 프로그램을 구현하십시오.


입력

이름 또는 표준 입력을 통해 제공되는 파일


산출

라인이 표준 출력으로 반전되었습니다.


채점

바이트의 소스 코드.



답변

GS2, 3 바이트

* +

3 바이트는 순서대로 분할 선, 반전 및 결합선입니다.


답변

펄, 11 바이트

$\=$_.$\}{

정확하게 동작합니다 tac. 이 코드에는 -p스위치 가 필요 하며 1 바이트로 계산했습니다.

시운전

$ echo -en 'a\nb' | perl -pe'$\=$_.$\}{' | xxd -g 1
0000000: 62 61 0a                                         ba.
$ echo -en 'a\nb\n' | perl -pe'$\=$_.$\}{' | xxd -g 1
0000000: 62 0a 61 0a                                      b.a.

작동 원리

여기 에 설명 된 것처럼 -p스위치는 기본적으로 while (<>) { ... ; print }프로그램을 둘러싼 것이므로 소스 코드는 다음과 같습니다.

 while(<>)
 {
   $\ = $_ . $\
 }
 print

각 입력 줄에 대해 현재 줄 ( $_)을 앞에 추가하고 $\(처음에는 정의되지 않음) 후자를 결과로 업데이트합니다.

모든 행이 처리 된 후 print로컬 변수 값 $_(이 범위에서 정의되지 않음)과 출력 레코드 구분 기호 ( $\)가 인쇄됩니다.


답변

Pyth, 4 바이트

j_.z

.z는 입력으로 행으로 구분 된 입력이며, _반대로 입력 j하고 문자를 기준으로 결합합니다 \n. 기본적으로는입니다 .


답변

FlogScript , 2 바이트

)"

( 무정부 상태 골프 에서 시도하십시오 .)

)가능 --in-out-line-array모드를 상기 프로그램의 나머지 부분은 "라인의 배열 역전.


답변

망막 , 7 바이트

!rm`.*$

단일 정규 표현식으로 Retina는 일치 모드에서 실행됩니다. 이것은 일반적으로 일치 횟수 !를 인쇄하지만 실제 일치를 대신 인쇄하도록 구성합니다 (줄 바꿈으로 구분).

실제 정규식은 단지 .*$입니다. 줄 바꿈을 제외한 모든 문자와 일치 할 수 .*있으므로 모든 행과 일치합니다 (잠재적으로 비어 있음) .. 나는 $잠시 후에 갈 것이다 .

일치 항목을 반대로 인쇄하려면 어떻게해야합니까? .NET의 오른쪽에서 왼쪽으로 일치하는 모드를 사용하여 r. 이것은 정규식 엔진이 일치하는 항목을 찾을 때 문자열의 끝에서 시작하여 뒤로 작동한다는 것을 의미합니다.

마지막으로,이 m차종 $일치 a의 끝 라인 대신 문자열의 끝을. 왜 우리는 그것을 필요로합니까? 문제는 .*불필요한 일치 를 생성 한다는 것 입니다. 정규식 대체를 고려하십시오

s/a*/$0x/

입력에 적용됩니다 baaababaa. 당신은 이것이 산출 할 것이라고 생각할 것입니다 baaaxbaxbaax, 그러나 그것은 실제로 당신에게 줄 것 baaaxxbaxxbaaxx입니다. 왜? aaa엔진의 커서를 일치 시킨 후 a와 사이에 있기 때문 b입니다. 이제 더 이상 일치하지 않을 수 a의, 그러나 a*또한 빈 문자열로 만족된다. 즉, 매 경기마다 빈 경기가 다시 발생합니다.

빈 줄이 추가되기 때문에 여기서는 원하지 않습니다. 따라서 일치하는 끝을 포함하도록 요구 하여 관련없는 일치 항목 ( 오른쪽에서 왼쪽 모드로 인해 줄 의 시작 부분 에 있음) 을 버립니다. 라인.


답변

하스켈, 34 바이트

main=interact$concat.reverse.lines

[편집하다]

로 교체 unlines하여 1 바이트를 저장 했습니다 concat.


답변

CJam, 7 바이트

qN/W%N*

stdin을 읽고 stdout으로 인쇄합니다.

설명:

q       Get input.
N/      Split at newlines.
W%      Reverse list.
N*      Join with newlines.