To better illustrate, why cracking some deterministic wallet may be easier, consider this example: we start from the master private key, and then we use addition to derive keys. We use some hash that contains the master public key, and some nonce, representing the index of our child key. What does it mean in that case?
For example, a very simple, but unsafe method, is to use "childKey=masterKey+SHA-256(masterPubKey||index)", in practice something stronger is used in real implementations, but let's start from that. Then, by inspecting revealed private and public keys, it is possible to focus on that master key, instead of trying to crack child keys alone. Also note that all public keys from 160-256 range are revealed, we can assume that those keys also follow the pattern. And even if there are no coins, then still, we can use those public keys as an additional information in our algorithms.
Let's assume that our masterKey is equal to SHA-256("master"), just to have some deterministic-but-randomly-looking hash to work with:
masterPubKey=028B9C3A3CBE772731BAF46F35CF3F2A5E96F32725F7FC3F43165B5DB18EAEAA13
index=0x00000000
SHA-256(028B9C3A3CBE772731BAF46F35CF3F2A5E96F32725F7FC3F43165B5DB18EAEAA1300000000)=4723005bf4956bc7c135caa5c1bda0fd0cd6d37de2cfbfd66c0aed31ac32da3b
mask=(1<<0)=0000000000000000000000000000000000000000000000000000000000000001
firstKey=mask+(childKey%mask)
firstKey=0000000000000000000000000000000000000000000000000000000000000001
Then, we can go further and further, by trying to generate child keys, and checking how close we are to the keys from the puzzle. For example, the first 10 keys from this example, looks like that:
mask0=0000000000000000000000000000000000000000000000000000000000000001
puzzle0=0000000000000000000000000000000000000000000000000000000000000001
child1=11077a18f7bcf2c2f572e07bcaa2e808157efc25dd80123000b1eb0612e4dd00
mask1=0000000000000000000000000000000000000000000000000000000000000002
puzzle1=0000000000000000000000000000000000000000000000000000000000000002
child2=70604aac4e4b6488567526d8c5ca59ef99d2e6a8cdb168be06b4413e3f96ebc4
mask2=0000000000000000000000000000000000000000000000000000000000000004
puzzle2=0000000000000000000000000000000000000000000000000000000000000004
child3=54195d0cb0683a71a007141d90a20bb4648c6aae075165cadb6742cb272e7f9a
mask3=0000000000000000000000000000000000000000000000000000000000000008
puzzle3=000000000000000000000000000000000000000000000000000000000000000a
child4=ec2c3fce8b21ffca469f5f5748141eb754fabe2640643c59b9a34512c3c33777
mask4=0000000000000000000000000000000000000000000000000000000000000010
puzzle4=0000000000000000000000000000000000000000000000000000000000000017
child5=48ef0d29d9416db21ba741074e816b6d8e6935a1de2c96d3dbf41012812c13d3
mask5=0000000000000000000000000000000000000000000000000000000000000020
puzzle5=0000000000000000000000000000000000000000000000000000000000000033
child6=563b062080afa9baf038b4fbb930660e8a255e99ef3c597368dc7df2a2adc0c6
mask6=0000000000000000000000000000000000000000000000000000000000000040
puzzle6=0000000000000000000000000000000000000000000000000000000000000046
child7=b9d4d7680493db643e3158e05899d10a8c878a385a297aac8e97cc5abcb7d4b9
mask7=0000000000000000000000000000000000000000000000000000000000000080
puzzle7=00000000000000000000000000000000000000000000000000000000000000b9
child8=bcd20822e9da2938100576f22c9ed21d9a70689cb691a61c567bd046f665fdfb
mask8=0000000000000000000000000000000000000000000000000000000000000100
puzzle8=00000000000000000000000000000000000000000000000000000000000001fb
child9=9b27d4fbbcc9f9359f2b82f9cc16b5d485a169f4ccdc93b07d837e40be7e8144
mask9=0000000000000000000000000000000000000000000000000000000000000200
puzzle9=0000000000000000000000000000000000000000000000000000000000000344
And then, we can compare our example with real keys:
real=0003, fake=0002
real=0007, fake=0004
real=0008, fake=000a
real=0015, fake=0017
real=0031, fake=0033
real=004c, fake=0046
real=00e0, fake=00b9
real=01d3, fake=01fb
real=0202, fake=0344
And there is more: there is no need to brute force every combination here. If we assume some kind of algorithm, we can make optimizations just for that. So, if we assume that keys are added to the master key, and if mask is calculated with modulo and sum, then we can check selected keys, and create requirements for that master key.
For example, modulo addition, and modulo multiplication, has a nice property, that we can use any order. So, if we have "a+b", or "b+a", then "(a+b)%n" and "(b+a)%n" is also the same. We can also use those rules for multiplication. Then, we don't have to check every single master private key. We can simply assume that if keys are added, then the master key modulo N is in a given range. Then, we can create specific master keys, and skip many of them.