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 ~Respostas:
Vim, 18 pressionamentos de tecla
O truque crucial é que colar algo no modo Visual, na verdade, coloca o conteúdo antigo da seleção visual no buffer de colagem.
fonte
v
ser inclusivo e tentando selecionar a partir da vogal de volta.brainfuck,
238207 bytesRequer
,
retornar 0 no EOF, células de quebra automática de 8 bits e a capacidade de mover para a esquerda da célula 0. Na minha experiência, essas são as configurações padrão mais comuns.Estou muito feliz com este. Minha primeira tentativa foi de 314 bytes e isso certamente é uma melhoria. :)
Ele funciona armazenando todos os bytes da entrada em duas células; um com o valor real do byte e o outro com a saída do seguinte código quando fornecido (o valor do byte - 97):
Se o personagem é uma consoante, resulta disso com um valor diferente de zero. Se for uma vogal, ela se torna 0. A partir daí, é apenas uma questão de descobrir onde a segunda palavra começa e imprimir tudo em ordem.
A versão de 238 bytes deste programa encontrou o caractere de espaço após coletar toda a entrada. Foi uma dor de cabeça porque isso envolvia a criação de uma célula que continha 0 exatamente onde eu estava tentando fazer um loop sobre ela. A maneira como resolvi isso teve o efeito de subtrair 30 de cada caractere na primeira palavra e 32 de cada caractere a seguir. Uma parte bastante grande do código foi dedicada a lidar com esse absurdo.
Agora, 32 é subtraído de cada caractere no loop de entrada, que é mais curto e tem um efeito colateral semelhante, mais fácil de lidar. Como bônus, fazê-lo dessa maneira me permitiu criar meu próprio personagem espacial de uma maneira mais curta: em vez de subtrair 139 de 171 (171 é o que você obtém quando passa um espaço pelo detector de vogais acima), o loop que adiciona 32 para cada caractere se esforça para adicionar 32 à célula 171. Isso custa quatro bytes, mas significa que posso subtrair 171 dele mais tarde (em vez de subtrair 139) para um total líquido de 3 bytes salvos.
Com comentários:
fonte
y
como vogal, mas a pergunta diz que não. (nye cat
->ce nyat
)y
como uma consoante ... Vou ver por que isso está acontecendo.vim, 23
Gostaria de saber se o vim é realmente competitivo nesse desafio. Provavelmente não com as linguagens de golfe, mas talvez com Ruby / Python / Perl / etc.
fonte
Python,
686360 bytesExperimente online no Ideone .
Como funciona
A sequência do padrão é repetida três vezes (
*3
), resultando no padrãoTodas as instâncias corresponderão a uma sequência não vazia de vogais ou a uma sequência não vazia seguida por um único caractere de espaço.
A primeira instância corresponderá às consoantes no início da primeira palavra. Como
+
é ganancioso, ele tentará combinar o maior número possível, ou seja, tudo até a primeira vogal.Por esse motivo, a segunda instância começará em uma vogal, correspondendo ao restante da primeira palavra, incluindo o espaço que separa as palavras.
De maneira semelhante à primeira instância, a terceira corresponderá a todas as consoantes no início da segunda palavra, resultando em uma correspondência bem-sucedida para todo o padrão.
A cadeia bruta
\3\2\1
(r
impede que o Python substitua\3
etc. pelos caracteres de controle) reverte a ordem das correspondências dos padrões entre parênteses, ou seja, substitui-os pelas consoantes no início da segunda palavra, depois todos os caracteres da primeira vogal da primeira palavra até o espaço e, finalmente, as consoantes no início da primeira palavra.O argumento final para
sub
(1
) faz com que ele retorne imediatamente após a primeira substituição bem-sucedida, para evitar substituições sem sentido no restante da segunda palavra. Isso é necessário, pois o padrão pode corresponder a qualquer sequência de três ou mais consoantes consecutivas.fonte
JavaScript (ES6), 54 bytes
Explicação
Teste
fonte
match
quando chegar em casa+!i
truque é uma boa solução. +1Python 3,
10810199 bytes(Sem uso de regex)
Esta função espera entrada através de 2 argumentos, por exemplo
f('blushing','crow')
. Retorna as novas palavras em uma tupla.Existem muitas soluções regex, então eu queria escrever algo que não usasse a re-biblioteca do Python.
Como funciona
A única parte complicada é a expressão lambda
S
(a abreviação significa " S plit antes da primeira vogal"). Ele "itera" recursivamente sobre a palavra especificada, movendo um caractere de cada vez desde o início des
(que começa com a palavra inteira) até o final dep
(que começa vazio). Na primeira vogal encontrada, ela retorna(p,s)
, ou seja, (prefixo, sufixo). Observe que essa é a ordem errada em comparação com os parâmetros!Eu pensei que fazia mais sentido que a ordem retornada fosse prefixo e sufixo (porque geralmente um prefixo precede um sufixo). Esse pedido pode
a,b=S(x)
facilitar a leitura do código.Mas eu não tinha escolha de ordem nos parâmetros do lambda, então não pude definir
p
antess
. O primeiro parâmetro,s
, teve de tomar a palavra inteira, porquep
tinha um valor padrão e parâmetros padrão ir passado. Fazendo isso, não precisei chamar a funçãoS
com uma string vazia duas vezes e alguns bytes poderiam ser salvos. No entanto, talvez tenha sido simplesmente uma má decisão retornar o prefixo / sufixo na ordem oposta, pois foi usado na expressão lambda.Quanto à escolha da expressão lambda sobre a função, são necessários mais bytes para dizer
def S(s,p=""):return
queS=lambda s,p="":
. Posso fazer essa escolha porque o Python possui avaliação de curto-circuito e o operador ternário. No entanto, não sei explicar adequadamente como usei curto-circuito; é difícil argumentar.Esta é a minha primeira resposta. Espero ter feito isso corretamente e que haja valor em postar uma solução que não possa vencer.
Edições: comentaristas de agradecimento: reduziu a contagem de bytes um pouco, duas vezes e removeu informações desnecessárias. Tentativa de melhorar a escrita. Espero que não tenha cometido erros.
fonte
C # 6, 115 bytes
É uma pena que o espaço de nomes para regex seja tão longo.
fonte
System.Text.RegularExpressions.Regex.Replace
44 caracteres! +1 porque esse deve ser algum tipo de registro.CJam,
272422 bytesE / S é uma palavra por linha. Experimente online!
Como funciona
fonte
Perl, 33 bytes
O código acima tem 32 bytes e requer a
-p
opção ( +1 byte ).A substituição é muito semelhante à resposta Retina do DigitalTrauma , mas essa resposta tira proveito dos subpadrões recursivos do PCRE .
Experimente online no Ideone .
fonte
Retina , 34
Experimente online.
fonte
JavaScript ES6,
935852 bytesGuardado 6 bytes graças a ETHProductions!
Teste-o! (Somente ES6)
Mostrar snippet de código
fonte
$4
todo;);)C,
255201199 bytesNão vejo muitas respostas em C por aqui, então aproveite; Além disso, golfe pela primeira vez, sugestões e críticas são bem-vindas.
Se main () não for necessário, podemos salvar 24 bytes, chegando a 179 bytes
Ungolfed:
EDIT: Graças à sugestão de feersum eu salvei 54 bytes. = D
fonte
strpbrk
.Python 2,
364352269251 bytesEDIT: Muito obrigado a @Cyoce por me ajudar a golfe 83 bytes!
Por favor me ajude a jogar isso! Enfim, pelo menos eu sou o primeiro respondedor do Python. E espero poder vencer o Java, se houver uma resposta do Java!
Experimente aqui
fonte
Japonês,
2625 bytesFelizmente, adicionei uma classe de vogal aos recursos de regex de Japt há alguns dias. Infelizmente, não adicionei uma classe que não seja vogal ou uma maneira de contornar as barras invertidas duplas nas seqüências de caracteres regex.
A
¿
deve ser o carvão em bruto L + 0,093. A entrada é uma sequência de várias linhas, uma palavra / linha. Experimente online!EDIT: Agora eu adicionei a classe que não é vogal
\V
e uma maneira de contornar\\
(com%
), então esse código agora funciona para 21 bytes : ( Experimente on-line )Como funciona
Versão antiga (26 bytes):
Experimente online!
Como funciona
fonte
Python 3, 100 (ou 99) bytes
Jogado com algumas versões, mas não consigo obtê-lo abaixo. É possível reduzi-lo em 99 bytes usando, em
def f(g)
vez disso, é necessária uma lista de seqüências de caracteres em vez de duas seqüências separadas, mas eu prefiro os dois argumentos de argumento.A alternativa é igual:
Tentei substituir, como o @TanMath usa, mas não consegui obtê-lo mais curto. Além disso, o TanMath pode obter sua resposta mais curta em um byte usando também em
"[aeiou]"
vez de,"[aeiou]+"
porque precisamos apenas corresponder às instâncias únicas. Finalmente, a implementação deinput()
parece ter mudado entre py2 e py3 - ela avalia automaticamente stdin como uma string.fonte
s=re.split
a alternativa?*
no*g
. 2. A segunda versão pode ser reduzida até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
é um argumento padrão, portanto você não precisa especificá-lo. Um lambda sem nome é um envio aceitável;f=
não é necessário.sed, 38 caracteres
Usando expressão regular estendida da solução Retina .
O texto acima tem 37 caracteres e requer a
-r
troca (+1).Exemplo:
fonte
C # 6, 165 bytes
Expandido:
fonte
"aeiou".ToCharArray()
pode ser'a','e','i','o','u'
de -2 bytesIndexOfAny
ele não precisa de parâmetros, então precisaria sernew[]{'a','e','i','o','u'}
IndexOfAny
fosse um método de params. Enfim, ótima resposta24, 24 caracteres / 42 bytes
Try it here (Firefox only).
Se você precisar de ajuda para entender isso, isso se traduz no ES6 como
fonte
PowerShell, 52 bytes
É uma substituição de regex por quatro grupos de captura; com:
('(.*?)([aeiou]\S+) '*2)
para'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
"$args "
forças da matriz args em uma string, e adiciona um espaço à direita de modo que o espaço à direita na regex não vai quebrá-lo.fonte
JavaScript (ES6),
1201071021019992 bytesIsso leva em consideração se os parâmetros eram um objeto como esse e vice-versa:
var a = {x: "man", y:"plaster"]}
fonte
.match(/[aeiou]/).index
pode se tornar:.search`[aeiou]`
Python,
129108105109 bytesEste programa contém uma lista de palavras como esta
["master","plan"]
EDIT : Obrigado @Volatility
EDIT: agora usando re.split
Esta resposta usa regex como a maioria deles.
Experimente aqui
fonte
str.replace
substitui todas as instâncias de uma substring; portanto, você deseja limitá-lo a uma substituição tendo.replace(f,l,1)
. No entanto, você pode salvar um monte usandoi,j=input()
e religandore.findall
e'[^aeiou]+'
para variáveis de caracteres únicos.input()
em duas variáveis. Você quis dizeri,j=input().split()
(eraw_input()
no Python 2)?"sass","bit" -> "babb", "sit"
.Java 8, 343 bytes
Aqui você tem sua primeira resposta Java. Não é tão experiente no golfe, então todas as sugestões são apreciadas!
Ungolfed:
fonte
java.util.function.Function
? Eu duvido que ele precise estar lá, a menos que você queira dizerimport
, mas abandone a importação porque você se refere a ela apenas uma vez. Alterarpublic class C{public static void Main(String[] a)
parainterface C{void Main(String[]a)
Function<String, Integer>
não precisa de espaço em brancofor(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;
parafor(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
i1
é um varname terrível e longo demais.Function<String, Integer>
parajava.util.function.Function<String,Integer>
e soltar a importaçãoOitava, 96 bytes
Graças às atribuições em linha do Octave e à funcionalidade "indexar em qualquer lugar", tudo isso é apenas a definição de uma única função anônima. Basicamente, reconstruímos a corda com colher enquanto armazenamos os pontos de corte em
a
eb
. Estou especialmente feliz com af
função inline , que encontra o ponto de corte e me impediu de usar afind(ismember(a,b),1)
coisa toda duas vezes. Além disso, sem regex :) .fonte
TeaScript , 27 bytes
\w
é realmente[^aeiou]
.fonte
\w
meta de regex padrão para[^aeiou]
? Por quê?\w
já era usado pelo JavaScript. Eu vou mudar de volta em breveElixir ,
143117 bytesDivida as duas cordas (a, b) na primeira vogal e construa novas cordas para retornar.
EDIT: Obteve alguns bytes usando a correspondência de padrões em vez de
elem
chamadas desajeitadas para obter os valores das tuplas.fonte
Java, 147 bytes
Estou assumindo que apenas uma função está bem também.
split(regex)
infelizmente consome o delimitador, o que significa que tenho que usarsubstring
para obter os sufixos.fonte
Pitão,
3028 bytesRecebe entrada e fornece saída como uma lista das duas palavras.
Experimente online.
fonte
ACm,Kh:d"[aeiou]"3.-dKQ+V_GH
.A
atribui uma lista de dois elementos a G e H eC
transpõe. Pode haver algo ainda melhor.Python (sem regexes), 85 bytes
Exemplo de execução:
t
é uma função recursiva que calcula o índice da vogal mais antiga após o primeiro caractere em seu argumentos
. Se o segundo caracteres[1]
for uma vogal, ele avalia comoTrue
, que temint
valor1
. Caso contrário, ele faz uma chamada recursiva com o primeiro caractere removido e adiciona 1 ao índice resultante usando-~
(complemento de dois do complemento de alguém). Finalmente, os resultados det
são usados como índices para o corte de cordas para calcular o Spoerism.fonte
GNU Awk 4.0, 48 caracteres
Exemplo de execução:
fonte
PowerShell, 61 bytes
Usa regex para trocar os primeiros caracteres não vogais de cada palavra
fonte