fundo
O artigo definitivo italiano (correspondente ao inglês the ) possui sete formas diferentes: l ' , il , lo , gli , i , la , le . Qual usar depende de três variáveis:
- Gênero: masculino / feminino.
- Número: singular / plural.
- Letra inicial da palavra subsequente: vogal / consoante tipo A / consoante tipo B.
- A vogal é uma destas: aeiou .
- Tipo consoante B é qualquer um destes casos: S- seguido por outra consoante, Z- , gn- , p_N , ps , X- , i- seguido de vogal (isto i actua como um semivowel).
- A consoante tipo A é uma consoante que não é do tipo B.
A tabela mostra o formulário do artigo a ser usado em cada uma das doze combinações das três variáveis acima. Observe que o formulário l ' é anexado à seguinte palavra com aspas simples e sem espaço.
O desafio
Insira uma palavra e uma ou duas seqüências, números ou booleanos indicando sexo e número . (As letras iniciais deverão ser obtidas a partir da palavra de entrada).
A palavra de entrada será uma sequência de letras ASCII em minúsculas. As vogais acentuadas serão substituídas por suas versões não acentuadas (por exemplo, realtà será inserida como realta ).
As entradas de gênero e número podem ser números separados, booleanos ou strings ou um número combinado de strings (por exemplo, 1 para singular masculino, 2 para singular feminino, etc.).
Qualquer formato e separador razoáveis podem ser usados, desde que especificados na resposta.
Envie a palavra precedida pela forma apropriada do artigo , com espaço ou aspas simples, conforme necessário. A saída também deve estar em minúsculas. Espaço em branco à direita ou à esquerda é permitido.
Código de golfe, vitórias mais curtas.
Casos de teste
Em seguida eu uso as letras de entrada m
, f
para especificar o sexo, e s
, p
para o número (este é apenas um possível formato de entrada).
Input Output Comment
macchina f s la macchina Initial letter is cons. A
zio m s lo zio Initial letter is cons. B
libri m p i libri Initial letter is cons. A
ieri m s lo ieri Initial letter is cons. B
aquile f p le aquile Initial letter is vowel
spagnoli m p gli spagnoli Initial letter is cons. B
golf m s il golf Initial letter is cons. A
ombra f s l'ombra Initial letter is vowel
impossibili m p gli impossibili Initial letter is vowel
fonte
ieri
caso de teste porque é um advérbio e não um substantivo! (BTW foi formalmente correto) Por favor!Respostas:
Retina,
138133129113 113 bytesSuíte de teste. (anexado
%(G`\n
para executar todos os casos de teste de uma vez)Formato de entrada:
macchina f s
torna - se2macchina
.Tabela de conversão graças a Kevin Lau .
fonte
Python 3.5,
238235192181178 bytes:( -13 bytes graças às dicas da Leaky Nun! )
Uma função lambda anônima que recebe argumentos na forma de
(<String>, <Integer Gender-Plurality mapping>)
, onde o mapeamento é o seguinte:Para chamá-lo, simplesmente atribua à função qualquer nome válido e, em seguida, chame-a como uma função normal envolvida em uma instrução print. Portanto, se a pergunta for nomeada
U
, basta chamá-la comoprint(U(<String>, <Integer Gender-Plurality mapping>))
.Experimente Online! (Ideona)
fonte
zzz and yyy or xxx
é dois bytes mais curto que #[xxx,yyy][bool(zzz)]
yyy
seja verdade.["l'",'gli '][b%2]
3 bytes é mais curto do que["l'",'gli ',"l'"][b]
Java,
227208195 bytes-13 bytes graças a Leaky Nun
Leva sua string e um int com base no seguinte mapeamento:
Retorna uma string com o resultado.
Sem jogar com casos de teste e sem operadores ternários (de verdade agora):
Usa um pouco de magia regex e age dependendo dos dois booleanos especificados. Para minha surpresa, não são necessárias importações, o que ajuda no tamanho do código!
fonte
0/1
vez defalse/true
que você deve economizar alguns bytes.String e = "[^aeiou]).*";
realmente economiza 5 bytes.Ruby,
147146 bytesExperimente online?
Pode ser possível usar um método melhor para determinar qual artigo usar, mas não conheço nenhum.
Conforme a especificação, o identificador é um número, da seguinte maneira:
fonte
Lote,
446390385380 bytesA nova versão usa a mesma
0-3
codificação para o gênero e o número de várias outras respostas. Funciona criando uma matriz unidimensional%2
..%13
de formas e, em seguida, alterando os primeiros1+%1
elementos para que as formas de interesse se tornem%1
,%5
e%9
(que é uma sorte, pois o Batch não subirá%9
sem mudar). Em seguida, verifica laboriosamente as listas de prefixos para descobrir qual formulário precisa ser usado._
é usado como um espaço reservado para representar um espaço até a palavra ser impressa.fonte
Python 3, 235 bytes
Eu estava interessado em ver quão curto eu poderia conseguir isso em Python sem regexes. Acontece que esta não é a melhor opção ...
Uma função anônima que recebe entrada via argumento da palavra
s
e o código do número do gêneroc
como um número inteiro, usando o seguinte mapeamento:e retorna a palavra com o artigo correto.
Como funciona
Uma lista contendo as possibilidades de cada uma
c
como listas separadas é criada. A lista é então indexada usando o valor dec
, produzindo uma lista de 3 elementos com as opções relevantes. Um índice de lista agora é escolhido indexando em outra lista aninhada com os resultados de expressões booleanas. Se o primeiro caractere des
for uma vogal e não fori
seguido por uma vogal, a opção forvowel
será obtida através do retorno do índice0
. Senão, é avaliada uma expressão booleana retornandoTrue
paracons. B
eFalse
paracons. A
, produzindo os índices2
e1
respectivamente. Por fim, o índice é usado para produzir o artigo, que é concatenado com um espaço e a sequência original antes de ser retornado.Experimente no Ideone
fonte
JavaScript 210 bytes
Uma função anônima que aceita dois parâmetros se ep onde
Depois de atribuir a função a uma variável e a descompactar), ela pode ser testada como
Onde
c
é uma função para testars
uma consoante na posiçãoi
.r
é avaliado em 0 para iniciar com uma vogal, 1 para iniciar com uma consoante do tipo A e 2 para iniciar com uma consoante do tipo B (testado na ordem inversa).fonte