Desafio
Dada uma única palavra como entrada, determine se a palavra é ímpar ou par.
Palavras ímpares e pares
Suponha as regras gerais:
odd + odd = even
even + odd = odd
odd + even = odd
even + even = even
No alfabeto, as letras ímpares são:
aeiou
E as letras pares são:
bcdfghjklmnpqrstvwxyz
O mesmo se aplica às letras maiúsculas ( AEIOU
são ímpares e BCDFGHJKLMNPQRSTVWXYZ
pares).
Você 'adiciona' cada uma das letras da palavra. Por exemplo, a palavra cats
é equivalente a:
even + odd + even + even
O que simplifica para:
odd + even
O que simplifica ainda mais:
odd
Então a palavra cats
é estranha.
Exemplos
Input: trees
Output: even
Input: brush
Output: odd
Input: CAts
Output: odd
Input: Savoie
Output: even
Input: rhythm
Output: even
Regras
Toda entrada será uma única palavra que conterá apenas caracteres alfabéticos.
Se a palavra for ímpar, insira um valor de verdade. Se a palavra for par, imprima um valor falsey.
Ganhando
O código mais curto em bytes vence.
code-golf
string
decision-problem
Beta Decay
fonte
fonte
Respostas:
05AB1E , 6 bytes
Explicação
Experimente online!
fonte
EXCEL, 79 bytes:
entrada:
Esta função pode ser colocada em qualquer lugar, EXCETO A1
Coloque sua palavra em questão em A1.
Saída: 0 se for par, 1 se for ímpar.
fonte
JavaScript (ES6),
34413332 bytesEconomizou 1 bytes graças a Arnauld:
1
0
Soluções anteriores:
33 bytes graças a Arnauld:
1
0
Outra maneira sem operadores bit a bit:
41 bytes:
1
0
null
42 bytes para retornar em
0
vez denull
:34 bytes, quebras de palavras sem letras ímpares:
Economizou 2 bytes graças a Shaun H
fonte
f=
não é necessário, e chamar exec no objeto regex é mais curto.s=>/[aeiou]/ig.exec(s).length%2
exec
com ag
bandeira.s=>s.split(/[aeiou]/i).length&1^1
?s=>~s.split(/[aeiou]/i).length&1
é na verdade um byte mais curto.Brain-Flak
206196192178 + 3 = 181 bytesExperimente Online!
Isso requer que o
-c
sinalizador seja executado no modo ASCII, adicionando 3 bytes extras ao comprimento do programa.Ungolfed
Explicação
Primeiro armazene a altura da pilha para fins futuros
Enquanto a pilha não estiver vazia (assume que nenhum dos caracteres é zero)
Subtraia noventa e sete (e armazene 3 para otimizações posteriores)
Se não for zero (ou seja, não a)
Subtraia 4 (e armazene 4 para otimizações posteriores)
Se não for zero (ou seja, não e)
Subtraia 4 (e armazene 4 para otimizações posteriores)
Se não for zero (ou seja, não i)
Subtraia 6 (e armazene 6 para otimizações posteriores)
Se não for zero (ou seja, não o)
Subtraia 6 (armazene 6 porque o programa espera um depois)
Se não for zero (ou seja, não u)
Mova o restante para a outra pilha e coloque um zero na pilha ativa para escapar de todos os ifs
Depois que todos os ifs tiverem escapado, remova o zero e os seis
Depois que todos os caracteres tiverem sido processados, subtraia a altura do deslocamento da altura armazenada originalmente.
Mod por dois
fonte
-c
é apenas +1 byte desde sempre Perl resposta também adiciona apenas 1 byte / flag.perl -pe'code'
é apenas um byte maior queperl -e'code'
.C, 42 bytes
Isso funciona com o GCC 4.x em uma CPU x86-64. Os resultados podem variar de acordo com as diferentes configurações.
Testá-lo em repl.it .
Ao custo de mais 5 bytes, é possível evitar um comportamento indefinido, portanto o código deve funcionar desde que os int tenham pelo menos 32 bits de largura.
Como funciona
Módulo 32 , os códigos de caracteres de todas as letras ímpares são 1 , 5 , 9 , 15 e 21 . 2130466 é o número inteiro de 32 bits que definiu bits nessas posições e não definiu bits em todas as outras.
Quando f é chamado em uma sequência, ele primeiro verifica se o primeiro caractere é um byte nulo (terminador de sequência). Se for,
*s
produz 0 e f retorna 0 . Caso contrário,*s
forneça o código de caractere de uma letra e o argumento correto do AND lógico (&&
) será executado.Pois
>>
, o GCC gera uma instrução de turno. Em uma CPU x86-64, a instrução correspondente para um número inteiro de 32 bits ignora todos, exceto os 5 bits inferiores do argumento correto, o que evita a redução do*s
módulo 32 . O deslocamento para a direita e o seguinte bit a bit E com 1 extratos do bit de 2.130.466 que corresponde à carta, que será 1 se e somente se a letra é estranho.Depois, incrementar o ponteiro s (descartando efetivamente a primeira letra), chamada f recursivamente na corda decapitado, e tomar o XOR bit a bit do resultado de cima e o resultado da chamada recursiva.
fonte
sed
44(42 + 1 para -n) 43-1 graças a Neil
Imprime
o
para ímpar e nada para parfonte
s/[aeiou][^aeiou]*[aeiou]//gi
pode economizar um byte, se eu tiver contado corretamente.Python, 41 bytes
fonte
Python, 42 bytes
Não há muito o que explicar aqui. Uma função sem nome que retorna 0 ou 1.
fonte
Brain-Flak ,
524, 446, 422 bytesExperimente online!
Versão não-gasta e mais legível:
fonte
Geléia ,
13 1211 bytes-1 byte graças a @Luis Mendo (use
Ḃ
para substituir%2
)-1 byte graças a @Dennis (use uma compactação de string)
Todos os casos de teste estão em TryItOnline
Quão?
Não concorrente, 5 bytes (desde que acabei de adicionar a função
Øc
)Casos de teste também em TryItOnline
O mesmo que acima, mas
Øc
produz as vogais do alfabeto latino,'AEIOUaeiou'
fonte
%2
porḂ
“¡ẎṢɱ»
.“”«»‘’
(também⁾
existe um para uma cadeia de dois caracteres, mas que é usada em cadeias compactadas).Haskell,
3837 bytesGraças a Angs por um byte!
fonte
odd
vez deeven
. Salva um byte!Python 3, 53 bytes
Provavelmente isso pode ser ainda mais importante:
fonte
in
e'aeiou'
efor
e usosum
para salvar 8 bytes:lambda n:sum(x in'aeiou'for x in n.lower())&1
(embora, como você pode ver o post de DJMcMayhem usando todas as vogais dez também é mais curto)sum()
comando antes deste golfe e, mais uma vez, aprendi alguma coisa! Tenha um bom dia :)Java, 73
vi algumas respostas java, caso contrário não teria compartilhado. Agradecemos a Phaeze por salvar um byte.
fonte
%2>0
C 52 bytes
o principal e o resultado:
fonte
h(o){return~-o?1^h(1+strpbrk(o,"aeiouAEIOU")):1;}
salva 3 bytes.Pitão, 14 bytes
Experimente Online!
Explicação:
fonte
Ruby, 30 bytes
fonte
Teclas Vim,
32, 31, 29Como o intérprete V é compatível com versões anteriores, você pode experimentá-lo online! bem aqui.
UmTrês bytes salvos graças ao m-chrzan!fonte
s/.../gi
vez des/\c.../g
?'<C-r>"'
->@"
.@"
15 minutos atrás. A melhor dica do vim que tenho é usar:help foo
e/
a documentação: P.:h foo
é mais curto. : PJava 7, 88
Ungolfed:
fonte
dimwit , 14 bytes (não concorrente)
Eu pensei que este seria um desafio divertido e simples para um novo idioma.
Explicação
a
- empurre uma nova matriz para a matrizr[aeiou]}
- conte ocorrências de todos os valores correspondentes ao regex "[aeiou]" na primeira matriz (uma vez que a primeira matriz contém a entrada), ignorando maiúsculas e minúsculas e envie esse valor até o final da última matriz.e
- se o último número da última matriz for par (que definimos como o número de ocorrências), execute as próximas operações até um colchete de fechamento ("}")t
- interrompa a execução, limpe a matriz e defina o primeiro valor como falso}
- fim doe
bloco códigoT
- interrompa a execução, limpe a matriz e defina o primeiro valor como verdadeiroExperimente online!
Use o campo Entrada para inserir a palavra.
Em breve adicionarei documentação ...
fonte
PowerShell v2 +,
4542 bytesRecebe entrada
$args[0]
, envia-a-replace
para remover todos os caracteres que não são vogais, pega o resultado.length
e%2
verifica se é ímpar / par.Exemplos
fonte
J, 20 bytes
Abordagem direta
Explicação
fonte
Japonês, 7 bytes
Teste online! Saídas 1 para ímpar, 0 para par.
Como funciona
fonte
Oitava, 34 bytes
Este é 6 bytes mais curto do que a abordagem tradicional utilizando
ismember
,@(s)mod(sum(ismember(s,'aeiouAEIOU')),2)
e dois bytes mais curto do que a abordagem regex:@(s)mod(nnz(regexpi(s,'[aeiou]')),2)
.Teste aqui .
fonte
PHP, 41 bytes
Isso gera -1 para verdade e 0 para falsey.
fonte
Mathematica, 44 bytes
Dá Verdadeiro para uma sequência ímpar e Falso para uma sequência par.
fonte
q, 29 bytes
fonte
C #
64625650 bytesJá estamos usando linq, portanto Contém economiza 2 bytes sobre IndexOfUsar a sobrecarga de método de Count economiza 6 bytesUma função anônima que pega uma string e conta as letras ímpares retorna true se houver um número ímpar delas ou false se não houver.
Esta nova solução divide a cadeia de caracteres em qualquer um dos caracteres na matriz de caracteres especificada. A mecânica disso muda o significado do
%2
resultado; 0 agora é ímpar e 1, portanto, o1>
.Experimente online aqui!
fonte
string.Split()
contar as vogais e você não precisa de LINQ.s=>1>s.Split("aeiouAEIOU".ToCharArray()).Length%2;
Retina , 19 bytes
Experimente online!(A primeira linha ativa um conjunto de testes separado por avanço de linha.)
A primeira linha conta as vogais na entrada. A segunda linha verifica se o resultado é ímpar.
fonte
MATL ,
8, 7 bytesExperimente online!
Explicação:
fonte
Pyke, 10 bytes
Experimente aqui!
fonte