Ad
  • Custom User Avatar

    Expected is error, because there is more than one valid solution, for example:

    |328|756|491|   |328|756|491|
    |416|239|785|   |416|239|785|
    |795|418|263|   |795|418|263|
    +---+---+---+   +---+---+---+
    |983|542|176|   |983|547|126|
    |564|197|328|   |564|192|378|
    |172|683|954|   |172|683|954|
    +---+---+---+   +---+---+---+
    |649|375|812|   |649|375|812|
    |851|924|637|   |851|924|637|
    |237|861|549|   |237|861|549|
    

    If I copied everything correctly, you can see how the rows in the middle band are different.

  • Custom User Avatar

    If you are not using specific database functionality then you are using ANSI :smile:

    name alphabetically sorted test was split yesterday

    Thank you for your feedback

  • Custom User Avatar

    I firstly used rank() over (partition by people_id order by sth) and the result was also 1 for all the people, and all tests was positive. Additional tests seems to be necessary

  • Custom User Avatar

    You missed the part where description says and the name of every people alphabetically, hence id row has not the same value of the row_number

  • Custom User Avatar

    The reason I chose the '4' problem is that it's the shortest in base-10.
    Your problem is that 8 isn't the carry, it's the next digit; 0 is the carry.
    In multiplying the next digit and adding the carry, the product will always be 1 or 2 digits; the digit in the tens-place is the next carry and the digit in the ones-place is the next digit.

    I've worked the first several out below.

     2
    x2
    ==
    04
     ^--- 4 is the next digit, since the product < 10, we have a 0 carry
    
     0
     42
    x 2
    ===
    084
     ^---- this 8 is the next digit, it isn't a carry
                |
     00         |
     842 <------/
    x  2
    ====
    1684
    ^------ this 1 *is* a carry, and 6 is the next digit, 2 * 8 + (0 carry) = 16
    
     100
     6842
    x   2
    =====
    13684
    ^------ this 1 is the carry, 3 is the next digit (2 * 6 + 1 == 13)
    
     1100
     36842
     x   2
     =====
    073684
     ^------- product 2*3+1 -> 7 next digit, 0 carry
     
     
     01100
     736842
     x    2
     ======
    1473684
    ^---------- 1 is carry, 4 is next digit (2*7+0 = 14)
    
    101100
    4736842
    x     2
    =======
    9473684
    ^------------ 9 is next digit, 0 is carry (2 * 4 + 1 = 9)
    
     0101100
     94736842
    x       2
    =========
    189473684
     ^----------- 8 is next, 1 is carry (2 * 9 + 0 = 18)
    
    ...and so on.
    
    

    All you have left to determine is the stopping criteria and generalizing this algorithm for any number base. This should get you really close without taking the rest of the fun out.

  • Custom User Avatar

    These are interesting links. I'll give a big algorithmic hint that I may later flag as having spoiler content.

    Let's take the simplest base-10 problem: the 4-parasitic number ending in 4 is 102564 -- let's pretend we don't know the answer and see if we can figure out how to derive the 10256 part.

    If you wrote the problem out starting at the right and worked left:

     4
    x4
    ==
    16
    

    This means that a number ending in 4 times 4 gives a product that ends in 6, so 6 is the next digit to the left of 4. We also figured out that we have to deal with a 1 carry. Remember that the same set of digits are going to be in the top and the bottom, just shifted and the 4 rotated around to the beginning.

    So in the number on the top, write a 6 with the 1 carry over the top to create the next iteration for the multiplication:

     1
     64
     x4
    ===
    256
    

    So now we know the two digits to the left of the 4 in the multiplicand is 56, with a 2 carry. So expand the next digit out (note the carries across the top)

     21
     564
      x4
    ====
    2256
    

    I'm going to quit spelling the findings out and just write the rest of the iterations out:

     221
     2564
       x4
    =====
    10256 <-- this is the answer for what's to the left of 4, but if we continue...
    
    1221
    02564
       x4
    =====
    10256 <-- almost same answer - the only difference is in the carries and this time the lead digit rendered a 1 with no carry.
    
    01221
    102564
        x4
    ======
    410256 <-- the final product indicating the final answer has been reached for 4-parasitic ending in 4.
    
    The number is therefore "102564"
    

    The rest is really just a coding this up and accounting for which number-base you're dealing with.

  • Custom User Avatar

    I hope you're feeling engaged not discouraged. This is one of those puzzles that I feel gives a sense of accomplishment after completing it.

  • Custom User Avatar

    There's only a fixed set of answers, so I chose not to show expected values.
    I'll give you a couple of hints:

    • Most of the numbers are very large.
    • Think about how you would do the math a digit at a time.

    Good luck! Thanks you for your interest.