Relacionado, mas muito diferente.
Um boustrophedon é um texto em que todas as outras linhas de escrita são invertidas ou invertidas, com letras invertidas.
Nesse desafio, apenas reverteremos todas as outras linhas, mas deixaremos os caracteres reais usados intactos. Você pode escolher quais linhas reverter, desde que sejam todas as outras.
Você pode colocar o texto em qualquer formato adequado, desde que ofereça zero ou mais linhas de ASCII imprimíveis, cada uma com zero ou mais caracteres.
Exemplos:
["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"]
Respostas:
APL (Dyalog Classic) , 4 bytes
A entrada é um vetor de vetores de caracteres.
⌽
é uma função que inverte um vetor (quando⌽
aplicado monadicamente).⊢
é " dex " - uma função que retorna seu argumento correto. Quando composto (∘
) com outra funçãof
, força o último a ser monádico, poisA ⊢∘f B
é equivalente aA ⊢ (f B)
e, portantof B
,.\
é o operador de digitalização .g\A B C ...
é o vetor emA (A g B) (A g (B g C)) ...
queg
é aplicado de forma diádica (notação de infixo). Substituindo⊢∘⌽
porg
ele simplifica:As reversões nas posições pares (ou ímpares, dependendo de como você conta) são canceladas.
Experimente online!
fonte
]&|.&.>/\
para aqueles que podem ler J.Haskell , 26 bytes
Experimente online! Exemplo de uso:
zipWith($)l ["abc","def","ghi"]
rendimentos["abc","fed","ghi"]
.Explicação:
l
é uma lista infinita de funções alternando entre aid
função da entidade e areverse
função.A função principal fecha
l
e a lista de entradas com o aplicativo de funções$
, ou seja, uma entrada["abc", "def", "ghi"]
que obtemos[id$"abc", reverse$"def", id$"ghi"]
.fonte
Casca , 4 bytes
Pega e retorna uma lista de seqüências de caracteres (o intérprete associa implicitamente o resultado por novas linhas antes de imprimir). A primeira string é invertida. Experimente online!
Explicação
No Husk, multiplicar uma sequência por um número a repete muitas vezes, também a revertendo se o número for negativo.
fonte
JavaScript (ES6), Firefox, 43 bytes
Esta versão abusa do algoritmo de classificação do Firefox . Ele gera lixo no Chrome e não altera as strings no Edge.
Casos de teste
Mostrar snippet de código
Ou Experimente online! (Macaco aranha)
JavaScript (ES6), 45 bytes
Casos de teste
Mostrar snippet de código
fonte
APL (Dyalog Unicode) , 10 bytes
Funciona nos dois sentidos:
Experimente online! com
⎕IO←1
Experimente online! com
⎕IO←0
Como funciona:
fonte
Perl 5, 17 + 2 (-pl) = 19 bytes
linhas ímpares invertidas
linhas pares invertidas
Após o comentário de @ Martin: a entrada precisa ter um avanço de linha à direita.
experimente online
fonte
Haskell , 27 bytes
Experimente online!
Haskell , 30 bytes
Experimente online!
Recursão FTW.
fonte
05AB1E ,
54 bytesExperimente online!
Explicação
fonte
K (oK) ,
1714 bytesSolução:
Experimente online!
Exemplo:
Explicação:
Aplique
reverse
em índices ímpares da lista de entrada:Notas:
&(#x)#0 1
para&2!!#x
salvar 3 bytesfonte
APL (Dyalog) , 12 bytes
Experimente online!
fonte
Python 2 ,
4036 bytes-4 bytes graças a @ Mr.Xcoder
Experimente online!
Saídas modificando a lista de entrada
Python 2 , 43 bytes
Experimente online!
fonte
Alumínio , 66 bytes
Experimente online!
fonte
J , 9 bytes
Reduza da direita para a esquerda, revertendo todas as seqüências no resultado e acrescentando a próxima sequência como está.
Experimente online!
Podemos fazer 6 usando a abordagem de ngn , mas haverá espaços extras:
Experimente online!
fonte
R , 85 bytes
Experimente online!
Entrada de stdin e saída para stdout.
Cada linha deve ser finalizada por um avanço de linha / retorno de carro / CRLF e é impressa com uma nova linha correspondente. Portanto, as entradas precisam ter um avanço de linha à direita.
fonte
Geléia ,
54 bytesExperimente online!
Obrigado HyperNeutrino por -1 bytes! (na verdade, porque eu nunca soube como
ƭ
funciona devido à falta de documentação, desta vez tive sorte)fonte
¦
comm
(7 bytes).s2U2¦€;/
também tem 7 bytes.T-SQL, 65 bytes
Nossas regras de entrada padrão permitem que o SQL insira valores de uma tabela preexistente e, como o SQL é inerentemente desordenado, a tabela deve ter números de linha para preservar a ordem do texto original.
Eu defini a tabela com uma coluna de identidade para que possamos simplesmente inserir linhas de texto sequencialmente (não contadas no total de bytes):
Então, para selecionar e reverter linhas alternadas:
Note que eu posso salvar 11 bytes, excluindo o
ORDER BY i
, e que é provável para retornar a lista na ordem original para qualquer período razoável (que certamente não para o exemplo 4-line). Mas o SQL só garante isso se você incluir asORDER BY
, portanto, se tivéssemos, digamos, 10.000 linhas, definitivamente precisaríamos disso.fonte
Perl 6 , 44 bytes
Tente
fonte
Delimitado por vírgula:
Stax , 12 bytes
Execute e depure
entrada: ABC, def, GHI, jkl, MNO, pqr, STU
Nova linha delimitada:
Stax , 8 bytes
Execute e depure
entrada:
saída para ambos:
fonte
Na verdade , 7 bytes
Explicação:
Experimente online!
fonte
Alice , 13 bytes
Experimente online!
Entrada através de argumentos de linha de comando separados. Inverte a primeira linha (e todas as outras linhas depois disso).
Explicação
fonte
ML padrão (MLton) , 51 bytes
Experimente online! Exemplo de uso:
$ ["abc","def","ghi"]
rendimentos["abc","fed","ghi"]
.Explicação:
$
é uma função recorrente em uma lista de seqüências de caracteres. Ele pega duas stringsa
e,b
da lista, mantém a primeira inalterada e reverte a segunda, transformando a string em uma lista de caracteres (explode
), invertendo a lista (rev
) e transformando-a novamente em uma string (implode
).fonte
Retina , 18 bytes
Experimente online! Explicação: O primeiro estágio inverte a primeira linha e, em seguida, o segundo estágio imprime as duas primeiras linhas, após o que o terceiro estágio as exclui. O programa inteiro se repete até não sobrar nada. Uma nova linha à direita pode ser removida ao custo de um líder
;
.fonte
Wolfram Language (Mathematica) , 33 bytes
Experimente online!
Como funciona
StringReverse@*Append
, quando recebe uma lista de cadeias e outra como entrada, adiciona a cadeia ao final da lista e depois reverte todas as cadeias.Fold
Ao inserir a entrada com relação ao acima, significa que:Cada linha é revertida uma vez menos que a linha anterior, portanto as linhas alternam a direção.
fonte
CJam , 11 bytes
Experimente online! (Os literais da matriz CJam usam espaços para separar elementos)
Explicação:
Explicação para a
Waf.%
parte "magia negra":W
é uma variável pré-inicializada para-1
.a
agrupa um elemento em uma matriz, assimWa
é[-1]
.%
aparece um númeron
e uma matriza
e pega todos osn
elementos da matriz. Quandon
é negativo, também o inverte, o que significa queW%
inverte uma matriz..
seguido por uma operação binária aplica essa operação aos elementos correspondentes de uma matriz, assim[1 2 3] [4 5 6] .+
é[5 7 9]
. Se uma matriz for mais longa que a outra, os elementos serão mantidos sem modificação, o que significa queWa.%
reverte o primeiro elemento de uma matriz.f
seguido de uma operação binária pegará um elemento da pilha e, em seguida, agirá como{<that element> <that operation>}%
, ou seja, percorrer cada elemento da matriz, empurrar seu elemento, empurrar o elemento que primeiro saiu da pilha, executar a operação e coletar os resultados de volta para uma matriz. Isso significa queWa.f%
reverte o primeiro elemento de cada elemento da matriz.fonte
V , 4 bytes
Experimente online!
fonte
Rápido ,
90858272 bytes-10 bytes graças a @ Mr.Xcoder
fonte
print
e soltar a declaração do tipo de retorno:func f(a:[String]){print(a.reduce([]){$0.map{"\($0.reversed())"}+[$1]})}
Ruby , 19 + 2 = 21 bytes
+2 bytes para
-nl
sinalizadores.Experimente online!
Explicação
Praticamente idêntico à resposta do Perl 5 , embora eu não tivesse visto essa quando escrevi isso.
Com espaço em branco, o código fica assim:
A
-p
opção faz com que o Ruby efetivamente envolva seu script em um loop como este:A variável especial
$_
contém a última linha lida porgets
e$.
contém o número da linha.O
-l
possibilita linha automática terminando de processamento, que chama automaticamentechop!
em cada linha de entrada, que remove o o\n
antes de revertê-la.fonte
GNU sed , 31 + 1 = 32 bytes
+1 byte para
-r
sinalizador.Experimente online!
Explicação
fonte
Carvão , 9 bytes
Experimente online! Link é a versão detalhada do código. Nota: O carvão vegetal não sabe o comprimento da lista, então eu o adicionei como um elemento extra. Explicação:
fonte
Befunge-93, 48 bytes
Experimente Online
Imprime a primeira linha no sentido inverso. Tem uma nova linha à direita.
Basicamente, ele funciona alternando entre a impressão à medida que recebe e armazenando a entrada na pilha. Quando atinge uma nova linha ou final de entrada, imprime a pilha, imprime uma nova linha e modifica o caractere em 0,4 para ser um # ou um não-op para alterar o modo. Se foi o fim da entrada, finalize o programa
fonte