Commençons par définir le reflet d'un caractère dans une chaîne:
Étant donné une chaîne avec des lettres alphabétiques minuscules distinctes sans espaces tels que abcdefg
, définissez le reflet d'une lettre dans la chaîne c
comme la déplaçant (sans changer l'ordre d'une autre lettre) vers un nouvel emplacement dans la chaîne tel que le nombre de lettres à l'origine à sa droite se trouve maintenant le nombre de lettres à sa gauche.
Ainsi, un reflet de la lettre c
en abcdefg
serait abdecfg
. Explication: il y avait 4 lettres à droite de c
et maintenant, il y a 4 lettres à gauche de c
.
Quelques exemples supplémentaires:
Compte tenu du caractère e
en myfriend
formerait la chaînemyefrind
Compte tenu du caractère a
en axyz
formerait la chaîne xyza
.
Compte tenu du caractère b
en abc
formerait la chaîne abc
.
Compte tenu du caractère d
en d
formerait la chaîne d
.
Compte tenu du caractère e
en ef
formerait la chaîne fe
.
Pour plus d'informations ou pour essayer quelques cas de test, voici un programme (un peu long) que j'ai écrit en C ++.
Le défi
Étant donné une chaîne avec des lettres minuscules distinctes, parcourez chaque caractère par ordre alphabétique et "réfléchissez" la chaîne.
Précisions: les lettres de la chaîne proviennent de a-z
, il n'y a pas d'espaces, les lettres sont uniques et la chaîne a au moins 1 lettre et au plus 26 lettres.
Exemples
Entrée: dcba
. Sortie: dcba
.
Raison: Tout d'abord, reflétez le a
car c'est le caractère de la chaîne qui apparaît le plus tôt dans l'alphabet. Vous obtiendrez adcb
. Ensuite, reflétez le b
comme il vient ensuite dans l'alphabet, pour obtenir badc
. Ensuite, réfléchissez à c
pour obtenir cbad
, puis à d
pour obtenir dcba
.
Entrée: myface
. Sortie: fyecma
.
Astuce: Parcourez les lettres dans l'ordre a, c, e, f, m, y
.
Entrée: a
. Sortie: a
.
Entrée: acb
. Sortie: bac
.
Entrée: cwmfjordbankglyphsvextquiz
. Sortie: ieabhqzugdltkfnvpjxsormycw
.
Notation
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
- Accepter ~ 100 heures après la publication.
Gagnant actuel
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 162891; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 12012; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Réponses:
Brain-Flak , 188 octets
Essayez-le en ligne!
En plus des réflexions décrites dans la spécification de défi, ce code inverse également la chaîne exactement 26 fois. Cela n'a aucun effet sur la sortie finale.
la source
05AB1E ,
2017 octetsEssayez-le en ligne!
Explication
Avec un exemple pour la première itération de
myface
La chaîne est entourée d'espaces à chaque itération car le fractionnement sur la première ou la dernière lettre de la chaîne entraînerait sinon une liste de longueur 1 et la fusion n'inclurait pas cette lettre.
la source
Pyth,
18161916 octetsEssayez-le ici
Explication
la source
Python 3 ,
8073 octetsMerci à Esolanging Fruit de m'avoir rappelé que les fonctions peuvent revenir en modifiant leur argument.
Essayez-le en ligne!
Prend la saisie sous forme de liste de caractères.
la source
Python 2 , 70 octets
Essayez-le en ligne!
Modifie la liste d'entrée
la source
Retina 0.8.2 , 61 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Commencez la boucle à
a
.Si l'entrée contient la lettre actuelle, déplacez-la à la fin, avec une chaîne de
_
s représentant sa position d'origine.Pour chaque
_
mouvement, la lettre recule d'un caractère.Incrémentez la lettre. Après l'avoir
z
changé en a!
pour qu'il ne corresponde à rien et la boucle se termine.Supprimez le
!
.la source
Java 8,
1409692888785 octets-44 octets créant un port de réponse Python 2 @TFeld .
-6 octets grâce à @ OlivierGrégoire .
Modifie la liste d'entrée au lieu d'en créer une nouvelle.
Explication:
Essayez-le en ligne.
la source
s->{for(char c=96;++c<123;){int i=s.indexOf(c);if(i>=0)s.add(s.size()+~i,s.remove(i));}}
for(char c=9;++c>1;)
c'est mieux ;-)char
s'enroule aussi commeInteger.MAX_VALUE + 1 == Integer.MIN_VALUE
.. Smart!s
est un ArrayList, ilindexOf
sera donc de type génériqueT
(qui estCharacter
pour cette liste d'entrée).JavaScript,
858079 octets-6 octets grâce à @DanielIndie
Essayez-le en ligne!
la source
Rubis , 51 octets
Essayez-le en ligne!
Prend un tableau de caractères
Renvoie en modifiant l'entrée
la source
Rouge ,
9694 octets2 octets économisés grâce à Kevin Cruijssen
Essayez-le en ligne!
Plus lisible:
la source
find x c replace x c""insert at x i c
pourfind x c insert at replace x c""i c
supprimer unx
espace et.R ,
737269 octetsEssayez-le en ligne!
Entre et sort un vecteur de caractères.
la source
c
comme nom de variable? c'est affreux, même pour le golf de code!c
pourchar
) plutôt que dans les intégrés intégrés.c
, et c'était horrible quand je ne pouvais pas comprendre ce qui se passait. J'utilise généralementK
ouk
ou mêmeC
juste pour éviter des problèmes comme ça, mais je comprends parfaitement.append
est sans aucun doute le bon outil pour le travail.Perl 5
-p
, 37 octetsEssayez-le en ligne!
la source
Japt ,
2322 octetsEnregistré un octet grâce à Oliver .
Essayez-le en ligne!
la source
,É
parJ
Haskell, 87 octets
Essayez-le en ligne!
la source
f s=foldl(#)s['a'..'z']
?['a'..]
n'est pas infini, carChar
appartient à la classeBounded
. Une liste..]
deBounded
valeurs s'arrête àmaxBound
. Essayez:print [False ..]
.SNOBOL4 (CSNOBOL4) ,
132128 octetsEssayez-le en ligne!
Implémentation simple de l'algorithme requis. Enregistré quelques octets en passant à une fonction plutôt qu'à un programme complet; l'explication reste plus ou moins la même.
la source
Gelée ,
1211 octetsUn lien monadique acceptant une liste de caractères et renvoyant une liste de caractères.
Essayez-le en ligne!
Comment?
la source
ḟ
(filtrer) mais je ne l'ai pas encore réussi.sorted
et parcourt ensuite n itérations de ce qui semble être des opérations moins complexes (aplatissement, fractionnement aux indices trouvés, jointure, inversion ). - et Pythonsorted
est O (n log n).C (clang) ,
164162 octetsEssayez-le en ligne!
f()
prend en charge le tableau de caractères contenant la chaîne d'entrée et la longueur de ce tableau et effectue les réflexions requises en place.callf()
fait de jolies impressions.Crédits
-2 octets. @Kevin. Merci
la source
char *s
et le changementi=96
ài=9
d'économiser 2 octets.a
. MerciAPL + WIN, 63 octets
Demande la chaîne d'entrée
Explication:
la source
Perl ,
7470 octets8480 octets, y compris l'invocation en tant que filtre Unixla source