loading...

Daily Challenge #260 - Subtract the Sum

thepracticaldev profile image dev.to staff ・2 min read

Daily Challenge (270 Part Series)

1) Daily Challenge #1 - String Peeler 2) Daily Challenge #2 - String Diamond 3 ... 268 3) Daily Challenge #3 - Vowel Counter 4) Daily Challenge #4 - Checkbook Balancing 5) Daily Challenge #5 - Ten Minute Walk 6) Daily Challenge #6 - Grandma and her friends 7) Daily Challenge #7 - Factorial Decomposition 8) Daily Challenge #8 - Scrabble Word Calculator 9) Daily Challenge #9 - What's Your Number? 10) Daily Challenge #10 - Calculator 11) Daily Challenge #11 - Cubic Numbers 12) Daily Challenge #12 - Next Larger Number 13) Daily Challenge #13 - Twice Linear 14) Daily Challenge #14 - Square into Squares 15) Daily Challenge #15 - Stop gninnipS My sdroW! 16) Daily Challenge #16 - Number of People on the Bus 17) Daily Challenge #17 - Double Trouble 18) Daily Challenge #18 - Triple Trouble 19) Daily Challenge #19 - Turn numbers into words 20) Daily Challenge Post #20 - Number Check 21) Daily Challenge #21 - Human Readable Time 22) Daily Challenge #22 - Simple Pig Latin 23) Daily Challenge #23 - Morse Code Decoder 24) Daily Challenge #24 - Shortest Step 25) Daily Challenge #25 - Double Cola 26) Daily Challenge #26 - Ranking Position 27) Daily Challenge #27 - Unlucky Days 28) Daily Challenge #28 - Kill the Monster! 29) Daily Challenge #29 - Xs and Os 30) Daily Challenge #30 - What is the price? 31) Daily Challenge #31 - Count IPv4 Addresses 32) Daily Challenge #32 - Hide Phone Numbers 33) Daily Challenge #33 - Did you mean...? 34) Daily Challenge #34 - WeIrD StRiNg CaSe 35) Daily Challenge #35 - Find the Outlier 36) Daily Challenge #36 - Let's go for a run! 37) Daily Challenge #37 - Name Swap 38) Daily Challenge #38 - Middle Name 39) Daily Challenge #39 - Virus 40) Daily Challenge #40 - Counting Sheep 41) Daily Challenge #41 - Greed is Good 42) Daily Challenge #42 - Caesar Cipher 43) Daily Challenge #43 - Boardgame Fight Resolver 44) Daily Challenge #44 - Mexican Wave 45) Daily Challenge #45 - Change Machine 46) Daily Challenge #46 - ??? 47) Daily Challenge #47 - Alphabets 48) Daily Challenge #48 - Facebook Likes 49) Daily Challenge #49 - Dollars and Cents 50) Daily Challenge #50 - Number Neighbor 51) Daily Challenge #51 - Valid Curly Braces 52) Daily Challenge #52 - Building a Pyramid 53) Daily Challenge #53 - Faro Shuffle 54) Daily Challenge #54 - What century is it? 55) Daily Challenge #55 - Building a Pile of Cubes 56) Daily Challenge #56 - Coffee Shop 57) Daily Challenge #57 - BMI Calculator 58) Daily Challenge #58 - Smelting Iron Ingots 59) Daily Challenge #59 - Snail Sort 60) Daily Challenge #60 - Find the Missing Letter 61) Daily Challenge #61 - Evolution Rate 62) Daily Challenge #62 - Josephus Survivor 63) Daily Challenge #63- Two Sum 64) Daily Challenge #64- Drying Potatoes 65) Daily Challenge #65- A Disguised Sequence 66) Daily Challenge #66- Friend List 67) Daily Challenge #67- Phone Directory 68) Daily Challenge #68 - Grade Book 69) Daily Challenge #69 - Going to the Cinema 70) Daily Challenge #70 - Pole Vault Competition Results 71) Daily Challenge #71 - See you next Happy Year 72) Daily Challenge #72 - Matrix Shift 73) Daily Challenge #73 - ATM Heist 74) Daily Challenge #74 - Free Pizza 75) Daily Challenge #75 - Set Alarm 76) Daily Challenge #76 - Bingo! (or not...) 77) Daily Challenge #77 - Bird Mountain 78) Daily Challenge #78 - Number of Proper Fractions with Denominator d 79) Daily Challenge #79 - Connect Four 80) Daily Challenge #80 - Longest Vowel Change 81) Daily Challenge #81 - Even or Odd 82) Daily Challenge #82 - English Beggars 83) Daily Challenge #83 - Deodorant Evaporator 84) Daily Challenge #84 - Third Angle of a Triangle 85) Daily Challenge #85 - Unwanted Dollars 86) Daily Challenge #86 - Wouldn't, not Would. 87) Daily Challenge #87 - Pony Express 88) Daily Challenge #88 - Recursive Ninjas 89) Daily Challenge #89 - Extract domain name from URL 90) Daily Challenge #90 - One Step at a Time 91) Daily Challenge #91 - Bananas 92) Daily Challenge #92 - Boggle Board 93) Daily Challenge #93 - Range Extraction 94) Daily Challenge #94 - Last Digit 95) Daily Challenge #95 - CamelCase Method 96) Daily Challenge #96 - Easter Egg Crush Test 97) Daily Challenge #97 - Greed is Good 98) Daily Challenge #98 - Make a Spiral 99) Daily Challenge #99 - Balance the Scales 100) Daily Challenge #100 - Round Up 101) Daily Challenge #101 - Parentheses Generator 102) Daily Challenge #102 - Pentabonacci 103) Daily Challenge #103 - Simple Symbols 104) Daily Challenge #104 - Matrixify 105) Daily Challenge #105 - High-Sum Matrix Drop 106) Daily Challenge #106 - Average Fuel Consumption 107) Daily Challenge #107 - Escape the Mines 108) Daily Challenge #108 - Find the Counterfeit Coin 109) Daily Challenge #109 - Decorate with Wallpaper 110) Daily Challenge #110 - Love VS. Friendship 111) Daily Challenge #111 - 99 Bottles of Beer 112) Daily Challenge #112 - Functions of Integers on the Cartesian Plane 113) Daily Challenge #113 - Iterative Rotation Cipher 114) Daily Challenge #114 - Speed Control 115) Daily Challenge #115 - Look and Say Sequence 116) Daily Challenge #116 - Shortest Knight Path 117) Daily Challenge #117 - MinMinMax 118) Daily Challenge #118 - Reversing a Process 119) Daily Challenge #119 - Adding Big Numbers 120) Daily Challenge #120 - Growth of a Population 121) Daily Challenge #121 - Who has the most money? 122) Daily Challenge #122 - Clockwise Spirals 123) Daily Challenge #123 - Curry me Softly 124) Daily Challenge #124 - Middle Me 125) Daily Challenge #125 - 23 Matches or More 126) Daily Challenge #126 - The Supermarket Line 127) Daily Challenge #127 - Playing with Passphrases 128) Daily Challenge #128 - Blackjack Scorer 129) Daily Challenge #129 - Clay Pigeon Shooting 130) Daily Challenge #130 - GCD Sum 131) Daily Challenge #131 - Remove Anchor from URL 132) Daily Challenge #132 - Is my friend cheating? 133) Daily Challenge #133 - Suitcase Packing 134) Daily Challenge #134 - Rice and Chessboard Problem 135) Daily Challenge #135 - The Wide Mouthed Frog! 136) Daily Challenge #136 - The Deaf Rats of Hamelin 137) Daily Challenge #137 - Help the Bookseller 138) Daily Challenge #138 - Do I get a Bonus? 139) Daily Challenge #138 - Keep Up the Hoop 140) Daily Challenge #140 - I love you, a little, a lot, passionately ... not at all 141) Daily Challenge #141 - Two Sum 142) Daily Challenge #142 - Parts of a Whole 143) Daily Challenge #143 - Big Arithmetic 144) Daily Challenge #144 - Box Office Clerk 145) Daily Challenge #145 - SET Card Game 146) Daily Challenge #146 - The Dollar Game 147) Daily Challenge #147 - NIM 148) Daily Challenge #148 - Disemvowel Trolls 149) Daily Challenge #149 - Fun with Lamps 150) Daily Challenge #150 - Boggle Guess Validator 151) Daily Challenge #151 - Reverse Parentheses 152) Daily Challenge #152 - Strongest Number in an Interval 153) Daily Challenge #153 - Horse Race Gamble 154) Daily Challenge #154 - Stable Arrangement 155) Daily Challenge #155 - Royal Arranged Marriages 156) Daily Challenge #162 - Taxi Dispatching 157) Daily Challenge #163 - Significant Figures 158) Daily Challenge #164 - Jump 159) Daily Challenge #165 - Password Lost in a Grid 160) Daily Challenge #166 - Cat and Mouse 161) Daily Challenge #167 - Return String As Sorted Blocks 162) Daily Challenge #168 - [Code golf] f (f (f b)) = f b 163) Daily Challenge #169 - Christmas Tree 164) Daily Challenge #170 - Pokemon Damage Calculator 165) Daily Challenge #171 - Ordering Beers in Poland 166) Daily Challenge #172 - Find All in an Array 167) Daily Challenge #173 - Pandemia 168) Daily Challenge #174 - Soccer League Table 169) Daily Challenge #175 - Complementary DNA 170) Daily Challenge #176 - Loopover 171) Daily Challenge #177 - Supersize Me 172) Daily Challenge #178 - Create Phone Numbers 173) Daily Challenge #179 - Hide Phone Numbers 174) Daily Challenge #180 - SMS Shortener 175) Daily Challenge #181 - Is King in Check? 176) Daily Challenge #182 - Arrh, grabscrab! 177) Daily Challenge #183 - Automorphic Numbers 178) Daily Challenge #184 - Form the Minimum 179) Daily Challenge #185 - House Numbers Sum 180) Daily Challenge #186 - Jumping Frog 181) Daily Challenge #187 - Most Sales 182) Daily Challenge #188 - Break camelCase 183) Daily Challenge #189 - Convert Number into Reversed Array 184) Daily Challenge #190 - capitalizeFirstLast 185) Daily Challenge #191 - Alphabetical Addition 186) Daily Challenge #192 - Can you Survive the Zombies? 187) Daily Challenge #193 - What's the Real Floor? 188) Daily Challenge #194 - Spread Number 189) Daily Challenge #195 - No Zeroes for Heroes 190) Daily Challenge #196 - Flou 191) Daily Challenge #197 - Population Growth 192) Daily Challenge #198 - 21 Blackjack 193) Daily Challenge #199 - List of All Rationals 194) Daily Challenge #200 - Longest Linear Palindromic Substring 195) Daily Challenge #201 - Complete the Pattern 196) Daily Challenge #202 - Complete the Pattern II 197) Daily Challenge #203 - Pascal's Triangle 198) Daily Challenge #204 - Partial Keys 199) Daily Challenge #205 - Consonant String Value 200) Daily Challenge #206 - Pound Means Backspace 201) Daily Challenge #207 - Snakes and Ladders 202) Daily Challenge #208 - Delete Occurrences of an Element 203) Daily Challenge #209 - Roman Numerals 204) Daily Challenge #210 - Separate Capitalization 205) Daily Challenge #211 - Product Partitions 206) Daily Challenge #212 - DNA to RNA 207) Daily Challenge #213 - Are they the "same"? 208) Daily Challenge #214 - Persistent Bugger 209) Daily Challenge #215 - Difference of 2 210) Daily Challenge #216 - Rainfall 211) Daily Challenge #217 - SMS w/ an Old Phone 212) Daily Challenge #218 - Possible Sides of a Non-Right Triangle 213) Daily Challenge #219 - Compare Strings 214) Daily Challenge #220 - What Dominates Your Array? 215) Daily Challenge #221 - The Merchant of York 216) Daily Challenge #222 - Parse Bank Account Numbers 217) Daily Challenge #223 - Responsible Drinking 218) Daily Challenge #224 - Password Validator 219) Daily Challenge #225 - Square'n'Sum 220) Daily Challenge #226 - Array to HTML Table 221) Daily Challenge #227 - Android Lock Screen 222) Daily Challenge #228 - Best Profit in Single Sale 223) Daily Challenge #229 - Haiku Validator 224) Daily Challenge #230 - Beeramid 225) Daily Challenge #231 - Perfect Powers 226) Daily Challenge #232 - Regex Pattern 227) Daily Challenge #233 - Get Planet Name by ID 228) Daily Challenge #234 - Happy Birthday! 229) Daily Challenge #235 - Reversing a Process 230) Daily Challenge #236 - RGB to Hex Conversion 231) Daily Challenge #237 - Delete Extra Occurrences 232) Daily Challenge #238 - One is the Loneliest Number 233) Daily Challenge #239 - Graceful Tipping 234) Daily Challenge #240 - ATM 235) Daily Challenge #241 - Tip Calculator 236) Daily Challenge #242 - Expressions Matter 237) Daily Challenge #243 - Redacted! 238) Daily Challenge #244 - Search for Letters 239) Daily Challenge #245 - Sort Santa's Reindeer 240) Daily Challenge #246 - Readable Specification Pattern 241) Daily Challenge #247 - Get Planet Name By ID 242) Daily Challenge #248 - Chinese Numerals 243) Daily Challenge #249 - Incremental Changes 244) Daily Challenge #250 - Last Digit of a Large Number 245) Daily Challenge #251 - Largest Number in a Sequence 246) Daily Challenge #252 - Everybody hates Mondays 247) Daily Challenge #253 - Sort Sentences Pseudo-alphabetically 248) Daily Challenge #254 - The Vowel Code 249) Daily Challenge #255 - Is There an Odd Bit? 250) Daily Challenge #256 - How Many Are Smaller Than I? 251) Daily Challenge #257 - Halving Sum 252) Daily Challenge #258 - Ranking Poker Hands 253) Daily Challenge #259 - Duplicate Encoder 254) Daily Challenge #260 - Subtract the Sum 255) Daily Challenge #261 - Diagonal Strings 256) Daily Challenge #262 - No One Likes Spare Change 257) Daily Challenge #263 - Reverse Words 258) Daily Challenge #264 - Digital Root 259) Daily Challenge #265 - Equal Sides 260) Daily Challenge #266 - Who Likes It? 261) Daily Challenge #267 - Braking Speed 262) Daily Challenge #268 - Swapping Characters in Strings 263) Daily Challenge #269 - Decompose n! 264) Daily Challenge #270 - Fix String Case 265) Daily Challenge #271 - Simulate Population Growth 266) Daily Challenge #272 - Printer Errors 267) Daily Challenge #273 - Remove Duplicates 268) Daily Challenge #274 - Aerial Firefighting 269) Daily Challenge #275 - Casino Chips 270) Daily Challenge #276 - Unwanted Dollar Signs

Complete the function which get an input number n such that n >= 10 and n < 10000, then:

Sum all the digits of n.
Subtract the sum from n, and it is your new n.
If the new n is in the list below return the associated fruit, otherwise return back to task 1.

Example
n = 325
sum = 3+2+5 = 10
n = 325-10 = 315 (not in the list)
sum = 3+1+5 = 9
n = 315-9 = 306 (not in the list)
sum = 3+0+6 = 9
n =306-9 = 297 (not in the list)
...
. ...until you find the first n in the list below.

Here are all possible values of n:

1-kiwi
2-pear
3-kiwi
4-banana
5-melon
6-banana
7-melon
8-pineapple
9-apple
10-pineapple
11-cucumber
12-pineapple
13-cucumber
14-orange
15-grape
16-orange
17-grape
18-apple
19-grape
20-cherry
21-pear
22-cherry
23-pear
24-kiwi
25-banana
26-kiwi
27-apple
28-melon
29-banana
30-melon
31-pineapple
32-melon
33-pineapple
34-cucumber
35-orange
36-apple
37-orange
38-grape
39-orange
40-grape
41-cherry
42-pear
43-cherry
44-pear
45-apple
46-pear
47-kiwi
48-banana
49-kiwi
50-banana
51-melon
52-pineapple
53-melon
54-apple
55-cucumber
56-pineapple
57-cucumber
58-orange
59-cucumber
60-orange
61-grape
62-cherry
63-apple
64-cherry
65-pear
66-cherry
67-pear
68-kiwi
69-pear
70-kiwi
71-banana
72-apple
73-banana
74-melon
75-pineapple
76-melon
77-pineapple
78-cucumber
79-pineapple
80-cucumber
81-apple
82-grape
83-orange
84-grape
85-cherry
86-grape
87-cherry
88-pear
89-cherry
90-apple
91-kiwi
92-banana
93-kiwi
94-banana
95-melon
96-banana
97-melon
98-pineapple
99-apple
100-pineapple

Tests:
SubtractSum(10)
SubtractSum(1204)

Good luck!


This challenge comes from aryan-firouzian on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

Daily Challenge (270 Part Series)

1) Daily Challenge #1 - String Peeler 2) Daily Challenge #2 - String Diamond 3 ... 268 3) Daily Challenge #3 - Vowel Counter 4) Daily Challenge #4 - Checkbook Balancing 5) Daily Challenge #5 - Ten Minute Walk 6) Daily Challenge #6 - Grandma and her friends 7) Daily Challenge #7 - Factorial Decomposition 8) Daily Challenge #8 - Scrabble Word Calculator 9) Daily Challenge #9 - What's Your Number? 10) Daily Challenge #10 - Calculator 11) Daily Challenge #11 - Cubic Numbers 12) Daily Challenge #12 - Next Larger Number 13) Daily Challenge #13 - Twice Linear 14) Daily Challenge #14 - Square into Squares 15) Daily Challenge #15 - Stop gninnipS My sdroW! 16) Daily Challenge #16 - Number of People on the Bus 17) Daily Challenge #17 - Double Trouble 18) Daily Challenge #18 - Triple Trouble 19) Daily Challenge #19 - Turn numbers into words 20) Daily Challenge Post #20 - Number Check 21) Daily Challenge #21 - Human Readable Time 22) Daily Challenge #22 - Simple Pig Latin 23) Daily Challenge #23 - Morse Code Decoder 24) Daily Challenge #24 - Shortest Step 25) Daily Challenge #25 - Double Cola 26) Daily Challenge #26 - Ranking Position 27) Daily Challenge #27 - Unlucky Days 28) Daily Challenge #28 - Kill the Monster! 29) Daily Challenge #29 - Xs and Os 30) Daily Challenge #30 - What is the price? 31) Daily Challenge #31 - Count IPv4 Addresses 32) Daily Challenge #32 - Hide Phone Numbers 33) Daily Challenge #33 - Did you mean...? 34) Daily Challenge #34 - WeIrD StRiNg CaSe 35) Daily Challenge #35 - Find the Outlier 36) Daily Challenge #36 - Let's go for a run! 37) Daily Challenge #37 - Name Swap 38) Daily Challenge #38 - Middle Name 39) Daily Challenge #39 - Virus 40) Daily Challenge #40 - Counting Sheep 41) Daily Challenge #41 - Greed is Good 42) Daily Challenge #42 - Caesar Cipher 43) Daily Challenge #43 - Boardgame Fight Resolver 44) Daily Challenge #44 - Mexican Wave 45) Daily Challenge #45 - Change Machine 46) Daily Challenge #46 - ??? 47) Daily Challenge #47 - Alphabets 48) Daily Challenge #48 - Facebook Likes 49) Daily Challenge #49 - Dollars and Cents 50) Daily Challenge #50 - Number Neighbor 51) Daily Challenge #51 - Valid Curly Braces 52) Daily Challenge #52 - Building a Pyramid 53) Daily Challenge #53 - Faro Shuffle 54) Daily Challenge #54 - What century is it? 55) Daily Challenge #55 - Building a Pile of Cubes 56) Daily Challenge #56 - Coffee Shop 57) Daily Challenge #57 - BMI Calculator 58) Daily Challenge #58 - Smelting Iron Ingots 59) Daily Challenge #59 - Snail Sort 60) Daily Challenge #60 - Find the Missing Letter 61) Daily Challenge #61 - Evolution Rate 62) Daily Challenge #62 - Josephus Survivor 63) Daily Challenge #63- Two Sum 64) Daily Challenge #64- Drying Potatoes 65) Daily Challenge #65- A Disguised Sequence 66) Daily Challenge #66- Friend List 67) Daily Challenge #67- Phone Directory 68) Daily Challenge #68 - Grade Book 69) Daily Challenge #69 - Going to the Cinema 70) Daily Challenge #70 - Pole Vault Competition Results 71) Daily Challenge #71 - See you next Happy Year 72) Daily Challenge #72 - Matrix Shift 73) Daily Challenge #73 - ATM Heist 74) Daily Challenge #74 - Free Pizza 75) Daily Challenge #75 - Set Alarm 76) Daily Challenge #76 - Bingo! (or not...) 77) Daily Challenge #77 - Bird Mountain 78) Daily Challenge #78 - Number of Proper Fractions with Denominator d 79) Daily Challenge #79 - Connect Four 80) Daily Challenge #80 - Longest Vowel Change 81) Daily Challenge #81 - Even or Odd 82) Daily Challenge #82 - English Beggars 83) Daily Challenge #83 - Deodorant Evaporator 84) Daily Challenge #84 - Third Angle of a Triangle 85) Daily Challenge #85 - Unwanted Dollars 86) Daily Challenge #86 - Wouldn't, not Would. 87) Daily Challenge #87 - Pony Express 88) Daily Challenge #88 - Recursive Ninjas 89) Daily Challenge #89 - Extract domain name from URL 90) Daily Challenge #90 - One Step at a Time 91) Daily Challenge #91 - Bananas 92) Daily Challenge #92 - Boggle Board 93) Daily Challenge #93 - Range Extraction 94) Daily Challenge #94 - Last Digit 95) Daily Challenge #95 - CamelCase Method 96) Daily Challenge #96 - Easter Egg Crush Test 97) Daily Challenge #97 - Greed is Good 98) Daily Challenge #98 - Make a Spiral 99) Daily Challenge #99 - Balance the Scales 100) Daily Challenge #100 - Round Up 101) Daily Challenge #101 - Parentheses Generator 102) Daily Challenge #102 - Pentabonacci 103) Daily Challenge #103 - Simple Symbols 104) Daily Challenge #104 - Matrixify 105) Daily Challenge #105 - High-Sum Matrix Drop 106) Daily Challenge #106 - Average Fuel Consumption 107) Daily Challenge #107 - Escape the Mines 108) Daily Challenge #108 - Find the Counterfeit Coin 109) Daily Challenge #109 - Decorate with Wallpaper 110) Daily Challenge #110 - Love VS. Friendship 111) Daily Challenge #111 - 99 Bottles of Beer 112) Daily Challenge #112 - Functions of Integers on the Cartesian Plane 113) Daily Challenge #113 - Iterative Rotation Cipher 114) Daily Challenge #114 - Speed Control 115) Daily Challenge #115 - Look and Say Sequence 116) Daily Challenge #116 - Shortest Knight Path 117) Daily Challenge #117 - MinMinMax 118) Daily Challenge #118 - Reversing a Process 119) Daily Challenge #119 - Adding Big Numbers 120) Daily Challenge #120 - Growth of a Population 121) Daily Challenge #121 - Who has the most money? 122) Daily Challenge #122 - Clockwise Spirals 123) Daily Challenge #123 - Curry me Softly 124) Daily Challenge #124 - Middle Me 125) Daily Challenge #125 - 23 Matches or More 126) Daily Challenge #126 - The Supermarket Line 127) Daily Challenge #127 - Playing with Passphrases 128) Daily Challenge #128 - Blackjack Scorer 129) Daily Challenge #129 - Clay Pigeon Shooting 130) Daily Challenge #130 - GCD Sum 131) Daily Challenge #131 - Remove Anchor from URL 132) Daily Challenge #132 - Is my friend cheating? 133) Daily Challenge #133 - Suitcase Packing 134) Daily Challenge #134 - Rice and Chessboard Problem 135) Daily Challenge #135 - The Wide Mouthed Frog! 136) Daily Challenge #136 - The Deaf Rats of Hamelin 137) Daily Challenge #137 - Help the Bookseller 138) Daily Challenge #138 - Do I get a Bonus? 139) Daily Challenge #138 - Keep Up the Hoop 140) Daily Challenge #140 - I love you, a little, a lot, passionately ... not at all 141) Daily Challenge #141 - Two Sum 142) Daily Challenge #142 - Parts of a Whole 143) Daily Challenge #143 - Big Arithmetic 144) Daily Challenge #144 - Box Office Clerk 145) Daily Challenge #145 - SET Card Game 146) Daily Challenge #146 - The Dollar Game 147) Daily Challenge #147 - NIM 148) Daily Challenge #148 - Disemvowel Trolls 149) Daily Challenge #149 - Fun with Lamps 150) Daily Challenge #150 - Boggle Guess Validator 151) Daily Challenge #151 - Reverse Parentheses 152) Daily Challenge #152 - Strongest Number in an Interval 153) Daily Challenge #153 - Horse Race Gamble 154) Daily Challenge #154 - Stable Arrangement 155) Daily Challenge #155 - Royal Arranged Marriages 156) Daily Challenge #162 - Taxi Dispatching 157) Daily Challenge #163 - Significant Figures 158) Daily Challenge #164 - Jump 159) Daily Challenge #165 - Password Lost in a Grid 160) Daily Challenge #166 - Cat and Mouse 161) Daily Challenge #167 - Return String As Sorted Blocks 162) Daily Challenge #168 - [Code golf] f (f (f b)) = f b 163) Daily Challenge #169 - Christmas Tree 164) Daily Challenge #170 - Pokemon Damage Calculator 165) Daily Challenge #171 - Ordering Beers in Poland 166) Daily Challenge #172 - Find All in an Array 167) Daily Challenge #173 - Pandemia 168) Daily Challenge #174 - Soccer League Table 169) Daily Challenge #175 - Complementary DNA 170) Daily Challenge #176 - Loopover 171) Daily Challenge #177 - Supersize Me 172) Daily Challenge #178 - Create Phone Numbers 173) Daily Challenge #179 - Hide Phone Numbers 174) Daily Challenge #180 - SMS Shortener 175) Daily Challenge #181 - Is King in Check? 176) Daily Challenge #182 - Arrh, grabscrab! 177) Daily Challenge #183 - Automorphic Numbers 178) Daily Challenge #184 - Form the Minimum 179) Daily Challenge #185 - House Numbers Sum 180) Daily Challenge #186 - Jumping Frog 181) Daily Challenge #187 - Most Sales 182) Daily Challenge #188 - Break camelCase 183) Daily Challenge #189 - Convert Number into Reversed Array 184) Daily Challenge #190 - capitalizeFirstLast 185) Daily Challenge #191 - Alphabetical Addition 186) Daily Challenge #192 - Can you Survive the Zombies? 187) Daily Challenge #193 - What's the Real Floor? 188) Daily Challenge #194 - Spread Number 189) Daily Challenge #195 - No Zeroes for Heroes 190) Daily Challenge #196 - Flou 191) Daily Challenge #197 - Population Growth 192) Daily Challenge #198 - 21 Blackjack 193) Daily Challenge #199 - List of All Rationals 194) Daily Challenge #200 - Longest Linear Palindromic Substring 195) Daily Challenge #201 - Complete the Pattern 196) Daily Challenge #202 - Complete the Pattern II 197) Daily Challenge #203 - Pascal's Triangle 198) Daily Challenge #204 - Partial Keys 199) Daily Challenge #205 - Consonant String Value 200) Daily Challenge #206 - Pound Means Backspace 201) Daily Challenge #207 - Snakes and Ladders 202) Daily Challenge #208 - Delete Occurrences of an Element 203) Daily Challenge #209 - Roman Numerals 204) Daily Challenge #210 - Separate Capitalization 205) Daily Challenge #211 - Product Partitions 206) Daily Challenge #212 - DNA to RNA 207) Daily Challenge #213 - Are they the "same"? 208) Daily Challenge #214 - Persistent Bugger 209) Daily Challenge #215 - Difference of 2 210) Daily Challenge #216 - Rainfall 211) Daily Challenge #217 - SMS w/ an Old Phone 212) Daily Challenge #218 - Possible Sides of a Non-Right Triangle 213) Daily Challenge #219 - Compare Strings 214) Daily Challenge #220 - What Dominates Your Array? 215) Daily Challenge #221 - The Merchant of York 216) Daily Challenge #222 - Parse Bank Account Numbers 217) Daily Challenge #223 - Responsible Drinking 218) Daily Challenge #224 - Password Validator 219) Daily Challenge #225 - Square'n'Sum 220) Daily Challenge #226 - Array to HTML Table 221) Daily Challenge #227 - Android Lock Screen 222) Daily Challenge #228 - Best Profit in Single Sale 223) Daily Challenge #229 - Haiku Validator 224) Daily Challenge #230 - Beeramid 225) Daily Challenge #231 - Perfect Powers 226) Daily Challenge #232 - Regex Pattern 227) Daily Challenge #233 - Get Planet Name by ID 228) Daily Challenge #234 - Happy Birthday! 229) Daily Challenge #235 - Reversing a Process 230) Daily Challenge #236 - RGB to Hex Conversion 231) Daily Challenge #237 - Delete Extra Occurrences 232) Daily Challenge #238 - One is the Loneliest Number 233) Daily Challenge #239 - Graceful Tipping 234) Daily Challenge #240 - ATM 235) Daily Challenge #241 - Tip Calculator 236) Daily Challenge #242 - Expressions Matter 237) Daily Challenge #243 - Redacted! 238) Daily Challenge #244 - Search for Letters 239) Daily Challenge #245 - Sort Santa's Reindeer 240) Daily Challenge #246 - Readable Specification Pattern 241) Daily Challenge #247 - Get Planet Name By ID 242) Daily Challenge #248 - Chinese Numerals 243) Daily Challenge #249 - Incremental Changes 244) Daily Challenge #250 - Last Digit of a Large Number 245) Daily Challenge #251 - Largest Number in a Sequence 246) Daily Challenge #252 - Everybody hates Mondays 247) Daily Challenge #253 - Sort Sentences Pseudo-alphabetically 248) Daily Challenge #254 - The Vowel Code 249) Daily Challenge #255 - Is There an Odd Bit? 250) Daily Challenge #256 - How Many Are Smaller Than I? 251) Daily Challenge #257 - Halving Sum 252) Daily Challenge #258 - Ranking Poker Hands 253) Daily Challenge #259 - Duplicate Encoder 254) Daily Challenge #260 - Subtract the Sum 255) Daily Challenge #261 - Diagonal Strings 256) Daily Challenge #262 - No One Likes Spare Change 257) Daily Challenge #263 - Reverse Words 258) Daily Challenge #264 - Digital Root 259) Daily Challenge #265 - Equal Sides 260) Daily Challenge #266 - Who Likes It? 261) Daily Challenge #267 - Braking Speed 262) Daily Challenge #268 - Swapping Characters in Strings 263) Daily Challenge #269 - Decompose n! 264) Daily Challenge #270 - Fix String Case 265) Daily Challenge #271 - Simulate Population Growth 266) Daily Challenge #272 - Printer Errors 267) Daily Challenge #273 - Remove Duplicates 268) Daily Challenge #274 - Aerial Firefighting 269) Daily Challenge #275 - Casino Chips 270) Daily Challenge #276 - Unwanted Dollar Signs

Posted on by:

thepracticaldev profile

dev.to staff

@thepracticaldev

The hardworking team behind dev.to ❤️

Discussion

markdown guide
 

Here is my simple solution to find the fruit name with PHP:

function subtractSum($n) {
  // fruit name "apple"
  $fruitArray = ["kiwi",
"pear",
"kiwi",
"banana",
"melon",
"banana",
"melon",
"pineapple",
"apple",
"pineapple",
"cucumber",
"pineapple",
"cucumber",
"orange",
"grape",
"orange",
"grape",
"apple",
"grape",
"cherry",
"pear",
"cherry",
"pear",
"kiwi",
"banana",
"kiwi",
"apple",
"melon",
"banana",
"melon",
"pineapple",
"melon",
"pineapple",
"cucumber",
"orange",
"apple",
"orange",
"grape",
"orange",
"grape",
"cherry",
"pear",
"cherry",
"pear",
"apple",
"pear",
"kiwi",
"banana",
"kiwi",
"banana",
"melon",
"pineapple",
"melon",
"apple",
"cucumber",
"pineapple",
"cucumber",
"orange",
"cucumber",
"orange",
"grape",
"cherry",
"apple",
"cherry",
"pear",
"cherry",
"pear",
"kiwi",
"pear",
"kiwi",
"banana",
"apple",
"banana",
"melon",
"pineapple",
"melon",
"pineapple",
"cucumber",
"pineapple",
"cucumber",
"apple",
"grape",
"orange",
"grape",
"cherry",
"grape",
"cherry",
"pear",
"cherry",
"apple",
"kiwi",
"banana",
"kiwi",
"banana",
"melon",
"banana",
"melon",
"pineapple",
"apple",
"pineapple",];

  $number = $n;
  while(true) {
      $str = (string)$number;
      $sum = 0;
      for($index=0; $index<strlen($str); $index++) {
          $sum += (int)$str[$index];
      }

      $number = $number - $sum;

      if ($number <= 99) {
          break;
      }

  }

  return  $fruitArray[$number-1];
}
 

Heres my solution in Javascript:
It seems like it always returns apple, pretty neat question huh (Unless im wrong? 😅)

const SubtractSum = return () => "apple"

How I found this out:

const fruits = [
"kiwi",
  "pear",
  "kiwi",
  "banana",
...
 "melon",
  "pineapple",
  "apple",
  "pineapple",
]

const SubtractSum = x => {
  const sum = `${x}`.split("").reduce((p, c) => +p + +c, 0)
  const y = x - sum
  return y <= 99 ? fruits[y - 1] : SubtractSum(y)
}

//Testing out all possible combinations 10 -- 10000
for (let i = 10; i < 10000; i++) {
  console.log(i, SubtractSum(i)) //Prints "apple"
} 

 

My version, in C# 😄

    public static string GetMatchingWordFor(int number)
    {
        var nValues = GetDictionaryFromRawString(RawValues);

        while (!nValues.ContainsKey(number))
        {
            number -= number.ToString()
                .Select(digit => int.Parse(digit.ToString()))
                .Aggregate(0, (acc, x) => acc + x);
        }

        return nValues[number];
    }

The helper function to convert the raw list into a usable dictionary:

    public static Dictionary<int, string> GetDictionaryFromRawString(string raw)
    {
        return raw.Split("\n")
            .Select(str =>
                str.Trim()
                    .Split("-"))
            .ToDictionary(
                row => int.Parse(row[0]),
                row => row[1]);
    }
 

I think this might be called a naive solution...

import random

def number_fruit():
    fruit_list = []
    fruit_dict = {
        1:'kiwi',
        2:'pear',
        3:'kiwi',
        4:'banana',
        5:'melon',
        6:'banana',
        7:'melon',
        8:'pineapple',
        9:'apple',
        10:'pineapple',
        11:'cucumber',
        12:'pineapple',
        13:'cucumber',
        14:'orange',
        15:'grape',
        16:'orange',
        17:'grape',
        18:'apple',
        19:'grape',
        20:'cherry',
        21:'pear',
        22:'cherry',
        23:'pear',
        24:'kiwi',
        25:'banana',
        26:'kiwi',
        27:'apple',
        28:'melon',
        29:'banana',
        30:'melon',
        31:'pineapple',
        32:'melon',
        33:'pineapple',
        34:'cucumber',
        35:'orange',
        36:'apple',
        37:'orange',
        38:'grape',
        39:'orange',
        40:'grape',
        41:'cherry',
        42:'pear',
        43:'cherry',
        44:'pear',
        45:'apple',
        46:'pear',
        47:'kiwi',
        48:'banana',
        49:'kiwi',
        50:'banana',
        51:'melon',
        52:'pineapple',
        53:'melon',
        54:'apple',
        55:'cucumber',
        56:'pineapple',
        57:'cucumber',
        58:'orange',
        59:'cucumber',
        60:'orange',
        61:'grape',
        62:'cherry',
        63:'apple',
        64:'cherry',
        65:'pear',
        66:'cherry',
        67:'pear',
        68:'kiwi',
        69:'pear',
        70:'kiwi',
        71:'banana',
        72:'apple',
        73:'banana',
        74:'melon',
        75:'pineapple',
        76:'melon',
        77:'pineapple',
        78:'cucumber',
        79:'pineapple',
        80:'cucumber',
        81:'apple',
        82:'grape',
        83:'orange',
        84:'grape',
        85:'cherry',
        86:'grape',
        87:'cherry',
        88:'pear',
        89:'cherry',
        90:'apple',
        91:'kiwi',
        92:'banana',
        93:'kiwi',
        94:'banana',
        95:'melon',
        96:'banana',
        97:'melon',
        98:'pineapple',
        99:'apple',
        100:'pineapple'        
    }

    num_int = random.randint(10,10000)
    num_str = str(num_int)
    num_list = list(num_str)    
    num_list_int = []


    for x in num_list:
        xint = int(x)
        num_list_int.append(xint)

    sum_num_int_list = sum(num_list_int)   
    new_n = num_int - sum_num_int_list

    if new_n in fruit_dict:
        print(new_n,'=',fruit_dict[new_n])
    else: 
        number_fruit()

number_fruit()

...and neither do I understand recursion (maximum recursion depth exceeded while calling a Python object) and why it always comes up apple.

 

Here is Ruby solution,

FRUITS = {
  1 => 'kiwi',
   ...
  100 => 'pineapple'
}

def substract_sum(num)
  if num >= 10 && num < 10000
    sum_of_digits = num.to_s.chars.map(&:to_i).inject(:+)
    if FRUITS.keys.include?(sum_of_digits)
      puts FRUITS[sum_of_digits]
    else
      puts "#{sum_of_digits} (not in the list)"  
    end
  else
    puts 'Enter valid number'  
  end
end

substract_sum(10)
substract_sum(1204)
 

Yanother Ruby solution

FRUIT = {
  '1' => 'kiwi',
# ...
  '100' => 'pineapple'
}

def subtract_sum(number)
  return unless (10...10_000).cover?(number)

  loop do
    number_split = number.to_s.split('')
    to_subtract = number_split.reduce(0) { |sum, i| sum += i.to_i }
    number -= to_subtract

    return FRUIT[number.to_s] if FRUIT.key?(number.to_s)
  end
end
 

Some python-that-can-be-improved:

elements = [
        "1-kiwi",
        "2-pear",
        "3-kiwi",
        "4-banana",
        "5-melon",
        "6-banana",
        "7-melon",
        "8-pineapple",
        "9-apple",
        "10-pineapple",
        "...",
        "100-pineapple"
        ]

def substractSum(n):
    if 10 <= n <= 10000:
        sum_n = 0
        for digit in str(n):
            sum_n += int(digit)

        result = n - sum_n

        while result > 100:
            for digit in str(n):
                sum_n += int(digit)
            result = n - sum_n

        print(n, result, elements[result-1])
    else:
        print("{}: Use value between 10 and 10000".format(n))

substractSum(9)
substractSum(10)
substractSum(31)
substractSum(110)
substractSum(111)
substractSum(325)
substractSum(1204)
substractSum(1316)
substractSum(2888)
substractSum(10000)
substractSum(10001)

Output of the above:

❯ python 260.py
9: Use value between 10 and 10000
10 9 9-apple
31 27 27-apple
110 100 100-pineapple
111 99 99-apple
325 95 95-melon
1204 98 98-pineapple
1316 95 95-melon
2888 80 80-cucumber
10000 100 100-pineapple
10001: Use value between 10 and 10000
 

Ada solution

with Ada.Strings.Unbounded;              use Ada.Strings.Unbounded;

subtype Parameter_Type is Integer range 10 .. 9999; 

subtype Fruit_Index is Integer range 1 .. 100;

Names : array(Fruit_Index) of Unbounded_String  := 
    ( 
-- Fill with names
     );

function SubctractSum(N : Parameter_Type)  return Unbounded_String
is (if N in Fruit_Index then Names(N) else "apple");

-- Explanation: 
-- N can be written as 
--
--       N = a*1000 + b*100 + c*10 + d 
--
-- if N <= 100, we access directly the name array.  
--
-- If N > 100 (which means b >= 1) the new N is
--
--       New_N = a*1000 + b*100 + c*10 + d - (a+b+c+d)
--                     = a*999 + b*99 + c*9
--
-- If the iteration stops with New_N it must be 
--  New_N <= 100 which implies a = 0,  b=1 
-- (it cannot be b=0 otherwise we would had 
-- not done another iteration) and c=0, that is,  
-- New_N = 99.
--
-- Therefore, unless N<=100, the result is "apple"
 

Here is a solution,

return "apple";
 

And here is a recursive Python solution,

fruits = [
    "kiwi",
    "pear",
    ....
    "melon",
    "pineapple",
    "apple",
    "pineapple"
]

def SubtractSum(number : int) -> str:
    temp = number - sum(map(int ,str(number)))
    if(1 <= temp <= 100):
        return fruits[temp-1]
    return SubtractSum(temp)
 

Rust solution:

const FRUITS: [&'static str; 100] = [
    "kiwi",
    "pear",
    "kiwi",
    "banana",
    "melon",
    "banana",
    "melon",
    "pineapple",
    "apple",
    "pineapple",
    "cucumber",
    "pineapple",
    "cucumber",
    "orange",
    "grape",
    "orange",
    "grape",
    "apple",
    "grape",
    "cherry",
    "pear",
    "cherry",
    "pear",
    "kiwi",
    "banana",
    "kiwi",
    "apple",
    "melon",
    "banana",
    "melon",
    "pineapple",
    "melon",
    "pineapple",
    "cucumber",
    "orange",
    "apple",
    "orange",
    "grape",
    "orange",
    "grape",
    "cherry",
    "pear",
    "cherry",
    "pear",
    "apple",
    "pear",
    "kiwi",
    "banana",
    "kiwi",
    "banana",
    "melon",
    "pineapple",
    "melon",
    "apple",
    "cucumber",
    "pineapple",
    "cucumber",
    "orange",
    "cucumber",
    "orange",
    "grape",
    "cherry",
    "apple",
    "cherry",
    "pear",
    "cherry",
    "pear",
    "kiwi",
    "pear",
    "kiwi",
    "banana",
    "apple",
    "banana",
    "melon",
    "pineapple",
    "melon",
    "pineapple",
    "cucumber",
    "pineapple",
    "cucumber",
    "apple",
    "grape",
    "orange",
    "grape",
    "cherry",
    "grape",
    "cherry",
    "pear",
    "cherry",
    "apple",
    "kiwi",
    "banana",
    "kiwi",
    "banana",
    "melon",
    "banana",
    "melon",
    "pineapple",
    "apple",
    "pineapple",
];

fn subtract_sum(sum: i32) -> &'static str {
    let mut s = sum;
    *FRUITS
        .iter()
        .nth(loop {
            if s <= 100 {
                break (s - 1) as usize;
            }
            s -= s
                .to_string()
                .chars()
                .map(|c| (c as u8 - 48) as i32)
                .sum::<i32>();
        })
        .unwrap()
}
 

A quick JS one:

First up, set up the base fruit mapping by splitting that string:

const
  inputFruitMappingString = `1-kiwi
2-pear
...other entries...
99-apple
100-pineapple`,
  baseFruitMapping = Object.fromEntries(
    inputFruitMappingString.split('\n').map(line => line.split('-'))
  )

The fruit-fetching-function itself:

function fruitForIndex(i) {
  return baseFruitMapping[i] ??
    fruitForIndex(
      [...String(i)].reduce((acc, digit) => acc - digit, i)
    );
}

The guts of that is: [...String(i)].reduce((acc, digit) => acc - digit, i)
Breaking that up:

  • String(i): i is a number so to split it into characters, render it into a standard decimal string
  • [...String(i)]: Easy way to split the string into chars
  • [...String(i)].reduce((acc, digit) => acc - digit, i): The reduce function is passed the number itself as its initial value and then goes through the array of digits, subtracting each from the running total.

Bit of sanity checking...

// Debug version of the function
function fruitForIndex(i) {
  console.log(i), 
  return baseFruitMapping[i] ?? fruitForIndex([...String(i)].reduce((acc, digit) => acc - digit, i));
}

> fruitForIndex(1)
1
< "kiwi"

> fruitForIndex(100)
100
< "pineapple"

> fruitForIndex(101)
101
99
< "apple"

> fruitForIndex(200)
200
198
180
171
162
153
144
135
126
117
108
99
< "apple"


Note that it's worth making sure you have a modern JS engine
Caniuse for Object.fromEntries
Caniuse for ??

 

Simple PHP solution using array_reduce

function substractTheSum(int $number): string {
    $fruitList = [
        1 => 'kiwi',
        2 => 'pear',
        // ...
    ];
    while($number > 100) {
        $number -= array_reduce(str_split((string) $number), fn($carry, string $num) => $carry += (int) $num);
    }
    return $fruitList[$number];
}
 

Go

EDIT: just realized this challenge was a trap, but leaving the (wrong) solution here for people wanting to try out Go (it's awesome, try it).

Commands for initializing the project.

$ mkdir $GOPATH/src/fruits
$ cd $GOPATH/src/fruits
$ touch fruits.go

The source-code.

// Set of utilities for manipulating fruits.
package fruits

// Find a fruit based on its index.
func FindFromInteger(integer uint16) string {
    if integer < 9 {
        switch (integer) {
        case 1:
            return "kiwi"

        case 2:
            return "pear"

        case 3:
            return "kiwi"

        case 4:
            return "banana"

        case 5:
            return "melon"

        case 6:
            return "banana"

        case 7:
            return "melon"

        case 8:
            return "pineapple"
        }
    }

    return "apple"
}

Commands for the unit tests.

$ touch fruits_test.go

The source-code for unit tests.

package fruits_test

import "testing"
import "fruits"
import "fmt"

func TestFindFromInteger(t *testing.T) {
    var valuesExpectations map[uint16]string = map[uint16]string{
        0: "apple",
        1: "kiwi",
        2: "pear",
        3: "kiwi",
        4: "banana",
        5: "melon",
        6: "banana",
        7: "melon",
        8: "pineapple",
        9: "apple",
        10: "apple",
        100: "apple",
        1_000: "apple",
        325: "apple",
        10_000: "apple",
    }

    for value, expectation := range valuesExpectations {
        var result string = fruits.FindFromInteger(value)

        if result != expectation {
            t.Errorf("Expected fruits.FindFromInteger(%d) to equal %s but got %s.", value, expectation, result)
        }
    }
}

func BenchmarkFindFromInteger(b *testing.B) {
    for index := 0; index < b.N; index++ {
        fruits.FindFromInteger(10_000)
    }
}

func ExampleFindFromInteger() {
    fmt.Printf("Fruit for index %d is %q.\n", 15, "apple")
    // Output: Fruit for index 15 is "apple".
}

Commands for the tests, benchmark and coverage.

$ go test -cover -bench .
goos: linux
goarch: amd64
pkg: fruits
BenchmarkFindFromInteger-4      482598516                2.58 ns/op
PASS
coverage: 100.0% of statements
ok      fruits  1.500s
 
 
 

Sum all the digits of n.

Base ten is implicit, I suppose.