1. Java / Говнокод #19897

    −23

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    package com.engineerdollery;
    
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    import java.util.stream.IntStream;
    
    import static java.util.stream.Collectors.*;
    
    public class FizzBuzz {
        private static final String NUMBER = "\\d+";
    
        public String basic() {
            return IntStream.rangeClosed(1, 20)
                    .parallel()
                    .mapToObj(i -> i % 15 == 0 ? "fizzbuzz"
                            : i % 3 == 0 ? "fizz"
                            : i % 5 == 0 ? "buzz"
                            : Integer.toString(i))
                    .collect(joining(" "));
        }
    
        public String lucky() {
            return IntStream.rangeClosed(1, 20)
                    .parallel()
                    .mapToObj(i -> Integer.toString(i).contains("3") ? "lucky" // this is the only change from basic()
                            : i % 15 == 0 ? "fizzbuzz"
                            : i % 3 == 0 ? "fizz"
                            : i % 5 == 0 ? "buzz"
                            : Integer.toString(i))
                    .collect(joining(" "));
        }
    
        public String counter() {
            List<String> fizzBuzzList = IntStream.rangeClosed(1, 20)
                    .parallel()
                    .mapToObj(i -> Integer.toString(i).contains("3") ? "lucky"
                            : i % 15 == 0 ? "fizzbuzz"
                            : i % 3 == 0 ? "fizz"
                            : i % 5 == 0 ? "buzz"
                            : Integer.toString(i))
                    .collect(Collectors.toList());
    
            Map<String, Long> countMap = fizzBuzzList
                    .parallelStream()
                    .collect(groupingBy(s -> s.matches(NUMBER) ? "integer" : s, counting()));
    
            // reports
    
            String fizzbuzz = fizzBuzzList.parallelStream().collect(joining(" "));
    
            String counts = countMap.entrySet().parallelStream()
                    .map(e -> e.getKey() + ": " + e.getValue())
                    .collect(joining("\n"));
    
            return fizzbuzz + "\n" + counts;
        }
    }

    Поддерживаемый вариант FizzBuzz с параллелизмом и регулярными выражениями.
    Взято отсюда: http://codereview.stackexchange.com/questions/126845/interview-coding-test-fizz-buzz

    Запостил: Soul_re@ver, 28 Апреля 2016

    Комментарии (8) RSS

    Добавить комментарий