একটি টাইপিং গতি পরীক্ষা / পরিমাপের সিপিএম তৈরি করুন


11

নিয়ম

আপনার পছন্দের ভাষাতে টাইপিং স্পিড পরীক্ষা তৈরির সময় এটি!

। আপনি পছন্দের একটি অভিধান সহ একটি ফাইল সরবরাহ করুন (এর মধ্যে প্রতিটি 'শব্দ' অবশ্যই নিউলাইনটি সীমিত করা উচিত)। এটি মাধ্যমে পাইপ করুন stdinবা কমান্ড লাইন আর্গুমেন্ট হিসাবে এটির নাম সরবরাহ করুন।

একটি
সক্ষম
সম্পর্কিত
উপরে
অনুপস্থিতি
...

। ফাইলটি থেকে 10 টি এলোমেলো শব্দ চয়ন করুন (কোনও নকলকে অবশ্যই অনুমতি দেওয়া হবে না) এবং সেগুলি নিম্নলিখিত পদ্ধতিতে মুদ্রণ করুন:

-> সরাসরি
-> স্থল
-> পরবর্তী
-> পাঁচ
...

। এখন থেকে ব্যয় করা সময় পরিমাপ শুরু করুন!

। ব্যবহারকারীকে যত দ্রুত সম্ভব দশটি শব্দের সমস্ত টাইপ করতে দিন (একটি গাড়ীর ফেরার সাথে শেষ হয়েছে)। মুদ্রণ করুন OKআপনি যদি একটি ম্যাচ আছে, মুদ্রণ WRONGআমরা যখন টাইপিং ভুল আছে (বা ওয়ার্ড ইতিমধ্যে সফলভাবে এই রান টাইপ করা হয়)।

। ঘড়ি বন্ধ! এখন মুদ্রণ সিপিএমের : বেঞ্চমার্ক, যা নিম্নরূপ গণনা করা হয় (প্রতি মিনিটে Caracters) (sum of the characters of the chosen words / time spent typing (seconds)) * 60। নিকটতম পূর্ণসংখ্যার বৃত্তাকার এবং নিম্নলিখিত (নমুনা) আউটপুট পুনরুত্পাদন:

-> আপনি 344 সিপিএম রান করেছেন!

একটি নমুনা রান

-> নিষ্পত্তি করুন
-> পাশ
-> খোলা
-> মন্ত্রী
-> ঝুঁকি
-> রঙ
-> জাহাজ
-> একই
-> আকার
-> তরোয়াল
Settle
ঠিক আছে
পাশ
ঠিক আছে
খোলা
ঠিক আছে
# ...................... কিছু লাইন গুলি ছড়িয়েছে ......................
শব্দ
ভুল
তরবারি
ঠিক আছে
-> আপনি 298 সিপিএম রান করেছেন!

বিজয়ী

এটি কোড কলফ, সংক্ষিপ্ত এন্ট্রি (উত্স কোডের অক্ষর গণনায়) জিতেছে, মজা করুন!


4
আমি মনে করি বিজয়ীর আংশিকভাবে সর্বোচ্চ সিপিএম থাকা ব্যক্তি দ্বারা স্কোর করা উচিত;)
মেল্লামোকব

সময়টি পরিমাপ করার জন্য আমাদের কতটা সঠিকভাবে প্রয়োজন? এক সেকেন্ড রেজুলেশন কি ঠিক আছে?
ইলমারি করোনেন

@ ইলমারি করোনেন: এই নির্দিষ্ট প্রতিযোগিতার জন্য এক সেকেন্ডের রেজোলিউশন ঠিক থাকবে।
ক্রিস্টোফিড

উত্তর:


5

কে, 146

বর্তমান ওয়ার্কিং ডিরেক্টরিতে 'ড' নামে একটি অভিধান ফাইল ধরে।

{b:+/#:'a:10?_0:`:d;-1"-> ",/:a;s:.z.t;while[#a;$[(,/0:0)~*a;[a:1_a;-1"OK"];-1"WRONG"]];-1"--> You have scored ",($(60000*b)%"i"$.z.t-s)," CPM!";}

খুব সুন্দর এবং সংক্ষিপ্ত, Kআমি দেখেছি প্রথম এন্ট্রি (এখানে কোডগল্ফ.সে রয়েছে) ...
ক্রিস্টোফে

ধন্যবাদ, এখানে আমার সমস্ত উত্তর Q- এ বা (ক্রমবর্ধমান) কে।
tmartin

আমি কেন পুরোপুরি পাই না কেন এটি কেবল একটি একক উত্সাহ পেয়েছে (আমার)!
ক্রিস্টোফিড

11

বাশ - 217 212 199 196 অক্ষর

জিততে হবে না তবে মজাদার ছিল

declare -A W
for w in `shuf -n10`;do C+=$w;echo -\> $w;W[$w]=OK;done
SECONDS=0
for((;${#W[*]};));do read r;echo ${W[$r]-WRONG};unset W[$r];done
echo --\> You have scored $((60*${#C}/SECONDS)) CPM!

এখন 200 চর অধীনে!

ওয়ার্ডলিস্ট ফাইলটিকে একটি আর্গুমেন্ট হিসাবে গ্রহণ করে এখন স্ট্যান্ডার্ড ইনপুটটিতে শব্দের তালিকাটি নেয়। এটি টার্মিনালে আটকান এবং press D টিপুন

ম্যানটওয়ার্ক থেকে পরামর্শ কার্যকর করা হয়েছে


1
জিততে হবে না তবে মজাদার ছিল - আমি যখন আমার সি # সমাধানগুলি পোস্ট করি তখন একই কথা মনে হয় :)
ক্রিশ্চিয়ান লুপাস্কু

1
$SECONDSঅতিবাহিত সময়ের গণনা সহজ করার জন্য আপনি শেল ভেরিয়েবলটি ব্যবহার করতে পারেন ।
manatwork

আপনি আরও 2 টি অক্ষর মুছে ফেলতে পারেন: 1) :ডিফল্ট মান প্যারামিটার বিস্তারে; 2) পাটিগণিত মূল্যায়নের $সামনে SECONDS। প্রকৃতপক্ষে আরও একটি অতিরিক্ত চরিত্র রয়েছে, ফাইলটির এবং ফাইলের নতুন লাইন।
manatwork

4

রুবি (189 178 171 168)

$><<t=['',d=[*$<.lines].sample(10)]*'-> '
s=Time.now
puts d.delete($stdin.gets)?:OK:'WRONG'while d[0]
puts'--> You have scored %i CPM!'%((t.size-40)/(Time.now-s)*60)

খুব বেসিক, আমি নিশ্চিত যে এখানে আরও কিছু উন্নতি করতে হবে। কমান্ড-লাইন আর্গুমেন্ট হিসাবে অভিধানের ফাইলের নাম নেয়।

সম্পাদনা : অভিধান থেকে নতুন লাইন ধরে রাখার আশেপাশে কয়েকটি ছোটখাট টুইট। ফলস্বরূপ ফাইলটি সঠিকভাবে কাজ করতে একটি ট্রেলিং নিউলাইন প্রয়োজন।


4

সি, 305 309 347 অক্ষর

char*stdin,w[11][99];long i,t;main(int n,char**v){v=fopen(v[1],"r");
for(srand(time(&t));fgets(w[i++>9?(n=rand()%i)>10?0:n:i],99,v););
for(i=n=0;i<10;n+=printf("-> %s",w[++i])-4);
for(;i;puts(!strcmp(*w,w[11-i])?--i,"OK":"WRONG"))fgets(*w,99,stdin);
printf("--> You have scored %ld CPM!\n",n*60/(time(0)-t));}

উন্নতির ইঙ্গিতগুলির জন্য @ ইউগোরেনকে ধন্যবাদ। ইনকামিং ডিকশনারি এন্ট্রিগুলি বাতিল করতে একটি "11 তম শব্দ" ব্যবহার করা আমার আগের স্ট্রাইকপিপি-যদি-নির্বাচিত পদ্ধতির চেয়ে বড় জয় ছিল।

এখানে অবারিত উত্স:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

static char words[11][99];
static long i, t;

int main(int argc, char *argv[])
{
    FILE *fp;
    int n;

    fp = fopen(argv[1], "r");
    srand(time(0));
    for (i = 0 ; fgets(words[0], sizeof words[0], fp) ; ++i) {
        n = i < 10 ? i : rand() % i;
        if (n < 10)
            strcpy(words[n + 1], words[0]);
    }
    fclose(fp);

    n = 0;
    for (i = 1 ; i <= 10 ; ++i)
        n += printf("-> %s", words[i]) - 4;
    t = time(0);
    i = 1;
    while (i <= 10 && fgets(words[0], sizeof words[0], stdin)) {
        if (strcmp(words[0], words[i])) {
            puts("WRONG");
        } else {
            puts("OK");
            ++i;
        }
    }
    if (i > 9)
        printf("-> You have scored %ld CPM!\n", n * 60 / (time(0) - t));

    return argc - argc;
}

কিছুটা উন্নতি: 1. কে & R এর ঘোষণা: main(n,v)char**v;{...। 2. stdinহতে পারে char *fgets(buf,len,stdin)= gets(buf)(বাফারকে কখনই ছাড়বে না)। ৩.এর সাথে কী হয়েছে rand()%i? RAND_MAXদরকার নেই ৪. কেন long?
উগোরেন

1
এছাড়াও: 1) t=time(0)-> time(&t)। 2) n*60/(time(0)-t)এর প্রথম বন্ধনী রয়েছে যা অবশ্যই যেতে হবে - তখন *60স্থানান্তরিত হতে পারে । 3) অতিরিক্ত উপাদান দিয়ে প্রতিস্থাপন করুন, সরাসরি পড়ুন এর মাধ্যমে প্রতিস্থাপন করুন । n+=60*printfn/=time(0)-tbwstrcpyw
উগ্রোরেন

প্রতিস্থাপন করা হচ্ছে fgets()সঙ্গে gets()চাহিদা অভিধানে নতুন লাইন সঙ্গে মোকাবিলা করার জন্য অতিরিক্ত কোড; এই ক্ষত সংক্ষিপ্ত হচ্ছে। rand()%iযথেষ্ট নয়; আসল গণনা হয় (double)i*rand()/RAND_MAX। মুভিং *60printf যাও এছাড়াও পরিবর্তন মানে -4করতে -240তাই এটি পরিণামে একটি ক্ষতি বাতাস বইছে। আপনার অন্যান্য বিষয়গুলি বৈধ, যদিও (আমি বিশ্বাস করি)। ওহ, এবং longকারণ সময়টি প্রচলিতভাবে দীর্ঘ। কেবল কারণ আমরা গল্ফ করছি তার অর্থ এই নয় যে আমরা পোর্টেবল হতে পারি না।
ব্রেডবক্স

আমি মিস করেছি 4-> 240... বহনযোগ্যতা এবং গল্ফ একসাথে ভাল যায় না। তবে সংজ্ঞায়িত i,t;(অন্তর্নিহিত int) MAX_INTসেকেন্ড পর্যন্ত ঠিক আছে (যদি আপনি ব্যবহার না করেন time(&t))। সহ rand(), আপনার যা দরকার তা হ'ল একটি 10/iসুযোগ এবং rand()%i<10তা করে।
উগোরেন

আপনার এলোমেলো নির্বাচন কিছুটা ত্রুটিযুক্ত (এটি নয় যে নিখুঁত ন্যায্যতার প্রয়োজন হয় না)। 11 তম লাইনে 10/11 নির্বাচনের সুযোগ থাকা উচিত, তবে আপনি তা করেন rand()%10>10যা এটি 100% দেয়। rand()%(i+1)>9ভালো (কিন্তু এর পরিবর্তে যদি %(i+1)না i++>9?। এছাড়াও সরানো *stdinপ্রথম হতে হবে এবং একটি স্থান সঞ্চয়।
ugoren

2

সি # 401

void T(){
Action<string>C=Console.WriteLine;Func<string>R=Console.ReadLine;
var w=new List<string>();
for(var l=R();l!="";l=R())w.Add(l);
var s=w.OrderBy(_=>Guid.NewGuid()).Take(10).ToList();
s.ForEach(x=>C("=> "+x));
var t=s.Select(x=>x.Length).Sum();
var c=Stopwatch.StartNew();
while(s.Any()){C(s.Remove(R())?"OK":"WRONG");}
c.Stop();
C("--> You have scored "+c.Elapsed.TotalSeconds*60/t+" CPM!");}

এখানে চলমান সংস্করণ: http://ideone.com/Nt6Id


2

পাইথন ( 256 235)

import time as t,random as r
def p(x):print x
c=r.sample(input().split("\n"),10)
z=lambda x:p(("WRONG","OK")[raw_input()==x])or len(x)
p("--> "+"\n--> ".join(c))
_=t.time()
p("--> You have scored %d CPM!"%(sum(map(z,c))/(t.time()-_)*60))

এটি পাইথন ২.x এ, ৩.x এ আমি মুদ্রণ ফাংশনটি ব্যবহার করে আরও চারটি অক্ষর শেভ করতে পারি।

নিউলাইনস অন্তর্ভুক্ত


2
"প্রশ্ন: নিউলাইন গণনা করবেন?" আমরা সাধারণত "প্রয়োজনীয় চরিত্রগুলি" অনুসরণ করি। পাইথনের ক্ষেত্রে, হ্যাঁ, নতুনলাইনগুলি গণনা করা দরকার, যেহেতু এগুলি সরানো প্রোগ্রামটিকে কাজ করা থেকে বিরত রাখবে।
জোয়ে অ্যাডামস

1
আমার মনে হয় আপনি পরিবর্তন করতে পারেন z=lambda x:থেকে def z(x):
জোয়ে অ্যাডামস

@ জোয়্যা অ্যাডামস: আমি যদি কেবল কারও কাছে না ফেরার প্রয়োজন হত তবে আমার ফিরে আসতে হবে len(x)এবং def z(x):returnআরও পাঁচজন লেখক: /
জোয়েল করনেট

আমি মনে করি আপনি ইনপুটটিতে পাইপ দিয়ে (কিছু প্রশ্নে অনুমতি দেওয়া) এবং এর input()পরিবর্তে কিছু ক্যারেক্টার জিততে পারবেনsys.argv[1].read()
ক্রিস্টোফিড

@ জোয়েল কর্নেট: ওফস, আপনি ঠিক বলেছেন।
জোয়ে অ্যাডামস

2

পিএইচপি 187 বাইট

স্পষ্টতার জন্য নিউলাইনগুলি যুক্ত করা হয়েছে:

<?$s=file($argv[1]);
for(shuffle($s);$i++<10;$l+=strlen($$i))echo~ÒÁß,$$i=$s[$i];
for($t=time();$j++<10;)echo$$j==fgets(STDIN)?OK:WRONG,~õ?>
--> You have scored <?=0|$l/(time()-$t)*60?> CPM!

কমান্ড লাইন আর্গুমেন্ট হিসাবে অভিধানের ফাইলনাম গ্রহণ করে। অভিধান ফাইলটি অবশ্যই একটি নতুন লাইনের সাথে শেষ হওয়া উচিত।


2

স্কালা ( 319 306 304 302)

var s=util.Random.shuffle(io.Source.fromFile(args(0)).getLines.toSet)take 10
def?(a:Any)=println(a)
var l=(0/:s){_+_.size}
s map{"-> "+_}map?
def n=System.nanoTime
val t=n
while(s.size!=0){val m=readLine
if(s contains m)?("OK")else?("WRONG");s-=m}
?("--> You have scored "+l*60000000000L/(n-t)+" CPM!")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.