অ্যাপলসুস ফাদার


11

দিনের বেলাতে, সমস্ত 1337 বাচ্চা চ্যাটরুমে পাঠ্য ফিডার ব্যবহার করেছিল। আমি আপনার ছেলেদের সম্পর্কে জানি না, তবে আমি তাদের মতো শীতল বোধ করতে চাই। একমাত্র সমস্যাটি হ'ল তাদের পুরানো স্ক্রিপ্টগুলি এবং অ্যাপ্লিকেশনগুলি তাদের জন্য তৈরি সফ্টওয়্যারটির সাথে ভারী মিশ্রিত ছিল, তাই আমি যেখানেই চাই না কেন এই আশ্চর্যজনক কার্যকারিতাটি ব্যবহার করতে পারি না। আমি সমাধানটি সহজেই পোর্টেবল হতে চাই যাতে আপনার কোডটি যতটা সম্ভব ছোট করা দরকার যাতে এটি আমার ফ্লপি ডিস্কে ফিট হয়ে যায় (আমি বরং কেবল একটি ফ্লপি বহন করব তবে যদি আপনার উত্স কোডটি খুব বড় হয় তবে আমি একের বেশি বহন করতে পারি : পি )।

ইনপুট

  • রঙের একটি তালিকা (আরজিবি, হেক্স, নাম, ইত্যাদি)
  • বিন্যাসে পাঠ্য

আপনার প্রোগ্রামটি কমপক্ষে 2 টি রঙ ধারণ করে এমন রঙের তালিকাটি আশা করা উচিত।
বিন্যাসে পাঠ্য কোনও শূন্যের চেয়ে বেশি দৈর্ঘ্য হতে পারে এবং অক্ষরগুলি মুদ্রণযোগ্য আসকিতেই সীমাবদ্ধ থাকবে। (ইঙ্গিত: দীর্ঘ পাঠ্য ইনপুটগুলির জন্য পরের অক্ষরের জন্য আপনাকে মধ্যবর্তী রঙগুলি পুনরায় ব্যবহার করতে হবে)

আউটপুট

ফন্ট এবং / অথবা মার্কআপ / স্টাইলিং ব্যতীত আউটপুট পাঠ্য কোনওভাবেই ইনপুট পাঠ্য থেকে পৃথক হওয়া উচিত নয় (দ্রষ্টব্য: যদি আপনার আউটপুটটিতে এইচটিএমএল মার্কআপ থাকে তবে আপনাকে ইনপুটটি এইচটিএমএল এনকোড করতে হবে)। আপনি মার্কআপ / স্টাইলিং (এইচটিএমএল স্টাইল ট্যাগ, কনসোল রঙ ইত্যাদি) বা বিবর্ণ পাঠ্যের একটি ছবি দিয়ে পাঠ্য আউটপুট করতে পারেন। ইনপুটটিতে এই প্রয়োজনীয়তা পূরণের জন্য পর্যাপ্ত অক্ষর না থাকলে সমস্ত রঙের হেক্সস আউটপুটে উপস্থিত থাকতে হবে। যদি এটি হয় তবে আপনার আউটপুটে কোন রঙের হেক্সেক্স উপস্থিত থাকতে হবে তা নির্ধারণ করতে অগ্রাধিকারের নিয়মগুলি নিয়ে পরামর্শ করুন। আপনার আউটপুটে ক্রম বা এই রঙগুলি এখনও ইনপুট অর্ডার হওয়া উচিত।

রঙ অগ্রাধিকার বিধি

  1. ইনপুটটি একটি চরিত্রের ইভেন্টে, প্রথম রঙটি ব্যবহৃত হবে
  2. শুধুমাত্র দুটি অক্ষর রয়েছে এমন ইভেন্টে প্রথম এবং শেষ রঙটি ব্যবহৃত হবে
  3. অক্ষরের তুলনায় তিনটিরও বেশি রঙ এবং আরও রং রয়েছে এমন ইভেন্টে প্রথম এবং শেষ বর্ণগুলি অগ্রাধিকার দেওয়া উচিত, তারপরে বাকী রংগুলি তাদের ইনপুটযুক্ত ক্রমে।
  4. বর্ণের চেয়ে বর্ণ বেশি হওয়ার ক্ষেত্রে, অন্তর্বর্তী রঙগুলি ব্যবহার করে অক্ষরগুলির এক রঙ থেকে পরের রঙে বিবর্ণ হওয়া উচিত

উদাহরণ (অগ্রাধিকার নিয়ম যথাক্রমে 1-3-):
# রঙ | রঙ 0 | ... | রঙ এন | পাঠ্য
3 ff0000 0000ff ffff00 M-> -> ->শুধুমাত্র প্রথম
3 ff0000 0000ff ffff00 hi2 য় উপেক্ষা করুন
4 ff0000 0000ff ffff00 0fff00 sup3 য় উপেক্ষা করুন

পরিষ্কার হওয়ার জন্য, পাঠ্যের রঙটি এক রঙের হেক্স থেকে পরের দিকে বিবর্ণ হওয়া উচিত। বিবর্ণ পুরোপুরি একরকম হতে হবে না তবে সুন্দরভাবে বিবর্ণ হওয়ার জন্য পর্যাপ্ত অক্ষর না থাকলে এটি আকস্মিক রঙ পরিবর্তন হওয়া উচিত নয়। সাধারণত এই বিবর্ণটি প্রতিটি চরিত্রের জন্য মধ্যবর্তী রঙগুলি বেছে নিয়ে আপনি আরজিবি মানগুলি বৃদ্ধি বা হ্রাস করে কিছু অন্তর দ্বারা নির্ধারিত হয় যা আপনার সাথে কাজ করতে হবে এমন অক্ষরের সংখ্যা এবং রঙগুলির মধ্যে পার্থক্য দ্বারা নির্ধারিত হয়। উদাহরণস্বরূপ, যদি আমাদের লাল(# ff0000) এবং কালো(# 000000) এর মধ্যে একটি একক রঙের প্রয়োজন হয় তবে আমরা # 800000এটি মাঝখানে ঠিক বসে থাকায় বেছে নিতে পারি। অনুকূল আউটপুট বরং সুন্দর দেখাবে।

উদাহরণ (অগ্রাধিকারের নিয়ম 4):
3 ff0000 ff7f00 f0ff00 To be or not to be, that is the question...-> -আর-হতে বা না

<span style="color:#ff0000;">T</span><span style="color:#ff0600;">o</span><span style="color:#ff0c00;"> </span><span style="color:#ff1200;">b</span><span style="color:#ff1800;">e</span><span style="color:#ff1e00;"> </span><span style="color:#ff2400;">o</span><span style="color:#ff2a00;">r</span><span style="color:#ff3000;"> </span><span style="color:#ff3600;">n</span><span style="color:#ff3c00;">o</span><span style="color:#ff4300;">t</span><span style="color:#ff4900;"> </span><span style="color:#ff4f00;">t</span><span style="color:#ff5500;">o</span><span style="color:#ff5b00;"> </span><span style="color:#ff6100;">b</span><span style="color:#ff6700;">e</span><span style="color:#ff6d00;">,</span><span style="color:#ff7300;"> </span><span style="color:#ff7900;">t</span><span style="color:#ff7f00;">h</span><span style="color:#fe8500;">a</span><span style="color:#fe8b00;">t</span><span style="color:#fd9100;"> </span><span style="color:#fc9700;">i</span><span style="color:#fb9d00;">s</span><span style="color:#fba400;"> </span><span style="color:#faaa00;">t</span><span style="color:#f9b000;">h</span><span style="color:#f9b600;">e</span><span style="color:#f8bc00;"> </span><span style="color:#f7c200;">q</span><span style="color:#f6c800;">u</span><span style="color:#f6ce00;">e</span><span style="color:#f5d400;">s</span><span style="color:#f4da00;">t</span><span style="color:#f4e100;">i</span><span style="color:#f3e700;">o</span><span style="color:#f2ed00;">n</span><span style="color:#f1f300;">.</span><span style="color:#f1f900;">.</span><span style="color:#f0ff00;">.</span> 

আপনার উত্তরে দয়া করে আপনার আউটপুটটি কীভাবে প্রদর্শিত হবে তা নির্দিষ্ট করুন (এইচটিএমএল হিসাবে, কোনও কনসোলে কোনও চিত্র ইত্যাদি)।

* সমস্ত কালো ব্যাকগ্রাউন্ড শুধুমাত্র রঙের জোরের জন্য এবং এটির প্রয়োজন হয় না

স্কোরিং

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



@Lakakyun আরজিবি জায়গাতে এটি যথেষ্ট কাছে, অন্য বিকল্পটি # 7f0000।
নিল

আসলে তা না. এভাবে লাল এবং সবুজ গড়ার চেষ্টা করুন এবং দেখুন যে আপনি হলুদ হয়ে গেছেন। এটি সঠিকভাবে করতে, সরাসরি গড়ের পরিবর্তে রুট-গড়-বর্গ নিন।
ফাঁস নুন

গড় 000000এবং ff0000হওয়া উচিত b40000( 255*sqrt((0+1)/2))
লিকি নুন

1
@ লিক্যনুন আমি কখনই বলিনি যে আপনার রংগুলির গড় গড় প্রয়োজন। আমি বিবর্ণ হওয়ার একটি সহজ পদ্ধতি বর্ণনা করেছি যা কখনও কখনও এর মতো চ্যালেঞ্জের জন্য নিযুক্ত হয়। এক্ষেত্রে আমরা দুটি রঙের (এবং বৃত্তাকার) রেডগুলি গড় করেছি। আমি চ্যালেঞ্জটিতে আরও উল্লেখ করেছি যে বিবর্ণটি পুরোপুরি অভিন্ন হতে হবে না। আপনি কীভাবে এই বিবর্ণটি প্রয়োগ করতে চান এটি আপনার উপর নির্ভর করে।
পোকে

উত্তর:


3

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

h=a=>f(a,a.shift());f=
(a,w)=>[...w].map((c,i)=>{l=w.length-1;m=a.length-1;s=o.appendChild(document.createElement('span'));s.textContent=c;s.style.color=`#${i?i-l?a[r=l%m,n=l/m|0,i<r*n+r?++n:i-=r,k=i/n|0,k++].replace(/./g,(c,d)=>((parseInt(c,16)*(n-i%n)+i%n*parseInt(a[k][d],16))/n|0).toString(16)):a[m]:a[0]}`;})
<textarea rows=10 cols=40 oninput="o.textContent='';h(this.value.split`\n`)">Type the text here and the colours on subsequent lines.
FF0000
00FF00
0000FF</textarea><div id=o>


1
কোড স্নিপেটের সাথে এটি রিয়েল টাইমে ঘটতে দেখে সত্যিই দুর্দান্ত। : ডি
অ্যাডমবার্কবার্ক


1

জাভা, 702 662 টি অক্ষর

দুটি কাজ গল্ফড:

import java.awt.*;String f(Color C,char c){return"<span style=\"color:#"+Integer.toHexString(C.getRGB()).substring(2)+";\">"+c+"</span>";}String c(String t,String[]h){String r="";int l=h.length,e=t.length(),i=0,s=0,g=1,c=-1,p,q,u;double d,m=0,v;char[]T=t.toCharArray();Color C[]=new Color[l],H[],a,b;for(;i<l;)C[i]=Color.decode(h[i++]);if(l>e){H=java.util.Arrays.copyOfRange(C,0,e);H[e-1]=C[l-1];H[0]=C[0];C=H;l=e;}d=--e/(l-1.);for(;++c<e;){a=C[s];b=C[g];p=b.getRed()-a.getRed();q=b.getGreen()-a.getGreen();u=b.getBlue()-a.getBlue();v=m/d;r+=f(new Color(a.getRGB()+((int)(v*p)<<16|(int)(v*q)<<8|(int)(v*u))),T[c]);if(++m>d){m-=d;s=g++;}}return r+f(C[l-1],T[e]);}

যেহেতু কেউ এটি পড়তে পারে না: এখানে ক্লাসে অদ্বিতীয় সংস্করণে উভয় ফাংশন রয়েছে:

import java.awt.*;

public class Q80554 {

    static String format(Color color, char character) {
        return "<span style=\"color:#" + Integer.toHexString(color.getRGB()).substring(2) + ";\">" + character + "</span>";
    }

    static String colorizeB(String text, String[] hexColors) {
        String result = "";
        int colorsLength = hexColors.length, textLength = text.length(), i, currentStartColorPos = 0, currentGoalColorPos = 1, currentCharPos = -1, diffColorRed, diffColorGreen, diffColorBlue;
        double difference, goneDifference = 0, relativeChange;
        char[] textArray = text.toCharArray();
        Color colors[] = new Color[colorsLength], changer[], currentStartColor, currentGoalColor;

        for (i = 0; i < colorsLength;)
            colors[i] = Color.decode(hexColors[i++]);

        if (colorsLength > textLength) {
            changer = Arrays.copyOfRange(colors, 0, textLength);
            changer[textLength - 1] = colors[colorsLength - 1];
            changer[0] = colors[0];

            colors = changer;
            colorsLength = textLength;
        }

        // fade
        difference = --textLength / (colorsLength - 1.); // space between colors    

        for (; ++currentCharPos < textLength;) {
            currentStartColor = colors[currentStartColorPos];
            currentGoalColor = colors[currentGoalColorPos];

            diffColorRed = currentGoalColor.getRed() - currentStartColor.getRed();
            diffColorGreen = currentGoalColor.getGreen() - currentStartColor.getGreen();
            diffColorBlue = currentGoalColor.getBlue() - currentStartColor.getBlue();

            relativeChange = goneDifference / difference;

            result += format(new Color(currentStartColor.getRGB() + ((int) (relativeChange * diffColorRed) << 16 | (int) (relativeChange * diffColorGreen) << 8 | (int) (relativeChange * diffColorBlue))), textArray[currentCharPos]);

            if (++goneDifference > difference) {
                goneDifference -= difference;
                currentStartColorPos = currentGoalColorPos++;                   
            }
        }

        // last character always has last color
        return result + format(colors[colorsLength - 1], textArray[textLength]);
    }
}

এখানে আপনার নিজের কোডের জন্য উপরের বাউন্ড রয়েছে। ব্যবহার কলিং colorize(বা গল্ফযুক্ত সংস্করণে সি) এর মাধ্যমে এবং পাঠ্য এবং হেক্স রঙের কোডগুলির একটি অ্যারে পাস করে। ফাংশনটি ওপি'র মতো এইচটিএমএল-ট্যাগ সহ একটি স্ট্রিং ফিরিয়ে দেবে, সুতরাং এইচটিএমএল রেন্ডার করার জন্য আপনার কিছু উপায় প্রয়োজন।

প্রশ্নটি যেমন মনে হচ্ছে তেমনি অ্যালগরিদম আরও সহজ। প্রথম চরিত্রটি সর্বদা প্রথম রঙ পায়, শেষটি সর্বদা সর্বশেষ। যদি পাঠ্যটিতে অক্ষরের চেয়ে আরও বেশি রঙ থাকে তবে আমরা কেবল পাঠ্য এবং বর্ণগুলি দিয়ে পুনরাবৃত্তি করি এবং এগুলি প্রয়োগ করি। মজাদার অংশটি হ'ল বিবর্ণগুলির সাথে: আমি পাঠ্যের উপর রঙগুলি কত দূরত্বের তা খুঁজে বের করে শুরু করেছি। আমি প্রদত্ত দুটি বর্ণের মধ্যে মূলত লাল, সবুজ এবং নীল পার্থক্য গণনা করি এবং তারপরে বর্ণটি কোথায় বর্ণের মধ্যে থাকে তার উপর নির্ভর করে প্রথম বর্ণটিতে এই পার্থক্যের একটি অংশ যুক্ত করি। যদি এটি দুটি রঙের ব্যবধান ছেড়ে যায় তবে আমরা পরের দুটি রঙের সাথে নতুন থেকে শুরু করি। এটি সর্বশেষ চরিত্রটি ছাড়াও সকলের জন্য পুনরাবৃত্তি হয়, যা আমরা জানি সর্বদা শেষ বর্ণ। এটি একটি খুব সুন্দর বিবর্ণ দেয়।

এই প্রশ্নটি খুব মজাদার ছিল! ধন্যবাদ!

আপডেট

এখন আমি বিশেষভাবে সমস্ত মামলা পরিচালনা করি না। এর পরিবর্তে আমি রঙগুলি ছাঁটাচ্ছি যদি সেখানে দুটি থাকে এবং প্রতিটি স্ট্রিংয়ে ফেইড ফাংশনটি প্রয়োগ করে। যদি পাঠ্যের চেয়ে আরও বেশি রং থাকত তবে রঙগুলি ছাঁটাই হয়ে যাবে এবং বিবর্ণ ফাংশনটি সাধারণ ম্যাপিংয়ের মতো কাজ করবে।

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