var QUESTION_ID=69385,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/69385/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>
**Leaderboard:**
"oozing snotter"
IMO ~Ответы:
Vim, 18 нажатий клавиш
Важный трюк заключается в том, что вставка чего-либо в визуальном режиме фактически помещает старое содержимое визуального выделения в буфер вставки.
источник
v
будучи включительным и пытаясь выбрать из гласного назад.бред,
238207 байтТребует
,
возврата 0 для EOF, 8-битных оберточных ячеек и способности двигаться влево от ячейки 0. По моему опыту, это наиболее распространенные настройки по умолчанию.Я очень доволен этим. Моя первая попытка была 314 байтов, и это, безусловно, улучшение. :)
Он работает, сохраняя каждый байт от ввода в двух ячейках; один с действительным значением байта, а другой с выводом следующего кода, если дано (значение байта - 97):
Если символ является согласной, он получается с ненулевым значением. Если это гласный, он становится 0. Оттуда просто нужно найти, где начинается второе слово и напечатать все по порядку.
238-байтовая версия этой программы нашла пробел после сбора всех входных данных. Это была головная боль, потому что это включало в себя создание ячейки, содержащей 0, там, где я пытался зациклить ее. Способ, который я решил, позволил вычесть 30 из каждого символа в первом слове и 32 из каждого символа после него. Довольно большая часть кода была посвящена обработке этой чепухи.
Теперь 32 вычитается из каждого символа в цикле ввода, который короче и имеет похожий побочный эффект, с которым легче иметь дело. В качестве бонуса, выполнение этого способа позволило мне создать свой собственный космический символ более коротким способом: вместо того, чтобы вычитать 139 из 171 (171 - это то, что вы получаете, когда вы пробуете пробел через детектор гласных выше), цикл, который добавляет 32 чтобы каждый персонаж старался изо всех сил добавить 32 к 171 ячейке. Это стоит там четыре байта, но это означает, что я могу вычесть из него 171 позже (вместо того, чтобы вычесть 139) для чистой общей суммы сэкономленных 3 байтов.
С комментариями:
источник
y
гласной, но вопрос говорит, что это не так. (nye cat
->ce nyat
)y
как согласная ... Я посмотрю, почему он это делает.vim, 23
Интересно, действительно ли vim конкурентоспособен в этом соревновании? Вероятно, не с языками игры в гольф, но, возможно, с Ruby / Python / Perl / и т.д.
источник
Python,
686360 байтПопробуйте онлайн на Ideone .
Как это устроено
Строка шаблона повторяется трижды (
*3
), в результате чего шаблонВсе экземпляры будут либо совпадать с непустой строкой не гласных, либо с непустой строкой, за которой следует один пробел.
Первый экземпляр будет соответствовать согласным в начале первого слова. Поскольку
+
он жадный, он будет пытаться сопоставить как можно больше, т. Е. Все, вплоть до первого гласного.Из-за этого второй экземпляр будет начинаться с гласного, поэтому он будет соответствовать оставшейся части первого слова, вплоть до пробела, который разделяет слова.
Как и в первом случае, третий будет соответствовать всем согласным в начале второго слова, что приведет к успешному совпадению для всего шаблона.
Необработанная строка
\3\2\1
(r
предотвращает замену Python\3
и т. Д. Управляющими символами) меняет порядок совпадений шаблонов в скобках, т. Е. Заменяет их согласными в начале второго слова, а затем все символы из первого гласного слова первое слово до пробела и, наконец, согласные в начале первого слова.Последний аргумент to
sub
(1
) заставляет его возвращаться сразу после первой успешной замены, чтобы избежать бессмысленных замен в оставшейся части второго слова. Это необходимо, поскольку шаблон может соответствовать любой строке из трех или более последовательных согласных.источник
JavaScript (ES6), 54 байта
объяснение
Контрольная работа
источник
match
когда я вернусь домой+!i
Трюк является хорошим решением. +1Python 3,
10810199 байт(Не использовать регулярные выражения)
Эта функция ожидает ввода через 2 аргумента, например
f('blushing','crow')
. Возвращает новые слова в кортеже.Существует множество решений для регулярных выражений, поэтому я хотел написать что-то, что не использовало бы библиотеку Python.
Как это устроено
Единственной сложной частью является лямбда-выражение
S
(аббревиатура означает « S plit перед первым гласным»). Он рекурсивно «перебирает» данное слово, перемещая по одному символу за раз от началаs
(который начинается со всего слова) до концаp
(который начинается пустым). При первой обнаруженной гласной она возвращает(p,s)
, т.е. (префикс, суффикс). Обратите внимание, что это неправильный порядок по сравнению с параметрами!Я подумал, что для возвращаемого ордера имеет больше смысла префикс, а не суффикс (потому что обычно префикс идет перед суффиксом). Этот порядок может
a,b=S(x)
немного облегчить чтение кода.Но у меня не было выбора порядка в параметрах лямбды, поэтому я не мог определить
p
раньшеs
. Первый параметрs
, должен был взять слово целиком , потому чтоp
имел значение по умолчанию и параметры по умолчанию идут в последнюю очередь . Для этого мне не нужно былоS
дважды вызывать функцию с пустой строкой, и можно было бы сохранить несколько байтов. Однако, возможно, это было просто плохое решение вернуть префикс / суффикс в обратном порядке, поскольку он использовался в лямбда-выражении.Что касается выбора лямбда-выражения над функцией, то требуется больше байтов, чтобы сказать,
def S(s,p=""):return
чемS=lambda s,p="":
. Я могу сделать этот выбор, потому что Python имеет оценку короткого замыкания и троичный оператор. Однако я не могу адекватно объяснить, как я использовал короткие замыкания; это трудно рассуждать.Это мой первый ответ. Я надеюсь, что я сделал это правильно, и что стоит опубликовать решение, которое не может победить.
Редактирование: Спасибо, комментаторы: Немного, вдвое уменьшил количество байтов и удалил ненужную информацию. Попытка улучшить написание. Надеюсь, не ошибся.
источник
C # 6, 115 байт
Это просто боль, пространство имен для регулярных выражений так долго.
источник
System.Text.RegularExpressions.Regex.Replace
44 персонажа! +1 потому что это должна быть какая-то запись.CJam,
272422 байтаВвод / вывод - одно слово в строке. Попробуйте онлайн!
Как это устроено
источник
Perl, 33 байта
Вышеприведенный код имеет длину 32 байта и требует
-p
переключения ( +1 байт ).Подстановка очень похожа на ответ Retina на @ DigitalTrauma , но в этом ответе используются рекурсивные субпаттерны PCRE .
Попробуйте онлайн на Ideone .
источник
Сетчатка , 34
Попробуйте онлайн.
источник
JavaScript ES6,
935852 байтаСохранено 6 байтов благодаря ETHProductions!
Проверь это! (Только ES6)
Показать фрагмент кода
источник
$4
вообще;)C
255201199 байтЯ не вижу здесь много ответов на C, так что наслаждайтесь; Кроме того, впервые в гольф, предложения и критика приветствуются.
Если main () не требуется, мы можем сохранить 24 байта, получив 179 байтов
Ungolfed:
РЕДАКТИРОВАТЬ: Благодаря предложению Feersum я сэкономил 54 байта. = D
источник
strpbrk
.Python 2,
364352269251 байтРЕДАКТИРОВАТЬ: Большое спасибо @Cyoce за помощь мне в гольф 83 байта!
Пожалуйста, помогите мне в этом! Во всяком случае, по крайней мере, я первый ответчик Python. И я надеюсь, что смогу победить Java, если когда-нибудь будет ответ Java!
Попробуй здесь
источник
Japt,
2625 байтК счастью, я добавил класс гласных в функции регулярных выражений Japt несколько дней назад. К сожалению, я не добавил не-гласный класс или обход двойных обратных косых черт в строках регулярных выражений.
¿
Должна быть сырой символ U + 0093. Ввод - многострочная строка, одно слово / строка. Попробуйте онлайн!РЕДАКТИРОВАТЬ: я теперь добавил не гласный класс
\V
и обходной путь\\
(с%
), так что этот код теперь работает для 21 байта : ( Попробуйте онлайн )Как это устроено
Старая версия (26 байт):
Попробуйте онлайн!
Как это устроено
источник
Python 3, 100 (или 99) байтов
Поиграл с несколькими версиями, но не могу получить его ниже.
def f(g)
Вместо этого можно уменьшить его на 99 байтов, чтобы он занял список строк, а не две отдельные строки, но я предпочитаю два аргумента.Альтернатива равна длине:
Я пытался заменить, как @TanMath использует, но я не мог получить его короче. Кроме того, TanMath может сократить свой ответ на байт, также используя
"[aeiou]"
вместо,"[aeiou]+"
потому что нам нужно только сопоставить отдельные экземпляры. Наконец, реализацияinput()
py2 изменилась между py2 и py3 - он автоматически оценивает stdin как строку.источник
s=re.split
в виду в альтернативе?*
in*g
. 2. Вторая версия может быть в гольфеlambda x,y,s=lambda s:re.split("[aeiou]",s)[0]:(s(y)+x[len(s(x)):],s(x)+y[len(s(y)):])
.f=
.s
это аргумент по умолчанию, поэтому вам не нужно его указывать. Безымянная лямбда является приемлемым представлением;f=
не требуется.sed, 38 знаков
Использование расширенного регулярного выражения из решения Retina .
Длина выше составляет 37 символов и требует
-r
переключения (+1 символ).Пример:
источник
C # 6, 165 байт
Expanded:
источник
"aeiou".ToCharArray()
может быть'a','e','i','o','u'
для -2 байтовIndexOfAny
это не принимает params, так что это должно бытьnew[]{'a','e','i','o','u'}
IndexOfAny
, это метод params. В любом случае, отличный ответ𝔼𝕊𝕄𝕚𝕟, 24 символа / 42 байта
Try it here (Firefox only).
Если вам нужна помощь в понимании этого, это переводит ES6 как
источник
PowerShell, 52 байта
Это регулярное выражение заменить четырьмя группами захвата; с участием:
('(.*?)([aeiou]\S+) '*2)
в'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
"$args "
Силы массив арг в строку, и добавляет косую пространство так , тянущееся пространство в регулярном выражении не будет нарушать его.источник
JavaScript (ES6),
1201071021019992 байтаЭто учитывает, если параметры были объектом, подобным этому, и назад:
var a = {x: "man", y:"plaster"]}
источник
.match(/[aeiou]/).index
может стать:.search`[aeiou]`
Python,
129108105109 байтЭта программа принимает список слов, как это
["master","plan"]
РЕДАКТИРОВАТЬ : Спасибо @ Volollity
РЕДАКТИРОВАТЬ: теперь с помощью re.split
Этот ответ использует регулярные выражения, как и большинство из них.
Попробуй здесь
источник
str.replace
заменяет все экземпляры подстроки, поэтому вы хотите ограничить его одной заменой.replace(f,l,1)
. Тем не менее, вы можете сохранить связку, используяi,j=input()
и перепривязывая,re.findall
и'[^aeiou]+'
к символьным переменным.input()
в две переменные. Вы имели в видуi,j=input().split()
(иraw_input()
в Python 2)?"sass","bit" -> "babb", "sit"
,Java 8, 343 байта
Здесь у вас есть ваш первый Java-ответ. Не то, чтобы опыт игры в гольф, поэтому каждое предложение ценится!
Ungolfed:
источник
java.util.function.Function
? Я очень сомневаюсь, что он должен быть там, если вы не имеете в видуimport
, но отбросьте импорт, потому что вы обращаетесь к нему только один раз. Изменитьpublic class C{public static void Main(String[] a)
наinterface C{void Main(String[]a)
Function<String, Integer>
не нужны пробелыfor(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;
наfor(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
i1
это ужасное, слишком длинное имя.Function<String, Integer>
вjava.util.function.Function<String,Integer>
и падение импортаОктава, 96 байт
Благодаря встроенным назначениям Octave и функциональности «index -where», все это всего лишь определение одной анонимной функции. По сути, мы восстанавливаем нанизанную строку, сохраняя точки отсечения в
a
иb
. Я особенно доволен встроеннойf
функцией, которая находит точку отсечения и не позволяет мне дважды использовать всюfind(ismember(a,b),1)
вещь. Кроме того, нет регулярных выражений :) .источник
TeaScript , 27 байт
\w
на самом деле[^aeiou]
.источник
\w
регулярное выражение на[^aeiou]
? Почему?\w
уже использовался JavaScript. Я скоро вернусьЭликсир ,
143117 байтРазделите две строки (a, b) на первом гласном и создайте новые строки для возврата.
РЕДАКТИРОВАТЬ: получил несколько байтов, используя сопоставление с образцом вместо неуклюжих
elem
вызовов, чтобы получить значения из кортежей.источник
Java, 147 байт
Я предполагаю, что просто функция тоже хорошо.
split(regex)
к сожалению, потребляет разделитель, что означает, что я должен использовать,substring
чтобы получить суффиксы.источник
Pyth,
3028 байтПринимает ввод и выдает вывод в виде списка двух слов.
Попробуйте онлайн.
источник
ACm,Kh:d"[aeiou]"3.-dKQ+V_GH
.A
назначает двухэлементный список G и H иC
транспонирует. Там может быть что-то даже лучше.Python (без регулярных выражений), 85 байт
Образец прогона:
t
является рекурсивной функцией, которая вычисляет индекс самой ранней гласной после первого символа в своем аргументеs
. Если второй символs[1]
является гласным, он оценивается какTrue
, что имеетint
значение1
. В противном случае он выполняет рекурсивный вызов с удалением первого символа и добавляет 1 к результирующему индексу, используя-~
(дополнение двух к одному дополнению). Наконец, результатыt
используются в качестве индексов для нарезки строк для вычисления ложности.источник
GNU Awk 4.0, 48 символов
Образец прогона:
источник
PowerShell, 61 байт
Использует регулярное выражение для замены первых не гласных символов каждого слова
источник