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
Notifications
Mark all as read
Challenges

Chequer checker

+1
−0

A chequer board (also spelt "checker board" in some places) is an 8 by 8 grid of squares alternating between 2 colours. Check whether a provided pattern could be a region of a chequer board.

The colours in the pattern will be represented by letters of the alphabet.

The squares of a chequer board all have the same side length. For this challenge, this length can be any positive integer.

Some of the squares may be cut by the boundary of the input region (the edges of the region shown in the input will not necessarily coincide with the edges of the squares). For example:

abba
baab
baab
abba

This shows a small region of a chequer board with squares of side length 2. Only the central square shows in its full 2 by 2 size. The squares adjacent to it have been sliced in half by the edges of the region.

Here is a diagram showing the adjacent squares being sliced in half by the region outlined in red:

A chequer board with a region outlined in red that slices some of the squares in half

This diagram is just to illustrate the reason that some squares on the boundary of the input region may appear smaller. The actual challenge is purely text based.

Input

  • Text in a rectangular grid (newline separated lines of equal length)
  • Each character is a letter of the English alphabet (a to z, or A to Z - you can choose which case to accept)
  • No other characters will be present - just letters and newlines
  • You can choose whether the inputs have a trailing newline
  • The input will contain at least one letter (the input region will be non-empty)
  • You can choose to accept a grid of letters in a different format, such as lists/arrays of strings, or 2D arrays of characters
  • The input will not be more than 255 by 255 letters

Output

  • A truthy output if the input is a region of an 8 by 8 chequer board (axis aligned - not squares at any other angle) and a falsy output otherwise
  • Falsy if there are more than 8 squares (including partial squares) horizontally or vertically
  • Falsy if there are more than 2 colours (more than 2 distinct letters)

Test cases

Truthy test cases

aa
aa

b

cccccccc

aabba
aabba
bbaab

cddddddddd
dccccccccc
dccccccccc

abababab
babababa
abababab
babababa
abababab
babababa
abababab
babababa

aqqaaq
qaaqqa

ba
ab

zzzzaaaazzzzaaaazzzzaaaazzzzaaaa
zzzzaaaazzzzaaaazzzzaaaazzzzaaaa
zzzzaaaazzzzaaaazzzzaaaazzzzaaaa
zzzzaaaazzzzaaaazzzzaaaazzzzaaaa

Falsy test cases

abbaaa

c
c
d
c

aabb
abba

ccdcc
cdddc
ddddd
cdddc
ccdcc

aba
aba

cdcdcdcdc

c
d
c
d
c
d
c
d
c

aabbaabbaabbaabba

abbaabbaabbaabbaa

abbaabbaabbaabba

abc

aabb
bbcc

Explanations in answers are optional, but I'm more likely to upvote answers that have one.

Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

The two cases `bbaabbaabbaabba` and `abbaabbaabbaabb` given as falsy do fit in 8 squares, shown by ad... (2 comments)

1 answer

+3
−0

BQN, 32 bytesSBCS

Run online!

{∨´∾8(⥊(⊐⌾⥊𝕩)⍷·≠⌜˜2|/∘⥊)¨1+↕≠⥊𝕩}

Brute force: tests against all boards up to the number of characters in 𝕩 using Find (). Using the longest dimension is faster but would cost a byte.

Not explained below, ⊐⌾⥊𝕩 applies Classify under Deshape to convert the argument from characters to numbers. If there are only two unique characters, they'll be 0 and 1, and a third would be 2 and so on. The top-left character is 0, like the top left of the checkerboard, so an 8-square checkerboard will always fit if the argument is valid.

Also used: Table, Indices.

{∨´∾8(⥊(⊐⌾⥊𝕩)⍷·≠⌜˜2|/∘⥊)¨1+↕≠⥊𝕩}
                            ≠⥊𝕩   # Length of flattened argument
                         1+↕      # Range from 1 to that length
    8(                 )¨         # On each size:        n
    8                 ⥊           #   Take 8 of them     n n n…
                    /∘            #   Each index n times 0 0…0 1 1…1 2 2…2… …7
                  2|              #   Mod 2              0 0…0 1 1…1 0 0…0… …1
              ·≠⌜                 #   Not-equals table
                 ˜                #     with itself, AKA checkerboard
       (⊐⌾⥊𝕩)⍷                    #   Find the numberized argument
      ⥊                           #   Convert to list
 ∨´                               # Any true in
   ∾                              #   the join of that?
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

Sign up to answer this question »

This community is part of the Codidact network. We have other communities too — take a look!

You can also join us in chat!

Want to advertise this community? Use our templates!

Like what we're doing? Support us! Donate