ইনপুট দিয়ে বিপিএম গণনা করা হচ্ছে


30

সবচেয়ে সংক্ষিপ্ত কোডটি প্রোগ্রাম করুন যা পাস করা 8 টি ডেটা পয়েন্ট ব্যবহার করে গড় বিপিএম (বিটস প্রতি মিনিট) গণনা করবে। এটি আমার প্রথম পোস্ট, এবং আমি এর মতো কোনও প্রশ্ন দেখিনি। যেহেতু আমি ছন্দ গেমগুলির একটি অনুরাগী, আপনার নিজের কীবোর্ড এবং আপনার নিজস্ব ছন্দটি ব্যবহার করে বিপিএম গণনা করার জন্য একটি ছোট্ট সরঞ্জাম ব্যবহার করা ভাল লাগবে (যদি আপনার একটি থাকে ...)

চ্যালেঞ্জ

  • সমস্ত ইনপুট অবশ্যই একবচন হতে হবে। (অর্থাত্ "ইনপুট" হিসাবে কেবল "এন্টার" টিপুন)
  • আপনার প্রোগ্রামে কমপক্ষে 9 টি ইনপুট নিতে হবে। (সময়ের 8 টি তথ্য পয়েন্ট তৈরি করতে।)
  • আপনার প্রোগ্রামটি 2 দশমিক পয়েন্টের বৃত্তাকার কীগুলির উপরে থাকা বিপিএমের বিপিএম আউটপুট করবে। (অর্থাত্ 178.35)
  • সময় প্রথম ইনপুট থেকে শুরু হয়। প্রোগ্রাম শুরু না

এটি , তাই সংক্ষিপ্ত উত্তরটি জেতে।

উদাহরণ ইনপুট এবং আউটপুট

কমপক্ষে একটি উদাহরণ ইনপুট এবং আউটপুট সরবরাহ করুন। ইনপুটটি কেমন দেখতে হবে তার নিজের বর্ণনার সাথে তারা মিলছে তা নিশ্চিত করুন।

ইনপুট:

> [Enter-Key]
# User waits 1 second
...  7 more inputs
> [Enter-Key] 

আউটপুট:

> 60

বর্তমান বিজয়ী পাইথ ব্যবহার করে 22 বাইটে কার্লকাস্টার

যদিও বিজয়ী পাইথ ব্যবহার করছিল, তবুও মতলব উত্তরটি একটি উল্লেখযোগ্য উত্তর ছিল।


5
হা! আকর্ষণীয়, পিপিসিজিতে আপনাকে স্বাগতম; ভবিষ্যতের রেফারেন্সের জন্য আমাদের কাছে একটি স্যান্ডবক্স রয়েছে যেখানে আপনি আপনার চ্যালেঞ্জগুলি পোস্ট করার আগে তার প্রতিক্রিয়া পেতে পারেন। যদিও এটি বেশ ভালভাবে সম্পন্ন হয়েছে।
ম্যাজিক অক্টোপাস উরন

আমরা কীভাবে বিপিএম গণনা করব? আমরা কি প্রথম কিপ্রেসে টাইমিং শুরু করি বা কোডটি চলতে শুরু করলে? এক্সট্রাপোলটিংয়ের আগে আমরা কি 7 বা 8 দিয়ে ভাগ করব?
xnor

হুম .. তাই টাইমিংয়ের প্রথম কী টিপুন দিয়ে শুরু করা উচিত। বিভাগ হিসাবে, আমি এটি 9 ইনপুট করতে পরিবর্তন করব (যাতে আপনি 8 দ্বারা ভাগ করুন)
xNinjaKittyx

কুল প্রশ্ন! শুভকামনা
নোহ ক্রিশ্চিনো

উত্তর:


1

পাইথ , 22 বাইট

 wJ.d0 mw8.Rc480-.d0J2

(হ্যাঁ একটি শীর্ষস্থান আছে)

ইনপুট হ'ল 'প্রবেশ' টিপুন।

অতিরিক্ত আউটপুট অনুমোদিত হলে আমি স্পেসগুলি সরাতে এবং 20 বাইটের স্কোর পেতে পারি।

উদাহরণ কার্যকর করা

ব্যাখ্যা

 wJ.d0 mw8.Rc480-.d0J2
 w                      # take the first input
                        # (space) throw the result away
  J.d0                  # store the current system time in J
       mw8              # take 8 inputs and throw the result away
                 -.d0J  # difference of current time and J
             c480       # divide 480 by this
           .R         2 # round to 2 decimal places 

9

ম্যাটল্যাব / অক্টেভ, 58 56 55 বাইট

-১ বাইটের জন্য লুইস মেন্ডোকে ধন্যবাদ!

input('');tic;for k=1:7;input('');end;fix(48e3/toc)/100

আপনাকে 9 বার এন্টার টিপতে হবে। (অষ্টাভেও কাজ করে))

এখানে আপনি এটি ক্রিয়াতে দেখেন, বাম ম্যাটল্যাব, ডান অক্টেভ:


ডি আহা! কিন্তু এটি round(.,2)কি কাজ করে না, বা এটি নতুন সংস্করণে রয়েছে?
flawr

ওহ, এটি কেবল মতলব
লুইস মেন্ডো

7

জাভাস্ক্রিপ্ট (ES6), 77 74 বাইট

(i=8,n=Date.now,t)=>onclick=_=>(t=t||n(),i--||alert((48e6/(n()-t)|0)/100))

onclickগ্লোবাল windowঅবজেক্টে একটি ইভেন্ট তৈরি করে । উইন্ডোর যে কোনও জায়গায় ক্লিক করে বিট প্রেরণ করুন।

পরীক্ষার স্নিপেট


632,41! বেশ ভাল ক্যালক :) :) +1
ভি। কুর্তোয়া

6

পাইথন 3, 93 92 81 বাইট

সংরক্ষিত 11 ধন্যবাদ বাইট ফেলিপে

import time
a,*l,b=[input()or time.time()for i in' '*9]
print(round(480/(b-a),2))


আমি চেষ্টা করেছি print('%.2f'%(480/(b-a)))এবং print(f'{480/(b-a):.2f}')(পাইথন ৩..6 +), তবে উভয়ের উভয়ই সমান বাইটকাউন্ট রয়েছে
ফিলিপ


5

জাভাস্ক্রিপ্ট, 100 , 84 পাওয়েলসকে ধন্যবাদ , 82 বাইট জাস্টিন মেরিনারকে ধন্যবাদ

z=>{(a=alert)();i=0;s=(n=Date.now)();while(i++<8)a();a((48e4/(n()-s)).toFixed(2))}


1
আপনার Date.now()পরিবর্তে new Date().getTime()এবং 48e4পরিবর্তে ব্যবহার করতে সক্ষম হওয়া উচিত 480000
26

এছাড়াও আপনি ফলাফলটি ফিরে আসার পরিবর্তে ফিরে সতর্ক করতে পারেন (a=alert)()এবং আপনার প্রথম ব্যবহারের জন্য এবং তারপরে ব্যবহারের মতো ভেরিয়েবলকে সতর্কতা নির্ধারণ করতে পারেন a()
বুলেট

আহ্ অনেক ধন্যবাদ, আমি কখনও ভাবিনি 48e4, এবং ইনস্ট্যান্ট এবং alertএকসাথে কল করেছি : (a=alert)().
সার্জ কে।

1
আপনি sব্যবহারে স্যুইচ করতে পারেন Date.now()এবং .getTime()পরে ড্রপ করতে পারেন । এবং তারপরে আপনি Date.nowসংক্ষিপ্ত নামের সাথে উপনাম করতে পারেন । আপনি প্রাথমিকভাবে z=ফাংশনটিকে পুনরাবৃত্তভাবে কল করছেন না বলে প্রাথমিকটির প্রয়োজন নেই। এখানে 69 বাইট
জাস্টিন মেরিনার

ওহ, এবং আপনার সমাধানটি চ্যালেঞ্জের অনুরোধের মতো 2 দশমিক স্থানে যায় না।
জাস্টিন মেরিনার

4

জাভা 1.5+, 345 339 361 337 বাইট

-34 বাইট মাইকেলকে ধন্যবাদ জানাতে বলে আমি আমার আমদানি ঠিক করতে ভুলে গেছি

import java.awt.event.*;class B{public static void main(String[]a){new java.awt.Frame(){{addKeyListener(new KeyAdapter(){long x=System.currentTimeMillis();int b=0;public void keyPressed(KeyEvent e){if(e.getKeyChar()==' '&&b++==9){System.out.println(Math.round(6000000.0*b/(System.currentTimeMillis()-x))/100.0);}}});setVisible(1>0);}};}}

ব্যবহারকারী স্পেস বারটি টিপানোর সাথে সাথে তাদের তালিকাভুক্ত করুন। তারপরে, ব্যবহারকারী যখন এটি 9 বার টিপেছে, তখন ব্যবহারকারীকে বর্তমান বিপিএম প্রিন্ট করে:

এখানে চিত্র বর্ণনা লিখুন

গল্ফ কোডটিতে চিত্রের ডিবাগ বার্তাগুলি নেই।


Ungolfed:

import java.awt.event.*;

class B {
    public static void main(String[] a) {
        new java.awt.Frame() {
            {
                addKeyListener(new KeyAdapter() {
                    long x = System.currentTimeMillis();
                    int b = 0;

                    public void keyPressed(KeyEvent e) {
                        if (e.getKeyChar() == ' ' && b++ == 9) {
                            System.out
                                    .println(Math.round(6000000.0 * b
                                            / (System.currentTimeMillis() - x)) / 100.0);
                        }
                    }
                });
                setVisible(1 > 0);
            }
        };
    }
}

হাইস্কোর চেষ্টা করার জন্য কিন্ডার মজা ...

KEY PRESS0 AT 250ms.
KEY PRESS1 AT 343ms.
KEY PRESS2 AT 468ms.
KEY PRESS3 AT 563ms.
KEY PRESS4 AT 672ms.
KEY PRESS5 AT 781ms.
KEY PRESS6 AT 880ms.
KEY PRESS7 AT 989ms.
485

আমি একটি সামান্য পরিবর্তন করেছি এবং আমি 9 ইনপুট চেয়েছিলাম যাতে আপনার 7 এর পরিবর্তে 8 টি ডাটা পয়েন্ট থাকতে পারে (কেবল একটি ছোট পরিবর্তন হওয়া উচিত।)
xNinjaKittyx

একটি জায়গা মিস করেছেন:String[]a) {new java
স্টিফেন

আরেকটি বিষয় হ'ল, আমি একটি প্রয়োজনীয়তা রেখেছি যা বলছে "এটি 2 কিমিকের দশমিক পয়েন্টের বৃত্তাকার কীপ্রেসগুলির বিপিএম আউটপুট করবে" " এই রাউন্ডটি 2 দশমিক জায়গায় যায়?
xNinjaKittyx 21

1
@ xNinjaKittyx এখন করে।
ম্যাজিক অক্টোপাস উরন 21

1
রেকর্ডটি 2027.03কিছু ভাল বেঞ্চমার্কিংয়ের জন্য বিপিএম এক্সডি কিছুটা কোড পরিবর্তন করেছে
এক্সট্রিমবাউমার 9

3

সি # (.নেট কোর), 193 206 189 186 155 143 137 বাইট

-47 বাইট ধন্যবাদ TheLethalCoder
-4 ধন্যবাদ বাইট Nazar554
-16 ধন্যবাদ বাইট লুক
-2 ধন্যবাদ বাইট কামিল Drakari

_=>{var x=new long[9];for(int i=0;i<9;){Console.ReadKey();x[i++]=DateTime.Now.Ticks;}return Math.Round(48e8/(x[8]-x[0]),2);}

বাইট গণনায়ও যুক্ত হয়েছে:

using System;

পুরো প্রোগ্রাম:

namespace System
{
    class A
    {
        static void Main()
        {
            Func<int, double> f = _ =>
            {
                var x = new long[9];
                for (int i = 0; i < 9; )
                {
                    Console.ReadKey();
                    x[i++] = DateTime.Now.Ticks;
                }
                return Math.Round(48e8 / (x[8] - x[0]), 2);
            };
            Console.WriteLine(f(0));
        }
    }
}

1
প্রথম সময়ের জন্য প্রথম কী টিপবার পরে দুটি ভেরিয়েবলের একটি লুপের বাইরে থাকা আরও ছোট হবে এবং তারপরে লুপটিতে অন্যটি ওভাররাইট করে। আমি মনে করি না যে আপনাকে আউটপুট মানটি ফর্ম্যাট করতে হবে তাই +""ডাবল ফিরিয়ে দেওয়া ঠিক হবে। namespace System.Diagnostics{}সম্ভবত সংক্ষিপ্ত, তবে আপনি কেবলমাত্র সম্পূর্ণরূপে যোগ্যতার জন্য ব্যবহার Diagnosticsকরেন wযা সম্ভবত খুব খাটো। নোট করুন যে আপনি কল করার using System;জন্য আপনার বাইট গণনা অন্তর্ভুক্ত করা উচিত Console
TheLethalCoder

2
প্রতিস্থাপন 540000.0সঙ্গে5.4e5
Nazar554

1
ভাল আপনি কিছু করতে চাই (end-start).Millisecondsএবং সেট endএবং startকরতে DateTime.Now
TheLethalCoder

1
আমি মনে করি আপনার গণনায় একটি ত্রুটি হয়েছে। আপনি রিডকি কে থ্রেড.স্লিপ (100) দিয়ে প্রতিস্থাপন করলে আপনার 600 বিপিএম এর চেয়ে কিছুটা কম হওয়া উচিত, তবে আপনার কোডটি এর চেয়ে বেশি দেয় (670 বিপিএম)। সূত্রটি "60 সেক * 1000 মিমি / (ডেল্টামস / 8 পয়েন্ট)" হওয়া উচিত যা "48e8 / ডেল্টামস" এ অনুবাদ করে। এছাড়াও, আপনি $ আসতে পারেন "{48e8 / (ঘ [8] -d [0]) এঁটেল: N2।}" -20 ফো ;-)
লুক

1
আমি মনে করি আপনার 8/TimeSpan.TotalMinutesপরিবর্তে কিছু বাইট সংরক্ষণ করতে সক্ষম হওয়া উচিত 54e4/TimeSpan.TotalMilliseconds। এছাড়াও, একটি দ্রুত চেক দ্বারা ম্যাথ.রাউন্ড (মান, 2) ব্যবহার value.ToString("n2")না করে কয়েকটি অক্ষর সংরক্ষণ করা হয়েছে বলে মনে হচ্ছে আংশিক কারণ এর জন্য কম
প্যারেনেসিস

2

সি ++, 150 বাইট

#include<iostream>
#include<ctime>
#define G getchar()
void f(){G;auto s=clock();G;G;G;G;G;G;G;G;std::cout<<round(6000/(double(clock()-s)/8000))/100;}

আপনি যদি অপসারণ করেন #defineএবং এর পরিবর্তে 5 টি বাইট সংরক্ষণ করতে পারেনvoid f(){for(int i=0,auto s=clock();i++<9;){getchar();}std::cout<<round(6000/(double(clock()-s)/8000))/100;}
ডিজেএমসিএমহেম

না, কারণ যদি আমি এটি করি তবে টাইমিং প্রথম ইনপুট এর আগে শুরু হবে, যখন বলা হয় টাইমিং প্রথম ইনপুট থেকে শুরু হয়। প্রোগ্রাম শুরু নয়
হাটসুপয়েন্টারকুন

3 থেকে লাইন পরিবর্তন করা #define G;getchar()এবং তারপরে পরিবর্তন clock();Gকরা clock()Gকি সম্ভব হবে ?
জাকারি

@ জাচারে আমি সিনট্যাক্স ত্রুটিগুলি
পেয়েছি

কিছু কারণে, আমার সংকলক সম্পর্কে অভিযোগ round
জাকারি

2

পাইথন + অভিশাপ, 122 বাইট

import curses as C,time as T
s=C.initscr()
C.cbreak()
t=0
exec's.getch();t=t or T.time()'*9
print'%.2f'%(540/(T.time()-t))

প্রয়োজন cursesমডিউল লোড করা হবে।

-9 বাইটস ধন্যবাদ ফিলিপে নারদী বাটিস্তার জন্য


অভিশাপ মডিউলটি কি করে? তুমি অভিশাপ দাও?
ম্যাজিক অক্টোপাস উরন 21

@ ম্যাজিক অ্যাক্টোপাস ইউরান অবশ্যই এটি যা করে তা অবশ্যই।
হাইপারনিউটারিনো

সময় () এর প্রথম ইনপুট থেকে শুরু করে প্রোগ্রাম প্রয়োগের সময় নয়।
xNinjaKittyx

@ xNinjaKittyx স্থির; ধন্যবাদ
হাইপারনিউটারিনো

@ ম্যাজিক অ্যাক্টপাস ইউরান জোকস একপাশে, এটি একটি টার্মিনাল ভিত্তিক জিইউআই লাইব্রেরি।
Kroltan

2

ভিবিএ, 57

msgbox"":x=timer:for i=1to 8:msgbox"":next:?480/(timer-x)

এন্টার টিপুন, বা বার্তা বাক্সে ওকে ক্লিক করুন।


2

পাইথন 3 , 74 বাইট

from timeit import*;print('%.2f'%(480/timeit('input()',input(),number=8)))

এটি অনলাইন চেষ্টা করুন!

এটি আপনাকে টিআইওতে নির্বোধ নম্বর দেবে কারণ এটি একবারে সমস্ত ইনপুট চালায় তবে এটি কার্যকর হয় work সেটআপ প্যারামিটার বাদে কয়েক সেকেন্ডে timeit()বিবৃতিটির সম্পাদনের সময়টি প্রদান করে । বৈধতার জন্য ইনপুট প্রতি 1s বিলম্ব সহ টিআইও'input()'input()


1

জাভা 8, 180 135 বাইট

-45 বাইটস System.inসরাসরি ব্যবহারের পরামর্শ দেওয়ার জন্য @ সোভোকেটফিনিক্সকে ধন্যবাদ জানায় ।

x->{System.in.read();long t=System.nanoTime(),i=0;for(;i++<8;System.in.read());System.out.printf("%.2f",4.8e11/(System.nanoTime()-t));}

একটি অব্যক্ত যুক্তিযুক্ত একটি বেনাম ল্যাম্বদা ফাংশন যা অবশ্যই একটি ফাংশনাল ইন্টারফেস পদ্ধতিতে বরাদ্দ করা উচিত যা একটি Exception(নীচে উদাহরণস্বরূপ) ছুড়ে দেয় । কনসোল থেকে পড়া; বেটস টিপে প্রেরণ করা হয় enter

অবহেলিত ডাব্লু / চারপাশের টেস্ট কোড

public class A {
    interface F{void f(Object x) throws Exception;}

    public static void main(String[]a) throws Exception {
        F f =

        x->{
            System.in.read();
            long t=System.nanoTime(),i=0;
            for(;i++<8;System.in.read());
            System.out.printf("%.2f",4.8e11/(System.nanoTime()-t));
        }

        ;
        f.f(null);
    }
}

1
এটি সরাসরি থেকে সরাসরি পড়া কি সংক্ষিপ্ত হবে System.in?
সক্রেটিক ফিনিক্স

@ সোক্র্যাটিকফোনিক্স আমি বাস্তবে কখনও চেষ্টা করে দেখিনি, তবে মনে হয় এটি কার্যকর হয়েছে; System.in.read()ইনপুট না পাওয়া পর্যন্ত কেবল অবরুদ্ধ ব্যবহার করে। ধন্যবাদ! উত্তর আপডেট করবে।
জাস্টিন মেরিনার

সঙ্গে 25559105,43 BPM এই লোল
ভি Courtois

1

সি #, 117 বাইট

ইতিমধ্যে একটি সি # (.নেট কোর) এর উত্তর রয়েছে যা এটি তৈরি করে। আউটপুটের জন্য ইন্টারপোলটেড স্ট্রিং যুক্ত করা হয়েছে (যে নেট কোরটির অভাব বলে মনে হচ্ছে) এবং ডেটটাইমের পরিবর্তে লম্বা অ্যারে ব্যবহার করে কিছু বাইট ছেঁটেছিল।

_=>{var d=new long[9];for(var i=0;i<9;){Console.ReadKey();d[i++]=DateTime.Now.Ticks;}return$"{48e8/(d[8]-d[0]):n2}";}

মানব সংস্করণ

class Program
{
    static void Main()
    {
        Func<int, string> f = _ =>
        {
            var d = new long[9];
            for (var i = 0; i < 9;)
            {
                Console.ReadKey();   // Switch these two to "automate" key presses.
                //Thread.Sleep(100); 

                d[i++] = DateTime.Now.Ticks;
            }
            return $"{48e8 / (d[8] - d[0]):n2}";
        };

        var result = f(1);
        Console.WriteLine();
        Console.WriteLine(result);
        Console.ReadKey(true);
    }
}

1

আর, 79 84 বাইট

scan();s=Sys.time;x=s();replicate(8,scan());cat(round(60/as.numeric((s()-x)/8),d=2))

কেবল এন্টার ব্যবহার করার সময় কাজ করে, যেহেতু এটি তত্ক্ষণাত স্ক্যান শেষ করবে। রাউন্ডিং হ্যান্ডলিং করে স্পষ্টভাবে printতার digitsযুক্তির জন্য ব্যবহার করে।

> scan();s=Sys.time;x=s();replicate(8,scan());cat(round(60/as.numeric((s()-x)/8),d=2))
1: 
Read 0 items
numeric(0)
1: 
Read 0 items
1: 
Read 0 items
1: 
Read 0 items
1: 
Read 0 items
1: 
Read 0 items
1: 
Read 0 items
1: 
Read 0 items
1: 
Read 0 items
[[1]]
numeric(0)

[[2]]
numeric(0)

[[3]]
numeric(0)

[[4]]
numeric(0)

[[5]]
numeric(0)

[[6]]
numeric(0)

[[7]]
numeric(0)

[[8]]
numeric(0)

[1] 439.47

এটি কি 1000 এর বেশি সিপিএমের সাথেও সঠিক?
রোমান গ্রাফ

@ রোমানগ্রাফ ছিঃ সম্পাদনা করা হয়েছে।
জেএডি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.