[Question]
  [
Your challenge is to write a program that is a quine, meaning it prints out its own source code.
For at least one individual character, when it is removed from the program's source, a single different character is removed from the output.
By different, I mean that the character removed from the code is distinct from the character removed from the output - not just in a different place, but a different character altogether.
Your program, modified or unmodified, may output to stderr as long as it also outputs the correct text to stdout.
# Scoring
Your score is the number of character this *doesn't* work for, with lower being better.
For example, if the program `abc` is a quine in your language, and the program `ac` prints `ab`, your score is 2, because removing one of the chars works and removing the other two doesn't.
~~I have a 200-point bounty for anyone who gets score = 0. This may be increased, depending on how hard it appears to be.~~ Bounty has been awarded to Jo King's answer.
### ***IMPORTANT***
I updated the criterion to reflect the fact that scores can converge to 1 by adding a large amount of characters.
  
[Answer]
# [Backhand](https://github.com/GrayJoKing/Backhand), Score 0, 137 bytes
```
""###:::[[[:::::::::)))))))))888999***EEE666***333+++ssscccjjjlll222%%%]]]333***xxx(((sss~~~rrr~~~'''   sss---***333aaa000~~~rrr:::rrrHHH
```
[Try it online!](https://tio.run/##lVhtb9s2EP5s/wrGWSbJtmLL2bJEqLu1RboU6NoBK7APrhvIMmMzkyWNklJlL/nr3ZEUxRfLKWYgjsR77ni8dzp/KLdZevbl@AhNqoJOViSd5GKt3ye7PKMlKh4K@UijdJ3t@v04iYoC/VZG8R@uF/Z7a3yLbm5ISsqbG7fAyS1b7LGH04KB0Bwtln2By7NcQSguK5oihTxlZA@RW20N4aTAaCr5q2LLBYxRWu0KLgbg5UOOXb6ASIESUpSM0LvNKIMhknJ0qG8V5TlO14zJAyjb5AC58PryzC@BsgUr3LxJS0xz0B/TbhOMUZytsTLELgIdwBCN1eRyVm4x1Zblep4RtgNQpnKJyYN39k8u/VllJVt7HYH2cnFNGFugPIBzeD@T77iOcVG82kYM9S5LFR9eVRtbGMUbsCVuseKkWVXmVfk@xcqVGSAazXN@PHCKH6BnKIO/aR0EU/iELJpAozUIOP1MSYndeEvdzLM8gCnNqDv4QAleozJDOQVrgBPvo4SsEXxXGLknaw9FBYrhJFEMKn5MByeZZ2j4IkmUhp@3JMGodYZwc7OhOhDTRIgoCXhEcJNT2CXd4F@FV1zCrTokzNZjYTC5sQlsA3WM8H0CJvpAKy0opJdHc4aB1XiLebowWKsyX@ThLMnSRT2ZKFLQ8zlKcOq28cK32gspE4J85BoA3wIwxEzJEfHly2dOsPQGX9qaQRB06uLr7/9rE9gBbBqa2/hNFALPsA3/Q6VDCwZOE7lulSmkFymB5REucBtcslRSUSbPrdJMeE6mh1rv957ISJ4MLaNIGtia4mjtBp4kZHTtxrxcxqJK@oGqqrFS8V21W2FNybqpKyK@anQ0Z7kKdQ2xdKw9lGYs3ZAzDWZn331//sPFpcO1eQDGmj3U8jzSAE3KwzqT1VqNK5QCGNzjCuFe/wD7QW26NGEy02EwRSNLdLfsfUPXQmHG@OAxrR3fCRET66fKiGljRFqlynytM1l6LPT4W2oRwOsp15WXL9eqPJ5F4Z2gm8SzUK05yBma5cP55Iz1lfEB7bgQTUXeP8KmkMTcCAMnRJ29Ra/PKmVEBEq5x@gt1HQKHP2mBsSW86JVDOaUe3AR@9RTkq5x3chtxHTq1lQCBRk4g7DNK17Avfa11feQcUTph0PwZox2UUryKolKkqWmHo@t/k2v02jfGGdbKNhYY1laTOEhpuVwZkG/dUK98Lf9@UiUDr3GynLXgjxFtPt6Tys5e4hDZ6VOaPdTiVYrizD0g6XJmBjnbbuNlhzWTq7BoOUL18oCexLcQFqWLnCtn2GMjKFMvYwVRgbJqywtaZag10n22RT5TIpsmlhgkp@bZIv6t6Sag4QfWHr/242zYZ@cdqiFMXC0t90vNn1m0u8Nur/H/7tNt/h/7FZT3CRgMSMxdhd@MA6WtmfuHJXK5jhsz7m9jh0OOrwAjb7KM5Q7WMw/OW1nk3WRB8NLOFC8JenGhN8cciZS4xG77/DebbvuHyuM2ucOXm1O0iQcGVnDWgfr65plrB3f7uG1fZ49wfjzU4zPn2C8eopxPrc5ua1fwL1hu8NQ3c0mM5ycjHwRM9F4ZZStsVnCVLebNMHAW7ozmTj8BcgRI0/N68iLssS7vBRXkjW5J3AfWz2gvzDNBlabwXBHcYuSuitvFI/YQ7R39sV@TeMK7qX68gBwFLQ2efPeZCH7LO00ZEnPnM47kIZ40ymsmSltce@djkseM8DhIPiYOqGYbCzCtWNO3@pS5/HxUKagxrLVWL6mhSZDDXx8pBAzn3C7uDDsYHCMNnCfYuHSSAZ6I7mhwiw6gFsoP0VNSlaMc5ptaLSbDwaDL4PB8fFxGIaLBfTE5uPJz8XFxeXl5XA4vLq6Oj8/h4ezs7PRaFQURRzHd3d3SZLMZrOTk5PlcgkkANR17bouAB4fHyml8O04DkIIVnzfFxKiKIJ7twDAdvB9fX0NmgwWAW/LBOK@80eNRnGvf0zaXwa4bcSUTk7ZRAzmIM2Y9eU/ "Python 3 – Try It Online")
I've included the interpreter here because the version on TIO is a bit out of date (in this case missing the instructions `E`qual and `s`kip). `E` could be compensated for with `-!`, but you'd need to do a lot of fiddling around with `j`ump to replace `s`kip.
This code outputs itself if no changes are made, the original code missing a trailing `H` if any character other than `H` is removed, and if the `H` is removed, it removes the leading `"` instead.
### Explanation
Basically, each instruction is duplicated three times (except for the leading `"`, which is only doubled). This is used as a form of radiation hardening, so that even if one instruction is removed, it can still regenerate it from the others. Backhand is especially good at this, since by default it executes every third instruction. Removing the duplicates, we get:
```
"#:[:::)))89*E6*3+scjl2%]3*x(s~r~' s-*3a0~r:rH
"       Push the rest of the code, forwards then backwards
 #      No-op
  :[    Dupe the # and decrement it to get "
Start loop
    :::               Make three copies of the top of stack
       )))            Push those to the other stack
          89*E        Is the value a `H`?
              3+scj   If not, jump back to the start of the loop
End loop
                   l2%]3*           If the length of the pushed code is odd (i.e. a character is missing)
                         x(         Flip to the other stack
                           s~       and pop the H if so
                             r~     Reverse the stack and pop the extra "
                               ' s  Skip forwards 32 spaces, i.e. the instruction three from the end
                                    This is the H if all Hs are still present, so it halts and outputs
                                         :r   Otherwise, reverse and duplicate the H
                                       ~r     And pop the "
                                 s-*3a0       And skip back to the H to halt and output
```
[Answer]
# [Python 2](https://docs.python.org/2/), 338 bytes, score = ~~16~~ 11
```
exec"aabb==''''''iimmppoorrtt  ssyyss;;dd==cchhrr((3399))**33;;ssyyss..ssttddoouutt..wwrriittee((''eexxeecc''''%%cc''%%3344++''''..jjooiinn((ii**22ffoorr  ii  iinn''aabb==''++dd++aabb++dd++'';;aa==aabb[[::4466]]++aabb[[5533::]];;eexxeecc  aa''))++''bb%%cc[[::::22]]''%%3344))'''''';;aa==aabb[[::4466]]++aabb[[5533::]];;eexxeecc  aab"[::2]
```
[Try it online!](https://tio.run/##lVBbqsMgEN2KFIIawQ9NC1VcSfDDV4mFxqCWJqvPvTZkAR0Y5nXOzGGWrU5pZvse1uAuxlirFPxajK/XsqSUc60AlLJtpUjpvVLOTVPOCHF@v2Pc95xLecwpLaVW71N6v2ul9PPJOcZaQ0AIwhDWNQTn2vaua7HrOB8GQlqH0uczpRjnGaEY@56xx6NdByDG5vMM4amPEO8JadWRQSilMUq1zjgKMQy3m9YHYhyvV86F0FrKUwEAxkCIcWNa27Q0lhCMaX2qwvj4w@@b7eUfyPS@/wE "Python 2 – Try It Online")
when any of the char of inside the string is removed, then the first `"` is removed
## How it works :
* for a string like `"aabbccddee"`, when we take one char every two char, we get `"abcde"` even if it has a missing char.
I then applied this principle on the quine `a="print('a=%r;exec(a)'%a)";exec(a)`
* if the code has a deletion: the end of the string will be `exec a` instead of `exec ab` which result of the deletion of the first `"`.
Note: I could reduce the number of byte by using `input` instead of `sys.stdout.write` to print without a newline but it would throws an error (still valid but uglyer)
# [Python 3.8 (pre-release)](https://docs.python.org/3.8/), 187 bytes, score = 16
```
exec(a:="pprriinntt((eenndd==''eexxeecc((aa::==''++((''%%rr[[::::22]]))''%%((''''..jjooiinn((ii**22ffoorr  ii  iinn  aa  iiff''##''!!==ii))++''##''))))[[aa[[--11]]====''))''::]]))#"[::2])
```
[Try it online!](https://tio.run/##JY3RCoQgEEV/xYqYMSnIfVkEv0R8kBpZe1CRHtqvbxv2wsCd83BP/Z6fkl/v2u6bLtowGNvX2lpKOZ8nIlHO@24tANF1EW0bYgjGMFEKEWAcW3POPNHaeymZMAdYluMohZcQU5omrWMspTUhUuLLWYgQuMUIMAwAXWdtSlIq9f/lE@dCcG6e19V7a9nLDmPYNfSPWHt53z8 "Python 3.8 (pre-release) – Try It Online")
[Answer]
# [Python 2](https://docs.python.org/2/), score: 206 - 178 = 28
If you remove any single character in the two long strings, the first `"` in the output is omitted.
```
a="print('a=%r,%r;exec max(a,key=len)'%((max(a,key=len),)*2)).replace(chr(34),'',a[0]!=a[1])","print('a=%r,%r;exec max(a,key=len)'%((max(a,key=len),)*2)).replace(chr(34),'',a[0]!=a[1])";exec max(a,key=len)
```
[Try it online!](https://tio.run/##K6gsycjPM/r/P9FWqaAoM69EQz3RVrVIR7XIOrUiNVkhN7FCI1EnO7XSNic1T1NdVUMDVURHU8tIU1OvKLUgJzE5VSM5o0jD2ERTR11dJzHaIFbRNjHaMFZTSYeGZmMzi@v/fwA "Python 2 – Try It Online")
Based on this [quine](https://codegolf.stackexchange.com/a/51011/64121), this executes the longer, and therefore unmodified, string of `a`.
[Answer]
# [R](https://www.r-project.org/), 58 bytes; score = 58-2 = 56
```
'->a;cat(sQuote(a),a,2*11)#' ->a;cat(sQuote(a),a,2*11)# 22
```
[Try it online!](https://tio.run/##K/r/X13XLtE6ObFEoziwNL8kVSNRUydRx0jL0FBTWV0Bt5yCkdH//wA "R – Try It Online")
Pretty boring, but now scores better than my original version (below).  
Either of the `1` characters near the end of the code can be deleted, resulting in deletion of one of teh two `2` characters at the end of the output.
---
# [R](https://www.r-project.org/), ~~271~~ 253 bytes; score = ~~101~~ 253-160 = 93
(Previous solution, better optimized for the initial 'code length divided by changeable characters' scoring method)
```
a=';`+`=nchar;`!`=sQuote;cat("a=",!(c<-`if`(+a>+b,a,b)),";b=",!c,c,"#"[a==b],sep="")';b=';`+`=nchar;`!`=sQuote;cat("a=",!(c<-`if`(+a>+b,a,b)),";b=",!c,c,"#"[a==b],sep="")';`+`=nchar;`!`=sQuote;cat("a=",!(c<-`if`(+a>+b,a,b)),";b=",!c,c,"#"[a==b],sep="")#
```
[Try it online!](https://tio.run/##tcxBDkAwEADAt1iHtul6Qa0/OItkt5sKF0R5f/EHzpPMUYqQCeyZVp3lCFwx5f7azhRUTgtCgJXVtuFlYuul8xEFo3MIIb6mqAg1DEIUR8xpJwBnHvtj/XqsS7kB "R – Try It Online")
If any of the two sets of 80 single-quoted non-`#` characters are removed from the code, the final `#` character is removed from the output.
]