Este desafio é uma homenagem ao vencedor de Melhor Filme no Oscar 2017, La La Land Moonlight !
Escreva uma função / programa que use uma sequência que contenha apenas letras [A-Za-z]
, os quatro símbolos comuns em frases .,'?
e espaços diários , e emita a sequência no estilo La La Land.
Para ser mais específico, pegue as letras até e incluindo o primeiro grupo de vogais e imprima / produza duas vezes, adicionando um espaço a cada vez, depois imprima / imprima a seqüência inteira. y é uma vogal neste desafio. A pontuação e a capitalização devem ser mantidas.
Você pode assumir que todas as cadeias contêm pelo menos uma vogal e que todas as cadeias iniciam com uma letra.
Casos de teste:
Land
La La Land
Moonlight
Moo Moo Moonlight
quEueIng
quEueI quEueI quEueIng
This isn't a single word.
Thi Thi This isn't a single word.
It's fun to play golf
I I It's fun to play golf
Ooo
Ooo Ooo Ooo
I'm okay
I I I'm okay
Hmm, no. There will be at least one vowel, but it can be anywhere.
Hmm, no Hmm, no Hmm, no. There will be at least one vowel, but it can be anywhere.
Why is y a vowel?
Why Why Why is y a vowel?
Isso é código-golfe, portanto o código mais curto em cada idioma vence. As explicações são incentivadas , também nos idiomas principais.
MOONLIGHT
. E apenas por diversão:Why did the chicken cross the road?
Respostas:
Sed 30 bytes
fonte
*
vez de\+
?05AB1E ,
231918 bytesGuardado 1 byte graças a Okx .
Experimente online! ou como um conjunto de testes
Explicação
fonte
Gelatina ,
24 22 20 1914 bytes-5 bytes, utilizando um truque da brilhante resposta de Emigna (procure 10 na lista isVowel)
Experimente online! (não tenho certeza de como criar um conjunto de testes para este programa completo)
Alternativa de 15 bytes:
Aqui está o conjunto completo de testes.
Quão?
fonte
Python, 61 bytes
Aí vem a primeira linguagem não baseada em regex (usando regex).
Guardado 1 byte graças a Neil .
fonte
JavaScript (ES6), 40
46Editar 5 + 1 bytes salvos thx @Arnauld
Excessivamente longo comparado a outros usando o mesmo truque (como de costume)
fonte
'$& $& $&'
- sempre esqueço os caracteres especiais em dólares. Obrigado. Infelizmente agora é realmente um porto da resposta da retina de Martin.^
é necessária em Retina que - penso eu - olha para todos os jogos por padrão. Mas precisamos mesmo disso aqui?x=>(y=/.*?[aeiouy]+/i.exec(x)+' ')+y+x
Retina , 24 bytes
Experimente online!
fonte
Lote, 180 bytes
Implementa uma máquina de estado.
g
controla se alguma vez vimos uma vogal, portanto, se a letra atual não for uma vogal, sabemos se a saída será ou continuará com a próxima letra.fonte
PowerShell ,
4647413938 bytesExperimente online!
Obrigado a Maarten Bamelis pela correção
Economizou 6 bytes graças a Rynant
Guardado
23 bytes graças a Joeyfonte
Rubi,
3132.30 bytesDois bytes salvos graças ao GB e Cyoce.
fonte
PHP,
5554 bytesNota: a versão codificada usa a codificação IBM-850.
Execute assim:
Explicação
Apenas um regex substitui por não ansioso que corresponda a qualquer caractere no início da string, seguido por qualquer quantidade de vogais (use a
i
opção para diferenciar maiúsculas de minúsculas). Esse grupo de captura é então impresso duas vezes, seguido pela sequência inteira.Tweaks
-R
para$argn
disponibilizar (Thx Titus)fonte
Javascript (ES6), 38 bytes
fonte
Perl, 25 + 1 (
-p
bandeira)fonte
Perl 6 , 30 bytes
Experimente online!
fonte
{S:i/.*?<[aeiouy]>+/$/ $/ $//}
C,
202196195193190180i,j,k,m,n;f(char*a){if((a[i/12]-"AEIOUY"[i++%6])%32==0)k=n=24-(i%12);else if(k&&!n--){m=j=(i-13)/12;for(i=0;i<j*2;)printf("%c%c",a[i%j],(i==j-1)*32),i++;printf(" %s", a);}m?:f(a);}
Experimente online!
O que resta para o golfe:
• Recolha duas impressões em uma.
• A impressão do meu caractere de espaço pode ser alterada em
%*c
lógica, tenho certeza.• Estou usando condicionais que podem ser removidos de alguma forma
•
j=(i-13)/12
provavelmente pode ser encurtado.• [AY] verifica condicionalmente o
==0
que normalmente não é necessário, embora eu esteja atualmente preso nesse (tentei alternar entre outros e abandonar o==0
conjunto, mas isso exige adicionar mais {colchetes} e aumentar o tamanho de bytes)Truques que eu usei para jogar isso:
• Combinou uma pesquisa dupla para sequência de loop usando módulo para o eixo xe divisão inteira para o eixo y (sequência de entrada versus sequência de vogais). (O eixo X é repetido duas vezes antes de iterar uma vez no eixo y; a primeira vez com [AZ] e a segunda vez com [az] usando o valor do caractere 32 diferencial.
• Ignorou a necessidade de usar "[AY] e [ay]", apenas medindo a distância entre os conjuntos de caracteres e o módulo 32. Dessa forma, se a distância for 0 (AA) ou se a distância for 32 (aA)
• Reutilizando variáveis inteiras que não são mais usadas como variáveis booleanas.
• Chamar recursivamente uma função com a mesma string para processá-la e evitar um segundo loop for.
• Defina os valores BOOL com a lógica de definir outra variável. (por exemplo, bool = i = 5;) nocautear ambos com uma pedra.
• Abuso de exploração vazio-verdadeiro ternário. (GCC)
Formato legível:
Derrubou 10 bytes graças a Keyu Gan (nos comentários)
fonte
j=(i-13)/12
provavelmente pode ser reduzido.i=j=k=m=n=0;
?i,j,k,m,n;
para inicialização.MATL, 33 bytes
Experimente no MATL Online
Explicação
fonte
'(^.*?[yY%s]+)'13Y2YD'$1 '8:)YX
salva 2 bytes'(^.*?[%s]+)'19Y2YD'$1 '8:)YX
salva outro 219Y2
não existia quando esta resposta foi submetido infelizmenteV ,
21, 20 bytesExperimente online!
Explicação:
Hexdump:
Versão alternativa (21 bytes):
Experimente online!
Isso usa uma ridícula compactação de expressões regulares e ainda consegue ser chutado por outras línguas do golfe. Para referência, este é cerca de dois terços do comprimento da versão "descompactada" regular, a saber:
Explicação:
Aqui está um hexdump:
fonte
Python 3 ,
7568 bytesExperimente online!
Explicação:
Funciona gerando um valor booleano para cada caractere na cadeia de entrada com base em se é ou não uma vogal e em encontrar o índice mais baixo da
0
primeira não vogal (excluindo o primeiro caractere). Retorna a substring para esse índice duas vezes, separada por espaços e a string original.fonte
Clojure,
192188181 bytes-4 bytes inlining
first-sp-pred
(gritos).-7 bytes removendo alguns espaços perdidos
Isso foi muito mais desafiador do que eu pensava! Estou analisando manualmente a string ... já que ainda não aprendi a regex: /
Consulte o código pré-golfe para obter informações detalhadas:
fonte
Python 3 ,
10196 bytesExperimente online!
uma solução não regex
Comentado:
fonte
w=c in a
porw=c in'aAeEiIoOuUyY'
Ohm , 19 bytes (CP437), não concorrente
Nova linguagem e, como tal, tive que adicionar alguns novos recursos para fazer esse trabalho, o que infelizmente torna isso não competitivo (por brechas).
Explicação:
fonte
Q
), pesquisa por subarray (u
), corte de string / matriz (├
) e constantes de vogal (αv
eαy
).PHP,
69 6553 bytesrequer PHP 5.3 ou posterior. Execute como pipe
-F
ou experimente algumas versões online .Salvo 4 bytes (e corrigido o código) com o regex roubado do @aross;
Mais 10 com em
preg_filter
vez depreg_match
e-F
e outros dois com um regex aprimorado.
7581 bytes para uma versão não regex:requer PHP 5 ou posterior; substitua
?:
por?1:
PHP mais velho. Correr com-nR
Demolir
fonte
This isn't a single word
:T T This isn't a single word.
i
modificador que torna a regex sem distinção entre maiúsculas e minúsculas. A outra versão verificou apenas em minúsculas. Fixo.R, 49bytes
sub("(.*?[aeiouy]+)","\\1 \\1 \\1",scan(,""),T,T)
Substituição baseada em Regex, combine tudo até que não seja uma vogal, capture e substitua por si mesma 3 vezes.
scan
espere por umadouble
entrada de tipo, para dizer a ela para usar ocharacter
tipo, temos que fornecer dois argumentos: primeiro é a string emtpy padrão para stdin e, no segundo, a avaliação R permite usar apenas umac
vez que não é ambíguocharacter
nesse contexto.T
apoiaTRUE
e salva alguns caracteres como 4º e 5º parâmetro para sub para dizer a ele para ignorar maiúsculas e minúsculas e usar PCRE (a ganância não é a mesma com a sintaxe de regex R)4 bytes salvos, cortesia de Sumner18, juntamente com o link Tio para executar o código
fonte
Java 8,
147140 bytesGolfe:
Ungolfed:
Nota: o literal
2
no código é o valor dejava.util.regex.Pattern.CASE_INSENSITIVE
.fonte
import java.util.regex.*;
para salvar alguns bytes.C, 123 bytes
Ligue como:
fonte
Pyke , 22 bytes
Experimente online!
Isso tem 4 bytes a mais do que deveria, se eu tivesse implementado uma maneira mais curta de obter vogais, inclusive
y
.fonte
Retina, 24 bytes
Experimente online
fonte
Python 3 ,
130102 bytesExperimente online!
Não usa nenhuma função de nenhum tipo e nenhuma biblioteca externa! (A menos que impressão e entrada sejam contabilizadas como funções, o que eles fazem).
Funciona verificando se sai das consoantes no início do título para a 'zona da vogal'. Se estiver na 'zona da vogal' e detectar uma consoante, será impresso o título.
Guardado 28 bytes graças a @LliwTelracs
fonte
MATLAB / Oitava,
5851 bytes7 bytes salvos graças a @HughNolan
Cria uma função anônima chamada
ans
que pode ser chamada passando uma string para ela:ans('Land')
Demo Online
Para compatibilidade com MATLAB,
$0
deve ser usado no lugar da$1
função acima.fonte
@(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');
- também Matlab parece usar $ 0 em vez de US $ 1 estranhamenteC (gcc) ,
111110 bytesExperimente online!
Isso só usa as funções da biblioteca
strspn()
estrcspn()
e explora a ordem em que gcc avalia parâmetros da função. Um pouco menos golfeObrigado a @gastropner por -1.
fonte
Pitão - 24 bytes
Conjunto de Teste .
fonte
y
?