var QUESTION_ID=98252,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/98252/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<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="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><div id="language-list"> <h2>Winners 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><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>
ab
?Ответы:
Python 2,
6863 байтаВозвращает True или False . Проверьте это на Ideone .
источник
Сетчатка , 11 байт
Попробуйте все тестовые случаи. Первые два байта делают его многострочным.
Довольно буквальная интерпретация правил, очевидно, использует регулярные выражения, как и все программы Retina.
источник
perl -pE '$_=/^((.+)\2)+$/'
Желе , 10 байт
Не совсем эффективно ... Попробуйте онлайн!
Как это работает
источник
Haskell,
7269 байтов (без регулярных выражений)Метод грубой силы. Попробуйте это на Ideone .
Спасибо BlackCap за -3 байта.
объяснение
Вспомогательная функция
g
берет список строк и проверяет, что она состоит из пар идентичных строк, например["aa","aa","bba","bba","ab","ab"]
. Функция (анонимная) main разбивает строку всеми возможными способами и проверяет, что хотя бы одно разбиение приводит к получению спискаg
.источник
or.map
наany
any g.map(words.concat)
и подумал : «Эй, я могу Гольфany
вor
» ...Python 2, 60 байт
Я надеюсь, что это правильно. Он работает довольно медленно и
and
не выглядит оптимальным.источник
and
вас там.Желе , 12 байт
На два байта длиннее моего другого ответа , но этот подход намного более эффективен и обрабатывает все тесты, кроме одного.
Попробуйте онлайн!
Как это работает
источник
Pyth - без регулярных выражений -
1312 байтПроверяет, состоит ли какой-либо из разделов из всех строк, которые равны друг другу при разделении на две части.
Тестовый пакет .
источник
Брахилог , 14 байтов (без регулярных выражений)
Попробуйте онлайн!
Это слишком медленно для некоторых тестовых случаев
объяснение
источник
JavaScript (ES6), без регулярных выражений,
7574 байта1
В противном случае возвращается за деньги0
. Редактировать: 1 байт сохранен благодаря @ edc65.источник
substr
без измененияi
. Но сslice
повторением 3 раза вы можете сохранить 1 байт для псевдонимаi
? Я понимаю, чтоs.substr(i,i+i)
возвращает то же самое,s.slice(i,i+=i)
но затем я использую измененное значениеi
позже ...s.substr(i,i)
2 байта меньше, чем наs.slice(i+i)
2 байта большеPython, 58 байт
Это основано на рекурсивном методе Денниса . Трюк с булевым отрицанием также взят оттуда.
Новая идея состоит в том, чтобы проходить по разделам
(p,s)
исходной строки, начиная с('',s)
многократного перемещения первого символаs
в качестве последнего символаp
. Это позволяет ссылаться на части напрямую, без нарезки строк. Но, поскольку раздел начинается сp
пустого, мы должны быть осторожны, чтобы избежать бесконечных цикловf(s)
вызововf(s)
.источник
JavaScript (ES6), 24 байта
Вероятно, не становится короче этого.
источник
\2
?\1
, ноaab
возвращаетtrue
... спасибо за исправление.PHP, 40 байт
печатает 0 для ложного и 1 для истинного
источник
Python,
6664 байтаСпасибо @Zgarb за -1 байт!
Возвращает
True
илиFalse
.Попробуйте онлайн!
Любая помощь в гольф это будет оценено.
источник
Ракетка 230 байтов
Печатает '!' для каждого способа, которым строка является платной. Печатает '.' в конце.
Ungolfed:
Тестирование:
Выход:
источник
Perl, 16 +2 = 18 байт (с регулярным выражением)
Беги с
-nl
флагами.-E
это бесплатно.Беги как:
Возвращает список групп захвата (правдивых), если это допустимо, и нулевой строки, если это не так.
объяснение
Эти
-nl
флаги будут выполнять код в цикле (-n
), помещая вход (с задней новой строкой удалена из-l
) в переменную$_
каждый раз, а затем оценить код каждый раз , когда вход вводится, пока программа не будет вручную прекращена.-E
Флаг позволяет оценивать код в командной строке, и позволяетsay
команду.Если совпадение найдено (например, если строка является допустимой), то регулярное выражение возвращает список групп захвата, который оценивается как истинный, который затем передается
say
и выводится. Если совпадений не найдено, то регулярное выражение возвращает пустую строку, которая оценивается как ложное значение, которое затем передаетсяsay
и выводится.Образец:
источник
GNU Пролог,
4946 байтовВероятно, работает и в других вариантах, хотя они не все представляют строки одинаково; Представление GNU Prolog является полезным для этой проблемы.
Неясно, считается ли это использованием регулярных выражений или нет. Он не использует никаких функций, подобных регулярному выражению, но вся семантика языка похожа на семантику регулярного выражения.
Новая версия (использует трюк рекурсии, замеченный в некоторых других ответах):
Старая версия:
Это предикат (эквивалент функции Пролога)
s
, а не полная программа. Используйте это так:Интересная особенность старого решения заключается в том, что если вы спросите переводчика: «Есть ли еще решения?» с помощью использования
;
вtrue ?
приглашении (вместо того, чтобы спрашивать «есть ли какое-либо решение» путем нажатия возврата в приглашении, как я делал выше), он возвращает «true» количество раз, равное количеству различных способов выражения строки в заданной форме (например, он возвращает «true» дважды с помощьюs("aaaa").
, поскольку это может быть проанализировано как(a a)(a a)
или как(aa aa)
).Программы Prolog часто обратима ( что позволяет ,
s
чтобы сформировать список строк с заданным свойством). Более старый не (это входит в бесконечный цикл), но это из-за метода игры в гольф, который я использовал, чтобы гарантировать, что C не пуст; если вы переписываете программу для явного указания C как непустого, она генерирует строки вида «aa», «aabb», «aabbcc» и т. д. (Prolog, будучи Prolog, не определяет тождества для символов, которые их делают вверх, просто спецификация, какие символы одинаковы). Более новый генерирует строки вида «aa», «abab», «abcabc» и т. Д .; это бесконечный цикл сам по себе, и, таким образом, он никогда не достигнет точки, в которой он застрянет из-за невозможности обнаружить строку нулевой длины.источник
Brainfuck, 177 байтов
отформатирован:
Ожидается ввод без завершающей строки. Отпечатки
\x00
за ложь и\x01
за правду.Попробуйте онлайн.
Это реализует поиск в глубину. В частности: проверьте наличие повторяющихся префиксов увеличивающейся длины, начиная с текущего суффикса, затем перейдите к следующему суффиксу, если совпадение найдено, в противном случае вернитесь назад.
В начале строка переворачивается, и
\x01
в конце помещается страж .Лента разделена на 4-ячеечные узлы. Расположение памяти узла:
c h x 0
где
c
- символ,h
это флаг, обозначающий, находится ли символ в первой половине повторяющегося префикса, иx
флаг, который отслеживает текущую пару сравниваемых символов. Этиh
флаги остаются на месте в то время какx
флаги образуют окно движущегося.Если строка является платной, указатель попадает рядом с часовым в конце основного цикла; в противном случае указатель падает с левой стороны строки при возврате.
источник
Брахилог , 5 байт
Попробуйте онлайн!
Обратите внимание, что этот алгоритм может занять очень много времени, особенно в случаях фальси, поскольку он проверяет все возможные разделы входной строки.
объяснение
Для входной строки, подобной
"ababcc"
,~c
пробует разные разделы до тех пор, пока не дойдёт до этого["abab", "cc"]
, и в этот момент~j
оба элемента списка будутᵐ
успешны["ab", "c"]
, выходные данные и предикат завершатся успешно.источник
R , 31 байт
Попробуйте онлайн!
На основании ответа Retina.
р , 129 байт
А вот оригинальный ответ без регулярных выражений:
Попробуйте онлайн!
источник
Lithp , 57 символов
Пример использования:
источник