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

    0

    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
    import java.io.*;
    
    class Player {
        String name;
        int ch;
    }
    class PlayerTestDrive{
        public static void main(String[] args) throws Exception{
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    
            int count = 0;
            int count1 = 0;
    
            Player p1 = new Player();
            Player p2 = new Player();
    
            System.out.print("Введите имя первого игрока: ");
            p1.name = reader.readLine();
    
            System.out.print("Введите имя второго игрока: ");
            p2.name = reader.readLine();
    
            System.out.print(p1.name + ", введите число: ");
            p1.ch = Integer.parseInt(reader.readLine());
    
            System.out.print(p2.name + ", введите число: ");
            p2.ch = Integer.parseInt(reader.readLine());
    
            int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
            int aL = a.length;
            int rand = (int)(Math.random() * aL);
    
    
                if (rand == p1.ch){
                    count = 1;
                }
                if (rand == p2.ch){
                    count1 = 1;
                }
    
             if (count > count1){
                 System.out.println(p1.name + ", вы победили!");
             }else if(count < count1){
                 System.out.println(p2.name + ", вы победили!");
            }else{
                 System.out.println("Ничья, попробуйте еще раз!");
             }
    
        }
    }

    Игра! Два игрока вводят числа с клавиатуры от 1 до 10 , если введенное число какого-либо игрока совпадает с рандомным числом, то он становится победителем, если нет, то игра начинается еще раз! ПРОШУ СТРОГОЙ КРИТИКИ!

    Запостил: babushkaAntona, 19 Ноября 2017

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

    • int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
      int aL = a.length;
      int rand = (int)(Math.random() * aL);


      просто умножить на десяточку было неинтересно?
      Ответить
      • И правда, массив мог бы не писать даже, только заметил, спасибо
        Ответить
    • Да препод твою лабу и в таком виде примет, не парься. Поверь, твои одногрупники похлеще пиздеца нанесут.
      Ответить
      • блядь, зачем они детей учат программировать на джаве?
        Человек еще только-только массивы начал понимать, а ему InputStreamReader какой-то
        Ответить
      • Узнали своего успевающего студента по стилю?
        Помню, тут как-то раз встретились spivti и Bobik при подобных обстоятельствах. Кстати, spivti курсе на втором-третьем уже, или выгнали?
        Ответить
        • Лол, нет. Но для студента всё на самом деле очень неплохо.
          Ответить
        • А нет, spivti - просто какие-то задания выполнял. Это aesc_smirnov спрашивал про бинарный поиск, что и разнюхал Bobik.
          http://govnokod.ru/13852#comment197662
          Ответить
    • А почему Console.in обернули в BufferedReader, а Console.out не обернули в BufferedWriter?
      Ответить
    • Браузерная версия для желающих поиграть в эту увлекательную игру:
      function Player(name) {
        this.name = name;
        this.guessed = null;
      }
      
      Player.prototype.guess = function(n, rand) {
        this.guessed = n == rand;
      };
      
      (function main(){
        var nplayers = 2, players = Array(nplayers);
        
        for(var i=0; i<nplayers; ++i) {
          players[i] = new Player(prompt('Введите имя игрока ' + (i+1)));
        }
        
        while(1) {
          var rand = 10 * Math.random() | 0;
          players.forEach(p => p.guess(prompt(p.name + ', введите число'), rand));
          var winners = players.filter(p => p.guessed);
          if(winners.length == 1) {
            alert(winners[0].name + ', вы победили.');
            break;
          }
          alert('Ничья. Попробуете ещё раз.');
        }
      })();

      В отличие от версии автора тут легко можно играть и в количестве более двух человек, поправив всего одно значение, а также игра и правда продолжается, пока не зависнет браузер будет выявлен победитель.
      Ответить
      • Hot-seat в 2к17 уже не модно... Пили настоящую версию с сервером.
        Ответить
        • Что, и устанавливать все эти библиотеки и инструменты из той статьи с хабра?
          Что, и устанавливать все современные библиотеки и инструменты как делал в 2к16 герой той древней статьи с хабра про устаревшие технологии 2к16?
          Ответить
      • Как-то много кода, можно "менее громоздко".
        var players=[];
        for(var i=0; i<2; ++i) 
            players.push({name:prompt('Введите имя игрока ' + (i+1))});
        
        
        while(1) {
         players.forEach( p => prompt(p.name + ', введите число') );
            alert('Ничья. Попробуете ещё раз.');
        }

        Ответить
    • А обязательно было с Java чудить? Просто Python позволяет это написать гораздо более наглядно:
      import random as rnd
      N1 = input('Введите имя первого игрока:  ')
      N2 = input('Введите имя второго игрока:  ')
      def game():
          x = rnd.randint(1,10)
          n1 = input('Введите число:  ')
          if n1 == 'exit': pass
          else:
              n1 = int(n1)
              n2 = int(input('Введите число:  '))
              if n1 == x and n2 != x: print(N1, 'выиграл')
              elif n1 != x and n2 == x: print(N2, 'выиграл')
              else: print('ничья')
              print('Type "exit" to exit')
              game()
      game()
      Ответить
      • > Type "exit" to exit
        По quit тоже можно выйти, да и по любому другому слову.
        Ответить
        • Хм, да, не подумал о такой реализации. Тогда меняем сравнение с 'exit' на
          if not n1.isdigit(): pass

          А лучше вообще убираем этот кусок и делаем так (только сейчас дошло):
          if n1.isdigit():
              n1 = int(n1)
              n2 = int(input('Введите число:  '))
              if n1 == x and n2 != x: print(N1, 'выиграл')
              elif n1 != x and n2 == x: print(N2, 'выиграл')
              else: print('ничья')
              game()
          Ответить
          • Теперь оба игрока всё так же могут выйти по любому другому слову, как и в предыдущей версии.
            Неясно, почему в случае первого добавлена явная проверка.
            Ответить
            • Любое слово, кроме 'exit', в прошлой версии вызвало бы ValueError, т.к. к нему бы применили int(). Нет?
              Ответить
              • Ну да, о чём я и писал в зелёном сообщении.
                Ответить
                • Ну, как по мне, выходить через Exception несколько неэстетично.
                  Ответить
      • И правда, менее громоздко выходит
        import random as rnd
        n = 2; names = [input('Введите имя игрока %d: ' % (i+1)) for i in range(2)] # range(3), если нужно сообразить на троих
        
        while True:
            x = rnd.randint(1,10)
            winners = [n for n in names if x==int(input('%s, введите число: ' % n))]
            if len(winners)==1:
                print('%s выиграл' % winners[0])
                break
            else:
                print('ничья')
        Ответить
        • Ну, если уж думать о мультиплеере, то можно первой строкой ввод числа игроков, а дальше range от него.
          А вот насчет выхода после того, как кто-то победил, мы несколько разные задачи решаем: у меня они играют, сколько хотят.
          Ответить
          • Отлично, так даже лучше - не надо писать break.
            import random as rnd
            n = int(input('Сколько вас, игроки? '))
            names = [input('Введите имя игрока %d: ' % (i+1)) for i in range(n)]
            
            while True:
                x = rnd.randint(1,10)
                winners = [n for n in names if x==int(input('%s, введите число: ' % n))]
                print('%s выиграл' % winners[0] if len(winners)==1 else 'ничья')
            Ответить
            • Шик! Пошел ботать дальше. Хотя запись условной инструкции внутри функции не очень люблю, получаются длинные строки, которые в случае большого кода трудно редактировать. Но красиво.
              Ответить
              • > получаются длинные строки, которые в случае большого кода трудно редактировать
                Согласен. Но на досуге можно и поговнокодить для души.

                Пожалуй, самый упоротый вариант, до которого я сейчас могу дойти:
                import random as rnd
                import itertools
                
                names = [input('Введите имя игрока %d: ' % (i+1)) for i in range(int(input('Сколько вас, игроки? ')))]
                random_numbers = (rnd.randint(1,10) for x in itertools.count(1))
                games = (print([w for w in [['%s выиграл' % n for n in names if x==int(input('%s, введите число: ' % n))], ['ничья']] if len(w) == 1][0][0]) for x in random_numbers)
                
                for game in games: pass

                Кто-нибудь может подсказать что-то более элегантное, чем "if len(w) == 1][0][0]"?
                Ответить
                • Ааааа... Ну itertools-то за что?
                  Если цель уменьшить число строк, то еще одну можно убрать. Import позволяет применить себя сразу к нескольким модулям:
                  import random as rnd, itertools
                  Ответить
                  • > Ну itertools-то за что?
                    Я хотел работать с бесконечным списком (или с генератором, который позволит не хранить ни этот бесконечный список, ни первые N элементов из него) вместо бесконечного цикла, чтобы при случае вытянуть из него либо конечное, либо бесконечное число элементов по вкусу - в зависимости от потребности в играх. Как сделать range(Infinity), я не знал, но нагуглил itertools.count.

                    > Если цель уменьшить число строк
                    Цель здесь как в искусстве - заставить зрителя (да и автора то же) испытывать эмоции, сказать что-то новое и оригинальное. Одна длинная строка кода, сформированная элементарным образом, не заставляет испытывать эти эмоции. Желательно использовать моменты, которые приходят во вторую, третью и т.д. очередь.
                    Впрочем, import в одну короткую строку и правда лучше.

                    Вот тут я сделал две подстановки - names и random_numbers. random_numbers встали как есть, и это не привнесло ничего нового. А вот names встали только с добавлением нового генераторного слоя, что чуть менее тривиально, чем подстановка. Благодаря этому игра работает только на генераторах и списках, тут есть всего одна переменная, которой что-то явно присвоили, и её можно убрать. Вышло почти что лямбда-исчисление, но только с comprehensions:
                    import random as rnd, itertools
                    
                    games = next((print([w for w in [['%s выиграл' % n for n in names if x==int(input('%s, введите число: ' % n))], ['ничья']] if len(w) == 1][0][0]) for x in (rnd.randint(1,10) for x in itertools.count(1))) for names in [[input('Введите имя игрока %d: ' % (i+1)) for i in range(int(input('Сколько вас, игроки? ')))]])
                    
                    for game in games: pass

                    Внимательный хакер может написать в ответ исправленную версию (на генераторах и без функций, лямбд, объявлений переменных), которая работает так же, но полностью ленивая (не делает ничего при удалении последней строки), и его будут уважать.
                    Ответить
                    • Впрочем, тут надо было использовать (imperative_pitux for x in range(1)) вместо [imperative_pitux], чтобы games стало полностью ленивым:
                      import random as rnd, itertools
                      
                      games = ((print([w for w in [['%s выиграл' % n for n in names if x==int(input('%s, введите число: ' % n))], ['ничья']] if len(w) == 1][0][0]) for x in (rnd.randint(1,10) for x in itertools.count(1))) for names in ([input('Введите имя игрока %d: ' % (i+1)) for i in range(int(input('Сколько вас, игроки? ')))] for x in range(1)))
                      
                      for game in next(games): pass

                      Теперь задача хакера - сократить это и сделать, чтобы в конце было games вместо next(games) при всех прочих условиях.
                      Ответить
    • Создавать переменные count* бред
      Надо в класс запихать переменную win, а потом проверить
      Ответить
    • Короче работай работай нахуй!
      Ответить
    • #!/usr/bin/awk -f
      
      BEGIN {
          users[""] = -1;
          step = 0;
          printf "Введите имя игрока #%d: ", length(users)
      }
      
      {
          if (step == 0) {
              user = $0;
              users[$0] = -1;
              step = 1;
              printf "Игрок #%d, введите число: ", length(users) - 1
          } else {
              users[user] = $0
              step = 0;
              printf "Введите имя игрока #%d: ", length(users)
          }
      }
      
      END {
          srand();
          answer = int(rand() * 10) + 1;
          winners[0] = "";
          print "";
          for (u in users) {
              if (users[u] == answer) {
                  winners[length(winners)] = u;
              }
          }
          print "Ответ:", answer;
          if (length(winners) == length(users) || length(winners) == 1) {
              print "Ничья!";
          } else {
              printf "Победители: ";
              for (u in winners) {
                  if (winners[u] != "") {
                      printf winners[u];
                  }
              }
              print "";
          }
      }
      Ответить
      • Не понимаю, зачем Ларри придумал Perl, если был замечательный awk?
        Ответить

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