Ceci est beaucoup plus avancé que Comment randomiser des lettres dans un mot et Cambridge Transposition en raison de la règle selon laquelle les lettres peuvent être échangées avec lesquelles. Une simple expression régulière ne suffira pas ici.
Il est bien connu qu’un texte peut toujours être lu alors que les entrailles de ses mots ont été brouillées, tant que leurs première et dernière lettres ainsi que leurs contours généraux restent constants. Avec un texte imprimable Ascii + Newline, brouillez chaque mot en respectant les règles suivantes:
Le brouillage doit être (pseudo) aléatoire.
Un mot est une séquence de caractères latins, de A à Z.
Seules les lettres initiales seront jamais majuscules.
Les premières et dernières lettres doivent rester intactes.
Lors du brouillage, seules les lettres appartenant à l'un des groupes suivants peuvent échanger des lieux:
acemnorsuvwxz
bdfhkl
gpqy
it
j
(reste en place)
Exemple
Srcmable se prépare en gardant son oeiltnus
Il est bien connu qu’un txet peut toujours être lu alors que les commandes de ses mots ont été masquées, à condition que leurs première et dernière lettres plus leur nom ne puissent plus être écrits. Étant donné le contenu de cet article, vous pouvez écrire un mot comme suit:
Smncrbliag doit être (pusedo) rondam.
Un wrod est un seqencue du latin chreratacs, A thurogh Z.
Seuls les participants initiaux seront tous reconnus.
Les premières lettres et les lettres du tat doivent rester en place.
Lorsque vous écrivez, seules les lettres d’un des corps de police peuvent échanger des cartes:
aneusvrowxmcz
bhkfdl
gqpy
it
j
(reste en plcae)Emxaple
t
est censé être plus court queh
bien que beaucoup de gens ne l'écrivent pas ainsi.t
du groupe 2? Ou peut-être mettret
dans un groupe 4 aveci
?printable
/patnirlbe
n'est pas tout à fait lisible. Je pense que lei
/t
échange est à blâmer. Hmm ...paintrlbe
Non, ça n'a pas aidé non plus. C'est probablement lepr
/pa
échange, alors. Le contour est maintenu, mais je pense avoir lu "pr" et "pa" comme étant sémantiquement (?) 1 lettre.prtnialbe
Ah oui. Cela l'a fait. Pas sûr que je puisse offrir un correctif à l'algorithme cependant.Réponses:
Gelée ,
8074 octets-2 octets en passant de
czar + vex + mow + sun
àczar + vexes + unmown
(lese
s etn
s répétés ne posent pas de problème)-1 octet utilisant
Tị
plutôt queȦÐf
-1 octet utilisant
Œle€Øa
plutôt quei@€ØB>⁵
-2 octets en reconfigurant un peu la présentation
Un programme complet prenant une liste de caractères (ou une chaîne au format Python), qui affiche le résultat du brouillage.
Essayez-le en ligne!
Jelly semble avoir énormément de difficulté (que ce soit ou que j’ai raté un truc qui se produise!) Cela sera sûrement battu par les langages avec une meilleure manipulation des cordes comme
Retina(aucune fonctionnalité aléatoire) ou 05ab1e .Comment?
la source
czar + vex + mow + sun
‽acemnorsuvwxz
. J'écrirai aussi du code commenté à un moment donné.PHP, 278 octets
Essayez-le en ligne!
Étendu
les fonctions
tableau_combine
array_filter
array_keys
ksort
preg_replace_callback
mélanger
la source
Pyth , 79 octets
où
❤
est U + 0018.Essayez-le en ligne!
Échantillon
Il est bien connu qu’un texte peut toujours être téléchargé alors que les lettres de ses mots ont été séchées, tant que leurs lettres et leurs lettres plus leurs lettres plus grandes sont encore bien connues. Étant donné un texte, sacralisez chaque commentaire écrit:
Scamrlbing doit être (puesdo) rnadom.
Un mot est une suqencee du latin chraectars, A thuorgh Z.
Seules les lettres écrites seront complètes.
Les lettres premières et les dernières lettres doivent rester inchangées.
Lorsque vous écrivez, seules les lettres d'un des suiveurs suivants peuvent être écrites:
amsuvrcnoxewz
bhfkdl
gpqy
it
j
(reste en place)la source
\pL
au lieu de[A-Za-z]
?\pL
?\w
suffisant?JavaScript 176 octets
Méthode:
RegExp itère sur le centre de chaque mot (
/\B(\w+)\B/g
) en utilisant 1st replace fn.1st replace fn itère un tableau de RegExp pour chaque groupe de lettres (
/[bdfkhl/g, /[gqpy]/g, etc..
).Chaque itération construit un tableau temporaire de caractères du centre de mots apparaissant dans le groupe de lettres actuel.
Chaque itération utilise ensuite RegExp du groupe de lettres actuel pour parcourir l'ensemble du centre de mots, en utilisant un 2e remplacement fn.
2nd replace fn raccorde de manière aléatoire le tableau temporaire, en supprimant un caractère aléatoire et en le renvoyant.
Démo:
Exécutez-le dans JSFiddle: https://jsfiddle.net/CookieJon/bnpznb7r/
la source
\pL(\pL+)\pL
plutôt\B(\w+)\B
exclure les chiffres et les traits de soulignement.b=>[...].map(...)&&b
enregistre un autre octet. Aussi, je ne suis pas sûr que votrei
soit nécessaire.t.replace(/[A-Za-z]([a-z]+)(?=[a-z])/g,(w,b)=>...w[0]+b...)
ou plusieurs.C,
453, 356369 octetsungolf avec des commentaires
la source
Python 3.6,
349340 octetsEn retrait avec des onglets. La fonction est nommée
A
. Il n’utilise pas de force brute, le temps d’exécution est déterministe, comme l’a demandé OP.la source
Mathematica 232 octets
L'idée de base est de permuter les sous-ensembles correspondant aux 4 groupes de caractères distincts. Probablement place à l'amélioration.
la source
C,
306282 octetsEssayez-le en ligne
Ungolfed:
la source
JavaScript (ES6),
380327311294 octets(
298282265 octets à l'exclusion des règles)Merci à @Shaggy pour les conseils utiles!
La fonction f prend une chaîne de tout type (un seul mot, plusieurs mots, plusieurs mots avec des signes qu’elle interprète comme un saut de mot) et
un tableauune chaîne de "règles" de n'importe quelle longueur séparées par des virgules.Ce tableau de règles, dans le cas de votre question, serait
["aneusvrowxmcz", "bhkfdl", "gqpy", "it"]
"aneusvrowxmcz,bhkfdl,gqpy,it"
Certaines lettres ne sont pas mélangées même si elles le pouvaient, puisque vous avez indiqué dans votre question que les lettres "peuvent échanger des espaces". Si je l’interprète mal, je peux changer le code pour toujours brouiller les lettres qui correspondent aux règles.
Je sais que c'est une énorme quantité d'octets et qu'il ne pourra pas rivaliser avec les langues de golf, mais je voulais essayer quand même, j'espère que ça vous plaira :)
Code non lu non lisible par l'homme:
la source
var
choses s etlet
s. 02) Sauf s'il s'agit d'une fonction récursive, il n'est pas nécessaire d'inclure la variable declaration (f=
) dans votre nombre d'octets. 03) Utilisez currying quand une fonction a 2 paramètres (b=>d=>
au lieu de(b,d)=>
) et appelez votre fonction avecf(b)(d)
. 04) Vous avez lei
drapeau donc pas besoin d'inclureA-Z
dans votre regex. 05) Vous pouvez utiliserindexOf
ousearch
sur une chaîne, sans la diviser en tableau.Clojure,
326322324 octetsMise à jour 1: remplacé
(map(fn[[k v]]...)...)
par(for[[k v]...]...)
Mise à jour 2: regex fixe, utiliser à la
\pL
place de\w
etc.J'ai hâte de voir quelque chose de plus court. La version antérieure non-golfée avec quelques exemples s'exécute:
la source
\pL+
et\PL+
plutôt que d'exclure\w+
et\W+
d'exclure les chiffres et le soulignement.Perl 6 ,
241195 octetsInclut +1 octet pour le
-p
commutateur de ligne de commande.Ungolfed:
la source
(\pL)(\pL+)(\pL)
plutôt que(\w)(\w+)(\w)
d'exclure les chiffres et le soulignement.\pL
Comprend en fait beaucoup de caractères en dehors de la plage autorisée de lettres latines AZ. J'ai mis à jour mon code pour mieux refléter les exigences.\pL
est orthographié<:L>
en Perl 6 cependant.C #,
438394380374 octetsÉconomisez 10 octets grâce à @ MartinEnder ♦.
De manière ennuyeuse,
CaptureCollection
ne met pas en œuvreIEnumerable<T>
et c'est pourquoi le.Cast<Capture>()
nécessaire. Si tout va bien, je peux cependant combiner la requête Linq et laforeach
boucle.Je suis sûr qu'il y a beaucoup de choses qui peuvent être jouées au golf, mais cela m'a pris assez de temps juste pour que ça fonctionne ...
Essayez-le en ligne!
Version formatée / complète:
la source