Ecrivez un programme ou une fonction qui prend une chaîne non vide à une seule ligne. Vous pouvez supposer qu'il ne contient que de l' espace ASCII imprimable .
Imprimez ou renvoyez une forme de losange art ASCII semblable à un citron ou à une lime fabriquée à partir des préfixes de la chaîne.
Supposons que la chaîne d'entrée soit longue de n lettres. Ensuite, une telle forme consiste en 2n - 1 colonnes d’art ASCII cousues ensemble, chacune consistant en 2n - 1 lignes. En partant de 1, la k- ième colonne a une largeur de f (k) = min (k, 2n - k) et contient les copies f (k) des premiers caractères f (k) de l’entrée, centrées verticalement, avec un seul blanc lignes séparant les copies.
Par exemple, si l'entrée est Lemon
, le résultat devrait être:
Lemon
Lemo Lemo
Lem Lemon Lem
Le Lemo Lemo Le
L Lem Lemon Lem L
Le Lemo Lemo Le
Lem Lemon Lem
Lemo Lemo
Lemon
Si l'entrée est lime
la sortie devrait être:
lime
lim lim
li lime li
l lim lim l
li lime li
lim lim
lime
Et le même schéma est suivi pour les autres entrées:
a
a
Be
Be
B B
Be
/\
/\
/ /
/\
cat
cat
ca ca
c cat c
ca ca
cat
|||
|||
|| ||
| ||| |
|| ||
|||
.__.
.__.
.__ .__
._ .__. ._
. .__ .__ .
._ .__. ._
.__ .__
.__.
$tring
$tring
$trin $trin
$tri $tring $tri
$tr $trin $trin $tr
$t $tri $tring $tri $t
$ $tr $trin $trin $tr $
$t $tri $tring $tri $t
$tr $trin $trin $tr
$tri $tring $tri
$trin $trin
$tring
Les lignes dans la sortie peuvent avoir des espaces de fin et il peut y avoir une nouvelle ligne de fin optionnelle.
Le code le plus court en octets gagne.
Réponses:
Matlab,
140 136 128124 octetsFondamentalement, commence par la section du milieu, puis ajoute / ajoute les versions abrégées / modifiées, étape par étape.
Merci pour 8 octets @LuisMendo!
Par exemple,
MATLAB
nous obtenons:la source
flip
: /Python 2,
121110 octets116 octets si vous utilisez
raw_input
. Le programme utilise essentiellement un masque basé sur la distance L1-norm / Manhattan du centre, ainsi que sur la parité de cette distance par rapport à la parité de la longueur entrée.(Merci à @Lynn pour -9 octets et ouvrant la voie à 2 autres)
la source
s
est utilisé à la fin de la longue ligne de commande, donc malheureusement ce n'est pas possibleR
.R
rend le code plus ordonné!MATL , 44 octets
Je me suis inspiré de la réponse de @ flawr (bien que l'algorithme ne soit pas le même)
L'entrée est une chaîne avec des guillemets simples.
Essayez-le en ligne!
la source
JavaScript (ES6), 132 octets
Tester
la source
Pyth, 32 octets
Manifestation
la source
Gelée,
3226 octetsEssayez-le en ligne!
EDIT: Dennis a enregistré 6 octets. Merci!
la source
JavaScript,
187178 octetsUne approche de bitwise. Function
m
définit un masque en partant de2 ** length
, par exemple00100
en binaire, et en définissantm(n) = m(n-1) << 1 | m(n-1) >> 1
pour la première moitié. Fait intéressant, la seconde moitié peut être définie commem(n) = m(n-1) << 1 & m(n-1) >> 1
. (Bien que le programme choisisse plutôt de définirm(n) = m(2 * length - 1)
pour la seconde moitié) À partir de là, ces masques peuvent être utilisés pour déterminer si un mot ou un espace doit apparaître en cochant2 ** column & m(row)
. Bien sûr, en JavaScript, il est plus court d'écrire2 ** something
avec1 << something
...note: écrit en étant fatigué.
Peutpresque sûrement avoir des erreurs.la source
Haskell, 109 octets
la source
Brachylog , 46 octets
Essayez-le en ligne!
Un nombre d'octets épouvantable et une approche probablement pire (pour ne pas dire que Brachylog n'est pas exactement conçu pour l'art ASCII), mais j'ai perdu assez de temps pour le publier de toute façon.
La seule partie intelligente de tout cela est l’utilisation de
a₁
pour générer les espaces verticaux les plus grands en premier tout ena₀
générant les préfixes de mots les plus petits en premier, etzz
pour développer des espaces simples en blocs d’espace correspondant aux largeurs des préfixes.la source
TSQL, 259 octets
Golfé:
Ungolfed:
Violon
la source
C, 167 octets
Ce programme s'attend à ce que le texte d'entrée soit transmis en tant que premier paramètre au programme (via la ligne de commande ou autrement) et écrira la sortie sur stdout.
C’est la première fois que je tente de jouer au code-golf ici, car c’était un défi raisonnable. Je peux donc probablement jouer au golf plus que je n’ai pu le faire à cause de la façon dont j’ai fait.
Explication
Il est assez important de noter l'utilisation de
(n < m) ? n : (m * 2) - n
dans le programme au moins deux fois pour obtenir la distance inversée à partir d'une position centralem
sur une plage dem * 2
avec l'entréen
. S'il existe un moyen plus court de le faire, il pourrait être plus facile de jouer au golf car cet algorithme est important pour le fonctionnement de ce programme.la source
C, 137 octets
Panne:
Cela dessine chaque élément de la grille 2n-1 x 2n-1, avec une fonction de masque déterminant si l’élément actuel doit être un espace ou le mot saisi (le masque vérifie la forme en losange et le motif en damier).
la source