Un boustrophédon est un texte dans lequel toutes les lignes d'écriture sont inversées ou inversées, avec des lettres inversées.
Dans ce défi, nous allons simplement inverser toutes les lignes, mais nous laisserons les caractères réels utilisés. Vous pouvez choisir les lignes à inverser, à condition que ce soit toutes les autres.
Vous pouvez utiliser le texte dans n’importe quel format approprié, à condition de ne pas prendre en charge zéro ou plusieurs lignes d’ASCII imprimables, chacune contenant zéro caractère ou plus.
Exemples:
["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"]
Réponses:
APL (Dyalog Classic) , 4 octets
L'entrée est un vecteur de vecteurs de caractères.
⌽
est une fonction qui inverse un vecteur (⌽
s’applique de façon monadique).⊢
est " dex " - une fonction qui retourne son argument correct. Lorsque composé (∘
) avec une autre fonction,f
il oblige celle-ci à être monadique, ce quiA ⊢∘f B
est équivalent àA ⊢ (f B)
et par conséquentf B
.\
est l' opérateur de numérisation .g\A B C ...
est le vecteurA (A g B) (A g (B g C)) ...
oùg
est appliqué dyadiquement (notation infixe). Le remplacement⊢∘⌽
pourg
elle simplifie à:Les inversions aux positions paires (ou impaires, selon votre décompte) s’annulent.
Essayez-le en ligne!
la source
]&|.&.>/\
pour ceux qui savent lire J.Haskell , 26 octets
Essayez-le en ligne! Exemple d'utilisation:
zipWith($)l ["abc","def","ghi"]
rendements["abc","fed","ghi"]
.Explication:
l
est une liste infinie de fonctions alternant entre laid
fonction d'entité et lareverse
fonction.La fonction principale zips
l
et la liste des entrées avec l’application de fonction$
, c’est pour une entrée que["abc", "def", "ghi"]
nous obtenons[id$"abc", reverse$"def", id$"ghi"]
.la source
Husk , 4 octets
Prend et retourne une liste de chaînes (l'interpréteur joint implicitement le résultat par des lignes nouvelles avant l'impression). La première chaîne est inversée. Essayez-le en ligne!
Explication
Dans Husk, multiplier une chaîne avec un nombre le répète plusieurs fois, l'inversant également si le nombre est négatif.
la source
JavaScript (ES6), Firefox, 43 octets
Cette version abuse de l'algorithme de tri de Firefox . Il génère des déchets sur Chrome et ne modifie pas les chaînes sur Edge.
Cas de test
Afficher l'extrait de code
Ou essayez-le en ligne! (SpiderMonkey)
JavaScript (ES6), 45 octets
Cas de test
Afficher l'extrait de code
la source
APL (Dyalog Unicode) , 10 octets
Fonctionne dans les deux sens:
Essayez-le en ligne! avec
⎕IO←1
Essayez-le en ligne! avec
⎕IO←0
Comment ça marche:
la source
Perl 5, 17 + 2 (-pl) = 19 octets
lignes impaires inversées
même les lignes inversées
Après le commentaire de @ Martin: l'entrée doit avoir un retour à la ligne final.
essayez-le en ligne
la source
Haskell , 27 octets
Essayez-le en ligne!
Haskell , 30 octets
Essayez-le en ligne!
Récursion FTW.
la source
05AB1E ,
54 octetsEssayez-le en ligne!
Explication
la source
K (oK) ,
1714 octetsSolution:
Essayez-le en ligne!
Exemple:
Explication:
Appliquer
reverse
aux indices impairs de la liste d'entrée:Remarques:
&(#x)#0 1
pour&2!!#x
économiser 3 octetsla source
APL (Dyalog) , 12 octets
Essayez-le en ligne!
la source
Python 2 ,
4036 octets-4 octets grâce à @ Mr.Xcoder
Essayez-le en ligne!
Sorties en modifiant la liste des entrées
Python 2 , 43 octets
Essayez-le en ligne!
la source
Aluminium , 66 octets
Essayez-le en ligne!
la source
J , 9 octets
Réduisez de droite à gauche, en inversant toutes les chaînes du résultat et en ajoutant la chaîne suivante au début.
Essayez-le en ligne!
Nous pouvons faire 6 en utilisant l'approche de ngn , mais il y aura des espaces supplémentaires:
Essayez-le en ligne!
la source
R , 85 octets
Essayez-le en ligne!
Entrée de stdin et sortie sur stdout.
Chaque ligne doit être terminée par un saut de ligne / retour chariot / CRLF, et elle est imprimée avec une nouvelle ligne correspondante. Donc, les entrées doivent avoir un retour à la ligne final.
la source
Gelée ,
5 à4 octetsEssayez-le en ligne!
Merci HyperNeutrino pour -1 octets! (en fait parce que je n'ai jamais su comment
ƭ
fonctionne par manque de documentation, cette fois j'ai eu de la chance)la source
¦
avecm
(7 octets).s2U2¦€;/
est également 7 octets.T-SQL, 65 octets
Nos règles d'entrée standard permettent à SQL d' entrer des valeurs à partir d'une table préexistante. Etant donné que SQL n'est pas ordonné, la table doit comporter des numéros de ligne pour préserver l'ordre du texte d'origine.
J'ai défini la table avec une colonne d'identité afin que nous puissions simplement insérer des lignes de texte séquentiellement (non comptées dans le total d'octets):
Donc, pour sélectionner et inverser les lignes en alternance:
Notez que je peux économiser 11 octets en excluant le
ORDER BY i
, ce qui est susceptible de renvoyer la liste dans l'ordre d'origine pour une longueur raisonnable (c'est certainement le cas pour l'exemple de 4 lignes). Mais SQL ne le garantit que si vous incluez leORDER BY
, donc si nous avions, par exemple, 10 000 lignes, nous en aurions certainement besoin.la source
Perl 6 , 44 octets
L'essayer
la source
Délimité par des virgules:
Stax , 12 octets
Exécuter et déboguer
entrée: ABC, def, GHI, jkl, MNO, pqr, STU
Délimité par une nouvelle ligne:
Stax , 8 octets
Exécuter et déboguer
contribution:
sortie pour les deux:
la source
En fait , 7 octets
Explication:
Essayez-le en ligne!
la source
Alice , 13 octets
Essayez-le en ligne!
Entrée via des arguments de ligne de commande séparés. Inverse la première ligne (et toutes les autres lignes après).
Explication
la source
Standard ML (MLton) , 51 octets
Essayez-le en ligne! Exemple d'utilisation:
$ ["abc","def","ghi"]
rendements["abc","fed","ghi"]
.Explication:
$
est une fonction récurrente sur une liste de chaînes. Il prend deux chaînesa
et,b
de la liste, la première reste inchangée et inverse la seconde en transformant la chaîne en liste de caractères (explode
), en inversant la liste (rev
) et en la retournant en chaîne (implode
).la source
Retina , 18 octets
Essayez-le en ligne! Explication: La première étape inverse la première ligne, puis la deuxième étape imprime les deux premières lignes, après quoi la troisième étape les supprime. L'ensemble du programme se répète ensuite jusqu'à ce qu'il ne reste plus rien. Une nouvelle ligne peut être supprimée au prix d’une avance
;
.la source
Wolfram Language (Mathematica) , 33 octets
Essayez-le en ligne!
Comment ça marche
StringReverse@*Append
, lorsqu’une liste de chaînes et une autre chaîne sont données en entrée, ajoute la chaîne à la fin de la liste, puis inverse toutes les chaînes.Fold
l’entrée par rapport à ce qui précède signifie que nous:Chaque ligne est inversée une fois de moins que la ligne précédente, de sorte que les lignes changent de direction.
la source
CJam , 11 octets
Essayez-le en ligne! (Les littéraux de tableau CJam utilisent des espaces pour séparer des éléments)
Explication:
Explication de la partie
Waf.%
"magie noire":W
est une variable pré-initialisée à-1
.a
enroule un élément d'un tableau, doncWa
est[-1]
.%
fait apparaître un nombren
et un tableaua
et prend chaquen
e élément du tableau. Quandn
est négatif, il l'inverse également, ce qui signifie que l'W%
inverse d'un tableau..
suivi d'une opération binaire applique cette opération aux éléments correspondants d'un tableau, il en[1 2 3] [4 5 6] .+
est de même[5 7 9]
. Si un tableau est plus long que l'autre, les éléments sont conservés sans modification, ce qui signifie queWa.%
le premier élément est inversé.f
suivi d'une opération binaire va prendre un élément de la pile et ensuite agir{<that element> <that operation>}%
, c'est-à-dire passer en revue chaque élément du tableau, pousser son élément, pousser l'élément extrait de la pile, exécuter l'opération, puis collecter les résultats. retour dans un tableau. Cela signifie queWa.f%
renverse le premier élément de chaque élément du tableau.la source
V , 4 octets
Essayez-le en ligne!
la source
Swift ,
90858272 octets-10 octets grâce à @ Mr.Xcoder
la source
print
et supprimer la déclaration de type de retour:func f(a:[String]){print(a.reduce([]){$0.map{"\($0.reversed())"}+[$1]})}
Ruby , 19 + 2 = 21 octets
+2 octets pour les
-nl
drapeaux.Essayez-le en ligne!
Explication
Pratiquement identique à la réponse à Perl 5 , bien que je n’aie pas vu celle-là lorsque j’ai écrit ceci.
Avec les espaces, le code ressemble à ceci:
L’
-p
option permet à Ruby d’envelopper efficacement votre script dans une boucle comme celle-ci:La variable spéciale
$_
contient la dernière ligne lue pargets
et$.
contient le numéro de ligne.La
-l
permet la ligne automatique de fin de traitement, qui appelle automatiquementchop!
sur chaque ligne d'entrée, ce qui élimine le l'\n
avant le renverser.la source
GNU sed , 31 + 1 = 32 octets
+1 octet pour le
-r
drapeau.Essayez-le en ligne!
Explication
la source
Charbon de bois , 9 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Note: Charcoal ne connaît pas la longueur de la liste, je l'ai donc ajoutée en tant qu'élément supplémentaire. Explication:
la source
Befunge-93, 48 octets
Essayez-le en ligne
Imprime la première ligne en sens inverse. A une nouvelle ligne de fuite.
Fondamentalement, cela fonctionne en alternant entre l’impression au fur et à mesure de l’entrée et le stockage de l’entrée sur la pile. Lorsqu'il atteint une nouvelle ligne ou une fin d'entrée, il imprime la pile, une nouvelle ligne et modifie le caractère à 0,4 pour qu'il soit un # ou un no-op pour changer de mode. Si c'était la fin de la saisie, terminez le programme
la source