Étant donné une chaîne, renvoyez la "chance" de cette chaîne.
La chance d'une chaîne, comme je viens de la rattraper pour le but de ce défi, est un entier, déterminé comme suit:
- La chance de base pour une chaîne est 1.
- Pour chaque lettre consécutive qu'il partage avec le mot "chanceux" (insensible à la casse), multipliez la chance par 2. Par exemple, si votre chaîne était " lu mberjack" ou "sma ck ", vous multiplieriez par 4. (Plus précisément, 2 ^ nombre de caractères consécutifs partagés.)
- Les lettres partagées doivent être dans le même ordre consécutif; elles apparaissent dans "chanceux" mais peuvent commencer n'importe où dans le mot pour la même valeur ("luc" a le même multiplicateur 8 * que "cky").
- Si le mot a plusieurs occurrences où il partage des caractères consécutifs avec chanceux, utilisez la chaîne de caractères consécutive la plus longue.
- Pour N'IMPORTE QUELLE lettre, elle partage le mot "présage", soustrayez 2 de la chance.
- Il peut correspondre à un personnage à tout moment, dans n'importe quel ordre. Par exemple, la chaîne "nnnnnomemenn" perd 24 points de chance (12 lettres correspondantes)
Exemple:
luck("lucky")
>>32
2 ^ 5 (5 lettres consécutives) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 lettres consécutives de uck , e partagé avec omen)
luck("memes")
>>-7
1 - 8 (montant de base, 4 partagé avec "augure")
C'est le code de golf, donc la réponse avec le moins d'octets gagne.
Vous pouvez entrer et sortir comme vous le souhaitez - écrire une fonction, utiliser une entrée standard, etc.
Pour les fonctions, supposons que tout type de données ait un sens pour cette langue. (Par exemple, en JavaScript, vous recevrez un String
et retournerez un Number
)
Modifier: vous pouvez supposer que toute entrée est en minuscule.
int8_t str_luck(const char* str);
ou devrait-il êtreuint64_t str_luck(const char* str);
?Réponses:
05AB1E ,
36322826 octetsExplication
Essayez-le en ligne
2 octets sauvés grâce à Adnan
la source
'
, donc pour 26:Œv'¸éyåiyˆ}}¯é¤go¹'ƒÖ¦Ãg·-
:).JavaScript (ES7),
123112107 octetsEdit: 11 octets enregistrés grâce à @Titus en supposant que la lettre
L
n’apparaît pas dans l’entrée. 5 octets sauvés grâce à @Oriol. Version ES6 pour125114109 octets:la source
replace([^])
au lieu dematch([])
? Vous perdez 3 octets ou y a-t-il une raison?null
résultat de correspondance?()
dans ce cas; manger tous les six que vous économiseriez avecmatch(/[omen]/)
. Pitié.L
à la fin du substrat (qui n'apparaîtra jamais dans la chaîne d'origine), je n'ai pas à m'inquiéter des correspondances superflues et je peux utiliser le même tableau les[5,4,3,2,1,0]
deux fois, économiser 13 octets!-2*s.split(/[omen]/).length+2
est plus courte.Pyth,
272628 octets1 octet enregistré grâce à OP :-)
Explication:
Testez-le ici .
la source
"omen"
en juste"omen
et que Pyth comprendraRubis,
9187 octetsString#count
L'utilisation de finnicky frappe encore! (Lorsqu'une chaîne est transmise, elle compte toutes les occurrences de chaque lettre dans l'argument de la fonction au lieu de toutes les occurrences de la chaîne entière.)Essayez-le en ligne
Une version qui prend des lignes de STDIN et les imprime: 89 octets (86 +3 à partir du
-n
drapeau)la source
String#count
bizarre. +1 pour (ab) l'utiliser. Aussi est-il plus court d'utilisergets
plutôt qu'une fonction?gets
dois aussiputs
pour la sortie, donc pas dans ce cas.Ruby: 100 octets
la source
/[omen]/
comme regex de jouer au golf - cela correspond à n’importe quel personnage et est meilleur en utilisation pratique que l’enchaînement|
de personnages uniques.Javascript - 206 octets
la source
s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n'
pour ressembler à ceci:"oman".split("").includes(s[k])
(s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n')
vous pourriez utiliser('omen'.indexOf(s[k])+1)
(en supposant que ce soit JavaScript)function luck(r)
enr=>
faire une fonction anonyme, c'est tout ce qui est nécessaire pour relever ce défi. J'ai égalementr=r.toLowerCase();
substring
vous pouvez utiliserslice
je crois (testez cela, comme je ne suis pas sûr)Ruby, 57 octets
gets
définit$.
comme un effet secondaire 1, puis nous l'incrémentons jusqu'à ce que l'expression régulière correspondant aux$.
caractères porte-bonheur consécutifs ne corresponde plus.la source
Haskell, 99
Une autre approche ... Je viens d'apprendre à propos de l'aliasing de fonction
Usage
la source
Mathematica, 86 octets
Code:
Explication:
LongestCommonSubsequence
renvoie la plus longue sous-chaîne contiguë commune à l'entrée et"lucky"
.StringLength
donne sa longueur.StringCount
compte le nombre d'occurrences des caractères de"omen"
dans l'entrée.la source
Python (139 octets)
la source
from intertools import*
TSQL, 233 octets
Golfé:
Ungolfed:
Essayez-le en ligne
la source
Haskell (
134132 octets)Pas un golfeur de code ni un programmeur Haskell, alors j'aimerais quelques conseils sur celui-ci.
(Exemple:
g "firetruck"
)la source
Python 3,
168157152139144136 136 octetsEDIT: Les choses vraiment évidentes que j'aurais dû voir plus facilement ont été modifiées, et certaines légèrement moins évidentes.
Éditez 2: stoopid (n˚). Le programme a jeté des erreurs. Je l'ai arrangé. pas réellement 153 :(
Merci à Leaky Nun d’avoir économisé 5 octets et à jmilloy d’avoir économisé
138 octets.Le programme parcourt toutes les sous-chaînes possibles en entrée (éventuellement, car il calcule également les sous-chaînes impossibles, 8 à 7, par exemple), vérifie si la sous-chaîne est "chanceux", puis définit l’exposant de 2 sur la longueur de la sous-chaîne doit être supérieure à la valeur actuelle. Peut-être pourrait-on améliorer en utilisant une seule boucle while. Pourrait éventuellement utiliser une amélioration; Je comprends toujours le problème.
la source
while p+1
devientwhile-~p
b=s[p:q]
,len(b)
doit avoirq-p
raison?print(2**m-2*sum(i in"omen" for i in s))
pour vos trois dernières lignes, vous ferez mieux, comme 148?while-~q:n=q-p;m=n if(s[p:q]in"lucky")*n>m else m;q-=1
pour 143?sum(map(s.count,"omen"))
enregistre un octet, ce qui en fait 135Programme PHP,
139135108octetsLe saut quantique échoue pour plusieurs sous-chaînes où la première occurrence est plus courte. :(
en fait, je pourrais économiser 7 octets supplémentaires en PHP <5.4 avec register_globals sur
usage:
php -d error_reporting=0 <filename> <string>
+5 pour une fonction:
tests (sur la fonction)
la source
C # (compilateur interactif Visual C #) avec indicateur
/u:System.Text.RegularExpressions.Regex
, 99 octetsEssayez-le en ligne!
la source
Scala, 155 octets
la source