Dada una cadena, devuelve la "suerte" de esa cadena.
La suerte de una cadena, como acabo de inventar con el propósito de este desafío, es un número entero, determinado de esta manera:
- La suerte base para una cadena es 1.
- Para cada letra consecutiva que comparte con la palabra "suerte" (no distingue entre mayúsculas y minúsculas), multiplique la suerte por 2. Por ejemplo, si su cadena era " lu mberjack" o "sma ck ", multiplicaría por 4. (Más específicamente, 2 ^ número de caracteres consecutivos compartidos)
- Las letras compartidas deben estar en el mismo orden consecutivo que aparece en "suerte", pero pueden comenzar en cualquier parte de la palabra por el mismo valor ("luc" tiene el mismo multiplicador 8 * que "cky").
- Si la palabra tiene múltiples ocurrencias donde comparte caracteres consecutivos con lucky, use la cadena consecutiva más larga de los caracteres.
- Para CUALQUIER letra que comparta con la palabra "presagio", reste 2 de la suerte.
- Puede coincidir con un personaje cualquier cantidad de veces, en cualquier orden. Por ejemplo, la cadena "nnnnnomemenn" pierde 24 suerte (12 letras coincidentes)
Ejemplo:
luck("lucky")
>>32
2 ^ 5 (5 letras consecutivas) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 letras consecutivas de uck , e compartidas con presagio)
luck("memes")
>>-7
1 - 8 (cantidad base, 4 compartidos con "presagio")
Este es el código de golf, por lo que gana la respuesta con la menor cantidad de bytes.
Puede ingresar y emitir de la forma que desee: escriba una función, use la entrada estándar, etc.
Para las funciones, suponga que cualquier tipo de datos tendría sentido para ese idioma. (Por ejemplo, en JavaScript, se le pasará ay Stringdevolverá a Number)
Editar: puede suponer que cualquier entrada es minúscula.

int8_t str_luck(const char* str);o debería seruint64_t str_luck(const char* str);?Respuestas:
05AB1E ,
36322826 bytesExplicación
Pruébalo en línea
Guardado 2 bytes gracias a Adnan
fuente
', así que para 26:Œv'¸éyåiyˆ}}¯é¤go¹'ƒÖ¦Ãg·-:).JavaScript (ES7),
123112107 bytesEditar: Guardado 11 bytes gracias a @Titus al suponer que la letra
Lno aparece en la entrada. Guardado 5 bytes gracias a @Oriol. Versión ES6 para125114109 bytes:fuente
replace([^])lugar dematch([])? ¿Pierdes 3 bytes o hay alguna razón?nullresultado de coincidencia?()en este caso; comiendo los seis con los que ahorraríasmatch(/[omen]/). Lástima.Lal final del substr (que nunca aparecerá en la cadena original) no tengo que preocuparme por coincidencias extrañas y realmente puedo usar la misma matriz en[5,4,3,2,1,0]ambas ocasiones, ahorrando la friolera de 13 bytes!-2*s.split(/[omen]/).length+2Es más corto.Pyth,
272628 bytes1 byte guardado gracias a OP :-)
Explicación:
Pruébalo aquí .
fuente
"omen"a justo"omeny Pyth lo entenderáRuby,
9187 bytesString#count¡El uso finnicky ataca de nuevo! (Cuando se pasa una Cadena, cuenta todas las apariciones de cada letra en el argumento de la función en lugar de todas las apariciones de toda la cadena).Pruébalo en línea
Una versión que toma líneas de STDIN y las imprime: 89 bytes (86 +3 de la
-nbandera)fuente
String#countes raro +1 para (ab) usándolo. ¿También es más corto de usar engetslugar de una función?getstambién tengo que hacerloputspara la salida, así que no en este caso.Rubí: 100 bytes.
fuente
/[omen]/como la expresión regular para jugar golf: coincidirá con cualquier personaje y es mejor en el uso práctico que encadenar|s para caracteres individuales.Javascript - 206 bytes
fuente
s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n'para verse así:"oman".split("").includes(s[k])(s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n')que pueda usar('omen'.indexOf(s[k])+1)(suponiendo que esto sea JavaScript)function luck(r)parar=>convertirlo en una función anónima, eso es todo lo que se necesita para este desafío. También hice una edición del desafío para que no tenga que preocuparse por el caso para que pueda eliminar elr=r.toLowerCase();substringque puedas usar,slicecreo (prueba esto, ya que no estoy seguro)Ruby, 57 bytes
getsse establece$.en 1 como efecto secundario, luego lo incrementamos hasta que la expresión regular que coincide con$.caracteres afortunados consecutivos ya no coincide.fuente
Haskell, 99
Otro enfoque ... Acabo de aprender sobre el alias de funciones
Uso
fuente
Mathematica, 86 bytes
Código:
Explicación:
LongestCommonSubsequencedevuelve la subcadena contigua más larga común a la entrada y"lucky".StringLengthda su longitud.StringCountcuenta el número de ocurrencias de los caracteres de"omen"en la entrada.fuente
Python (139 bytes)
fuente
from intertools import*TSQL, 233 bytes
Golfizado:
Sin golf:
Pruébalo en línea
fuente
Haskell (
134132 Bytes)No es un jugador de código ni un programador de Haskell, por lo que me encantaría algunos consejos sobre este.
(Ejemplo:
g "firetruck")fuente
Python 3,
168157152139144136 bytesEDITAR: Las cosas realmente obvias que debería haber visto más fáciles han cambiado, y algunas un poco menos obvias.
Edición 2: stoopid (˚n˚). El programa arrojó errores. Lo arreglé. en realidad no 153 :(
Gracias a Leaky Nun por guardar 5 bytes, y a jmilloy por guardar
138 bytes.El programa se ejecuta a través de todas las posibles subcadenas de entrada (posiblemente posible, porque también calcula subcadenas imposibles, 8 a 7, por ejemplo), comprueba si la subcadena está en "suerte", luego establece el exponente de 2 a la longitud de la subcadena debe ser mayor que el valor actual. Posiblemente podría mejorarse usando solo un bucle while. Posiblemente podría usar alguna mejora; Todavía me estoy acostumbrando a esto.
fuente
while p+1se conviertewhile-~pb=s[p:q],len(b)debe estar en loq-pcierto?print(2**m-2*sum(i in"omen" for i in s))últimas tres líneas, ¿te irá mejor, como 148?while-~q:n=q-p;m=n if(s[p:q]in"lucky")*n>m else m;q-=1para 143?sum(map(s.count,"omen"))ahorra un byte, por lo que es 135Programa PHP,
139135108bytesel salto cuántico falla para múltiples subcadenas donde la primera ocurrencia es más corta. :(
De hecho, podría guardar otros 7 bytes en PHP <5.4 con register_globals en
uso:
php -d error_reporting=0 <filename> <string>+5 para una función:
pruebas (en la función)
fuente
C # (compilador interactivo de Visual C #) con indicador
/u:System.Text.RegularExpressions.Regex, 99 bytesPruébalo en línea!
fuente
Scala, 155 bytes
fuente