Dada uma string, retorne a "sorte" da string.
A sorte de uma string, como acabei de compensar para o objetivo desse desafio, é um número inteiro, assim determinado:
- A sorte base de uma string é 1.
- Para cada letra consecutiva compartilhada com a palavra "sorte" (sem distinção entre maiúsculas e minúsculas), multiplique a sorte por 2. Por exemplo, se sua sequência for " lu mberjack" ou "sma ck ", você multiplicará por 4. (Mais especificamente, 2 ^ número de caracteres consecutivos compartilhados.)
- As letras compartilhadas devem estar na mesma ordem consecutiva que aparecem em "sortudo", mas podem começar em qualquer lugar da palavra pelo mesmo valor ("luc" tem o mesmo multiplicador de 8 * que "cky").
- Se a palavra tiver várias ocorrências em que compartilha caracteres consecutivos com sorte, use a sequência consecutiva mais longa dos caracteres.
- Para qualquer letra, ele compartilha com a palavra "presságio" subtrai 2 da sorte.
- Pode corresponder a um personagem qualquer quantidade de vezes, em qualquer ordem. Por exemplo, a cadeia "nnnnnomemenn" perde 24 sorte (12 letras correspondentes)
Exemplo:
luck("lucky")
>>32
2 ^ 5 (5 letras consecutivas) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 letras consecutivas de uck , e compartilhadas com presságio)
luck("memes")
>>-7
1 - 8 (valor base, 4 compartilhados com "presságio")
Isso é código de golfe, então a resposta com o menor número de bytes vence.
Você pode inserir e enviar da maneira que desejar - escrever uma função, usar entrada padrão etc.
Para funções, assuma o tipo de dados que faria sentido para esse idioma. (Por exemplo, em JavaScript, você receberia um String
e retornaria a Number
)
Editar: você pode assumir que qualquer entrada é minúscula.
int8_t str_luck(const char* str);
ou deveria seruint64_t str_luck(const char* str);
?Respostas:
05AB1E ,
36322826 bytesExplicação
Experimente online
Economizou 2 bytes graças a Adnan
fonte
'
, portanto, para 26:Œv'¸éyåiyˆ}}¯é¤go¹'ƒÖ¦Ãg·-
:).JavaScript (ES7),
123112107 bytesEditar: salvou 11 bytes graças ao @Titus assumindo que a letra
L
não aparece na entrada. Economizou 5 bytes graças a @Oriol. Versão ES6 para125114109 bytes:fonte
replace([^])
vez dematch([])
? Você desperdiça 3 bytes ou existe um motivo?null
resultado de correspondência?()
neste caso; comendo todos os seis com os quais você salvariamatch(/[omen]/)
. Pena.L
final ao substr (que nunca aparecerá na string original), não preciso me preocupar com correspondências estranhas e, na verdade, posso usar a mesma matriz as[5,4,3,2,1,0]
duas vezes, economizando uns 13 bytes impressionantes!-2*s.split(/[omen]/).length+2
é mais curto.Pitão,
272628 bytes1 byte salvo graças a OP :-)
Explicação:
Teste aqui .
fonte
"omen"
para apenas"omen
e Pyth vai entenderRuby,
9187 bytesString#count
o uso finnicky de greve novamente! (Quando transmitida uma String, ela conta todas as ocorrências de cada letra no argumento da função, em vez de todas as ocorrências de toda a string.)Experimente online
Uma versão que pega linhas do STDIN e as imprime: 89 bytes (86 +3 do
-n
sinalizador)fonte
String#count
é estranho. +1 para (ab) usá-lo. Também é mais curto usargets
do que uma função?gets
também tiver queputs
sair, então não neste caso.Ruby: 100 bytes
fonte
/[omen]/
usar o regex para jogar golfe - ele corresponderá a qualquer caractere e é melhor em uso prático do que encadear|
s para caracteres únicos.Javascript - 206 bytes
fonte
s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n'
para se parecer com esta:"oman".split("").includes(s[k])
(s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n')
você poderia usar('omen'.indexOf(s[k])+1)
(assumindo que este é JavaScript)function luck(r)
para baixo ar=>
apenas torná-lo uma função anônima, isso é tudo que é necessário para este desafio. Também fiz uma edição para o desafio para que você não precisa se preocupar sobre o caso para que você possa remover or=r.toLowerCase();
substring
você pode usarslice
eu acredito (testar isso, porém, como eu não tenho certeza)Ruby, 57 bytes
gets
é definido$.
como 1 como efeito colateral, e o incrementamos até que a expressão regular que corresponde a$.
caracteres da sorte consecutivos não corresponda mais.fonte
Haskell, 99
Outra abordagem ... Acabei de aprender sobre o alias de função
Uso
fonte
Mathematica, 86 bytes
Código:
Explicação:
LongestCommonSubsequence
retorna a substring contígua mais longa comum à entrada e"lucky"
.StringLength
dá o seu comprimento.StringCount
conta o número de ocorrências dos caracteres de"omen"
na entrada.fonte
Python (139 bytes)
fonte
from intertools import*
TSQL, 233 bytes
Golfe:
Ungolfed:
Experimente online
fonte
Haskell (
134133bytes)Não é um jogador de código nem um programador Haskell, por isso adoraria algumas dicas sobre este.
(Exemplo:
g "firetruck"
)fonte
Python 3,
168157152139144136 bytesEdição: Coisas realmente óbvias que eu deveria ter visto mais fácil foram alteradas, e algumas um pouco menos óbvias.
Edit 2: stoopid (˚n˚). O programa gerou erros. Eu consertei isso. na verdade não 153 :(
Agradecimentos a Leaky Nun por salvar 5 bytes e a jmilloy por salvar
138 bytes.O programa percorre todas as possíveis substrings possíveis na entrada (possivelmente possível, porque calcula também substrings impossíveis, 8 a 7, por exemplo), verifica se a substring está em "lucky" e depois define o expoente 2 para o comprimento de a substring deve ser maior que o valor atual. Possivelmente poderia ser melhorado usando apenas um loop while. Poderia usar alguma melhoria; Eu ainda estou pegando o jeito disso.
fonte
while p+1
tornawhile-~p
b=s[p:q]
,len(b)
deve estarq-p
certo?print(2**m-2*sum(i in"omen" for i in s))
nas últimas três linhas, fará melhor, como o 148?while-~q:n=q-p;m=n if(s[p:q]in"lucky")*n>m else m;q-=1
para 143?sum(map(s.count,"omen"))
economiza um byte, tornando-o 135Programa PHP,
139135108byteso salto quântico falha em várias substrings em que a primeira ocorrência é mais curta. :(
na verdade, eu poderia salvar outros 7 bytes no PHP <5.4 com register_globals em
uso:
php -d error_reporting=0 <filename> <string>
+5 para uma função:
testes (na função)
fonte
C # (compilador interativo do Visual C #) com sinalizador
/u:System.Text.RegularExpressions.Regex
, 99 bytesExperimente online!
fonte
Scala, 155 bytes
fonte