রংধনু পাঠ্য তৈরি করুন


22

আপনার চ্যালেঞ্জটি হ'ল পাঠ্যের লাইন হিসাবে ইনপুট নেওয়া এবং এটির মতো আউটপুট।

রংধনু চিত্র

ইনপুট আউটপুট

ইনপুটটি এমন একটি স্ট্রিং হবে যাতে কেবল প্রিন্টযোগ্য ASCII অক্ষর থাকে। প্রথম বা শেষের অক্ষরগুলি কখনই শূন্যস্থান হতে পারে না এবং একসাথে দুটি স্পেস কখনও পাওয়া যায় না। এটি সর্বদা কমপক্ষে দুটি অক্ষর দীর্ঘ হবে।

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

রূপান্তর

স্ট্রিংয়ের প্রতিটি বর্ণের রঙটি কী হওয়া উচিত তা নির্ধারণ করতে নিম্নলিখিত অ্যালগরিদম ব্যবহার করুন। নোট করুন যে প্রতিটি বর্ণের নিজস্ব স্বতন্ত্র রঙএটি গ্রেডিয়েন্ট নয়!

  • যদি এই চরিত্রটি একটি স্থান হয়:

    • ... এতে কিছু যায় আসে না, কারণ স্পেসগুলি সত্যিই পারে না ... যাইহোক রঙ থাকতে পারে। কেবল একটি স্থান আউটপুট।
  • অন্যথায়:

    • আসুন i= স্ট্রিং-এ এই অক্ষরটির সূচক (0-ভিত্তিক, সুতরাং প্রথম অক্ষরের জন্য, এটি হ'ল 0), স্থানগুলি গণনা করা হচ্ছে না। উদাহরণস্বরূপ, স্ট্রিং foo bar, এই মান হতে হবে 4জন্য a। অন্য কথায়, এখন পর্যন্ত এটি কতগুলি অ-স্পেসের মুখোমুখি হয়েছিল।

    • আসুন n= স্ট্রিংয়ের ফাঁকা জায়গাগুলির সংখ্যা।

    • এই চিঠিটির রঙটি এখন এইচএসএল নলাকার-সমন্বিত সিস্টেমে প্রকাশ করা যেতে পারে , যেমন [হিউ = ( i/ n) * 360 °, স্যাচুরেশন = 100%, হালকাতা = 50%]।

নোট এই দিক নির্দেশ পরোক্ষভাবে যে যে জন্য আউটপুট fooএবং f ooঠিক একই হতে হবে পরে একটি যোগ স্পেসের জন্য ছাড়া f। এটি হ'ল, সমস্ত বর্ণগুলিতে একই রঙ বজায় রাখা উচিত।

রূপান্তর প্রক্রিয়াটির জন্য আরও বিধিগুলি বিধি বিভাগে নীচে বর্ণিত হয়েছে ।

রেফারেন্স বাস্তবায়ন

এটি জাভাস্ক্রিপ্টে লেখা হয়েছে এবং আপনি "রান কোড স্নিপেট" বোতাম টিপে চেষ্টা করে দেখতে পারেন।

window.addEventListener('load', function() {
    addRainbow('Your challenge is to take input as a line of text and ' +
        'output it like this.');
});

// append this text rainbow-ified to the argument (document.body by default)
function addRainbow(text, el) {
    (el || document.body).appendChild(makeRainbow(text));
}

// returns a <div> that contains the text in a rainbow font
function makeRainbow(text) {
    var div = document.createElement('div');
    var letterCount = text.replace(/ /g, '').length, spaceCount = 0;
    text.split('').forEach(function(letter, idx) {
        if (letter == ' ') ++spaceCount;
        div.appendChild(makeLetter(letter, (idx - spaceCount) / letterCount));
    });
    return div;
}

// returns a <span> that contains the letter in the specified color
function makeLetter(letter, hue) {
    hue = Math.floor(hue * 360);
    var span = document.createElement('span');
    span.appendChild(document.createTextNode(letter));
    span.style.color = 'hsl(' + hue + ', 100%, 50%)';
    return span;
}

বিধি

  • কোনও বর্ণের হিউ মান গণনা করার সময়, আপনি অবশ্যই একটি দশমিক (অ-পূর্ণসংখ্যার) নম্বর পাবেন। আপনি এটিকে নিকটতম পূর্ণসংখ্যার সাথে গোল করতে পারেন, এটি মেঝেতে রাখতে পারেন, সিলিংটি নিতে পারেন বা একেবারেই গোল নাও করতে পারেন।

  • হরফের আকার অবশ্যই পঠনযোগ্য। এখানে এটি একটি 10pt আকারের ফন্ট বা তার চেয়ে বড় হিসাবে সংজ্ঞায়িত করা হয়েছে।

  • আপনি পাঠ্য আউটপুট করতে একটি নির্দিষ্ট-প্রস্থের ক্যানভাস বা "অঙ্কন অঞ্চল" ব্যবহার করতে পারেন তবে এটি অবশ্যই এই পোস্টের প্রথম বাক্যে প্রদত্ত উদাহরণের সাথে ফিট করতে সক্ষম হবে

  • স্কোরিং , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিততে পারে।


আউটপুট কি ডেটা ইউআরআই হতে পারে? এইচটিএমএল ক্যানভাস থেকে আউটপুট
Downgoat

@ভিহান হ্যাঁ, " আউটপুটটি চিত্রের আকারে থাকতে পারে (কোনও ফাইলে সংরক্ষিত হতে পারে বা অন্যথায় উপলব্ধ হয়ে যায়) " নিয়ম অনুসারে যোগ্যতা অর্জন করে
Doorknob

কোনও রঙিন বর্ণনার সাথে মিলিত হয় কিনা তা আপনি কীভাবে নির্ধারণ করবেন? যদি কোনও ভাষায় কেবল আরজিবি রঙগুলি সমর্থন করে তবে কোন রূপান্তর সূত্রটি ব্যবহার করা উচিত তা আপনি সুনির্দিষ্টভাবে উল্লেখ করতে পারেন? এছাড়াও, প্রতি চ্যানেল যথাযথতার কত বিট প্রয়োজনীয়? সম্ভবত 8 ঠিক আছে, কিন্তু কিভাবে 4, বা 1?

@ ফেয়ারসাম আরজিবিতে রূপান্তর করতে, আপনি এখানে বর্ণিত একটি বিল্টিন বা একটি পদ্ধতি ব্যবহার করতে পারেন । আপনি নিজের দ্বিতীয় প্রশ্নটির অর্থ কী তা ব্যাখ্যা করতে পারেন? আপনি কি বিশেষত এইচএসএল থেকে আরজিবি রূপান্তর, বা সাধারণভাবে প্রসঙ্গে এই বিষয়ে জিজ্ঞাসা করছেন?
ডুরকনব

2
ডাং, আমি পাওয়ারশেলের সাথে চেষ্টাও করতে যাচ্ছি না ... আপনি খেলতে কেবল 16 টি রঙ পান (এবং তাদের এমনকি অর্ডারও দেওয়া হয় না ... রংধনু বা আরজিবি বা অন্যথায় ... কেবল একটি স্বেচ্ছাচারিত হেক্স মান)। চিত্র সহ রেফারেন্স, যদিও সত্যিই দুর্দান্ত চ্যালেঞ্জ!
অ্যাডমবর্কবার্ক

উত্তর:


12

পার্ল, 95

92 বাইট কোড + 3 এর জন্য -p

এই স্ক্রিপ্টটি টার্মিনালের (256 সর্বাধিক) উপলভ্য রঙগুলির একটি সংমিতি ব্যবহার করে যা বর্তমানে কেবল এই তালিকা থেকে নির্বাচিত কয়েকটি রঙ পয়েন্ট সহ , তাই সম্ভবত এটি অনুমান করা যায় না, তবে এটি মজাদার ছিল! আমি তালিকাটি কেবলমাত্র এবং যথাক্রমে মানগুলি Sএবং Lমানগুলি দেখানোর জন্য তালিকাটি ফিল্টার করেছিলাম , তারপরে হিউ অনুসারে বাছাই করে, সংখ্যাকে একটি স্ট্রিংয়ে প্যাক করে সেই তালিকা থেকে রংগুলি নির্বাচন করি।100%50%

এই প্রয়োগে মুদ্রণযোগ্য অক্ষর অন্তর্ভুক্ত রয়েছে! সরল, তবে চতুর পরিবর্তে কেবলমাত্র এডিসি 65 এর প্রতিস্থাপনের ধারণাটি চুরি করেছে !\S.

@c=map ord,"..........vR../012.3-'!..9]........"=~/./g;s|\S|\e[38;5;$c[@c*$i++/y/!-~//]m$&|g

Hexdump:

0000000: 4063 3d6d 6170 206f 7264 2c22 09c4 cad0  @c=map ord,"....
0000010: d6dc 0be2 be9a 7652 0a2e 2f30 3132 0e33  ......vR../012.3
0000020: 2d27 211b 1539 5d81 a50d c9c8 c7c6 c522  -'!..9]........"
0000030: 3d7e 2f2e 2f67 3b73 7c5c 537c 5c65 5b33  =~/./g;s|\S|\e[3
0000040: 383b 353b 2463 5b40 632a 2469 2b2b 2f79  8;5;$c[@c*$i++/y
0000050: 2f21 2d7e 2f2f 5d6d 2426 7c67            /!-~//]m$&|g

উপরের পাঠ্যটি অনুলিপি করে এবং চালিয়ে হেক্সডাম্পকে বিপরীত করুন:

xxd -r > rainbowtext.pl

ডেটাতে আটকানো এবং Ctrl+ টিপুন D

ব্যবহার করে চালান:

perl -p rainbowtext.pl <<< 'Your challenge is to take input as a line of text and output it like this.'

এটি আউটপুট উত্পাদন করে:

এখন আপনার টার্মিনাল পাঠ্যটি লাল!  MUHAHAHAHA!


10

পাইথন 2: 240 পিআইএল এবং কালারস লিব ব্যবহার করে

import PIL,colorsys as c
s=input()
u,a=len(s),255
g=Image.new('RGB',(u*6,13),(a,)*3)
[ImageDraw.Draw(g).text((j*6,0),s[j],fill=tuple(int(h*a)for h in c.hls_to_rgb(1.*(j-s[:j].count(' '))/(u-s.count(' ')),.5,1)))for j in range(u)]
g.show()

উদাহরণ আউটপুট:

আউটপুট রংধনু পাঠ্য উদাহরণ স্পেস দিয়ে পরীক্ষা

কিছু গল্ফিং টিপস এবং @ মরিসকে স্পেসের প্রয়োজনীয়তা নির্দেশ করার জন্য @ অ্যাগোভার এবং @ ট্র্যাং অলকে ধন্যবাদ জানাই।

দৈর্ঘ্যের উপর ভিত্তি করে অনুভূমিক অফসেট এবং রঙ পরিবর্তন সহ একটি প্রকৃত প্রকারের ফন্ট, ফন্টের আকার নিয়ন্ত্রণ করতে।

import PIL as P,colorsys as c
s=input()
u=len(s)
a=255
fs=25
f=P.ImageFont.truetype("a.ttf",fs)
sza=f.getsize(s)
oa=f.getoffset(s)
g=P.Image.new('RGB',(sza[0]+fs,2*sza[1]+oa[1]),(a,)*3)
r=fs/4
P.ImageDraw.Draw(g).text((r,0),s,fill=(0,0,0),font=f)
for j in range(u):   
 o=f.getoffset(s[j])
 sz=f.getsize(s[j])   
 r+=o[0]
 P.ImageDraw.Draw(g).text((r,0+fs),s[j],fill=tuple([int(h*a)for h in c.hls_to_rgb(1.*r/sza[0],.5,1)]),font=f)
 r+=sz[0]
g.save('a.png')
g.show()

আমি যে ফন্টটি ব্যবহার করেছি তা এখান থেকে পাওয়া যায় : ফলাফলটি রয়েছে (শীর্ষে কেবল স্ট্রিংটি মুদ্রণ করছে, নীচের অংশে প্রতিটি অক্ষর প্রতি মুদ্রণ করা হচ্ছে):

মুদ্রলিখ


1
ড্রপ as Pএবং PILদুটি বার লিখুন এবং একটি চরিত্র জিতে। পরিবর্তন imgকরুন iএবং আরও 4 টি অক্ষর জিতে নিন।
agtoever

1
255কোনও চলকটিতে সংরক্ষণ করুন , সমস্ত অ্যাকুরিয়েন্স প্রতিস্থাপন করুন এবং (a,)*3সাদা রঙ হিসাবে ব্যবহার করুন । float(j)দ্বারা প্রতিস্থাপন (j+.0)
ট্রাং ওউল

1
এছাড়াও: প্রতিস্থাপন float(j)করতে1.*j
agtoever

1
একসাথে একাধিক ভেরিয়েবল বরাদ্দ করুন (যেমন u=len(s) a=255=> u,a=len(s),255)। []থেকে বন্ধনীগুলি সরান tuple, তাদের প্রয়োজন নেই। তালিকা অনুধাবন করে লুপটি প্রতিস্থাপন করুন (পদ্ধতিটি পার্শ্ব প্রতিক্রিয়া হিসাবে মূল্যায়ন করা হবে)।
ট্রাং ওউল

1
@ উইলিম: সমস্যার স্পেসিফিকেশন ( রূপান্তর অধীনে ) একবার দেখুন; এটি আপনার প্রোগ্রামের স্পেসগুলি কীভাবে পরিচালনা করতে হবে তা সুনির্দিষ্টভাবে ব্যাখ্যা করে।
লিন

5

জাভাস্ক্রিপ্ট (ES6), 114 117 125

Edit2 3 বাইট সংরক্ষিত ধন্যবা @Dom হেস্টিংস সম্পাদনা অবৈধ এইচটিএমএল, কিন্তু যাহাই হউক না কেন কাজ।

সাধারণ নোট: একটি ইমাস্ক্রিপ্ট cript অনুবর্তী ব্রাউজারে স্নিপেট চলমান পরীক্ষা (উল্লেখযোগ্যভাবে ক্রোম এমএসআইই নয়, আমি ফায়ারফক্সে পরীক্ষা করেছি)

F=s=>document.write(s.replace(/\S/g,c=>`<b style=color:hsl(${i++/s.replace(/ /g,'').length*360},100%,50%>`+c,i=0))
<input value='Your challenge is to take input as a line of text and output it like this.' id=I size=100>
<button onclick='F(I.value)'>-></button>


1
কোনও ব্রাউজার সম্পূর্ণরূপে ES6 এর সাথে সামঞ্জস্যপূর্ণ নয়। IE এখনও সম্পূর্ণরূপে ES5 অনুগত নয়!
সুপারজেডি ২৪

@ সুপারজেডি ২২৪ আমি সম্মত আমি কেবল বলছি: ফায়ারফক্স কাজ করার সময় এটি ক্রোম বা এমএসআইই দিয়ে চেষ্টা করবেন না
edc65

আমার মনে হয় আমারও কিছু বলা উচিত নয় কারণ আমি কেবল আপনার অধীনেই পেয়েছি তবে আমি মনে করি যে আপনি )আপনার hsl(ঘোষণার পরেও বাদ দিতে পারেন যেহেতু ফায়ারফক্সে এখনও আমার কাজ করছে বলে মনে হচ্ছে!
ডম হেস্টিংস

এছাড়াও, আপনি পরিবর্তন করতে পারেন ${c}'থেকে '+cআরো 2 সংরক্ষণ করতে ... ভালো খনি সঙ্গে ফিরে পেতে!
ডম হেস্টিংস

এটি সাফারি 9.0 এ কাজ করে না। সি:
অ্যাডিসন ক্রম্প

4

পাইথন 3, 131 বাইট

ডম হেস্টিংসের উত্তর সিমুলার তবে অজগরটিতে প্রয়োগ করা হয়েছে।

স্ট্রিং '|\x82\x88\x8ejF"#$%\x1f\x19\x137[\x7f~}'তালিকা ফর্ম নির্মিত হয়েছিল [124,130,136,142,106,70,34,35,36,37,31,25,19,55,91,127,126,125]অনুক্রমে প্রদর্শন করে টার্মিনাল কালার কোড রয়েছে। এগুলি ফিল্টার করা হয়েছে যাতে তারা কেবলমাত্র 100% এবং মান 50% এর সাথে রঙ অন্তর্ভুক্ত করে। এরপরে তালিকাটি বাছাই করা হয়েছিল তাই সঠিক বর্ণগুলি প্রথমে প্রদর্শিত হয়েছিল।

স্টিডিনের কাছ থেকে ইনপুট নেয় এবং এটি স্টডআউটে দেয় returns

আপনার টার্মিনালটি এটিকে সঠিকভাবে চালানোর জন্য আপনাকে এএনএসআই এস্কেপ কোডগুলি সমর্থন করতে হবে।

x=input();u=u'|\82\88\8ejF"#$%\1f\19\137[\7f~}';j=0
for i in x:print('\033[38;5;%dm%s'%(ord(u[j*18//len(x.replace(" ", ""))]),i),end="");j+=i!=" "

বা আক্ষরিক বাইট অক্ষর সহ সংক্ষিপ্ত সংস্করণ (সঠিকভাবে পেস্ট করা হয়নি):

x=input();u='|<82><88><8E>jF"#$%^_^Y^S7[^?~}';j=0
for i in x:print('ESC[38;5;%dm%s'%(ord(u[(j*18)//len(x.replace(" ", ""))]),i),end="");j+=i!=" "

আক্ষরিক হেক্সডাম্প:

783d696e70757428293b753d277c82888e6a46222324251f1913375b7f7e7d273b6a3d300a666f72206920696e20783a7072696e7428271b5b33383b353b25646d25732725286f726428755b286a2a3138292f2f6c656e28782e7265706c616365282220222c20222229295d292c69292c656e643d2222293b6a2b3d69213d2220220a

9 বাইট বাঁচানোর জন্য @ স্পটফিকে ধন্যবাদ (এবং আমাকে লক্ষ্য করে আমার বাইট গণনাটি এতটা সামান্য ভুল ছিল)!


"\ X82" কে আসল চরিত্রের সাথে প্রতিস্থাপন করবেন না কেন? আমি সেই স্ট্রিংটি একটি ফাইলে লিখেছি এবং এটি আমার স্ক্রিপ্টে বাইনারি অবস্থায় পড়েছিলাম। আপনি raw 033 কে কাঁচা পালানোর অক্ষর, এমনকি \ 1f (হেক্স) দিয়ে প্রতিস্থাপন করতে পারেন। আপনি "ইউ" ঘোষণা করেন, তারপরে কেবল এটি একবার ব্যবহার করুন। আপনি কয়েকটি অক্ষরটি এটিকে এক্সপ্রেশনটিতে নামিয়ে সংরক্ষণ করতে পারেন। আপনি পূর্ণসংখ্যা বিভাজনের জন্য "//" ব্যবহার করে ইনট () কলটি এড়াতে পারবেন।
স্বস্তিঃ

ওহো, 3 x3f এর মতো \ 033।
স্বতঃস্ফীতি

2

পিএইচপি, 165 বাইট

"S" প্যারামিটার হিসাবে ইনপুট দিয়ে চালান

এইচটিএমএলটি অবৈধ তবে এটি সমস্ত বড় ব্রাউজারগুলিতে রেন্ডার করা উচিত (ক্রোম এবং ফায়ারফক্সে পরীক্ষিত)

<?php $n=preg_match_all("/[^ ]/",$q=$_GET['s']);for($i=$j=0;$j<strlen($q);$j++){if(" "!=$s=$q[$j])$i+=360;echo"<a style='color:hsl(".floor($i/$n).",100%,50%)'>".$s;}

1

পিএইচপি ৪.১, 112 103 102 বাইট

আমি @ ড্যানকিমেসের উত্তরটি একটি প্রাথমিক পয়েন্ট হিসাবে ব্যবহার করেছি । সেখান থেকে, আমি কোডটির চেয়ে আলাদা যে বিন্দুতে এক টন পরিবর্তন প্রয়োগ করেছি ।

বাস্তবায়ন একই রকম, কোডটি সম্পূর্ণ আলাদা।

foreach(str_split($s)as$c)echo"<a style=color:hsl(",((" "^$c?$i+=360:$i)/strlen($s))|0,",100%,50%>$c";

এটি ব্যবহার করার জন্য, নামের সাথে একটি সেশন / জিইটি / পোস্ট / কুকিতে কেবল একটি মান সেট করুন s

পরীক্ষার বাক্যে এই ফাংশনটি চালনার ফলাফল:

<a style=color:hsl(4,100%,50%>Y<a style=color:hsl(9,100%,50%>o<a style=color:hsl(14,100%,50%>u<a style=color:hsl(19,100%,50%>r<a style=color:hsl(24,100%,50%> <a style=color:hsl(29,100%,50%>c<a style=color:hsl(34,100%,50%>h<a style=color:hsl(38,100%,50%>a<a style=color:hsl(43,100%,50%>l<a style=color:hsl(48,100%,50%>l<a style=color:hsl(53,100%,50%>e<a style=color:hsl(58,100%,50%>n<a style=color:hsl(63,100%,50%>g<a style=color:hsl(68,100%,50%>e<a style=color:hsl(72,100%,50%> <a style=color:hsl(77,100%,50%>i<a style=color:hsl(82,100%,50%>s<a style=color:hsl(87,100%,50%> <a style=color:hsl(92,100%,50%>t<a style=color:hsl(97,100%,50%>o<a style=color:hsl(102,100%,50%> <a style=color:hsl(107,100%,50%>t<a style=color:hsl(111,100%,50%>a<a style=color:hsl(116,100%,50%>k<a style=color:hsl(121,100%,50%>e<a style=color:hsl(126,100%,50%> <a style=color:hsl(131,100%,50%>i<a style=color:hsl(136,100%,50%>n<a style=color:hsl(141,100%,50%>p<a style=color:hsl(145,100%,50%>u<a style=color:hsl(150,100%,50%>t<a style=color:hsl(155,100%,50%> <a style=color:hsl(160,100%,50%>a<a style=color:hsl(165,100%,50%>s<a style=color:hsl(170,100%,50%> <a style=color:hsl(175,100%,50%>a<a style=color:hsl(180,100%,50%> <a style=color:hsl(184,100%,50%>l<a style=color:hsl(189,100%,50%>i<a style=color:hsl(194,100%,50%>n<a style=color:hsl(199,100%,50%>e<a style=color:hsl(204,100%,50%> <a style=color:hsl(209,100%,50%>o<a style=color:hsl(214,100%,50%>f<a style=color:hsl(218,100%,50%> <a style=color:hsl(223,100%,50%>t<a style=color:hsl(228,100%,50%>e<a style=color:hsl(233,100%,50%>x<a style=color:hsl(238,100%,50%>t<a style=color:hsl(243,100%,50%> <a style=color:hsl(248,100%,50%>a<a style=color:hsl(252,100%,50%>n<a style=color:hsl(257,100%,50%>d<a style=color:hsl(262,100%,50%> <a style=color:hsl(267,100%,50%>o<a style=color:hsl(272,100%,50%>u<a style=color:hsl(277,100%,50%>t<a style=color:hsl(282,100%,50%>p<a style=color:hsl(287,100%,50%>u<a style=color:hsl(291,100%,50%>t<a style=color:hsl(296,100%,50%> <a style=color:hsl(301,100%,50%>i<a style=color:hsl(306,100%,50%>t<a style=color:hsl(311,100%,50%> <a style=color:hsl(316,100%,50%>l<a style=color:hsl(321,100%,50%>i<a style=color:hsl(325,100%,50%>k<a style=color:hsl(330,100%,50%>e<a style=color:hsl(335,100%,50%> <a style=color:hsl(340,100%,50%>t<a style=color:hsl(345,100%,50%>h<a style=color:hsl(350,100%,50%>i<a style=color:hsl(355,100%,50%>s<a style=color:hsl(360,100%,50%>. 

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