一个跳舞题目的Haskell解答[未完成]

m个舞者和n和领舞者跳舞

规则1:舞者不能和同一个领舞者跳两次以上

规则2:舞者不能跳同一个舞曲一次以上

求出所有组合


import Data.List
{-领舞者-}
type Leader = String
{-舞蹈-}
type Daunce = String
{-跳舞卡片-}
data Card = Card{leader::String
				,daunce::String} deriving (Eq,Show)
{-舞者-}
data Follower = Follower{name::String
						,cards::[Card]}deriving (Eq,Show)

rNoRepeatDaunce::Follower->Card->Bool
rNoRepeatDaunce (Follower _ []) _ = True
rNoRepeatDaunce (Follower _ cards) (Card _ d) = (find (==d) (map daunce cards))==Nothing

rNoEnoughLeader::[Card]->Leader->Bool
rNoEnoughLeader [] _ = True
rNoEnoughLeader cards leader' = let  leaders = map leader cards 
								in 
									let count = sum $ [1 | l<-leaders, l== leader']
									in 
										if count ==2
										then False
										else True
rOneDaunce::Follower->Daunce->Bool
rOneDaunce (Follower _ cards) d = [ 1 | (Card _ daunce) <-cards,daunce==d] == []
							

removeLeader::[Card]->Leader->[Card]
removeLeader [] _ = []
removeLeader  lds l = [  ld | ld@(Card leader daunce) <- lds , l /= leader]

removeCards::[Card]->[Card]->[Card]
removeCards lwd o = filter (\x -> (x `elem` o)==False) lwd

append :: Follower->Card->Follower
append (Follower name cards) t@(Card leadername daunce)= Follower name  (t:cards)
							
tDauncers=["Tom","Peter"]
tLeaders=["Candy"]
tDaunces=["waltz"]

leaderWithDaunceLst = [Card l d | l <- tLeaders,d <- tDaunces]
follows = [Follower name [] | name <-tDauncers]

allDaunce::[Follower]->[Card]
allDaunce [] = []
allDaunce ((Follower _ ds ):xs) = ds ++ (allDaunce xs)

comPair::[Follower]->[Follower]->[Card]->[Follower]
comPair ds o [] = ds++o
comPair ds [] _ = ds
comPair r (f:fx) t@(card@(Card leader daunce):cardList) = if (rNoRepeatDaunce f card) 
													  && (rNoEnoughLeader (cards f) leader) 
													  && (rOneDaunce f daunce)
													 then comPair ((append f card):r) fx (removeLeader cardList leader)
													 else comPair r (f:fx) t
main = do
		a <- return $ comPair[] follows leaderWithDaunceLst
		putStrLn $ "step1:\t" ++ show a
		
		--f1 <- return  $ removeCards leaderWithDaunceLst $ allDaunce a
		b <- return $ comPair [] a leaderWithDaunceLst
		putStrLn $ "step2:\t" ++ show b
		
		f2 <- return  $ removeCards leaderWithDaunceLst $ allDaunce b
		c <- return $ comPair [] b f2
		putStrLn $ "step3:\t" ++ show c


【语音分离】基于平均谐波结构建模的无监督单声道音乐声源分离(Matlab代码实现)内容概要:本文介绍了基于平均谐波结构建模的无监督单声道音乐声源分离方法,并提供了相应的Matlab代码实现。该方法通过对音乐信号中的谐波结构进行建模,利用音源间的频率特征差异,实现对混合音频中不同乐器或人声成分的有效分离。整个过程无需标注数据,属于无监督学习范畴,适用于单通道录音场景下的语音与音乐分离任务。文中强调了算法的可复现性,并附带完整的仿真资源链接,便于读者学习与验证。; 适合人群:具备一定信号处理基础和Matlab编程能力的高校学生、科研人员及从事音频处理、语音识别等相关领域的工程师;尤其适合希望深入理解声源分离原理并进行算法仿真实践的研究者。; 使用场景及目标:①用于音乐音频中人声与伴奏的分离,或不同乐器之间的分离;②支持无监督条件下的语音处理研究,推动盲源分离技术的发展;③作为学术论文复现、课程项目开发或科研原型验证的技术参考。; 阅读建议:建议读者结合提供的Matlab代码与网盘资料同步运行调试,重点关注谐波建模与频谱分解的实现细节,同时可扩展学习盲源分离中的其他方法如独立成分分析(ICA)或非负矩阵分解(NMF),以加深对音频信号分离机制的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值