| Bytes | Lang | Time | Link |
|---|---|---|---|
| 059 | Tcl | 171208T124748Z | sergiol |
| 004 | Thunno 2 | 230627T183100Z | The Thon |
| 080 | SNOBOL4 CSNOBOL4 | 171218T224135Z | Giuseppe |
| 046 | Python 3 | 211110T131721Z | Stephen |
| 061 | Red | 171208T135122Z | Galen Iv |
| 003 | Japt m | 190328T001450Z | Shaggy |
| 003 | Vyxal | 210818T004743Z | emanresu |
| 004 | Brachylog | 200901T121852Z | Unrelate |
| 003 | Jelly | 200901T120337Z | Unrelate |
| 016 | Pip | 200901T100833Z | Razetime |
| 5418 | C# | 171208T114450Z | LiefdeWe |
| 004 | 05AB1E | 171208T112155Z | Emigna |
| 031 | Zsh+coreutils | 190327T175032Z | GammaFun |
| nan | 181005T154058Z | 18276412 | |
| 053 | Java 8 | 180518T112132Z | Kevin Cr |
| 101 | C | 171208T200102Z | Steadybo |
| 034 | Julia 0.6 | 171222T135755Z | LukeS |
| 007 | MATL | 171208T172645Z | Sanchise |
| 059 | Clean | 171219T073605Z | Οurous |
| 042 | JavaScript ES6 | 171219T073026Z | l4m2 |
| 048 | Befunge93 | 171219T020623Z | Jo King |
| 009 | Charcoal | 171208T150128Z | Neil |
| 009 | J | 171208T144034Z | FrownyFr |
| 033 | Röda | 171209T190324Z | fergusq |
| 004 | APL Dyalog Classic | 171208T145930Z | ngn |
| nan | GNU sed | 171209T033707Z | Jordan |
| nan | Ruby | 171208T221116Z | Jordan |
| 044 | Perl 6 | 171209T011453Z | Brad Gil |
| 072 | Swift | 171208T201029Z | Endenite |
| 027 | Haskell | 171208T115914Z | totallyh |
| 004 | V | 171208T170208Z | nmjcman1 |
| 011 | CJam | 171208T163257Z | Esolangi |
| 033 | Wolfram Language Mathematica | 171208T164149Z | Misha La |
| 065 | TSQL | 171208T164021Z | BradC |
| 066 | Alumin | 171208T161443Z | Conor O& |
| 004 | Jelly | 171208T132954Z | user2027 |
| 018 | Retina | 171208T151029Z | Neil |
| 054 | PHP | 171208T145036Z | Titus |
| 085 | R | 171208T123408Z | Giuseppe |
| 036 | Python 2 | 171208T133934Z | ovs |
| 005 | Jelly | 171208T140630Z | Mr. Xcod |
| 045 | Python 2 | 171208T115540Z | Mr. Xcod |
| 018 | Stacked | 171208T134327Z | Conor O& |
| nan | Perl 5 | 171208T130927Z | Nahuel F |
| 010 | APL Dyalog Unicode | 171208T132159Z | J. Sall& |
| 004 | Husk | 171208T131953Z | Zgarb |
| 051 | Standard ML MLton | 171208T130158Z | Laikoni |
| 012 | APL Dyalog | 171208T130527Z | Uriel |
| 026 | Haskell | 171208T121055Z | Laikoni |
| 043 | JavaScript ES6 | 171208T114342Z | Arnauld |
| 014 | K oK | 171208T120535Z | mkst |
| 013 | Alice | 171208T114809Z | Martin E |
| 007 | Actually | 171208T120355Z | user4594 |
| 006 | Pyth | 171208T114705Z | Mr. Xcod |
Thunno 2, 4 bytes
ıṅ{r
Explanation
ıṅ{r # Implicit input
ı # Map over the input list:
ṅ # Push the 0-based iteration index
{ # That many times repeat:
r # Reverse the string
# Implicit output
SNOBOL4 (CSNOBOL4), 89 80 bytes
R X =1 - X
N =INPUT :F(END)
OUTPUT =EQ(X) N :S(R)
OUTPUT =REVERSE(N) :(R)
END
Japt -m, 4 3 bytes
I/O as an array of lines.
zVÑ
zVÑ :Implicit map of each string at 0-based index V in input array
z :Rotate 90 degrees clockwise
EÑ :V*2 times
Brachylog, 4 bytes
i↔ⁱ⁾
Doesn't feel entirely honest to call this generator a 4-byter considering it costs 3 more bytes to actually use it.
i Take an element from the input paired with its 0-index,
↔ ⁾ and reverse the element
ⁱ repeatedly
⁾ a number of times equal to the index.
Jelly, 3 bytes
UÐe
(or UÐo, reversing the other lines.)
U (Vectorized) reverse
Ðe the even numbered lines.
Essentially Mr. Xcoder's 5-byter, but with what I assume is a newer addition to the language.
Pip, 16 bytes
Flg{Po?lRVlo!:o}
This loops over each line and reverses it based on the value of variable o(Predefined to 1), which is inverted each time the loop runs.
Fi,#gPi%2?RVg@ig@i
This one is based on the indices of each line instead.
C#, 64 54 + 18 bytes
a=>a.Select((x,i)=>i%2<1?x:string.Concat(x.Reverse())).ToArray()
Saved 10 bytes by returning IEnumerable
Zsh+coreutils, 31 bytes
for s;((i^=1))&&<<<$s||rev<<<$s
Repeated xoring will switch i between 0 and 1, so we alternate our output.
Because the ternary chains our commands together, surrounding { } are unnecessary.
Zsh+coreutils, 23 bytes (almost correct)
for a b;<<<$a&&rev<<<$b
for sets b to the empty string if there are no more arguments. This unfortunately means that for an odd number of inputs, an extra empty line will be printed at the end.
Comma delimited:
Stax, 12 bytes
ü«äì╠▒╕█╬pεû
input: ABC,def,GHI,jkl,MNO,pqr,STU
Newline delimited:
Stax, 8 bytes
Çε÷┘)¼M@
input:
ABC
def
GHI
jkl
MNO
pqr
STU
output for both:
CBA
def
IHG
jkl
ONM
pqr
UTS
Java 8, 53 bytes
a->{for(int i=1;i<a.length;i+=2)a[i]=a[i].reverse();}
Reverses every odd 0-indexed item.
Input as an array of StringBuffers. Modifies the input-array instead of returning a new one to save bytes.
Explanation:
a->{ // Method with StringBuffer-array parameter and no return-type
for(int i=1;i<a.length; // Loop `i` in the range `[1, input_length)
i+=2) // And increase `i` by 2 after every iteration
a[i]=a[i].reverse();} // Reverse the StringBuffer at index `i`
C, 118 103 101 bytes
Thanks to @gastropner for saving 15 bytes and thanks to @ceilingcat for saving a byte!
i;f(l,n)char**l;{for(;n--;++l,n&1&&puts(""))for(i=strlen(*l);(n&1||!puts(*l))*i;putchar((*l)[--i]));}
C, 147 bytes
i,j;f(char*s){char t[strlen(s)];for(i=0;;t[j++]=*s++)if(!*s|*s==10){t[j]=0;i=!i;for(i&&(j=!puts(t));j;j||puts(""))putchar(t[--j]);if(!*s++)break;}}
MATL, 7 bytes
"@gNo?P
Takes a cell array of strings, and leaves the result on the stack.
Explanation
" % Loop over cell array
@g % Push new string, and 'unwrap' it from its cell array.
No? % Yes? Maybe so? (push stack size N, check if odd o, if so,...
P % Flip
As the implicit print function in MATL does not display an empty line for an empty item on the stack, we explicitly end the if-statement and loop and print the stack in the TIO footer:
]]X#
But this is not part of the program, as per the IO default
JavaScript (ES6), Firefox, 42 bytes, optimized from Arnauld's
a=>a.map(s=>[...s].sort(_=>a,a=!a).join``)
Befunge-93, 48 bytes
<~,#_|#*-+92:+1:
#^_@ >:#,_"#"40g!*40p91+,~:1+
Prints first line in reverse. Has a trailing newline.
Basically, it works by alternating between printing as it gets input and storing the input on the stack. When it reaches a newline or end of input, it prints out the stack, prints a newline, and modifies the character at 0,4 to be either a # or a no-op to change the mode. If it was the end of input, end the program
Charcoal, 9 bytes
EN⎇﹪ι²⮌SS
Try it online! Link is to verbose version of code. Note: Charcoal doesn't know the length of the list, so I've added it as an extra element. Explanation:
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.
J, 9 bytes
(,|.&.>)/
Reduce from right to left, reversing all strings in the result and prepending the next string as is.
We can do 6 using ngn’s approach, but there will be extra spaces:
]&|./\
Röda, 33 bytes
{enum|[_[::-1]]if[_%2=0]else[_1]}
Explanation:
{
enum| /* Zip elements in the stream with [0,1,...] */
/* For each string _1 and index _2: */
[_[::-1]] /* Push _1 reversed */\
if[_%2=0] /* if the index is even */
else[_1] /* else push _1 */
}
APL (Dyalog Classic), 4 bytes
⊢∘⌽\
The input is a vector of character vectors.
⌽ is a function that reverses a vector (when ⌽ is applied monadically).
⊢ is "dex" - a function that returns its right argument. When composed (∘) with another function f it forces the latter to be monadic as A ⊢∘f B is equivalent to A ⊢ (f B) and therefore f B.
\ is the scan operator. g\A B C ... is the vector A (A g B) (A g (B g C)) ... where g is applied dyadically (infix notation). Substituting ⊢∘⌽ for g it simplifies to:
A (A ⊢∘⌽ B) (A ⊢∘⌽ (B ⊢∘⌽ C)) ...
A (⌽B) (⌽⌽C) ....
A (⌽B) C ....
The reversals at even positions (or odd, depending on how you count) cancel out.
GNU sed, 31 + 1 = 32 bytes
+1 byte for -r flag.
G
:
s/(.)(.*\n)/\2\1/
t
s/.//
N
Explanation
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
Ruby, 19 + 2 = 21 bytes
+2 bytes for -nl flags.
$.%2<1&&$_.reverse!
Explanation
Practically identical to the Perl 5 answer, though I hadn’t seen that one when I wrote this.
With whitespace, the code looks like this:
$. % 2 < 1 && $_.reverse!
The -p option makes Ruby effectively wrap your script in a loop like this:
while gets
# ...
puts $_
end
The special variable $_ contains the last line read by gets, and $. contains the line number.
The -l enables automatic line ending processing, which automatically calls chop! on each input line, which removes the the \n before we reverse it.
Perl 6, 44 bytes
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
}
Swift, 90 85 82 72 bytes
-10 bytes thanks to @Mr.Xcoder
func f(a:[String]){print(a.reduce([]){$0.map{"\($0.reversed())"}+[$1]})}
Haskell, 27 bytes
foldr((.map reverse).(:))[]
Haskell, 30 bytes
f(a:b:c)=a:reverse b:f c
f a=a
Recursion FTW.
V, 4 bytes
òjæ$
ò ' <M-r>ecursively (Until breaking)
j ' Move down (breaks when we can't move down any more)
æ$ ' <M-f>lip the line to the end$
CJam, 11 bytes
{2/Waf.%:~}
Try it online! (CJam array literals use spaces to separate elements)
Explanation:
{ 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"]
}
Explanation for the Waf.% "black magic" part:
Wis a variable preinitialized to-1.awraps an element in an array, soWais[-1].%pops a numbernand an arrayaand takes everynth element of the array. Whennis negative, it also reverses it, meaning thatW%reverses an array..followed by a binary operation applies that operation to corresponding elements of an array, so[1 2 3] [4 5 6] .+is[5 7 9]. If one array is longer than the other, the elements are kept without modification, meaning thatWa.%reverses the first element of an array.ffollowed by a binary operation will take an element from the stack and then act like{<that element> <that operation>}%, that is, go through each element in the array, push its element, push the element first popped from the stack, run the operation, and then collect the results back into an array. This means thatWa.f%reverses the first element of every element in the array.
Wolfram Language (Mathematica), 33 bytes
Fold[StringReverse@*Append,{},#]&
How it works
StringReverse@*Append, when given a list of strings and another string as input, adds the string to the end of the list and then reverses all of the strings.
Folding the input with respect to the above means we:
- Reverse the first line.
- Add the second line to the end and reverse both of them.
- Add the third line to the end and reverse all three.
- Add the fourth line to the end and reverse all four.
- And so on, until we run out of lines.
Each line gets reversed one time fewer than the previous line, so the lines alternate direction.
T-SQL, 65 bytes
Our standard input rules allow SQL to input values from a pre-existing table, and since SQL is inherently unordered, the table must have row numbers to preserve the original text order.
I've defined the table with an identity column so we can simply insert lines of text sequentially (not counted toward byte total):
CREATE TABLE t
(i int identity(1,1)
,a varchar(999))
So to select and reverse alternating rows:
SELECT CASE WHEN i%2=0THEN a
ELSE reverse(a)END
FROM t
ORDER BY i
Note that I can save 11 bytes by excluding the ORDER BY i, and that is likely to return the list in the original order for any reasonable length (it certainly does for the 4-line example). But SQL only guarantees it if you include the ORDER BY, so if we had, say, 10,000 rows, we would definitely need this.
Alumin, 66 bytes
hdqqkiddzhceyhhhhhdaeuzepkrlhcwdqkkrhzpkzerlhcwqopshhhhhdaosyhapzw
FLAG: h
hq
CONSUME A LINE
qk
iddzhceyhhhhhdaeuze
pk
rlhcw
REVERSE STACK CONDITIONALLY
dqkkrhzpkzerlhcwqops
OUTPUT A NEWLINE
hhhhhdao
syhapzw
Jelly, 5 4 bytes
U¹ƭ€
Thanks HyperNeutrino for -1 bytes! (actually because I never knew how ƭ works due to lack of documentation, this time I got lucky)
Retina, 18 bytes
{O$^`\G.
*2G`
2A`
Try it online! Explanation: The first stage reverse the first line, then the second stage prints the first two lines, after which the third stage deletes them. The whole program then repeats until there is nothing left. One trailing newline could be removed at a cost of a leading ;.
PHP, 54 bytes
function(&$a){foreach($a as&$s)$i++&1&&$s=strrev($s);}
function works on argument (call by reference)
R, 85 bytes
for(i in seq(l<-strsplit(readLines(),"")))cat("if"(i%%2,`(`,rev)(l[[i]]),"\n",sep="")
Input from stdin and output to stdout.
Each line must be terminated by a linefeed/carriage return/CRLF, and it prints with a corresponding newline. So, inputs need to have a trailing linefeed.
Python 2, 40 36 bytes
-4 bytes thanks to @Mr.Xcoder
def f(k):k[::2]=map(reversed,k[::2])
Outputs by modifying the input list
Python 2, 43 bytes
f=lambda k,d=1:k and[k[0][::d]]+f(k[1:],-d)
Jelly, 5 bytes
UJḤ$¦
*Jelly outputs nested lists joined by spaces, and there is no native string type. Strings in Jelly are lists of characters, and that's why they're displayed that way. If you want them to be merged by spaces, Try this.
Python 2, 45 bytes
lambda k:[r[::i%-2|1]for i,r in enumerate(k)]
Python 2, 46 bytes
f=lambda k:k and[k[0][::len(k)%-2|1]]+f(k[1:])
Stacked, 18 bytes
[{x i:x$revi*}map]
This simply reverses each string in the array according to its position.
Alternative, 24 bytes
[:#':>#,tr[...$rev*]map]
Same approach, but generates indices manually.
Perl 5, 17 + 2 (-pl) = 19 bytes
odd lines reversed
$_=reverse if$.%2
even lines reversed
$_=reverse if$|--
After @Martin's comment : input needs to have a trailing linefeed.
APL (Dyalog Unicode), 10 bytes
⌽¨@{2|⍳≢⍵}
Works both ways:
Try it online! with ⎕IO←1
Try it online! with ⎕IO←0
How it works:
⌽¨@{2|⍳≢⍵} ⍝ tacit prefix fn
{ ≢⍵} ⍝ Length of the input
⍳ ⍝ generate indexes from 1 (or 0 with ⎕IO←0)
2| ⍝ mod 2; this generates a boolean vector of 0s (falsy) and 1s (truthy)
@ ⍝ apply to the truthy indexes...
⌽¨ ⍝ reverse each element
Husk, 4 bytes
z*İ_
Takes and returns a list of strings (the interpreter implicitly joins the result by newlines before printing). The first string is reversed. Try it online!
Explanation
z*İ_ Implicit input.
İ_ The infinite list [-1,1,-1,1,-1,1..
z Zip with input
* using multiplication.
In Husk, multiplying a string with a number repeats it that many times, also reversing it if the number is negative.
Standard ML (MLton), 51 bytes
fun$(a::b::r)=a::implode(rev(explode b)):: $r| $e=e
Try it online! Usage example: $ ["abc","def","ghi"] yields ["abc","fed","ghi"].
Explanation:
$ is a function recursing over a list of strings. It takes two strings a and b from the list, keeps the first unchanged and reverses the second by transforming the string into a list of characters (explode), reversing the list (rev), and turning it back into a string (implode).
Haskell, 26 bytes
zipWith($)l
l=id:reverse:l
Try it online! Usage example: zipWith($)l ["abc","def","ghi"] yields ["abc","fed","ghi"].
Explanation:
l is an infinite list of functions alternating between the identity function and the reverse function.
The main function zips l and the input list with the function application $, that is for an input ["abc", "def", "ghi"] we get [id$"abc", reverse$"def", id$"ghi"].
JavaScript (ES6), Firefox, 43 bytes
This version abuses the sort algorithm of Firefox. It generates garbage on Chrome and doesn't alter the strings at all on Edge.
a=>a.map((s,i)=>[...s].sort(_=>i&1).join``)
Test cases
let f =
a=>a.map((s,i)=>[...s].sort(_=>i&1).join``)
console.log(f(["Here are some lines","of text for you","to make a","boustrophedon"]))
console.log(f(["My boustrophedon"]))
console.log(f([]))
Or Try it online! (SpiderMonkey)
JavaScript (ES6), 45 bytes
a=>a.map(s=>(a^=1)?s:[...s].reverse().join``)
Test cases
let f =
a=>a.map(s=>(a^=1)?s:[...s].reverse().join``)
console.log(f(["Here are some lines","of text for you","to make a","boustrophedon"]))
console.log(f(["My boustrophedon"]))
console.log(f([]))
K (oK), 17 14 bytes
Solution:
@[;&2!!#x;|]x:
Example:
@[;&2!!#x;|]x:("this is";"my example";"of the";"solution")
("this is"
"elpmaxe ym"
"of the"
"noitulos")
Explanation:
Apply reverse at odd indices of the input list:
@[;&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
Notes:
- switched out
&(#x)#0 1for&2!!#xto save 3 bytes
Alice, 13 bytes
M%/RM\
d&\tO/
Input via separate command-line arguments. Reverses the first line (and every other line after that).
Explanation
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.
Actually, 7 bytes
;r'R*♀ƒ
Explanation:
;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)
Pyth, 6 bytes
.e@_Bb
.e~ Enumerated map.kis the index,bis the current element._Bb~ Bifurcatebwith its reverse.@~ Modular index in ^ withk.