var QUESTION_ID=66731,OVERRIDE_USER=8478;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/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>
foo(space)(space)(space)bar
вполне приемлемый входОтветы:
Pyth,
1917 байт2 байта благодаря Якубе
демонстрация
Я думаю, что это первый раз, когда функция центральной панели
.[
была полезна. Длина самой длинной строки определяется с использованием неусеченной функции transpose (.T
).Конечные пробелы удаляются путем добавления непробельного символа впереди, удаления пробелов, а затем удаления добавленного символа.
источник
vim,
433635 байтСлишком хорошо, чтобы не публиковать. Обратите внимание на завершающий символ новой строки; это важно.
Спасибо @Marth за сохранение персонажа!
vim-friendly формат:
Объяснение:
источник
sor!
чтобы изменить порядок сортировки, вы можете использовать,col("$")
чтобы получить длину первой строки (теперь самую длинную с тех пор, как порядок изменился), вместо того, чтобы использоватьG$
, сохраняя всего 1 байт! edit : или вы можете сохранить порядок сортировки и использоватьG:let &tw=col("$")
вместо него.:h :sort
я только что обнаружил, что вы можете передать регулярное выражение, чтобы пропустить соответствующий текст в сортировке, так что вы можете использовать:sor /./
сортировку по длине (+4 байта), что позволяет вам удалитьVGrx
(-4 байта) и вторую отмену ( -1 байт). Вы также можете использовать|
разделители вместо<cr>
цепочки команд, что позволяет пропустить значение:
beforelet
(-1 байт) (обратите внимание, что тогда вы должны использоватьsor!
решение,G
это не команда ex). Так:sor! /./|let &tw=col("$")|u|%ce
(с трейлингом<CR>
) следует сохранить 2 байта.Mathematica, 96 байт
Не спрашивайте меня, как это работает, я просто возился с ним, пока он не дал правильный результат.
источник
Funciton , неконкурентоспособный
Эта проблема высветила острое отсутствие функции «максимального значения» (и минимального значения) для ленивых последовательностей, так что ... я добавил их в базовую библиотеку (они называются ⊤ и ⊥ соответственно). Поэтому я не удосужился представить его в виде гольф- ответа (он должен был бы включать объявление функции to, чтобы быть действительным), так что вот только основная программа.
Выполните
(function(){$('pre,code').css({lineHeight:5/4,fontFamily:'DejaVu Sans Mono'});})()
в консоли браузера, чтобы получить более приятный рендеринг.объяснение
Я считаю, что это может быть первый ответ Funciton на этом сайте, который использует лямбда-выражения.
ǁ
для разделения входной строки на новые строки (ASCII 10). Это возвращает ленивую последовательность.ɱ
(map), давая ей лямбду, которая вычисляет длину каждой строки, а затем пропускаем последнюю последовательность,⊤
чтобы получить длину самой длинной строки.ɱ
, давая ей лямбду, которая вычисляет длину каждой строки, вычитает ее из максимальной длины строки, вычисленной ранее, делит ее на 2 (фактически shift-right 1), генерирует столько пробелов (ASCII 32) а затем объединяет строку в эти пространства. (По геометрическим причинам я объявил‡
функцию, которая вызывает‼
(сцепление строк) с обращенными параметрами.)ʝ
чтобы собрать все строки вместе, используя переводы строки (ASCII 10) в качестве разделителя.источник
Сетчатка ,
5452 байтаСимволы
\t
s можно заменить реальными вкладками, но я\t
здесь использовал , потому что в противном случае SE преобразует вкладки в пробелы. Обратите внимание, что во второй строке есть пробел.Попробуйте онлайн.
объяснение
Основная идея состоит в том, чтобы соответствовать строке, которая по крайней мере на два символа короче самой длинной строки (или технически, на два символа короче любой другой строки), и заключать ее в два пробела. Это повторяется до тех пор, пока мы больше не сможем найти такую строку, что означает, что все строки находятся в пределах одного символа максимальной длины (где один символ должен учитывать несоответствия четности, и гарантирует, что эти строки будут сдвинуты влево). центр).
Что касается фактического регулярного выражения:
Просто соответствует любой одной строке, нажимая один захват на группу
1
для каждого персонажа.Это вид сзади, который сопоставляется справа налево и перемещает курсор в начало строки, так что заглядывающий взгляд внутрь может проверить всю строку. Обратите внимание, что из-за отсутствия привязки, просмотр может быть применен из любого места, но это не создает дополнительных совпадений. Мы знаем, что
[^\t]
он всегда будет соответствовать любому символу в строке, потому что входные данные гарантированно будут содержать только пробелы и переводы строк, если это касается пробелов.Этот поисковый запрос пытается найти строку, которая как минимум на два символа длиннее той, которую мы в настоящее время сопоставляем.
[^\t]*
перемещается по строке, чтобы иметь возможность соответствовать любой строке.^
гарантирует, что мы начинаем с начала строки...
затем совпадает с двумя дополнительными символами, которые требуются для более длинной строки. Теперь(?<-1>.)+
сопоставляет отдельные символы в этой строке при извлечении из группы1
(обратите внимание, что.
не может совпадать с переводом строки, поэтому он ограничен одной строкой). Наконец,(?(1)^)
утверждает, что нам удалось очистить всю группу1
. Если строка короче требуемой, это невозможно, поскольку в строке недостаточно символов, чтобы выскочить из группы 1 достаточно часто, чтобы очистить ее.источник
Джольф , 3 байта
Неконкурентоспособный вопрос об обновлениях постдат.
Попробуй это здесь! ,
¯ \ _ (ツ) _ / ¯ Я думал, что это будет полезная функция.
источник
JavaScript (ES6),
9391 байт2 байта сохранены благодаря @ edc65 !
объяснение
Тест
Показать фрагмент кода
источник
.repeat
принимает и|0
CJam,
262319 байтовЯ впервые использую CJam! Четыре байта сохранены благодаря Мартину Бюттнеру. Попробуйте онлайн.
объяснение
источник
qN/_z,f{1$,m2/S*\N}
LabVIEW, 3 или 35 примитивов LabVIEW
Находит строки до тех пор, пока не останется ни одной, затем вычисляет, сколько пробелов добавить, и складывает все вместе.
В качестве альтернативы вы можете использовать встроенное выравнивание по центру на строковых индикаторах, хотя это все равно что обманывать.
источник
Python 2,
8381 байтСпасибо @xnor за сохранение 2 символов
Пример ввода:
пример вывода:
И заканчивая на втором месте 84 байтами, используя str.center () и str.rstrip (спасибо @JF).
источник
len
переменной, которую вы используете дважды - это даже на 5 символов (напримерrange
). Также вы можете использоватьmap
для списка комп.str.rstrip()
после звонка,center
чтобы избавиться от пробела.len(max(a,key=len))
, смотрите это .TeaScript , 24 байта
Перебирает строки, добавляет
floor((max line length - line length) / 2)
пробелы в начало.Ungolfed
Попробуйте онлайн
источник
PowerShell, 58
67байтдо 58 байт благодаря комментариям @ mazzy:
$a
, перебирает каждую строку с помощью|%{...}
.string.padleft()
метод для каждой строки через% -member
ярлык, который принимает желаемую конечную длину строки в качестве параметра.array_longest_line_length/2 + current_line_length/2
current_line_length/2
->$_.length/2
источник
Emacs Lisp, 203 байта
Ungolfed:
Сосредоточенный:
источник
HTML, 40 байт
Показать фрагмент кода
Snippet включает
</xmp>
тег, потому что программа просмотра фрагмента кода хочет, чтобы мои теги были сбалансированы.источник
MATL , 22
31байтКаждая строка вводится с завершающей строкой (то есть enterнажатием клавиши). Пустая строка (два enterнажатия клавиш) обозначает конец ввода.
пример
объяснение
источник
Рубин,
766861 байтОбразец прогона:
источник
->t{(s=t.split$/).map{|l|l.center s.map(&:size).max}}
center
сначала попробовал способ, но, как я понимаю, это само по себе нарушило бы правило «Конечный пробел в выводе не разрешен». Спасибо за&:size
участие - я тоже это попробовал, но я определенно что-то ударил по синтаксису.Haskell,
1118177 байтВход в функцию f, вывод не печатается.
Использование: загрузить в интерпретатор,
ghci center.hs
а затем, если вы хотите напечатать вывод f на заданной строкеputStr$f"Programming Puzzles\n&\nCode Golf"
Редактировать: Спасибо Ними за 34 байта, отличная работа! : D
источник
map
:<$>
.replicate(...)' '
можно заменить на[1.. ...]>>" "
. В общем и целом:unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q]
.l1 >> l2
делает (длина l1) копии l2 и объединяет их. Например"abcd" >> [1,2]
->[1,2,1,2,1,2,1,2]
(<- 4 копии по 1,2 в одном списке). В нашем случае это[1..n]>>" "
n копий пробела, который совпадает с тем, чтоreplicate
делает.R, 126 байт
код
ungolfed
Вероятно, есть лучшие способы сделать это, все еще работая над этим.
источник
Гема, 160 байт
Написано в основном для моего любопытства, чтобы увидеть, что можно сделать на языке без правильной структуры массива и правильной инструкции цикла.
Образец прогона:
источник
Perl 6 , 61 байт
использование:
источник
for @l {
бритье на 2 байта, и перейтиput " "
наput" "
бритье еще на один байт. Это правда для Perl 6? (Я не знаю Perl 6.) Кроме того, ваш вывод, показанный здесь, не соответствует требуемому выводу; это опечатка?Джапт,
2825Попробуйте онлайн!
Как это работает
источник
PHP , 98 байт
Попробуйте онлайн!
Ungolfed:
Выход:
источник
05AB1E , 2 байта
Builtins ftw ¯ \ _ (ツ) _ / ¯
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
(Предпочтение будет отдаваться заглавной
.C
букве: см. Различия .)источник
Japt , 1 байт
Попробуйте или запустите все тесты
источник