I think there are 2 possible methods you can apply to accomplish this;
Option 1 -- Use math
Now this trick only works when there is a certain logic to determine the correct position.
For example, when the LEDs are placed in a matrix. In that case you can calculate the actual position based on column and row.
In your example, I do not recognize a pattern, so this may not apply for that situation.
Option2 -- Make a translation matrix
Using FastLED we define an array for the LEDs, where the index is the n-th LED on the strip (eg. Led array => 1,2,3,4,5,6…49,50).
CRGB leds[NUM_LEDS];
The translation array basically is an array of integers (see also my article on Arrays in the Arduino course).
int translate[NUM_LEDS];
This array we need to populate with the order they are actually in, eg:
in translate[NUM_LEDS] { 5,37,2,34…21,1 }; // fill in the missing numbers of course
Now, normally we'd set a LED color based in the index, which now needs to be translated.
Original call:
leds[i] = CRGB::Red;
Call with translation:
leds[ translate[i] ] = CRGB::Red;
So as an illustration: we want the 4th LED (4) to be set to Red. However the 4th LED is actually #34. (from Led array => 5,37,2,34…21,1)
Here: "translate[4]" will actually return 34, which we use as the index for the actual "leds" and the correct LED will be called.