গিথুব ম্যাসেঞ্জার


13

লক্ষ্য: কোনও বার্তা প্রদর্শনের জন্য কোন দিনে কতগুলি অবদান রাখতে হবে তার একটি স্ট্রিং এবং আউটপুট নেওয়া এই লক্ষ্য।

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

সবিস্তার বিবরণী

  • ইনপুট
    • সমর্থন অক্ষর প্লাস স্পেস (যেমন [A-Za-z ])
    • স্থান ফাঁকা 3X7
    • অক্ষরগুলি নীচে সরবরাহিত এই 5x7 ডট ম্যাট্রিক্স ফন্টে সংজ্ঞায়িত করা হয়েছে
    • প্রতিটি বর্ণের আকার হ'ল ন্যূনতম বাউন্ডিং আয়তক্ষেত্র (যেমন l = 3x7, e = 5x5)
  • শোভা
    • 5 টি রঙ আছে C0, C1, C2, C3, C4
    • CXYসঙ্গে অবদান প্রয়োজন3X <= y < 3(X+1)
    • বর্ণগুলির মধ্যে C1এবং এর মধ্যে বিকল্প হওয়া উচিতC2
    • স্পেসগুলির কোনও রঙ নেই
    • প্রতিটি অক্ষরের আকার সংলগ্ন বর্ণগুলির সাথে ঠিক 1 কলামে ওভারল্যাপ হওয়া উচিত
    • কোনও ঘরে যদি 1 টিরও বেশি রঙ থাকে তবে ব্যবহার করুন C3
  • ডট ম্যাট্রিক্স
    • ডট ম্যাট্রিক্স হল গিথুবের অবদানের ইতিহাস গ্রাফ
    • আজ যদি সোমবার, 1 মে, 2017:
 4-30    5-07    5-15
[5-01]   5-08    5-16
 5-02    5-09     .
 5-03    5-10     .
 5-04    5-12     .
 5-05    5-13    
 5-06    5-14    
  • আউটপুট
    • এটি কীভাবে দেওয়া হয় তার উপর নমনীয়
    • (x, y) জোড়া
    • x বর্তমান তারিখের চেয়ে বড় বা সমান তারিখ
    • y তারিখে করা অবদানের সংখ্যা, x
    • কালানুক্রমিকভাবে হওয়া উচিত (যাতে আমি আমার ক্যালেন্ডারটি পূরণ করতে পারি)
    • যদি প্রতিটি তারিখের জন্য, xপ্রদত্ত yঅবদানগুলি করা হয়, তবে ইনপুট বার্তাটি গিথুব গ্রাফে প্রদর্শিত হবে (সঠিক রঙ সহ)
    • প্রথম তারিখটি দ্রুততম হওয়া উচিত should
  • স্কোরিং
    • বাইট জেতে সংক্ষিপ্ততম প্রোগ্রাম / ফাংশন

বর্ণমালা

অধীনে sylvan.black দ্বারা নির্মিত সিসি

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


পরীক্ষার কেস

এই পরীক্ষার ক্ষেত্রে, ধরুন বর্তমান তারিখটি 25 শে মে, 2017।

Input -> Output
-----    ------
l        5-28-17, 3
         6-3-17, 3
         6-4-17, 3
         6-5-17, 3
         6-6-17, 3
         6-7-17, 3
         6-8-17, 3
         6-9-17, 3
         6-10-17, 3
         6-17-17, 3

He       5-28-17, 3
         5-29-17, 3
         5-30-17, 3
         5-31-17, 3
         6-1-17, 3
         6-2-17, 3
         6-3-17, 3
         6-7-17, 3
         6-14-17, 3
         6-21-17, 3
         6-25-17, 3
         6-26-17, 3
         6-27-17, 3
         6-28-17, 9
         6-29-17, 9
         6-30-17, 9
         7-1-17, 3
         7-4-17, 6
         7-6-17, 6
         7-8-17, 6
         7-11-17, 6
         7-13-17, 6
         7-15-17, 6
         7-18-17, 6
         7-20-17, 6
         7-22-17, 6
         7-26-17, 6
         7-27-17, 6

o W      5-31-17, 3
         6-1-17, 3
         6-2-17, 3
         6-6-17, 3
         6-10-17, 3
         6-13-17, 3
         6-17-17, 3
         6-20-17, 3
         6-24-17, 3
         6-28-17, 3
         6-29-17, 3
         6-30-17, 3
         7-9-17, 6
         7-10-17, 6
         7-11-17, 6
         7-12-17, 6
         7-13-17, 6
         7-14-17, 6
         7-22-17, 6
         7-26-17, 6
         7-27-17, 6
         7-28-17, 6
         8-5-17, 6
         8-6-17, 6
         8-7-17, 6
         8-8-17, 6
         8-9-17, 6
         8-10-17, 6
         8-11-17, 6

সি 4 কি কখনও ব্যবহার করা হয়?
FryAmTheEggman

@ ফ্রাইআম দ্য এজম্যান এটি নয়, তবে আমি বিভ্রান্তি এড়ানোর জন্য এটি অন্তর্ভুক্ত করেছি কারণ গিথুব কিংবদন্তিতে 5 টি রঙ প্রদর্শন করে।
ননলাইনফর্ট

তারিখ আউটপুট ফর্ম্যাটে আপনি কতটা কড়া / আলগা?
স্টিফেন

1
@ স্টেফেনস এটি যতক্ষণ না এটি মানুষের পঠনযোগ্য (যেমন May 20th, 2017: 3, (3,"20/5/17")) হিসাবে নমনীয়
ননলাইনারফ্রুট

কোথায় আপনি এই অবদানের সারণীটি পেয়েছেন?
এরিক আউটগল্ফার

উত্তর:


11

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

s=>(n=y=>d.setDate(d.getDate()+y),d=new Date,(h=d.getDay())&&n(7-h),r={},i=0,[...s].map(c=>{c<"!"?n(14):([...parseInt("jn4x733nx8gjw6nhricv6nx8dpz2vilui81vikl7b4nhridnzvgc1svznx8dji8g16fkg0vgc6341vg38oe9vh669ofvgm1dvjnhricvyvikl7aonhrjrjxvikmm29m0rqqp2nqmi6o0vbnf6dav2t14e4vbnjqpqs0g34o3tlqqwdso43oixtg1uyt8vvgddxn2hizrn2ahizrmdbhj4suq4gtytq8wgshvtzyvgc4mq7gzhwhz4g15ymf4vg72q9snx7r2f4jmffjm7jm5gavjhizrn2mjmkh3wogsgmianjm5gavcgwxpc3mhvni2kijhgqujjj8mcsgsjhgslnihw2cx75iqyv1cuhwdrh5d".substr((c.charCodeAt()-(c>"`"?71:65))*7,7),36).toString(2).slice(1).replace(/(0{7})+$/,"")].map(b=>(+b&&(r[+d]=r[+d]?9:i%2?6:3),n(1))),i++,n(-7))}),Object.keys(r).map(k=>[k,r[k]]).sort((i,j)=>i[0]-j[0]>0?1:-1).map(i=>[(new Date(+i[0])+"").slice(4,15),i[1]]))

ফর্মটিতে আউটপুট 2-আইটেম অ্যারেগুলির একটি অ্যারে [dateString, contribs]। নীচের স্নিপেটটি দেখায় যে কীভাবে এটি আরও পঠনযোগ্য হিসাবে ফর্ম্যাট করা যায়।

আন Golfed

s=>(
    n=y=>d.setDate(d.getDate()+y),
    d=new Date,
    (h=d.getDay()) && n(7-h),
    r={},
    i=0,
    [...s].map(c=>{
        c<"!" ? n(14) : (
            [...parseInt("<...>".substr((c.charCodeAt()-(c>"`"?71:65))*7,7),36).toString(2).slice(1).replace(/(0{7})+$/,"")].map(b=>(
                +b && (r[+d] = r[+d] ? 9 : i%2?6:3),
                n(1)
            )),
            i++,
            n(-7)
        )
    }),
    Object.keys(r)
        .map(k=>[k,r[k]])
        .sort((i,j)=>i[0]-j[0] > 0 ? 1 : -1)
        .map(i => [ (new Date(+i[0])+"").slice(4,15), i[1] ])
)

যেখানে <...>অক্ষরের 364-বাইট স্ট্রিং প্রতিনিধিত্ব করে যা আমি প্রতিটি অক্ষরের ডট ম্যাট্রিক্স ফর্মকে এনকোড করতে তৈরি করেছি।

ব্যাখ্যা

এনকোডেড স্ট্রিং:

jn4x733nx8gjw6nhricv6nx8dpz2vilui81vikl7b4nhridnzvgc1svznx8dji8g16fkg0vgc6341vg38oe9vh669ofvgm1dvjnhricvyvikl7aonhrjrjxvikmm29m0rqqp2nqmi6o0vbnf6dav2t14e4vbnjqpqs0g34o3tlqqwdso43oixtg1uyt8vvgddxn2hizrn2ahizrmdbhj4suq4gtytq8wgshvtzyvgc4mq7gzhwhz4g15ymf4vg72q9snx7r2f4jmffjm7jm5gavjhizrn2mjmkh3wogsgmianjm5gavcgwxpc3mhvni2kijhgqujjj8mcsgsjhgslnihw2cx75iqyv1cuhwdrh5d

প্রতিটি 7 টি অক্ষর হল একটি বেস -36 এনকোডেড বাইনারি নম্বর যা সেই সূচীতে অক্ষরের ম্যাপিং থাকে। বাইনারি ফর্ম সর্বদা 1নেতৃস্থানীয় 0গুলি সংরক্ষণের জন্য একটি অগ্রণী থাকে । উদাহরণস্বরূপ, একটি বড় আকারের Tমানচিত্র এতে nqmi6o0রূপান্তরিত হয় যা 1100 00001000 00011111 11100000 01000000। অগ্রণী 1 এড়িয়ে যাওয়া, প্রতিটি বিট একদিন is বেশিরভাগ সংখ্যায় 5 টি কলাম / সপ্তাহ থাকে, সুতরাং 5 টিরও কম কলামের সংখ্যার মধ্যে 7 টি ট্রেইলিং জিরোগুলির এক বা দুটি সেট থাকে যা পরে (( .replace(/(0{7})+$/,"")) পার্স করার আগে সরিয়ে ফেলা হয় । ডিলিমিটারগুলির প্রয়োজনীয়তা অপসারণ করে এটি সমস্ত এনকোডযুক্ত স্ট্রিং একই দৈর্ঘ্য রাখে।

এটিকে আরও উন্নত করার সম্ভবত আরও আরও কিছু উপায় রয়েছে, বিশেষত লেটার ম্যাপিংগুলি আরও সংকুচিত করে, তাই কোনও ধারণা ভাগ করে নিতে দ্বিধা বোধ করুন।

লেটার ম্যাপিংসের বাইনারি ফর্ম্যাট (জেএস সিনট্যাক্স, এর সাথে পূর্বনির্ধারিত 0b) এখানে পাওয়া যাবে

বেসিক স্নিপেট

f=
s=>(n=y=>d.setDate(d.getDate()+y),d=new Date,(h=d.getDay())&&n(7-h),r={},i=0,[...s].map(c=>{c<"!"?n(14):([...parseInt("jn4x733nx8gjw6nhricv6nx8dpz2vilui81vikl7b4nhridnzvgc1svznx8dji8g16fkg0vgc6341vg38oe9vh669ofvgm1dvjnhricvyvikl7aonhrjrjxvikmm29m0rqqp2nqmi6o0vbnf6dav2t14e4vbnjqpqs0g34o3tlqqwdso43oixtg1uyt8vvgddxn2hizrn2ahizrmdbhj4suq4gtytq8wgshvtzyvgc4mq7gzhwhz4g15ymf4vg72q9snx7r2f4jmffjm7jm5gavjhizrn2mjmkh3wogsgmianjm5gavcgwxpc3mhvni2kijhgqujjj8mcsgsjhgslnihw2cx75iqyv1cuhwdrh5d".substr((c.charCodeAt()-(c>"`"?71:65))*7,7),36).toString(2).slice(1).replace(/(0{7})+$/,"")].map(b=>(+b&&(r[+d]=r[+d]?9:i%2?6:3),n(1))),i++,n(-7))}),Object.keys(r).map(k=>[k,r[k]]).sort((i,j)=>i[0]-j[0]>0?1:-1).map(i=>[(new Date(+i[0])+"").slice(4,15),i[1]]))

I.value="Hello World";
(I.oninput=_=>O.innerHTML = f(I.value).map(e=>e.join(": ")).join("\n"))();
<input id="I">
<pre id="O">

ইন্টারেক্টিভ উদাহরণ

ক্যাল-হিটম্যাপ লাইব্রেরিটি ব্যবহার করে , আমি আউটপুট হওয়ার তারিখগুলির একটি ইন্টারেক্টিভ হটম্যাপ তৈরি করেছি। এটি কাজ করার সময় সমস্ত কিছু পরীক্ষার জন্য ব্যবহৃত হয়েছিল এবং এটি কেবল পরিষ্কার ঝরঝরে দেখাচ্ছে।


1
ইন্টারেক্টিভ উদাহরণ সত্যই দুর্দান্ত। সুন্দর কাজ!
ননলাইনফর্ট

1
হায় খোদা, আসলে কেউ এই কাজ করেছে! নিস!
যাদু অক্টোপাস উরন

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

1
@ জাস্টিনমারিনার আমি এটি আমার প্রোফাইলে পপ করেছি, আশা করি আপনি আপত্তি করবেন না। উত্তম উত্তর, খুশি যে কেউ এই চ্যালেঞ্জটি শেষ করেছেন :)
স্টিফেন

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