इनपुट के साथ बीपीएम की गणना


30

सबसे छोटा कोड प्रोग्राम करें जो पारित किए गए समय के 8 डेटा बिंदुओं का उपयोग करके औसत बीपीएम (बीट्स प्रति मिनट) की गणना करेगा। यह मेरी पहली पोस्ट है, और मैंने इसके समान प्रश्न नहीं देखा है। चूंकि मैं लय के खेल का प्रशंसक हूं, इसलिए बीपीएम की गणना करने के लिए अपने स्वयं के कीबोर्ड और लय की अपनी भावना (यदि आपके पास एक है ...) का उपयोग करके एक छोटा सा काम करना अच्छा होगा।

चुनौती

  • सभी इनपुट विलक्षण होने चाहिए। (यानी "इनपुट" के रूप में केवल "एंटर" दबाकर)
  • आपके प्रोग्राम को कम से कम 9 इनपुट लेने होंगे। (समय बीतने के 8 डेटा पॉइंट बनाने के लिए।)
  • आपके कार्यक्रम को 2 दशमलव बिंदुओं पर गोल कीप्स के बीपीएम का उत्पादन करना चाहिए। (यानी 178.35)
  • टाइमिंग पहले इनपुट पर शुरू होती है। कार्यक्रम की शुरुआत नहीं

यह , इसलिए सबसे छोटा उत्तर जीतता है।

उदाहरण इनपुट और आउटपुट

कम से कम एक उदाहरण इनपुट और आउटपुट प्रदान करें। सुनिश्चित करें कि वे आपके अपने विवरण से मेल खाते हैं कि इनपुट कैसा दिखना चाहिए।

इनपुट:

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

आउटपुट:

> 60

वर्तमान विजेता पाइथ का उपयोग करके 22 बाइट्स में कार्लकास्टर है

भले ही विजेता पायथ का उपयोग कर रहा था, लेकिन माटलाब जवाब एक उल्लेखनीय जवाब था।


5
हा! दिलचस्प, पीपीसीजी में आपका स्वागत है; भविष्य के संदर्भ के लिए हमारे पास एक सैंडबॉक्स भी है जहां आप उन्हें पोस्ट करने से पहले अपनी चुनौतियों पर प्रतिक्रिया प्राप्त कर सकते हैं। हालांकि यह बहुत अच्छी तरह से किया जाता है।
मैजिक ऑक्टोपस Urn

हम बीपीएम की गणना कैसे करते हैं? क्या हम पहले कीप पर टाइमिंग शुरू करते हैं या जब कोड चलने लगता है? क्या एक्सट्रपलेशन करने से पहले हम 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

MATLAB / ऑक्टेव, 58 56 55 बाइट्स

शुक्रिया @LuisMendo -1 बाइट के लिए!

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

आपको 9 बार एंटर दबाना है। (ऑक्टेव में भी काम करता है।)

यहाँ आप इसे एक्शन में देख रहे हैं, MATLAB को छोड़ दिया है, दाएं ऑक्टेव को:


डी 'ओह! लेकिन round(.,2)काम नहीं करता है, या यह नए संस्करणों में है?
18

ओह, यह केवल Matlab में काम करता है
लुइस मेंडू

7

जावास्क्रिप्ट (ईएस 6), 77 74 बाइट्स

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

onclickवैश्विक windowवस्तु पर एक घटना बनाता है । विंडो में कहीं भी क्लिक करके बीट्स भेजें।

टेस्ट स्निपेट


632.41! काफी अच्छा calc :) +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}')(python3.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
पॉवेल्स

इसके अलावा आप रिजल्ट को वापस करने के बजाय अलर्ट कर सकते हैं और (a=alert)()अपने पहले उपयोग के लिए एक वैरिएबल को अलर्ट असाइन कर सकते हैं और फिर बाद में उपयोग कर सकते हैं a()
पॉवेल्स

आह बहुत बहुत धन्यवाद, मैं कभी नहीं सोचा था 48e4और instanciate और 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 बार दबाया है, तो उपयोगकर्ता को वर्तमान BPM पर वापस प्रिंट करता है:

यहाँ छवि विवरण दर्ज करें

छवि में गोल्फ कोड में मौजूद डिबग संदेश नहीं हैं।


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);
            }
        };
    }
}

Kinda मज़ा की कोशिश करो और एक सर्वोच्चअंक पाने के लिए ...

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

1
@xNinjaKittyx अब करता है।
मैजिक ऑक्टोपस Urn

1
रिकॉर्ड 2027.03कुछ बेहतर बेंचमार्किंग के लिए BPM xD का कोड थोड़ा संशोधित है
XtremeBumer

3

सी # (.NET कोर), 193 206 189 186 155 143 137 बाइट्स

-47 बाइट्स की बदौलत थेथालकोडर
-4 बाइट्स का शुक्रिया Nazar554
-16 बाइट्स की बदौलत, ल्यूक
-2 बाइट्स की बदौलत कामिल दकरी को धन्यवाद

_=>{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
द लीथेलकोडर

2
के 540000.0साथ बदलें5.4e5
Nazar554

1
वैसे आप कुछ करना (end-start).Millisecondsऔर सेट करना endऔर startकरना चाहते हैं DateTime.Now
TheLethalCoder

1
मुझे लगता है कि आपको अपनी गणना में त्रुटि मिली है। यदि आप ReadKey को Thread.Sleep (100) से बदल देते हैं, तो आपको 600 BPM से थोड़ा कम मिलना चाहिए, लेकिन आपका कोड इससे अधिक (लगभग 670 BPM) देता है। सूत्र "60sec * 1000ms / (डेल्टा / 8 पॉइंट)" होना चाहिए जो "48e8 / डेल्टा" में अनुवाद करता है। इसके अलावा, आप $ "{48e8 / (d [8] -d [0]) वापस कर सकते हैं। टिक्स: n2}" के लिए -20 ;-)
ल्यूक

1
मुझे लगता है कि आपको 8/TimeSpan.TotalMinutesइसके बजाय कुछ बाइट्स बचाने में सक्षम होना चाहिए 54e4/TimeSpan.TotalMilliseconds। इसके अलावा, 'Math.Round (मान, 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;}

आप 5 बाइट्स बचा सकता है अगर आप को दूर #defineहै और इसके बजाय करनाvoid f(){for(int i=0,auto s=clock();i++<9;){getchar();}std::cout<<round(6000/(double(clock()-s)/8000))/100;}
DJMcMayhem

नहीं, क्योंकि यदि मैं ऐसा करता हूं, तो पहले इनपुट से पहले समय शुरू हो जाएगा, जबकि यह कहा जाता है कि टाइमिंग पहले इनपुट पर शुरू होती है। कार्यक्रम की शुरुआत नहीं
HatsuPointerKun

यह परिवर्तन लाइन से 3 संभव हो जाएगा #define G;getchar()और फिर से बदल रहा clock();Gकरने के लिए clock()G?
जकार्इ

@ Zacharý मुझे वाक्यविन्यास त्रुटियां मिलती हैं
HatsuPointerKun

किसी कारण से, मेरे संकलक के बारे में शिकायत है 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 बाइट्स फेलिप नारदी बतिस्ता को धन्यवाद


शाप मॉड्यूल क्या करते हैं? तुम्हें श्राप लगे?
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn बेशक यह क्या करता है।
हाइपरन्यूट्रीनो

समय () को पहले इनपुट पर शुरू करने की आवश्यकता है और कार्यक्रम निष्पादन पर नहीं।
xNinjaKittyx

@xNinjaKittyx तय; धन्यवाद
HyperNeutrino

@MagicOctopusUrn एक तरफ चुटकुले, यह एक टर्मिनल-आधारित GUI पुस्तकालय है।
क्रोल्टन

2

vba, 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)))

इसे ऑनलाइन आज़माएं!

यह आपको TIO में मूर्खतापूर्ण नंबर देगा क्योंकि यह एक बार में सभी इनपुट चलाता है लेकिन यह काम करता है। सेटअप पैरामीटर को छोड़कर सेकंड में timeit()कथन का निष्पादन समय देता है । सत्यापन के लिए प्रति इनपुट 1 देरी के साथ TIO'input()'input()


1

जावा 8, 180 135 बाइट्स

-45 बाइट्स System.inसीधे @ उपयोग करने का सुझाव देते हुए @S डेमोक्रेटिक फेनिक्स का धन्यवाद ।

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

Ungolfed w / परिवेश परीक्षण कोड

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?
सुकराती फीनिक्स

@ S.SPPPenenix मैं वास्तव में कभी कोशिश नहीं की है, लेकिन यह काम करने लगता है; System.in.read()इनपुट प्राप्त होने तक ब्लॉक का उपयोग करना। धन्यवाद! जवाब अपडेट करेंगे।
जस्टिन मेरिनर

25559105.43 bpm इस lol के साथ
वी।

1

सी #, 117 बाइट्स

पहले से ही C # (.NET Core) उत्तर है कि यह एक बनाता है। आउटपुट के लिए प्रक्षेपित स्ट्रिंग (जो .NET कोर की कमी लगती है) जोड़ा गया और डेटाइम के बजाय लंबी सरणी का उपयोग करके कुछ बाइट्स का मुंडन किया।

_=>{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 से अधिक सीपीएम के साथ भी सही है?
रोमन ग्रफ

@ रोमनग्रॉफ़ वूप्स, नोप। संपादित।
JAD

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.