s<-c("CLRHMKMTGYYIAEVDKIPFYNNLAGVAWTIGGRKFWQRQYLTKGSFAKETYGYFGIFGKSTPFLLWYKWPMGGILPHPYNPRRHAFKDGIYMFHNAPDFIHGTKPKVFFRQVSRDMARQIMLSHEDLHMWLMIMQNYVVCITFAEKDWEFSGTCWMKTMFWYLHFHCIRWKNDYTIGWNQLLRFFDPEINMCVDMLCYSCIQLIPANFYAASMTGKISKGAQFTSCGEDCYCDKFIHMKIFWGYDPQGDLGMYGVNANEKHGLYLCMPLALVYCQHQRFIGMVSGPMDAPCKYLADKDLQKYIYDISVKEMSVYLLCLGHIKDSGILYGNRLLKKERVAGTMCTMQFDIFDMSYADCHNNDKTRNRGLSTLKRSWKQYVYIEFGTVPRWVQHATWDLYTNRFFAIMDEFEFLKLRAEKHWFVDRMWPCMLNIMWSMQMCCVIQFRRCIEMMQCYAFGFEIVWATMRFKRNQAAMWHMYRRYIPCMDYWDCNGANAAEFCDERESLFKREMLFARAPSCDIEPPTLAQWMFRAVMMLKIFFWQDIHYACTPDHDEYLWINKSWRMTSDVCFVHWDFWNTGCIYAAPCENKTVPWAKYLYASASYNWEDSCMCWLQWLYTRFRNFENEDLPETPACAKAMNYNWALTQVVYYCKILKRQNTMLGAEVCKTLYTDADPHGLNDLQMQAHCDKWSFNSIAEDRCCPNHLFAQHYDCCQVSRGIFREYSEHWGFCKHGEKCLRLTQLTTCQPTTAGRGTEKVLTQSWWVCNNFWELCALSACHLMQYPYECYTKRRHWAEAISLCGQYKSMTQYWLRYNLNVQQQLPAWGKWAAIEIVEFNMCPWHHKFCVFPPRWYWNHKKWYVFIERWWHSNNLP")
s<-strsplit(s, "")[[1]]

t<-c("CLRLMKMTGYYIAEVPFYNNDRWLHCASQAWTIGGRKFWERQDHNEMRCDETGIFGKSTPFLLWMSGLDMFGWCEKPKTIHVFKDGIYMFHNAGTKKFCHWIKQTAAWWEHFRQVSRDMARQNMHYFFNALTLSWTCCITFAFLEKMWEFSGMCWMKTFWYLHFHCIGTFNINQWLRFFDPETNMHVDMLCWAASSIALIPARFTCCMAASMTGNLQEISGGAEFTSMGAAIKFADCYCDKFWGYDPQGKMGCMSHWLCMYGVNSNEMPLALVYCRVHNHQRKFISHHDYEPFAPCKIQLPDKNHFQSIQLQYCRNRQIKKYIYDISVKEMSGYLAAFRDNMCLGHIKMSEMHVQYMLCILYLNRLLKKERVEGGMCTMQQEDIFDMSNHHIYKTRMKNKKRSWKQYVYIEFYTVVQRPTRRWVQHATWDLYENRFFAIMLEEFCWFLFLKLRAEKHWFQDRMWWDWRCMLNICVIQLRLCIEMMQCEIVWTELFTTMRFHMYRRYIPYWDGYTNGANADEPESLFKREMLFACAPSCDTEPKYIEIKAQVSESSQFRAVMMGHMNIYAYLKIFSWTFLRRIHYDFKLCTLSINKSWRMTSDVCFWNTGCIYAAPHLEHHFADLVFWYLYAFASYNWEDSCMCWLGWFENIPYWWDLPMNYAFKYYCKILKSQNTMLGGNFSDEVCKTLIQKYYVAADPHGLNDIQLAEDTALCGAHCDKWSFNLIHLFVQHYDCCQVSRGIFRPLQNLLYRLYSEHTGLCKWGEKCLRLTQLTTCQEVHAAIYTTAGRAMMCFEKMLTQSWWVCNNPWELCALSACHLMQDTRKNYECYTKRRHWAQEYKSMWQYNLNVQDQLPAIKMGKDEDVLPEIVPFNMRPWHFENACNKYMKFCVFPPRWYWNCKKKLIERWWHSNNQP")
t<-strsplit(t, "")[[1]]
#Blosum62 matrix:
read_csv = read.csv('/Users/ozlemtuna/Downloads/blosum62.csv')
colnames(read_csv) = c("A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V","B","Z","X")
str(read_csv)
## 'data.frame':    23 obs. of  23 variables:
##  $ A: int  4 -1 -2 -2 0 -1 -1 0 -2 -1 ...
##  $ R: int  -1 5 0 -2 -3 1 0 -2 0 -3 ...
##  $ N: int  -2 0 6 1 -3 0 0 0 1 -3 ...
##  $ D: int  -2 -2 1 6 -3 0 2 -1 -1 -3 ...
##  $ C: int  0 -3 -3 -3 9 -3 -4 -3 -3 -1 ...
##  $ Q: int  -1 1 0 0 -3 5 2 -2 0 -3 ...
##  $ E: int  -1 0 0 2 -4 2 5 -2 0 -3 ...
##  $ G: int  0 -2 0 -1 -3 -2 -2 6 -2 -4 ...
##  $ H: int  -2 0 1 -1 -3 0 0 -2 8 -3 ...
##  $ I: int  -1 -3 -3 -3 -1 -3 -3 -4 -3 4 ...
##  $ L: int  -1 -2 -3 -4 -1 -2 -3 -4 -3 2 ...
##  $ K: int  -1 2 0 -1 -3 1 1 -2 -1 -3 ...
##  $ M: int  -1 -1 -2 -3 -1 0 -2 -3 -2 1 ...
##  $ F: int  -2 -3 -3 -3 -2 -3 -3 -3 -1 0 ...
##  $ P: int  -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 ...
##  $ S: int  1 -1 1 0 -1 0 0 0 -1 -2 ...
##  $ T: int  0 -1 0 -1 -1 -1 -1 -2 -2 -1 ...
##  $ W: int  -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 ...
##  $ Y: int  -2 -2 -2 -3 -2 -1 -2 -3 2 -1 ...
##  $ V: int  0 -3 -3 -3 -1 -2 -2 -3 -3 3 ...
##  $ B: int  -2 -1 3 4 -3 0 1 -1 0 -3 ...
##  $ Z: int  -1 0 0 1 -3 3 4 -2 0 -3 ...
##  $ X: int  0 -1 -1 -1 -2 -1 -1 -1 -1 -1 ...
mat<-as.matrix(read_csv)
# Define the BLOSUM62 scoring matrixmat <- BLOSUM62
mat
##    A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V  B  Z  X
## A  4 -1 -2 -2  0 -1 -1  0 -2 -1 -1 -1 -1 -2 -1  1  0 -3 -2  0 -2 -1  0
## R -1  5  0 -2 -3  1  0 -2  0 -3 -2  2 -1 -3 -2 -1 -1 -3 -2 -3 -1  0 -1
## N -2  0  6  1 -3  0  0  0  1 -3 -3  0 -2 -3 -2  1  0 -4 -2 -3  3  0 -1
## D -2 -2  1  6 -3  0  2 -1 -1 -3 -4 -1 -3 -3 -1  0 -1 -4 -3 -3  4  1 -1
## C  0 -3 -3 -3  9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2
## Q -1  1  0  0 -3  5  2 -2  0 -3 -2  1  0 -3 -1  0 -1 -2 -1 -2  0  3 -1
## E -1  0  0  2 -4  2  5 -2  0 -3 -3  1 -2 -3 -1  0 -1 -3 -2 -2  1  4 -1
## G  0 -2  0 -1 -3 -2 -2  6 -2 -4 -4 -2 -3 -3 -2  0 -2 -2 -3 -3 -1 -2 -1
## H -2  0  1 -1 -3  0  0 -2  8 -3 -3 -1 -2 -1 -2 -1 -2 -2  2 -3  0  0 -1
## I -1 -3 -3 -3 -1 -3 -3 -4 -3  4  2 -3  1  0 -3 -2 -1 -3 -1  3 -3 -3 -1
## L -1 -2 -3 -4 -1 -2 -3 -4 -3  2  4 -2  2  0 -3 -2 -1 -2 -1  1 -4 -3 -1
## K -1  2  0 -1 -3  1  1 -2 -1 -3 -2  5 -1 -3 -1  0 -1 -3 -2 -2  0  1 -1
## M -1 -1 -2 -3 -1  0 -2 -3 -2  1  2 -1  5  0 -2 -1 -1 -1 -1  1 -3 -1 -1
## F -2 -3 -3 -3 -2 -3 -3 -3 -1  0  0 -3  0  6 -4 -2 -2  1  3 -1 -3 -3 -1
## P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4  7 -1 -1 -4 -3 -2 -2 -1 -2
## S  1 -1  1  0 -1  0  0  0 -1 -2 -2  0 -1 -2 -1  4  1 -3 -2 -2  0  0  0
## T  0 -1  0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1  1  5 -2 -2  0 -1 -1  0
## W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1  1 -4 -3 -2 11  2 -3 -4 -3 -2
## Y -2 -2 -2 -3 -2 -1 -2 -3  2 -1 -1 -2 -1  3 -3 -2 -2  2  7 -1 -3 -2 -1
## V  0 -3 -3 -3 -1 -2 -2 -3 -3  3  1 -2  1 -1 -2 -2  0 -3 -1  4 -3 -2 -1
## B -2 -1  3  4 -3  0  1 -1  0 -3 -4  0 -3 -3 -2  0 -1 -4 -3 -3  4  1 -1
## Z -1  0  0  1 -3  3  4 -2  0 -3 -3  1 -1 -3 -1  0 -1 -3 -2 -2  1  4 -1
## X  0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2  0  0 -2 -1 -1 -1 -1 -1
# Define the linear gap penalty
gap_penalty <- -5
n <- length(s)
m <- length(t)
score <- matrix(0, n+1, m+1)
max_score <- score[n+1, m+1]
#Puan matrisini sıfırlarla başlaması
#İlk satırı ve sütunu boşluk cezalarıyla doldurulması
score[1,] <- seq(0, by=gap_penalty, length.out=m+1)
score[,1] <- seq(0, by=gap_penalty, length.out=n+1)

#Yineleme ilişkisini kullanarak matrisin geri kalanını doldurulması
for (i in 2:(n+1)) {
  for (j in 2:(m+1)) {
    match_score <- mat[s[i-1], t[j-1]] 
    score[i,j] <- max(
      score[i-1,j-1] + match_score, 
      score[i-1,j] + gap_penalty, 
      score[i,j-1] + gap_penalty 
    )
  }
}

max_score <- score[n+1, m+1]
alignment<-function(s,t) {
n <- length(s)
m <- length(t)
#hizalamalar boşluk cezalarıyla başlayıp bitebilir bunu hesaba katmak için satır ve sütunlarda 1 boşluk daha olacak şekilde matris oluşturulur
score <- matrix(0, n+1, m+1) 

# İlk satırı ve sütunu boşluk cezalarıyla doldurun
score[1,] <- seq(0, by=gap_penalty, length.out=m+1)
score[,1] <- seq(0, by=gap_penalty, length.out=n+1)

#Yineleme ilişkisini kullanarak matrisin geri kalanını doldurun
for (i in 2:(n+1)) { #başlangıçlar boşluk penaltıları olduğundan
  for (j in 2:(m+1)) {
    match_score <- mat[s[i-1], t[j-1]] 
    score[i,j] <- max( #en yüksek puana sahip "olası puanı" seçer
      #olası tüm sonuçları hesaplanması      
      score[i-1,j-1] + match_score, 
      #eşleşme veya uyumsuzluk burada gösterilir
      #matrisi olasılıklara göre doldurulması ve puan matrisine yazılacak maksimum değeri alınması
      score[i-1,j] + gap_penalty, 
      score[i,j-1] + gap_penalty 
    )
  }
}
#Matrisin sağ alt öğesi: en yüksek hizalama puanı
max_score <- score[n+1, m+1]
#return((max_score))
return(print(paste("The highest alignment score is", max_score)))
}
print(max_score)
## [1] 1953
alignment(s,t)
## [1] "The highest alignment score is 1953"