Ник пользователя

Пользователь

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ник пользователя

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Заранее извиняюсь перед богами программирования в первую очередь. Я совсем новичок и вот такое "Kata" встретил:

Justin has an exceptionally smart dog. In the latest show of its unparalleled intelligence, the dog learned to communicate human words. To do that, it woofs the exact number of times it takes to get to the right letter in the English alphabet. For example, if the dog is interested in the letter "A", it woofs just one time, if it's "B", it woofs two times and so on. Justin is amazed by his pet, but he also finds it challenging to translate the woofs in his head. Write a decoder for him that takes a string of hyphen-separated woofs and returns their human-language representation

Things to keep in mind:

  1. Each valid woof sequence stands for one letter. All of them are guaranteed to end with an exclamation point. A space, on the other hand, is not guaranteed to follow

  2. Justin's audio recorder is not a very good one. Sometimes, it inserts some random sounds that should be ignored. With that in mind, a woof is any sequence of letters that has a "w", an "o", another "o", and an "f" – in that order but not necessarily consecutively and irrespective of the case. If a string has no valid woof sequences, the method should return "nothing to decode!"

  3. Albeit a smart one, Justin's dog is still a dog. Sometimes, it just wants to bark! If the number of woofs in any woof sequence exceeds the number of letters in the English alphabet, you should return "just barking!"

  4. Justin's dog has not yet learned the concept of spaces. The strings may represent more than one human word, but the returned string should not contain any white space characters

  5. While input strings may contain letters of either case, the returned strings should be always in lower case

Examples:

  • "Woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof!" → "hi"

  • "Woof-woof-woof-woof-woof-woof!Woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof! Woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof!" → "feedme"

  • "Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof!" → "just barking!"

  • "Shhhh!" → "nothing to decode!"

  • "WoofWoof!" → "a"

  • "Shhhhwoof!" → "a"

  • "Woofshhh! Shhh!" → "a"

  • "Wofowof!" → "a"

  • "khkhkhWbzzzzobzzzOghrrrrfseswsw!" → "a"

    Я, как полный новичок, думал над этим 3 дня. Трое суток, чёрт возьми. Сложность там на уровне 6 (самое сложное 1, самое лёгкое 8)
    То есть, задачка для совсем новичков. Моё решение составило в районе 100 строк, а решение от нормальных людей там в 3 строки.

    Собственно, прошу ребят шарящих объяснить, как коротко решить эту задачку. Желательно, код с разъяснениями действий. Хочу словить минусов и разъяснений в решении. Это того стоит.
    Хотя бы пойму, как люди это в 3-4 строки решают...

Данил Низамов

Пользователь

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Данил Низамов

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Я не буду сейчас писать код, но идея простая:
1) split по !

2) count woof в каждом элементе сплита, перед этим сделать lower()
3) получаем число, по нему изи получить букву, можно просто по ASCII (но я хз можно ли это в js и как, но по идее гуглится за секунду)


Я не супер много пишу на js, мне впадлу на нем решать, но на питоне это было бы типа

letters = input.split(!)

letters = [chr(x.lower().count("woof") + 96) for x in letters]

return "".join(letters)

Правда это прям как решение задачи не отправишь, тут энивей придется еще подумать, как обработать just barking и nothing to decode, но в остальных случаях это должно работать


Ник пользователя

Пользователь

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ник пользователя

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

А если эти "woof" стоят вразнобой, сработает?
Типа " o w o f o dd "


Данил Низамов сказал(а):

Я не буду сейчас писать код, но идея простая:
1) split по !

2) count woof в каждом элементе сплита, перед этим сделать lower()
3) получаем число, по нему изи получить букву, можно просто по ASCII (но я хз можно ли это в js и как, но по идее гуглится за секунду)


Я не супер много пишу на js, мне впадлу на нем решать, но на питоне это было бы типа

letters = input.split(!)

letters = [chr(x.lower().count("woof") + 96) for x in letters]

return "".join(letters)

Правда это прям как решение задачи не отправишь, тут энивей придется еще подумать, как обработать just barking и nothing to decode, но в остальных случаях это должно работать


Нажмите, чтобы раскрыть...

Если ты можешь это решить на Python я буду прям благодарен. Это лучшее, что я здесь мог бы ожидать. У меня сестра обучается на Python
Если это можно воплотить на Python , то ты просто лучший

Данил Низамов

Пользователь

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Данил Низамов

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Ник пользователя сказал(а):

А если эти "woof" стоят вразнобой, сработает?
Типа " o w o f o dd "

Нажмите, чтобы раскрыть...

Нет, я невнимательно прочитал. Ну тогда прям чит решения в пару строк не вижу сходу. Но даже если делать это в тупую, то код получается довольно простым, уверен, что на js будет то же самое

letters = input.split(!)
phrase = []


for x in letters:


x = x.lower()


if len(phrase) > 26:



return "just_barking"

new_x = ""


for char in x:



if char == "w" or char == "o" or char == "f"




new_x += char


num_of_woofs = new_x.count("woof")


if num_of_woofs != 0:



phrase.append(chr(num_of_woofs + 96))


if len(phrase) > 0:


return "".join(letters)

else:


return "nothing to decode"

Вообще нет смысла пытаться обязательно делать код как можно короче. В принципе вариант, который я привел выше, кажется ок для такой задачи. В таких языках как питон или js часто можно придумать чит-решение в пару строк, но очень важно, чтобы его все еще можно было нормально прочитать

Я код не проверял, мне лень сейчас. Но мне кажется, что если в нем и есть ошибки, то какие-то мелкие. В целом такое решение должно быть правильным


Если скинешь ссылку на кату, я могу быстренько там отдебажить решение и прислать точно правильное. Ну и спрашивай, если что-то не понятно, буду рад объяснить

Удалено 624055

Пользователь

Регистрация: 24.03.2016

Сообщения: 36

Рейтинг: 15

Удалено 624055

Регистрация: 24.03.2016

Сообщения: 36

Рейтинг: 15

img
Данил Низамов сказал(а):

Я не буду сейчас писать код, но идея простая:
1) split по !

2) count woof в каждом элементе сплита, перед этим сделать lower()
3) получаем число, по нему изи получить букву, можно просто по ASCII (но я хз можно ли это в js и как, но по идее гуглится за секунду)


Я не супер много пишу на js, мне впадлу на нем решать, но на питоне это было бы типа

letters = input.split(!)

letters = [chr(x.lower().count("woof") + 96) for x in letters]

return "".join(letters)

Правда это прям как решение задачи не отправишь, тут энивей придется еще подумать, как обработать just barking и nothing to decode, но в остальных случаях это должно работать


Нажмите, чтобы раскрыть...

твой код посчитает woofwoof за два раза, а должен за один
должен считать "woof-" и последний woof отдельно (добавить восклиц знак например)

Данил Низамов

Пользователь

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Данил Низамов

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

VovkaKalibrovka сказал(а):

твой код посчитает woofwoof за два раза, а должен за один
должен считать "woof-" и последний woof отдельно (добавить восклиц знак например)

Нажмите, чтобы раскрыть...

Да, ты прав, ну я просто не особо вчитывался. Не думаю, что это важно, если чел только начинает прогу, то ему надо в первую очередь посмотреть вообще на подход и на алгоритм. А мелкие баги ему и самому будет полезно почистить

Ник пользователя

Пользователь

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ник пользователя

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

VovkaKalibrovka сказал(а):

твой код посчитает woofwoof за два раза, а должен за один
должен считать "woof-" и последний woof отдельно (добавить восклиц знак например)

Нажмите, чтобы раскрыть...

Мой код вот: Он не считает за 2 раза но слишком огромный:

function woofDecoder(str) {
let str2 = str.toLowerCase()
let mas1 = []
let j = 0

console.log(str2)
for (let char of str2) {

if (char === 'w' || char === 'o' || char === 'f' || char === '-' || char === '!') {

mas1<j] = char

j++

}
}

let a = 0
let b = 0
let c = 0
let d = 0
const e = []
let f = -1
for (let i = 0; i < mas1.length; i++) {

if (a >= 1 && b >= 2 && c >= 1 && mas1<i] === '-') {

d++

a = 0, b = 0, c = 0

} else if (a >= 1 && b >= 2 && c >= 1 && mas1<i] === '!') {

f++

d++

e<f] = d

d = 0, a = 0, b = 0, c = 0

} else if (mas1<i] === 'w') {

a++

} else if (mas1<i] === 'o') {

b++

} else if (mas1<i] === 'f') {

c++

}


}

if (e<0] === undefined) {

return 'nothing to decode!'
}
for (let bb = 0; bb < e.length; bb++) {

if (e<bb]+96 > 122) {

return 'just barking!'

}
}
// console.log(e)
function intToChar(int) {

const code = 'a'.charCodeAt(0);

return String.fromCharCode(code-1 + int);
}
for (let aa = 0; aa < e.length; aa++) {

e<aa] = intToChar(e<aa])
}
// console.log(e)
return e.join('') }

Данил Низамов

Пользователь

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Данил Низамов

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Ник пользователя сказал(а):

Мой код вот: Он не считает за 2 раза но слишком огромный:

function woofDecoder(str) {
let str2 = str.toLowerCase()
let mas1 = []
let j = 0

console.log(str2)
for (let char of str2) {

if (char === 'w' || char === 'o' || char === 'f' || char === '-' || char === '!') {

mas1[j] = char

j++

}
}

let a = 0
let b = 0
let c = 0
let d = 0
const e = []
let f = -1
for (let i = 0; i < mas1.length; i++) {

if (a >= 1 && b >= 2 && c >= 1 && mas1 === '-') {

d++

a = 0, b = 0, c = 0

} else if (a >= 1 && b >= 2 && c >= 1 && mas1 === '!') {

f++

d++

e[f] = d

d = 0, a = 0, b = 0, c = 0

} else if (mas1 === 'w') {

a++

} else if (mas1 === 'o') {

b++

} else if (mas1 === 'f') {

c++

}


}

if (e[0] === undefined) {

return 'nothing to decode!'
}
for (let bb = 0; bb < e.length; bb++) {

if (e[bb]+96 > 122) {

return 'just barking!'

}
}
// console.log(e)
function intToChar(int) {

const code = 'a'.charCodeAt(0);

return String.fromCharCode(code-1 + int);
}
for (let aa = 0; aa < e.length; aa++) {

e[aa] = intToChar(e[aa])
}
// console.log(e)
return e.join('') }
Нажмите, чтобы раскрыть...

Ну если пришлешь код в каком-то виде, в котором его можно прочесть (а этот мне даже автоформаттер в IDE не правит), то могу написать, что не так

Удалено 624055

Пользователь

Регистрация: 24.03.2016

Сообщения: 36

Рейтинг: 15

Удалено 624055

Регистрация: 24.03.2016

Сообщения: 36

Рейтинг: 15

img
Ник пользователя сказал(а):

Мой код вот: Он не считает за 2 раза но слишком огромный:

function woofDecoder(str) {
let str2 = str.toLowerCase()
let mas1 = []
let j = 0

console.log(str2)
for (let char of str2) {

if (char === 'w' || char === 'o' || char === 'f' || char === '-' || char === '!') {

mas1[j] = char

j++

}
}

let a = 0
let b = 0
let c = 0
let d = 0
const e = []
let f = -1
for (let i = 0; i < mas1.length; i++) {

if (a >= 1 && b >= 2 && c >= 1 && mas1 === '-') {

d++

a = 0, b = 0, c = 0

} else if (a >= 1 && b >= 2 && c >= 1 && mas1 === '!') {

f++

d++

e[f] = d

d = 0, a = 0, b = 0, c = 0

} else if (mas1 === 'w') {

a++

} else if (mas1 === 'o') {

b++

} else if (mas1 === 'f') {

c++

}


}

if (e[0] === undefined) {

return 'nothing to decode!'
}
for (let bb = 0; bb < e.length; bb++) {

if (e[bb]+96 > 122) {

return 'just barking!'

}
}
// console.log(e)
function intToChar(int) {

const code = 'a'.charCodeAt(0);

return String.fromCharCode(code-1 + int);
}
for (let aa = 0; aa < e.length; aa++) {

e[aa] = intToChar(e[aa])
}
// console.log(e)
return e.join('') }
Нажмите, чтобы раскрыть...

плевать что код большой если ты только начинаешь
идея вообще правильная, сначала отфильтровать строку от лишних символов (не 'w' 'o' 'f' '-' '!') но твой код не учитывает что если woof- 27 раз идёт то должно вернуть just barking а он вернёт 123 символ в ASCII таблице (это будет "{" )

Kemoin

Пользователь

Регистрация: 14.11.2019

Сообщения: 13669

Рейтинг: 8680

Kemoin

Регистрация: 14.11.2019

Сообщения: 13669

Рейтинг: 8680

Ник пользователя сказал(а):

Заранее извиняюсь перед богами программирования в первую очередь. Я совсем новичок и вот такое "Kata" встретил:

Justin has an exceptionally smart dog. In the latest show of its unparalleled intelligence, the dog learned to communicate human words. To do that, it woofs the exact number of times it takes to get to the right letter in the English alphabet. For example, if the dog is interested in the letter "A", it woofs just one time, if it's "B", it woofs two times and so on. Justin is amazed by his pet, but he also finds it challenging to translate the woofs in his head. Write a decoder for him that takes a string of hyphen-separated woofs and returns their human-language representation

Things to keep in mind:

  1. Each valid woof sequence stands for one letter. All of them are guaranteed to end with an exclamation point. A space, on the other hand, is not guaranteed to follow

  2. Justin's audio recorder is not a very good one. Sometimes, it inserts some random sounds that should be ignored. With that in mind, a woof is any sequence of letters that has a "w", an "o", another "o", and an "f" – in that order but not necessarily consecutively and irrespective of the case. If a string has no valid woof sequences, the method should return "nothing to decode!"

  3. Albeit a smart one, Justin's dog is still a dog. Sometimes, it just wants to bark! If the number of woofs in any woof sequence exceeds the number of letters in the English alphabet, you should return "just barking!"

  4. Justin's dog has not yet learned the concept of spaces. The strings may represent more than one human word, but the returned string should not contain any white space characters

  5. While input strings may contain letters of either case, the returned strings should be always in lower case

Examples:

  • "Woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof!" → "hi"

  • "Woof-woof-woof-woof-woof-woof!Woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof! Woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof!" → "feedme"

  • "Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof!" → "just barking!"

  • "Shhhh!" → "nothing to decode!"

  • "WoofWoof!" → "a"

  • "Shhhhwoof!" → "a"

  • "Woofshhh! Shhh!" → "a"

  • "Wofowof!" → "a"

  • "khkhkhWbzzzzobzzzOghrrrrfseswsw!" → "a"

    Я, как полный новичок, думал над этим 3 дня. Трое суток, чёрт возьми. Сложность там на уровне 6 (самое сложное 1, самое лёгкое 8)
    То есть, задачка для совсем новичков. Моё решение составило в районе 100 строк, а решение от нормальных людей там в 3 строки.

    Собственно, прошу ребят шарящих объяснить, как коротко решить эту задачку. Желательно, код с разъяснениями действий. Хочу словить минусов и разъяснений в решении. Это того стоит.
    Хотя бы пойму, как люди это в 3-4 строки решают...

Нажмите, чтобы раскрыть...

если ты решил кодварс кату - ты можешь посмотреть самые популярные и оригинальные решения других людей


Удалено 624055

Пользователь

Регистрация: 24.03.2016

Сообщения: 36

Рейтинг: 15

Удалено 624055

Регистрация: 24.03.2016

Сообщения: 36

Рейтинг: 15

img
Данил Низамов сказал(а):

Ну если пришлешь код в каком-то виде, в котором его можно прочесть (а этот мне даже автоформаттер в IDE не правит), то могу написать, что не так

Нажмите, чтобы раскрыть...

https://pastecode.io/s/iru6bnym

Ник пользователя

Пользователь

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ник пользователя

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

VovkaKalibrovka сказал(а):

плевать что код большой если ты только начинаешь
идея вообще правильная, сначала отфильтровать строку от лишних символов (не 'w' 'o' 'f' '-' '!') но твой код не учитывает что если woof- 27 раз идёт то должно вернуть just barking а он вернёт 123 символ в ASCII таблице (это будет "{" )

Нажмите, чтобы раскрыть...

Это решение работает просто после выполнения "Kata" дают посмотреть как другие его сделали. И там 3 строки. Вот такие:

function woofDecoder(s) {
const ms = s.toLowerCase().match(/w[^!-]*?o[^!-]*?o[^!-]*?f[^!-]*?[-!]/g) || []
const arr = ms.join('').split('!').map(s=>s&&s.split('-').length)
return arr.some(n=>n>26) ? "just barking!"






: arr.map(w=> w && String.fromCharCode(w+96) ).join('') || 'nothing to decode!'

И тяжело разобраться

Удалено 624055

Пользователь

Регистрация: 24.03.2016

Сообщения: 36

Рейтинг: 15

Удалено 624055

Регистрация: 24.03.2016

Сообщения: 36

Рейтинг: 15

img
Ник пользователя сказал(а):

Это решение работает просто после выполнения "Kata" дают посмотреть как другие его сделали. И там 3 строки. Вот такие:

function woofDecoder(s) {
const ms = s.toLowerCase().match(/w[^!-]*?o[^!-]*?o[^!-]*?f[^!-]*?[-!]/g) || []
const arr = ms.join('').split('!').map(s=>s&&s.split('-').length)
return arr.some(n=>n>26) ? "just barking!"






: arr.map(w=> w && String.fromCharCode(w+96) ).join('') || 'nothing to decode!'

И тяжело разобраться

Нажмите, чтобы раскрыть...

тут регулярное выражение, тебе еще рано такое

Ник пользователя

Пользователь

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ник пользователя

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Я просто надеялся что кто-то объяснит, простите если что)

Данил Низамов

Пользователь

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Данил Низамов

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Ник пользователя сказал(а):

Это решение работает просто после выполнения "Kata" дают посмотреть как другие его сделали. И там 3 строки. Вот такие:

function woofDecoder(s) {
const ms = s.toLowerCase().match(/w[^!-]*?o[^!-]*?o[^!-]*?f[^!-]*?[-!]/g) || []
const arr = ms.join('').split('!').map(s=>s&&s.split('-').length)
return arr.some(n=>n>26) ? "just barking!"






: arr.map(w=> w && String.fromCharCode(w+96) ).join('') || 'nothing to decode!'
Нажмите, чтобы раскрыть...

Ну ты можешь полистать вниз и там будут более простые решения

Это решение новичок не напишет, конечно, тут надо знать регулярки и как работают функции map() и лямбда выражения, к которым обычно приходят уже имея какой-то опыт в программировании

Да и в целом я не советую лезть в это, пока не будешь уверенно решать такие задачи просто с циклами. Когда будешь супер уверенно себя чувствовать, решая через циклы, можно учить способы их не использовать


Ник пользователя сказал(а):

Мой код вот:

Нажмите, чтобы раскрыть...

Ну у тебя в решении самый кринж начинается, когда ты вводишь три счетчика для подсчета букв w, o и f. В целом классно, что ты смог это заставить работать, но здесь явно напрашивается просто использовать метод count, который посчитает количество woof в строке. Ты ведь уже очистил строку от всего лишнего и оставил там только 'w', 'o', 'f', '-' и '!'. Дальше можно сделать count('woof-') (только не забыть, что последнее слово так не посчитается, потому что у него нет '-') и получить количество woof

Ну, я так и сделал в своем решении на питоне выше. В остальном вроде у тебя норм

Ник пользователя

Пользователь

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ник пользователя

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ребята, я вам благодарен за ответы. Буду перечитывать вновь и вновь.

Pudgewerksaw

Пользователь

Регистрация: 06.01.2021

Сообщения: 2411

Рейтинг: 1006

Нарушения: 1000

Pudgewerksaw

Регистрация: 06.01.2021

Сообщения: 2411

Рейтинг: 1006

Нарушения: 1000

Условие не на русском языке, явное неуважение к пользователям форума. Тема обязана быть скипнута. Все кто отвечал уже записался в попущенцы.

Ник пользователя

Пользователь

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ник пользователя

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Данил Низамов сказал(а):

Ну ты можешь полистать вниз и там будут более простые решения

Это решение новичок не напишет, конечно, тут надо знать регулярки и как работают функции map() и лямбда выражения, к которым обычно приходят уже имея какой-то опыт в программировании

Да и в целом я не советую лезть в это, пока не будешь уверенно решать такие задачи просто с циклами. Когда будешь супер уверенно себя чувствовать, решая через циклы, можно учить способы их не использовать


Ну у тебя в решении самый кринж начинается, когда ты вводишь три счетчика для подсчета букв w, o и f. В целом классно, что ты смог это заставить работать, но здесь явно напрашивается просто использовать метод count, который посчитает количество woof в строке. Ты ведь уже очистил строку от всего лишнего и оставил там только 'w', 'o', 'f', '-' и '!'. Дальше можно сделать count('woof-') (только не забыть, что последнее слово так не посчитается, потому что у него нет '-') и получить количество woof

Ну, я так и сделал в своем решении на питоне выше. В остальном вроде у тебя норм

Нажмите, чтобы раскрыть...

Всё там просчиталось в моём огромном коде :D
Я предусмотрел, что последнее ""woof" считается ))
Там всё считается))) Просто слишком большой код


Данил Низамов

Пользователь

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Данил Низамов

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Ник пользователя сказал(а):

Всё там просчиталось в моём огромном коде :D
Я предусмотрел, что последнее ""woolf" считается ))
Там всё считается))) Просто слишком большой код


Нажмите, чтобы раскрыть...

Не, я понял, что у тебя все считается


я говорю, что вводить счётчики и считать отдельно буквы здесь не нужно. Нужно использовать функцию count, она именно для этого и создана

Karasiq

Пользователь

Регистрация: 17.03.2020

Сообщения: 168

Рейтинг: 81

Karasiq

Регистрация: 17.03.2020

Сообщения: 168

Рейтинг: 81

Тут просто сплиты по ! и потом каждый элемент по -. Ну и еще надо чекать, что за границы алфавита не выходит, как в пункте с just barking. Плюс надо детектить, что в каждом элементе есть woof, как в примере с nothing to decode, можно просто функцией если боишься регулярок.

Ник пользователя

Пользователь

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Ник пользователя

Регистрация: 16.03.2022

Сообщения: 271

Рейтинг: 179

Данил Низамов сказал(а):

Не, я понял, что у тебя все считается


я говорю, что вводить счётчики и считать отдельно буквы здесь не нужно. Нужно использовать функцию count, она именно для этого и создана

Нажмите, чтобы раскрыть...

Я не просто
Как посчитать?
Я хз столько шарил и не нашёл способа
Я бы не создавал тему если бы загуглил и "Вот оно"

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img
Ник пользователя сказал(а):

Заранее извиняюсь перед богами программирования в первую очередь. Я совсем новичок и вот такое "Kata" встретил:

Justin has an exceptionally smart dog. In the latest show of its unparalleled intelligence, the dog learned to communicate human words. To do that, it woofs the exact number of times it takes to get to the right letter in the English alphabet. For example, if the dog is interested in the letter "A", it woofs just one time, if it's "B", it woofs two times and so on. Justin is amazed by his pet, but he also finds it challenging to translate the woofs in his head. Write a decoder for him that takes a string of hyphen-separated woofs and returns their human-language representation

Things to keep in mind:

  1. Each valid woof sequence stands for one letter. All of them are guaranteed to end with an exclamation point. A space, on the other hand, is not guaranteed to follow

  2. Justin's audio recorder is not a very good one. Sometimes, it inserts some random sounds that should be ignored. With that in mind, a woof is any sequence of letters that has a "w", an "o", another "o", and an "f" – in that order but not necessarily consecutively and irrespective of the case. If a string has no valid woof sequences, the method should return "nothing to decode!"

  3. Albeit a smart one, Justin's dog is still a dog. Sometimes, it just wants to bark! If the number of woofs in any woof sequence exceeds the number of letters in the English alphabet, you should return "just barking!"

  4. Justin's dog has not yet learned the concept of spaces. The strings may represent more than one human word, but the returned string should not contain any white space characters

  5. While input strings may contain letters of either case, the returned strings should be always in lower case

Examples:

  • "Woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof!" → "hi"

  • "Woof-woof-woof-woof-woof-woof!Woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof! Woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof!" → "feedme"

  • "Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof!" → "just barking!"

  • "Shhhh!" → "nothing to decode!"

  • "WoofWoof!" → "a"

  • "Shhhhwoof!" → "a"

  • "Woofshhh! Shhh!" → "a"

  • "Wofowof!" → "a"

  • "khkhkhWbzzzzobzzzOghrrrrfseswsw!" → "a"

    Я, как полный новичок, думал над этим 3 дня. Трое суток, чёрт возьми. Сложность там на уровне 6 (самое сложное 1, самое лёгкое 8)
    То есть, задачка для совсем новичков. Моё решение составило в районе 100 строк, а решение от нормальных людей там в 3 строки.

    Собственно, прошу ребят шарящих объяснить, как коротко решить эту задачку. Желательно, код с разъяснениями действий. Хочу словить минусов и разъяснений в решении. Это того стоит.
    Хотя бы пойму, как люди это в 3-4 строки решают...

Нажмите, чтобы раскрыть...


Если ты это решил в 100 строк вместо того чтобы нажать альт+ф4 то твоему усидчивостью и желанию вкатиться только можно позавидовать! Продолжай в том же духе.

Данил Низамов

Пользователь

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Данил Низамов

Регистрация: 17.08.2021

Сообщения: 469

Рейтинг: 320

Ник пользователя сказал(а):

Я не просто
Как посчитать?
Я хз столько шарил и не нашёл способа
Я бы не создавал тему если бы загуглил и "Вот оно"

Нажмите, чтобы раскрыть...

В js реально походу нет для этого метода, кек. Кринж. Ну вот, можно по этому найду: https://www.w3resource.com/javascript-exercises/javascript-string-exercise-18.php

peryevd

Пользователь

Регистрация: 02.02.2019

Сообщения: 97

Рейтинг: 68

peryevd

Регистрация: 02.02.2019

Сообщения: 97

Рейтинг: 68

Я бы сделал так



let str = "Woof-woof-woof-woof-woof-woof!Woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof! Woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof"


//алфавит
let alph = 'abcdefghijklmnopqrstuvwxyz'


//преобразуем строку в массив, состоящий из строк до знака "!"
let arr = str.toLowerCase().split("!"),


res = ''


//проходимся по массиву строк, подсчитываем количество совпадений с woof, передаем это количество в массив с алфавитом

for (let i = 0; i < arr.length; i++){


res += alph&arr&i].match(/woof/g).length-1]

}


console.log(res)

Ectx

Пользователь

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

Ectx

Регистрация: 20.07.2020

Сообщения: 1507

Рейтинг: 698

img
Ник пользователя сказал(а):

Заранее извиняюсь перед богами программирования в первую очередь. Я совсем новичок и вот такое "Kata" встретил:

Justin has an exceptionally smart dog. In the latest show of its unparalleled intelligence, the dog learned to communicate human words. To do that, it woofs the exact number of times it takes to get to the right letter in the English alphabet. For example, if the dog is interested in the letter "A", it woofs just one time, if it's "B", it woofs two times and so on. Justin is amazed by his pet, but he also finds it challenging to translate the woofs in his head. Write a decoder for him that takes a string of hyphen-separated woofs and returns their human-language representation

Things to keep in mind:

  1. Each valid woof sequence stands for one letter. All of them are guaranteed to end with an exclamation point. A space, on the other hand, is not guaranteed to follow

  2. Justin's audio recorder is not a very good one. Sometimes, it inserts some random sounds that should be ignored. With that in mind, a woof is any sequence of letters that has a "w", an "o", another "o", and an "f" – in that order but not necessarily consecutively and irrespective of the case. If a string has no valid woof sequences, the method should return "nothing to decode!"

  3. Albeit a smart one, Justin's dog is still a dog. Sometimes, it just wants to bark! If the number of woofs in any woof sequence exceeds the number of letters in the English alphabet, you should return "just barking!"

  4. Justin's dog has not yet learned the concept of spaces. The strings may represent more than one human word, but the returned string should not contain any white space characters

  5. While input strings may contain letters of either case, the returned strings should be always in lower case

Examples:

  • "Woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof!" → "hi"

  • "Woof-woof-woof-woof-woof-woof!Woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof! Woof-woof-woof-woof! Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof! Woof-woof-woof-woof-woof!" → "feedme"

  • "Woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof-woof!" → "just barking!"

  • "Shhhh!" → "nothing to decode!"

  • "WoofWoof!" → "a"

  • "Shhhhwoof!" → "a"

  • "Woofshhh! Shhh!" → "a"

  • "Wofowof!" → "a"

  • "khkhkhWbzzzzobzzzOghrrrrfseswsw!" → "a"

    Я, как полный новичок, думал над этим 3 дня. Трое суток, чёрт возьми. Сложность там на уровне 6 (самое сложное 1, самое лёгкое 8)
    То есть, задачка для совсем новичков. Моё решение составило в районе 100 строк, а решение от нормальных людей там в 3 строки.

    Собственно, прошу ребят шарящих объяснить, как коротко решить эту задачку. Желательно, код с разъяснениями действий. Хочу словить минусов и разъяснений в решении. Это того стоит.
    Хотя бы пойму, как люди это в 3-4 строки решают...

Нажмите, чтобы раскрыть...


Советую спецом не лезть в такие дебри, с обучением и практикой всё это придёт.

Лучше знать границы и возможности своего языка а это можно узнать только с хорошей теорией и сильной практикой те же регулярки это сперва кажется сложным.