ব্রেনএফ *** এ কুইকসোর্ট কার্যকর করার পরে , আমি বুঝতে পেরেছিলাম সম্ভবত এটি তাত্ক্ষণিক নয়। সাধারণ ভাষায় ও (1) অপারেশনগুলি বিএফ-তে উল্লেখযোগ্যভাবে দীর্ঘ হয়। আপনি যখন কোনও ট্যুরিং টারপিতে কোডিং করছেন তখন কার্যকর দক্ষ সাজানোর জন্য বেশিরভাগ নিয়ম উইন্ডোটি ফেলে দেওয়া যেতে পারে ।
সুতরাং এখানে "দ্রুততম BrainF *** বাছাই রুটিন এভার" বাস্তবায়নের জন্য একটি চ্যালেঞ্জ। আমি নীচের দোভাষী ব্যবহার করে সমস্ত এন্ট্রি সময় করব। ইন্টারপ্রেটার স্বাক্ষরবিহীন অক্ষরের 16 কে টেপ ব্যবহার করে। সীমা ছাড়িয়ে অগ্রসর / বর্ধিত হলে টেপ এবং ঘর উভয়ই মোড়ানো হয়। ইওএফ পড়াটি বর্তমান ঘরে একটি 0 রাখে। পরিমাপকৃত সময়টিতে উত্স ফাইলটি পার্স করার সময় এবং সমস্ত ইনপুট ফাইল প্রক্রিয়া করার সময় উভয়ই অন্তর্ভুক্ত। দ্রুততম কোড জিতেছে।
পরীক্ষার ভেক্টরটি আস্কি ফাইলগুলির একটি সেট যা প্রকারের কেসগুলি বাছাইয়ের জন্য ডিজাইন করা হয়েছে including
ইতিমধ্যে সাজানো তালিকা: "অর্ডার করা"
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
একটি বিপরীত সাজানো তালিকা: "বিপরীত"
~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
কয়েকটি অনন্য মানগুলির অনেকগুলি অনুলিপি সমন্বিত একটি ফাইল: "কেবলমাত্র"
ibbkninbkrauickabcufrfckbfikfbbakninfaafafbikuccbariauaibiraacbfkfnbbibknkbfankbbunfruarrnrrrbrniaanfbruiicbuiniakuuiubbknanncbuanbcbcfifuiffbcbckikkfcufkkbbakankffikkkbnfnbncbacbfnaauurfrncuckkrfnufkribnfbcfbkbcrkriukncfrcnuirccbbcuaaifiannarcrnfrbarbiuk
সম্পূর্ণ এলোমেলো আসকি ফাইল: "এলোমেলো"
'fQ`0R0gssT)70O>tP[2{9' 0.HMyTjW7-!SyJQ3]gsccR'UDrnOEK~ca 'KnqrgA3i4dRR8g.'JbjR;D67sVOPllHe,&VG"HDY_'Wi"ra?n.5nWrQ6Mac;&}~T_AepeUk{:Fwl%0`FI8#h]J/Cty-;qluRwk|S U$^|mI|D0\^- csLp~`VM;cPgIT\m\(jOdRQu#a,aGI?TeyY^*"][E-/S"KdWEQ,P<)$:e[_.`V0:fpI zL"GMhao$C4?*x
১.২55৫ এর মধ্যে একটি এলোমেলো ফাইল: "পুরোরেজ"
öè—@œ™S±ü¼ÓuǯŠf΀n‚ZÊ,ˆÖÄCítÚDý^öhfF†¬I÷xxÖ÷GààuÈ©ÈÑdàu.y×€ôã…ìcÑ–:*‰˜IP¥©9Ä¢¬]Š\3*\®ªZP!YFõ®ÊÖžáîÓ¹PŸ—wNì/S=Ìœ'g°Ì²¬½ÕQ¹ÀpbWÓ³ »y »ïløó„9k–ƒ~ÕfnšÂt|Srvì^%ÛÀâû¯WWDs‰sç2e£+PÆ@½ã”^$f˜¦Kí•òâ¨÷ žøÇÖ¼$NƒRMÉE‹G´QO¨©l¬k¦Ó
প্রতিটি ইনপুট ফাইলের সর্বাধিক 255 বাইট থাকে।
এখানে দোভাষী। এটি কনসোল-মোড উইন্ডোজের জন্য লেখা, তবে পোর্ট করা সহজ হওয়া উচিত: কেবল প্রতিস্থাপন করুন read_time()
এবং sysTime_to_ms()
প্ল্যাটফর্ম-নির্দিষ্ট সমতুল্য সহ।
ব্যবহার: bftime program.bf infile1 [infile2 ...]
#include <windows.h>
#include <stdio.h>
#define MS_PER_SEC 1000.0f
#define MAXSIZE (0x4000)
#define MAXMASK (MAXSIZE-1)
typedef __int64 sysTime_t;
typedef unsigned char Uint8;
typedef unsigned short Uint16;
typedef struct instruction_t {
Uint8 inst;
Uint16 pair;
} Instruction;
Instruction prog[MAXSIZE] = {0};
Uint8 data[MAXSIZE] = {0};
const Uint8 FEND = EOF;
sysTime_t read_time() {
__int64 counts;
QueryPerformanceCounter((LARGE_INTEGER*)&counts);
return counts;
}
float sysTime_to_ms(sysTime_t timeIn) {
__int64 countsPerSec;
QueryPerformanceFrequency((LARGE_INTEGER*)&countsPerSec);
return (float)timeIn * MS_PER_SEC / (float)countsPerSec;
}
int main(int argc, char* argv[])
{
FILE* fp;
Uint8 c;
Uint16 i = 0;
Uint16 stack = 0;
sysTime_t start_time;
sysTime_t elapsed=0,delta;
if (argc<3) exit(printf("Error: Not Enough Arguments\n"));
fp = fopen(argv[1],"r");
if (!fp) exit(printf("Error: Can't Open program File %s\n",argv[1]));
start_time=read_time();
while (FEND != (c = fgetc(fp)) && i <MAXSIZE) {
switch (c) {
case '+': case '-': case ',': case '.': case '>': case '<':
prog[++i].inst = c;
break;
case '[':
prog[++i].inst = c;
prog[i].pair=stack;
stack = i;
break;
case ']':
if (!stack) exit(printf("Unbalanced ']' at %d\n",i));
prog[++i].inst = c;
prog[i].pair=stack;
stack = prog[stack].pair;
prog[prog[i].pair].pair=i;
break;
}
}
if (stack) exit(printf("Unbalanced '[' at %d\n",stack));
elapsed = delta = read_time()-start_time;
printf("Parse Time: %f ms\n", sysTime_to_ms(delta));
for (stack=2;stack<argc;stack++) {
Instruction *ip = prog;
fp = fopen(argv[stack],"r");
if (!fp) exit(printf("Can't Open input File %s\n",argv[stack]));
printf("Processing %s:\n", argv[stack]);
memset(data,i=0,sizeof(data));
start_time=read_time();
//Run the program
while (delta) {
switch ((++ip)->inst) {
case '+': data[i]++; break;
case '-': data[i]--; break;
case ',': c=getc(fp);data[i]=(FEND==c)?0:c; break;
case '.': putchar(data[i]); break;
case '>': i=(i+1)&MAXMASK; break;
case '<': i=(i-1)&MAXMASK; break;
case '[': if (!data[i]) ip = prog+ip->pair; break;
case ']': if (data[i]) ip = prog+ip->pair; break;
case 0: delta=0; break;
}
}
delta = read_time()-start_time;
elapsed+=delta;
printf("\nProcessing Time: %f ms\n", sysTime_to_ms(delta));
}
printf("\nTotal Time for %d files: %f ms\n", argc-2, sysTime_to_ms(elapsed));
}
এখনও পর্যন্ত ফলাফল
ভেক্টর সম্পূর্ণ সেট 5 র গড় গড় সময় এখানে:
Author Program Average Time Best Set Worst Set
AShelly Quicksort 3224.4 ms reverse (158.6) onlynine (1622.4)
K.Randall Counting 3162.9 ms reverse (320.6) onlynine (920.1)
AShelly Coinsort 517.6 ms reverse (54.0) onlynine (178.5)
K.Randall CountingV2 267.8 ms reverse (41.6) random (70.5)
AShelly Strandsort 242.3 ms reverse (35.2) random (81.0)