ALLAN AVELARTechnology Solutions
🍻Boa Noite,<username class="jsx-2086242965">Visitante</username>!Seja bem vindo ao meu website!Progressive Web App (PWA)Instalar em seu dispositivoChromecast Controlsstatus: not playing or showingVolumeDown50%VolumeUpPlayPausestoppedStopResetFullscreenExpandAcesso RestritoConectar / RegistrarEntre com suas credenciais de acessoEspaço de AcessosSolicite seu Código de AcessoDados CadastraisSeus dados pessoais e de acessoProjetos / ServiçosSeu histórico de contrataçõesProdutos / DownloadsSeu histórico de aquisiçõesChromecast AppsSeus contratos de transmissãoCréditos / ComprasSeu saldo e histórico de créditosEspaço de AcessosSeus acessos à conteúdos restritosNotificaçõesNotificações habilitadas para vocêDesconectarDesconectar seu usuárioConteúdos disponíveisHomeSobre Mim6Resumo PessoalUm pouco de como tudo começouResumo ProfissionalUm pouco da minha tragetóriaMetodologia de TrabalhoComo eu faço acontecerMemórias PessoaisConteúdo RestritoCurriculum VitaeConteúdo RestritoViagens & FotosConteúdo RestritoÁreas de Atuação10Todos os meus serviçosResumo de todas as áreasCTO as a ServiceTenha um C-Level de meio períodoCorporate ArchitectureAgilidade e tecnologia como filosofiaSoftware & TechnologyEm desenvolvimentoFrontend DevelopmentEm desenvolvimentoBackend DevelopmentEm desenvolvimentoStrategy & ConsultingEm desenvolvimentoPlatform & DevSecOpsEm desenvolvimentoCustomer ExperienceEm desenvolvimentoAgile CultureEm desenvolvimentoHub de Inovação6Cultura de InovaçãoVantagens e como implementarDistributed LT & BlockchainEm desenvolvimentoData Science & AnalyticsEm desenvolvimentoCybersecurity PlatformEm desenvolvimentoIntelligent AutomationEm desenvolvimentoAI & Machine LearningEm desenvolvimentoCursos & Treinamentos9Distributed LT & BlockchainEm desenvolvimentoCybersecurity PlatformEm desenvolvimentoIntelligent AutomationEm desenvolvimentoFrontend DevelopmentEm desenvolvimentoBackend DevelopmentEm desenvolvimentoPlatform & DevSecOpsEm desenvolvimentoAI & Machine LearningEm desenvolvimentoProgressive Web AppsEm desenvolvimentoAgile CultureEm desenvolvimentoFale ComigoPROJETOS REALIZADOSTodos os meus projetosResumo de todas as áreasInstituições Financeiras3Banco Santander TottaConteúdo RestritoBanco Santander BrasilConteúdo RestritoBanco Safra S.AConteúdo RestritoWeb3 / Blockchain15Bitcoin (BTC)Conteúdo RestritoEthereum VM (ETH)Conteúdo RestritoRipple (XRP)Conteúdo RestritoHyperledger.orgConteúdo RestritoInternet ComputerConteúdo RestritoStarknet (Cairo)Conteúdo RestritoPolkadot (DOT)Conteúdo RestritoDeFi DashboardsConteúdo RestritoToken MarketplacesConteúdo RestritoCrypto CheckoutsConteúdo RestritoCold / Hot WalletsConteúdo RestritoWallet ConnectorsConteúdo RestritoNon Fungible Tokens (NFT)Conteúdo RestritoDescentralized Identities (DID)Conteúdo RestritoDescentralized Organizations (DAO)Conteúdo RestritoProjetos Antigos29TIM | Unidade de Resposta AudívelAdobe Flex, Actionscript 3, Java, SpringACS | Follow EnergyAngularjs, HTML5, CSS3, C#, REST APIACS | Gateway CE50Angularjs, HTML5, CSS3, C, C#, LUASKY | Selinho de NatalActionscript 3, .NET, REST API, JSONIntel | Futuro de PresenteActionscript 3, .NET, REST API, JSONNestlé | Baú de DiversõesAS 3, .NET, REST, Facebook OpengraphMarlboro | Red RacingAdobe Flash, Actionscript 3, JSONHP | Cartucho PirataAdobe Flash, Actionscript 3, REST APIHP | Youtube StoreAdobe Flash, AS3, YouTube Data APICasas Bahia | BahianinhoActionscript 3, .NET, REST API, JSONAdria | TortinhasAdobe Flash, Actionscript 3, PHPUniverso Online | UOL FinanceActionscript 3, REST API, JSONUniverso Online | UOL MaisActionscript 3, REST API, JSONChevrolet | CaptivaActionscript 3, PHP, MYSQLGafisa | Edifício ColaborativoAdobe Flash, Actionscript 3Pão de Açucar | Sommeliers ClubAdobe Flash, Actionscript 3Pão de Açucar | Desafio ColeçõesAdobe Flash, Actionscript 3Antarctica | Circuito OriginalMacromedia Flash, Actionscript 2, XMLNestlé | Nescau 2.0Macromedia Flash, Actionscript 2, XMLSchin RefrigerantesActionscript 2, FMS 2, PHP, MYSQLMercedes-Benz | SLK 2005Actionscript 2, XMLMercedes-Benz | Classe CActionscript 2, XMLMercedes-Benz | Classe AActionscript 2, XMLMercedes Benz | SprinterActionscript 2, XMLMercedes Benz | Motores EletrônicosActionscript 2, XMLBanda NX ZeroMacromedia Flash, Actionscript 2Lew´lara TBWAActionscript 2, PHP, MYSQLMaison CriolaActionscript 2, PHP, MYSQLBondage MusicActionscript 2, PHP, MYSQLBlog PostsHackerRank5Sock MerchantWarm-Up ChallengesCounting ValleysWarm-Up ChallengesRepeated StringWarm-Up ChallengesJumping On CloudsWarm-Up ChallengesLeft RotationWarm-Up ChallengesLegal TermsTermos e CondiçõesPolítica de PrivacidadeIsenção de Responsabilidade
Usuário / SenhaBlockchainEsqueceu sua senha?EntrarNão tem uma conta? Veja uma demostração!
🚀 Fevereiro 21, 2018 ♻ Outubro 17, 2018reading 8 minutos de leitura

Warm-up Challenges ⚡ Sock Merchant

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 compartilhando ao longo do caminho, melhor ainda!

Sock Merchant é um dos desafios iniciais com a dificuldade 'EASY'


Qual o desafio?

John trabalha em uma loja de roupas. Ele tem uma grande pilha de meias que ele deve separar por cor para venda. Dada uma matriz de inteiros representando a cor de cada meia, determine quantos pares de meias com as cores correspondentes existem.

Por exemplo, há n = 7 meias com cores ar = 1, 2, 1, 2, 1, 3, 2. Há um par de cores 1 e um de cor 2. Existem três meias ímpares, uma de cada cor. O número de pares é 2.

O que temos que fazer?

Uma função que deve retornar um inteiro representando o número de pares correspondentes de meias disponíveis.

Parâmetros
  • n = o número de meias na pilha
  • ar = as cores de cada meia em uma matriz

Sample Input

9
10 20 20 10 10 30 50 10 20

Sample Output

3

Solução

function sockMerchant(n, ar) {

	let socks = {},
		count = 0,
		i = 0;

	for (i = 0; i < n; i++) {
		if (ar[i] in socks) {
			socks[ar[i]] += 1;
		} else {
			socks[ar[i]] = 1;
		}
	}

	Object.keys(socks).map(el => {
		count += ~~(socks[el] / 2);
	})

	return count;
}

Lógica

let socks = {},
	count = 0,
	i = 0;

Primeiro criei três variáveis; socks é um objeto que registra a contagem de cada tipo de meia; count para manter a contagem do número de pares de meias; i para iterar o forloop;

for loop

Criei um loop for que percorrerá a matriz de cores de meias. Vai iterar n vezes, que é a quantidade dada de meias na pilha. for (var i = 0; i < n; i++)

A condição if verifica se a cor existe em nosso objeto socks: if (ar[i] in socks)
Se existir, incremente a contagem dessa cor em um: socks[ar[i]] += 1;
Se não, crie uma chave com essa cor e a defina como 1. socks[ar[i]] = 1;

Depois que as meias são contadas, executar um map no objeto socks, assim será separado para cada chave um elemento: Object.keys(socks).map(el => {

Em seguida, calculo o número de pares dividindo a quantidade de "meias" de uma cor socks[el] / 2 e depois aplico a resposta, dois tils (bitwise NOT).

Utilizei o bitwise NOT como um substituto para o Math.floor(), pois ele executa a mesma operação muito mais rápido 😎, como você pode conferir em https://jsperf.com/jsfvsbitnot

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


🕵Soluções Extras

Outras línguas que eu falo


💎 Ruby

def sockMerchant(n, ar)
	socks = Hash.new { | hash, key | Hash[key] = 0 }
	count = 0

	ar.each { | color | socks[color] += 1 }
	socks.each_value { | el | count += (el / 2) }

	count
end

🐍 PYTHON 2 & 3

def sockMerchant(n, ar):
	socks = collections.Counter(ar)
	count = 0

	for el in socks:
		count += socks[el] // 2
			
	return count

golang GOLANG

func sockMerchant(n int32, ar []int32) int32 {
	var count, i int32

	socks := make(map[int32]int32)
	for i = 0; i < n; i++ {
		socks[ar[i]]++
	}
	for _, el := range socks {
		count += (el / 2)
	}
	return count
}

scala SCALA

def sockMerchant(n: Int, ar: Array[Int]): Int = {
	val socks = ar.groupBy(c => c)
	val pairs = socks.map(el => el._2.length / 2)
	val count = pairs.sum
	return count;
}

javaJAVA 7 & 8

static int sockMerchant(int n, int[] ar) {
	HashSet<Integer> socks = new HashSet<Integer>();
	int count = 0;
					
	for (Integer i:ar) {
		if (socks.contains(i))
			socks.remove(i);
			count++;
		else
			socks.add(i);
	}
	return count;
}

php PHP

function sockMerchant($n, $ar) {
	$socks = array_count_values($ar);
	$count = 0;

	foreach ($socks as $el) {
		$count += intdiv($el, 2);
	}
	return $count;
}

Pensamento: Ter fé é assinar uma folha em branco e deixar que Deus nela escreva o que quiser.
Santo Agostinho

💡 Últimos Insights:

Não afirmo que essas respostas são as melhores ou mais eficientes, elas são simplesmente criações da minha mente para resolver o problema naquele momento. Provavelmente hoje eu faria diferente...
Sobre MimResumo ProfissionalMetodologia de TrabalhoMemórias PessoaisCurriculum VitaeFotos & Viagens
ÁREAS DE ATUAÇÃOCTO as a ServiceCorporate ArchitectureSoftware & TechnologyFrontend DevelopmentBackend DevelopmentStrategy & ConsultingPlatform & DevSecOpsCustomer ExperienceAgile Culture
Hub de InovaçãoDistributed LT & BlockchainData Science & AnalyticsCybersecurity PlatformIntelligent AutomationAI & Machine Learning
CURSOS & TREINAMENTOSBlockchain & Distributed LTCybersecurity PlatformIntelligent AutomationFrontend DevelopmentBackend DevelopmentPlatform & DevSecOpsAI & Machine LearningProgressive Web AppsAgile Culture
Hackathons & Prêmios
PROJETOS REALIZADOSWEB3 / BLOCKCHAIN 2017 ~ 2024BitcoinEthereumRippleStarknetDIDInternet ComputerMarketplacesNFTHyperledgerWalletsDAODeFi DashboardsCrypto Checkoutsecurity tokensBANCOS 2016 ~ 2021Santander TottaSafra S.A.Santander BrasilProjetos Antigos 2000 ~ 2016SKYIntelACSNinho SoleilHP YouStoreHP Cartucho PirataMarlboro RacingMercedes BenzTortinhas AdriaChevrolet CaptivaGPA Sommeliers ClubUOL FinanceGafisaSprinterCasas BahiaJVCLew´laraPão de AçucarSchin RefrigerantesNescau 2.0PapaizTV CulturaSpacekidsBondage MusicMaison CriolaAntarctica OriginalNX ZeroSLK 2005Classe AClasse CPetrobrasBraskemNíveaJohnson & JohnsonAbyaraTIM (URA)NestléUOL
Blog PostsHACKERRANK 2017 ~ 2018#sockMerchant#countingValleys#repeatedstring#jumpingOnClouds#leftRotation
Fale Comigo
Isenção de ResponsabilidadePolítica de PrivacidadeTermos e Condições
Este PWA foi construído com ❤ no meu tempo livre 🤸‍♂️ através dos anos...