To Address or not Address, that is the question.

Salutations fellow nerds.

The project requires three (3x) 3ft RGB LED strips that change to a random color once a minute.

12V*15Amp PSU aside, an Arduino makes the most sense (and is my default).

Is it more efficient (code and hardware wise) to program the strip into a 1x3 LED matrix to produce three separate color changing regions OR to set up three PMW groups to modulate a total of nine (9x) mosfets?

I'm inclined to use addressable LEDs as they would probably be more efficient in both hardware and code, but am not sure how to program the matrix (Neopixel library by default) to treat groups of LEDs as one. Ex: 60 RGB LEDs, 3x groups of 20 that behave like 3 separate LEDS.

Any code samples or suggestions are much appreciated.

Look at the FastLED library. I could have sworn that it has the ability to let you have 3 different strips on three different PWM pins, but I could be wrong.

ieee488: Look at the FastLED library. I could have sworn that it has the ability to let you have 3 different strips on three different PWM pins, but I could be wrong.

So will the AdaFruit library.

Neopixels use 5V not 12V.

For code just write the same value to the first 20 LEDs then another value to the next 20 and another one to the final 20. Use a for loop for this..

Right - There are a few different LED drivers to chose from and I should have been more specific. For simplicity, lets use 3x Strips of the 60 LED (White, 5V, ~3.6Amp per meter) in series and assume that I use the NeoPixel Library.

How do I address more than one LED with a command to conserve memory?

I do not have the NeoPixel strips yet, but would like to know what values I can substitute for "n" in there code (where "ARRAY1" references LEDs 0:60, "ARRAY2" references LEDs 61:120, and "ARRAY3" references LEDs 121:180). I can define these names in global variables, but don't know the format for number ranges.

void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
 strip.setPixelColor(ARRAY1, red, green, blue);
 strip.setPixelColor(ARRAY2, red, green, blue);
 strip.setPixelColor(ARRAY3, red, green, blue);
}

That code will not compile - so why post it?

You do not "conserve memory" with NeoPixels. When you implement the code you missed, it sets up a memory array to match the strip you specified; all "setting" operations simply write to that array and strip.show(); transfers the array to the NeoPixels.

To address more that one LED, you use a "for" loop with an index range to suit.

This function will set a block of 20 LEDs to the same colour. Block number 0 to 2, colours 0 to 255

Untested but it gives you the idea.

void setBlock(byte block, byte red, byte green, byte blue){
    for(int i = block * 20; i<(20+block * 20); i++){
    strip.setPixelColor(i, red, green, blue);
}
}

I can define these names in global variables, but don’t know the format for number ranges.

There isn’t one.

You have to deal with the whole array.
The other option is to rewrite the library to do what you want, but given your question I don’t think you are up to that for the moment.