부영양화


35

관련이 있지만 매우 다릅니다.

boustrophedon는 쓰기의 다른 모든 라인이 반전 문자로, 반전 또는 반전 된 텍스트입니다.

이 도전에서 우리는 다른 모든 줄을 뒤집을 것이지만 실제 문자는 그대로 유지합니다. 다른 줄이있는 한 어떤 줄을 뒤집을지를 선택할 수 있습니다.

0 개 이상의 인쇄 가능한 ASCII 행을 각각 0 개 이상의 문자로 지원하는 한 텍스트를 적절한 형식으로 가져올 수 있습니다.

예 :

["Here are some lines","of text for you","to make a","boustrophedon"]:

["Here are some lines","uoy rof txet fo","to make a","nodehportsuob"] or ["senil emos era ereH","of text for you","a ekam ot","boustrophedon"]


["My boustrophedon"]:

["My boustrophedon"] or ["nodehportsuob yM"]

[]:  
[]

["Some text","","More text","","","Last bit of text"]:

["Some text","","More text","","","txet fo tib tsaL"] or ["txet emoS","","txet eroM","","","Last bit of text"]

리턴 및 입력이 텍스트로 구분 된 행이어야하는지 또는 파일 또는 행 목록 일 수 있는지 이해할 수 없습니다.
sergiol

@sergiol 기본 PPCG I / O 규칙이 적용됩니다.
Adám

내 코드가 일관되지 않게 작동 할 수 있습니까? 예를 들어 때로는 첫 번째 줄과 두 번째 줄에서 반전을 시작합니까?
Outgolfer Erik

2
@EriktheOutgolfer 그렇습니다. 나는 이것에 대해 이전에 물었습니다. 실제로 그 행동에 대해 충분히 일반적인 것으로 바뀌 었습니다.
Martin Ender

1
OP에 따라 @totallyhuman 예.
Adám

답변:


20

APL (Dyalog Classic) , 4 바이트

⊢∘⌽\

입력 값은 문자형 벡터로 구성된 벡터입니다.

벡터를 반전시키는 함수입니다 ( 모나 이식으로 적용되는 경우).

" dex "는 올바른 인수를 반환하는 함수입니다. 다른 함수 로 구성 될 때 f후자 A ⊢∘f B는 모나드 가 A ⊢ (f B)되고 따라서 동등하게됩니다 f B.

\는 IS 검색 연산자. g\A B C ...벡터이다 dyadically인가 (중위 표기)이다. 그것을 대체 하면 다음과 같이 단순화됩니다.A (A g B) (A g (B g C)) ...g⊢∘⌽g

A (A ⊢∘⌽ B) (A ⊢∘⌽ (B ⊢∘⌽ C)) ...
A (⌽B) (⌽⌽C) ....
A (⌽B) C ....

짝수 위치에서의 반전 (또는 계산 방법에 따라 홀수)이 취소됩니다.

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


4
그것은 ]&|.&.>/\J를 읽을 ​​수있는 사람들을 위해 문자 그대로 입니다.
FrownyFrog

2
이것은 정말 영리합니다.
Outgolfer Erik

13

하스켈 , 26 바이트

zipWith($)l
l=id:reverse:l

온라인으로 사용해보십시오! 사용 예 : zipWith($)l ["abc","def","ghi"]수율 ["abc","fed","ghi"].

설명:

lid엔터티 함수와 함수 사이를 번갈아 가며 무한한 함수 목록입니다 reverse.

메인 함수 zip l과 함수 애플리케이션이있는 입력 목록 $, 즉 ["abc", "def", "ghi"]우리가 얻는 입력 [id$"abc", reverse$"def", id$"ghi"]입니다.


11

껍질 , 4 바이트

z*İ_

문자열 목록을 가져 와서 리턴합니다 (인터프리터는 인쇄하기 전에 결과를 줄 바꿈으로 암시 적으로 결합합니다). 첫 번째 문자열이 바뀝니다. 온라인으로 사용해보십시오!

설명

z*İ_  Implicit input.
  İ_  The infinite list [-1,1,-1,1,-1,1..
z     Zip with input
 *    using multiplication.

Husk에서 문자열에 숫자를 곱하면 문자열이 여러 번 반복되고 숫자가 음수이면 반전됩니다.


6

자바 스크립트 (ES6), Firefox, 43 바이트

이 버전은 Firefox 의 정렬 알고리즘을 남용합니다 . Chrome에서 가비지를 생성하고 Edge에서 문자열을 전혀 변경하지 않습니다.

a=>a.map((s,i)=>[...s].sort(_=>i&1).join``)

테스트 사례

또는 온라인으로 사용해보십시오! (거미 원숭이)


자바 스크립트 (ES6), 45 바이트

a=>a.map(s=>(a^=1)?s:[...s].reverse().join``)

테스트 사례


6

APL (Dyalog Unicode) , 10 바이트

⌽¨@{2|⍳≢⍵}

두 가지 방식으로 작동합니다.

온라인으로 사용해보십시오! ⎕IO←1

온라인으로 사용해보십시오! ⎕IO←0

작동 방식 :

⌽¨@{2|⍳≢⍵}  tacit prefix fn
   {   ≢⍵}  Length of the input
           generate indexes from 1 (or 0 with IO0)
    2|      mod 2; this generates a boolean vector of 0s (falsy) and 1s (truthy)
  @         apply to the truthy indexes...
⌽¨          reverse each element




3

K (oK) , 17 14 바이트

해결책:

@[;&2!!#x;|]x:

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

예:

@[;&2!!#x;|]x:("this is";"my example";"of the";"solution")
("this is"
"elpmaxe ym"
"of the"
"noitulos")

설명:

reverse입력 목록의 홀수 인덱스에 적용하십시오 .

@[;&2!!#x;|]x: / the solution
            x: / store input as variable x
@[;      ; ]   / apply @[variable;indices;function] (projection)
          |    / reverse
       #x      / count (length) of x, e.g. 4
      !        / til, !4 => 0 1 2 3
    2!         / mod 2, 0 1 2 3 => 0 1 0 1       
   &           / where true, 0 1 0 1 => 1 3

노트:

  • 바꿔 &(#x)#0 1위한 &2!!#x3 바이트를 저장





2

R , 85 바이트

for(i in seq(l<-strsplit(readLines(),"")))cat("if"(i%%2,`(`,rev)(l[[i]]),"\n",sep="")

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

stdin에서 입력하고 stdout으로 출력합니다.

각 줄은 줄 바꿈 / 캐리지 리턴 / CRLF로 끝나야하며 해당 줄 바꿈으로 인쇄됩니다. 따라서 입력에는 후행 줄 바꿈이 있어야합니다.


2

젤리 , 5 4 바이트

U¹ƭ€

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

-1 바이트를위한 HyperNeutrino 에게 감사 합니다! (실제로 ƭ문서 부족으로 인해 어떻게 작동 하는지 알지 못했기 때문에 이번에는 운이 좋았습니다)


(7 바이트)로 시도 ¦했습니다 m. s2U2¦€;/또한 7 바이트입니다.
user202729

2

T-SQL, 65 바이트

표준 입력 규칙을 통해 SQL은 기존 테이블의 값입력 할 수 있으며 SQL은 본질적으로 정렬되지 않으므로 원래 텍스트 순서를 유지하려면 테이블에 행 번호가 있어야합니다.

ID 열을 사용하여 테이블을 정의 했으므로 단순히 텍스트 줄을 순차적으로 삽입 할 수 있습니다 (바이트 총계로 계산되지 않음).

CREATE TABLE t 
    (i int identity(1,1)
    ,a varchar(999))

따라서 대체 행을 선택하고 반전하려면 다음을 수행하십시오.

SELECT CASE WHEN i%2=0THEN a
ELSE reverse(a)END
FROM t
ORDER BY i

나는를 제외하여 11 바이트를 저장할 수 있습니다 ORDER BY i, 그리고이 가능성 (이 확실히 4 줄, 예를 들면 않습니다) 합리적인 기간 동안 원래의 순서대로 목록을 반환합니다. 그러나 SQL은 을 포함하는 경우 에만 보장ORDER BY 하므로 10,000 행이있는 경우 반드시 필요합니다.


2

펄 6 , 44 바이트

lines.map: ->\a,$b?{a.put;.flip.put with $b}

시도 해봐

lines               # get the input as a list of lines
.map:
-> \a, $b? {        # $b is optional (needed if there is an odd number of lines)
  a.put;            # just print with trailing newline
  .flip.put with $b # if $b is defined, flip it and print with trailing newline
}


1

실제로 7 바이트

;r'R*♀ƒ

설명:

;r'R*♀ƒ
;r       range(len(input))
  'R*    repeat "R" n times for n in range
     ♀ƒ  call each string as Actually code with the corresponding input element as input (reverse each input string a number of times equal to its index)

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


1

Alice , 13 바이트

M%/RM\
d&\tO/

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

별도의 명령 줄 인수를 통해 입력합니다. 첫 번째 줄 (및 그 이후의 다른 모든 줄)을 반대로 바꿉니다.

설명

       At the beginning of each loop iteration there will always be zero
       on top of the stack (potentially as a string, but it will be
       converted to an integer implicitly once we need it).
M      Push the number of remaining command-line arguments, M.
%      Take the zero on top of the stack modulo M. This just gives zero as
       long as there are arguments left, otherwise this terminates the
       program due to the division by zero.
/      Switch to Ordinal mode.
t      Tail. Implicitly converts the zero to a string and splits off the
       last character. The purpose of this is to put an empty string below
       the zero, which increases the stack depth by one.
M      Retrieve the next command-line argument and push it as a string.
/      Switch back to Cardinal mode.
d      Push the stack depth, D.
&\R    Switch back to Ordinal mode and reverse the current line D times.
O      Print the (possibly reversed) line with a trailing linefeed.
\      Switch back to Cardinal mode.
       The instruction pointer loops around and the program starts over
       from the beginning.

1

표준 ML (MLton) , 51 바이트

fun$(a::b::r)=a::implode(rev(explode b)):: $r| $e=e

온라인으로 사용해보십시오! 사용 예 : $ ["abc","def","ghi"]수율 ["abc","fed","ghi"].

설명:

$문자열 목록에서 반복되는 함수입니다. 그것은 두 문자열을 소요 a하고 b목록에서 (문자 목록에 문자열을 변환함으로써 제를 제 그대로 유지하고 반전 explode리스트 (반전) rev), 및 스트링에 다시 온 ( implode).


+1, 충분하지 않은 ML 솔루션 imo
jfh

1

레티 나 , 18 바이트

{O$^`\G.

*2G`
2A`

온라인으로 사용해보십시오! 설명 : 첫 번째 단계는 첫 번째 행을 반전시킨 후 두 번째 단계는 처음 두 행을 인쇄 한 후 세 번째 단계에서 삭제합니다. 그런 다음 남은 것이 없을 때까지 전체 프로그램이 반복됩니다. 선행 비용을 지불하면 하나의 후행 줄 바꿈을 제거 할 수 있습니다 ;.


1

Wolfram Language (Mathematica) , 33 바이트

Fold[StringReverse@*Append,{},#]&

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

작동 원리

StringReverse@*Append, 문자열 목록과 다른 문자열을 입력으로 받으면 문자열을 목록 끝에 추가 한 다음 모든 문자열을 되돌립니다.

Fold위와 관련하여 입력을 받는다는 것은 다음을 의미합니다.

  • 첫 번째 줄을 뒤집습니다.
  • 두 번째 줄을 끝에 추가하고 두 줄을 모두 뒤집습니다.
  • 세 번째 줄을 끝에 추가하고 세 줄을 모두 뒤집습니다.
  • 네 번째 줄을 끝에 추가하고 네 줄을 모두 뒤집습니다.
  • 그리고 우리가 라인을 다 떨어 뜨릴 때까지.

각 줄은 이전 줄보다 한 번 줄 바꿈되므로 방향이 바뀝니다.


1

CJam , 11 바이트

{2/Waf.%:~}

온라인으로 사용해보십시오! (CJam 배열 리터럴은 공백을 사용하여 요소를 분리합니다)

설명:

{              Begin block, stack: ["Here are some lines" "of text for you" "to make a" "boustrophedon"]
 2/            Group by 2:         [["Here are some lines" "of text for you"] ["to make a" "boustrophedon"]]
   W           Push -1:            [["Here are some lines" "of text for you"] ["to make a" "boustrophedon"]] -1
    a          Wrap in array:      [["Here are some lines" "of text for you"] ["to make a" "boustrophedon"]] [-1]
     f.%       Vectorized zipped array reverse (black magic):
                                   [["senil emos era ereH" "of text for you"] ["a ekam ot" "boustrophedon"]]
        :~     Flatten:            ["senil emos era ereH" "of text for you" "a ekam ot" "boustrophedon"]
          }

Waf.%"black magic"부분에 대한 설명 :

  • W로 사전 초기화 된 변수 -1입니다. a따라서 배열 요소를 감싸고 Wa있다 [-1].
  • %숫자 n와 배열을 팝하고 배열의 a모든 n요소를 취합니다 . 경우 n네거티브이고, 또한 그 의미를 반대로 W%배열 역전.
  • .이진 동작이어서 그렇게 배열 요소에 대응하는 해당 동작을 적용 [1 2 3] [4 5 6] .+이다 [5 7 9]. 한 배열이 다른 배열보다 길면 요소는 수정없이 유지 Wa.%되므로 배열의 첫 번째 요소 를 반대로합니다.
  • f이진 연산을 수행하면 스택에서 요소를 가져 와서 다음과 같이 작동합니다 {<that element> <that operation>}%. 즉, 배열의 각 요소를 통과하고 해당 요소를 푸시하고 스택에서 팝 된 요소를 푸시하고 작업을 실행 한 다음 결과를 수집합니다 다시 배열로. 즉 Wa.f%, 배열에있는 모든 요소의 첫 번째 요소 를 반대로합니다.


1

스위프트 , 90 85 82 72 바이트

@ Mr.Xcoder 덕분에 -10 바이트

func f(a:[String]){print(a.reduce([]){$0.map{"\($0.reversed())"}+‌​[$1]})}

print반환 유형 선언을 사용 하고 삭제할 수 있습니다 .func f(a:[String]){print(a.reduce([]){$0.map{"\($0.reversed())"}+[$1]})}
Mr. Xcoder

1

루비 , 19 + 2 = 21 바이트

-nl플래그의 경우 +2 바이트

$.%2<1&&$_.reverse!

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

설명

내가 이것을 썼을 때 나는 그것을 보지 못했지만 Perl 5 답변 과 실질적으로 동일합니다 .

공백을 사용하면 코드는 다음과 같습니다.

$. % 2 < 1 && $_.reverse!

-p옵션을 사용하면 Ruby가 다음과 같이 루프에서 스크립트를 효과적으로 래핑합니다.

while gets
  # ...
  puts $_
end

특수 변수 $_에는로 읽은 마지막 행 gets$.행 번호가 있습니다.

-l자동으로 호출 처리를 종료 자동 줄 수 chop!제거 각 입력 라인을하여 \n우리가 그것을 반대하기 전에.


1

GNU sed , 31 + 1 = 32 바이트

-r플래그의 경우 +1 바이트

G
:
s/(.)(.*\n)/\2\1/
t
s/.//
N

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

설명

G                   # Append a newline and contents of the (empty) hold space
:
  s/(.)(.*\n)/\2\1/   # Move the first character to after the newline
  t                   # If we made the above substitution, branch to :
s/.//               # Delete the first character (now the newline)
N                   # Append a newline and the next line of input

1

, 9 바이트

EN⎇﹪ι²⮌SS

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 참고 : 숯은 목록의 길이를 모르므로 추가 요소로 추가했습니다. 설명:

 N          First value as a number
E           Map over implicit range
    ι       Current index
     ²      Literal 2
   ﹪        Modulo
  ⎇         Ternary
       S    Next string value
      ⮌     Reverse
        S   Next string value
            Implicitly print array, one element per line.

1

Befunge-93, 48 바이트

 <~,#_|#*-+92:+1:
#^_@  >:#,_"#"40g!*40p91+,~:1+

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

첫 번째 줄을 반대로 인쇄합니다. 후행 줄 바꿈이 있습니다.

기본적으로, 입력을받을 때 인쇄를 번갈아 가며 스택에 입력을 저장함으로써 작동합니다. 줄 바꿈 또는 입력 끝에 도달하면 스택을 인쇄하고 줄 바꿈을 인쇄하며 0,4의 문자를 # 또는 no-op로 수정하여 모드를 변경합니다. 입력이 끝나면 프로그램을 종료하십시오.

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