Tâche
Avec une chaîne non vide de lettres ASCII minuscules a
- z
, prenez son premier caractère et:
- Entourez-le d'un carré de copies du deuxième caractère,
- Entourez cela avec un diamant de copies du troisième caractère,
- Entourez-le d'un carré de copies du quatrième caractère…
… Alternant bordures carrées et losanges jusqu'à la fin de la ficelle. Les espaces vides entre les bordures doivent être représentés par des espaces ASCII ( ).
Pour ajouter une bordure carrée , dessinez un carré exactement autour de la totalité du «tableau de travail» actuel:
sssssssssss
t s t s
t t s t t s
t t s t t s
t aaa t s t aaa t s
t aca t => st aca ts
t aaa t s t aaa t s
t t s t t s
t t s t t s
t s t s
sssssssssss
Pour ajouter une bordure en diamant , dessinez une forme de diamant centrée qui touche le carré le plus externe en diagonale , mais pas orthogonalement :
s
s s
s s
s s
s s
s s
s s
wwwwwwwwwww s wwwwwwwwwww s
w o w s w o w s
w o o w s w o o w s
w o o w s w o o w s
w o eee o w s w o eee o w s
wo eme ow => s wo eme ow s
w o eee o w s w o eee o w s
w o o w s w o o w s
w o o w s w o o w s
w o w s w o w s
wwwwwwwwwww s wwwwwwwwwww s
s s
s s
s s
s s
s s
s s
s
Votre programme doit sortir le tableau final.
- Chaque ligne peut contenir n’importe quelle quantité d’espaces de fin.
- Vous pouvez générer une liste de chaînes représentant des lignes ou une seule chaîne séparée par une nouvelle ligne avec une nouvelle ligne de fin facultative.
- Les lignes vides de début / fin sont interdites.
- Les colonnes d'espaces en tête sont également interdites.
C'est du code-golf . Le code le plus court en octets gagne.
Cas de test
Les exemples ci - dessus sont les résultats attendus pour cat
, cats
, meow
et meows
, dans l' ordre de lecture. Quelques autres cas à manipuler:
Pour l’entrée
a
, votre programme devrait produire:a
Pour l’entrée
ab
, votre programme devrait produire:bbb bab bbb
Pour l’entrée
codegolf
, votre programme devrait produire:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff f l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l ooooooooooooooooooooooooooo l f f l o g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g eeeeeeeeeee g o l f f l o g e d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d ooo d e g o l f fl og ed oco de go lf f l o g e d ooo d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d e g o l f f l o g eeeeeeeeeee g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g o l f f l ooooooooooooooooooooooooooo l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Mise en oeuvre de référence
J'ai écrit un code de Julia que la sortie de votre programme devrait correspondre (au moins visuellement). Essayez-le en ligne!
\r\n
) au lieu d'un (\n
)?prompt
etconsole.log
. Vous pouvez également utiliser des modèles de chaînes qui vous permettent d'économiser 2 octets par appel de fonction sur les chaînes (comme lefill(' ')
devientfill` `
)S-i-1
àS+~i
, eti%2||o--
ào-=~i&1
.a=Array(D*2+1).fill
.map((_,$,a)=>[...a])
vous sauve 10 octets.Haskell,
138137136 octetsDéfinit une fonction
f
qui renvoie le résultat sous forme de liste de lignes-1 octet grâce à @Lynn
la source
C ++ -
373 366 362359 octets-1 par @TuukkaX, -6 par @Kevin Cruijssen, -4 par importations, -3 par @Baum mit Augen
http://ideone.com/5y54mx
Remarque: Cette solution utilise le point ('.') Comme caractère "espace" pour rendre les espaces vides plus visibles. Pour utiliser un espace à la place, il faut passer
S(s,46)
àS(s,32)
. Le score reste le même.Ungolfed:
Essayez ungolfed en ligne
Comment utiliser:
Sortie:
la source
std::vector<S> V
a un espace blanc inutile.if(A(i)<=R(k)&&A(j)<=R(k)&&k%2?A(i)==R(k)||A(j)==R(k)
le&&
et||
peut être&
et|
pour -3 octets; etint r=R(w.size()-1),...
peut devenirint l=w.size(),r=R(l-1),...
etfor(k=0;k<w.size();++k)
peut devenirfor(k=0;k<l;++k)
pour un autre -3 octets.using S=std::string;
pour sécuriser deux octets partypedef
.Mathematica, 167 octets
L'entrée doit être une liste de caractères.
par exemple
la source
JavaScript (ES6), 252 octets
Où
\n
représente le caractère de nouvelle ligne littéral.la source
JavaScript (ES6), 204
229 238Une fonction anonyme renvoyant un tableau de chaînes
Moins joué au golf
Tester
la source
Java -
429417 octetsLe mérite revient à @Anedar car cela a eu une influence sur la structure de cette réponse.
Ungolfed:
la source
JavaScript (ES6), 322 octets
Non compétitif
Moins de Golphed
Test avec
Gains faciles en laissant de côté les instructions de tête
var L=
et.join("\n")
de retour pour -17 octets, mais vous les recopiez pour tester le code : DC'est une réponse en deux passes, évaluant la largeur (
w
) requise pour tracer un tracé carré ou en losange, avant de tracer des pointsP
dans la deuxième passe en utilisant la rotation et la translation.d
est la dimension (hauteur ou largeur) d'un carré non pivoté avant translation ou rotation.Rotation et échelle par √2 détails de la réponse Mathematica . Utilisation du modèle de chaîne étiqueté de la première réponse dans ce fil . Merci aux deux pour l'apprentissage. Votes pour la question et les réponses.
la source
Powershell,
269245238 octetsUngolfed, expliqué et test scripté:
la source