Je suis sûr que la plupart d'entre vous, sinon tous, sont tombés sur cela à un moment ou à un autre:
Après une recherche à Cmabrigde Uinervtisy, il ne faut pas mttaer dans waht oredr les ltteers dans un wrod sont, l'olny iprmoetnt tihng est taht the frist et lsat ltteer être au rghit pclae. Le rset peut être un mse toatl et vous pouvez le sitall raed wouthit porbelm. Tihs est bcuseae les deos huamn mnid pas raed ervey lteter par istlef, mais le wrod comme un wlohe.
Créez un programme qui saisit n'importe quelle quantité de texte. À des fins de test, utilisez la version non brouillée du texte ci-dessus, que vous trouverez ci-dessous.
Le programme doit ensuite transposer au hasard les lettres de chaque mot d'une longueur de 4 lettres ou plus, à l'exception de la première et de la dernière lettre de chaque mot.
Tous les autres formats doivent rester les mêmes (majuscules et ponctuation, etc.).
Test du texte:
Selon un chercheur de l'Université de Cambridge, peu importe l'ordre dans lequel les lettres d'un mot sont, la seule chose importante est que la première et la dernière lettre soient au bon endroit. Le reste peut être un gâchis total et vous pouvez toujours le lire sans problème. C'est parce que l'esprit humain ne lit pas chaque lettre seule mais le mot dans son ensemble.
Comme d'habitude, c'est un code-golf. Le code le plus court gagne.
rscheearch
dans votre exemple de texte.don't
rester dans la même position? La spécification ditAll other formatting must remain the same (capitalization and punctuation, etc.).
mais je ne sais pas comment cela fonctionne ici ...Réponses:
Ruby -
5048 caractères, plus le-p
paramètre de ligne de commande.Merci @primo pour -2 caractères.
Tester
la source
\K
assertion de recherche de largeur nulle? En outre, le regroupement le plus interne est inutile, en utilisant$&
au lieu de$1
.$&
pourboire :)codegolf
script[*$&.chars]
=>$&.chars
, économisant 3 octets.Python, 118
Python est terriblement maladroit pour des choses comme ça!
Prime
J'ai essayé d'autres choses que je pensais être intelligentes, mais vous devez importer toutes sortes de choses, et beaucoup de méthodes n'ont pas de valeurs de retour, mais doivent être appelées séparément comme sa propre instruction. Le pire est lorsque vous devez convertir la chaîne en liste, puis la reconvertir en
join
chaîne.Quoi qu'il en soit, voici quelques-unes des choses que j'ai essayées:
Regex! Permutations! Vous ne pouvez pas mélanger directement une partition d'une liste etshuffle
retourneNone
, yay!la source
PHP 84 octets
Utiliser une expression régulière pour capturer des mots d'au moins
43 lettres † et mélanger les caractères intérieurs. Ce code peut également gérer l'entrée avec plusieurs lignes.Si une seule ligne d'entrée est requise (comme dans l'exemple), elle peut être réduite à 68 octets
† Il n'y a qu'une seule lettre au milieu, donc peu importe si vous la mélangez.
la source
J (48)
Explication:
1!:1[3
: lire toutes les entrées de stdinrxapply
: applique la fonction donnée aux parties de l'entrée qui correspondent à l'expression régulière({~?~@#)
: un train de verbes qui mélange son entrée:#
compte la longueur, ceci est appliqué aux deux côtés pour?
donner N nombres distincts de 0 à N,{
puis sélectionne les éléments à ces indices dans le tableau d'entrée.('\w(\w+)\w';,1)
: utilisez cette expression régulière, mais utilisez uniquement la valeur du premier groupe[1!:2&4
: envoyer une sortie non formatée à stdout''[
: supprime la sortie formatée. Ceci est nécessaire car sinon il ne sort que la partie de la sortie qui tient sur une ligne de terminal et se termine ensuite par...
.la source
Rétine , 10 octets
Essayez-le en ligne!
Hé, ce vieux défi a été fait pour la nouvelle Retina!
Explication
\B\w+\B
fait correspondre des groupes de lettres entre des non-frontières, c'est-à-dire des groupes de lettres qui ne commencent ni ne terminent un mot. Étant donné que les expressions régulières sont gourmandes, cela correspondra à toutes les lettres d'un mot, sauf la première et la dernière.V
est l'étape "inverse", qui inverse l'ordre des caractères dans chaque correspondance de l'expression régulière. Avec l'?
option, il les brouille à la place.la source
APL 107
Malheureusement, mon interprète APL ne prend pas en charge les expressions régulières, voici donc une version roulée à la maison où le texte à brouiller est stocké dans la variable t:
Essentiellement, le code partitionne le texte en mots basés uniquement sur les lettres de l'alphabet, puis en lettres entre la première et la dernière lettre de ces mots. Ces lettres sont ensuite brouillées et la chaîne de caractères entière réassemblée.
la source
APL,
5849Je crois que cela fonctionne dans IBM APL2 (je n'ai pas IBM APL)
Sinon, puis dans Dyalog APL, ajoutez à l'avant:
ce qui ajoute 6 caractères
Cela suppose que les seuls caractères autres que des mots sont l'espace, la virgule et le point.
la source
VBA, 351
373/409Méthode alternative (plus grande):
Ces deux méthodes modifient la valeur de la variable transmise à
Sub
. c'est à direproduira quelque chose comme ceci:
De plus, cela ponctue la ponctuation au milieu du mot, ce qui peut ne pas correspondre à 100% à la spécification.
la source
APL NARS 172 caractères
13 + 17 + 18 + 44 + 41 + 8 + 17 + 5 + 9 = 172; Cette fonction g () a une entrée sous forme de chaîne; a une sortie sous forme de chaîne. J'ajoute la commande d'entrée car je ne sais pas comment insérer \ 'dans une chaîne entre guillemets. Commenté
résultat
la source
PHP 7.1, non concurrent, 80 octets
prend l'entrée des arguments de la ligne de commande. Courez avec
-nr
. (échouera évidemment à la ponctuation)la source
PHP, 94 + 1 octets
+1 pour le
-R
drapeauEntrée de tuyau à travers
php -nR '<code>'
.Remarque:
preg_replace_callback
est venu à PHP en 4.0.5; des fermetures ont été introduites dans php 5.3;cela nécessite donc PHP 5.3 ou une version ultérieure.
Malheureusement, la correspondance est toujours envoyée sous forme de tableau, même s'il n'y a pas de sous-modèles,
donc je ne peux pas simplement l'utiliser
str_shuffle
comme rappel, ce qui économiserait 29 octets.la source
JavaScript,
7667 octetsmerci à Arnauld pour -9 octets.
Essayez-le en ligne!
Non golfé
la source
/\B\w+\B/g
. (Mais pour la prime, notez que la longueur du code n'est pas importante. )R, 179
En utilisant la fonction que j'ai écrite pour les lettres aléatoires dans un problème de mot :
Contribution:
Solution:
Résultat:
la source
Pyth, 23 octets
Non concurrent car Pyth a été créé après la publication de ce défi.
Essayez-le en ligne
la source
Japt , 32 octets
Essayez-le en ligne!
la source
Java,
1557834 octets Merci à @JoKing pour des conseils.Un peu tard pour la compétition. J'ai oublié que j'avais commencé sur ce problème.
Golfé
Non-golfé
la source
Sidef ,
8985 octetsBloquer (appelable anonyme):
Sortie, lorsqu'elle est utilisée comme
{ ... }('..')
:Assez peu golfé
la source