Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Sandbox

Comments on Decoding a non injective bit matrix encoding [FINALIZED]

Post

Decoding a non injective bit matrix encoding [FINALIZED]

+2
−0

Now posted: Decoding a non injective bit matrix encoding


The problem

Someone has created an encoding format for square bit matrices, however they have found it isn't perfect! One encoding may not decode to exactly one matrix, or it may not even be possible to decode.
Knowing this, you're tasked to write a program to decode a set of encodings and since time is of the essence, it's asked that you make it as fast as possible.

The encoding is as follows:

  • an integer, S, indicating the matrix size (2 for 2×2, 3 for 3×3, etc; always ≥2)
  • S integers corresponding to the number of 0s in each line (top-to-bottom)
  • S integers corresponding to the number of 0s in each column (left-to-right)
  • 2 integers corresponding to the number of 0s in each diagonal (main, then anti-diagonal)
  • 4 integers corresponding to the number of 0s in each quadrant (top-right, top-right, bottom-left, bottom-right)
  • S integers corresponding to the number of transitions in each line (top-to-bottom)
  • S integers corresponding to the number of transitions in each column (left-to-right)

The quadrants are defined by the side length divided by two, floored. Here's an example of a 5×5 matrix, with quadrant boundaries highlighted by different digits:

11222
11222
33444
33444
33444

The program should output the number of matrices possible to decode, followed by a representation of such matrices. That representation should be composed of 0s and 1s

Example

Encoding

4
1 1 1 1
1 1 1 1
0 2
0 2 2 0
1 2 2 1
1 2 2 1

Decoded matrix

1
0001
0010
0100
1000

Time constraints

The upper bound for evaluation is 20 seconds to allow everyone to use any language they want.
If you manage to get your decoder to run in under a second for the bigger cases, you will beat me!

Evaluation

All solutions will be evaluated by me on the same machine, and the time measurements posted as a comment on the corresponding answer.
You can expect the latest versions for each language and compiler/interpreter. For Python, PyPy will be used, to make it a more interesting option.

There will be some extra hidden test cases.


More test cases

Input 1

4
2 3 4 3 
2 3 4 3 
2 4
4 3 4 1 
1 1 0 1 
1 1 0 1 

Output 1

0

Input 2

3
0 2 0
1 0 1 
0 0 
0 0 1 1 
0 2 0 
2 0 2 

Output 2

1
000
101
000

Scoreboard

(no submissions yet)

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

6 comment threads

Time limit (6 comments)
Input specification (5 comments)
Consistent output (4 comments)
Potential edits (3 comments)
Test cases (3 comments)
Show more
Test cases
trichoplax‭ wrote over 1 year ago

It's worth providing some test cases to reduce the barrier to entry (less work to get started might mean more submissions).

Perhaps some small test cases similar to the example case, to help with getting a working algorithm, then some gradually larger test cases including some at the size you intend to use for measuring. It's also worth mentioning whether the measuring will be done with the provided largest test cases, or whether you will have hidden test cases for measuring, to prevent optimising to the specific test cases.

It's probably best to write an implementation in a slower language to make sure your test cases complete in a reasonable time, if you want the challenge to be open to a wide variety of languages. A test case that runs too quickly in a fast language can be run many times in a loop to get an accurate measurement, but one that runs too slowly to test in a slow language excludes that language from the challenge.

trichoplax‭ wrote over 1 year ago

(Having said that, a test case that runs too quickly risks measuring mostly how fast the input can be read, rather than how fast the calculation can be performed, so there's a balance to be found.)

Aftermost2167‭ wrote over 1 year ago

Yeah you're right, it's missing some more test cases, I will add those in a bit. I intend to have some hidden cases still, as the solutions should not optimize for the given example cases.

As for my implementation, I have written it in C++, but your idea is nice. I will translate it to Python and measure it running with PyPy (the norm in competitive programming), and maybe try Java as well.