Étant donné une chaîne en entrée, sortez une ou plusieurs variantes de la chaîne de sorte que:
- Aucun personnage n'est dans sa position d'origine
- Aucun personnage n'est adjacent à un personnage auquel il était à l'origine adjacent
Vous pouvez supposer que cela sera toujours possible pour la chaîne donnée et ne contiendra que des caractères alphabétiques à casse unique ( [a-z]
ou [A-Z]
si vous préférez)
Notez que les doublons du même caractère ne sont pas considérés comme uniques.
Par exemple, étant donné l'entrée programming
, la sortie ne peut pas contenir un m
au 7ème ou 8ème caractère, et ne peut pas contenir un g
au 4ème ou 11ème caractère (1 indexé)
Exemple:
Prends la ficelle abcdef
Ce qui suit serait une sortie valide: daecfb
Cependant, les éléments suivants ne seraient pas valides: fdbcae
comme dans cet exemple c
et b
sont toujours adjacents.
L'adjacence s'enroule également, ce qui signifie que vous ne pouvez pas faire fdbeca
comme f
et que vous a
êtes toujours adjacent.
Testcases:
Notez que ce ne sont pas les seules sorties valides pour les entrées données
Écrit comme input -> output
:
helowi -> ioewhl
mayube -> euabmy
stephens -> nhseespt
aabcdeffghij -> dbfhjfigaeca
Notation:
Il s'agit de code-golf, donc le moins d'octets dans chaque langue gagne!
la source
No character is adjacent to a character that it was originally adjacent to
. L'ordre n'est-il pas important pour la contiguïté? Donc l'entrée "abcd" ne peut avoir "ab" nulle part, et ne peut avoir "ba" nulle part non plus?Réponses:
Gelée ,
2423 octetsEssayez-le en ligne!
Extrêmement longue en raison de mon horreur à Jelly, mais ça marche enfin, au moins ... toujours en train de jouer au golf.
la source
Python 2 , 185 octets
Essayez-le en ligne!
Imprime toutes les chaînes valides
la source
mayube
,stephens
ethelowi
, semble fonctionner pour tous 3. J'ai besoin de faire un validateur de sortie pour faire des tests plus intensifsaabcdeffghij
, mais cela ne signifie pas qu'il ne fonctionne pas, il faut juste que plus d'une minute pour cette entréeprint next(l for l in permutations(x) if not((g(l)|g(l[::-1]))&(g(x)|g(x[::-1]))or any(a==b for a,b in zip(x,l))))
`l`[2::5]
= /PHP> = 7.1, 147 octets
PHP Sandbox Online
PHP> = 7.1, 184 octets
Utilisez la distance levenshtein au lieu d'une méthode Regex
PHP Sandbox Online
PHP , 217 octets
Version sous 7.1
Essayez-le en ligne!
la source
helowi
, sortiesioewlh
,i
eth
sont adjacentesBrachylog , 21 octets
Essayez-le en ligne!
Explication
J'aurais vraiment voulu
p.;?z≠ᵐ&j¬{s₂p~s~j}
travailler pour 2 octets de moins, mais il semble que ce ne~j
soit pas assez intelligent ...la source
PHP 7.1,
136131 octetsinspiré par la solution de Jörg :
Exécuter en tant que pipe avec
-r
ou tester en ligne . (Assurez-vous que PHP version 7.1 ou supérieure est sélectionné)Nécessite PHP 7.1; ajouter 14 octets pour les anciens PHP: remplacer
$k-1
par($k?:strlen($a))-1
;(deux octets pour PHP <5.3:
$k?$k-1:strlen($a)-1
)panne
la source
$c=$a[$k=0], $d=$a[$k-1]
) via$s.$s
.PHP 7.1,
187 185 172 172 178143 octetsExécuter en tant que pipe avec
-r
ou tester en ligne . (Assurez-vous que PHP version 7.1.0 ou supérieure est sélectionné!)panne
la source
mayube
, les sortiesyeuamb
,m
eta
sont adjacentesRuby,
11097102 octetsEssayez-le en ligne!
la source
3594817062
une sortie sur votre lien TIO.JavaScript 6, 116 octets
la source
Stax ,
2321 octetsExécutez et déboguez en ligne!
Merci pour @recursive d'avoir sauvé 2 octets.
Prend très longtemps à courir. Une version plus raisonnable / réalisable est (seulement 2 octets de plus)
Exécutez et déboguez en ligne!
Explication
Utilise la version décompressée pour expliquer.
la source
G
. Vous faites{...}X!...x!
pour exécuter deux fois le même bloc. En général, vous pouvez réécrire cela commeG...G
avec}...
à la fin du programme, comme cela .G
dans un autre post pour économiser un octet en le remplaçant{...}*
parD...
. Je suppose que je n'y suis toujours pas habitué ...