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 String
devolverá 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
L
no 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?null
resultado de coincidencia?()
en este caso; comiendo los seis con los que ahorraríasmatch(/[omen]/)
. Lástima.L
al 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+2
Es más corto.Pyth,
272628 bytes1 byte guardado gracias a OP :-)
Explicación:
Pruébalo aquí .
fuente
"omen"
a justo"omen
y 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
-n
bandera)fuente
String#count
es raro +1 para (ab) usándolo. ¿También es más corto de usar engets
lugar de una función?gets
también tengo que hacerloputs
para 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();
substring
que puedas usar,slice
creo (prueba esto, ya que no estoy seguro)Ruby, 57 bytes
gets
se 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:
LongestCommonSubsequence
devuelve la subcadena contigua más larga común a la entrada y"lucky"
.StringLength
da su longitud.StringCount
cuenta 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+1
se conviertewhile-~p
b=s[p:q]
,len(b)
debe estar en loq-p
cierto?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-=1
para 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