You have as an array with a single value which is a string ‘ABCDEF’. Then you are calling cycle on the first element of the array, that string, not the array itself. Since cycle is an enumerable method (for things like arrays and hashes, that you iterate through), it will return an error when you run it on a string. To run it on the array you created you would call a.cycle. That will resolve the error, but it still won’t give you the results you want, since cycle just loops through and outputs each element of the array. Based on your example, cycle isn’t necessarily what you want to use.
Your example doesn’t give the best example of what your overall goal, but maybe this will help.
You can either change your variable to be an ARRAY of letters or a STRING
an array
a = ['A', 'B', 'C', 'D', 'E', 'F']
a.each { |x| puts [x, a.values_at(1..)].join() }
each
iterates over the array
values_at
returns the array starting at the second element to the end
join
turns the array back into a string
a string
a = 'ABCDEF'
a.chars { |x| puts [x, a.chars.values_at(1..)].join() }
chars
turns the string into an array of characters like the example of above
Both of those will return the example you shared.
Another Example
abc = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"].
word = "BAT"
abc.each { |x| puts [x, word.chars.values_at(1..)].join() }
AAT
BAT
CAT
DAT
EAT
FAT
GAT
HAT
IAT
JAT
KAT
LAT
MAT
NAT
OAT
PAT
QAT
RAT
SAT
TAT
UAT
VAT
WAT
XAT
YAT
ZAT