fork download
  1. def strings = [["E",4], ["B",3], ["G",3], ["D",3], ["A",2], ["E",2]]
  2. def scale = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#','A', 'A#', 'B']
  3.  
  4. def notes = [:]
  5. System.in.readLines()*.split("").collect {
  6. (it as List).indexed().findAll { it.value ==~ /\d/ }
  7. }.eachWithIndex{ frets, string ->
  8. frets.each{
  9. if (!frets[it.key-1]) {
  10. def fret = "${it.value}${frets[it.key +1]?:''}" as int
  11. def scaleIdx = (scale.indexOf(strings[string][0]) + fret)
  12. notes[it.key] = scale[scaleIdx % scale.size()] + (strings[string][1]+scaleIdx.intdiv(scale.size()))
  13. fret.intdiv(scale.size())
  14. }
  15. }
  16. }
  17. println notes.sort()*.value.join(' ')
Success #stdin #stdout 0.66s 332992KB
stdin
E|-----------------|-----------------|-----------------|-----------------|
B|-----------------|-----------------|-----------------|-----------------|
G|-7-7---7---------|-7-7---7---------|-------------7---|-----------------|
D|---------9---7---|---------9---7---|-6-6---6-9-------|-6-6---6-9--12---|
A|-----------------|-----------------|-----------------|-----------------|
E|-----------------|-----------------|-----------------|-----------------|
stdout
D4 D4 D4 B3 A3 D4 D4 D4 B3 A3 G#3 G#3 G#3 B3 D4 G#3 G#3 G#3 B3 D4