Avec l'entrée d'une liste de mots, affichez les mots avec leurs lettres disposées en diagonale:
p
r
o
p g
u r
z a
a z m
n l m
d e i
c s n
o g
d
g e
o
l
f
(Ce qui précède devrait être la sortie pour l'entrée programming puzzles and code golf
.)
Pour être précis, chaque mot commence sur la première colonne et trois lignes en dessous du mot précédent, et chaque lettre successive déplace une colonne vers la droite et une ligne vers le bas.
L'entrée peut être fournie sous forme d'une chaîne de mots unique, séparée par un seul espace, ou d'une liste / tableau de mots. Les mots ne seront composés que de lettres minuscules a-z
et comporteront toujours au moins un caractère.
La sortie peut être une chaîne unique, un tableau de lignes ou un tableau de caractères. Les espaces de début ou de fin ne sont pas autorisés, à l'exception d'un seul nouveau trait de fin.
Autres cas de test:
a bcd efgh i j
a
b
c
d
e
f
g
i h
j
x
x
verylongword short
v
e
r
s y
h l
o o
r n
t g
w
o
r
d
Puisqu'il s'agit de code-golf , le code le plus court en octets va gagner!
Réponses:
Vim,
85, 76, 66, 52 frappes / octetsQuand j'ai regardé ce défi pour la première fois, j'ai pensé "C'est parfait pour vim!" Et puis quand j'ai essayé, tout s'est mal passé. Le voici, dans toute sa gloire de hacky en désordre:
Essayez-le en ligne, grâce à l’interpréteur V (principalement) compatible.
Explication:
Au début, je pensais pouvoir faire cette version magnifiquement simple de 37 octets:
Malheureusement, ce n'est pas si simple. Prenons cela ligne par ligne:
Cela active une fonctionnalité appelée «édition virtuelle». Cela permet au curseur de se déplacer vers des colonnes qui n'existent pas encore. Cette réponse serait fondamentalement impossible sans elle.
Nous devons maintenant séparer les mots sur des lignes différentes. Nous allons donc remplacer chaque espace par 3 nouvelles lignes. Puisqu'il s'agit d'une commande ex, nous pouvons l'exécuter simultanément avec notre dernière commande ex
:se ve=all
en séparant les deux avec une barre.Maintenant, le tampon ressemble à ceci:
Voici où commence le plaisir. Nous mettons en place la macro récursive traditionnelle avec:,
qq
puis appelons ceci:Ensuite, nous finissons la macro récursive avec
@qq@q
. À ce stade, nous avons toutes les diagonales, nous avons juste besoin de faire un peu de nettoyage.la source
Tortue ,
2826 octetsOh mon Dieu, je parais battre un langage spécialement conçu pour le golf. c'est un grand jour.
Essayez-le en ligne!
Explication
(écrire signifie écrire dans la cellule de la grille, le caractère pointé signifie que le caractère entré dans le pointeur de la chaîne)
notez l'espace de fin.
L'entrée nécessite également un espace de fin. vu que python peut prendre une liste, cela ressemble beaucoup à prendre une liste dans Turtlèd
la source
MATL , 28 octets
Input est un tableau de cellules de chaînes, avec des virgules comme séparateurs facultatifs:
ou
Essayez-le en ligne! Ou vérifiez tous les cas de test: 1 , 2 , 3 , 4 .
Explication
Considérez l'entrée suivante comme exemple:
Vous pouvez afficher les résultats partiels (contenu de la pile) en insérant le symbole de commentaire
%
à n’importe quel point du code. Par exemple, affichez le contenu de la pile après la quatrième fonction (&n
).la source
JavaScript (ES6),
11810984 octetsPrend les entrées sous forme de tableau de mots. Retourne un tableau de tableaux de caractères.
Version alternative, 109 octets
Retourne une chaîne.
Afficher l'extrait de code
la source
Common Lisp,
673668597 octetsTerrible solution, je sais. Je vais probablement éditer cela plus après un peu de sommeil.
Usage:
Cela boucle sur chaque mot de la liste fournie et ajoute les caractères appropriés à la ligne en cours. Un rembourrage approprié est fourni par mon utilisation sous la moyenne de
format
.Remarque: je suis nouveau dans Common Lisp, mais j'en sais assez pour comprendre que cela pourrait nécessiter beaucoup d'amélioration.
la source
C #, 336 octets:
Golfé:
Ungolfed:
Essai:
la source
Func<string[], string>
et effectuez diverses modifications pour 297 octets,s=>{int i=0,x=0,y=0,r=0,l=s.Length,q=2*(s.Max().Length+l)+1,j;var a=new char[q,q];for(;i<l;i++){y=r;for(j=0;j<s[i].Length;)a[y++,x++]=s[i][j++];x=0;r+=3;}var o="";for(;x<q;x++){var t="";for(y=0;y<q;)t+=a[x,y++];o+=t==string.Join("",Enumerable.Repeat('\0',q))?"":(t.TrimEnd('\0')+"\n");}return o;};
mais vous devez ajouter 18 octets pourusing System.Linq;
i
etj
à la déclaration int en haut et en déplaçant certains++
afin qu'ils soient utilisés sur la dernière utilisation de la variablePython 2, 146 octets
Remarque: les indentations des deux dernières lignes sont
<space>
et<tab>
, ce qui enregistre un octet puisque je n'ai pas besoin de faire un double retrait.L'entrée doit être entrée comme un tableau de chaînes comme suit:
["hello", "world"]
ou['hello', 'world']
. La sortie est un tableau de tableaux de caractères.Il y a probablement une meilleure façon de faire ça ...
EDIT Merci à Doorknob pour avoir signalé un crochet manquant. Je l'ai placé avant
*k...
la troisième ligne.la source
Mathematica, 146 octets
Je suis déçu par ce décompte, mais bon.
Définit une fonction anonyme qui prend une liste de mots (par exemple
{"this","that","these"}
) et renvoie un tableau de caractères à deux dimensions. Pour afficher sous forme de grille, ajoutez un//Grid
à la fin.Convertit les chaînes en tableau, ajoute des lignes supplémentaires, transpose le tableau, ajoute les décalages nécessaires, puis transpose à nouveau.
Exemple de résultat (formaté en grille):
la source
Gelée , 24 octets
Essayez-le en ligne!
Comment?
la source
Python 2, 182 octets
Un peu long, mais du côté positif, il retourne une chaîne sans espace blanc final sur chaque ligne, ni espace blanc final, ni retour à la fin; contraintes auxquelles certaines autres entrées n'obéissent pas.
Une liste de mots est passée à la fonction; certains "espaces" sont ajoutés à cette liste, puis l'algorithme mappe une ligne, une paire de colonnes sur un motNuméro, un caractèreNumier dans la liste développée. (Ceci est un peu l'inverse de la stratégie habituelle vue dans d'autres solutions).
Si nous autorisons les espaces en fin de ligne sur toutes les lignes sauf la dernière, nous pouvons faire un peu mieux (163 octets):
la source
q / kdb +,
13010994908684 octetsSolution:
Exemples:
Explication (non golfée):
L'essentiel est de créer un groupe de chaînes de longueur égale à partir de la chaîne d'entrée, de les retourner (de les faire pivoter), puis d'ajouter les espaces blancs appropriés pour obtenir un résultat ressemblant à ceci:
qui est retourné à nouveau et imprimé sur la sortie standard.
Voici une ventilation du concept ligne par ligne:
Remarques:
Quelques façons de supprimer quelques (11) octets faciles si nous voulions vraiment :
f:
et en laissant une fonction anonyme-1
et;
et en renvoyant une liste de chaînes plutôt qu'en imprimant sur la sortie standard.Modifications:
rtrim
pour trouver la longueur maximale du pad, suppression de la nécessité de stocker laC
variablemax count each
pour une fonction lambdaa
qui est créée une fois et utilisée deux foisraze
dans la fonction lambda pour enregistrer unraze each
(+)
comme raccourci pourflip
la source
Charbon de bois ,
16 à9 octetsMa première réponse au fusain. Merci à @DLosc pour avoir suggéré
P
etM
au lieu d'utiliserS
etJ
(Jump) pour revenir au début de la ligne (et trois vers le bas).Essayez-le en ligne (verbeux) ou Essayez-le en ligne (pur) .
Explication:
Boucle pendant qu'il y a encore une chaîne d'entrée suivante:
Imprimez cette chaîne sans déplacer le curseur dans le bas à droite:
Et puis déplacez trois positions vers le bas pour la prochaine itération:
la source
θ
variable représente la première entrée. J'attribue donc l'entrée de test à cette variable dans l'en-tête, puis j'écris le reste du code afin que vous puissiez vous débarrasser de laα
variable et effectuer une itération sur les éléments fractionnésθ
. Essayez-le en ligne! (Non en compétition à cause des espaces de tête.)Japt
-Rx
,171613 octetsPrend les entrées sous forme de tableau de mots. Si les espaces en fin de ligne étaient autorisés sur chaque ligne, les 4 derniers caractères pourraient être supprimés pour être liés à la solution de charbon de bois.
Essayez-le ou lancez tous les cas de test
Explication
la source
K4 , 58 octets
Solution:
Exemples:
Explication:
Les chaînes du pad droit ont donc la même longueur, transposent, se joignent avec
" "
, le pad gauche génère des diagonales, puis le pavé droit pour corriger les longueurs et transposer en arrière. Prend une liste de chaînes et renvoie une liste de chaînes. Probablement golfable mais toujours plus court que ma solution q / kdb +.la source
Perl 6 , 73 octets
Essayez-le en ligne!
L'argument d'entrée est une liste de mots. La sortie est un tableau de caractères.
la source
PHP , 100 octets
Essayez-le en ligne!
la source