Bustrofedon jest tekst, gdzie co drugi wiersz piśmie jest obrócony lub odwrócony, przy odwróconej litery.
W tym wyzwaniu po prostu odwrócimy co drugą linię, ale pozostawimy nietknięte rzeczywiste znaki. Możesz wybrać, które wiersze mają zostać odwrócone, o ile są to wszystkie pozostałe.
Możesz wziąć tekst w dowolnym odpowiednim formacie, o ile obsługujesz zero lub więcej wierszy drukowalnego ASCII, każdy o zerowej lub większej liczbie znaków.
Przykłady:
["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"]
Odpowiedzi:
APL (Dyalog Classic) , 4 bajty
Dane wejściowe to wektor wektorów znaków.
⌽
to funkcja odwracająca wektor (gdy⌽
jest stosowana monadycznie).⊢
to „ dex ” - funkcja, która zwraca właściwy argument. Po skomponowaniu (∘
) z inną funkcjąf
, zmusza ją do bycia monadyczną, ponieważA ⊢∘f B
jest równoważnaA ⊢ (f B)
i dlategof B
.\
jest operatorem skanowania .g\A B C ...
jest wektoremA (A g B) (A g (B g C)) ...
gdzieg
stosuje się go stopniowo (notacja infix). Podstawiając⊢∘⌽
dog
niego upraszcza się do:Cofnięcia na pozycjach parzystych (lub nieparzystych, w zależności od tego, jak liczyć) anulują się.
Wypróbuj online!
źródło
]&|.&.>/\
dla tych, którzy potrafią czytać J.Haskell , 26 bajtów
Wypróbuj online! Przykład użycia:
zipWith($)l ["abc","def","ghi"]
plony["abc","fed","ghi"]
.Wyjaśnienie:
l
to nieskończona lista funkcji na przemianid
funkcją bytu areverse
funkcją.Główna funkcja zamków
l
i lista wejść z aplikacją funkcji$
, czyli dane wejściowe,["abc", "def", "ghi"]
które otrzymujemy[id$"abc", reverse$"def", id$"ghi"]
.źródło
Łuska , 4 bajty
Pobiera i zwraca listę ciągów znaków (interpreter domyślnie dołącza wynik do nowej linii przed wydrukowaniem). Pierwszy ciąg znaków jest odwrócony. Wypróbuj online!
Wyjaśnienie
W Husk pomnożenie łańcucha przez liczbę powtarza go wiele razy, a także odwraca go, jeśli liczba jest ujemna.
źródło
JavaScript (ES6), Firefox, 43 bajty
Ta wersja narusza algorytm sortowania Firefoksa . Generuje śmieci w Chrome i wcale nie zmienia ciągów w Edge.
Przypadki testowe
Pokaż fragment kodu
Lub wypróbuj online! (Pająk Małpa)
JavaScript (ES6), 45 bajtów
Przypadki testowe
Pokaż fragment kodu
źródło
APL (Dyalog Unicode) , 10 bajtów
Działa w obie strony:
Wypróbuj online! z
⎕IO←1
Wypróbuj online! z
⎕IO←0
Jak to działa:
źródło
Perl 5, 17 + 2 (-pl) = 19 bajtów
linie nieparzyste odwrócone
nawet linie odwrócone
Po komentarzu @ Martina: dane wejściowe muszą mieć końcowy kanał.
spróbuj online
źródło
Haskell , 27 bajtów
Wypróbuj online!
Haskell , 30 bajtów
Wypróbuj online!
Rekurencja FTW.
źródło
05AB1E ,
54 bajtówWypróbuj online!
Wyjaśnienie
źródło
K (oK) ,
1714 bajtówRozwiązanie:
Wypróbuj online!
Przykład:
Wyjaśnienie:
Zastosuj
reverse
przy nieparzystych indeksach listy danych wejściowych:Uwagi:
&(#x)#0 1
dla,&2!!#x
aby zapisać 3 bajtyźródło
APL (Dyalog) , 12 bajtów
Wypróbuj online!
źródło
Python 2 ,
4036 bajtów-4 bajty dzięki @ Mr.Xcoder
Wypróbuj online!
Wyjście poprzez modyfikację listy wejść
Python 2 , 43 bajty
Wypróbuj online!
źródło
Aluminium , 66 bajtów
Wypróbuj online!
źródło
J , 9 bajtów
Zmniejsz od prawej do lewej, odwracając wszystkie ciągi w wyniku i przygotowując następny ciąg bez zmian.
Wypróbuj online!
Możemy wykonać 6 za pomocą podejścia ngn , ale będą dodatkowe spacje:
Wypróbuj online!
źródło
R , 85 bajtów
Wypróbuj online!
Wejście ze standardowego wejścia i wyjście na standardowe wyjście.
Każda linia musi być zakończona znakiem linii / powrotu karetki / CRLF i jest drukowana z odpowiednią nową linią. Tak więc dane wejściowe muszą mieć końcowy kanał.
źródło
Galaretka ,
54 bajtówWypróbuj online!
Dzięki HyperNeutrino za -1 bajty! (właściwie dlatego, że nigdy nie wiedziałem, jak to
ƭ
działa z powodu braku dokumentacji, tym razem miałem szczęście)źródło
¦
zm
(7 bajtów).s2U2¦€;/
ma również 7 bajtów.T-SQL, 65 bajtów
Nasze standardowe reguły wprowadzania pozwalają SQLowi wprowadzać wartości z wcześniej istniejącej tabeli , a ponieważ SQL jest z natury nieuporządkowany, tabela musi mieć numery wierszy, aby zachować oryginalną kolejność tekstu.
Zdefiniowałem tabelę z kolumną tożsamości, abyśmy mogli po prostu wstawiać wiersze tekstu sekwencyjnie (nie liczone do całkowitej liczby bajtów):
Aby wybrać i odwrócić naprzemienne wiersze:
Zauważ, że mogę zaoszczędzić 11 bajtów, wykluczając
ORDER BY i
, i że prawdopodobnie zwróci listę w oryginalnej kolejności dla dowolnej rozsądnej długości (z pewnością tak jest w przypadku 4-liniowego przykładu). Ale SQL gwarantuje to tylko wtedy, gdy dołączyszORDER BY
, więc gdybyśmy mieli, powiedzmy, 10 000 wierszy, na pewno byśmy tego potrzebowali.źródło
Perl 6 , 44 bajtów
Spróbuj
źródło
Rozdzielany przecinkami:
Stax , 12 bajtów
Uruchom i debuguj
wejście: ABC, def, GHI, jkl, MNO, pqr, STU
Znak nowej linii:
Stax , 8 bajtów
Uruchom i debuguj
wkład:
dane wyjściowe dla obu:
źródło
Właściwie 7 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
Alice , 13 bajtów
Wypróbuj online!
Wprowadź za pomocą oddzielnych argumentów wiersza polecenia. Odwraca pierwszą linię (i każdą kolejną po niej).
Wyjaśnienie
źródło
Standardowy ML (MLton) , 51 bajtów
Wypróbuj online!Przykład użycia:
$ ["abc","def","ghi"]
plony["abc","fed","ghi"]
.Wyjaśnienie:
$
to funkcja rekurencyjna na liście ciągów znaków. Zajmuje dwa ciągia
ib
z listy, utrzymuje niezmieniony pierwszy i drugi odwraca przekształcając ciąg do listy znaków (explode
), odwrócenie (listarev
) i obracając ją z powrotem do łańcucha (implode
).źródło
Siatkówka , 18 bajtów
Wypróbuj online! Objaśnienie: Pierwszy stopień odwraca pierwszą linię, a następnie drugi stopień drukuje pierwsze dwie linie, po czym trzeci etap usuwa je. Cały program powtarza się, dopóki nie zostanie nic. Jedna końcowa nowa linia może zostać usunięta kosztem wiodącej
;
.źródło
Wolfram Language (Mathematica) , 33 bajty
Wypróbuj online!
Jak to działa
StringReverse@*Append
, po podaniu listy ciągów i innego ciągu jako danych wejściowych dodaje ciąg na końcu listy, a następnie odwraca wszystkie ciągi.Fold
wprowadzenie danych wejściowych w odniesieniu do powyższego oznacza, że:Każda linia zostaje odwrócona jeden raz mniej niż poprzednia linia, więc linie zmieniają kierunek.
źródło
CJam , 11 bajtów
Wypróbuj online! (Literały tablicowe CJam używają spacji do oddzielania elementów)
Wyjaśnienie:
Wyjaśnienie części
Waf.%
„czarnej magii”:W
jest zmienną wstępnie zainicjowaną do-1
.a
owija element w tablicy, toWa
jest[-1]
.%
wyskakuje liczban
i tablicaa
i bierze każdyn
th element tablicy. Gdyn
jest ujemne, również odwraca go, co oznacza, żeW%
odwraca tablicę..
następnie operacji binarnego zastosowanie tej operacji do odpowiednich elementów tablicy, to[1 2 3] [4 5 6] .+
jest[5 7 9]
. Jeśli jedna tablica jest dłuższa od drugiej, elementy są przechowywane bez modyfikacji, co oznacza, żeWa.%
odwraca pierwszy element tablicy.f
a następnie operacja binarna pobierze element ze stosu, a następnie będzie działał jak:{<that element> <that operation>}%
przejdzie przez każdy element w tablicy, popchnie swój element, popchnie element najpierw wyskakujący ze stosu, uruchom operację, a następnie zbierze wyniki z powrotem do tablicy. Oznacza to, żeWa.f%
odwraca pierwszy element każdego elementu w tablicy.źródło
V , 4 bajty
Wypróbuj online!
źródło
Swift ,
90858272 bajty-10 bajtów dzięki @ Mr.Xcoder
źródło
print
deklaracji typu zwrotu i upuścić ją:func f(a:[String]){print(a.reduce([]){$0.map{"\($0.reversed())"}+[$1]})}
Rubinowy , 19 + 2 = 21 bajtów
+2 bajty dla
-nl
flag.Wypróbuj online!
Wyjaśnienie
Praktycznie identyczny z odpowiedzią na Perl 5 , chociaż nie widziałem tej, kiedy to pisałem.
W przypadku białych znaków kod wygląda następująco:
Ta
-p
opcja sprawia, że Ruby skutecznie otacza skrypt w pętli w następujący sposób:Zmienna specjalna
$_
zawiera ostatni odczytany wierszgets
i$.
zawiera numer wiersza.-l
Umożliwia automatyczną linię końcową obróbkę, która automatycznie wywołujechop!
w każdym wierszu wejściowym, który usuwa The\n
zanim go odwrócić.źródło
GNU sed , 31 + 1 = 32 bajty
+1 bajt dla
-r
flagi.Wypróbuj online!
Wyjaśnienie
źródło
Węgiel , 9 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Uwaga: Węgiel drzewny nie zna długości listy, więc dodałem ją jako dodatkowy element. Wyjaśnienie:
źródło
Befunge-93, 48 bajtów
Wypróbuj online
Drukuje pierwszy wiersz w odwrotnej kolejności. Ma końcowy znak nowej linii.
Zasadniczo działa na przemian między drukowaniem, gdy pobiera dane wejściowe, a przechowywaniem danych wejściowych na stosie. Kiedy osiągnie nowy wiersz lub koniec wejścia, drukuje stos, drukuje nowy wiersz i modyfikuje znak na 0,4, aby był znakiem # lub brakiem zmiany trybu. Jeśli to był koniec wprowadzania, zakończ program
źródło