Em inglês, há a diferença simples e divertida entre an
e a
: você usa an
quando precede uma palavra que começa com um som de vogal e a
quando a palavra começa com um som consoante.
Por uma questão de simplicidade neste desafio, an
precede uma palavra que começa com uma vogal ( aeiou
) e a
precede uma palavra que começa com uma consoante.
Entrada
Uma sequência que compreende apenas caracteres ASCII imprimíveis e [?]
aparece em locais onde você deve optar por inserir an
ou a
. [?]
sempre aparecerá antes de uma palavra. Você pode assumir que a sentença será gramaticalmente correta e formatada como normal.
Saída
A sequência de entrada foi [?]
substituída pela palavra apropriada ( an
ou a
). Você precisa se preocupar com letras maiúsculas!
Quando Capitalizar
Coloque uma letra em maiúscula se for precedida por nenhum caractere (é o primeiro na entrada) ou se for precedida por um dos .?!
seguido por um espaço.
Exemplos
Input: Hello, this is [?] world!
Output: Hello, this is a world!
Input: How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.
Output: How about we build a big building. It will have an orange banana hanging out of a window.
Input: [?] giant en le sky.
Output: A giant en le sky.
Input: [?] yarn ball? [?] big one!
Output: A yarn ball? A big one!
Input: [?] hour ago I met [?] European.
Output: A hour ago I met an European.
Input: Hey sir [Richard], how 'bout [?] cat?
Output: Hey sir [Richard], how 'bout a cat?
Isso é código-golfe , então o código mais curto em bytes vence!
fonte
[?]
a palavra e a?[?] hour ago I met [?] European.
apenas para fazer todo mundo se encolher.[?] hour ago I met [?] horse.
Respostas:
V , 41 bytes
Experimente online! , que também pode ser usado convenientemente para verificar todos os casos de teste sem contagem de bytes extra.
Isso tira proveito da "Regex Compression" de V. Ele usa muitos caracteres não imprimíveis, então aqui está um hexdump:
fonte
Perl, 48 bytes
Guardado 1 byte devido a Ton Hospel .
Contando o shebang como um, a entrada é obtida de stdin.
Explicação
Uso da amostra
fonte
/[.?!]/
Falta suporte para capitalização depois de espaço seguido\G
para voltar atrás. PPS, um pouco mais curto:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
Ruby,
7872 bytesUngolfed
fonte
"anAn"[...]
é realmente inteligente. Can🏻 Você pode salvar alguns bytes pulando o interiorsub
:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
PHP, 207 bytes
Eu gosto de soluções mais completas de tempos em tempos ...
mas devo admitir que isso é um pouco exagerado, embora nem esteja concluído.
Salve no arquivo, execute com
php <filename>
a entrada de STDIN.casos de teste
demolir
fonte
[?][?][?]s [?]lert!
Minkolang 0.15 , 75 bytes
Experimente aqui!
Explicação
Observe que, como o Minkolang é toroidal, quando o contador de programas se move para fora da borda direita, ele reaparece à esquerda. Certamente jogável, mas como tive que adicionar 21 bytes por causa das especificações, talvez não tente.
fonte
JavaScript (ES6), 90
86 87 85Edite mais uma vez, pois as especificações para letras maiúsculas mudaram (mais sensato agora)
Edite novamente 1 byte save thx @Huntro
Editar mais 2 bytes para gerenciar cotações e coisas do gênero, como apontado por IsmaelMiguel (mesmo que eu não saiba se foi solicitado pelo op). Note que anteriormente eu tinha contado 86 bytes, mas eles eram 85
Tentando seguir a regra de capitalização declarada no evento de comentários, se estiver incompleta (pelo menos)Teste
fonte
[?][?]
darAna
? E não deveria[?][?] a.
produzirAna a.
?[?] will always appear before a word. You can assume that the sentence will be grammatically correct and formatted like normal.
[?] "[?]".
(An "A"
, as aspas são irrelevantes) e para[?] "A".
(funciona bem para[?] A.
).[?] "[?]"
não é uma entrada válida.[?] will always appear before a word
e "[?]" não é uma palavra.]
não é necessária./(\w )?\[\?](\W*.)/g
Lote, 136 bytes
Toma uma linha de entrada no STDIN.
fonte
PHP,
10092 bytesFoi possível aprimorar ainda mais as expressões regulares.
Avisa sobre uma constante indefinida, mas ainda funciona.
Edit: 8 bytes salvos graças ao primo
fonte
[n,A,a]
usando asserções de pesquisa (\K
e(?= )
).Python 3.5.1,
153147124bytesEntrada :
[?] apple [?] day keeps the doctor away. [?] lie.
Saída:
An apple a day keeps the doctor away. A lie.
Versão de 123 bytes - Isso não trata da regra de capitalização.
Ideone it!
fonte
;
e jogar golfe.m.start() for
deveria serm.start()for
,s[i+2] in 'aeiouAEIOU'
deveria sers[i+2]in'aeiouAEIOU'
. Um barbear fácil de 3 bytes devido ao espaço em branco.('an','a')[s[i+2]in'aeiouAEIOU']
está invertido, você pode usar'a'+'n'*(s[i+2]in'aeiouAEIOU')
para corrigir isso e salvar 2 bytes. Aqui você pode encontrar muitas dicas para jogar golfe .enumerate()
é legal. Obrigado @chepner.Java,
180178 bytesMeu primeiro post aqui, usei uma parte do post de Kevin Cruijssen, mas, com uma abordagem diferente, ele me ajudou a reduzir um pouco mais, graças a ele!
Aqui está não destruído:
E o resultado
Uma explicação simples, uso uma abordagem recursiva para encontrar todas
[?]
.Não consegui encontrar uma maneira de usar as correspondências com maiúsculas e minúsculas (não sei se é possível).
178bytes: Obrigado a Martin Ender!
fonte
]
seu regex.05AB1E ,
383635 bytesExperimente online ou verifique todos os casos de teste .
Explicação:
fonte
]
após o::
}
mais tarde porque achei que economizaria um byte, mas você está certo de que ele falha nos[?] vowel
casos .. Obrigado por me avisar!C #,
204235 bytesPrograma completo não destruído:
Tenho certeza de que isso poderia ser melhorado, especialmente a parte Regex, mas não consigo pensar em nada no momento.
fonte
Java 7,
239214213 bytesCasos não testados e de teste:
Experimente aqui.
Saída:
fonte
isEmpty
usar o regex^$
. Eu acredito que eu acabar com 202;)String c(String s){String x[]=s.split("\\[\\?\\]",2),r=x[0];return x.length>1?r+(r.matches("(.+[.!?] )|(^)$")?"A":"a")+("aeiouAEIOU".contains(""+x[1].charAt(1))?"n":"")+c(x[1]):r;}
definitivamente mais curto do que minha resposta em loop. :)Raquete 451 bytes (sem regex)
Obviamente, é uma resposta longa, mas também substitui ae por maiúscula:
Teste:
Saída:
Versão detalhada:
fonte
J , 113 bytes
Experimente online!
Que vergonha!
fonte
Retina ,
6660 bytesExperimente online.
Explicação:
Faça uma pesquisa que não diferencia maiúsculas de minúsculas,
[?]
seguida por uma vogal ou consoante, em que a vogal opcional é salva no grupo de captura 2 e a correspondência inteira no grupo de captura 1:Substitua por um
a
, seguido pelo comprimento da segunda quantidade de grupo den
(portanto, 0 ou 1n
), seguido pela (s) letra (s) do grupo de captura 1:Em seguida, combine um
a
no início da sequência ou depois de.?!
mais um espaço:E maiúsculo que A, sem remover os outros caracteres do grupo de captura 1:
fonte
Java (JDK) , 154 bytes
Experimente online!
Explicação:
fonte
C (gcc) ,
225207202201 bytesGraças ao ceilingcat por -24 bytes
Experimente online!
fonte
Groovy,
73162 byteseditar: caramba, a capitalização totalmente complicou tudo aqui
fonte
Bytes em C # 209
string A(string b){var s=b.Split(new[]{"[?]"},0);return s.Skip(1).Aggregate(s[0],(x,y)=>x+(x==""||(x.Last()==' '&&".?!".Contains(x.Trim().Last()))?"A":"a")+("AEIOUaeiou".Contains(y.Trim().First())?"n":"")+y);}
Formatado
fonte
Perl 6 , 78 bytes
Explicação:
Teste:
fonte
} $1
no final (criando}$1
)?{S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
Lua, 131 bytes.
Embora a lua seja uma linguagem terrível para o golfe, sinto que me saí muito bem.
fonte
Pip ,
62555450 bytesToma a cadeia de caracteres como um argumento de linha de comando.
Experimente online!
Explicação:
fonte
Raquete (com regex) 228 bytes
Teste:
Saída:
fonte
Python 3 ,
104103 bytes-1 bytes, sem escape
]
Experimente online!
Inicia substituindo todas as ocorrências de
[?]
coma
,Em seguida , substitui tudo
a
seguido por uma vogal, poran
.Em seguida, substitui tudo
a
no início da entrada ou uma frase porA
.Assumes that
[?]
will never be touching another word, and that lower-casea
should never begin a sentence.fonte
PowerShell, 124 bytes
inspired by Avi's answer for Java.
Try it online!
fonte