Contexte
Célébration de la publication de Dyalog APL 16.0 , où la solution à ce problème est {⊢⌺(≢⍵)⊢⍵}
Explication
Tâche
Avec une chaîne ASCII imprimable de longueur impaire n , créez un carré n × n avec la chaîne centrée horizontalement, dupliquée pour être centrée verticalement et avec des acrostiches de la même chaîne dans chaque ligne et colonne. Notez que toutes les chaînes sauf les chaînes centrées seront coupées pour conserver la taille du carré n × n .
L'explication de votre code sera très appréciée.
Règles
- Vous pouvez avoir des espaces et des nouvelles lignes à la fin (cela inclut le triangle inférieur droit)
- Vous pouvez retourner une liste de chaînes
Exemple utilisant la chaîne ABXCD
:
n est 5. On commence par dessiner les deux chaînes centrées, l'une horizontale et l'autre verticale:
┌─────┐ │ A │ │ B │ │ABXCD│ │ C │ │ D │ └─────┘
(5 × 5 cadre de sélection ajouté pour plus de clarté)
Ensuite, nous plaçons tous les acrostiches possibles, horizontalement et verticalement:
UNE UN B ┌─────┐ │ ABX│CD │ ABXC│D │ABXCD│ A│BXCD │ AB│XCD │ └─────┘ CD ré
Enfin, nous ne renvoyons que ce qui se trouve à l'intérieur du cadre de sélection:
ABX ABXC ABXCD BXCD XCD
Cas de test
World
:
Wor
Worl
World
orld
rld
mississippi
:
missis
mississ
mississi
mississip
mississipp
mississippi
ississippi
ssissippi
sissippi
issippi
ssippi
Pneumonoultramicroscopicsilicovolcanoconiosis
:
Pneumonoultramicroscopi
Pneumonoultramicroscopic
Pneumonoultramicroscopics
Pneumonoultramicroscopicsi
Pneumonoultramicroscopicsil
Pneumonoultramicroscopicsili
Pneumonoultramicroscopicsilic
Pneumonoultramicroscopicsilico
Pneumonoultramicroscopicsilicov
Pneumonoultramicroscopicsilicovo
Pneumonoultramicroscopicsilicovol
Pneumonoultramicroscopicsilicovolc
Pneumonoultramicroscopicsilicovolca
Pneumonoultramicroscopicsilicovolcan
Pneumonoultramicroscopicsilicovolcano
Pneumonoultramicroscopicsilicovolcanoc
Pneumonoultramicroscopicsilicovolcanoco
Pneumonoultramicroscopicsilicovolcanocon
Pneumonoultramicroscopicsilicovolcanoconi
Pneumonoultramicroscopicsilicovolcanoconio
Pneumonoultramicroscopicsilicovolcanoconios
Pneumonoultramicroscopicsilicovolcanoconiosi
Pneumonoultramicroscopicsilicovolcanoconiosis
neumonoultramicroscopicsilicovolcanoconiosis
eumonoultramicroscopicsilicovolcanoconiosis
umonoultramicroscopicsilicovolcanoconiosis
monoultramicroscopicsilicovolcanoconiosis
onoultramicroscopicsilicovolcanoconiosis
noultramicroscopicsilicovolcanoconiosis
oultramicroscopicsilicovolcanoconiosis
ultramicroscopicsilicovolcanoconiosis
ltramicroscopicsilicovolcanoconiosis
tramicroscopicsilicovolcanoconiosis
ramicroscopicsilicovolcanoconiosis
amicroscopicsilicovolcanoconiosis
microscopicsilicovolcanoconiosis
icroscopicsilicovolcanoconiosis
croscopicsilicovolcanoconiosis
roscopicsilicovolcanoconiosis
oscopicsilicovolcanoconiosis
scopicsilicovolcanoconiosis
copicsilicovolcanoconiosis
opicsilicovolcanoconiosis
picsilicovolcanoconiosis
icsilicovolcanoconiosis
Remerciements
Merci à dzaima , Leaky Nun , à M. Xcoder pour tout sauf l’idée même de ce défi.
Réponses:
Python 2 , 60 octets
Essayez-le en ligne!
la source
MATL , 8 octets
Essayez-le en ligne!
Explication
la source
Retina ,
7059 octetsEssayez-le en ligne! Edit: 11 octets enregistrés avec l’aide de @MartinEnder. Explication: La première étape répète l'entrée une fois pour chaque caractère, en la complétant correctement sur chaque ligne pour obtenir le cisaillement. La dernière étape supprime ensuite 25% de chaque côté pour produire le résultat souhaité.
la source
n/2
espaces à gauche et à droite (en utilisant quelque chose comme(..)+.
->$#1$* $&$#1$*
avec un espace de fin) et en faisant juste un!&`...
où...
correspondn
exactement auxn
caractères.$*sp
?Java 8,
120103 octets-17 octets grâce à @ OlivierGrégoire .
Explication:
Essayez ici.
la source
i=l/2+1
eti-->1
etfor(;i<l
économisez un octet.s->{int l=s.length(),i=l/2;while(i-->0)s=" "+s+" ";while(++i<l)System.out.println(s.substring(i,l+i));}
(103 octets). Le seul changement significatif est que la chaîne avec des espaces est générée une fois pour toutes au lieu de "à la volée" (et bien sûr, l'impression au lieu de revenir).Haskell,
6462 octetsEssayez-le en ligne! Comment ça marche:
la source
SWI Prolog, 234 octets
Peut-être essayer en ligne ici: http://swish.swi-prolog.org/p/hEKigfEl.pl
NB
_
ici, car cela montre qu'il fonctionne et n'affecte pas le nombre d'octets.Exemples en cours d'exécution dans Swish:
L’approche, c’est la première chose que je pouvais faire fonctionner, et sans doute un utilisateur expérimenté de Prolog pourrait la raccourcir beaucoup:
Code expliqué et commenté (peut ne pas s'exécuter), lu de
superacrostic()
bas en haut, puishelper()
corps principal, puishelper()
scénario de base:la source
05AB1E , 11 octets
Essayez-le en ligne!
Explication
la source
JavaScript (ES6), 75 octets
la source
APL (Dyalog Unicode) , 10 caractères = 22 octets
Essayez-le en ligne!
{
...}
fonction anonyme où l'argument est représenté par ⍵⊢
fournir la zone couverte lorsque⌺(
…)
Glissant un pochoir de taille≢
longueur de⍵
l'argument⊢
sur⍵
l'argumentCela fonctionne en laissant chaque caractère former le milieu d'une chaîne avec la même longueur que l'entrée, en complétant la marge à gauche ou à droite selon les besoins. Prenez par exemple
ABXCD
:La chaîne a cinq caractères, donc le pochoir aura une "ouverture" de cinq caractères de large.
┌──↓──┐
ouverture pochoir avec un marqueur milieu│ ABX│CD
laissaA
être au milieu│ ABXC│D
puis ,B
│ABXCD|
etc.A|BXCD |
AB|XCD |
└──↑──┘
position finale pochoirla source
PHP , 98 octets
Essayez-le en ligne!
la source
JavaScript (ES8),
666362 octetsRetourne un tableau.
L'essayer
Explication
Fonction anonyme prenant la chaîne en argument avec paramètre
s
.Fractionner la chaîne en un tableau de caractères individuels.
Obtenez la longueur de la chaîne et assignez-la à variable
l
.Carte sur le tableau, en passant chaque élément à travers une fonction, où
x
est l'index de l'élément actuel.Pour chaque élément, renvoyez la chaîne d'origine avec les espaces précédés de caractères jusqu'à ce que sa longueur soit 1,5 fois celle de sa longueur d'origine.
Obtenir la sous-chaîne de longueur à
l
partir de l'index de l'élément en cours.la source
V ,
14, 11 octetsEssayez-le en ligne!
3 octets sauvés grâce à @nmjmcman!
Hexdump:
Approche originale (18 octets):
Explication:
la source
ê
. Merci :)PowerShell Core , 68 octets
Essayez-le en ligne!
Explication non-golfée
la source
[($_..($_+$L))]
?(
cela ne va pas avec la jointure, il-join ($Padding + $Text)[0,1,2,3,4]
faut sélectionner plusieurs caractères dans une chaîne complétée pour une ligne de sortie, et les joindre dans une chaîne est un moyen plus rapide de le faire.SubString()
. et il génère le remplissage sur place et la gamme de caractères sur place. Une explication complète sur l’ungolf a été ajoutée à ma réponse.Japt ,
191714 octets5 octets sauvés grâce à @ETHproductions et @Shaggy
Testez-le en ligne!
-R
flag ajouté pour rejoindre les nouvelles lignes (fins de visibilité)Explication
la source
Sp½*Ul
, mais je ne pense pas qu'il y ait un atm ... BTW, vous pouvez généralement changersXX+Y
entXY
(s == .slice
,t == .substr
)Charbon de bois , 26 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code.
la source
Gelée , 11 octets
Essayez-le en ligne!
Comment ça marche
la source
QBIC , 32 octets
Man, il est temps pour moi d'ajouter
space$
à QBIC ...Explication
Échantillon échantillon
la source
Mathematica, 88 octets
la source
Haskell ,
8670 octetsC'est (encore) beaucoup trop long, mais merci à @bartavelle de me rappeler que la sortie d'une liste de chaînes est acceptable aussi!
Essayez-le en ligne!
la source
Python 3 , 68 octets
Essayez-le en ligne!
la source
PowerShell ,
133119 octetsEssayez-le en ligne!
Ungolfed
la source
Python 2 ,
76 7473 octets-1 grâce à @FelipeNardiBatista
Bien sûr, pas aussi courte que l’autre réponse Python, mais cela vaut la peine d’essayer une méthode complètement différente:
Essayez-le en ligne! (avec la version à 74 octets)
Cela génère d'abord la chaîne complète, puis la découpe en tranches pour correspondre au carré.
Explication
la source
(2*x+~i)
pour économiser un octetJ , 19 octets
Essayez-le en ligne!
Explication
la source
''
comme remplaçant.C # (.NET Core) , 101 octets
En gros, la réponse de KevinCruijssen. Enregistre 2 octets car
string.Length
n'a pas besoin de () et 2 autres octets car le deuxième argument destring.Substring()
est length plutôt que end Index, mais perd ensuite 2 octets car ilConsole.WriteLine()
est plus long. J'ai eu une implémentation plus naïve, mais elle était environ deux fois plus longue alors ...la source
Excel VBA, 68 octets
Golfé
Fonction de fenêtre immédiate VBE anonyme qui prend les entrées de la cellule
[A1]
et les envoie à la fenêtre VBE immédiateUngolfed
la source
Perl 5 , 53 + 1 (
-n
) = 54 octetsEssayez-le en ligne!
la source