Давайте начнем с переопределения отражения символа в двумерном массиве символов:
Для заданного квадратного массива символов с четкими строчными буквами алфавита определите отражение буквы в матрице, поменяв ее местами с символом прямо напротив него через центр квадрата.
Таким образом, отражение буквы c
в
abcde
fghij
klmno
pqrst
uvwxy
приведет к конфигурации
abwde
fghij
klmno
pqrst
uvcxy
потому что c
и w
были переключены.
Еще несколько примеров (с той же первоначальной конфигурацией, что и выше):
Отражение персонажа e
сформирует
abcdu
fghij
klmno
pqrst
evwxy
Отражение персонажа m
сделало бы
abcde
fghij
klmno
pqrst
uvwxy
Отражение персонажа b
сформирует
axcde
fghij
klmno
pqrst
uvwby
Соревнование
Для заданного двумерного массива символов с разными строчными буквами просмотрите каждый символ в данной строке и «отразите» его в матрице.
Пояснения: буквы в строке взяты из a-z
, буквы уникальны, а массив не менее 1x1 и не более 5x5 (очевидно, поскольку в английском алфавите всего 26 символов). Символы в строке гарантированно будут во 2-м массиве. Строка длиной не более 100 символов.
вход
Строка s
, целое число N
, а затемNxN
массив символов.
пример
Входные данные:
ac
2
ab
cd
Выход:
dc
ba
* Причина: во-первых, отражать a
с d
. Затем, отражают c
с , b
потому чтоc
это вторая буква во входной строке.
счет
- Вывод может быть дан любым удобным способом .
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Текущий Победитель
<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
в качестве входных данных, если нам это не нужно?Ответы:
Октава ,
856866 байтИспользование
eval
с циклом внутри сэкономило много байтов! Я получил вдохновение от этого ответа по Луису Mendo !Попробуйте онлайн!
Объяснение:
источник
Python 2 , 76 байт
Попробуйте онлайн!
Принимает участие:
s
: строкаN
: игнорируетсяa
: объединенная цепочка символовВозвращает плоский список символов
Если у меня есть взять массив в виде списка:
Python 2 ,
111108107104 байтаПопробуйте онлайн!
Принимает участие:
s
: строкаn
: inta
: 2D списки персонажейВозвращает 2D список символов
источник
Java 10,
126123116 байтИзменяет входную символьную матрицу вместо возврата новой для сохранения байтов.
Попробуйте онлайн.
Объяснение:
источник
Python 3 ,
122111 байтПопробуйте онлайн!
Возвращает двумерный массив символов.
источник
a
иb
и использоватьn+~x
иn+~y
непосредственно сохраняет 2 байта: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]
р ,
7461 байт-13 байтов благодаря Джузеппе.
Попробуйте онлайн!
Вводит вектор символов для поиска как
s
, размер матрицы какn
и сама матрица какm
. Если абсолютно необходимо принять первый аргумент как строку , это сильно испортит удовольствие.источник
Желе ,
1514 байтПопробуйте онлайн!
Полная программа.
Объяснение:
Последняя операция требует большего объяснения. Обозначим f =
Ṛi,C$¥¦
, затем для значения['abcd','a','c']
вычисляем('abcd' f 'a') f 'c'
, что расширяется до:источник
Сетчатка 0.8.2 , 96 байт
Попробуйте онлайн! Принимает строку
s
и массив символов в виде строки с разделителями новой строки без целого числаN
. Объяснение: Каждый символc
изs
перерабатывается в свою очередь. Регулярное выражение соответствует двум равноудаленным позициям от концов массива, одно из которых является,c
а другое - его зеркаломm
. Эти символы поменялись местами иc
удалены изs
.Процессы каждого персонажа по
s
очереди.$1
захватываетc
.$3
захватывает стек символов в массиве с префиксом одного изc
илиm
.$2
захватывает остатокs
плюс всех этих персонажей.Если
m
предшествуетc
,$4
имеет значение,$5
захватываетm
и$6
захватывает символы междуm
иc
.$7
захватывает$6
как стек, но его значение не используется.c
теперь сопоставляется в самом массиве.Если
m
это еще не было найдено, то при$8
желании захватывает значение, в этом случае$9
захватывает символы изc
вm
,$10
захватывает$9
как стек, который не используется, и$11
захватываетm
. Значение является необязательным в случаеc
иm
является тем же символом.$12
захватывает символы, суффикс другогоc
иm
. Балансировочная группа используется для обеспечения того, чтобы$12
она$3
была глубокой, то есть префикс и суффикс имеют одинаковую длину.Затем кусочки соединяются вместе - сначала остаток
s
и префикс массива, затем, еслиc
предшествует,m
затемm
середина, затемc
, затем, еслиm
предшествуетc
затем серединаm
, затем суффикс.Теперь, когда
s
пусто, оно удалено.источник
JavaScript, 85 байт
Принимает строку
S
и массивA
как объединенную строку.Показать фрагмент кода
источник
Perl 5
-lpF
, 97 байтПопробуйте онлайн!
источник