Dans le lieu de sépulture du roi Silo des Asturies, il y a une inscription qui lit SILO PRINCEPS FECIT (le roi Silo a fait cela ).
La première lettre se trouve au milieu, et de là on lit en allant dans n'importe quelle direction non diagonale rayonnant vers l'extérieur. La lettre finale se trouve aux quatre coins. Dans ce défi, vous généraliserez le processus pour les réaliser.
Contribution
Une chaîne ( ou équivalent ) et un entier. Vous pouvez faire les hypothèses suivantes sur l'entrée:
- La chaîne aura une longueur impaire.
- L'entier sera un nombre impair compris entre 1 et un de moins de deux fois la longueur de la chaîne.
Sortie
Un inscriptio labyrinthica pour la chaîne, en utilisant l'entier pour la hauteur ou la largeur (voir les modèles pour des exemples de hauteur). La sortie doit être chaque lettre sans espace, saut de ligne par défaut pour votre système / langue.
Cas de test
Notez qu'une entrée de 1 ou (longueur * 2 - 1) entraînera un palindrome horizontal ou vertical.
Input: FOO, 3 Input: BAR, 1 Input: BAR, 3 Input: BAR, 5
Output: OOO Output: RABAR Output: RAR Output: R
OFO ABA A
OOO RAR B
A
R
Input: ABCDE, 5 Input: ABCDE, 3 Input: *<>v^, 5
Output: EDCDE Output: EDCBCDE ^v>v^
DCBCD DCBABCD v><>v
CBABC EDCBCDE ><*<>
DCBCD v><>v
EDCDE ^v>v^
Notation
C'est le code-golf, donc la réponse la plus courte en octets gagne. Failles standard interdites.
Réponses:
J , 27 octets
Essayez-le en ligne!
Un exemple clarifiera l'approche de haut niveau.
Considérer
'ABCDE' f 3
Nous remarquons que ce que nous recherchons est simplement la table "d'addition croisée" de
1 0 1
et3 2 1 0 1 2 3
, qui ressemble à ceci:Nous extrayons ensuite les indices de la chaîne d' origine:
[{~
.Tout le reste du code est juste une arithmétique ennuyeuse et l'utilisation de
i:
pour construire les arguments1 0 1
et3 2 1 0 1 2 3
.la source
Gelée , 12 octets
Essayez-le en ligne!
Un lien dyadique prenant la chaîne comme gauche et la hauteur comme argument de droite. Renvoie une chaîne avec des sauts de ligne. Si une liste de chaînes était acceptable pour la sortie, je peux supprimer l'
Y
enregistrement final d'un octet. Fait intéressant, le «SILO PRINCEPS FECIT» me ressemble à l'art ASCII d'un diamant 3D quand je le regarde sur TIO.Explication
la source
R ,
939187 octets-2 octets grâce à Giuseppe. -4 octets en saisissant la largeur plutôt que la hauteur, comme le permet OP.
Essayez-le en ligne!
Prend la saisie comme vecteur de caractères. La partie clé est
s[1+outer(abs(-w:w),abs(-h:h),'+')]
.abs(-w:w)
abs(-h:h)
abs(-h:h)
outer(abs(-2:2), abs(-1:1), '+')
(nous devons ensuite ajouter 1 car R est indexé sur 1.) Le 0 au centre est l'endroit où doit aller la première lettre de l'entrée.
Le reste est formaté.
la source
Fusain ,
2519 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Dessinez un quart de l'inscription.
Réfléchissez pour terminer l'inscription.
la source
Japt
-R
,1916 octetsEssayez-le
la source
Wolfram Language (Mathematica) ,
5754 octetsEssayez-le en ligne!
Prend la largeur en entrée.
la source
g
n'est pas évalué la première fois que la fonction est appelée. Essayez-le en ligne!Print/@f[...]
->Print/@Transpose[g[...]]
->Transpose[Print@g[...]]
, par lequel le tempsg
est défini.Japt
-R
, 10 octetsPrend de la largeur au lieu de la hauteur.
Essayez-le
Pseudocode (U est une chaîne, V est un entier):
la source
Perl 6 ,
6867 octetsEssayez-le en ligne!
la source
Python 3, 104 octets
Je n'ai pas joué au golf depuis si longtemps ... Je suis sûr que cela pourrait être plus court.
Détails
Ce code définit une fonction qui prend deux arguments (la chaîne et la hauteur) et donne le résultat sur la sortie standard.
L'index dans la chaîne est la distance de Manhattan du centre de la grille. Pour une grille de largeur
w
et de hauteurh
, la distance de la cellule à(x, y)
estabs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)
.La largeur de la grille doit être telle que la distance Manhattan des coins (disons
(0, 0)
) soit inférieure de un à la longueur de la chaîne. En substituant(0, 0)
à ce qui précède et en simplifiant, nous constatons que la largeur est simple2 * len(s) - h
.Code
Essayez-le en ligne!
la source
05AB1E , 10 octets
Essayez-le en ligne!
la source
Pyth , 19 octets
Essayez-le en ligne!
la source
Python 2 , 95 octets
Essayez-le en ligne!
la source
Stax ,
119 octetsExécuter et déboguer
Il prend la largeur et la chaîne d'origine dans cet ordre.
la source
C # (.NET Core) , 146 octets
Essayez-le en ligne!
La réponse la plus longue depuis si longtemps. :-) Il utilise la distance de Manhattan au centre de la place. Il doit cependant y avoir un chemin plus court.
la source
Tcl ,
188170162 octetsEssayez-le en ligne!
Il semble y avoir un million de mauvaises façons de résoudre ce problème dans TCL. Ce n'est pas le pire d'entre eux.
Économisé 18 octets minimum en convertissant en lambda (peut économiser jusqu'à 13 de plus si la valeur de retour d'une liste de lignes est acceptable)
Enregistré 8 supplémentaires depuis l'itérateur lmap a servi de constante supplémentaire
la source
Toile , 18 octets
Essayez-le ici!
Canvas ne fait pas de sous-chaînes, je dois donc le traiter comme un objet d'art et obtenir une sous-section de cette façon. J'ai l'impression que cela me coûte 2 octets, mais bon, que pouvez-vous faire?Il semble que cela ne fonctionne pas comme je le pensais: les fonctions de palindromisation de Canvas reflètent certains caractères (par exemple, V en miroir vertical devient ^), et je ne peux pas désactiver cela exactement ... eh bien, je suppose
la source
Ruby , 65 octets
Essayez-le en ligne!
la source