Если дана строка, верните ее «удачу».
Удача строки, как я только что придумал для этой задачи, является целым числом, определяемым так:
- Базовое везение для строки - 1.
- Для каждой последовательной буквы, которую она разделяет со словом «lucky» (без учета регистра), умножьте удачу на 2. Например, если ваша строка была « lu mberjack» или «sma ck », вы умножили бы на 4. (Более конкретно, 2 ^ количество последовательных символов.)
- Совместно используемые буквы должны быть в том же порядке, в котором они указаны как «счастливые», но могут начинаться в любом месте слова с тем же значением («luc» имеет тот же множитель 8 *, что и «cky»).
- Если слово встречается несколько раз, когда оно разделяет последовательные символы на счастливое, используйте самую длинную последовательную строку символов.
- Для ЛЮБОГО письма оно делится со словом «предзнаменование», отнимает 2 от удачи.
- Он может соответствовать персонажу любое количество раз и в любом порядке. Например, строка «nnnnnomemenn» теряет 24 удачи (12 совпадающих букв)
Пример:
luck("lucky")
>>32
2 ^ 5 (5 последовательных букв) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 последовательных письма от uck , e разделены с предзнаменованием)
luck("memes")
>>-7
1 - 8 (базовая сумма, 4 делятся на «предзнаменование»)
Это код гольф, поэтому ответ с наименьшим количеством байтов выигрывает.
Вы можете вводить и выводить данные любым способом - написать функцию, использовать стандартный ввод и т. Д.
Для функций предположите, какой тип данных будет иметь смысл для этого языка. (Например, в JavaScript вам нужно передать a String
и вернуть a Number
)
Изменить: Вы можете предположить, что любой ввод в нижнем регистре.
int8_t str_luck(const char* str);
и должно бытьuint64_t str_luck(const char* str);
?Ответы:
05AB1E ,
36322826 байтобъяснение
Попробуйте онлайн
Сохранено 2 байта благодаря Аднану
источник
'
, так что для 26:Œv'¸éyåiyˆ}}¯é¤go¹'ƒÖ¦Ãg·-
:).JavaScript (ES7),
123112107 байтРедактировать: Сохранено 11 байтов благодаря @Titus, предполагая, что буква
L
не появляется на входе. Сохранено 5 байтов благодаря @Oriol. Версия ES6 для125114109 байтов:источник
replace([^])
вместоmatch([])
? Вы тратите 3 байта или есть причина?null
совпадения?()
в этом случае; съедая все шесть, что вы бы сэкономитьmatch(/[omen]/)
. Жалость.L
в конец substr (который никогда не появится в исходной строке) мне не нужно беспокоиться о посторонних совпадениях, и я могу фактически использовать один и тот же массив[5,4,3,2,1,0]
оба раза, экономя колоссальные 13 байтов!-2*s.split(/[omen]/).length+2
корочеPyth,
272628 байтов1 байт сохранен благодаря OP :-)
Объяснение:
Проверьте это здесь .
источник
"omen"
на справедливость,"omen
иРубин,
9187 байтString#count
Внушительное использование снова поражает! (Когда передается строка, она считает все вхождения каждой буквы в аргументе функции вместо всех вхождений всей строки.)Попробуйте онлайн
Версия, которая берет строки из STDIN и печатает их: 89 байтов (86 +3 от
-n
флага)источник
String#count
странно +1 за (ab) его использование. Кроме того, это короче, чтобы использовать,gets
а не функцию?gets
I также долженputs
для вывода, так что не в этом случае.Рубин: 100 байт
источник
/[omen]/
как регулярное выражение - он будет соответствовать любому персонажу и лучше в практическом использовании, чем цепочка|
s для отдельных персонажей.JavaScript - 206 байт
источник
s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n'
выглядеть так:"oman".split("").includes(s[k])
(s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n')
вас можно использовать('omen'.indexOf(s[k])+1)
(при условии, что это JavaScript)function luck(r)
, чтобыr=>
просто сделать его анонимной функцией, это все, что необходимо для этой задачи. Кроме того, я внес изменения в задачу, чтобы вам не приходилось беспокоиться о деле, чтобы вы могли удалитьr=r.toLowerCase();
substring
вы могли использовать,slice
я верю (проверьте это, хотя, поскольку я не уверен)Рубин, 57 байт
gets
устанавливает$.
значение 1 как побочный эффект, затем мы увеличиваем его до тех пор, пока регулярное выражение, совпадающее с$.
последовательными счастливыми символами, больше не будет совпадать.источник
Хаскелл, 99
Другой подход ... Я только что узнал о псевдонимах функций
использование
источник
Mathematica, 86 байт
Код:
Объяснение:
LongestCommonSubsequence
возвращает самую длинную непрерывную подстроку, общую для ввода и"lucky"
.StringLength
дает свою длину.StringCount
подсчитывает количество появлений символов"omen"
на входе.источник
Python (139 байт)
источник
from intertools import*
TSQL, 233 байта
Golfed:
Ungolfed:
Попробуйте онлайн
источник
Haskell (
134132 байта)Не гольфист кода и не программист на Haskell, поэтому хотелось бы получить несколько советов по этому вопросу.
(Пример:
g "firetruck"
)источник
Python 3,
168157152139144136 байтовРЕДАКТИРОВАТЬ: действительно очевидные вещи, которые я должен был видеть проще, были изменены, а некоторые немного менее очевидными.
Изменить 2: сутулость (˚n˚). Программа выкинула ошибки. Я исправил это. на самом деле не 153 :(
Спасибо Leaky Nun за сохранение 5 байт и jmilloy за сохранение
138 байт.Программа просматривает все возможные подстроки на входе (возможно, потому что она также вычисляет невозможные подстроки, например, от 8 до 7), проверяет, находится ли подстрока в «счастливом», затем устанавливает показатель степени 2 равным длине подстрока должна быть больше текущего значения. Возможно, можно улучшить, используя только один цикл while. Возможно, можно использовать некоторые улучшения; Я все еще изучаю это.
источник
while p+1
становитсяwhile-~p
b=s[p:q]
,len(b)
должен бытьq-p
прав?print(2**m-2*sum(i in"omen" for i in s))
последние три строчки, вы сделаете лучше, например, 148?while-~q:n=q-p;m=n if(s[p:q]in"lucky")*n>m else m;q-=1
для 143?sum(map(s.count,"omen"))
сохраняет один байт, делая его 135PHP программа,
139135108байтквантовый скачок не удался для нескольких подстрок, где первый случай короче. :(
на самом деле я мог бы сохранить еще 7 байтов в PHP <5.4 с register_globals на
использование:
php -d error_reporting=0 <filename> <string>
+5 за функцию:
тесты (по функции)
источник
C # (интерактивный компилятор Visual C #) с флагом
/u:System.Text.RegularExpressions.Regex
, 99 байтПопробуйте онлайн!
источник
Скала, 155 байт
источник