fork download
  1. import java.io.*;
  2. import java.util.*;
  3. import java.util.regex.*;
  4. import java.util.stream.*;
  5.  
  6. class GuitarTab {
  7.  
  8. public static enum NOTE {
  9. A, ASHARP, B, C, CSHARP, D, DSHARP, E, F, FSHARP, G, GSHARP;
  10.  
  11. public NOTE add(int num) {
  12. return NOTE.values()[(this.ordinal() + num) % NOTE.values().length];
  13. }
  14. }
  15.  
  16. private static final Pattern TAB_PATTERN = Pattern.compile("(.)\\|(.*)\\|");
  17.  
  18. private static final List<NOTE> NOTES = new ArrayList<>();
  19.  
  20. public static void main(String[] args) {
  21.  
  22. .sequential()
  23. .forEach((line) -> {
  24. Matcher m = TAB_PATTERN.matcher(line);
  25. if (m.matches()) {
  26. NOTE base = NOTE.valueOf(m.group(1));
  27. String input = m.group(2);
  28. if (NOTES.isEmpty()) {
  29. IntStream.range(0, input.length()).forEach(i -> NOTES.add(null));
  30. }
  31. for (int i = 0; i < input.length(); i++) {
  32. if (Character.isDigit(input.charAt(i))) {
  33. int fret = Character.getNumericValue(input.charAt(i));
  34. int index = i;
  35. if (Character.isDigit(input.charAt(i + 1))) {
  36. fret = fret * 10 + Character.getNumericValue(input.charAt(++i));
  37. }
  38. NOTES.set(index, base.add(fret));
  39. }
  40. }
  41. }
  42. });
  43. NOTES.stream()
  44. .filter(note -> note != null)
  45. .map(note -> note.toString().replaceAll("SHARP", "#"))
  46. .forEach(note -> System.out.print(note + " "));
  47. }
  48.  
  49. }
Success #stdin #stdout 0.09s 711680KB
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
D D D B A D D D B A G# G# G# B D G# G# G# B D