Codegolf - Слова Spoonerise

  • Автор темы Денис Кириллов
  • Обновлено
  • 23, Oct 2024
  • #1

Учитывая два слова, возиться с ложкой их, переключая их начальные группы согласных. Выигрывает наименьшее количество байтов.

 
 
 
     <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:** 

Согласные, стоящие перед первой гласной ( body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px} ) are switched.

Вход: Две строчные строки, начинающиеся с разных согласных и каждая из которых содержит гласную. 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; .

Выход: Две закрепленные струны в правильном порядке.

Для ввода и/или вывода две строки также могут быть в списке и т.п. или в виде одной строки с разделителем.

aeiou aeiou plaster man -> master plan blushing crow -> crushing blow litigating more -> mitigating lore strong wrangler -> wrong strangler def ghi -> ghef di few years -> yew fears

Это почти обман этот старый вопрос, но я надеюсь написать более понятную и стабильную спецификацию, чтобы старый можно закрыть как дурак.

#код-гольф #строка

Денис Кириллов


Рег
27 Dec, 2011

Тем
57

Постов
189

Баллов
514
  • 26, Oct 2024
  • #2

Вим, 18 нажатий клавиш

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 an 

Важнейший трюк заключается в том, что при вставке чего-либо в визуальном режиме старое содержимое визуального выделения фактически помещается в буфер вставки.

 

Inspector


Рег
03 Sep, 2007

Тем
68

Постов
214

Баллов
594
  • 26, Oct 2024
  • #3

мозготрах, 238 207 байт

\x01

Требует pl to return 0 on EOF, 8-bit wrapping cells and the ability to move left from cell 0. In my experience, these are the most common default settings.

Я очень доволен этим. Моя первая попытка составила 314 байт, и это, безусловно, улучшение. :)

Он работает, сохраняя каждый входной байт в двух ячейках; один с фактическим значением байта, а другой с выводом следующего кода при его задании (значение байта — 97):

aster

Если иероглиф является согласным, он получается с ненулевым значением. Если это гласная, она становится 0. Далее остается только найти, где начинается второе слово, и напечатать все по порядку.

238-байтовая версия этой программы обнаружила пробел после сбора всех входных данных. Это была головная боль, потому что для этого нужно было создать ячейку, содержащую 0, именно там, где я пытался ее пройти. Мой способ решения заключался в вычитании 30 из каждого символа в первом слове и 32 из каждого символа после него. Довольно большая часть кода была посвящена обработке этой ерунды.

Теперь 32 вычитается из каждый персонаж во входном цикле, который короче и имеет аналогичный побочный эффект, с которым легче справиться. В качестве бонуса, сделав это таким образом, я смог создать свой собственный символ пробела более коротким способом: вместо вычитания 139 из 171 (171 — это то, что вы получаете, когда пропускаете пробел через детектор гласных выше), цикл, который добавляет 32 Каждый символ старается изо всех сил прибавить 32 к ячейке 171. Здесь это стоит четыре байта, но означает, что я могу вычесть из него 171 позже (вместо вычитания 139), чтобы в общей сложности сохранить 3 байта.

С комментариями:

m ||answer||

Вим, 23 года

pl\x00aster \x00m\x00an

Интересно, действительно ли vim конкурентоспособен в этом испытании? Вероятно, не с языками игры в гольф, а, возможно, с Ruby/Python/Perl/и т. д.

plaster man ||answer||

Питон, 68 63 60 байт

, [ [ [<+> >+<-] ----[>-----<--]>+ [ not u ++++++ [ not o ++++++ [ not i ++++ [ not e ++++ [ not a ,> ] ] ] ] ] < ] <[>+<-]>>>+ [ , [ [<+> >+<-] ++++[>--------<-] ] > ] >, ] <<<< [ [<]<[<] >[.,+>] +< ] >[-[+.,]>]

Попробуйте онлайн на идея.

Как это работает

Строка шаблона повторяется трижды ( ,[[[<+>>+<-]----[>-----<--]>+[++++++[++++++[++++[++++[,>]]]]]<]<[>+<-]>>>+[,[[<+ >>+<-]++++[>--------<-]]>]>,]<<<<[[<]<[<]>[.,+>]+<]>[-[+.,]>] ), resulting in the pattern

ACm,Kh:d"[aeiou]"3.-dKQ+V_GH

Все экземпляры будут соответствовать либо непустой строке негласных, либо непустой строке, за которой следует один символ пробела.

Первый экземпляр будет соответствовать согласным в начале первого слова. С substring is greedy, it will attempt to match as many as possible, i.e., all up to the first vowel.

По этой причине второй экземпляр будет начинаться с гласной, поэтому он будет соответствовать остатку первого слова, вплоть до пробела, разделяющего слова.

Как и в первом случае, третий будет соответствовать всем согласным в начале второго слова, что приведет к успешному совпадению всего шаблона.

Необработанная строка split(regex) ( String s(String[]i){String r="[aeiou]",f=i[0].split(r)[0],s=i[1].split(r)[0];return s+i[0].substring(f.length())+" "+f+i[1].substring(s.length());} предотвращает замену Python elem etc. with control characters) reverses the order of the matches of the parenthesized patterns, i.e., it replaces them with the consonants at the beginning of the второй слово, затем все символы от первой гласной первого слова до пробела и, наконец, согласные в начале первого слова.

Последний аргумент в пользу s=fn w->String.split_at(w,elem(hd(Regex.run(~r/[aeiou]/,w,return: :index)),0))end {v,w}=s.(a) {x,y}=s.(b) [x<>w,v<>y] ( "$args"-replace'([^aeiou]+)(.*)\s([^aeiou]+)(.*)','$3$2 $1$4' ) заставляет его возвращаться сразу после первой успешной замены, чтобы избежать бессмысленных замен в оставшейся части второго слова. Это необходимо, поскольку шаблон может соответствовать любой строке из трех и более последовательных согласных.

 

Minzar


Рег
07 Oct, 2004

Тем
67

Постов
193

Баллов
548
  • 26, Oct 2024
  • #4

JavaScript (ES6), 54 байта

[^aeiou]

Объяснение

\w

Тест

xg/(\w+)(.+ )(\w+)/,"$3$2$1 t
 

Romati999


Рег
22 Jul, 2008

Тем
75

Постов
214

Баллов
619
  • 26, Oct 2024
  • #5

Python 3, 108 101 99 байт

(Без использования регулярного выражения)

Эта функция ожидает ввода через 2 аргумента, например. -~ . Returns the new words in a tuple.

1

Существует множество решений для регулярных выражений, поэтому я хотел написать что-то, что не использовало бы библиотеку Python re.

Как это работает

Единственная сложная часть — это лямбда-выражение. int (the abbreviation means "Сразделить перед первой гласной»). True (which starts with the whole word) to the end of s[1] Он рекурсивно «обходит» заданное слово, перемещая один символ за раз от начала. s , i.e. (prefix, suffix). Notice that that is the wrong order compared to the parameters!

(который начинается пустым). При первой встреченной гласной он возвращается t code slightly easier to read.

Я подумал, что более разумно, чтобы возвращаемый порядок был префиксом, а не суффиксом (потому что обычно префикс идет перед суффиксом). Этот приказ может сделать >>> t=lambda s:s[1]in'aeiou'or-~t(s[1:]) >>> lambda a,b:(b[:t(b)]+a[t(a):],a[:t(a)]+b[t(b):]) <function <lambda> at 0x7f495e534398> >>> _('plaster', 'man') ('master', 'plan') before t=lambda s:s[1]in'aeiou'or-~t(s[1:]) lambda a,b:(b[:t(b)]+a[t(a):],a[:t(a)]+b[t(b):]) Но у меня не было выбора порядка в параметрах лямбды, поэтому я не мог определить @(p,q)[q(1:(a=(f=@(m)find(ismember(m,'aeoui'),1))(q))-1),p(b=f(q):end),32,p(1:b-1),q(a:end)]; , . Первый параметр, имел find(ismember(a,b),1) had a default value, and default parameters go last. Doing that, I didn't need to call the function f взять слово целиком, потому что

с пустой строкой дважды, и можно было сохранить несколько байтов. Однако, возможно, возвращать префикс/суффикс в порядке, противоположном тому, который использовался в лямбда-выражении, было просто плохим решением. b than a Что касается выбора лямбда-выражения вместо функции, то для этого требуется больше байтов.


. Я могу сделать этот выбор, потому что в Python есть укороченная оценка и тернарный оператор. Однако я не могу адекватно объяснить, как я использовал короткие замыкания; об этом трудно рассуждать.

Это мой первый ответ. Я надеюсь, что сделал это правильно и что есть смысл опубликовать решение, которое не может победить. Правки:

Спасибо комментаторам: немного, в два раза, уменьшили количество байтов и удалили ненужную информацию. Попытка улучшить написание. Надеюсь, не допустил ошибок.

 

Thisandthat2


Рег
09 Sep, 2009

Тем
86

Постов
197

Баллов
657
  • 26, Oct 2024
  • #6
public class SpooneriseWords { public static void main(String[] args) { Function<String, Integer> f = s -> { for(int i = 0; i < s.length(); ++i) if("aeiou".contains(s.substring(i, i + 1))) return i; return 0; }; int i1 = f.apply(args[0]); int i2 = f.apply(args[1]); System.out.println(args[1].substring(0, i2) + args[0].substring(i1)); System.out.println(args[0].substring(0, i1) + args[1].substring(i2)); } }

С#6, 115 байт

Просто обидно, что пространство имен для регулярных выражений такое длинное.

 

Valkin


Рег
15 Jul, 2006

Тем
88

Постов
188

Баллов
648
  • 26, Oct 2024
  • #7
java.util.function.Function;public class C{public static void main(String[] a){Function<String, Integer>f=s->{for(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;return 0;};int i1=f.apply(a[0]),i2=f.apply(a[1]);System.out.println(a[1].substring(0,i2)+a[0].substring(i1)+" "+a[0].substring(0,i1)+a[1].substring(i2));}}

CJam, 27 24 22 байта Ввод-вывод — одно слово в строке.

Попробуйте онлайн!

import re a=re.split c='[aeiou]+' i,j=input() f=a(c,i)[0] l=a(c,j)[0] print i.replace(f,l,1),j.replace(l,f,1) ||answer||

Как это работает

["master","plan"]

Перл, 33 байта Приведенный выше код 32 байта a.b=(e=>e.slice(e.search`[aeiou]`));with(a){c=b(x),d=b(y),x=x.replace(c,d);y=y.replace(d,c)} switch (долго и требует).

+1 байт Замена очень похожа на туОтвет @DigitalTrauma на сетчатку , но этот ответ использует преимущество.

Попробуйте онлайн на идея.

 

Sor_vanino


Рег
14 Apr, 2020

Тем
72

Постов
208

Баллов
598
  • 26, Oct 2024
  • #9

JavaScript ES6, 93 58 52 байта

Сэкономлено 6 байт благодаря ETHProductions!

"$args "

Проверьте это! (только ES6)

'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) ' ('(.*?)([aeiou]\S+) '*2) "$args "-replace('(.*?)([aeiou]\S+) '*2),'$3$2 $1$4' e.g. PS C:\scripts\> .\Spoonerise.ps1 'blushing crow' crushing blow ||answer||

С, 255 201 199 байт

Я не вижу здесь много ответов на C, так что наслаждайтесь;

input.replace(/([^aeiou]+)(.+ )([^aeiou]+)/g,'$3$2$1')

Кроме того, если вы играете в гольф впервые, предложения и критика приветствуются.

ïē/⟮(⁅ᶌ]+)⟯(.+ )Ⅰ/,`⑶⑵⑴`

Если функция main() не требуется, мы можем сэкономить 24 байта и получить 179 байт.

string S(string a,string b){ int i=V(a), j=V(b); return b.Remove(j)+a.Substring(i)+" "+a.Remove(i)+b.Substring(j); } int V(string s)=>s.IndexOfAny("aeiou".ToCharArray());

Негольфед:

РЕДАКТИРОВАТЬ: Благодаря предложению Feersum я сэкономил 54 байта. = Д

 

Xjdybr


Рег
27 Jul, 2011

Тем
56

Постов
201

Баллов
501
  • 26, Oct 2024
  • #10
string S(string a,string b){int i=V(a),j=V(b);return b.Remove(j)+a.Substring(i)+" "+a.Remove(i)+b.Substring(j);}int V(string s)=>s.IndexOfAny("aeiou".ToCharArray());

Сед, 38 символов Используя расширенное регулярное выражение из.

Решение для сетчатки input() switch (+1 character).

Вышеуказанный код имеет длину 37 символов и требует

"[aeiou]+" ||answer||

Пример:

Python 2, 364 352 269 251 байт РЕДАКТИРОВАТЬ:

Огромное спасибо @Cyoce за помощь в игре в 83 байта!

"[aeiou]"

Пожалуйста, помогите мне в гольфе! В любом случае, по крайней мере, я первый, кто ответит на Python. И я надеюсь, что смогу победить Java, если когда-нибудь появится ответ на Java!

Попробуйте здесь

 

Petrpobedinskiy


Рег
17 Feb, 2016

Тем
58

Постов
204

Баллов
494
  • 26, Oct 2024
  • #11

Япт, 26 25 байт

import re s=re.split def f(x,y):v="[aeiou]";a,b=s(v,x)[0],s(v,y)[0];return b+x[len(a):],a+y[len(b):]

К счастью, несколько дней назад я добавил класс гласных в функции регулярных выражений Japt. К сожалению, я не добавил класс без гласных или способ обойти двойную обратную косую черту в строках регулярных выражений. def f(g) should be the raw char U+0093. Input is a multi-line string, one word/line.

Попробуйте онлайн! РЕДАКТИРОВАТЬ: import re def f(*g):a,b=[re.split("[aeiou]",r)[0] for r in g];return b+g[0][len(a):],a+g[1][len(b):] and a way around UrA="\\b[^\\v ]+"@UfA gÂ!Y // Implicit: U = input string A="\\b[^\\v ]+" // Set variable A to this regex string, which matches // a word boundary followed by one or more non-vowels. UrA @ // Take U and replace each match X of A and its index Y with: UfA // Take U.match(A). gÂ!Y // Get the item at index ~~!Y (converts 0 to 1, anything else to 0). // Implicit: output last expression Теперь я добавил класс без гласных UrA="\\b[^\\v ]+"@UfA gÂ!Y ), so this code now works for : (21 байт)

// Implicit: U = input string #¿s4 // Convert the char code (147) into a base-4 string "2103". £ // Map each char X in this string to: Uf"[^\\v]+|.+ // Match each group in U of non-vowels or non-newlines, ?" // with an optional trailing newline. gX // Get the item at position X in the resulting array. // Implicit: output last expression

Попробуйте онлайн

#¿s4 £Uf"%V+|.+ ?" gX

Как это работает

%

Старая версия (26 байт):

Попробуйте онлайн!

\\ ||answer||

Как это работает

\V

Python 3, 100 (или 99) байт ¿ instead so it takes a list of strings rather than two seperate strings, but I prefer the two arg roue.

Поигрался с несколькими версиями, но, похоже, не смог получить это ниже. Можно уменьшить его на 99 байт, используя

#¿s4 £Uf"[^\\v]+|.+ ?" gX

Альтернативой является равная длина: i=input() f=l='' A='aeiou' for j in A: I=i[0];J=I.find(j) if ~J: if f: if f>I[0][:J]:f=I[:J];break else:f=I[:J] for j in A: Y=i[1];J=Y.find(j) if ~J: if l: if l>Y[:J]:l=Y[:J];break else:l=Y[:J] print I.replace(f,l,1),Y.replace(l,f,1) instead of $ cat input | tee /dev/tty | sed -r 's/([^aeiou]+)(.+ )([^aeiou]+)/\3\2\1/' plaster man blushing crow litigating more strong wrangler def ghi master plan crushing blow mitigating lore wrong strangler ghef di Я попробовал заменить, как использует @TanMath, но не смог сделать его короче. Кроме того, TanMath может сократить свой ответ на байт, используя -r seems to have changed between py2 and py3 - it automatically evaluates stdin as a string.

потому что нам нужно сопоставить только отдельные экземпляры. Наконец, реализация

 

Zigger


Рег
21 Apr, 2007

Тем
69

Постов
180

Баллов
565
  • 26, Oct 2024
  • #12
s/([^aeiou]+)(.+ )([^aeiou]+)/\3\2\1/

С#6, 165 байт

void spoonerise(char* w1, char* w2) { char rt[64]; int p1 = strpbrk(w1, "aeiou")-w1; int p2 = strpbrk(w2, "aeiou")-w2; strcpy(rt, w2); strcpy(rt+p2, w1+p1); strcat(rt, " "); strcpy(rt+strlen(w1)+p2+1-p1, w1); strcpy(rt+strlen(w1)+p2+1, w2+p2); puts(rt); } ||answer||

Расширено:

#define S(w,p)p=strpbrk(w,"aeiou")-w #define c ;strcpy(r #define l c+strlen(x)+b+1 s(char*x,char*y){char r[64],S(x,a),S(y,b)c,y)c+b, x+a);strcat(r," ")l-a,x)l,y+b);puts(r);}

???????????????, 24 символа/42 байта

Попробуйте здесь (только Firefox).

#define S(w,p)p=strpbrk(w,"aeiou")-w #define c ;strcpy(r #define l c+strlen(v[1])+b+1 main(int q,char**v){char r[64],S(v[1],a),S(v[2],b)c,v[2])c+b,v[1]+a);strcat(r," ")l-a,v[1])l,v[2]+b);puts(r);} ||answer||

Если вам нужна помощь в понимании этого, это переводится в ES6 как

<div id=u></div>

PowerShell, 52 байта

  • Это замена регулярного выражения четырьмя группами захвата; с:
    • html { font-family: Consolas, monospace; } to F=x=>x.replace(/([^aeiou]+)(.+ )([^aeiou]+)/,"$3$2$1"); console.log=_=>u.innerHTML+=_; console.log(`plaster man -> master plan blushing crow -> crushing blow litigating more -> mitigating lore strong wrangler -> wrong strangler def ghi -> ghef di`.split`\n`.map(e=>(e=e.split` -> `,`${e[0]} => ${e[1]} ||> `+(F(e[0])==e[1]))).join`<br>`);
  • Умножение строк для расширения: x=>x.replace(/([^aeiou]+)(.+ )([^aeiou]+)/,"$3$2$1") forces the args array into a string, and adds a trailing space so the trailing space in the regex won't break it.

 

Dextergeeks


Рег
03 Sep, 2016

Тем
71

Постов
200

Баллов
585
  • 26, Oct 2024
  • #13
  • JavaScript (ES6), 120 107 102 101 99 92 байта

Спасибо, даунгоут!
([^aeiou]+)(.+ )([^aeiou]+) $3$2$1

-p ||answer||

При этом учитывается, были ли параметры таким объектом и наоборот:

Питон, 129 108 105 109 байт s/([^aeiou]+)(.+ )((?1))/\3\2\1/

Эта программа принимает список таких словРЕДАКТИРОВАТЬ

: Спасибо @Volatility РЕДАКТИРОВАТЬ:

2{ }* Do the following twice: l Read a line from STDIN. _ Push a copy. {"aeiou"&}# Find the index of the first character that has a non- empty intersection with the string "aeiou". / Split the string into chunks of that size. ( Shift out the first chunk, i.e., all leading consonants. N\ Swap the shifted out chunk with a linefeed. o Print the topmost stack item.

Теперь использую re.split

В этом ответе используется регулярное выражение, как и большинство из них.

Попробуйте здесь

 

Navge1


Рег
14 Mar, 2009

Тем
73

Постов
208

Баллов
613
  • 26, Oct 2024
  • #14

Java 8, 343 байта

2{l_{"aeiou"&}#/(N\}*o

Вот ваш первый Java-ответ. Не такой опыт игры в гольф, поэтому каждое предложение приветствуется!

string S(string a)=>System.Text.RegularExpressions.Regex.Replace(a,"([^aeiou]*)(.*) ([^aeiou]*)(.*)","$3$2 $1$4"); ||answer||

Негольфед:

Октава, 96 байт S=lambda s,p="": and def S(s,p=""):return Благодаря встроенным присваиваниям Octave и функциональности «индексировать где угодно», все это представляет собой просто определение одной анонимной функции. По сути, мы реконструируем ложечную строку, сохраняя точки отсечки в S function, which finds the cut-off point, and prevented me from having to use the whole ' p . Я особенно доволен встроенным ' вещь дважды. Также,.

s ||answer||

нет регулярного выражения :)

s

Python (без регулярных выражений), 85 байт

p

a,b=S(x) is a recursive function that computes the index of the earliest vowel after the first character in its argument (p,s) Пример запуска: p is a vowel, it evaluates to s . Если второй персонаж S value S=lambda s,p="":s[0]in"aeiou"and(p,s)or S(s[1:],p+s[0]) def f(x,y):a,b=S(x);c,d=S(y);return c+b,a+d , который имеет f('blushing','crow') (two’s complement of one’s complement). Finally, the results of <input type="text" id="input" value="plaster man" /> <button onclick="result.textContent=solution(input.value)">Go</button> <pre id="result"></pre> . В противном случае он выполняет рекурсивный вызов с удалением первого символа и добавляет 1 к полученному индексу, используя

используются в качестве индексов для нарезки строк для вычисления ложки.

 

Selling dediks


Рег
29 Jun, 2018

Тем
66

Постов
205

Баллов
555
  • 26, Oct 2024
  • #15
Теаскрипт var solution = s=>s.replace(r=/\b[^aeiou ]+/g,(_,i)=>s.match(r)[+!i])

s=> s.replace( r=/\b[^aeiou ]+/g, // r = regex to match consonants (_,i)=>s.match(r)[+!i] // replace consonants with the consonants from the other word ) is actually s=>s.replace(r=/\b[^aeiou ]+/g,(_,i)=>s.match(r)[+!i]) .

, 27 байт

 

Wolftoleo


Рег
08 Apr, 2020

Тем
76

Постов
208

Баллов
618
  • 26, Oct 2024
  • #16
1

PowerShell, 61 байт

Использует регулярное выражение для замены первых негласных символов каждого слова.

 

Kukla1


Рег
29 Jan, 2014

Тем
58

Постов
187

Баллов
517
  • 26, Oct 2024
  • #17
143 Эликсир, sub

117 байт

Разделите две строки (a, b) по первой гласной и создайте новые строки для возврата. \3 calls to get the values out of the tuples.

РЕДАКТИРОВАТЬ: получил несколько байтов, используя сопоставление с образцом вместо неуклюжего.

 

Iro4ka


Рег
18 Jul, 2020

Тем
75

Постов
196

Баллов
611
  • 26, Oct 2024
  • #18

Java, 147 байт

r

\3\2\1 unfortunately consumes the delimiter, which means that I have to use + Я предполагаю, что просто функция тоже подойдет.

чтобы получить суффиксы.

 

PyncSpeergy78


Рег
25 Oct, 2024

Тем
81

Постов
184

Баллов
619
  • 26, Oct 2024
  • #20
*3

Мозговой трах, 141 байт

import re lambda s:re.sub('([^aeiou]+|.+ )'*3,r'\3\2\1',s,1)

Отформатировано:

Ожидается, что два слова будут разделены пробелом, с завершающим символом новой строки или без него.

Попробуйте онлайн. /[aeiou]<cr> Find the first vowel "xd0 "Delete" (cut), to register "x, everything from here to BOL w Go to next word n Find next vowel db "Delete back" - delete from here to the beginning of the word 0 Go to BOL P Paste what we just "deleted" (cut) behind the cursor w Next word "xP Paste backwards from register "x becomes:

/[aeiou]<cr>"xd0wndb0Pw"xP

При этом входные данные сохраняются на ленте с добавлением трех нулевых ячеек: одна перед первой гласной каждого слова и одна после пробела между двумя словами. Например, For every input character ,[ Make a copy [<+<+>>-] Subtract 32 from one ++++[<-------->-] Subtract 97 from the other -[<<-->>-----]<<+++++ If nonzero: [ Subtract 4 ---- If nonzero: [ Subtract 4 ---- If nonzero: [ Subtract 6 ------ If nonzero: [ Subtract 6 ------>> ] ] ] ] >[>>]>,] Add 32 to every character and the 171 that the space left behind <<++++++++[<[++++<<]<++++<[++++<<]>>[>>]>>[>>]<-] Go to the space <[<<] Subtract 171 from (32 plus 171) -[<+>---] ~~~~~~~~~~~~~~~ Ready to print! ~~~~~~~~~~~~~~~ Print letters from the second word until the value to the left is zero >[>.>] Go to the beginning of the first word <[<<]<<[<<] Look at cells to the left of letters in the first word until reaching a zero >[>>] Print the rest of the letters in the first word >[.>>] Print a space <. Go to the beginning of the first word <[<<] Print letters from the first word until the value to the left is zero >[>.>] Go to the beginning of the second word >[>>] Look at cells to the left of letters in the second word until reaching a zero >[>>] Print the rest of the letters in the second word >[.>>] , [ ---- [ ---- [ ------ [ ------>> ] ] ] ] Три фрагмента , are then printed by looping backwards through the tape while creating dummy ,[[<+<+>>-]++++[<-------->-]-[<<-->>-----]<<+++++[----[----[------[------>>]]]]>[>>]>,]<<++++++++[<[++++<<]<++++<[++++<<]>>[>>]>>[>>]<-]<[<<]-[<+>---]>[>.>]<[<<]<<[<<]>[>>]>[.>>]<.<[<<]>[>.>]>[>>]>[>>]>[.>>] , и /[aeiou]<CR>dbwvnhp0P is printed by going forwards and ignoring the dummy cells.

 

Kichkine


Рег
24 Feb, 2010

Тем
72

Постов
203

Баллов
583
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно