Mots tordus!
Étant donné une chaîne et un entier positif. Vous devez tordre la corde, d'avant en arrière.
Exemple d'entrée / sortie
Contribution
Programming Puzzles & Code Golf
4
Sortie
Prog
mmar
ing
zzuP
les
oC &
de G
flo
Contribution
L'entrée peut être prise via STDIN ou un argument de fonction. L'entrée consistera en une chaîne et un entier positif, n . Le nombre entier déterminera la longueur de chaque ligne torsadée.
La chaîne est tordue d'avant en arrière. Une entrée de HELLO, WORLD!
et 5 ressemblerait à ceci:
Sortie
La sortie sera le texte tordu. Ce ne peut pas être un espace de fuite. Si la longueur de la chaîne en entrée n'est pas divisible, insérez un espace jusqu'à ce que la ligne soit remplie:
Un exemple de ceci:
Contribution
Hello, World!
5
Sortie (notez les espaces à la fin)
Hello
roW ,
ld!
Réponses:
Pyth,
1915Pré-remplit la chaîne, puis inverse l’autre ligne lorsqu’elle l’imprime. Le remplissage est égal à la taille de la boîte, mais la dernière ligne après avoir découpé l'entrée est supprimée.
Essayez-le ici
la source
CJam, 19 octets
Exemple d'entrée:
Des explications
la source
Bonhomme de neige 1.0.1 , 91 octets
Ou tous sur une seule ligne (pour l'esthétique, ou plus précisément l'anti-esthétique), au prix de 2 octets:
C'est trop court pour Snowman. (C'est probablement le plus court possible; cependant, j'ai travaillé assez longtemps au golf.)
Cela comporte une mise en garde: il sortira avec une erreur (mais produira toujours la sortie correcte) 50% du temps, lorsque la dernière ligne n'est pas inversée. (C’est parce que j’ai l'habitude
ag
de regrouper les éléments du tableau en groupes de deux pour pouvoir inverser les uns sur les autres, mais je ne vérifie pas si le dernier élément contient les deux éléments attendus. Il tentera donc d'accéder à un élément inexistant si il y a un nombre impair de lignes.)Ungolfed / explication:
la source
Python 2, 60
Prend des
n
caractères à la fois dès le débuts
, en les imprimant avec une directiond
alternant entre1
et-1
. Pour l'espacement sur la dernière ligne, ils
est complété d'n
espaces à la fin avant d'être haché, ce qui ne l'affecte que s'il reste moins den
caractères.Une solution récursive sauverait un caractère (59) sauf qu’il laisse une nouvelle ligne, ce qui n’est pas autorisé.
la source
Haskell ,
83 à75 octetsUne
chunksOf
mise en œuvre simple avec take and drop, appliquant un nombre pair ou impair de retours à la sortie au fur et à mesure.Merci à @BMO pour cinq octets et à @ Øjanjohansen pour trois octets!
Essayez-le en ligne!
la source
cycle
économise 5 octets, essayez-le en ligne!g
et échangen
etl
: Essayez en ligne!Coincé ,
42414038 octetsC'est un peu trop long, probablement essayer de jouer plus!
L'entrée devrait être comme
"string"|n
.Explication:
la source
Haskell, 108 octets
C'est un peu long, jeez. Ici c'est en action:
la source
let
expression?let
instruction deux-en-un , séparée par un point-virgule. Normalement, vous utiliseriez des nouvelles lignes et des indentations, mais Haskell vous permet également d'écrirelet a=b; c=d in expr
.(%) :: String -> String -> String
au lieu deIO ()
.Python 2, 109 octets
Il a fallu ajouter un rembourrage avec des espaces pour que la dernière ligne soit correcte.
Essayez-le ici
la source
Lua,
918888848382 octetsAncienne version:
Nouvelle version:
la source
O, 60 octets
Mon tout premier programme O, et un long en plus!
Démo en direct.
la source
Perl, 87 octets
Ancienne version (affiche un retour à la ligne):
La chaîne est transmise en tant qu'argument de fonction sans nouvelle ligne. Appelle comme ça:
la source
Oreillons, 86 octets
Bien que cela puisse être 2 octets plus court si vous supprimez le premier ",!" caractères dans l'instruction R (extrait de STDIN); qui ajoute un retour chariot entre l’entrée et la sortie. Si ce n'était pas là, la sortie est techniquement correcte, mais la première ligne apparaîtrait ajoutée à la chaîne d'entrée. [[Le terminal standard Mumps que j'utilise n'a pas d'écho local. ]] En l'état, voici le test:
Notez également qu'il y a en fait un retour chariot / Entrée enfoncé entre le '123' et le '6' à la fin de l'entrée. [[L'écho local à nouveau. ]]
Si quelqu'un est intéressé, je peux décrire ce qui se passe dans le code. mais je me rends compte qu'il n'y a pas une tonne d'amateurs d'oreillons là-bas ... :-)
la source
PowerShell, 102 octets
Invoqué comme suit (si enregistré dans un fichier
CodeGolf55051.ps1
)Tentatives précédentes
(plus long ou invalide)
PowerShell, 110 octets
PowerShell, 111 octets
Explication
PowerShell, 180 octets
PowerShell, 196 octets
Explication
(
{...}
dans les commentaires ci-dessus, c’est en fait{0}|{1}|{2}
; j’ai mis{...}
pour une meilleure lisibilité.Powershell, 120 octets (invalide)
la source
param($s,$i)$s+' '*($i-$s.Length%$i)-replace'(.{4})?(.)(.)(.)(.)',"`$1`n`$5`$4`$3`$2`n"-split"`n"|?{$_-ne""}
ce qui vous réduira à 108.[$r]
index final avec[-not$r]
... sinon la première ligne indique l'inverse (c'est-à-dire, de droite à gauche) que dans les exemples fournis. Sinon, exécution vraiment lisse!n
est positif et que la longueur de la chaîne est non négative (par définition), cela signifie que cela(($i-$l%$i)%i)
équivaut à($i-$l%$i)
enregistrer quatre caractères.(-$l)%$i
. Je ne sais pas d'où ça vient. Intéressant, cependant, que ce ne soit pas équivalent, bien que cela devrait être. C'est apparemment une bizarrerie de la façon dont PowerShell (parmi d'autres langages) implémente la fonction modulo, qui est différente de celle attendue pour moi (en mathématique) ou de Wolfram-Alpha. Apparemment, vous devrez vous en tenir à la version la plus longue. Preuve de référence ->((y-x%y)%y) ==> ((y%y)-(x%y%y))%y ==> ((0)-(x%y))%y ==> (-x%y)%y ==> (-x)%y
Clojure, 83 octets,
87 octets,79 octetsplusieurs corrections après les commentaires ci-dessous, merci Ørjan .
Essayez-le en ligne!
Clojure semble souvent tristement absent des réponses au code de golf. Il ne peut certainement pas rivaliser en longueur d’octets avec les langues de golf, mais je pense que l’absence totale est quelque peu injustifiée.
Explication:
s
segmentation dans une séquence de listes de caractères où les listes ont une longueurn
. Le dernier morceau sera complété avec des espaces à la longueur enn
utilisant la "collection de pads" renvoyée(repeat " ")
qui renvoie une séquence infinie d'espaces paresseux#(..)
)#(or %)
qui fonctionnent comme la fonction d' identité et l' inverse (c'est-à-dire[#(or %) reverse #(or %) reverse ...]
) renvoyé par cycle .#(apply ...)
:identity
oureverse
alternativement sur un morceau. Cela se fait via l'(% %2)
expression qui appelle la fonction envoyée en tant que premier argument à la fonction anonyme [ieidentity
oureverse
] en utilisant le second argument [ie le morceau] à la fonction anonyme en tant qu'argument de l'appel.(apply str ...)
à convertir la liste de caractères en une chaîneUne astuce que nous utilisons ici est que beaucoup de fonctions de type clojure, telles que
map
prendre un nombre arbitraire de collections comme arguments, c'est-à-dire(map f coll1 coll2 coll3 ...)
lorsque la fonction f doit simplement accepter autant d'arguments qu'il y a de collections. Dans ce cas, nous envoyons deux collections, une collection de références de fonctions en alternance et la chaîne tronquée.la source
ld!
.fn
ou,defn
c'est bien.) D'un autre côté, votre fonction est autorisée à simplement renvoyer le résultat plutôt que de l'imprimer.APL (Dyalog Unicode) , 19 octets
Essayez-le en ligne!
Tirez le
⊢∘⌽\
tour de la brillante réponse de ngn au défi de la boustrophédonisation .Après avoir réalisé que ma soumission était interrompue pour les lignes comportant de nouvelles lignes principales, j'ai ajouté deux octets supplémentaires. Ci-dessous, la soumission la plus ancienne.
APL (Dyalog Unicode) , 17 octets
Essayez-le en ligne!
la source
Python 3,
110108107103 octets(en regardant d'autres réponses), avec
rjust
:95939290 octetsla source
PHP, 135 octets
Prend deux arguments en ligne de commande, comme indiqué avec
$argv
.la source
CoffeeScript, 131 octets
Cela semble trop long.
la source
Julia, 104 octets
Ungolfed:
la source
Python 3, 101 octets
Essayez-le ici
la source
q, 46
.
la source
{-1@[l;(&)(til(#)l:y cut x)mod 2;'[neg[y]$;|:]];}
(49 octets). Merci pour l'inspiration! :)Q,
6456 octets{}
est une fonction qui devrait être appelée comme{}[x;y]
.x
sera la chaîne.y
sera la longueur des lignes résultantes.Tester:
edit : Utilise des fonctions plus courtes inspirées de l'autre réponse q de @tmartin
la source
Python 2,
8275 octetsJe ne pouvais pas commenter sur @willem mais j'ai rendu son code plus petit.
Essayez iciEssayez icila source
Perl, 72 octets
70 octets, plus 2 octets pour
-p0
.Démo:
Notez que l'entrée lue à partir de STDIN ne peut pas se terminer par une nouvelle ligne (cela coûterait 2 octets supplémentaires).
Explication:
la source
JavaScript ES6, 123 octets
Appel avec
t(input_string, twist_length)
, qui retourne la chaîne de sortie.la source
Perl 5 , 51 octets
Essayez-le en ligne!
la source
Ruby, 80
Démo en ligne: http://ideone.com/w6o8PI
la source
Coffeescript, 151 octets
Trop = (
la source
Bash,
8374Cela alterne entre
cat
etrev
pour les sous-chaînes du premier argument avec une longueur du second argument.Les variables spéciales utilisées incluent
${#1}
(la longueur de la chaîne$1
)((i/$2%2))
(Une expression arithmétique divisant incrémenteur$i
en$2
puis prenant son modulo pour déterminer impair / pair, ce qui dicte d’utiliser ou nonrev
)${1:i:$2}
(sous-chaîne de$1
départ en position$i
avec une longueur de$2
).la source
bash
réponse, que je viens de voir maintenant. Nous avons effectivement la même logique. ... en fait, la réponse de viktorahlström m'a permis de me débarrasser de neuf autres personnages.JavaScript ES6, 113 octets
Juste mon propre crack à ma propre question. Cela va ajouter des espaces, donc c'est divisible par
n
, de cette façon, c'est tout simplement diviser et inverser.la source