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

    +64

    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
    import java.util.HashMap;
    import java.util.Map;
    import java.util.StringTokenizer;
    
    public class PolynomialParser {
    	
    	public Polynomial parse(String rawPolynomial) {
    		String source = normalizeSourceString(rawPolynomial);
    		Map<Integer, Integer> result = new HashMap<>();
    		
    		StringTokenizer tokenizer = new StringTokenizer(source, "[+-]", true);
    		boolean isCurrentNegative = false;
    		int currentDegree;
    		int currentCoefficient;
    		while (tokenizer.hasMoreTokens()) {
    			String currentToken = tokenizer.nextToken();
    			if ("-".equals(currentToken)) {
    				isCurrentNegative = true;
    			} else if ("+".equals(currentToken)) {
    				isCurrentNegative = false;
    			} else {
    				if (currentToken.contains("x")) {
    					if (currentToken.contains("^")) {
    						String[] tmp = currentToken.split("x\\^");
    						currentDegree = Integer.parseInt(tmp[1]);
    						int draftCoefficient = Integer.parseInt(tmp[0]);
    						currentCoefficient = (isCurrentNegative) ? - draftCoefficient : draftCoefficient;
    					} else {
    						currentDegree = 1;
    						String[] tmp = currentToken.split("x");
    						int draftCoefficient = (tmp.length == 0) ? 1 : Integer.parseInt(tmp[0]);
    						currentCoefficient = (isCurrentNegative) ? - draftCoefficient : draftCoefficient;
    					}
    				} else {
    					currentDegree = 0;
    					int draftCoefficient = Integer.parseInt(currentToken);
    					currentCoefficient = (isCurrentNegative) ? - draftCoefficient : draftCoefficient;
    				}
    				result.put(currentDegree, currentCoefficient);
    			}
    		}
    		return new Polynomial(result);
    	}
    	
    	private String normalizeSourceString(String source) {
    		String result = source.replaceAll("\\s+","");
    		return result.toLowerCase();
    	}
    }

    Из сегодняшнего. Парсинг многочленов.

    Запостил: itrofan-ebufsehjidov, 01 Февраля 2015

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

    • /([-+]?(\d+|\d*\.\d+([+-][eE]\d+)?)([a-z]+\^\d+)?)+/g

      Запускать не пробовал.
      Ответить
    • И давно жабу на первом курсе преподают?
      Ответить
      • У нас ее преподают всем желающим независимо от года и выбраной специальности. Можно хоть биологию учить, и взять курс по Яве. Т.е. обычно у курсов есть какие-то пререквизиты, например, матан нужно брать только если был окончен вводный курс по математике, а статистику нужно брать только если был окончен либо один курс матана, либо линалгебра и т.д. Для Явы нет никаких пререквизитов.
        Ответить
        • ага, а потом сиди рефактори после этих гуманитариев. По сути те же "хомячки" могут сесть за плюсы и так же ничего хорошего не выйдет.
          Ответить
          • Переделывать нужно за любым новичком.
            Скорее всего гуманитарии не пойдут лабать на говноспринге говноынтырпрайз говносервера.
            Даже если и пойдут, то говносервера сегодня могут строить специально обученые обезьяны управляемые обезьянами без какого-либо специального обучения.
            Яву учат для общего развития, чтобы у человека сформировалось понимание алгоритмов, огранизации данных, обработки информации. Это, например, нужно управленцам в програмировании, научным сотрудникам, которые хотят применить свои знания на практике, или хотят использовать специальное ПО для исследований.
            Но, я согласен с тем, что Ява - плохой для этого язык. Я думаю, что выбор обоснован распространенностью в большей степени чем какими-либо другими соображениями.
            Ответить
      • А по вашему лучше плюсы? Жаба - это норма
        Ответить
        • Ах лучше?! Ну так иди, засосись с жабой.
          Ответить
        • Жаба и плюсы это совершенно разные языки, и нужно быть полным ламером чтобы предлагать одно заменить другим.

          На первом курсе не надо учить ни то ни другое, кстати.
          Ответить

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