ALLAN AVELAR
Boa Tarde<!-- --> <username class="jsx-41964832"></username><icon class="jsx-3111688975"><img alt="🍜" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAS1BMVEVHcEwAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAADoEiS7kWf/1nnrLDy1jWT5vsP40HXW1tbGxsYZGRlhYWGcnJzp6elKSkrDpFyEFbgAAAAACnRSTlMAGv//s3SKS/LOykLjcwAAAZRJREFUWMPtmOuOgyAQhRVRwMtWbtr3f9IVF2On9QKjNZvdnoT4Q/0CBzIzTJJ8hBKjnHhxyvCcggAVGAZB6QrQ/T6PQ6C6Hkb780SDqkF1PY9tXQE6bWlObTuPQx6FawP0Naiq5rGtqzz6g6AJBkHIcPQB7Yv7wHYYRKcjcBTEzgIl+VmghImTQH7nPqCnnRL8OTiEhBEucoBJxcJHgfFIpA+gJU5wYBMvJxAJIjmYUN9lCHUGTMn5LDOUpHMcbHaGFDgep4JKpN4H+n0eddmtaW7uVdwTgPgIasqycR9EPTtwjtzJVjiQBCfbJSCLW5odfqXgFmNwXhtw63GZTONAeviVwSytMBwFvD6wNgMs8lla4oIIAVfMMbTFg3oYaacp2ViOfZmQr2VUvNPAoTEhuY3TUTZJt/U8XayKdMSclF5Y2JyTbJQ/JF+/7vdBy5P9VkvA58l+d33KkPX5jD75QkIbK1fyZSet0b6A2Gh2pDS8a0DTgPIxoHLY7708tGpWq6LQFg4rqOBrlRUtDjSC/re+Abd+NlUf6yOQAAAAAElFTkSuQmCC" class="jsx-3111688975"/></icon>Seja bem vindo ao meu app!Instalar como aplicativo PWAInstalar em seu dispositivoAcesso RestritoEntrar / RegistrarBackoffice System (BOS)Dados CadastraisProjetos / ServiçosDownloads / ProdutosCréditos / ComprasChromecast AppsEspaço de AcessosNotificaçõesDesconectarConteúdos disponíveisHomeSobre Mim3IntroduçãoResumo ProfissionalMetodologia de TrabalhoPortfólioPrincipais ProjetosFlex Network5IntroduçãoMineração PúblicaFlash TradingFlex TradingTutoriaisLaboratório7💰EASYBANK💳EASYPAY💼EASYWORK👨‍🎓MASTERCLASS📲YOU2APP💘COOLPIDO🎁BRXInsightsHackerRank5Sock MerchantCounting ValleysRepeated StringJumping On CloudsLeft Rotation
EntrarRegistrarEsqueceu sua senha?EntrarNão tem uma conta? Crie uma agora!
🕓 Outubro 18, 2018🙇 5 minutos de leitura

Warm-up Challenges ⚡ Repeated String

Estou postando sobre as minhas respostas aos desafios do HackerRank como forma de melhorar meu aprendizado, reforçar meu conhecimento e estabelecer uma compreensão dos conceitos abordados. Se eu ajudar alguém ao longo do caminho, melhor ainda! Não afirmo que as respostas são as melhores ou mais eficientes, a menos que seja indicado o contrário. Elas são simplesmente as respostas que meu cérebro e minha intuição criaram para resolver o problema naquele momento.

Repeated String é um dos desafios iniciais com a dificuldade 'EASY'.


Qual o desafio?

Lilah tem uma string, s, de letras minúsculas em inglês que são repetidas infinitamente. Dado um número inteiro, n, encontre e retorne o número de letras a nas primeiras n letras da string infinita de Lilah.

Exemplo

Se a string de Lilah é s = 'abcac' e n = 10, a substring que consideramos é abcacabcac, os 10 primeiros caracteres de sua string infinita. Existem 4 ocorrências da letra a na substring.

O que temos que fazer?

Uma função que retorne um número inteiro de ocorrências da letra a no prefixo de comprimento n na cadeia infinitamente repetitiva.

Parâmetros
  • s = uma string para repetir
  • n = o número de caracteres a considerar

Sample Input

aba
10

Sample Output

7

Solução

function repeatedString(s, n) {
  let amount = parseInt(n / s.length),
    count = s.split('').filter(c => c === 'a').length,
    rest = s.slice(0, n % s.length).split('').filter(c => c === 'a').length;

  return amount * count + rest;
}

Lógica

let amount = parseInt(n / s.length),
    count = s.split('').filter(c => c === 'a').length,
    rest = s.slice(0, n % s.length).split('').filter(c => c === 'a').length;

Toda a lógica está contida nestas três variáveis:

amount é a quantidade de vezes que a string s aparece com base em n da string infinita de Lilah;

count é a quantidade total de a contidos na string s

rest é a quantidade total de a contidos na string resultante do resto da divisão do comprimento determinado n com a string s

Por último, finalizo a função retornando a contagem final. 🖖


🕵Soluções Extras

Outras Linguas que eu falo


💎 Ruby

def repeatedString(s, n)
  amount = n / s.size
  count = s.count('a')
  rest = s.slice(0, n % s.size).count('a')

  amount * count + rest
end

🐍 PYTHON 2 & 3

def repeatedString(s, n):
  amount = n // len(s)
  count = s.count('a')
  rest = s.count('a', 0, n % len(s))

  return amount * count + rest

golang GOLANG

func repeatedString(s string, n int64) int64 {
  var rest, amount, count int64
  rest = n % int64(len(s))
  amount = n / int64(len(s))
  count = int64(strings.Count(s, "a"))
  total := amount * count + int64(strings.Count(s[0:rest], "a"))

  return total
}

scala SCALA

def repeatedString(s: String, n: Long): Long = {
  val rest = n % s.length
  val amount = n / s.length
  val count = s.count(_ == 'a')
  val total = amount * count + s.substring(0, rest.toInt).count(_ == 'a')

  return total
}

javaJAVA 7 & 8

static int repeatedString(String s, long n) {
  long rest = n % s.length();
  long amount = n / s.length();
  long count = s.chars().filter(c -> c == 'a').count();
  long total = amount * count + s.substring(0, (int) rest).chars().filter(c -> c == 'a').count();

  return total;
}

php PHP

function repeatedString($s, $n) {
  $rest = substr_count(substr($s, 0, $n % strlen($s)), "a");
  $amount = intval($n / strlen($s));
  $count = substr_count($s, "a");

  return $amount * $count + $rest;
}
Não afirmo que essas respostas são as melhores ou mais eficientes, elas são simplesmente as que meu cérebro e minha intuição criaram para resolver o problema naquele momento.
Sobre Mim Resumo Profissional Metodologia de Trabalho
Laboratório 💱 FLEX NETWORK / 🏭 💰 EASY BANK / ⏳ 💳 EASY PAY / ⏳ 💼 EASY WORK / ⏳ 👨‍🎓 MASTER CLASS / ⏳ 📲 YOU 2 APP / 🏭 💘 COOLPIDO / ⏳ 🎁 BRX / 🏭
PRINCIPAIS PROJETOS
Insights HACKERRANK #sockMerchant #countingValleys #repeatedString #jumpingOnClouds #leftRotation
Fale Comigo
This PWA was handcrafted with ❤ using Reactjs ➕ Nextjs and deployed on Github 🚀
Conectando-se ao Chrome Cast...