input<-read_lines("Day13Sample.txt")

### find how many prizes
p<-c(0,which(input==""))+1
### pull numbers out of the input
inputnumbers<-lapply(input,function(x){as.numeric(unlist(str_extract_all(x,"\\d+")))})
### set up machines in an easy way to solve them
machines<-list()
for(i in 1:length(p)){
  a<-rbind(c(inputnumbers[[p[i]]][1],inputnumbers[[p[i]+1]][1]),
           c(inputnumbers[[p[i]]][2],inputnumbers[[p[i]+1]][2]))
  b<-inputnumbers[[p[i]+2]]
  prmach<-list(a,b)
  machines<-c(machines,list(prmach))}

This moves:

Button A: X+94, Y+34
Button B: X+22, Y+67
Prize: X=8400, Y=5400

to

\[\left(\begin{array}{cc} 94 & 22\\ 34 & 67 \end{array}\right) \left(\begin{array}{cc} 8400\\5400 \end{array}\right)\]

so that it can be put into solve().\ Solve() did not work, but the formatting did.

Part 1

Determinants ftw.

getprizes<-function(m){
  d<-sapply(m,function(x){
   ab<-x[[1]]
   ab<-(ab[1,1]*ab[2,2])-(ab[2,1]*ab[1,2])
   ab})
  dx<-sapply(m,function(x){
    xm<-cbind(x[[2]],x[[1]][,2])
    xm<-(xm[1,1]*xm[2,2])-(xm[2,1]*xm[1,2])
    xm})
  dy<-sapply(m,function(x){
    ym<-cbind(x[[1]][,1],x[[2]])
    ym<-(ym[1,1]*ym[2,2])-(ym[2,1]*ym[1,2])
    ym})
  tokens<-0
  ## find a
  a<-dx%/%d
  aa<-dx/d
  ## find b
  b<-dy%/%d
  bb<-dy/d
  ## filter out the ones that aren't integers and are over 100
  ok<-intersect(intersect(intersect(which(a==aa),which(b==bb)),which(a<=100)),which(b<=100))
  ### tokens = 3*a+b
  tokens<-sum(3*a[ok]+b[ok])
  tokens}
getprizes(machines)
[1] 480

Part 2

Same as part 1, but add 10000000000000 to the solution

farawayprizes<-function(m){
  d<-sapply(m,function(x){
   ab<-x[[1]]
   ab<-(ab[1,1]*ab[2,2])-(ab[2,1]*ab[1,2])
   ab})
  dx<-sapply(m,function(x){
    xm<-cbind(x[[2]]+10000000000000,x[[1]][,2])
    xm<-(xm[1,1]*xm[2,2])-(xm[2,1]*xm[1,2])
    xm})
  dy<-sapply(m,function(x){
    ym<-cbind(x[[1]][,1],x[[2]]+10000000000000)
    ym<-(ym[1,1]*ym[2,2])-(ym[2,1]*ym[1,2])
    ym})
  tokens<-0
  a<-dx%/%d
  aa<-dx/d
  b<-dy%/%d
  bb<-dy/d
  ok<-intersect(which(a==aa),which(b==bb))
  tokens<-sum(3*a[ok]+b[ok])
  tokens}
farawayprizes(machines)
[1] 875318608908
LS0tDQp0aXRsZTogIkRheSAxMyBOb3RlYm9vayINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzdHJpbmdyKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShjb2xsZWN0aW9ucykNCm9wdGlvbnMoc2NpcGVuID0gOTk5KQ0KYGBgDQoNCmBgYHtyfQ0KaW5wdXQ8LXJlYWRfbGluZXMoIkRheTEzU2FtcGxlLnR4dCIpDQoNCiMjIyBmaW5kIGhvdyBtYW55IHByaXplcw0KcDwtYygwLHdoaWNoKGlucHV0PT0iIikpKzENCiMjIyBwdWxsIG51bWJlcnMgb3V0IG9mIHRoZSBpbnB1dA0KaW5wdXRudW1iZXJzPC1sYXBwbHkoaW5wdXQsZnVuY3Rpb24oeCl7YXMubnVtZXJpYyh1bmxpc3Qoc3RyX2V4dHJhY3RfYWxsKHgsIlxcZCsiKSkpfSkNCiMjIyBzZXQgdXAgbWFjaGluZXMgaW4gYW4gZWFzeSB3YXkgdG8gc29sdmUgdGhlbQ0KbWFjaGluZXM8LWxpc3QoKQ0KZm9yKGkgaW4gMTpsZW5ndGgocCkpew0KICBhPC1yYmluZChjKGlucHV0bnVtYmVyc1tbcFtpXV1dWzFdLGlucHV0bnVtYmVyc1tbcFtpXSsxXV1bMV0pLA0KICAgICAgICAgICBjKGlucHV0bnVtYmVyc1tbcFtpXV1dWzJdLGlucHV0bnVtYmVyc1tbcFtpXSsxXV1bMl0pKQ0KICBiPC1pbnB1dG51bWJlcnNbW3BbaV0rMl1dDQogIHBybWFjaDwtbGlzdChhLGIpDQogIG1hY2hpbmVzPC1jKG1hY2hpbmVzLGxpc3QocHJtYWNoKSl9DQoNCmBgYA0KDQpUaGlzIG1vdmVzOg0KYGBgDQpCdXR0b24gQTogWCs5NCwgWSszNA0KQnV0dG9uIEI6IFgrMjIsIFkrNjcNClByaXplOiBYPTg0MDAsIFk9NTQwMA0KYGBgDQp0bw0KDQpcW1xsZWZ0KFxiZWdpbnthcnJheX17Y2N9IA0KOTQgJiAyMlxcDQozNCAmIDY3DQpcZW5ke2FycmF5fVxyaWdodCkNClxsZWZ0KFxiZWdpbnthcnJheX17Y2N9IA0KODQwMFxcNTQwMA0KXGVuZHthcnJheX1ccmlnaHQpXF0NCg0KIA0Kc28gdGhhdCBpdCBjYW4gYmUgcHV0IGludG8gc29sdmUoKS5cXA0KU29sdmUoKSBkaWQgbm90IHdvcmssIGJ1dCB0aGUgZm9ybWF0dGluZyBkaWQuDQoNCiMjIFBhcnQgMQ0KDQpEZXRlcm1pbmFudHMgZnR3Lg0KDQpgYGB7cn0NCmdldHByaXplczwtZnVuY3Rpb24obSl7DQogIGQ8LXNhcHBseShtLGZ1bmN0aW9uKHgpew0KICAgYWI8LXhbWzFdXQ0KICAgYWI8LShhYlsxLDFdKmFiWzIsMl0pLShhYlsyLDFdKmFiWzEsMl0pDQogICBhYn0pDQogIGR4PC1zYXBwbHkobSxmdW5jdGlvbih4KXsNCiAgICB4bTwtY2JpbmQoeFtbMl1dLHhbWzFdXVssMl0pDQogICAgeG08LSh4bVsxLDFdKnhtWzIsMl0pLSh4bVsyLDFdKnhtWzEsMl0pDQogICAgeG19KQ0KICBkeTwtc2FwcGx5KG0sZnVuY3Rpb24oeCl7DQogICAgeW08LWNiaW5kKHhbWzFdXVssMV0seFtbMl1dKQ0KICAgIHltPC0oeW1bMSwxXSp5bVsyLDJdKS0oeW1bMiwxXSp5bVsxLDJdKQ0KICAgIHltfSkNCiAgdG9rZW5zPC0wDQogICMjIGZpbmQgYQ0KICBhPC1keCUvJWQNCiAgYWE8LWR4L2QNCiAgIyMgZmluZCBiDQogIGI8LWR5JS8lZA0KICBiYjwtZHkvZA0KICAjIyBmaWx0ZXIgb3V0IHRoZSBvbmVzIHRoYXQgYXJlbid0IGludGVnZXJzIGFuZCBhcmUgb3ZlciAxMDANCiAgb2s8LWludGVyc2VjdChpbnRlcnNlY3QoaW50ZXJzZWN0KHdoaWNoKGE9PWFhKSx3aGljaChiPT1iYikpLHdoaWNoKGE8PTEwMCkpLHdoaWNoKGI8PTEwMCkpDQogICMjIyB0b2tlbnMgPSAzKmErYg0KICB0b2tlbnM8LXN1bSgzKmFbb2tdK2Jbb2tdKQ0KICB0b2tlbnN9DQogIA0KYGBgDQoNCmBgYHtyfQ0KZ2V0cHJpemVzKG1hY2hpbmVzKQ0KYGBgDQojIyBQYXJ0IDINClNhbWUgYXMgcGFydCAxLCBidXQgYWRkIDEwMDAwMDAwMDAwMDAwIHRvIHRoZSBzb2x1dGlvbg0KDQpgYGB7cn0NCmZhcmF3YXlwcml6ZXM8LWZ1bmN0aW9uKG0pew0KICBkPC1zYXBwbHkobSxmdW5jdGlvbih4KXsNCiAgIGFiPC14W1sxXV0NCiAgIGFiPC0oYWJbMSwxXSphYlsyLDJdKS0oYWJbMiwxXSphYlsxLDJdKQ0KICAgYWJ9KQ0KICBkeDwtc2FwcGx5KG0sZnVuY3Rpb24oeCl7DQogICAgeG08LWNiaW5kKHhbWzJdXSsxMDAwMDAwMDAwMDAwMCx4W1sxXV1bLDJdKQ0KICAgIHhtPC0oeG1bMSwxXSp4bVsyLDJdKS0oeG1bMiwxXSp4bVsxLDJdKQ0KICAgIHhtfSkNCiAgZHk8LXNhcHBseShtLGZ1bmN0aW9uKHgpew0KICAgIHltPC1jYmluZCh4W1sxXV1bLDFdLHhbWzJdXSsxMDAwMDAwMDAwMDAwMCkNCiAgICB5bTwtKHltWzEsMV0qeW1bMiwyXSktKHltWzIsMV0qeW1bMSwyXSkNCiAgICB5bX0pDQogIHRva2VuczwtMA0KICBhPC1keCUvJWQNCiAgYWE8LWR4L2QNCiAgYjwtZHklLyVkDQogIGJiPC1keS9kDQogIG9rPC1pbnRlcnNlY3Qod2hpY2goYT09YWEpLHdoaWNoKGI9PWJiKSkNCiAgdG9rZW5zPC1zdW0oMyphW29rXStiW29rXSkNCiAgdG9rZW5zfQ0KICANCmBgYA0KDQpgYGB7cn0NCmZhcmF3YXlwcml6ZXMobWFjaGluZXMpDQpgYGANCg==