Part 1

I know this is wrong, and yet - here goes the brute force attempt

blink<-function(n,r){
  while(r>0){
    n<-sapply(n,function(x){
      if(x==0){y<-1
      }else if(nchar(x)%%2==0){
        d<-nchar(x)/2
        y<-c(x%/%(10^d),x%%(10^d))
      }else{y<-x*2024}
      y})
    ### needed because splitting in two stones turns it
    ### into a matrix for reasons I do not understand  this stops that.
    n<-unlist(n)
    r<-r-1}
  length(n)}
part1<-blink(c(125,17),25)
part1
[1] 55312

Part 2

damn lanternfish

blinkinglanternfish<-function(r,n){
  ### first, change n into a df
    n<-as.data.frame(cbind(n,rep(1,length(n))))
    colnames(n)<-c("val","cnt")
    while(r>0){
    ### create a blank dataframe
    nxt<-as.data.frame(matrix(nrow=0,ncol=2))
    ### apply the rule to each row in the original frame and put the output in the new frame
    for(i in 1:nrow(n)){
      if(n$val[i]==0){
        nxt<-rbind(nxt,c(1,n$cnt[i]))
      }else if(nchar(n$val[i])%%2==0){
        d<-nchar(n$val[i])/2
        a<-n$val[i]%/%(10^d)
        b<-n$val[i]%%(10^d)
        nxt<-rbind(nxt,c(a,n$cnt[i]))
        nxt<-rbind(nxt,c(b,n$cnt[i]))
      }else{
        nxt<-rbind(nxt,c(n$val[i]*2024,n$cnt[i]))}
    ### update the column names
    colnames(nxt)<-c("val","cnt")}
    ### summarize the columns so each value has the number of times that value appears on a stone.
    n<-nxt%>% group_by(val)%>%summarise(cnt=sum(cnt))
    r<-r-1}
stones<-sum(n$cnt)
stones}
part2<-blinkinglanternfish(75,c(125,17))
part2
[1] 65601038650482

65601038650482

LS0tDQp0aXRsZTogIkRheSAxMSBOb3RlYm9vayINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGNvbGxlY3Rpb25zKQ0Kb3B0aW9ucyhzY2lwZW4gPSA5OTkpDQpgYGANCg0KIyMgUGFydCAxDQpJIGtub3cgdGhpcyBpcyB3cm9uZywgYW5kIHlldCAtIGhlcmUgZ29lcyB0aGUgYnJ1dGUgZm9yY2UgYXR0ZW1wdA0KDQpgYGB7cn0NCmJsaW5rPC1mdW5jdGlvbihuLHIpew0KICB3aGlsZShyPjApew0KICAgIG48LXNhcHBseShuLGZ1bmN0aW9uKHgpew0KICAgICAgaWYoeD09MCl7eTwtMQ0KICAgICAgfWVsc2UgaWYobmNoYXIoeCklJTI9PTApew0KICAgICAgICBkPC1uY2hhcih4KS8yDQogICAgICAgIHk8LWMoeCUvJSgxMF5kKSx4JSUoMTBeZCkpDQogICAgICB9ZWxzZXt5PC14KjIwMjR9DQogICAgICB5fSkNCiAgICAjIyMgbmVlZGVkIGJlY2F1c2Ugc3BsaXR0aW5nIGluIHR3byBzdG9uZXMgdHVybnMgaXQNCiAgICAjIyMgaW50byBhIG1hdHJpeCBmb3IgcmVhc29ucyBJIGRvIG5vdCB1bmRlcnN0YW5kICB0aGlzIHN0b3BzIHRoYXQuDQogICAgbjwtdW5saXN0KG4pDQogICAgcjwtci0xfQ0KICBsZW5ndGgobil9DQpgYGANCg0KDQpgYGB7cn0NCnBhcnQxPC1ibGluayhjKDEyNSwxNyksMjUpDQpwYXJ0MQ0KYGBgDQoNCiMjIFBhcnQgMg0KDQpkYW1uIGxhbnRlcm5maXNoDQoNCmBgYHtyfQ0KYmxpbmtpbmdsYW50ZXJuZmlzaDwtZnVuY3Rpb24ocixuKXsNCiAgIyMjIGZpcnN0LCBjaGFuZ2UgbiBpbnRvIGEgZGYNCiAgICBuPC1hcy5kYXRhLmZyYW1lKGNiaW5kKG4scmVwKDEsbGVuZ3RoKG4pKSkpDQogICAgY29sbmFtZXMobik8LWMoInZhbCIsImNudCIpDQogICAgd2hpbGUocj4wKXsNCiAgICAjIyMgY3JlYXRlIGEgYmxhbmsgZGF0YWZyYW1lDQogICAgbnh0PC1hcy5kYXRhLmZyYW1lKG1hdHJpeChucm93PTAsbmNvbD0yKSkNCiAgICAjIyMgYXBwbHkgdGhlIHJ1bGUgdG8gZWFjaCByb3cgaW4gdGhlIG9yaWdpbmFsIGZyYW1lIGFuZCBwdXQgdGhlIG91dHB1dCBpbiB0aGUgbmV3IGZyYW1lDQogICAgZm9yKGkgaW4gMTpucm93KG4pKXsNCiAgICAgIGlmKG4kdmFsW2ldPT0wKXsNCiAgICAgICAgbnh0PC1yYmluZChueHQsYygxLG4kY250W2ldKSkNCiAgICAgIH1lbHNlIGlmKG5jaGFyKG4kdmFsW2ldKSUlMj09MCl7DQogICAgICAgIGQ8LW5jaGFyKG4kdmFsW2ldKS8yDQogICAgICAgIGE8LW4kdmFsW2ldJS8lKDEwXmQpDQogICAgICAgIGI8LW4kdmFsW2ldJSUoMTBeZCkNCiAgICAgICAgbnh0PC1yYmluZChueHQsYyhhLG4kY250W2ldKSkNCiAgICAgICAgbnh0PC1yYmluZChueHQsYyhiLG4kY250W2ldKSkNCiAgICAgIH1lbHNlew0KICAgICAgICBueHQ8LXJiaW5kKG54dCxjKG4kdmFsW2ldKjIwMjQsbiRjbnRbaV0pKX0NCiAgICAjIyMgdXBkYXRlIHRoZSBjb2x1bW4gbmFtZXMNCiAgICBjb2xuYW1lcyhueHQpPC1jKCJ2YWwiLCJjbnQiKX0NCiAgICAjIyMgc3VtbWFyaXplIHRoZSBjb2x1bW5zIHNvIGVhY2ggdmFsdWUgaGFzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB2YWx1ZSBhcHBlYXJzIG9uIGEgc3RvbmUuDQogICAgbjwtbnh0JT4lIGdyb3VwX2J5KHZhbCklPiVzdW1tYXJpc2UoY250PXN1bShjbnQpKQ0KICAgIHI8LXItMX0NCnN0b25lczwtc3VtKG4kY250KQ0Kc3RvbmVzfQ0KICANCiAgDQpgYGANCg0KYGBge3J9DQpwYXJ0MjwtYmxpbmtpbmdsYW50ZXJuZmlzaCg3NSxjKDEyNSwxNykpDQpwYXJ0Mg0KYGBgDQoNCjY1NjAxMDM4NjUwNDgy