[Question]
  [
*Your challenge*: The code must print "Hello, World!" and nothing else.
*Your restrictions*: Your program must satisfy these requirements:
1. The program must be a pangram.
	* It must use every character in printable ASCII, or, if you chose a particularly strange language, characters which are stored as one byte.
	* You are allowed to use other characters.
2. The program may not have unnecessary characters.
	* No subset of individual characters may be removed from the program while the program still outputs "Hello, World!"
	* For example, if code `ABBC` outputs `Hello, World!` then neither codes `AC` nor `BC` may output "Hello, World!", although code `BA` may.
	* This also means you cannot have a statement to print "Hello, World!" *per se* anywhere in your program, as everything other than that statement could be deleted and the program would do the same thing.
3. The program must not take input.
4. Your program does not create any errors.
5. You must not use any "Hello, World!" builtins.
*Your score*: Your score is calculated by [length of the program in characters] - [number of different characters]. Lowest score wins. (Tie-breakers are oldest post.)
*Nota Bene*: the second requirement is almost impossible to verify, so an answer is valid only after a week has passed for anyone who wishes to do so to be able to disprove the validity of your answer.
  
[Answer]
# [Husk](https://github.com/barbuz/Husk), 256 bytes, 256 characters, score=0
```
m←`C₁†ȯ→*2c¨abqnpsyhkzjwf
¢"H½↕↑↓↔∟¦¡¿‼…‰‡√≤≥±∂∫∞≈≠≡⌐¬÷×τ►#$%&'()+Φ-./013456789:;<=>?@ABDEFG¤IJKLMNOPQRSTUVṄXYZ[\]^_⁵ı§χituvxg¹{|}~·₀₂₃₄₅₆₇₈₉⌈⌉⌊⌋ΓΔΘΛΞΠΣ€ΨΩαβγδεζηθλμξπρςσ▲φƒψω⁰r²³⁴d⁶⁷⁸⁹£,¥o´ ▼!◄lȦḂĊḊĖḞĠḢİĿṀWȮṖṘṠṪẆẊẎŻȧḃċḋėḟġḣeȷŀṁṅṗṙṡṫẇẋẏżÄËÏÖÜŸØäëïöüÿø◊□¶«»
```
[Try it online!](https://tio.run/##DcTXchJRHAfge5/C3nvvvffejV2jscfYdXYPZLMLjIlJXLAMYQMhUTIGCIE9C8rMOYvD1dln@P9eBP0uvvauzo5W6yGMvmu7wHRoqeYEjP6FK2@Kses3nj560vm6vePN/Zd3ponhmfvFbxifYXyCMQBjEOaQyApH1KHVoGWh5aE5ML/CysAaEQWYDGYOZhKWCSsFy0GsT4zLiowHYdjerNlz5s6bv2CRyi5Zumz5ilWr16xdt37Dxk2bt2zdtn3Hzt179u4TmQMHDx0@cvTY8RMnT50@c5Z4@PyFi5cuX2m7Cn3KL4jRoOfe864Xr@4K/vbd@w@iAqaBMbAQWBisG8wA6wEzwSzETMT@H0EsqgbUoEqobyqpUioNNq7G1A9VUEU1qUpqSpVVRbmqqmrqT6AFesCCEOxiYPztD8zAgp5/JopiEnrpFvQy9Ap0FzoX6cVi5LEoTYddm4F4@EEzSy7zI@RGfJvcpJ8id9jP@3Xi2rnmL@I28QTxFPGf5BnkRcj72Kg2R8kN@VFyo36c3CHfITd9u1lpaMR14t3E48S/EHeI58jrIS9KXm@jJsMyKnulLb83XJmQGZmTE7Isa7IuXcQjsB1RFjlRbbX@AQ "Husk – Try It Online")
I *think* this is irreducible. It certainly took a bit of effort to build, but striving for a score of zero is inviting pretty close scrutiny...
[Husk](https://github.com/barbuz/Husk) has 256 characters on its [codepage](https://github.com/barbuz/Husk/wiki/Codepage), so this pangram needs to use all of them. Aiming for a zero score also means that (a) the 'program' code cannot easily include any of the letters of 'Hello, World!', and (b) we need to find a way to 'recycle' the letters 'l' and 'o', which each occur more-than-once in the output.  
Unfortunately, [Husk](https://github.com/barbuz/Husk) uses '!' as its indexing function, which rules-out the most straightforward approach to extracting elements from a long string, so we need to find a different way to do this.
Here's my approach:
**line 2: the encoding string (228 characters, + 2 characters `¢"`)**
```
¢"H½↕↑↓↔∟¦¡¿ ... öüÿø◊□¶«»      # A 228-character string, repeated forever.  
                                # Since one of the characters is a '\', though,
                                # this is read by Husk as a 227-character array.
                                # The characters of 'Hello, World!' are inserted
                                # at specific positions in the infinite string, 
                                # (so they occur out-of-order in the single copy).
```
**line 1: the indexing program (26 characters)**
```
     †ȯ   c¨abqnpsyhkzjwf       # For all the codepoints of the index string "abqnpsyhkzjwf":
        *2                      # double them
       →                        # and add 1.
  `C₁                           # Now divide the encoding string into substrings with these lengths
m←                              # and get the first letter of each.
```
The indexing string `"abqnpsyhkzjwf"` is constructed to 'hit' the letters 'o' and 'l' 2 and 3 times, respectively, by 'wrapping around' in the infinite list, so that those letters only need to occur once in the encoding string. The largest index needs to be the same as the length of the encoding string, in order to 'hit' the same target ('l') twice in a row: this is achieved with 'q' (2x codepoint 113 + 1 = 227).
[Answer]
# [C (gcc)](https://gcc.gnu.org/),  ~~111~~  109 bytes, score = 14
```
main(){printf("H%cllo, Wo\x72ld!",39+sizeof"14568:<=>?@ABCDEFGIJKLMNOPQRSTUVXYZ[]`bghjkquvwy0|~#$&'*-./^_");}
```
[Try it online!](https://tio.run/##S9ZNT07@/z83MTNPQ7O6oCgzryRNQ8lDNTknJ19HITw/psLcKCdFUUnH2FK7OLMqNT9NydDE1MzCysbWzt7B0cnZxdXN3dPL28fXzz8gMCg4JDQsIjIqOjYhKT0jK7uwtKy80qCmTllFTV1LV08/Ll5J07r2//9/yWk5ienF/3XLAQ "C (gcc) – Try It Online")
Edit: bugfix thanks to Noodle9
Edit 2: changed order of numbers and operators in the string to fix a problem found by G B, replaced `"Hello, World!"` with `"Hello, Wo\x72ld!"`
## shorter solution based on Sheik Yerboutis Code (107 bytes, score = 12)
```
main(){printf("H%cllo, Wo\x72ld!","_:?=<#$&*-+^|./4138596@ABCDEFGIJKLMNOPQRSTUVXYZ`bghjkquvwysz0~e"['>']);}
```
[Try it online!](https://tio.run/##S9ZNT07@/z83MTNPQ7O6oCgzryRNQ8lDNTknJ19HITw/psLcKCdFUUlHKd7K3tZGWUVNS1c7rkZP38TQ2MLU0szB0cnZxdXN3dPL28fXzz8gMCg4JDQsIjIqISk9Iyu7sLSsvLK4yqAuVSla3U49VtO69v//f8lpOYnpxf91ywE "C (gcc) – Try It Online")
[Answer]
# [Ruby](https://www.ruby-lang.org/),  ~~119~~  112 bytes / score 17
```
puts ["%x"%(("!\#&+,-01245:;<>?@ABDEFIJKLNOQRUVWXYZ`dflqnry{|}"=~/$/)^"s8j9bePwGp7SgMTCvznH".to_i(36))].pack'h*'
```
[Try it online!](https://tio.run/##KypNqvz/v6C0pFghWkm1QklVQ0NJMUZZTVtH18DQyMTUytrGzt7B0cnF1c3Ty9vHzz8wKDQsPCIyKiElLacwr6iyuqZWybZOX0VfM06p2CLLMik1oNy9wDw43TfEuawqz0NJryQ/PlPD2ExTM1avIDE5Wz1DS/3/fwA "Ruby – Try It Online")
[Answer]
# [Python 3](https://docs.python.org/3/), 101 bytes, 101 - 95 = 6
```
print('o#$%&*./0W368;<=>? @ABCDEFG,IJKLMNOPoQRSTUVXY\154Z^_`abcflghjkmqsuevwyz{|}~H'[::-9]+"\x72ld!")
```
[Try it online!](https://tio.run/##K6gsycjPM/5fUJSfXpSYq2CrUKSkpATkZuaVaKjnK6uoqmnp6RuEG5tZWNvY2tkrODg6Obu4urnreHp5@/j6@QfkBwYFh4SGRUTGGJqaRMXFJyQmJaflpGdkZecWFpemlpVXVlXX1NZ5qEdbWelaxmorxVSYG@WkKCpp/gfapFdcUpRZoKHJlVqRmqwBdYUmV1p@kUKyQmaeQlFiXnqqhkGFkYGOgkGFeZqmFZeCQmaaQnJGkUaypkJefglIFVQfSE5BAeJ2iALN/wA "Python 3 – Try It Online")
[Answer]
# [Backhand](https://github.com/GuyJoKing/Backhand), 100 - 95 = 5
```
M#$%&"()*+H-./0e1234l5678l9:;<o=>?@,ABCD FGIJWKLNOoPQRSrTUVXlYZ[\c^_`b"dfgh]ikmn'pqst!uvwxryz{}a|~jE
```
[Try it online!](https://tio.run/##lVh7d9M2FP@7@RRqSrHdxE1c9sJrC4Xx6AaUDTa2hRAcR00Ejmxkp014ffXuSrIsWXHKWc9JY@v@7tXVfSvZqpil9NbVzjbqLXLWGxPay@Raq0XmWcoKlK9y9cgiOknnrVacRHmOXhRR/N71wtbWBJ@j0YhQUoxGbo6Tc764xR/2cw5CR2gwbElclmYawnCxYBRp5D4ne4icG2sIJzlGfcW/yGdCQBfRxTwXYgBerDLsigVEcpSQvOCErfOUcRgiVKBDc6soyzCdcCYPoHyTDeTca6kz3wPKDKwwOqUFZhnoj1mzCbooTidYG2IegQ5giNJqajktZpgZy2o9SwnfASh9tcTlwTv/UksfFmnB1x5GoL1anBDOFmgP4Azeb6l3vIxxnt@fRRz1LKWaD48XU1sYw1OwJa6w8qTposgWxRnF2pUpIErNM3E8cIofoEOUwqe/DII@/IU8mkCjCQjYv2SkwG48Y27qWR7AjKXMbb9kBE9QkaKMgTXAiRdRQiYI/i8wcncnHopyFMNJohhUfE3bu6lX0/AkSbSGlzOSYFQ5Q7q53FAfiGsiRRQEPCK5yT7sQqf4ufSKS4RV9wi3dVcaTG1cB1aB2kX4IgETvWQLIyiUlztHHAOr8QyLdOGwSmWxKMJZkZWLtlSiKEHHRyjB1K3iRWy1FlJ1CPKRWwP4FoAjDrQcGV@@ehYES2/wpa0ZBEGjLr75/r82gR3ApmF9G7@MQuDZq8J/U@kwgkHQZK5bZQqZRUpiRYRL3BQXPJV0lKlz6zSTnlPpoddbW9dkpEiGilEmDWzNcDRxA08RUjZxY1EuY1kl/UBX1Vir@GwxH2NDyWVZV2R8LdH2Ec9VqGuIp@PSQzTl6YacfnBw67vvf/jxp9uO0GYFjEv@sFTnUQYoUx7WuazKakIhCmBwjyuFe60N7Bu1adKEy6R7QR91LNHNstcNvZQKc8aVx7V2fCdEXKxPtRFpaUS2oNp8lTN5egzM@BsaESDqqdBVlC8jofSag5y9eiVw3jiexaOrlU0R3cMgEQpVTLlCd4iwLBWxOGbbCVFj9zArsE4KGWNCPHx20BOo2gw4WmWWx5Z7onEMBlN7CBHr1H1CJ3hZyi3FNOpW5rqGtJ12WGWOKNFe9Vrpu8E5nizucAjRbtE8oiRbJFFBUlrX42ulf9nNDNqN2tkGGtY1WIYWU7iJabh3YEFvOqFZ2qsOvC2Lg1lFVUGrQJ4m2p17yygqa4hNZ2VOaHdMhdYrgzD0g2GdMamdt@onRihbO7k1BiO6hVYW2FPgElKxNIGX5hm6qDZ26ZeuxqgguZ/SgqUJepikl3WRh0pk2aaCOvm4TraonxS1Pir4gaX3l2acDXvjVGMrDHqdte2e2vSDOv2iRvfX@F/ZdIv/TrOa8q4AiymJsTvwg24wtD3zztGpXB947Ul2q2GHjQ7PQaNv8uypHSzmu07Vu1RdFMFwDw4Uzwid1uGjTc5EegDiNxrRnW3XfbbCqHpu4DUmIUPCdi1reF/gnduwjLXjkzW8sc/hNYyPrmM8vobxwXWMR0c2p7D1CdwMZnMM1b3eZPZ6ux1fxkzUHdfKVrdewnS365XBIJq20@s54gXIESf36xeOk6LA86yQl44JuSBw4xqv0EfM0rbVZjDcQty8YO7Y68Qd/hCtnX2wXtOEgmupPtwA7ASVTU7P6ixknaWadyzpqdN4yzEQp43CyqnRFnfmNFzjuAE2B8Fr6oRybLEIj536fK2vbZ4YAFUKGiwzg@VbWhgy9EgnRgo51Um3yyvBHEbDaAo3Jh4upWSgl5JLKkybbbhnilMsScGLcStj6ZRFcwivdrt99XTnxu7NNtSXzmN/v9fHfPJJ@OiT3A5/PkyPju/c7Z7cu/8Levjo9NdXvz15dpY@//2PF@zln3/9nfzz7@B1/Gb0dtyenE9nQ/J@Tp3sQ15sLy4ul2z18dOX6PPXdw@uYKNBIJpui/DfHWg0x6ORGI9GI97CRiM@JRHQqfEXi1JlOAaw84pRLogLjEqG5@W54ohyyBgjnhsrfvgdUv1aIAc0ObqTfT4mgwVJOZld/Qc "Python 3 – Try It Online")
Note that the version on TIO is missing a couple of instructions (notably `'`), so I've copied the interpreter here. This program works because Backhand executes every fifth instruction thanks to the first `M` (it's actually a little more complex than this), so the actual code is more like:
```
M    "    H    e    l    l    o    ,         W    o    r    l    c    "    ]    '    !    r    a   j 
```
However, since you can't remove the spaces inbetween without breaking the flow of the program, you can replace them with whatever you want. The final check is that the `j` jumps to the 10th character (`H`) to halt and output,, which is less feasible if you modify the program. It's possible you might be able to form a valid program from this mishmash, but it is unlikely, and I'm sure that there's another permutation that fixes that.
### Explanation:
```
M                      Increase the step count from 3 to 5
 "Hello, Worlc"        Push the string to the stack
               ]       Increment c to d
                '!     Push !
                  r    Reverse the stack
                   aj  Jump back to the 10th character
  H                    Halt and output the stack
```
[Answer]
# JavaScript (ES6), score ~~30~~ 124 - 95 = 29
```
alert(`Hell`+String.fromCharCode(057^"#$%&*-/1234689:;<=>?@ABDEFGIJKLMNOPQRTUVXYZ][_bcjkpqsuvwxyz{|}~\\".length)+', World!')
```
The `o`s of `fromCharCode` cannot be put inside quotes. Its char code is 111, which can't be uses directly as an argument to `String.fromCharCode`. You can't XOR to get it because you need 64, 86, 104 or 106, which are also impossible, I think.
[Answer]
# [JavaScript (Node.js)](https://nodejs.org), 118 117 116 - 95 = 21
shoutout to [tsh](https://codegolf.stackexchange.com/users/44718/tsh) for spotting 2 issues
```
alert(`Hello, Wo${('\71'+";#%&*/8025:<=>[]?@ABCDEFGIJKLMNOPQRTUVXYZ|_bcfjkpmqsuvwxyz".length^-~94).toString(36)}d!`)
```
[Try it online!](https://tio.run/##y0osSyxOLsosKNHNy09J/Z@Yk1pUYpucn1ecn5Oql5OfDhHRSPBIzcnJ11EIz1ep1lCPMTdU11ayVlZV09K3MDAytbKxtYuOtXdwdHJ2cXVz9/Ty9vH18w8IDAoJDYuIjKqJT0pOy8ouyC0sLi0rr6isUtLLSc1LL8mI062zNNHUK8kPLinKzEvXMDbTrE1RTND8/x8A "JavaScript (Node.js) – Try It Online")
[Answer]
# [BASIC](http://www.yabasic.de), 129 bytes
```
FOR i=8-2 TO 79 STEP 3+3:PRINT MID$("9*./!H065<>e?@ABClGJKLQlUVYZ[o\]^_`,abcf  ghjksWmnpqxotuvwyrz4{|}l~#%&'d",MOD(i,73),1);:NEXT
```
[Try it online!](https://tio.run/##q0xMSizOTP7/380/SCHT1kLXSCHEX8HcUiE4xDVAwVjb2CogyNMvRMHX00VFQ8lSS09f0cPAzNTGLtXewdHJOcfdy9snMCc0LDIqOj8mNi4@QScxKTlNQSE9Iyu7ODw3r6CwIr@ktKy8sqjKpLqmNqdOWVVNPUVJx9ffRSNTx9xYU8dQ09rKzzUi5P9/AA "Yabasic – Try It Online")
Updated to a valid version thanks to Dominic van Essen.
[Answer]
# [R](https://www.r-project.org/), ~~119~~ 117 bytes, score=~~24~~ 22
Thanks to Dominic van Essen for spotting a bug.
```
cat('Hello, Wo',intToUtf8(nchar("#$%&*-./012479:;<>?@ABDEFGIJKLMNOPQRSVXYZ[]^_`bgjkmquvwyz{|}~")+53),"\x6Cd!",sep="")
```
[Try it online!](https://tio.run/##K/r/PzmxREPdIzUnJ19HITxfXSczryQkP7QkzUIjLzkjsUhDSVlFVU1LV0/fwNDIxNzSytrGzt7B0cnF1c3d08vbx9fPPyAwKDgsIjIqOjYuPiEpPSs7t7C0rLyyqrqmtk5JU9vUWFNHKabCzDlFUUmnOLXAVklJ8/9/AA "R – Try It Online")
Uses the [hex code trick](https://codegolf.stackexchange.com/a/191117/86301) to encode the last `l` as `\x6C`. This saves 2 bytes: 1 by avoiding the reuse of the `l` (none of the other characters are used anywhere else), and 1 by avoiding having to escape the `\` (as `\\`) in the string.
The long string in the middle is 61 characters long. They are all necessary to get the character `r` (ASCII code 114), which is produced by the `intToUtf8(nchar("...")+53)` part.
[Answer]
# [C (gcc)](https://gcc.gnu.org/), score 114 - 95 = 19
Saved 2 bytes and removed 3 points thanks to [Sheik Yerbouti](https://codegolf.stackexchange.com/users/100356/sheik-yerbouti)!!!
```
j;main(){for(;j<74;j+=6)putchar("H#$%&'e*-./0l12358l9:>?@oABCDE,FGIJK LMNOPWQRSTUoVXYZ\\r^_`bglkqsvwdxyz|~!"[j]);}
```
[Try it online!](https://tio.run/##S9ZNT07@/z/LOjcxM09Dszotv0jDOsvG3MQ6S9vWTLOgtCQ5I7FIQ8lDWUVVTT1VS1dP3yDH0MjY1CLH0srO3iHf0cnZxVXHzd3Ty1vBx9fPPyA8MCg4JDQ/LCIyKiamKC4@ISk9J7uwuKw8paKyqqZOUSk6K1bTuvb//3/JaTmJ6cX/dcsB "C (gcc) – Try It Online")
All characters outside of the double-quotes are needed in order for the program to compile and run properly. Taking any of the characters out from the double-quoted string will mess-up `Hello, World!` from being printed properly. That string is *exactly* `Hello, World!` with 5 characters in between each character.
[Answer]
# [Zsh](https://www.zsh.org/), score \$ 116 - 108 = 8 \$
```
1=`wc -m<<<'␀␁␂␃␄␅␆␇␈␎␏ABCDEFGIJKMNOPQRSTUVXYZabfghjkqsuvxyz234567890_+[];:~./>?\|"%^&*'`
print   He${(L#)@}lo, World!
```
[Attempt This Online!](https://ato.pxeger.com/run?1=m724qjhjwbrk_JRUWxUNGxt1Vz8X9aWlJWm6FjdLDG0TypMVdHNtgOIMjEzMLKxs7Bx8_I5Ozi6ubu6eXt6-fv4BgUHBIaFhEZFRiUlp6RlZ2YXFpWUVlVVGxiamZuYWlgbx2tGx1lZ1evp29jE1SqpxalrqCVwFRZl5JZweqSrVGj7Kmg61Ofk6CuH5RTkpilC75wHdwaXJVVJZkFqcWqKgmxiqUJqXWViaygWhbDWAWouVlDRBLq_V5CpILE7OzLTVqFbU06sD8lOTM_IVcjOLizPz0q0UVKoh8lY1EN21EPni5PyiVKCsMsgQBV0gAyKtYKugEo0hGsuVWpaYo6ACEoa4csECCA0A)
`␀␁␂␃␄␅␆␇␈␎␏` should be the unprintable characters `0x00` to `0x08` and `0x0E` to `0x0F`, but these don't render in SE markdown.
]