var QUESTION_ID=86647,OVERRIDE_USER=48934;function answersUrl(e){return"http://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"http://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>
Ответы:
V ,
1514 байтПопробуйте онлайн!
Довольно простое решение. Идеальный вызов для V!
Объяснение:
Удобно, основываясь на том, как работает рекурсия, это будет выполняться один раз для каждой каретки.
источник
Чеддер,
777267 байтНет регулярных выражений!
Мне нравится этот ответ, так как он является прекрасной демонстрацией способностей Чеддера. Главным образом благодаря функции замены, добавленной Conor. PR для dev никогда не создавался, поэтому функция замены существует только в этой ветке (обновление: я сделал PR, и теперь он в последней бета-ветке, с которой вы можете установить
npm install -g cheddar-lang
)Я нашел способ игры в гольф, но, к сожалению, недосмотр приводит к тому, что это происходит, когда длина предметов не одинакова:
Я мог бы сэкономить много байтов, используя регулярные выражения, и на самом деле я только что сделал регулярные выражения для Cheddar ... единственная проблема в том, что нет никаких регулярных выражений: /
объяснение
Чтобы лучше понять. Это то, что
.lines
возвращается для1^2
.turn
с поворотом этим:в:
Еще один пример, который сделает это более понятным:
будет выглядеть так:
Почему формат?
То, что
%-2s
делает, довольно просто.%
указывает, что мы запускаем «формат», или что переменная будет вставлена в эту строку в этой точке.-
означает правую строку, и2
это максимальная длина. По умолчанию он дополняется пробелами.s
просто указывает, что это строка. Чтобы увидеть, что он делает:источник
turn
метод для струн?Perl, 21 + 1 = 22 байта
Беги с
-p
флагом. Замените♥
необработаннымESC
байтом (0x1b
) и↓
вертикальной вкладкой (0x0b
).Вертикальная вкладка - идея Мартина Эндера. Это спасло два байта! Спасибо.
источник
JavaScript (ES6),
5655 байтRegexps на помощь, конечно. Первый заменяет все символы пробелами, если только он не находит каретку, в этом случае он удаляет каретку и сохраняет за ней символ. (Эти символы гарантированно существуют.) Второй является очевидным, чтобы заменить каждую каретку и ее следующий символ пробелом.
Редактирование: 1 байт сохранен благодаря @Lynn, который разработал способ повторного использования строки замены для второй замены, позволяющей отображать замену в массиве регулярных выражений.
источник
s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))
это байт короче.Python 3,
15710198858374 байтаЭто решение отслеживает, был ли предыдущий символ
^
, а затем решает, выводить ли в первую или вторую строку, основываясь на этом.Выходы в виде массива
['firstline', 'secondline']
.Сохранено
1315 байт благодаря @LeakyNun!Сохранено 7 байтов благодаря @Joffan!
источник
a=['','']
и объединять' '
иc
непосредственно вa[l]
иa[~l]
?Python 2, 73 байта
Нет регулярных выражений Помнит, был ли предыдущий символ
^
, и поместите текущий символ в верхнюю или нижнюю строку, основываясь на этом, и пробел в другом.источник
Pyth, 17 байт
Возвращает массив из 2 строк. (Готовьтесь
j
присоединиться к ним с новой строкой.)Попробуйте онлайн .
источник
MATL , 18 байт
Попробуйте онлайн!
источник
Рубин, 47 + 1 (
-n
флаг) = 48 байтЗапустите это так:
ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'
источник
$_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")
и-p
вместо-n
.+$/
означает, что он не будет сохранять байты.puts
добавляет новую строку для вас автоматически, когда,
между аргументами присутствует.ruby -p ... <<< 'input'
но я согласен, если он пропустил перевод строки, это не хорошо! На самом деле, я мог добавить новую строку в мои тесты раньше ... Это было на работе, поэтому я не могу проверить!gets
что большую часть времени включает в себя завершающий символ новой строки, но если вы передадите конвейер в файл, который не содержит завершающий символ новой строки, он не появится, и результат будет неправильным , Протестируйте ваш код,ruby -p ... inputfile
поскольку Ruby перенаправляет вgets
файл, если это аргумент командной строки.Питон (2),
766867 байт-5 байт благодаря @LeakyNun
-3 байта благодаря @ KevinLau-notKenny
-1 байт благодаря @ValueInk
-0 байт благодаря @DrGreenEggsandIronMan
Эта анонимная лямбда-функция принимает входную строку в качестве единственного аргумента и возвращает две выходные строки, разделенные новой строкой. Чтобы назвать его, дайте ему имя, написав перед ним "f =".
Довольно простое регулярное выражение: первая часть заменяет следующее пробелом: любой символ и символ
морковиили только символ, но только если перед ними нет знака. Вторая часть заменяет любую каретку в строке и символ после нее пробелом.источник
from re import*
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]
для -1 байтаВыпуклый, 24 байта
Попробуйте онлайн!
источник
Сетчатка, 16 байт
Порт моего Perl-ответа, на который указал Мартин Эндер. Заменить
♥
на необработанныйESC
byte (0x1b
) и↓
вертикальную табуляцию (0x0b
).источник
shell + TeX + catdvi,
5143 байтаИспользует
tex
набор красивой математики, а затем используетcatdvi
для создания текстового представления. Команда head удаляет ненужную информацию (нумерацию страниц, завершающие символы новой строки), которая в противном случае присутствует.Изменить: Зачем долго, правильно, вещь и перенаправление,
/dev/null
когда вы можете игнорировать побочные эффекты и писать в один файл письма?пример
Входные данные:
abc^d+ef^g + hijk^l - M^NO^P (Ag^+)
Вывод TeX (обрезается до уравнения): Окончательный вывод:
Допущения: начинайте с пустого dir (или, в частности, dir без имени, оканчивающегося на «i»). Ввод - это единственный аргумент скрипта оболочки. Ввод не является пустой строкой.
Кто-то скажет мне, особенно если это нарушение правил
catdvi
.источник
Haskell,
745655 байтВозвращает пару строк. Пример использования:
unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"
->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")
g
создает список пар, где первый элемент - это символ в верхней строке, а второй элемент - это символ в нижней строке.unzip
превращает его в пару списков.Редактировать: @xnor предложил
unzip
сохранить 18 байтов. @Laikoni нашел еще один байт для сохранения. Благодарность!источник
j=unzip.g
?g[]=[]
на,g x=x
чтобы сохранить один байт.Perl, 35 байт
34 байтов код + 1 для
-p
использование
Примечание: это точно так же, как ответ Value Ink , который я заметил позже. Удалит при необходимости, поскольку это не добавляет к решению Ruby.
источник
Java 8 лямбда,
132128112 символовВерсия без гольфа выглядит так:
Выводится в виде массива, просто проверяя наличие каретки и, если да, следующий символ будет помещен в верхний ряд, иначе будет пробел.
Обновления
Заменены символы с их значениями ascii, чтобы сохранить 4 символа.
Спасибо @LeakyLun за указание использовать вместо него массив символов.
Также благодаря @KevinCruijssen для переключения
int
на ,char
чтобы сохранить еще несколько символов.источник
char[]
и использовать,for(char c:i)
чтобы увидеть, можно ли уменьшить количество байтов.i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}
с"abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray()
вводом. ( Идея этих изменений. )Кокос ,
122 11496 байтИзменить:
826 байтов вниз с помощью Leaky Nun.Итак, как я узнал сегодня, у python есть троичный условный оператор, или фактически два из них:
<true_expr> if <condition> else <false_expr>
и<condition> and <true_expr> or <false_expr>
последний из них идет с одним символом меньше.Версия, соответствующая Python, может быть идеально .
Первая попытка:
Звонок с
f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")
принтамиКто-нибудь пробовал еще играть в кокос? Он обогащает Python более функциональными концепциями программирования, такими как сопоставление с образцом и конкатенация функций (с
..
), использованными выше. Поскольку это моя первая попытка кокосового ореха, любые советы будут оценены.Это, безусловно, может быть сокращено, так как любой допустимый код Python также является допустимым, и более короткие ответы Python были опубликованы, однако я попытался найти чисто функциональное решение.
источник
x and y or z
) для заменыcase
.s[0]=="^"
вместоmatch['^',c]+r in l
match['^',c]+r
наs[0]=="^"
, тогдаc
иr
больше не связаны. Как это поможет?s[1]
чтобы заменитьc
иs[2:]
заменитьr
.Дьялог АПЛ, 34 байта
Возвращает двухэлементный вектор с двумя строками
Пробный прогон (вверху - форматирование двухэлементного вектора для потребления человеком):
источник
PowerShell v2 +,
8883 байтаНемного дольше, чем другие, но демонстрирует немного магии PowerShell и немного другую логику.
По сути, та же концепция, что и в Python, - мы перебираем вводимую букву за символом, помним, был ли предыдущая каретка (
$c
), и помещаем текущий символ в соответствующее место. Однако логика и метод определения, куда выводить, обрабатываются немного по-другому и без кортежа или отдельных переменных - мы проверяем, был ли предыдущий символ кареткой, и если да, выводим символ в конвейер и объединяем пробел в$b
, В противном случае мы проверяем, является ли текущий символ символом каретки,elseif($_-94)
и, если это не так, мы объединяем текущий символ$b
и выводим пробел в конвейер. Наконец, мы устанавливаем, является ли текущий персонаж кареткой для следующего раунда.Мы собираем эти символы из конвейера вместе в паранах, инкапсулируем их в a,
-join
что превращает их в строку, и оставляем это вместе с$b
конвейером. Вывод в конце неявный с новой строкой между ними.Для сравнения вот прямой порт ответа Python @ xnor , 85 байтов :
источник
Гема,
4241 персонажаGema обрабатывает ввод как поток, поэтому вы должны решить его за один проход: первая строка записывается сразу после обработки, вторая строка собирается в переменную $ s, а затем выводится в конце.
Образец прогона:
источник
Корица, 21 байт
Неконкурирующий. Попробуйте онлайн.
объяснение
Я не большой любитель регулярных выражений, так что, вероятно, есть лучший способ сделать это.
Строка распаковывается в:
(обратите внимание на завершающий пробел)
Первый
S
этап получает входные данные и использует отрицательный вид сзади, чтобы заменить все символы, кроме кареток, без предшествующей каретки пробелом, а затем удаляет все каретки. Затем он немедленно выводит измененную входную строку с новой строкой и удаляет этотS
этап. Так как STDIN теперь исчерпан, и предыдущий этап не предоставил никакой информации, следующийS
этап снова получает последнюю строку STDIN, а затем заменяет все символы вставки, за которыми следует любой символ, пробелом и выводит их.В Perl псевдо-код:
источник
J ,
2827 байтПопробуйте онлайн!
Должен быть лучший способ ...
источник