ALLAN AVELARTechnology Solutions
🍻Bonne Nuit,<username class="jsx-3589083454">Visiteur</username>!Bienvenue sur mon site!Appli Web Progressive (PWA)Installer sur votre appareilChromecast Controlsstatus: not playing or showingVolumeDown50%VolumeUpPlayPausestoppedStopResetFullscreenExpandAccès RestreintSe Connecter / S'inscrireSaisissez vos identifiants d'accèsObtenir Accès RestreintDemandez votre Code D'accèsDonnées d'enregistrementVos données personnelles et d'accèsProjets / ServicesVotre historique d'embaucheProduits / TéléchargementsVotre historique d'achatChromecast AppsVos contrats de streamingCrédits / AchatsVotre historique de créditEspace d'AccèsVos accès aux contenus restreintsNotificationsNotifications activées pour vousDéconnecterDéconnectez votre utilisateurContenu disponibleHomeSur moi6Résumé PersonnelVos données personnelles et d'accèsRésumé ProfessionnelUn peu sur ma trajectoireMéthodologie de travailComment je le réaliseMémoires PersonnellesContenu RestreintCurriculum VitaeContenu RestreintVoyages & PhotosContenu RestreintDomaines de Pratique10Toutes mes prestationsRésumé de tous les domainesCTO as a ServiceAvoir un C-Level à mi-tempsCorporate ArchitectureAgility and technology as a philosophySoftware & TechnologyBientôt disponibleFrontend DevelopmentBientôt disponibleBackend DevelopmentBientôt disponibleStrategy & ConsultingBientôt disponiblePlatform & DevSecOpsBientôt disponibleCustomer ExperienceBientôt disponibleAgile CultureBientôt disponibleCentre d'Innovation6Culture de l'innovationAvantages et comment se développerDistributed LT & BlockchainBientôt disponibleData Science & AnalyticsBientôt disponibleCybersecurity PlatformBientôt disponibleIntelligent AutomationBientôt disponibleAI & Machine LearningBientôt disponibleCours & Formation9Distributed LT & BlockchainBientôt disponibleCybersecurity PlatformBientôt disponibleIntelligent AutomationBientôt disponibleFrontend DevelopmentBientôt disponibleBackend DevelopmentBientôt disponiblePlatform & DevSecOpsBientôt disponibleAI & Machine LearningBientôt disponibleProgressive Web AppsBientôt disponibleAgile CultureBientôt disponibleParle MoiPROJETS RÉALISÉSToutes mes projetsRésumé de tous les domainesInstitutions Financière3Banque Santander TottaContenu RestreintBanque Santander BrésilContenu RestreintBanque Safra S.AContenu RestreintWeb3 / Blockchain15Bitcoin (BTC)Contenu RestreintEthereum VM (ETH)Contenu RestreintRipple (XRP)Contenu RestreintHyperledger.orgContenu RestreintInternet ComputerContenu RestreintStarknet (Cairo)Contenu RestreintPolkadot (DOT)Contenu RestreintDeFi DashboardsContenu RestreintToken MarketplacesContenu RestreintCrypto CheckoutsContenu RestreintCold / Hot WalletsContenu RestreintWallet ConnectorsContenu RestreintNon Fungible Tokens (NFT)Contenu RestreintDescentralized Identities (DID)Contenu RestreintDescentralized Organizations (DAO)Contenu RestreintAnciens Projets29TIM | Réponse Vocale InteractiveAdobe 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 TermsTerms and ConditionsPolitique de ConfidentialitéClause de Non-Responsabilité
Utilisateur / PasseBlockchainMot de passe oublié?AccéderPas d'utilisateur? Regarder une démonstration
🚀 Avril 21, 2018 ♻ Mai 17, 2018reading 8 minutes de lecture

Warm-up Challenges ⚡ Sock Merchant

Je publie mes solutions aux défis HackerRank afin d'améliorer mon apprentissage, de renforcer mes connaissances et d'établir une compréhension des concepts abordés. Si j'aide quelqu'un en partageant en cours de route, c'est encore mieux!

Sock Merchant est l'un des défis initiaux avec une difficulté 'EASY'.


Quel est le défi?

John travaille dans un magasin de vêtements. Il a un gros tas de chaussettes qu'il doit trier par couleur pour les vendre. Étant donné une matrice d'entiers représentant la couleur de chaque chaussette, détermine combien de paires de chaussettes avec les couleurs correspondantes existent.

Par exemple, il existe n = 7 chaussettes de couleurs ar = 1, 2, 1, 2, 1, 3, 2. Il y a une paire de couleur 1 et une paire de couleur 2. Il y a trois chaussettes impairs, une de chaque couleur. Le nombre de paires est de 2.

Que devons-nous faire?

Une fonction qui doit renvoyer un entier représentant le nombre de paires de chaussettes correspondantes disponibles.

Paramètres
  • n = le nombre de chaussettes dans la pile
  • ar = les couleurs de chaque chaussette dans une matrice

Sample Input

9
10 20 20 10 10 30 50 10 20

Sample Output

3

Solution

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;
}

Logique

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

J'ai d'abord créé trois variables; socks est un objet qui enregistre le nombre de chaque type de chaussette; count pour compter le nombre de paires de chaussettes; i pour itérer lo forloop;

for loop

J'ai créé une boucle for qui parcourra la matrice de couleurs de la chaussette. Il itérera n fois, ce qui correspond à la quantité donnée de chaussettes sur la pile. for (var i = 0; i < n; i++)

La condition if vérifie si la couleur existe dans notre objet socks: if (ar[i] in socks)
S'il existe, incrémentez le décompte de cette couleur d'une unité: socks[ar[i]] += 1;
Sinon, créez une clé avec cette couleur et réglez-la sur 1. socks[ar[i]] = 1;

Une fois les chaussettes comptées, exécutez une map sur l'objet socks, ainsi un élément sera séparé pour chaque clé: Object.keys(socks).map(el => {

Ensuite je calcule le nombre de paires en divisant le nombre de "chaussettes" d'une même couleur socks[el] / 2 puis appliquez la réponse, deux tildes (bitwise NOT).

J'ai utilisé le bitwise NOT en remplacement de la Math.floor(), car il effectue la même opération beaucoup plus vite 😎, comme vous pouvez vous vérifier et https://jsperf.com/jsfvsbitnot

Enfin, je termine la fonction en renvoyant le compte final. 🖖


🕵Solutions Supplémentaires

Autres langues que je parle


💎 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;
}

Pensée: Celui qui plante des arbres, sachant qu'il ne s’assiéra jamais à leur ombre, a tout au moins commencé à comprendre le sens de la vie!
— Rabindranath Tagore

💡 Latest Insights:

Je ne prétends pas que ces réponses soient les meilleures ou les plus efficaces, ce sont simplement des créations de mon intuition pour résoudre le problème à ce moment-là. Aujourd'hui, je ferais sans doute différemment...
Sur MoiRésumé ProfessionnelMéthodologie de travailMémoires PersonnellesCurriculum VitaePhotos et Voyages
DOMAINES DE PRATIQUECTO as a ServiceCorporate ArchitectureSoftware & TechnologyFrontend DevelopmentBackend DevelopmentStrategy & ConsultingPlatform & DevSecOpsCustomer ExperienceAgile Culture
Centre d'InnovationDistributed LT & BlockchainData Science & AnalyticsCybersecurity PlatformIntelligent AutomationAI & Machine Learning
COURS & FORMATIONBlockchain & Distributed LTCybersecurity PlatformIntelligent AutomationFrontend DevelopmentBackend DevelopmentPlatform & DevSecOpsAI & Machine LearningProgressive Web AppsAgile Culture
Hackathons et Prix
PROJETS RÉALISÉSWEB3 / BLOCKCHAIN 2017 ~ 2023BitcoinEthereumRippleStarknetDIDInternet ComputerMarketplacesNFTHyperledgerWalletsDAODeFi DashboardsCrypto Checkoutsecurity tokensBANQUES 2016 ~ 2021Santander TottaSafra S.A.Santander BrésilAnciens Projets 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
Parle Moi
Clause de Non-ResponsabilitéPolitique de ConfidentialitéTerms and Conditions
Cette PWA a été créée avec ❤ pendant mon temps libre 🤸‍♂️ via des années...