Crack the bank account's password!Tips for golfing in PythonIs string X a subsequence of string Y?Random...
What does an unprocessed RAW file look like?
Insecure private-key encryption
How to not let the Identify spell spoil everything?
Buying a "Used" Router
Minimum Viable Product for RTS game?
"Starve to death" Vs. "Starve to the point of death"
Coworker asking me to not bring cakes due to self control issue. What should I do?
Besides PR credit, does diversity provide anything that meritocracy does not?
why typing a variable (or expression) prints the value to stdout?
Count repetitions of an array
Allow console draw poker game to output more hands
Renting a 2CV in France
Co-worker sabotaging/undoing my work (software development)
How can I prevent an oracle who can see into the past from knowing everything that has happened?
Is the fingering of thirds flexible or do I have to follow the rules?
Prevent Nautilus / Nemo from creating .Trash-1000 folder in mounted devices
What is a good way to explain how a character can produce flames from their body?
Caron Accent v{a} doesn't render without usepackage{xeCJK}
Democratic Socialism vs Social Democracy
Why didn't Tom Riddle take the presence of Fawkes and the Sorting Hat as more of a threat?
How do you get out of your own psychology to write characters?
How to politely refuse in-office gym instructor for steroids and protein
Writing dialogues for characters whose first language is not English
Case protection with emphasis in biblatex
Crack the bank account's password!
Tips for golfing in PythonIs string X a subsequence of string Y?Random Password GeneratorGuess my password! (Code Golf)PNZ (Guess 3 unique digits in order)On the Subject of PasswordsCan you find the villain's password?I copied my password to the clipboard! Can you delete it?The bunker of the math lecturerGenerating an adequate passwordHelp! I forgot my password!Password Bishop Goodness
$begingroup$
Introduction
In order to prevent keyloggers from stealing a user's password, a certain bank account system has implemented the following security measure: only certain digits are prompted to be entered each time.
For example, say your target's password is 89097
, the system may prompt them to enter the 2nd, 4th and 5th digit:
997
Or it might prompt them to enter the 1st, 3rd and 5th digit:
807
All you know is that your target entered the digits in order, but you don't know which position they belong to in the actual password. All you know is there are two 9s, which must come before 7; and that 8 comes before 0, and 0 before 7. Therefore, there are six possible passwords:
80997
89097
89907
98097
98907
99807
The keylogger in your target's computer has been collecting password inputs for months now, so let's hack in!
Challenge
Given a list of three-digit inputs, output all the possible passwords that are valid for all inputs. In order to reduce computational complexity and to keep the amount of possible results low, the password is guaranteed to be numerical and have a fixed size of 5. The digits in every input are in order: if it's 123, the target typed 1 first, then 2, then 3.
Input/Output examples
|----------------------|--------------------------------------------|
| Input | Output |
|----------------------|--------------------------------------------|
| [320, 723, 730] | [37230, 72320, 73203, 73230] |
| [374, 842] | [37842, 38742, 83742] |
| [010, 103, 301] | [30103] |
| [123, 124, 125, 235] | [12345, 12354, 12435] |
| [239, 944] | [23944] |
| [111, 120] | [11201, 11120, 11210, 12011, 12110, 12101] |
| [456, 789] | [] |
| [756, 586] | [07586, 17586, 27586, 37586, 47586, 57586, 57856, 58756, 67586, 70586, 71586, 72586, 73586, 74586, 75086, 75186, 75286, 75386, 75486, 75586, 75686, 75786, 75806, 75816, 75826, 75836, 75846, 75856, 75860, 75861, 75862, 75863, 75864, 75865, 75866, 75867, 75868, 75869, 75876, 75886, 75896, 75986, 76586, 77586, 78586, 79586, 87586, 97586] |
| [123] | [00123, 01023, 01123, 01203, 01213, 01223, 01230, 01231, 01232, 01233, 01234, 01235, 01236, 01237, 01238, 01239, 01243, 01253, 01263, 01273, 01283, 01293, 01323, 01423, 01523, 01623, 01723, 01823, 01923, 02123, 03123, 04123, 05123, 06123, 07123, 08123, 09123, 10023, 10123, 10203, 10213, 10223, 10230, 10231, 10232, 10233, 10234, 10235, 10236, 10237, 10238, 10239, 10243, 10253, 10263, 10273, 10283, 10293, 10323, 10423, 10523, 10623, 10723, 10823, 10923, 11023, 11123, 11203, 11213, 11223, 11230, 11231, 11232, 11233, 11234, 11235, 11236, 11237, 11238, 11239, 11243, 11253, 11263, 11273, 11283, 11293, 11323, 11423, 11523, 11623, 11723, 11823, 11923, 12003, 12013, 12023, 12030, 12031, 12032, 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12043, 12053, 12063, 12073, 12083, 12093, 12103, 12113, 12123, 12130, 12131, 12132, 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12143, 12153, 12163, 12173, 12183, 12193, 12203, 12213, 12223, 12230, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12243, 12253, 12263, 12273, 12283, 12293, 12300, 12301, 12302, 12303, 12304, 12305, 12306, 12307, 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, 12332, 12333, 12334, 12335, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12403, 12413, 12423, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12443, 12453, 12463, 12473, 12483, 12493, 12503, 12513, 12523, 12530, 12531, 12532, 12533, 12534, 12535, 12536, 12537, 12538, 12539, 12543, 12553, 12563, 12573, 12583, 12593, 12603, 12613, 12623, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12643, 12653, 12663, 12673, 12683, 12693, 12703, 12713, 12723, 12730, 12731, 12732, 12733, 12734, 12735, 12736, 12737, 12738, 12739, 12743, 12753, 12763, 12773, 12783, 12793, 12803, 12813, 12823, 12830, 12831, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12843, 12853, 12863, 12873, 12883, 12893, 12903, 12913, 12923, 12930, 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12938, 12939, 12943, 12953, 12963, 12973, 12983, 12993, 13023, 13123, 13203, 13213, 13223, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13243, 13253, 13263, 13273, 13283, 13293, 13323, 13423, 13523, 13623, 13723, 13823, 13923, 14023, 14123, 14203, 14213, 14223, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14238, 14239, 14243, 14253, 14263, 14273, 14283, 14293, 14323, 14423, 14523, 14623, 14723, 14823, 14923, 15023, 15123, 15203, 15213, 15223, 15230, 15231, 15232, 15233, 15234, 15235, 15236, 15237, 15238, 15239, 15243, 15253, 15263, 15273, 15283, 15293, 15323, 15423, 15523, 15623, 15723, 15823, 15923, 16023, 16123, 16203, 16213, 16223, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16243, 16253, 16263, 16273, 16283, 16293, 16323, 16423, 16523, 16623, 16723, 16823, 16923, 17023, 17123, 17203, 17213, 17223, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17237, 17238, 17239, 17243, 17253, 17263, 17273, 17283, 17293, 17323, 17423, 17523, 17623, 17723, 17823, 17923, 18023, 18123, 18203, 18213, 18223, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18239, 18243, 18253, 18263, 18273, 18283, 18293, 18323, 18423, 18523, 18623, 18723, 18823, 18923, 19023, 19123, 19203, 19213, 19223, 19230, 19231, 19232, 19233, 19234, 19235, 19236, 19237, 19238, 19239, 19243, 19253, 19263, 19273, 19283, 19293, 19323, 19423, 19523, 19623, 19723, 19823, 19923, 20123, 21023, 21123, 21203, 21213, 21223, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21243, 21253, 21263, 21273, 21283, 21293, 21323, 21423, 21523, 21623, 21723, 21823, 21923, 22123, 23123, 24123, 25123, 26123, 27123, 28123, 29123, 30123, 31023, 31123, 31203, 31213, 31223, 31230, 31231, 31232, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31243, 31253, 31263, 31273, 31283, 31293, 31323, 31423, 31523, 31623, 31723, 31823, 31923, 32123, 33123, 34123, 35123, 36123, 37123, 38123, 39123, 40123, 41023, 41123, 41203, 41213, 41223, 41230, 41231, 41232, 41233, 41234, 41235, 41236, 41237, 41238, 41239, 41243, 41253, 41263, 41273, 41283, 41293, 41323, 41423, 41523, 41623, 41723, 41823, 41923, 42123, 43123, 44123, 45123, 46123, 47123, 48123, 49123, 50123, 51023, 51123, 51203, 51213, 51223, 51230, 51231, 51232, 51233, 51234, 51235, 51236, 51237, 51238, 51239, 51243, 51253, 51263, 51273, 51283, 51293, 51323, 51423, 51523, 51623, 51723, 51823, 51923, 52123, 53123, 54123, 55123, 56123, 57123, 58123, 59123, 60123, 61023, 61123, 61203, 61213, 61223, 61230, 61231, 61232, 61233, 61234, 61235, 61236, 61237, 61238, 61239, 61243, 61253, 61263, 61273, 61283, 61293, 61323, 61423, 61523, 61623, 61723, 61823, 61923, 62123, 63123, 64123, 65123, 66123, 67123, 68123, 69123, 70123, 71023, 71123, 71203, 71213, 71223, 71230, 71231, 71232, 71233, 71234, 71235, 71236, 71237, 71238, 71239, 71243, 71253, 71263, 71273, 71283, 71293, 71323, 71423, 71523, 71623, 71723, 71823, 71923, 72123, 73123, 74123, 75123, 76123, 77123, 78123, 79123, 80123, 81023, 81123, 81203, 81213, 81223, 81230, 81231, 81232, 81233, 81234, 81235, 81236, 81237, 81238, 81239, 81243, 81253, 81263, 81273, 81283, 81293, 81323, 81423, 81523, 81623, 81723, 81823, 81923, 82123, 83123, 84123, 85123, 86123, 87123, 88123, 89123, 90123, 91023, 91123, 91203, 91213, 91223, 91230, 91231, 91232, 91233, 91234, 91235, 91236, 91237, 91238, 91239, 91243, 91253, 91263, 91273, 91283, 91293, 91323, 91423, 91523, 91623, 91723, 91823, 91923, 92123, 93123, 94123, 95123, 96123, 97123, 98123, 99123] |
|----------------------|--------------------------------------------|
Rules
- Input is guaranteed non-empty.
- Leading and trailing zeros matter:
01234
is different from12340
, and1234
doesn't crack either password. Think of how real passwords work!
Standard I/O rules apply.- No standard loopholes.
- This is code-golf, so the shortest answer in bytes wins. Non-codegolfing languages are welcome!
code-golf
New contributor
$endgroup$
|
show 12 more comments
$begingroup$
Introduction
In order to prevent keyloggers from stealing a user's password, a certain bank account system has implemented the following security measure: only certain digits are prompted to be entered each time.
For example, say your target's password is 89097
, the system may prompt them to enter the 2nd, 4th and 5th digit:
997
Or it might prompt them to enter the 1st, 3rd and 5th digit:
807
All you know is that your target entered the digits in order, but you don't know which position they belong to in the actual password. All you know is there are two 9s, which must come before 7; and that 8 comes before 0, and 0 before 7. Therefore, there are six possible passwords:
80997
89097
89907
98097
98907
99807
The keylogger in your target's computer has been collecting password inputs for months now, so let's hack in!
Challenge
Given a list of three-digit inputs, output all the possible passwords that are valid for all inputs. In order to reduce computational complexity and to keep the amount of possible results low, the password is guaranteed to be numerical and have a fixed size of 5. The digits in every input are in order: if it's 123, the target typed 1 first, then 2, then 3.
Input/Output examples
|----------------------|--------------------------------------------|
| Input | Output |
|----------------------|--------------------------------------------|
| [320, 723, 730] | [37230, 72320, 73203, 73230] |
| [374, 842] | [37842, 38742, 83742] |
| [010, 103, 301] | [30103] |
| [123, 124, 125, 235] | [12345, 12354, 12435] |
| [239, 944] | [23944] |
| [111, 120] | [11201, 11120, 11210, 12011, 12110, 12101] |
| [456, 789] | [] |
| [756, 586] | [07586, 17586, 27586, 37586, 47586, 57586, 57856, 58756, 67586, 70586, 71586, 72586, 73586, 74586, 75086, 75186, 75286, 75386, 75486, 75586, 75686, 75786, 75806, 75816, 75826, 75836, 75846, 75856, 75860, 75861, 75862, 75863, 75864, 75865, 75866, 75867, 75868, 75869, 75876, 75886, 75896, 75986, 76586, 77586, 78586, 79586, 87586, 97586] |
| [123] | [00123, 01023, 01123, 01203, 01213, 01223, 01230, 01231, 01232, 01233, 01234, 01235, 01236, 01237, 01238, 01239, 01243, 01253, 01263, 01273, 01283, 01293, 01323, 01423, 01523, 01623, 01723, 01823, 01923, 02123, 03123, 04123, 05123, 06123, 07123, 08123, 09123, 10023, 10123, 10203, 10213, 10223, 10230, 10231, 10232, 10233, 10234, 10235, 10236, 10237, 10238, 10239, 10243, 10253, 10263, 10273, 10283, 10293, 10323, 10423, 10523, 10623, 10723, 10823, 10923, 11023, 11123, 11203, 11213, 11223, 11230, 11231, 11232, 11233, 11234, 11235, 11236, 11237, 11238, 11239, 11243, 11253, 11263, 11273, 11283, 11293, 11323, 11423, 11523, 11623, 11723, 11823, 11923, 12003, 12013, 12023, 12030, 12031, 12032, 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12043, 12053, 12063, 12073, 12083, 12093, 12103, 12113, 12123, 12130, 12131, 12132, 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12143, 12153, 12163, 12173, 12183, 12193, 12203, 12213, 12223, 12230, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12243, 12253, 12263, 12273, 12283, 12293, 12300, 12301, 12302, 12303, 12304, 12305, 12306, 12307, 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, 12332, 12333, 12334, 12335, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12403, 12413, 12423, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12443, 12453, 12463, 12473, 12483, 12493, 12503, 12513, 12523, 12530, 12531, 12532, 12533, 12534, 12535, 12536, 12537, 12538, 12539, 12543, 12553, 12563, 12573, 12583, 12593, 12603, 12613, 12623, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12643, 12653, 12663, 12673, 12683, 12693, 12703, 12713, 12723, 12730, 12731, 12732, 12733, 12734, 12735, 12736, 12737, 12738, 12739, 12743, 12753, 12763, 12773, 12783, 12793, 12803, 12813, 12823, 12830, 12831, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12843, 12853, 12863, 12873, 12883, 12893, 12903, 12913, 12923, 12930, 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12938, 12939, 12943, 12953, 12963, 12973, 12983, 12993, 13023, 13123, 13203, 13213, 13223, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13243, 13253, 13263, 13273, 13283, 13293, 13323, 13423, 13523, 13623, 13723, 13823, 13923, 14023, 14123, 14203, 14213, 14223, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14238, 14239, 14243, 14253, 14263, 14273, 14283, 14293, 14323, 14423, 14523, 14623, 14723, 14823, 14923, 15023, 15123, 15203, 15213, 15223, 15230, 15231, 15232, 15233, 15234, 15235, 15236, 15237, 15238, 15239, 15243, 15253, 15263, 15273, 15283, 15293, 15323, 15423, 15523, 15623, 15723, 15823, 15923, 16023, 16123, 16203, 16213, 16223, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16243, 16253, 16263, 16273, 16283, 16293, 16323, 16423, 16523, 16623, 16723, 16823, 16923, 17023, 17123, 17203, 17213, 17223, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17237, 17238, 17239, 17243, 17253, 17263, 17273, 17283, 17293, 17323, 17423, 17523, 17623, 17723, 17823, 17923, 18023, 18123, 18203, 18213, 18223, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18239, 18243, 18253, 18263, 18273, 18283, 18293, 18323, 18423, 18523, 18623, 18723, 18823, 18923, 19023, 19123, 19203, 19213, 19223, 19230, 19231, 19232, 19233, 19234, 19235, 19236, 19237, 19238, 19239, 19243, 19253, 19263, 19273, 19283, 19293, 19323, 19423, 19523, 19623, 19723, 19823, 19923, 20123, 21023, 21123, 21203, 21213, 21223, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21243, 21253, 21263, 21273, 21283, 21293, 21323, 21423, 21523, 21623, 21723, 21823, 21923, 22123, 23123, 24123, 25123, 26123, 27123, 28123, 29123, 30123, 31023, 31123, 31203, 31213, 31223, 31230, 31231, 31232, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31243, 31253, 31263, 31273, 31283, 31293, 31323, 31423, 31523, 31623, 31723, 31823, 31923, 32123, 33123, 34123, 35123, 36123, 37123, 38123, 39123, 40123, 41023, 41123, 41203, 41213, 41223, 41230, 41231, 41232, 41233, 41234, 41235, 41236, 41237, 41238, 41239, 41243, 41253, 41263, 41273, 41283, 41293, 41323, 41423, 41523, 41623, 41723, 41823, 41923, 42123, 43123, 44123, 45123, 46123, 47123, 48123, 49123, 50123, 51023, 51123, 51203, 51213, 51223, 51230, 51231, 51232, 51233, 51234, 51235, 51236, 51237, 51238, 51239, 51243, 51253, 51263, 51273, 51283, 51293, 51323, 51423, 51523, 51623, 51723, 51823, 51923, 52123, 53123, 54123, 55123, 56123, 57123, 58123, 59123, 60123, 61023, 61123, 61203, 61213, 61223, 61230, 61231, 61232, 61233, 61234, 61235, 61236, 61237, 61238, 61239, 61243, 61253, 61263, 61273, 61283, 61293, 61323, 61423, 61523, 61623, 61723, 61823, 61923, 62123, 63123, 64123, 65123, 66123, 67123, 68123, 69123, 70123, 71023, 71123, 71203, 71213, 71223, 71230, 71231, 71232, 71233, 71234, 71235, 71236, 71237, 71238, 71239, 71243, 71253, 71263, 71273, 71283, 71293, 71323, 71423, 71523, 71623, 71723, 71823, 71923, 72123, 73123, 74123, 75123, 76123, 77123, 78123, 79123, 80123, 81023, 81123, 81203, 81213, 81223, 81230, 81231, 81232, 81233, 81234, 81235, 81236, 81237, 81238, 81239, 81243, 81253, 81263, 81273, 81283, 81293, 81323, 81423, 81523, 81623, 81723, 81823, 81923, 82123, 83123, 84123, 85123, 86123, 87123, 88123, 89123, 90123, 91023, 91123, 91203, 91213, 91223, 91230, 91231, 91232, 91233, 91234, 91235, 91236, 91237, 91238, 91239, 91243, 91253, 91263, 91273, 91283, 91293, 91323, 91423, 91523, 91623, 91723, 91823, 91923, 92123, 93123, 94123, 95123, 96123, 97123, 98123, 99123] |
|----------------------|--------------------------------------------|
Rules
- Input is guaranteed non-empty.
- Leading and trailing zeros matter:
01234
is different from12340
, and1234
doesn't crack either password. Think of how real passwords work!
Standard I/O rules apply.- No standard loopholes.
- This is code-golf, so the shortest answer in bytes wins. Non-codegolfing languages are welcome!
code-golf
New contributor
$endgroup$
5
$begingroup$
Are the digits always in order? Based on the test cases I assume they are, but I couldn't see it mentioned in the rules unless I read past it.
$endgroup$
– Kevin Cruijssen
2 days ago
13
$begingroup$
Welcome to PPCG! This is a nice, well-structured, and neatly formatted first challenge. You've clearly done your homework as far as getting that all down. I'm looking forward to answering it (if someone doesn't answer it in R first!). In the future, we suggest using the sandbox to get feedback before posting to main. Hope you enjoy your time on PPCG!
$endgroup$
– Giuseppe
2 days ago
1
$begingroup$
@Giuseppe thanks! I've been anonymously reading the questions on this site for years, and I've been writing and tweaking and actually solving this specific problem for a couple months: I liked it enough to skip the sandbox. I'll post there first next time!
$endgroup$
– cefel
2 days ago
2
$begingroup$
@Arnauld Well, if your password is 01234 or 12340 you shouldn't be able to log in by typing 1234. Passwords are more a string than a number even if composed by numbers, at least in that sense. So yes, leading and trailing zeros are mandatory.
$endgroup$
– cefel
2 days ago
2
$begingroup$
The final test case appears to be missing 22123... unless I'm misunderstanding something?
$endgroup$
– Jonah
2 days ago
|
show 12 more comments
$begingroup$
Introduction
In order to prevent keyloggers from stealing a user's password, a certain bank account system has implemented the following security measure: only certain digits are prompted to be entered each time.
For example, say your target's password is 89097
, the system may prompt them to enter the 2nd, 4th and 5th digit:
997
Or it might prompt them to enter the 1st, 3rd and 5th digit:
807
All you know is that your target entered the digits in order, but you don't know which position they belong to in the actual password. All you know is there are two 9s, which must come before 7; and that 8 comes before 0, and 0 before 7. Therefore, there are six possible passwords:
80997
89097
89907
98097
98907
99807
The keylogger in your target's computer has been collecting password inputs for months now, so let's hack in!
Challenge
Given a list of three-digit inputs, output all the possible passwords that are valid for all inputs. In order to reduce computational complexity and to keep the amount of possible results low, the password is guaranteed to be numerical and have a fixed size of 5. The digits in every input are in order: if it's 123, the target typed 1 first, then 2, then 3.
Input/Output examples
|----------------------|--------------------------------------------|
| Input | Output |
|----------------------|--------------------------------------------|
| [320, 723, 730] | [37230, 72320, 73203, 73230] |
| [374, 842] | [37842, 38742, 83742] |
| [010, 103, 301] | [30103] |
| [123, 124, 125, 235] | [12345, 12354, 12435] |
| [239, 944] | [23944] |
| [111, 120] | [11201, 11120, 11210, 12011, 12110, 12101] |
| [456, 789] | [] |
| [756, 586] | [07586, 17586, 27586, 37586, 47586, 57586, 57856, 58756, 67586, 70586, 71586, 72586, 73586, 74586, 75086, 75186, 75286, 75386, 75486, 75586, 75686, 75786, 75806, 75816, 75826, 75836, 75846, 75856, 75860, 75861, 75862, 75863, 75864, 75865, 75866, 75867, 75868, 75869, 75876, 75886, 75896, 75986, 76586, 77586, 78586, 79586, 87586, 97586] |
| [123] | [00123, 01023, 01123, 01203, 01213, 01223, 01230, 01231, 01232, 01233, 01234, 01235, 01236, 01237, 01238, 01239, 01243, 01253, 01263, 01273, 01283, 01293, 01323, 01423, 01523, 01623, 01723, 01823, 01923, 02123, 03123, 04123, 05123, 06123, 07123, 08123, 09123, 10023, 10123, 10203, 10213, 10223, 10230, 10231, 10232, 10233, 10234, 10235, 10236, 10237, 10238, 10239, 10243, 10253, 10263, 10273, 10283, 10293, 10323, 10423, 10523, 10623, 10723, 10823, 10923, 11023, 11123, 11203, 11213, 11223, 11230, 11231, 11232, 11233, 11234, 11235, 11236, 11237, 11238, 11239, 11243, 11253, 11263, 11273, 11283, 11293, 11323, 11423, 11523, 11623, 11723, 11823, 11923, 12003, 12013, 12023, 12030, 12031, 12032, 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12043, 12053, 12063, 12073, 12083, 12093, 12103, 12113, 12123, 12130, 12131, 12132, 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12143, 12153, 12163, 12173, 12183, 12193, 12203, 12213, 12223, 12230, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12243, 12253, 12263, 12273, 12283, 12293, 12300, 12301, 12302, 12303, 12304, 12305, 12306, 12307, 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, 12332, 12333, 12334, 12335, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12403, 12413, 12423, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12443, 12453, 12463, 12473, 12483, 12493, 12503, 12513, 12523, 12530, 12531, 12532, 12533, 12534, 12535, 12536, 12537, 12538, 12539, 12543, 12553, 12563, 12573, 12583, 12593, 12603, 12613, 12623, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12643, 12653, 12663, 12673, 12683, 12693, 12703, 12713, 12723, 12730, 12731, 12732, 12733, 12734, 12735, 12736, 12737, 12738, 12739, 12743, 12753, 12763, 12773, 12783, 12793, 12803, 12813, 12823, 12830, 12831, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12843, 12853, 12863, 12873, 12883, 12893, 12903, 12913, 12923, 12930, 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12938, 12939, 12943, 12953, 12963, 12973, 12983, 12993, 13023, 13123, 13203, 13213, 13223, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13243, 13253, 13263, 13273, 13283, 13293, 13323, 13423, 13523, 13623, 13723, 13823, 13923, 14023, 14123, 14203, 14213, 14223, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14238, 14239, 14243, 14253, 14263, 14273, 14283, 14293, 14323, 14423, 14523, 14623, 14723, 14823, 14923, 15023, 15123, 15203, 15213, 15223, 15230, 15231, 15232, 15233, 15234, 15235, 15236, 15237, 15238, 15239, 15243, 15253, 15263, 15273, 15283, 15293, 15323, 15423, 15523, 15623, 15723, 15823, 15923, 16023, 16123, 16203, 16213, 16223, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16243, 16253, 16263, 16273, 16283, 16293, 16323, 16423, 16523, 16623, 16723, 16823, 16923, 17023, 17123, 17203, 17213, 17223, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17237, 17238, 17239, 17243, 17253, 17263, 17273, 17283, 17293, 17323, 17423, 17523, 17623, 17723, 17823, 17923, 18023, 18123, 18203, 18213, 18223, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18239, 18243, 18253, 18263, 18273, 18283, 18293, 18323, 18423, 18523, 18623, 18723, 18823, 18923, 19023, 19123, 19203, 19213, 19223, 19230, 19231, 19232, 19233, 19234, 19235, 19236, 19237, 19238, 19239, 19243, 19253, 19263, 19273, 19283, 19293, 19323, 19423, 19523, 19623, 19723, 19823, 19923, 20123, 21023, 21123, 21203, 21213, 21223, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21243, 21253, 21263, 21273, 21283, 21293, 21323, 21423, 21523, 21623, 21723, 21823, 21923, 22123, 23123, 24123, 25123, 26123, 27123, 28123, 29123, 30123, 31023, 31123, 31203, 31213, 31223, 31230, 31231, 31232, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31243, 31253, 31263, 31273, 31283, 31293, 31323, 31423, 31523, 31623, 31723, 31823, 31923, 32123, 33123, 34123, 35123, 36123, 37123, 38123, 39123, 40123, 41023, 41123, 41203, 41213, 41223, 41230, 41231, 41232, 41233, 41234, 41235, 41236, 41237, 41238, 41239, 41243, 41253, 41263, 41273, 41283, 41293, 41323, 41423, 41523, 41623, 41723, 41823, 41923, 42123, 43123, 44123, 45123, 46123, 47123, 48123, 49123, 50123, 51023, 51123, 51203, 51213, 51223, 51230, 51231, 51232, 51233, 51234, 51235, 51236, 51237, 51238, 51239, 51243, 51253, 51263, 51273, 51283, 51293, 51323, 51423, 51523, 51623, 51723, 51823, 51923, 52123, 53123, 54123, 55123, 56123, 57123, 58123, 59123, 60123, 61023, 61123, 61203, 61213, 61223, 61230, 61231, 61232, 61233, 61234, 61235, 61236, 61237, 61238, 61239, 61243, 61253, 61263, 61273, 61283, 61293, 61323, 61423, 61523, 61623, 61723, 61823, 61923, 62123, 63123, 64123, 65123, 66123, 67123, 68123, 69123, 70123, 71023, 71123, 71203, 71213, 71223, 71230, 71231, 71232, 71233, 71234, 71235, 71236, 71237, 71238, 71239, 71243, 71253, 71263, 71273, 71283, 71293, 71323, 71423, 71523, 71623, 71723, 71823, 71923, 72123, 73123, 74123, 75123, 76123, 77123, 78123, 79123, 80123, 81023, 81123, 81203, 81213, 81223, 81230, 81231, 81232, 81233, 81234, 81235, 81236, 81237, 81238, 81239, 81243, 81253, 81263, 81273, 81283, 81293, 81323, 81423, 81523, 81623, 81723, 81823, 81923, 82123, 83123, 84123, 85123, 86123, 87123, 88123, 89123, 90123, 91023, 91123, 91203, 91213, 91223, 91230, 91231, 91232, 91233, 91234, 91235, 91236, 91237, 91238, 91239, 91243, 91253, 91263, 91273, 91283, 91293, 91323, 91423, 91523, 91623, 91723, 91823, 91923, 92123, 93123, 94123, 95123, 96123, 97123, 98123, 99123] |
|----------------------|--------------------------------------------|
Rules
- Input is guaranteed non-empty.
- Leading and trailing zeros matter:
01234
is different from12340
, and1234
doesn't crack either password. Think of how real passwords work!
Standard I/O rules apply.- No standard loopholes.
- This is code-golf, so the shortest answer in bytes wins. Non-codegolfing languages are welcome!
code-golf
New contributor
$endgroup$
Introduction
In order to prevent keyloggers from stealing a user's password, a certain bank account system has implemented the following security measure: only certain digits are prompted to be entered each time.
For example, say your target's password is 89097
, the system may prompt them to enter the 2nd, 4th and 5th digit:
997
Or it might prompt them to enter the 1st, 3rd and 5th digit:
807
All you know is that your target entered the digits in order, but you don't know which position they belong to in the actual password. All you know is there are two 9s, which must come before 7; and that 8 comes before 0, and 0 before 7. Therefore, there are six possible passwords:
80997
89097
89907
98097
98907
99807
The keylogger in your target's computer has been collecting password inputs for months now, so let's hack in!
Challenge
Given a list of three-digit inputs, output all the possible passwords that are valid for all inputs. In order to reduce computational complexity and to keep the amount of possible results low, the password is guaranteed to be numerical and have a fixed size of 5. The digits in every input are in order: if it's 123, the target typed 1 first, then 2, then 3.
Input/Output examples
|----------------------|--------------------------------------------|
| Input | Output |
|----------------------|--------------------------------------------|
| [320, 723, 730] | [37230, 72320, 73203, 73230] |
| [374, 842] | [37842, 38742, 83742] |
| [010, 103, 301] | [30103] |
| [123, 124, 125, 235] | [12345, 12354, 12435] |
| [239, 944] | [23944] |
| [111, 120] | [11201, 11120, 11210, 12011, 12110, 12101] |
| [456, 789] | [] |
| [756, 586] | [07586, 17586, 27586, 37586, 47586, 57586, 57856, 58756, 67586, 70586, 71586, 72586, 73586, 74586, 75086, 75186, 75286, 75386, 75486, 75586, 75686, 75786, 75806, 75816, 75826, 75836, 75846, 75856, 75860, 75861, 75862, 75863, 75864, 75865, 75866, 75867, 75868, 75869, 75876, 75886, 75896, 75986, 76586, 77586, 78586, 79586, 87586, 97586] |
| [123] | [00123, 01023, 01123, 01203, 01213, 01223, 01230, 01231, 01232, 01233, 01234, 01235, 01236, 01237, 01238, 01239, 01243, 01253, 01263, 01273, 01283, 01293, 01323, 01423, 01523, 01623, 01723, 01823, 01923, 02123, 03123, 04123, 05123, 06123, 07123, 08123, 09123, 10023, 10123, 10203, 10213, 10223, 10230, 10231, 10232, 10233, 10234, 10235, 10236, 10237, 10238, 10239, 10243, 10253, 10263, 10273, 10283, 10293, 10323, 10423, 10523, 10623, 10723, 10823, 10923, 11023, 11123, 11203, 11213, 11223, 11230, 11231, 11232, 11233, 11234, 11235, 11236, 11237, 11238, 11239, 11243, 11253, 11263, 11273, 11283, 11293, 11323, 11423, 11523, 11623, 11723, 11823, 11923, 12003, 12013, 12023, 12030, 12031, 12032, 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12043, 12053, 12063, 12073, 12083, 12093, 12103, 12113, 12123, 12130, 12131, 12132, 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12143, 12153, 12163, 12173, 12183, 12193, 12203, 12213, 12223, 12230, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12243, 12253, 12263, 12273, 12283, 12293, 12300, 12301, 12302, 12303, 12304, 12305, 12306, 12307, 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, 12332, 12333, 12334, 12335, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12403, 12413, 12423, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12443, 12453, 12463, 12473, 12483, 12493, 12503, 12513, 12523, 12530, 12531, 12532, 12533, 12534, 12535, 12536, 12537, 12538, 12539, 12543, 12553, 12563, 12573, 12583, 12593, 12603, 12613, 12623, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12643, 12653, 12663, 12673, 12683, 12693, 12703, 12713, 12723, 12730, 12731, 12732, 12733, 12734, 12735, 12736, 12737, 12738, 12739, 12743, 12753, 12763, 12773, 12783, 12793, 12803, 12813, 12823, 12830, 12831, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12843, 12853, 12863, 12873, 12883, 12893, 12903, 12913, 12923, 12930, 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12938, 12939, 12943, 12953, 12963, 12973, 12983, 12993, 13023, 13123, 13203, 13213, 13223, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13243, 13253, 13263, 13273, 13283, 13293, 13323, 13423, 13523, 13623, 13723, 13823, 13923, 14023, 14123, 14203, 14213, 14223, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14238, 14239, 14243, 14253, 14263, 14273, 14283, 14293, 14323, 14423, 14523, 14623, 14723, 14823, 14923, 15023, 15123, 15203, 15213, 15223, 15230, 15231, 15232, 15233, 15234, 15235, 15236, 15237, 15238, 15239, 15243, 15253, 15263, 15273, 15283, 15293, 15323, 15423, 15523, 15623, 15723, 15823, 15923, 16023, 16123, 16203, 16213, 16223, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16243, 16253, 16263, 16273, 16283, 16293, 16323, 16423, 16523, 16623, 16723, 16823, 16923, 17023, 17123, 17203, 17213, 17223, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17237, 17238, 17239, 17243, 17253, 17263, 17273, 17283, 17293, 17323, 17423, 17523, 17623, 17723, 17823, 17923, 18023, 18123, 18203, 18213, 18223, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18239, 18243, 18253, 18263, 18273, 18283, 18293, 18323, 18423, 18523, 18623, 18723, 18823, 18923, 19023, 19123, 19203, 19213, 19223, 19230, 19231, 19232, 19233, 19234, 19235, 19236, 19237, 19238, 19239, 19243, 19253, 19263, 19273, 19283, 19293, 19323, 19423, 19523, 19623, 19723, 19823, 19923, 20123, 21023, 21123, 21203, 21213, 21223, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21243, 21253, 21263, 21273, 21283, 21293, 21323, 21423, 21523, 21623, 21723, 21823, 21923, 22123, 23123, 24123, 25123, 26123, 27123, 28123, 29123, 30123, 31023, 31123, 31203, 31213, 31223, 31230, 31231, 31232, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31243, 31253, 31263, 31273, 31283, 31293, 31323, 31423, 31523, 31623, 31723, 31823, 31923, 32123, 33123, 34123, 35123, 36123, 37123, 38123, 39123, 40123, 41023, 41123, 41203, 41213, 41223, 41230, 41231, 41232, 41233, 41234, 41235, 41236, 41237, 41238, 41239, 41243, 41253, 41263, 41273, 41283, 41293, 41323, 41423, 41523, 41623, 41723, 41823, 41923, 42123, 43123, 44123, 45123, 46123, 47123, 48123, 49123, 50123, 51023, 51123, 51203, 51213, 51223, 51230, 51231, 51232, 51233, 51234, 51235, 51236, 51237, 51238, 51239, 51243, 51253, 51263, 51273, 51283, 51293, 51323, 51423, 51523, 51623, 51723, 51823, 51923, 52123, 53123, 54123, 55123, 56123, 57123, 58123, 59123, 60123, 61023, 61123, 61203, 61213, 61223, 61230, 61231, 61232, 61233, 61234, 61235, 61236, 61237, 61238, 61239, 61243, 61253, 61263, 61273, 61283, 61293, 61323, 61423, 61523, 61623, 61723, 61823, 61923, 62123, 63123, 64123, 65123, 66123, 67123, 68123, 69123, 70123, 71023, 71123, 71203, 71213, 71223, 71230, 71231, 71232, 71233, 71234, 71235, 71236, 71237, 71238, 71239, 71243, 71253, 71263, 71273, 71283, 71293, 71323, 71423, 71523, 71623, 71723, 71823, 71923, 72123, 73123, 74123, 75123, 76123, 77123, 78123, 79123, 80123, 81023, 81123, 81203, 81213, 81223, 81230, 81231, 81232, 81233, 81234, 81235, 81236, 81237, 81238, 81239, 81243, 81253, 81263, 81273, 81283, 81293, 81323, 81423, 81523, 81623, 81723, 81823, 81923, 82123, 83123, 84123, 85123, 86123, 87123, 88123, 89123, 90123, 91023, 91123, 91203, 91213, 91223, 91230, 91231, 91232, 91233, 91234, 91235, 91236, 91237, 91238, 91239, 91243, 91253, 91263, 91273, 91283, 91293, 91323, 91423, 91523, 91623, 91723, 91823, 91923, 92123, 93123, 94123, 95123, 96123, 97123, 98123, 99123] |
|----------------------|--------------------------------------------|
Rules
- Input is guaranteed non-empty.
- Leading and trailing zeros matter:
01234
is different from12340
, and1234
doesn't crack either password. Think of how real passwords work!
Standard I/O rules apply.- No standard loopholes.
- This is code-golf, so the shortest answer in bytes wins. Non-codegolfing languages are welcome!
code-golf
code-golf
New contributor
New contributor
edited yesterday
Hat
355
355
New contributor
asked 2 days ago
cefelcefel
36128
36128
New contributor
New contributor
5
$begingroup$
Are the digits always in order? Based on the test cases I assume they are, but I couldn't see it mentioned in the rules unless I read past it.
$endgroup$
– Kevin Cruijssen
2 days ago
13
$begingroup$
Welcome to PPCG! This is a nice, well-structured, and neatly formatted first challenge. You've clearly done your homework as far as getting that all down. I'm looking forward to answering it (if someone doesn't answer it in R first!). In the future, we suggest using the sandbox to get feedback before posting to main. Hope you enjoy your time on PPCG!
$endgroup$
– Giuseppe
2 days ago
1
$begingroup$
@Giuseppe thanks! I've been anonymously reading the questions on this site for years, and I've been writing and tweaking and actually solving this specific problem for a couple months: I liked it enough to skip the sandbox. I'll post there first next time!
$endgroup$
– cefel
2 days ago
2
$begingroup$
@Arnauld Well, if your password is 01234 or 12340 you shouldn't be able to log in by typing 1234. Passwords are more a string than a number even if composed by numbers, at least in that sense. So yes, leading and trailing zeros are mandatory.
$endgroup$
– cefel
2 days ago
2
$begingroup$
The final test case appears to be missing 22123... unless I'm misunderstanding something?
$endgroup$
– Jonah
2 days ago
|
show 12 more comments
5
$begingroup$
Are the digits always in order? Based on the test cases I assume they are, but I couldn't see it mentioned in the rules unless I read past it.
$endgroup$
– Kevin Cruijssen
2 days ago
13
$begingroup$
Welcome to PPCG! This is a nice, well-structured, and neatly formatted first challenge. You've clearly done your homework as far as getting that all down. I'm looking forward to answering it (if someone doesn't answer it in R first!). In the future, we suggest using the sandbox to get feedback before posting to main. Hope you enjoy your time on PPCG!
$endgroup$
– Giuseppe
2 days ago
1
$begingroup$
@Giuseppe thanks! I've been anonymously reading the questions on this site for years, and I've been writing and tweaking and actually solving this specific problem for a couple months: I liked it enough to skip the sandbox. I'll post there first next time!
$endgroup$
– cefel
2 days ago
2
$begingroup$
@Arnauld Well, if your password is 01234 or 12340 you shouldn't be able to log in by typing 1234. Passwords are more a string than a number even if composed by numbers, at least in that sense. So yes, leading and trailing zeros are mandatory.
$endgroup$
– cefel
2 days ago
2
$begingroup$
The final test case appears to be missing 22123... unless I'm misunderstanding something?
$endgroup$
– Jonah
2 days ago
5
5
$begingroup$
Are the digits always in order? Based on the test cases I assume they are, but I couldn't see it mentioned in the rules unless I read past it.
$endgroup$
– Kevin Cruijssen
2 days ago
$begingroup$
Are the digits always in order? Based on the test cases I assume they are, but I couldn't see it mentioned in the rules unless I read past it.
$endgroup$
– Kevin Cruijssen
2 days ago
13
13
$begingroup$
Welcome to PPCG! This is a nice, well-structured, and neatly formatted first challenge. You've clearly done your homework as far as getting that all down. I'm looking forward to answering it (if someone doesn't answer it in R first!). In the future, we suggest using the sandbox to get feedback before posting to main. Hope you enjoy your time on PPCG!
$endgroup$
– Giuseppe
2 days ago
$begingroup$
Welcome to PPCG! This is a nice, well-structured, and neatly formatted first challenge. You've clearly done your homework as far as getting that all down. I'm looking forward to answering it (if someone doesn't answer it in R first!). In the future, we suggest using the sandbox to get feedback before posting to main. Hope you enjoy your time on PPCG!
$endgroup$
– Giuseppe
2 days ago
1
1
$begingroup$
@Giuseppe thanks! I've been anonymously reading the questions on this site for years, and I've been writing and tweaking and actually solving this specific problem for a couple months: I liked it enough to skip the sandbox. I'll post there first next time!
$endgroup$
– cefel
2 days ago
$begingroup$
@Giuseppe thanks! I've been anonymously reading the questions on this site for years, and I've been writing and tweaking and actually solving this specific problem for a couple months: I liked it enough to skip the sandbox. I'll post there first next time!
$endgroup$
– cefel
2 days ago
2
2
$begingroup$
@Arnauld Well, if your password is 01234 or 12340 you shouldn't be able to log in by typing 1234. Passwords are more a string than a number even if composed by numbers, at least in that sense. So yes, leading and trailing zeros are mandatory.
$endgroup$
– cefel
2 days ago
$begingroup$
@Arnauld Well, if your password is 01234 or 12340 you shouldn't be able to log in by typing 1234. Passwords are more a string than a number even if composed by numbers, at least in that sense. So yes, leading and trailing zeros are mandatory.
$endgroup$
– cefel
2 days ago
2
2
$begingroup$
The final test case appears to be missing 22123... unless I'm misunderstanding something?
$endgroup$
– Jonah
2 days ago
$begingroup$
The final test case appears to be missing 22123... unless I'm misunderstanding something?
$endgroup$
– Jonah
2 days ago
|
show 12 more comments
17 Answers
17
active
oldest
votes
$begingroup$
Python, 101 bytes
lambda e:['%05d'%i for i in range(10**5)if all(re.search('.*'.join(x),'%05d'%i)for x in e)]
import re
Try it online! Works in Python 2 as well as Python 3.
(97 bytes in Python 3.8:)
lambda e:[p for i in range(10**5)if all(re.search('.*'.join(x),p:='%05d'%i)for x in e)]
import re
$endgroup$
1
$begingroup$
This is a lovely solution...
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
05AB1E, 11 9 bytes
žh5ãʒæIåP
Try it online!
Explanation
žh # push 0123456789
5ã # 5 times cartesian product
ʒ # filter, keep only values are true under:
æ # powerset of value
Iå # check if each of the input values are in this list
P # product
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 88 bytes
Prints the results with alert()
.
a=>{for(k=n=1e5;n--;)a.every(x=>(s=([k]+n).slice(-5)).match([...x].join`.*`))&&alert(s)}
Try it online!
Commented
a => { // a[] = input array of 3-character strings
for(k = n = 1e5; n--;) // initialize k to 100000; for n = 99999 to 0:
a.every(x => // for each string x = 'XYZ' in a[]:
( s = // define s as the concatenation of
([k] + n) // '100000' and n; e.g. '100000' + 1337 -> '1000001337'
.slice(-5) // keep the last 5 digits; e.g. '01337'
).match( // test whether this string is matching
[...x].join`.*` // the pattern /X.*Y.*Z/
) //
) && // end of every(); if all tests were successful:
alert(s) // output s
} //
$endgroup$
add a comment |
$begingroup$
Haskell, 81 80 78 76 bytes
f x=[p|p<-mapM(:['1'..'9'])"00000",all(`elem`(concat.words<$>mapM(:" ")p))x]
The obvious brute force approach in Haskell: built a list of all possible passwords and keep those where all elements from the input list are in respective list of subsequences.
Try it online!
Edit: -1 byte thanks to @xnor, -2 -4 bytes thanks to @H.PWiz
$endgroup$
1
$begingroup$
Looks like you can compute the subseqs yourself a little shorter.
$endgroup$
– xnor
yesterday
1
$begingroup$
concat.words<$>mapM(:" ")p
is shorter
$endgroup$
– H.PWiz
yesterday
2
$begingroup$
usep<-mapM(:['1'..'9'])"00000"
to save 2 more bytes
$endgroup$
– H.PWiz
12 hours ago
add a comment |
$begingroup$
Jelly, 11 bytes
9Żṗ5ŒPiⱮẠɗƇ
Try it online!
$endgroup$
add a comment |
$begingroup$
Pyth, 11 bytes
f<QyT^s`MT5
Takes input as a set of strings.
Try it here
Explanation
f<QyT^s`MT5
s`MT Take the digits as a string.
^ 5 Take the Cartesian product with itself 5 times.
f T Filter the ones...
<Qy ... where the input is a subset of the power set.
$endgroup$
add a comment |
$begingroup$
Ruby, 54 bytes
->a{(?0*5..?9*5).select{|x|a.all?{|y|x=~/#{y*'.*'}/}}}
Try it online!
Takes input as an arrray of character arrays.
$endgroup$
$begingroup$
Well done! You beat me by 25 bytes. Should I delete my answer?
$endgroup$
– Eric Duminil
2 days ago
1
$begingroup$
No, as long as you have a valid answer, there's no need to delete it.
$endgroup$
– Kirill L.
2 days ago
add a comment |
$begingroup$
Python 3, 98 bytes
f=lambda l,s='':any(l)or print(s)if s[4:]else[f([x[x[:1]==c:]for x in l],s+c)for c in'0123456789']
Try it online!
Recursively tries building every five-digit number string in s
, tracking the subsequences in l
still remaining to be hit. If all are empty by the end, prints the result.
Python 3.8 (pre-release), 94 bytes
lambda l:[s for n in range(10**5)if all(''in[x:=x[x[:1]==c:]for c in(s:='%05d'%n)]for x in l)]
Try it online!
Behold the power of assignment expressions!. Uses the method from here for checking subsequences.
$endgroup$
add a comment |
$begingroup$
Perl 5 -a
, 80 bytes
map{s||($t=0)x(5-y///c)|e;for$b(map s//.*/gr,@F){/$b/&&$t++}$t==@F&&say}0..99999
Try it online!
$endgroup$
1
$begingroup$
$t+=/$b/
instead of/$b/&&$t++
$endgroup$
– Nahuel Fouilleul
2 days ago
add a comment |
$begingroup$
Retina, 53 bytes
~(`
.$*
m`^
G`
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Try it online! Explanation:
~(`
After executing the script, take the result as a new script, and execute that, too.
.$*
Insert .*
everywhere. This results in .*3.*2.*0.*
although we only need 3.*2.*0
, not that it matters.
m`^
G`
Insert a G`
at the start of each line. This turns it into a Retina Grep command.
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Prefix two more Retina commands. The resulting script will therefore look something like this:
K`
Clear the buffer (which contains the original input).
5+
Repeat 5 times...
%`$
... append to each line...
0$"1$"2$"3$"4$"5$"6$"7$"8$"9
... the digit 0
, then a copy of the line, then the digit 1
, etc. until 9
. This means that after n
loops you will have all n
-digit numbers.
G`.*3.*2.*0.*
G`.*7.*2.*3.*
G`.*7.*3.*0.*
Filter out the possible numbers based on the input.
$endgroup$
add a comment |
$begingroup$
R, 80 82 bytes
Reduce(intersect,lapply(gsub("",".*",scan(,"")),grep,sprintf("%05d",0:99999),v=T))
Here’s a base R solution using regex. Writing this nested series of functions made me realise how much I’ve learned to appreciate the magrittr package!
Initially hadn’t read rules on input, so now reads from stdin (thanks @KirillL).
Try it online!
$endgroup$
$begingroup$
@digEmAll it says it’s 82 bytes doesn’t it? You can’t use integers because of potential for leading zeroes in the input.
$endgroup$
– Nick Kennedy
yesterday
$begingroup$
Sorry, I read the title and unconsciously I picked the minimum number without noticing that it was strikedthrough... and yes, sorry again you're right about the string input ;)
$endgroup$
– digEmAll
yesterday
add a comment |
$begingroup$
Ruby, 79 77 bytes
->x{(0...1e5).map{|i|'%05d'%i}.select{|i|x.all?{|c|i=~/#{c.gsub('','.*')}/}}}
Try it online!
Input is an array of strings.
Here's a more readable version of the same code:
def f(codes)
(0...10**5).map{|i| '%05d'%i}.select do |i|
codes.all? do |code|
i =~ Regexp.new(code.chars.join('.*'))
end
end
end
$endgroup$
$begingroup$
BTW, your approach can also be made shorter by switching to char array input, as in my version, and -2 more bytes by formatting the upper value as1e5
, like this
$endgroup$
– Kirill L.
2 days ago
$begingroup$
@KirillL. Thanks for the -2 bytes. I won't change the input format because my answer would look too much like yours. Cheers!
$endgroup$
– Eric Duminil
2 days ago
add a comment |
$begingroup$
J, 52 bytes
(>,{;^:4~i.10)([#~]*/@e."2((#~3=+/"1)#:i.32)#"_ 1[)]
Try it online!
$endgroup$
add a comment |
$begingroup$
PHP 128 bytes
for(;$i++<1e5;$k>$argc||print$s)for($k=0;$n=$argv[++$k];)preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i-1))||$k=$argc;
or
for(;$i<1e5;$i+=$k<$argc||print$s)for($k=0;$n=$argv[++$k];)if(!preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i)))break;
take input from command line arguments. Run with -nr
or try them online.
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 111 bytes
x=>{for(int i=0;i<1e5;){var s=$"{i++:D5}";if(x.All(t=>t.Aggregate(0,(a,c)=>a<0?a:s.IndexOf(c,a))>0))Print(s);}}
Try it online!
// x: input list of strings
x=>{
// generate all numbers under 100k
for(int i=0;i<1e5;){
// convert the current number to
// a 5 digit string padded with 0's
var s=$"{i++:D5}";
// test all inputs against the 5 digit
// string using an aggregate.
// each step of the aggregate gets
// the index of the next occurrence
// of the current character starting
// at the previously found character.
// a negative index indicates error.
if(x.All(t=>t
.Aggregate(0,(a,c)=>
a<0
?a
:s.IndexOf(c,a))>0))
// output to STDOUT
Print(s);
}
}
$endgroup$
add a comment |
$begingroup$
Japt, 23 bytes
1e5o ù'0 fA{Ue@AèXË+".*
Try it!
1e5o ù'0 fA{Ue@AèXË+".* # full program
1e5o # generate numbers under 100k
ù'0 # left pad with 0's
fA{ # filter array
Ue@ # check every element of input array
Aè # A is the number to be tested.
# test it against a regex.
Ë+".* # the regex is an element from the input array
# with wildcards injected between each character
$endgroup$
$begingroup$
less useless variables:1e5o ù'0 fA{Ue@AèX®+".*
:P
$endgroup$
– ASCII-only
7 hours ago
$begingroup$
also 23:1e5o ù'0 fA{Ue@AèX¬q".*
$endgroup$
– ASCII-only
6 hours ago
$begingroup$
21 bytes
$endgroup$
– Shaggy
1 hour ago
add a comment |
$begingroup$
Clean, 113 bytes
import StdEnv,Data.List
$l=[s\s<-iter 5(p=[[c:e]\e<-p,c<-['0'..'9']])[[]]|all(flip any(subsequences s)o(==))l]
Try it online!
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "200"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
cefel is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f180243%2fcrack-the-bank-accounts-password%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
17 Answers
17
active
oldest
votes
17 Answers
17
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Python, 101 bytes
lambda e:['%05d'%i for i in range(10**5)if all(re.search('.*'.join(x),'%05d'%i)for x in e)]
import re
Try it online! Works in Python 2 as well as Python 3.
(97 bytes in Python 3.8:)
lambda e:[p for i in range(10**5)if all(re.search('.*'.join(x),p:='%05d'%i)for x in e)]
import re
$endgroup$
1
$begingroup$
This is a lovely solution...
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
Python, 101 bytes
lambda e:['%05d'%i for i in range(10**5)if all(re.search('.*'.join(x),'%05d'%i)for x in e)]
import re
Try it online! Works in Python 2 as well as Python 3.
(97 bytes in Python 3.8:)
lambda e:[p for i in range(10**5)if all(re.search('.*'.join(x),p:='%05d'%i)for x in e)]
import re
$endgroup$
1
$begingroup$
This is a lovely solution...
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
Python, 101 bytes
lambda e:['%05d'%i for i in range(10**5)if all(re.search('.*'.join(x),'%05d'%i)for x in e)]
import re
Try it online! Works in Python 2 as well as Python 3.
(97 bytes in Python 3.8:)
lambda e:[p for i in range(10**5)if all(re.search('.*'.join(x),p:='%05d'%i)for x in e)]
import re
$endgroup$
Python, 101 bytes
lambda e:['%05d'%i for i in range(10**5)if all(re.search('.*'.join(x),'%05d'%i)for x in e)]
import re
Try it online! Works in Python 2 as well as Python 3.
(97 bytes in Python 3.8:)
lambda e:[p for i in range(10**5)if all(re.search('.*'.join(x),p:='%05d'%i)for x in e)]
import re
edited 7 hours ago
answered 2 days ago
LynnLynn
49.5k795228
49.5k795228
1
$begingroup$
This is a lovely solution...
$endgroup$
– Jonah
2 days ago
add a comment |
1
$begingroup$
This is a lovely solution...
$endgroup$
– Jonah
2 days ago
1
1
$begingroup$
This is a lovely solution...
$endgroup$
– Jonah
2 days ago
$begingroup$
This is a lovely solution...
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
05AB1E, 11 9 bytes
žh5ãʒæIåP
Try it online!
Explanation
žh # push 0123456789
5ã # 5 times cartesian product
ʒ # filter, keep only values are true under:
æ # powerset of value
Iå # check if each of the input values are in this list
P # product
$endgroup$
add a comment |
$begingroup$
05AB1E, 11 9 bytes
žh5ãʒæIåP
Try it online!
Explanation
žh # push 0123456789
5ã # 5 times cartesian product
ʒ # filter, keep only values are true under:
æ # powerset of value
Iå # check if each of the input values are in this list
P # product
$endgroup$
add a comment |
$begingroup$
05AB1E, 11 9 bytes
žh5ãʒæIåP
Try it online!
Explanation
žh # push 0123456789
5ã # 5 times cartesian product
ʒ # filter, keep only values are true under:
æ # powerset of value
Iå # check if each of the input values are in this list
P # product
$endgroup$
05AB1E, 11 9 bytes
žh5ãʒæIåP
Try it online!
Explanation
žh # push 0123456789
5ã # 5 times cartesian product
ʒ # filter, keep only values are true under:
æ # powerset of value
Iå # check if each of the input values are in this list
P # product
edited 2 days ago
answered 2 days ago
EmignaEmigna
46.6k432142
46.6k432142
add a comment |
add a comment |
$begingroup$
JavaScript (ES6), 88 bytes
Prints the results with alert()
.
a=>{for(k=n=1e5;n--;)a.every(x=>(s=([k]+n).slice(-5)).match([...x].join`.*`))&&alert(s)}
Try it online!
Commented
a => { // a[] = input array of 3-character strings
for(k = n = 1e5; n--;) // initialize k to 100000; for n = 99999 to 0:
a.every(x => // for each string x = 'XYZ' in a[]:
( s = // define s as the concatenation of
([k] + n) // '100000' and n; e.g. '100000' + 1337 -> '1000001337'
.slice(-5) // keep the last 5 digits; e.g. '01337'
).match( // test whether this string is matching
[...x].join`.*` // the pattern /X.*Y.*Z/
) //
) && // end of every(); if all tests were successful:
alert(s) // output s
} //
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 88 bytes
Prints the results with alert()
.
a=>{for(k=n=1e5;n--;)a.every(x=>(s=([k]+n).slice(-5)).match([...x].join`.*`))&&alert(s)}
Try it online!
Commented
a => { // a[] = input array of 3-character strings
for(k = n = 1e5; n--;) // initialize k to 100000; for n = 99999 to 0:
a.every(x => // for each string x = 'XYZ' in a[]:
( s = // define s as the concatenation of
([k] + n) // '100000' and n; e.g. '100000' + 1337 -> '1000001337'
.slice(-5) // keep the last 5 digits; e.g. '01337'
).match( // test whether this string is matching
[...x].join`.*` // the pattern /X.*Y.*Z/
) //
) && // end of every(); if all tests were successful:
alert(s) // output s
} //
$endgroup$
add a comment |
$begingroup$
JavaScript (ES6), 88 bytes
Prints the results with alert()
.
a=>{for(k=n=1e5;n--;)a.every(x=>(s=([k]+n).slice(-5)).match([...x].join`.*`))&&alert(s)}
Try it online!
Commented
a => { // a[] = input array of 3-character strings
for(k = n = 1e5; n--;) // initialize k to 100000; for n = 99999 to 0:
a.every(x => // for each string x = 'XYZ' in a[]:
( s = // define s as the concatenation of
([k] + n) // '100000' and n; e.g. '100000' + 1337 -> '1000001337'
.slice(-5) // keep the last 5 digits; e.g. '01337'
).match( // test whether this string is matching
[...x].join`.*` // the pattern /X.*Y.*Z/
) //
) && // end of every(); if all tests were successful:
alert(s) // output s
} //
$endgroup$
JavaScript (ES6), 88 bytes
Prints the results with alert()
.
a=>{for(k=n=1e5;n--;)a.every(x=>(s=([k]+n).slice(-5)).match([...x].join`.*`))&&alert(s)}
Try it online!
Commented
a => { // a[] = input array of 3-character strings
for(k = n = 1e5; n--;) // initialize k to 100000; for n = 99999 to 0:
a.every(x => // for each string x = 'XYZ' in a[]:
( s = // define s as the concatenation of
([k] + n) // '100000' and n; e.g. '100000' + 1337 -> '1000001337'
.slice(-5) // keep the last 5 digits; e.g. '01337'
).match( // test whether this string is matching
[...x].join`.*` // the pattern /X.*Y.*Z/
) //
) && // end of every(); if all tests were successful:
alert(s) // output s
} //
edited 2 days ago
answered 2 days ago
ArnauldArnauld
76.7k693322
76.7k693322
add a comment |
add a comment |
$begingroup$
Haskell, 81 80 78 76 bytes
f x=[p|p<-mapM(:['1'..'9'])"00000",all(`elem`(concat.words<$>mapM(:" ")p))x]
The obvious brute force approach in Haskell: built a list of all possible passwords and keep those where all elements from the input list are in respective list of subsequences.
Try it online!
Edit: -1 byte thanks to @xnor, -2 -4 bytes thanks to @H.PWiz
$endgroup$
1
$begingroup$
Looks like you can compute the subseqs yourself a little shorter.
$endgroup$
– xnor
yesterday
1
$begingroup$
concat.words<$>mapM(:" ")p
is shorter
$endgroup$
– H.PWiz
yesterday
2
$begingroup$
usep<-mapM(:['1'..'9'])"00000"
to save 2 more bytes
$endgroup$
– H.PWiz
12 hours ago
add a comment |
$begingroup$
Haskell, 81 80 78 76 bytes
f x=[p|p<-mapM(:['1'..'9'])"00000",all(`elem`(concat.words<$>mapM(:" ")p))x]
The obvious brute force approach in Haskell: built a list of all possible passwords and keep those where all elements from the input list are in respective list of subsequences.
Try it online!
Edit: -1 byte thanks to @xnor, -2 -4 bytes thanks to @H.PWiz
$endgroup$
1
$begingroup$
Looks like you can compute the subseqs yourself a little shorter.
$endgroup$
– xnor
yesterday
1
$begingroup$
concat.words<$>mapM(:" ")p
is shorter
$endgroup$
– H.PWiz
yesterday
2
$begingroup$
usep<-mapM(:['1'..'9'])"00000"
to save 2 more bytes
$endgroup$
– H.PWiz
12 hours ago
add a comment |
$begingroup$
Haskell, 81 80 78 76 bytes
f x=[p|p<-mapM(:['1'..'9'])"00000",all(`elem`(concat.words<$>mapM(:" ")p))x]
The obvious brute force approach in Haskell: built a list of all possible passwords and keep those where all elements from the input list are in respective list of subsequences.
Try it online!
Edit: -1 byte thanks to @xnor, -2 -4 bytes thanks to @H.PWiz
$endgroup$
Haskell, 81 80 78 76 bytes
f x=[p|p<-mapM(:['1'..'9'])"00000",all(`elem`(concat.words<$>mapM(:" ")p))x]
The obvious brute force approach in Haskell: built a list of all possible passwords and keep those where all elements from the input list are in respective list of subsequences.
Try it online!
Edit: -1 byte thanks to @xnor, -2 -4 bytes thanks to @H.PWiz
edited 11 hours ago
answered yesterday
niminimi
31.9k32285
31.9k32285
1
$begingroup$
Looks like you can compute the subseqs yourself a little shorter.
$endgroup$
– xnor
yesterday
1
$begingroup$
concat.words<$>mapM(:" ")p
is shorter
$endgroup$
– H.PWiz
yesterday
2
$begingroup$
usep<-mapM(:['1'..'9'])"00000"
to save 2 more bytes
$endgroup$
– H.PWiz
12 hours ago
add a comment |
1
$begingroup$
Looks like you can compute the subseqs yourself a little shorter.
$endgroup$
– xnor
yesterday
1
$begingroup$
concat.words<$>mapM(:" ")p
is shorter
$endgroup$
– H.PWiz
yesterday
2
$begingroup$
usep<-mapM(:['1'..'9'])"00000"
to save 2 more bytes
$endgroup$
– H.PWiz
12 hours ago
1
1
$begingroup$
Looks like you can compute the subseqs yourself a little shorter.
$endgroup$
– xnor
yesterday
$begingroup$
Looks like you can compute the subseqs yourself a little shorter.
$endgroup$
– xnor
yesterday
1
1
$begingroup$
concat.words<$>mapM(:" ")p
is shorter$endgroup$
– H.PWiz
yesterday
$begingroup$
concat.words<$>mapM(:" ")p
is shorter$endgroup$
– H.PWiz
yesterday
2
2
$begingroup$
use
p<-mapM(:['1'..'9'])"00000"
to save 2 more bytes$endgroup$
– H.PWiz
12 hours ago
$begingroup$
use
p<-mapM(:['1'..'9'])"00000"
to save 2 more bytes$endgroup$
– H.PWiz
12 hours ago
add a comment |
$begingroup$
Jelly, 11 bytes
9Żṗ5ŒPiⱮẠɗƇ
Try it online!
$endgroup$
add a comment |
$begingroup$
Jelly, 11 bytes
9Żṗ5ŒPiⱮẠɗƇ
Try it online!
$endgroup$
add a comment |
$begingroup$
Jelly, 11 bytes
9Żṗ5ŒPiⱮẠɗƇ
Try it online!
$endgroup$
Jelly, 11 bytes
9Żṗ5ŒPiⱮẠɗƇ
Try it online!
answered 2 days ago
Erik the OutgolferErik the Outgolfer
32k429103
32k429103
add a comment |
add a comment |
$begingroup$
Pyth, 11 bytes
f<QyT^s`MT5
Takes input as a set of strings.
Try it here
Explanation
f<QyT^s`MT5
s`MT Take the digits as a string.
^ 5 Take the Cartesian product with itself 5 times.
f T Filter the ones...
<Qy ... where the input is a subset of the power set.
$endgroup$
add a comment |
$begingroup$
Pyth, 11 bytes
f<QyT^s`MT5
Takes input as a set of strings.
Try it here
Explanation
f<QyT^s`MT5
s`MT Take the digits as a string.
^ 5 Take the Cartesian product with itself 5 times.
f T Filter the ones...
<Qy ... where the input is a subset of the power set.
$endgroup$
add a comment |
$begingroup$
Pyth, 11 bytes
f<QyT^s`MT5
Takes input as a set of strings.
Try it here
Explanation
f<QyT^s`MT5
s`MT Take the digits as a string.
^ 5 Take the Cartesian product with itself 5 times.
f T Filter the ones...
<Qy ... where the input is a subset of the power set.
$endgroup$
Pyth, 11 bytes
f<QyT^s`MT5
Takes input as a set of strings.
Try it here
Explanation
f<QyT^s`MT5
s`MT Take the digits as a string.
^ 5 Take the Cartesian product with itself 5 times.
f T Filter the ones...
<Qy ... where the input is a subset of the power set.
answered 2 days ago
MnemonicMnemonic
4,7851730
4,7851730
add a comment |
add a comment |
$begingroup$
Ruby, 54 bytes
->a{(?0*5..?9*5).select{|x|a.all?{|y|x=~/#{y*'.*'}/}}}
Try it online!
Takes input as an arrray of character arrays.
$endgroup$
$begingroup$
Well done! You beat me by 25 bytes. Should I delete my answer?
$endgroup$
– Eric Duminil
2 days ago
1
$begingroup$
No, as long as you have a valid answer, there's no need to delete it.
$endgroup$
– Kirill L.
2 days ago
add a comment |
$begingroup$
Ruby, 54 bytes
->a{(?0*5..?9*5).select{|x|a.all?{|y|x=~/#{y*'.*'}/}}}
Try it online!
Takes input as an arrray of character arrays.
$endgroup$
$begingroup$
Well done! You beat me by 25 bytes. Should I delete my answer?
$endgroup$
– Eric Duminil
2 days ago
1
$begingroup$
No, as long as you have a valid answer, there's no need to delete it.
$endgroup$
– Kirill L.
2 days ago
add a comment |
$begingroup$
Ruby, 54 bytes
->a{(?0*5..?9*5).select{|x|a.all?{|y|x=~/#{y*'.*'}/}}}
Try it online!
Takes input as an arrray of character arrays.
$endgroup$
Ruby, 54 bytes
->a{(?0*5..?9*5).select{|x|a.all?{|y|x=~/#{y*'.*'}/}}}
Try it online!
Takes input as an arrray of character arrays.
answered 2 days ago
Kirill L.Kirill L.
4,5851523
4,5851523
$begingroup$
Well done! You beat me by 25 bytes. Should I delete my answer?
$endgroup$
– Eric Duminil
2 days ago
1
$begingroup$
No, as long as you have a valid answer, there's no need to delete it.
$endgroup$
– Kirill L.
2 days ago
add a comment |
$begingroup$
Well done! You beat me by 25 bytes. Should I delete my answer?
$endgroup$
– Eric Duminil
2 days ago
1
$begingroup$
No, as long as you have a valid answer, there's no need to delete it.
$endgroup$
– Kirill L.
2 days ago
$begingroup$
Well done! You beat me by 25 bytes. Should I delete my answer?
$endgroup$
– Eric Duminil
2 days ago
$begingroup$
Well done! You beat me by 25 bytes. Should I delete my answer?
$endgroup$
– Eric Duminil
2 days ago
1
1
$begingroup$
No, as long as you have a valid answer, there's no need to delete it.
$endgroup$
– Kirill L.
2 days ago
$begingroup$
No, as long as you have a valid answer, there's no need to delete it.
$endgroup$
– Kirill L.
2 days ago
add a comment |
$begingroup$
Python 3, 98 bytes
f=lambda l,s='':any(l)or print(s)if s[4:]else[f([x[x[:1]==c:]for x in l],s+c)for c in'0123456789']
Try it online!
Recursively tries building every five-digit number string in s
, tracking the subsequences in l
still remaining to be hit. If all are empty by the end, prints the result.
Python 3.8 (pre-release), 94 bytes
lambda l:[s for n in range(10**5)if all(''in[x:=x[x[:1]==c:]for c in(s:='%05d'%n)]for x in l)]
Try it online!
Behold the power of assignment expressions!. Uses the method from here for checking subsequences.
$endgroup$
add a comment |
$begingroup$
Python 3, 98 bytes
f=lambda l,s='':any(l)or print(s)if s[4:]else[f([x[x[:1]==c:]for x in l],s+c)for c in'0123456789']
Try it online!
Recursively tries building every five-digit number string in s
, tracking the subsequences in l
still remaining to be hit. If all are empty by the end, prints the result.
Python 3.8 (pre-release), 94 bytes
lambda l:[s for n in range(10**5)if all(''in[x:=x[x[:1]==c:]for c in(s:='%05d'%n)]for x in l)]
Try it online!
Behold the power of assignment expressions!. Uses the method from here for checking subsequences.
$endgroup$
add a comment |
$begingroup$
Python 3, 98 bytes
f=lambda l,s='':any(l)or print(s)if s[4:]else[f([x[x[:1]==c:]for x in l],s+c)for c in'0123456789']
Try it online!
Recursively tries building every five-digit number string in s
, tracking the subsequences in l
still remaining to be hit. If all are empty by the end, prints the result.
Python 3.8 (pre-release), 94 bytes
lambda l:[s for n in range(10**5)if all(''in[x:=x[x[:1]==c:]for c in(s:='%05d'%n)]for x in l)]
Try it online!
Behold the power of assignment expressions!. Uses the method from here for checking subsequences.
$endgroup$
Python 3, 98 bytes
f=lambda l,s='':any(l)or print(s)if s[4:]else[f([x[x[:1]==c:]for x in l],s+c)for c in'0123456789']
Try it online!
Recursively tries building every five-digit number string in s
, tracking the subsequences in l
still remaining to be hit. If all are empty by the end, prints the result.
Python 3.8 (pre-release), 94 bytes
lambda l:[s for n in range(10**5)if all(''in[x:=x[x[:1]==c:]for c in(s:='%05d'%n)]for x in l)]
Try it online!
Behold the power of assignment expressions!. Uses the method from here for checking subsequences.
edited yesterday
answered yesterday
xnorxnor
91.1k18186442
91.1k18186442
add a comment |
add a comment |
$begingroup$
Perl 5 -a
, 80 bytes
map{s||($t=0)x(5-y///c)|e;for$b(map s//.*/gr,@F){/$b/&&$t++}$t==@F&&say}0..99999
Try it online!
$endgroup$
1
$begingroup$
$t+=/$b/
instead of/$b/&&$t++
$endgroup$
– Nahuel Fouilleul
2 days ago
add a comment |
$begingroup$
Perl 5 -a
, 80 bytes
map{s||($t=0)x(5-y///c)|e;for$b(map s//.*/gr,@F){/$b/&&$t++}$t==@F&&say}0..99999
Try it online!
$endgroup$
1
$begingroup$
$t+=/$b/
instead of/$b/&&$t++
$endgroup$
– Nahuel Fouilleul
2 days ago
add a comment |
$begingroup$
Perl 5 -a
, 80 bytes
map{s||($t=0)x(5-y///c)|e;for$b(map s//.*/gr,@F){/$b/&&$t++}$t==@F&&say}0..99999
Try it online!
$endgroup$
Perl 5 -a
, 80 bytes
map{s||($t=0)x(5-y///c)|e;for$b(map s//.*/gr,@F){/$b/&&$t++}$t==@F&&say}0..99999
Try it online!
answered 2 days ago
XcaliXcali
5,375520
5,375520
1
$begingroup$
$t+=/$b/
instead of/$b/&&$t++
$endgroup$
– Nahuel Fouilleul
2 days ago
add a comment |
1
$begingroup$
$t+=/$b/
instead of/$b/&&$t++
$endgroup$
– Nahuel Fouilleul
2 days ago
1
1
$begingroup$
$t+=/$b/
instead of /$b/&&$t++
$endgroup$
– Nahuel Fouilleul
2 days ago
$begingroup$
$t+=/$b/
instead of /$b/&&$t++
$endgroup$
– Nahuel Fouilleul
2 days ago
add a comment |
$begingroup$
Retina, 53 bytes
~(`
.$*
m`^
G`
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Try it online! Explanation:
~(`
After executing the script, take the result as a new script, and execute that, too.
.$*
Insert .*
everywhere. This results in .*3.*2.*0.*
although we only need 3.*2.*0
, not that it matters.
m`^
G`
Insert a G`
at the start of each line. This turns it into a Retina Grep command.
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Prefix two more Retina commands. The resulting script will therefore look something like this:
K`
Clear the buffer (which contains the original input).
5+
Repeat 5 times...
%`$
... append to each line...
0$"1$"2$"3$"4$"5$"6$"7$"8$"9
... the digit 0
, then a copy of the line, then the digit 1
, etc. until 9
. This means that after n
loops you will have all n
-digit numbers.
G`.*3.*2.*0.*
G`.*7.*2.*3.*
G`.*7.*3.*0.*
Filter out the possible numbers based on the input.
$endgroup$
add a comment |
$begingroup$
Retina, 53 bytes
~(`
.$*
m`^
G`
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Try it online! Explanation:
~(`
After executing the script, take the result as a new script, and execute that, too.
.$*
Insert .*
everywhere. This results in .*3.*2.*0.*
although we only need 3.*2.*0
, not that it matters.
m`^
G`
Insert a G`
at the start of each line. This turns it into a Retina Grep command.
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Prefix two more Retina commands. The resulting script will therefore look something like this:
K`
Clear the buffer (which contains the original input).
5+
Repeat 5 times...
%`$
... append to each line...
0$"1$"2$"3$"4$"5$"6$"7$"8$"9
... the digit 0
, then a copy of the line, then the digit 1
, etc. until 9
. This means that after n
loops you will have all n
-digit numbers.
G`.*3.*2.*0.*
G`.*7.*2.*3.*
G`.*7.*3.*0.*
Filter out the possible numbers based on the input.
$endgroup$
add a comment |
$begingroup$
Retina, 53 bytes
~(`
.$*
m`^
G`
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Try it online! Explanation:
~(`
After executing the script, take the result as a new script, and execute that, too.
.$*
Insert .*
everywhere. This results in .*3.*2.*0.*
although we only need 3.*2.*0
, not that it matters.
m`^
G`
Insert a G`
at the start of each line. This turns it into a Retina Grep command.
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Prefix two more Retina commands. The resulting script will therefore look something like this:
K`
Clear the buffer (which contains the original input).
5+
Repeat 5 times...
%`$
... append to each line...
0$"1$"2$"3$"4$"5$"6$"7$"8$"9
... the digit 0
, then a copy of the line, then the digit 1
, etc. until 9
. This means that after n
loops you will have all n
-digit numbers.
G`.*3.*2.*0.*
G`.*7.*2.*3.*
G`.*7.*3.*0.*
Filter out the possible numbers based on the input.
$endgroup$
Retina, 53 bytes
~(`
.$*
m`^
G`
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Try it online! Explanation:
~(`
After executing the script, take the result as a new script, and execute that, too.
.$*
Insert .*
everywhere. This results in .*3.*2.*0.*
although we only need 3.*2.*0
, not that it matters.
m`^
G`
Insert a G`
at the start of each line. This turns it into a Retina Grep command.
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"
Prefix two more Retina commands. The resulting script will therefore look something like this:
K`
Clear the buffer (which contains the original input).
5+
Repeat 5 times...
%`$
... append to each line...
0$"1$"2$"3$"4$"5$"6$"7$"8$"9
... the digit 0
, then a copy of the line, then the digit 1
, etc. until 9
. This means that after n
loops you will have all n
-digit numbers.
G`.*3.*2.*0.*
G`.*7.*2.*3.*
G`.*7.*3.*0.*
Filter out the possible numbers based on the input.
answered 2 days ago
NeilNeil
81k744178
81k744178
add a comment |
add a comment |
$begingroup$
R, 80 82 bytes
Reduce(intersect,lapply(gsub("",".*",scan(,"")),grep,sprintf("%05d",0:99999),v=T))
Here’s a base R solution using regex. Writing this nested series of functions made me realise how much I’ve learned to appreciate the magrittr package!
Initially hadn’t read rules on input, so now reads from stdin (thanks @KirillL).
Try it online!
$endgroup$
$begingroup$
@digEmAll it says it’s 82 bytes doesn’t it? You can’t use integers because of potential for leading zeroes in the input.
$endgroup$
– Nick Kennedy
yesterday
$begingroup$
Sorry, I read the title and unconsciously I picked the minimum number without noticing that it was strikedthrough... and yes, sorry again you're right about the string input ;)
$endgroup$
– digEmAll
yesterday
add a comment |
$begingroup$
R, 80 82 bytes
Reduce(intersect,lapply(gsub("",".*",scan(,"")),grep,sprintf("%05d",0:99999),v=T))
Here’s a base R solution using regex. Writing this nested series of functions made me realise how much I’ve learned to appreciate the magrittr package!
Initially hadn’t read rules on input, so now reads from stdin (thanks @KirillL).
Try it online!
$endgroup$
$begingroup$
@digEmAll it says it’s 82 bytes doesn’t it? You can’t use integers because of potential for leading zeroes in the input.
$endgroup$
– Nick Kennedy
yesterday
$begingroup$
Sorry, I read the title and unconsciously I picked the minimum number without noticing that it was strikedthrough... and yes, sorry again you're right about the string input ;)
$endgroup$
– digEmAll
yesterday
add a comment |
$begingroup$
R, 80 82 bytes
Reduce(intersect,lapply(gsub("",".*",scan(,"")),grep,sprintf("%05d",0:99999),v=T))
Here’s a base R solution using regex. Writing this nested series of functions made me realise how much I’ve learned to appreciate the magrittr package!
Initially hadn’t read rules on input, so now reads from stdin (thanks @KirillL).
Try it online!
$endgroup$
R, 80 82 bytes
Reduce(intersect,lapply(gsub("",".*",scan(,"")),grep,sprintf("%05d",0:99999),v=T))
Here’s a base R solution using regex. Writing this nested series of functions made me realise how much I’ve learned to appreciate the magrittr package!
Initially hadn’t read rules on input, so now reads from stdin (thanks @KirillL).
Try it online!
edited 2 days ago
answered 2 days ago
Nick KennedyNick Kennedy
20114
20114
$begingroup$
@digEmAll it says it’s 82 bytes doesn’t it? You can’t use integers because of potential for leading zeroes in the input.
$endgroup$
– Nick Kennedy
yesterday
$begingroup$
Sorry, I read the title and unconsciously I picked the minimum number without noticing that it was strikedthrough... and yes, sorry again you're right about the string input ;)
$endgroup$
– digEmAll
yesterday
add a comment |
$begingroup$
@digEmAll it says it’s 82 bytes doesn’t it? You can’t use integers because of potential for leading zeroes in the input.
$endgroup$
– Nick Kennedy
yesterday
$begingroup$
Sorry, I read the title and unconsciously I picked the minimum number without noticing that it was strikedthrough... and yes, sorry again you're right about the string input ;)
$endgroup$
– digEmAll
yesterday
$begingroup$
@digEmAll it says it’s 82 bytes doesn’t it? You can’t use integers because of potential for leading zeroes in the input.
$endgroup$
– Nick Kennedy
yesterday
$begingroup$
@digEmAll it says it’s 82 bytes doesn’t it? You can’t use integers because of potential for leading zeroes in the input.
$endgroup$
– Nick Kennedy
yesterday
$begingroup$
Sorry, I read the title and unconsciously I picked the minimum number without noticing that it was strikedthrough... and yes, sorry again you're right about the string input ;)
$endgroup$
– digEmAll
yesterday
$begingroup$
Sorry, I read the title and unconsciously I picked the minimum number without noticing that it was strikedthrough... and yes, sorry again you're right about the string input ;)
$endgroup$
– digEmAll
yesterday
add a comment |
$begingroup$
Ruby, 79 77 bytes
->x{(0...1e5).map{|i|'%05d'%i}.select{|i|x.all?{|c|i=~/#{c.gsub('','.*')}/}}}
Try it online!
Input is an array of strings.
Here's a more readable version of the same code:
def f(codes)
(0...10**5).map{|i| '%05d'%i}.select do |i|
codes.all? do |code|
i =~ Regexp.new(code.chars.join('.*'))
end
end
end
$endgroup$
$begingroup$
BTW, your approach can also be made shorter by switching to char array input, as in my version, and -2 more bytes by formatting the upper value as1e5
, like this
$endgroup$
– Kirill L.
2 days ago
$begingroup$
@KirillL. Thanks for the -2 bytes. I won't change the input format because my answer would look too much like yours. Cheers!
$endgroup$
– Eric Duminil
2 days ago
add a comment |
$begingroup$
Ruby, 79 77 bytes
->x{(0...1e5).map{|i|'%05d'%i}.select{|i|x.all?{|c|i=~/#{c.gsub('','.*')}/}}}
Try it online!
Input is an array of strings.
Here's a more readable version of the same code:
def f(codes)
(0...10**5).map{|i| '%05d'%i}.select do |i|
codes.all? do |code|
i =~ Regexp.new(code.chars.join('.*'))
end
end
end
$endgroup$
$begingroup$
BTW, your approach can also be made shorter by switching to char array input, as in my version, and -2 more bytes by formatting the upper value as1e5
, like this
$endgroup$
– Kirill L.
2 days ago
$begingroup$
@KirillL. Thanks for the -2 bytes. I won't change the input format because my answer would look too much like yours. Cheers!
$endgroup$
– Eric Duminil
2 days ago
add a comment |
$begingroup$
Ruby, 79 77 bytes
->x{(0...1e5).map{|i|'%05d'%i}.select{|i|x.all?{|c|i=~/#{c.gsub('','.*')}/}}}
Try it online!
Input is an array of strings.
Here's a more readable version of the same code:
def f(codes)
(0...10**5).map{|i| '%05d'%i}.select do |i|
codes.all? do |code|
i =~ Regexp.new(code.chars.join('.*'))
end
end
end
$endgroup$
Ruby, 79 77 bytes
->x{(0...1e5).map{|i|'%05d'%i}.select{|i|x.all?{|c|i=~/#{c.gsub('','.*')}/}}}
Try it online!
Input is an array of strings.
Here's a more readable version of the same code:
def f(codes)
(0...10**5).map{|i| '%05d'%i}.select do |i|
codes.all? do |code|
i =~ Regexp.new(code.chars.join('.*'))
end
end
end
edited 2 days ago
answered 2 days ago
Eric DuminilEric Duminil
43128
43128
$begingroup$
BTW, your approach can also be made shorter by switching to char array input, as in my version, and -2 more bytes by formatting the upper value as1e5
, like this
$endgroup$
– Kirill L.
2 days ago
$begingroup$
@KirillL. Thanks for the -2 bytes. I won't change the input format because my answer would look too much like yours. Cheers!
$endgroup$
– Eric Duminil
2 days ago
add a comment |
$begingroup$
BTW, your approach can also be made shorter by switching to char array input, as in my version, and -2 more bytes by formatting the upper value as1e5
, like this
$endgroup$
– Kirill L.
2 days ago
$begingroup$
@KirillL. Thanks for the -2 bytes. I won't change the input format because my answer would look too much like yours. Cheers!
$endgroup$
– Eric Duminil
2 days ago
$begingroup$
BTW, your approach can also be made shorter by switching to char array input, as in my version, and -2 more bytes by formatting the upper value as
1e5
, like this$endgroup$
– Kirill L.
2 days ago
$begingroup$
BTW, your approach can also be made shorter by switching to char array input, as in my version, and -2 more bytes by formatting the upper value as
1e5
, like this$endgroup$
– Kirill L.
2 days ago
$begingroup$
@KirillL. Thanks for the -2 bytes. I won't change the input format because my answer would look too much like yours. Cheers!
$endgroup$
– Eric Duminil
2 days ago
$begingroup$
@KirillL. Thanks for the -2 bytes. I won't change the input format because my answer would look too much like yours. Cheers!
$endgroup$
– Eric Duminil
2 days ago
add a comment |
$begingroup$
J, 52 bytes
(>,{;^:4~i.10)([#~]*/@e."2((#~3=+/"1)#:i.32)#"_ 1[)]
Try it online!
$endgroup$
add a comment |
$begingroup$
J, 52 bytes
(>,{;^:4~i.10)([#~]*/@e."2((#~3=+/"1)#:i.32)#"_ 1[)]
Try it online!
$endgroup$
add a comment |
$begingroup$
J, 52 bytes
(>,{;^:4~i.10)([#~]*/@e."2((#~3=+/"1)#:i.32)#"_ 1[)]
Try it online!
$endgroup$
J, 52 bytes
(>,{;^:4~i.10)([#~]*/@e."2((#~3=+/"1)#:i.32)#"_ 1[)]
Try it online!
edited yesterday
answered 2 days ago
JonahJonah
2,331916
2,331916
add a comment |
add a comment |
$begingroup$
PHP 128 bytes
for(;$i++<1e5;$k>$argc||print$s)for($k=0;$n=$argv[++$k];)preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i-1))||$k=$argc;
or
for(;$i<1e5;$i+=$k<$argc||print$s)for($k=0;$n=$argv[++$k];)if(!preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i)))break;
take input from command line arguments. Run with -nr
or try them online.
$endgroup$
add a comment |
$begingroup$
PHP 128 bytes
for(;$i++<1e5;$k>$argc||print$s)for($k=0;$n=$argv[++$k];)preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i-1))||$k=$argc;
or
for(;$i<1e5;$i+=$k<$argc||print$s)for($k=0;$n=$argv[++$k];)if(!preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i)))break;
take input from command line arguments. Run with -nr
or try them online.
$endgroup$
add a comment |
$begingroup$
PHP 128 bytes
for(;$i++<1e5;$k>$argc||print$s)for($k=0;$n=$argv[++$k];)preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i-1))||$k=$argc;
or
for(;$i<1e5;$i+=$k<$argc||print$s)for($k=0;$n=$argv[++$k];)if(!preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i)))break;
take input from command line arguments. Run with -nr
or try them online.
$endgroup$
PHP 128 bytes
for(;$i++<1e5;$k>$argc||print$s)for($k=0;$n=$argv[++$k];)preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i-1))||$k=$argc;
or
for(;$i<1e5;$i+=$k<$argc||print$s)for($k=0;$n=$argv[++$k];)if(!preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i)))break;
take input from command line arguments. Run with -nr
or try them online.
answered yesterday
TitusTitus
13.2k11238
13.2k11238
add a comment |
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 111 bytes
x=>{for(int i=0;i<1e5;){var s=$"{i++:D5}";if(x.All(t=>t.Aggregate(0,(a,c)=>a<0?a:s.IndexOf(c,a))>0))Print(s);}}
Try it online!
// x: input list of strings
x=>{
// generate all numbers under 100k
for(int i=0;i<1e5;){
// convert the current number to
// a 5 digit string padded with 0's
var s=$"{i++:D5}";
// test all inputs against the 5 digit
// string using an aggregate.
// each step of the aggregate gets
// the index of the next occurrence
// of the current character starting
// at the previously found character.
// a negative index indicates error.
if(x.All(t=>t
.Aggregate(0,(a,c)=>
a<0
?a
:s.IndexOf(c,a))>0))
// output to STDOUT
Print(s);
}
}
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 111 bytes
x=>{for(int i=0;i<1e5;){var s=$"{i++:D5}";if(x.All(t=>t.Aggregate(0,(a,c)=>a<0?a:s.IndexOf(c,a))>0))Print(s);}}
Try it online!
// x: input list of strings
x=>{
// generate all numbers under 100k
for(int i=0;i<1e5;){
// convert the current number to
// a 5 digit string padded with 0's
var s=$"{i++:D5}";
// test all inputs against the 5 digit
// string using an aggregate.
// each step of the aggregate gets
// the index of the next occurrence
// of the current character starting
// at the previously found character.
// a negative index indicates error.
if(x.All(t=>t
.Aggregate(0,(a,c)=>
a<0
?a
:s.IndexOf(c,a))>0))
// output to STDOUT
Print(s);
}
}
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 111 bytes
x=>{for(int i=0;i<1e5;){var s=$"{i++:D5}";if(x.All(t=>t.Aggregate(0,(a,c)=>a<0?a:s.IndexOf(c,a))>0))Print(s);}}
Try it online!
// x: input list of strings
x=>{
// generate all numbers under 100k
for(int i=0;i<1e5;){
// convert the current number to
// a 5 digit string padded with 0's
var s=$"{i++:D5}";
// test all inputs against the 5 digit
// string using an aggregate.
// each step of the aggregate gets
// the index of the next occurrence
// of the current character starting
// at the previously found character.
// a negative index indicates error.
if(x.All(t=>t
.Aggregate(0,(a,c)=>
a<0
?a
:s.IndexOf(c,a))>0))
// output to STDOUT
Print(s);
}
}
$endgroup$
C# (Visual C# Interactive Compiler), 111 bytes
x=>{for(int i=0;i<1e5;){var s=$"{i++:D5}";if(x.All(t=>t.Aggregate(0,(a,c)=>a<0?a:s.IndexOf(c,a))>0))Print(s);}}
Try it online!
// x: input list of strings
x=>{
// generate all numbers under 100k
for(int i=0;i<1e5;){
// convert the current number to
// a 5 digit string padded with 0's
var s=$"{i++:D5}";
// test all inputs against the 5 digit
// string using an aggregate.
// each step of the aggregate gets
// the index of the next occurrence
// of the current character starting
// at the previously found character.
// a negative index indicates error.
if(x.All(t=>t
.Aggregate(0,(a,c)=>
a<0
?a
:s.IndexOf(c,a))>0))
// output to STDOUT
Print(s);
}
}
edited yesterday
answered yesterday
danadana
1,151166
1,151166
add a comment |
add a comment |
$begingroup$
Japt, 23 bytes
1e5o ù'0 fA{Ue@AèXË+".*
Try it!
1e5o ù'0 fA{Ue@AèXË+".* # full program
1e5o # generate numbers under 100k
ù'0 # left pad with 0's
fA{ # filter array
Ue@ # check every element of input array
Aè # A is the number to be tested.
# test it against a regex.
Ë+".* # the regex is an element from the input array
# with wildcards injected between each character
$endgroup$
$begingroup$
less useless variables:1e5o ù'0 fA{Ue@AèX®+".*
:P
$endgroup$
– ASCII-only
7 hours ago
$begingroup$
also 23:1e5o ù'0 fA{Ue@AèX¬q".*
$endgroup$
– ASCII-only
6 hours ago
$begingroup$
21 bytes
$endgroup$
– Shaggy
1 hour ago
add a comment |
$begingroup$
Japt, 23 bytes
1e5o ù'0 fA{Ue@AèXË+".*
Try it!
1e5o ù'0 fA{Ue@AèXË+".* # full program
1e5o # generate numbers under 100k
ù'0 # left pad with 0's
fA{ # filter array
Ue@ # check every element of input array
Aè # A is the number to be tested.
# test it against a regex.
Ë+".* # the regex is an element from the input array
# with wildcards injected between each character
$endgroup$
$begingroup$
less useless variables:1e5o ù'0 fA{Ue@AèX®+".*
:P
$endgroup$
– ASCII-only
7 hours ago
$begingroup$
also 23:1e5o ù'0 fA{Ue@AèX¬q".*
$endgroup$
– ASCII-only
6 hours ago
$begingroup$
21 bytes
$endgroup$
– Shaggy
1 hour ago
add a comment |
$begingroup$
Japt, 23 bytes
1e5o ù'0 fA{Ue@AèXË+".*
Try it!
1e5o ù'0 fA{Ue@AèXË+".* # full program
1e5o # generate numbers under 100k
ù'0 # left pad with 0's
fA{ # filter array
Ue@ # check every element of input array
Aè # A is the number to be tested.
# test it against a regex.
Ë+".* # the regex is an element from the input array
# with wildcards injected between each character
$endgroup$
Japt, 23 bytes
1e5o ù'0 fA{Ue@AèXË+".*
Try it!
1e5o ù'0 fA{Ue@AèXË+".* # full program
1e5o # generate numbers under 100k
ù'0 # left pad with 0's
fA{ # filter array
Ue@ # check every element of input array
Aè # A is the number to be tested.
# test it against a regex.
Ë+".* # the regex is an element from the input array
# with wildcards injected between each character
edited 10 hours ago
answered 13 hours ago
danadana
1,151166
1,151166
$begingroup$
less useless variables:1e5o ù'0 fA{Ue@AèX®+".*
:P
$endgroup$
– ASCII-only
7 hours ago
$begingroup$
also 23:1e5o ù'0 fA{Ue@AèX¬q".*
$endgroup$
– ASCII-only
6 hours ago
$begingroup$
21 bytes
$endgroup$
– Shaggy
1 hour ago
add a comment |
$begingroup$
less useless variables:1e5o ù'0 fA{Ue@AèX®+".*
:P
$endgroup$
– ASCII-only
7 hours ago
$begingroup$
also 23:1e5o ù'0 fA{Ue@AèX¬q".*
$endgroup$
– ASCII-only
6 hours ago
$begingroup$
21 bytes
$endgroup$
– Shaggy
1 hour ago
$begingroup$
less useless variables:
1e5o ù'0 fA{Ue@AèX®+".*
:P$endgroup$
– ASCII-only
7 hours ago
$begingroup$
less useless variables:
1e5o ù'0 fA{Ue@AèX®+".*
:P$endgroup$
– ASCII-only
7 hours ago
$begingroup$
also 23:
1e5o ù'0 fA{Ue@AèX¬q".*
$endgroup$
– ASCII-only
6 hours ago
$begingroup$
also 23:
1e5o ù'0 fA{Ue@AèX¬q".*
$endgroup$
– ASCII-only
6 hours ago
$begingroup$
21 bytes
$endgroup$
– Shaggy
1 hour ago
$begingroup$
21 bytes
$endgroup$
– Shaggy
1 hour ago
add a comment |
$begingroup$
Clean, 113 bytes
import StdEnv,Data.List
$l=[s\s<-iter 5(p=[[c:e]\e<-p,c<-['0'..'9']])[[]]|all(flip any(subsequences s)o(==))l]
Try it online!
$endgroup$
add a comment |
$begingroup$
Clean, 113 bytes
import StdEnv,Data.List
$l=[s\s<-iter 5(p=[[c:e]\e<-p,c<-['0'..'9']])[[]]|all(flip any(subsequences s)o(==))l]
Try it online!
$endgroup$
add a comment |
$begingroup$
Clean, 113 bytes
import StdEnv,Data.List
$l=[s\s<-iter 5(p=[[c:e]\e<-p,c<-['0'..'9']])[[]]|all(flip any(subsequences s)o(==))l]
Try it online!
$endgroup$
Clean, 113 bytes
import StdEnv,Data.List
$l=[s\s<-iter 5(p=[[c:e]\e<-p,c<-['0'..'9']])[[]]|all(flip any(subsequences s)o(==))l]
Try it online!
answered 12 hours ago
ΟurousΟurous
7,19111035
7,19111035
add a comment |
add a comment |
cefel is a new contributor. Be nice, and check out our Code of Conduct.
cefel is a new contributor. Be nice, and check out our Code of Conduct.
cefel is a new contributor. Be nice, and check out our Code of Conduct.
cefel is a new contributor. Be nice, and check out our Code of Conduct.
If this is an answer to a challenge…
…Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.
…Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
Explanations of your answer make it more interesting to read and are very much encouraged.…Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.
More generally…
…Please make sure to answer the question and provide sufficient detail.
…Avoid asking for help, clarification or responding to other answers (use comments instead).
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f180243%2fcrack-the-bank-accounts-password%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
5
$begingroup$
Are the digits always in order? Based on the test cases I assume they are, but I couldn't see it mentioned in the rules unless I read past it.
$endgroup$
– Kevin Cruijssen
2 days ago
13
$begingroup$
Welcome to PPCG! This is a nice, well-structured, and neatly formatted first challenge. You've clearly done your homework as far as getting that all down. I'm looking forward to answering it (if someone doesn't answer it in R first!). In the future, we suggest using the sandbox to get feedback before posting to main. Hope you enjoy your time on PPCG!
$endgroup$
– Giuseppe
2 days ago
1
$begingroup$
@Giuseppe thanks! I've been anonymously reading the questions on this site for years, and I've been writing and tweaking and actually solving this specific problem for a couple months: I liked it enough to skip the sandbox. I'll post there first next time!
$endgroup$
– cefel
2 days ago
2
$begingroup$
@Arnauld Well, if your password is 01234 or 12340 you shouldn't be able to log in by typing 1234. Passwords are more a string than a number even if composed by numbers, at least in that sense. So yes, leading and trailing zeros are mandatory.
$endgroup$
– cefel
2 days ago
2
$begingroup$
The final test case appears to be missing 22123... unless I'm misunderstanding something?
$endgroup$
– Jonah
2 days ago