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

    Комментарии (50) 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?
        Ответить
    • var players=[],r;
      var f=(i => prompt(players[i].name + ', введите число') );
      for(var i=0; i<2; ++i) players.push({name:prompt('Введите имя игрока ' + (i+1))});
          
      while(1) alert( 
      	(r= 7 * Math.random()|0, f(0)==f(1) || r > 1 
      	? 'Ничья. Попробуете ещё раз.' 
      	: players[r].name + ', вы победили.') );
      Ответить
      • i am a very baaaad boy
        Ответить
      • Гениально!
        Можно добавить немного лямбд, благо с кобенатором setInterval циклы и рекурсия не нужны.
        (players => setInterval(() => alert( 
        	(r=> (f=>f(0)==f(1))(i => prompt(players[i] + ', введите число')) || r > 1 
        	? 'Ничья. Попробуете ещё раз.' 
        	: players[r] + ', вы победили.')(7 * Math.random()|0) ), 0))
        		((f=>[f(0),f(1)])(i => prompt('Введите имя игрока ' + (i+1))))

        Правда, частота выигрыша в этой версии, на мой взгляд, слишком велика. Надо было умножать не на бесконечность(семёрку), а на десятку.

        Если игроки вводят числа x,y от 1 до 10, то всего у них 100 вореантов. С учётом случайных чисел r - 1000 вореантов. Равенство x,y убирает из них 100 кобенаций, оставляя лесные 900. Из них 90 - равенство x=r и ещё 90 - равенство y=r. Для x=r|y=r имеем 180 кобенаций (складывать можно, т.к. x=y среди них нет. Есть шанс 180/1000 = 9/50, что кто-то победит в игре по правилу x=r|y=r, x!=y.

        Если рассматривать те же x,y,r на 1..10 и те же 900 вореантов x!=y, на r=1 будет 90 кобенаций и на r=2 будет 90 кобенаций, всего 180 кобенаций. Есть шанс 180/1000 = 9/50, что кто-то победит по правилам r<=2, x!=y.

        Для r=1..7 выходит 700 кобенаций, 7*9*10=630 кобенаций x!=y, из них 630/7=90 кобенаций для r=1 и 180 кобенаций для r<=2, x!=y. Шанс победы по правилам r<=2, x!=y равен 180/700 = 9/35, что выше нормы.
        Ответить
        • > Равенство x,y убирает из них 100 кобенаций, оставляя лесные 900
          Чувствуется дмух и принцимп вореционной школы.

          >Надо было умножать не на бесконечность(семёрку), а на десятку.
          Да, сначала 10 было, но слишком скушно было тестировать, я решил сделать игру интереснее.

          В принципе вот ультимативная (кобенная бесконечность):
          http://govnokod.ru/23553#comment394684
          Купи себе нормальный воренц-генератор, нищеброд.
          Ответить
          • Теперь у нас 2 кобенатора: 3.14159265dar и 1024--dar
            (не удивлюсь, если это один человек)
            Ответить
            • i am a very baaaad boy
              Ответить
            • Часть вторая. Два кобенатора
              Глава X. Телеграмма от братьев Кобенаторов

              Наступая на возле самого "Говнокода" его остановил поехавший с золотым зубом. Вореций, дай вореций!" После этой вореций, дай вореций!" После этой вореций!"

              Потом стали обнаруживаться признаки более пугающего остановил поехавший с золотым зубом. Наступая на волочащиеся за ним обрывки от утреннего холодка, геймдевелопер разорвал бандероль и понес скрипто. И конда всё закончилось, выедавал бандероль и прочел: "Графиня изменившимся ворцом бежит пруду".

              После этого нищий полуидиот, какие часто встречаются в интернетах и понес совершенную уже чепуху. Тем не мелкую псехозу. Это кгда ты уже чепуху. Это был обыкновенный зал, со смущенною душой. С этой вот встречи началась чертовщина. В три часа ночи его холодка, геймдевелопер разбудили. Пришла смска. Стуча зубами от утренным шагом двигался на волочащиеся за ним обрывки от слов: "Грузите вореции в бочка. Братья Кобенаторы"

              - Какая вореция? - ошалело прошептал стоя на волочащиеся за ним обрывки от слов.

              Но никто ему не ответил. Почтальон ушел. В дворовом садике страстно мычали генерации. Адрес правильный. Смещение тоже.

              "Малая Питушиная 5734 графиня изменившимся ворцом бежит пруду".


              В 23 15 46 часов 8 67 57 минут того же дня прибыла вторая депеша:

              "Зожатие продолжается зпт миллион кобенаций".
              Ответить
              • Анал, минет, кобеналет.
                Ответить
                • Сожимая в уме по просьбе Чеважевской девятьсот восемьдесят пять на тринадцать, он ошибся и дал неверное произведение, чего с ним никогда в жизни не случалось. Но сейчас ему было не до разположения информация. Сумасшедшие телеграммы не выходили из головы.
                  Ответить
              • Выглядит как-то ровненько и логично. Вроде про ГК, вроде история как в книге. Я даже не знаю, что и сказать.
                Слишком связно для автоматики, слишком упорото для здорового человека, больного ворециями. Похоже, Вы поехали (сошли с ума/осознали последний стандарт C++) и пишете это на полном серьёзе и вручную.
                Уважаю.
                Ответить
                • унас выдетъ зожать "Ctrl", теперь дадим индекс унас выдет лесные выкинуть 12! я понял только минет, кобеналет.

                  Чтоб "Enter" снова нажимает если большее 900 лесные выкинуть и сколько повториться любое сожатие для моему нужно. Ни "Enter" опередит гостя в месяц.
                  Ответить
                  • Чувствую, Вы не просто с ГК уходили в оффлайн, а ворили кобенации в кобтелке.
                    Ответить
                    • Я понял только сто один 56 25 84 11.

                      Чтоб спаммер снова сжимает "Enter" большее четырех тоесть 56 лесные выкинуть и сколько повториться любое явление для моему нужно.

                      И потому что ушёл офлан за да, еще очень С++.
                      Ответить
                • >сошли с ума/осознали последний стандарт C++

                  Да, это правда, начал читать фичи последних ecmascript 6,7,8.

                  Слишком связно для крестоблядиков, слишком упорото для здорового человека, больного фукециями.
                  Ответить
            • Некогда было больше кобенаторов, и это тоже был один человек, сознание которого вселилось сразу в несколько тел.
              Ответить

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