Commençons par redéfinir la réflexion d'un personnage dans un tableau 2D de caractères:
Étant donné un tableau carré de caractères 2D avec des lettres alphabétiques en minuscules distinctes, définissez le reflet d'une lettre dans la matrice en l'échangeant avec le caractère directement en face à travers le centre du carré.
Ainsi, un reflet de la lettre c
dans
abcde
fghij
klmno
pqrst
uvwxy
entraînerait la configuration
abwde
fghij
klmno
pqrst
uvcxy
parce que le c
et le w
ont été commutés.
Quelques exemples supplémentaires (avec la même configuration d'origine que ci-dessus):
Refléter le personnage e
se formerait
abcdu
fghij
klmno
pqrst
evwxy
Refléter le personnage m
ferait
abcde
fghij
klmno
pqrst
uvwxy
Refléter le personnage b
se formerait
axcde
fghij
klmno
pqrst
uvwby
Le défi
Étant donné un tableau 2D de caractères avec des lettres minuscules distinctes, parcourez chaque caractère d'une chaîne donnée et "réfléchissez" la matrice.
Clarifications: les lettres de la chaîne proviennent de a-z
, les lettres sont uniques et le tableau est au moins 1x1 et au plus 5x5 (évidemment, car il n'y a que 26 caractères dans l'alphabet anglais.) Les caractères de la chaîne sont garantis pour être dans le tableau 2D. La chaîne comporte au maximum 100 caractères.
Contribution
Une chaîne s
, un entier N
, puis unNxN
tableau de caractères.
Exemple
Contribution:
ac
2
ab
cd
Production:
dc
ba
* Raison: Tout d'abord, reflétez le a
avec le d
. Ensuite, reflétez le c
avec le b
car c
est la deuxième lettre de la chaîne d'entrée.
Notation
- La sortie peut être donnée 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.
- 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.
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 = 163084; 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>
N
comme une entrée si nous ne avons pas besoin?Réponses:
Octave ,
856866 octetsL'utilisation
eval
, avec une boucle à l'intérieur, a permis d'économiser beaucoup d'octets! Je me suis inspiré de cette réponse de Luis Mendo !Essayez-le en ligne!
Explication:
la source
Python 2 , 76 octets
Essayez-le en ligne!
Prend entrée:
s
: chaîneN
: ignoréa
: chaîne de caractères jointeRenvoie une liste plate de caractères
Si je dois prendre le tableau comme une liste:
Python 2 ,
111108107104 104 octetsEssayez-le en ligne!
Prend entrée:
s
: chaînen
: inta
: Listes 2D de caractèresRenvoie une liste 2D de caractères
la source
Java 10,
126123116 116 octetsModifie la matrice de caractères d'entrée au lieu d'en renvoyer une nouvelle pour enregistrer les octets.
Essayez-le en ligne.
Explication:
la source
Python 3 ,
122111 octetsEssayez-le en ligne!
Renvoie un tableau 2D de caractères.
la source
a
etb
et l' utilisationn+~x
etn+~y
enregistre directement 2 octets:a,b=n+~x,n+~y;A[x][y],A[a][b]=A[a][b],A[x][y]
àA[x][y],A[n+~x][n+~y]=A[n+~x][n+~y],A[x][y]
R ,
7461 octets-13 octets grâce à Giuseppe.
Essayez-le en ligne!
Saisit un vecteur de caractères à rechercher
s
, la taille de la matricen
et la matrice elle-mêmem
. S'il est absolument nécessaire de prendre le premier argument comme chaîne , cela gâcherait à peu près le plaisir.la source
Gelée ,
1514 octetsEssayez-le en ligne!
Programme complet.
Explication:
La dernière opération nécessite plus d'explications. Notons f =
Ṛi,C$¥¦
, puis pour la valeur['abcd','a','c']
qu'il calcule('abcd' f 'a') f 'c'
, qui se développe comme suit:la source
Retina 0.8.2 , 96 octets
Essayez-le en ligne! Prend la chaîne
s
et le tableau de caractères comme une chaîne délimitée par des sauts de ligne sans l'entierN
. Explication: Chaque caractèrec
des
est traité à son tour. L'expression régulière correspond à deux positions équidistantes des extrémités du tableau, dont l'une estc
et l'autre est son miroirm
. Ces caractères sont échangés etc
supprimés des
.Traite
s
tour à tour chaque personnage .$1
capturec
.$3
capture une pile de caractères dans le tableau en préfixant l'un desc
oum
.$2
capture le reste des
tous ces personnages.Si
m
précèdec
,$4
a une valeur,$5
capturem
et$6
capture les caractères entrem
etc
.$7
capture$6
comme une pile mais sa valeur n'est pas utilisée.c
est maintenant mis en correspondance dans le tableau lui-même.S'il
m
n'a pas déjà été mis en correspondance,$8
capture éventuellement une valeur, auquel cas$9
capture les caractères dec
àm
,$10
capture$9
comme une pile inutilisée et$11
capturem
. La valeur est facultative dans le casc
etm
est le même caractère.$12
capture les caractères suffixant l'autrec
etm
. Un groupe d'équilibrage est utilisé pour s'assurer qu'il$12
est aussi long que$3
profond, c'est-à-dire que le préfixe et le suffixe sont de la même longueur.Les morceaux sont ensuite réassemblés - d' abord le reste
s
et le préfixe du tableau, puis sic
précédém
puism
puis au milieu, puisc
, alors sim
précédéc
puis le milieu puism
, le suffixe.Maintenant que
s
c'est vide, il est supprimé.la source
JavaScript, 85 octets
Prend la chaîne
S
et un tableauA
comme chaîne jointe.Afficher l'extrait de code
la source
Perl 5
-lpF
, 97 octetsEssayez-le en ligne!
la source