introduction
Observons la chaîne abc
. Les sous-chaînes qui peuvent être faites à partir de cela sont:
a, ab, abc, b, bc, c
Nous devons maintenant les aligner sous la chaîne initiale, comme ceci:
abc
a
b
c
ab
bc
abc
L'ordre de la chaîne n'a pas d'importance, c'est donc également parfaitement valable:
abc
a
ab
abc
b
bc
c
Ainsi, la sous-chaîne est positionnée sous l'emplacement de la sous-chaîne dans la chaîne initiale. Donc, pour abcdef
la sous-chaîne cde
, cela ressemblerait à ceci:
abcdef
cde
La tâche
La tâche consiste à aligner toutes les sous-chaînes avec une longueur supérieure à 0 , comme illustré ci-dessus. Vous pouvez supposer que la chaîne elle-même ne contiendra que des caractères alphabétiques et aura au moins 1 caractère. Pour le remplissage, vous pouvez utiliser un espace ou un autre caractère ASCII imprimable non alphabétique ( 32 - 127
). Peut-être pas nécessaire de le mentionner, mais la chaîne elle-même ne contiendra que des caractères uniques, donc pas comme aba
, car le a
se produit deux fois.
Cas de test
Contribution: abcde
Sortie possible:
a
ab
abc
abcd
abcde
b
bc
bcd
bcde
c
cd
cde
d
de
e
Contribution: abcdefghij
Sortie possible:
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
b
bc
bcd
bcde
bcdef
bcdefg
bcdefgh
bcdefghi
bcdefghij
c
cd
cde
cdef
cdefg
cdefgh
cdefghi
cdefghij
d
de
def
defg
defgh
defghi
defghij
e
ef
efg
efgh
efghi
efghij
f
fg
fgh
fghi
fghij
g
gh
ghi
ghij
h
hi
hij
i
ij
j
C'est du code-golf , donc la soumission avec le moins d'octets gagne!
Réponses:
Pyth,
141310 octetsMerci à @FryAmTheEggman pour avoir économisé 3 octets.
Essayez-le en ligne!
la source
jmXQ-Qd;.:
Idée similaire, en utilisantX
.Perl,
322824 octetsInclut +1 pour
-n
Code:
Exécutez avec la chaîne sur STDIN:
Les langues de golf sont si proches et pourtant si loin ...
Explication
/.+/
correspond à une sous-chaîne. Malheureusement, il s'arrête une fois qu'il a correspondu à un. J'utilise donc la construction regex d'exécution(??{})
pour étendre l'expression régulière afin qu'elle échoue et le retour en arrière essaiera la sous-chaîne suivante, à la fin, en les essayant tous avant d'abandonner de dégoût.À l'intérieur du
(??{})
I, j'imprime la sous-chaîne courante préfixée par autant d'espaces que le décalage de la sous-chaîne en utilisant$"x"@-"
Ainsi, la sortie documente parfaitement le fonctionnement du retour en arrière regex:
la source
perl6 -ne 'm/^(.*)(.+)<{+put " "x$0.to,$1}>/'
ab1
(je suppose que celasay...
vaut pour1
). (Testé en 5.18.2.) Edit: Oh! désolé, la question dit "Vous pouvez supposer que la chaîne elle-même ne contiendra que des caractères alphabétiques".MATL ,
2018 octetsInspiré par le modèle de sous-chaînes généré par la réponse de @ aditsu
Essayez-le en ligne!
Le motif de sous-chaînes est généré par une matrice triangulaire supérieure de la même taille que l'entrée, et toutes les sous-matrices sont obtenues en supprimant successivement la dernière ligne et la dernière colonne.
Explication
Ancienne approche (pouvoir cartésien)
Je garde cette approche au cas où elle servirait d'inspiration pour d'autres réponses
Dans le compilateur en ligne, cela manque de mémoire pour le cas de test le plus long.
Essayez-le en ligne!
Explication
Cela génère tous les modèles de valeurs
0
,1
et2
dans l'ordre croissant, puis se transforme2
en0
. Cela donne tous les modèles possibles de0
et1
où les1
valeurs sont contiguës. Ceux-ci sont utilisés pour marquer quels caractères sont extraits de la chaîne d'origine.Par exemple, pour la chaîne,
'abc'
les modèles sont générés comme suit.[0 1 2]
On obtient d' abord la puissance cartésienne de élevée au nombre de caractères saisis:Le tri de chaque ligne donne
La transformation
2
en0
(c'est-à-diremod(...,2)
) et la suppression des lignes en double donne le motif finaldans lequel chaque ligne est un masque correspondant à une sous-chaîne (contiguë). La première ligne doit être supprimée car elle correspond à la sous-chaîne vide.
la source
Rétine ,
483231 octetsMerci à Kenny Lau pour avoir économisé 3 octets et ouvert la voie à bien d'autres.
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Ordre des sous-chaînes générées:
Explication
Cela nous donne tous les préfixes de l'entrée. Cela se fait en faisant correspondre (
M
) toute sous-chaîne (.+
) à partir de la fin (r
), en considérant les correspondances qui se chevauchent (&
) et en retournant toutes ces correspondances jointes avec des sauts de ligne (!
).Il ne nous reste plus qu'à tailler les préfixes successifs de ces préfixes (en les remplaçant par des espaces). Nous faisons cela étape par étape avec une boucle:
Les
%
moyens que cette chose ensemble est fait à chaque ligne individuellement ( en considérant une chaîne séparée pour être de temps, et se joindre à tout retour ensemble avec linefeeds à la fin). Le+
dit à Retina d'exécuter cette substitution en boucle jusqu'à ce que la sortie cesse de changer (ce qui signifie dans ce cas que l'expression régulière ne correspond plus). L'expression régulière essaie ensuite de faire correspondre la dernière ligne de l'entrée avec au moins deux caractères non-espace et ajoute une nouvelle ligne où le premier de ceux-ci est remplacé par un espace.la source
!
impliqueM
et 1char de.+
et.*
?.+
et.*
je devrais symboliser l'expression régulière, et même si je prévois de le faire à un moment donné, je ne pense pas que cela se produira de si tôt (et si je le fais, je me concentrerai probablement sur les fonctionnalités qui ajouter en fait l'expressivité).Oracle SQL 11.2, 146 octets
Non-golfé
la source
CJam, 20
Essayez-le en ligne
Explication:
la source
Python, 57 octets
Sort un
set
semblable{' b', 'a', 'ab'}
. L'idée est de rappeler deux branches qui coupent le premier ou le dernier caractère. Le donne des sorties redondantes, mais leset
supprime automatiquement les doublons. Pour l'alignement, chaque fois que le premier caractère est coupé, un espace est ajouté au préfixep
, qui est concaténé sur le devant.la source
PowerShell v2 +, 69 octets
Prend l'entrée
$a
, boucle sur la longueur (réglage$b
dans le processus pour une utilisation ultérieure). Chaque boucle externe, nous bouclons à$b
nouveau, en$i
vue d'une utilisation ultérieure. Chaque boucle interne, nous sortons le$i
nombre d'espaces concaténés avec une tranche de la chaîne d'entrée. Étant donné que nous parcourons simplement la chaîne, cela gérera en fait n'importe quelle chaîne arbitraire (lettres en double, espaces, etc.).Exemple
la source
C #,
136132131 octetsGolfé
Ungolfed
Code complet
Communiqués
-1 byte
- Changé laString o="",e="";
pourString o="",e=o;
sauver 1 octet. L'idée est venue de Gallant ( j'ai oublié d'appliquer cette partie dans la dernière mise à jour, je m'excuse. ).-4 bytes
- Suppression des crochets desfor
boucles et déplacement de l' incrément d'espacee
var vers la zone itérateur de la boucle externe . L'idée venait defor
Gallant .136 bytes
- Solution initiale.la source
e=o
pour économiser 3 octets.String o="",...
avecvar o...
pour un autre 3.String o = "", e = "";
àvar
puisque je dois les séparer en deux, ce qui cevar o = ""; var e = "";
qui est de la même longueur par rapport à celui que j'ai. Le ferait, mais VS n'autorise pas la déclaration de plusieurs variables lors de l'utilisation de variables implicitement typées - aliasvar
. Mais merci pour l'aide. EDIT: Ayant VS me criant que je ne peux pas le faire, je suppose que c'est incorrect, peut-être faux.Python 2.7,
7082 octetsJe ne pouvais pas comprendre comment l'obtenir sur 1 ligne. Appeler avec
e("abcde",0)
la source
Python 3,
8078 octetsParcourez le nombre d'espaces à préfixer, puis le nombre de caractères à terminer.
Edit: Suppression des espaces avant les boucles for.
la source
MATL,
1514 octetsUn octet enregistré grâce à la astuce de @ LuisMendo ici !
Tant de façons ... ont dû en trouver une nouvelle. Des morceaux heureux! :)
Essayez-le en ligne!
A explosé
la source
JavaScript (ES6), 89 octets
Approche directe. La sortie a une nouvelle ligne de fin.
la source
=>
signifie Javascript? Est-ce un opérateur binaireJavaScript (ES6), 72
la source
Pyth,
1211 octetsMalheureusement, la question nous permet de supposer des caractères uniques, donc je viens de rechercher la première position de la sous-chaîne et de remplir avec des espaces.
la source
;
place de\
lorsque dans la carte de niveau le plus bas.Mathematica 89 octets
Explication
i
fait référence à la chaîne d'entréeSubsequences[y=Characters@i]
renvoie toutes les sous-séquences (listes de caractères représentées) de l'entrée. (aSubsequences
été introduit au v. 10.4)Pour chaque sous-séquence,
Complement...
renvoie les caractères de la chaîne d'entrée qui ne sont pas présents. Chacun de ces personnages est remplacé par un espace vide viaStringReplace[i,#->" "]
.Column
affiche les résultats dans une seule colonne. Chaque chaîne de sortie a le même nombre de caractères, ce qui donne des lettres alignées.la source
J,
32 2928 octetsCela équivaut à un verbe monadique. Essayez ici. Usage:
Explication
Comme quelques autres réponses, je calcule l'indice d'occurrence du premier caractère de chaque sous-chaîne. Les sous-chaînes sont stockées dans une matrice avec des espaces de fin, donc je les fais pivoter vers la droite par leur index pour obtenir la bonne quantité de remplissage. Ce seul espace entre
"1
eta:
est vraiment ennuyeux ...la source
a e
n'est pas une sous-chaîne telle que définie par le défiJavaScript (Firefox 30-57),
6563 octetsRetourne un tableau de chaînes. Comme ES6, c'est 78 octets:
la source
QBasic, 75 octets
La
FOR
stratégie de base à double boucle, un peu modifiée pour l'indexation basée sur 1 de QBasic. L'astuce principale est deLOCATE,j
déplacer le curseur sur la colonnej
de la ligne actuelle avant l'impression. Étant donné que la colonne 1 est la première colonne, cela équivaut à imprimerj-1
des espaces de début .la source
Perl 6 , 34 octets
La raison de l'
+
avantput
est qu'il retourne1
au lieu deTrue
, ce qui est garanti de ne pas être dans l'entrée, il doit donc toujours revenir en arrière.(Si vous le souhaitez dans l'ordre inverse, utilisez
(.*?)(.+?)
plutôt que(.*)(.+)
)Cela a été inspiré par la réponse Perl 5 .
la source
J,
352322 octetsCela m'a pris du temps mais je l'ai finalement optimisé.
Usage
Explication
la source
[:+./"1' '~:]
au lieu d'[:-.[:*/"1' '=]
enregistrer encore 2 octets.Java, 138 octets
Formaté:
la source
Pyke, 15 octets
Essayez-le ici!
Suppose que le tableau de chaînes rembourrées est acceptable
Tamponnez d'abord, puis hachez.
la source
Haskell, 65 octets
Cela nécessite
inits
ettails
depuis Data.List, cependant. Pour le sortir, ajoutez-lemapM_ putStrLn.
à l'avant.Relativement simple; l'
reverse
est pour vous assurer que la chaîne d' origine est d' abord.la source
(>>=zipWith(++)(inits$cycle" ").init.tails).inits
. Et veuillez ajouter leimport Data.List;
au nombre d'octets.Rubis,
7567 octetsFonction anonyme.
Utilise la substitution regex pour aligner les sous-chaînes..
est le caractère de remplissage.la source
bash + GNU coreutils, 109 octets
Il y a peut-être une solution plus courte, mais c'est la meilleure qui m'est venue à l'esprit. L'unicité des caractères n'a pas d'importance ici.
la source
PHP, 151 caractères
Ungolfed
Golfé
Exemple
la source
C ++, 145 octets
le premier paramètre de démarrage est utilisé comme entrée, la console comme sortie
la source
std::cout<<r[0]<<y<<'\n'
place de `std :: cout.write (r [0], y) << '\ n'? Pouvez-vous ajouter une brève explication? Merci!Python 2 (non golfé) 99 octets
Résultat:
la source