Problème:
Vous devez créer un programme qui effectue les opérations suivantes:
- prend une grande chaîne de texte en minuscules et compte toutes les occurrences de chaque lettre.
- puis vous mettez les lettres dans l'ordre, du plus grand au moins.
- alors vous prenez cette liste et la transformez en encodeur / décodeur pour le texte.
- encode ensuite le texte avec ce chiffre.
Difficile à comprendre? Voir cet exemple:
Exemple:
Texte de saisie:
Lorem ipsum dolor sit amet, elect adipiscing consectetur. Nunc sed dui à nisi euismod pellentesque ac sed enim. Nullam auctor justo quis diam faucibus, eu fringilla est porttitor. Pellentesque vel pharetra nisl. Vestibulum congue ultrices magna a fringilla. Porteur de Quisque, risus suscipit pellentesque tristique, orci lorem accumsan nisi, scelerisque viverra turpis metus sit amet sapien. Fusce facilisis diam turpis, nec lobortis dui blandit nca. Vestibulum ac urna ut lacus commodo sollicitudin nec non velit. Nulla cursus urna sem, à tincidunt sem molestie vel. Nullam fringilla ante eu dolor bibendum, posuere iaculis nunc lacinia. Sed ac pretium est, vel scelerisque nisl. Phasellus lobortis dolor sodales sapien mollis hendrerit. Entier scelerisque tempor tellus, viverra varius neque mattis in. Entier porta vestibulum nisl, et feugiat tortor tincidunt vel. Aenean dignissim eleifend faucibus. Morbi nec neque vel ante pulvinar mollis eu in ipsum.
Convertissez en minuscules.
Nombre de caractères (par lettre. Espaces et ponctuation ignorés):
[(«a», 49), («b», 11), («c», 34), («d», 22), («e», 93), («f», 9), ( «g», 10), («h», 3), («i», 89), («j», 1), («k», 0), («l», 61), («m », 31), (« n », 56), (« o », 37), (« p », 20), (« q », 12), (« r », 47), (« s », 71), ('t', 59), ('u', 65), ('v', 15), ('w', 0), ('x', 0), ('y', 0) , ('z', 0)]
Nombre de caractères commandés:
[(«e», 93), («i», 89), («s», 71), («u», 65), («l», 61), («t», 59), ( «n», 56), («a», 49), («r», 47), («o», 37), («c», 34), («m», 31), («d », 22), (« p », 20), (« v », 15), (« q », 12), (« b », 11), (« g », 10), (« f », 9), ('h', 3), ('j', 1), ('k', 0), ('w', 0), ('x', 0), ('y', 0) , ('z', 0)]
Créez ensuite une table de recherche à l'aide des listes d'origine et triées:
abcdefghijklmnopqrstuvwxyz
||||||||||||||||||||||||||
eisultnarocmdpvqbgfhjkwxyz
Dictionnaire Python:
{'o': 'v', 'n': 'p', 'm': 'd', 'l': 'm', 'k': 'c', 'j': 'o', 'i': 'r', 'h': 'a', 'g': 'n', 'f': 't', 'e': 'l', 'd': 'u', 'c': 's', 'b': 'i', 'a': 'e', 'z': 'z', 'y': 'y', 'x': 'x', 'w': 'w', 'v': 'k', 'u': 'j', 't': 'h', 's': 'f', 'r': 'g', 'q': 'b', 'p': 'q'}
Et maintenant, encodez le texte original avec cette table de recherche:
«Lvgld rqfjd uvmvg frh edlh, svpflshlhjg eurqrfsrpn lmrh. Njps flu ujr eh prfr ljrfdvu qlmmlphlfbjl es flu lprd. Njmmed ejshvg ojfhv bjrf ured tejsrijf, lj tgrpnrmme lfh qvghhrhvg. Plmmlphlfbjl klm qaeglhge prfm. Vlfhrijmjd svpnjl jmhgrslf denpe e tgrpnrmme. Qjrfbjl qvghhrhvg, grfjf fjfsrqrh qlmmlphlfbjl hgrfhrbjl, vgsr mvgld essjdfep prfr, fslmlgrfbjl krklgge hjgqrf dlhjf frh edlh feqrlp. Fjfsl tesrmrfrf ured hjgqrf, pls mvivghrf ujr imepurh pls. Vlfhrijmjd es jgpe jh mesjf svddvuv fvmmrsrhjurp pls pvp klmrh. Njmme sjgfjf jgpe fld, eh hrpsrujph fld dvmlfhrl klm. Njmmed tgrpnrmme ephl lj uvmvg irilpujd, qvfjlgl resjmrf pjps mesrpre. Slu es qglhrjd lfh, klm fslmlgrfbjl prfm. Paeflmmjf mvivghrf uvmvg fvuemlf feqrlp dvmmrf alpuglgrh. Iphlnlg fslmlgrfbjl hldqvg hlmmjf, krklgge kegrjf plbjl dehhrf rp. Iphlnlg qvghe klfhrijmjd prfm, lh tljnreh hvghvg hrpsrujph klm. Alplep urnprffrd lmlrtlpu tejsrijf. Mvgir pls plbjl klm ephl qjmkrpeg dvmmrf lj rp rqfjd. »
J'adore le python!
Règles:
- Votre programme acceptera une chaîne et en affichera une.
- Convertissez toutes les entrées en minuscules avant de faire quoi que ce soit
- Je me fiche de la façon dont vous triez la liste, mais comptez uniquement les lettres minuscules
- Points bonus (-30) pour faire un décrypteur (pas de copie de la liste de décryptage, faites-le à partir de zéro
- C'est code-golf, donc le code le plus court gagne!
- S'amuser!
Bonus points (-30) for making a decryptor (no copying the decryption list, do it from scratch
? C'EST IMPOSSIBLE! Vous devriez avoir la clé (votre «liste de déchiffrement» ou «table de recherche») pour pouvoir le faire. Le simple fait de prendre un texte chiffré et de s'attendre à ce que quiconque fournisse un décrypteur qui le retransforme en texte brut sans utiliser de clé, c'est comme si vous nous demandiez de poster une question sur StackOverflow sans taper de lettres ou de chiffres. La théorie de l'information nous dit déjà que vous ne pouvez pas obtenir d'informations de nulle part ... donc votre chiffrement de substitution a besoin de cette table de recherche (aka clé).Réponses:
GolfScript, 39 caractères
Version en ligne pour les tests. Notez que le tri n'est pas défini si plusieurs caractères ont le même nombre dans la chaîne d'entrée.
Exemple de sortie
la source
Bash / coreutils, 91 caractères
Enregistrez sous
cipher.sh
, chmod + x et exécutez:la source
Rubis,
1049291 caractèresPlusieurs personnages enregistrés grâce à @Chron
Version en ligne ici. Le tri des caractères avec le même nombre n'est pas défini, comme mentionné dans une autre réponse. Avec l'entrée "asdf", chaque réponse a jusqu'à présent une autre sortie.
En d'autres termes: toutes les réponses ont le même comportement (représentent donc un codage décodable) lorsque l'entrée contient tout l'alphabet avec chaque lettre ayant un décompte unique.
la source
("a".."z").to_a
peuvent être[*?a..?z]
,m.join
peuvent êtrem*''
etdef f(s)...end
peuvent êtref=->s{...}
Mathematica 171
En supposant que
t
c'est le texte de Lorem ipsum.Les règles de remplacement générées par
Thread…-> l
étaient les suivantes:la source
K, 43
la source
C # 386
Non compressé.
la source
e93i89s71u65l61t59n56a49r47o37c34m31d22p20v15q12b11g10f9h3j1k0w0x0y0z0
. Et cela ne se rapproche même pas du défi.PHP, 151
(avec réglage
short_open_tag = On
)Cela attend le texte comme premier argument du script. Ainsi:
la source
R, 137
Sortie (basée sur l'exemple en question):
la source
Smalltalk, 138
entrée en s:
le décodeur est:
mais comme (si je comprends bien) je ne peux pas réutiliser "i" et "m", je vais jouer au golf sans. Le code ci-dessus a deux CR supplémentaires insérés pour la lisibilité, qui n'ont pas été comptés dans le nombre de caractères.
la source
Clojure, 135
(En supposant que le texte d'entrée est contenu dans le var
s
)la source
Python 2.7 (147)
Pas du tout le code le plus court mais comme Python n'est pas encore représenté et comme je vois "j'aime python!" dans le cadre du problème, je vais ici,
Attend que la chaîne d'entrée soit transmise via la ligne de commande. (le nombre de caractères est réduit à 122 si la chaîne d'entrée a été insérée comme par magie dans la variable "s")
Ouput
la source
Perl, 84
.
PS Était-ce une plaisanterie, à propos de déchiffrer? Ou devrais-je réclamer 30 bonus pour avoir prouvé que c'était impossible? Est
aab
déchiffré enaab
oubba
? Oubabaca
était-cecacaba
ouababcb
dans l'original, oubabaca
lui-même, littéralement?la source
C # - 393 octets
La version étendue de la réponse de @ PauloHDSousa …
la source