অ্যান্টি-এলিয়জিং এএসসিআইআই আর্ট


33

পটভূমি

এএসসিআইআই আর্ট হ'ল আকার তৈরি করতে এএসসিআইআই পাঠ্য ব্যবহার করে চিত্রগুলি তৈরি করার অনুশীলন।

অ্যালাইজিং হ'ল এএসসিআইআই আর্টের বৃহত "পিক্সেল" দ্বারা নির্মিত প্রভাব, যা অক্ষরের আকার। চিত্রটি অবরুদ্ধ এবং দেখতে শক্ত হয়ে ওঠে। অ্যান্টি-এলিয়জিং গ্রেডিয়েন্ট তৈরি করে এবং এএসসিআইআই আর্টের শক্ত প্রান্তগুলিকে নরম করে এই প্রভাবটি সরিয়ে দেয়।

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি হ'ল সংক্ষিপ্ততম প্রোগ্রামটি লেখা সম্ভব যা ASCII আর্টের একটি অংশ নেবে এবং এন্টি-এলিয়াসযুক্ত সংস্করণ আউটপুট দেবে।

কী ধরণের অ্যান্টি-এলিয়জিং?

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

কোনও চরিত্রের অ্যান্টি-এলিয়াস হওয়া দরকার কিনা আপনি কীভাবে জানবেন? উত্তরটি অবিলম্বে উপরে, নীচে, বাম এবং অক্ষরের ডানদিকে ( ত্রিভুজ নয় ) উপর নির্ভর করে । এখানে যখন অ্যান্টি-এলিয়জিং প্রয়োজন হয় তার একটি চার্ট দেওয়া হয়েছে, যেখানে ?এবং xকোনও অ-সাদা অংশের অক্ষরের পক্ষে দাঁড়াতে পারে।

 x? ->  d?
 ?      ? 


?x  -> ?b 
 ?      ? 

 ?      ? 
?x  -> ?F 


 ?      ? 
 x? ->  Y?



 x  ->  ;   Note: This character has been changed from _ to ;
 ?      ? 

 ?      ? 
 x  ->  V 



?x  -> ?> 



 x? ->  <?



 x  ->  @ 

ইনপুট (এবং প্রাক-অ্যান্টি-এলিয়াসিং এএসসিআইআই শিল্প উদাহরণ)

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

7
9
  888888 
 888888  
999 98  7
 666666  
  666666 
   6666  
    6    

আউটপুট (এবং অ্যান্টি-এলিজেড শিল্প উদাহরণ)

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

  d8888> 
 d8888F  
<99 98  @
 Y6666b  
  Y6666> 
   Y66F  
    V    

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

আরেকটি উদাহরণ

ইনপুট

12
18
   xx  xxx  xxx   
  xxxx  xxx  xxx  
 xxxxxx  xxx  xxx 
xxx  xxx  xxx  xxx
xxxx xxx  xxx  xxx
 xxxxxx  xxx  xxx 
  xxxx  xxx  xxx  
x  xx  xxx  xxx  x
xx    xxx  xxx  xx
xxx  xxx  xxx  xxx
xxxx  xxx  xxx  xx
xxxxx  xxx  xxx  x

আউটপুট

   db  <xb  <xb   
  dxxb  Yxb  Yxb  
 dxxxxb  Yxb  Yxb 
dxx  xxb  xxb  xxb
Yxxb xxF  xxF  xxF
 YxxxxF  dxF  dxF 
  YxxF  dxF  dxF  
;  YF  dxF  dxF  ;
xb    dxF  dxF  dx
xxb  <xF  <xF  <xx
xxxb  Yxb  Yxb  Yx
Yxxx>  Yx>  Yx>  V

বিধি, বিধিনিষেধ এবং নোটস

আপনার প্রোগ্রামটি কেবল প্রিন্টযোগ্য এএসসিআইআই অক্ষরে লেখা উচিত, যাতে আমরা প্রোগ্রামগুলি থেকে শিল্প তৈরি করতে পারি। তা ছাড়া, স্ট্যান্ডার্ড কোড-গল্ফ বিধি প্রযোজ্য।


যেহেতু এখনও কোনও উত্তর নেই, তাই আমি অ্যান্টি-এলিয়জিং চার্টে একটি চরিত্র পরিবর্তন করেছি। _পরিণত হয়েছে ;কারণ এটি আরও ভাল কাজ করে।
PhiNotPi

এটি সর্বকালের আমার প্রিয় কোড গল্ফ প্রশ্ন হতে পারে। 4 টির মতো বিস্ময়কর সমাধানের মতো কাজ করা।
ক্যাপচার্যাগ

যদিও আমি বিভ্রান্ত। আপনি বলছেন যে কর্ণগুলি গণনা করা হয় না, তবে আপনার চিত্রগুলিতে সমস্ত ত্রিভুজগুলি পূরণ করে প্রশ্ন চিহ্নগুলি দেখায়। উদাহরণগুলিতে আমি যা দেখছি সেগুলি থেকে কেবল কেবল পক্ষগুলির দিকে নজর দেওয়া নিরাপদ হতে পারে তবে আমি বিভ্রান্ত হয়ে পড়েছি? তির্যকগুলি কি কোনও ব্যাপার?
ক্যাপচার্যাগ

না, তির্যকগুলি কখনই গুরুত্বপূর্ণ নয়। আমি যদি লেখচিত্রটি থেকে কর্ণগুলি সরিয়ে ফেলি তবে এটি আরও স্পষ্ট হবে।
PhiNotPi

আমি মনে করি আপনার উদাহরণে টাইপো থাকতে পারে; আমি বিশ্বাস করি ডান হাতের কলামটির ভিতরের প্রান্তে Ys হওয়া উচিত। যদিও এর উত্তরের উত্তর পেয়ে আনন্দিত, ভাল প্রশ্ন: ডি
এড জেমস

উত্তর:


8

রুবি, 180 168 টি অক্ষর

gets
w=1+gets.to_i
f=*(readlines*"").chars
f.zip(f[1..-1]+s=[" "],s+f,s*w+f,f[w..-1]+s*w){|a,*b|$><<"@;V#{a}>bF#{a}<dY#{a*5}"[a>" "?(b.map{|y|y>" "?1:0}*"").to_i(2):3]}

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

সম্পাদনা: ব্যবহার readlinesকরে 12 টি অক্ষর সংরক্ষণ হয়।


6

রুবি 275 265 263 261 258 254 244 243 214 212 207

H=0...gets.to_i
W=0...gets.to_i
G=readlines
z=->x,y{(H===y&&W===x&&' '!=G[y][x])?1:0}
H.map{|j|W.map{|i|l=G[j][i]
G[j][i]="@V;#{l}>Fb#{l}<Yd#{l*5}"[z[i+1,j]*8+z[i-1,j]*4+z[i,j+1]*2+z[i,j-1]]if' '!=l}}
puts G

নমুনা 1: http://ideone.com/PfNMA

নমুনা 2: http://ideone.com/sWijD


1) পরিসীমা সংজ্ঞা কাছাকাছি প্যারেন্টেসিস প্রয়োজন হয় না। 2) 0..h-1হিসাবে লেখা যেতে পারে 0...h। 3) আপনার সি # কোডের মতোই G=[];h.times{G<<gets}লেখা যেতে পারে G=readlines। 4) পদক্ষেপ 3 পরে। পরিবর্তনশীল এইচ অকেজো হয়ে যায়, এইচ এবং ডাব্লু এর মান শুধুমাত্র একবার ব্যবহার করা হয়, তাই h=gets.to_i;w=gets.to_i;H=(0..h-1);W=(0..w-1)হিসাবে লিখতে পারেন H=0...gets.to_i;W=0...gets.to_i। 5) এই ক্ষেত্রে andহিসাবে লেখা যেতে পারে &&, যার আশেপাশের জায়গাগুলির প্রয়োজন নেই। 6) আপনার একটি অতিরিক্ত আছে; এবং আপনি ফাইলের শেষে নিউলাইনটি গণনা করেছেন, যা প্রয়োজনীয় নয়। এর অর্থ 214 টি অক্ষর: ideone.com/CiW0l
manatwork

ওহ ধন্যবাদ! আমি জানতাম সেখানে আরও উন্নতি করতে হবে, তবে কখনও ভাবিনি যে সেখানে অনেকগুলি রয়েছে। আমি H=0..gets.to_iকোডটি লেখার সময় চেষ্টা করেছিলাম, তবে এটি কাজ করছে বলে মনে হয়নি (স্পষ্টতই এটি অন্য কারণে হয়ে থাকতে পারে)।
ক্রিশ্চিয়ান লুপাস্কু

1
এখনও দুটি পয়েন্ট যেখানে আপনি কমপক্ষে 7 টি অক্ষর হ্রাস করতে পারবেন: 1) আপনি 2 এর mapপরিবর্তে ব্যবহার করতে পারেন each) এর z=->...পরিবর্তে def z...end
হাওয়ার্ড

@ হওয়ার্ড ধন্যবাদ, আমি পরিবর্তনের mapপরিবর্তে প্রয়োগ করেছি each। ল্যাম্বদা সিনট্যাক্সের জন্য, তবে আমি মনে করি যে এর পরিবর্তে zফর্মের ব্যবহারের প্রয়োজন হবে , এইভাবে চরিত্রের গণনায় কিছুটা যুক্ত হবে। আমি যদি কিছু মিস করছি তবে দয়া করে আমাকে জানান। z.call(args)z(args)
ক্রিশ্চিয়ান লুপাস্কু

@ হওয়ার্ড মাইন্ডমাইন্ড, আমি কী খুঁজে পেয়েছি তা সবেমাত্র খুঁজে পেয়েছি। আমি ল্যাম্বডা []ব্যবহার করতে আপডেট করব ।
ক্রিশ্চিয়ান লুপাস্কু

4

জাভাস্ক্রিপ্ট, 410 টি অক্ষর:

function(t){m={"10110":"b","11100":"d","01101":"Y","00111":"F","10100":";","00101":"V","00110":">","01100":"<","00100":"@"},d="join",l="length",t=t.split('\n').splice(2),t=t.map(function(x)x.split('')),f=function(i,j)t[i]?(t[i][j]||' ')==' '?0:1:0;for(o=t[l];o--;){for(p=t[o][l];p--;){y=[f(o+1,p),f(o,p+1),f(o,p),f(o,p-1),f(o-1,p)],t[o][p]=m[y[d]('')]||t[o][p]}}t=t.map(function(x)x[d](''))[d]('\n');return t;}

ungolfed:

function(t){
    m={
        "10110":"b",
        "11100":"d",
        "01101":"Y",
        "00111":"F",
        "10100":";",
        "00101":"V",
        "00110":">",
        "01100":"<",
        "00100":"@"
    },
    d="join",
    l="length",
    t=t.split('\n').splice(2),
    t=t.map(function(x) x.split('')),
    f=function(i,j) t[i]?(t[i][j]||' ')==' '?0:1:0;

    for(o=t[l];o--;){
        for(p=t[o][l];p--;){
            y=[f(o+1,p),f(o,p+1),f(o,p),f(o,p-1),f(o-1,p)],

            t[o][p]=m[y[d]('')]||t[o][p]
        }
    }
    t=t.map(function(x)x[d](''))[d]('\n');
    return t;
}

মৌলিক, 440 টি অক্ষর:

function (t){m={"10110":"b","11100":"d","01101":"Y","00111":"F","10100":";","00101":"V","00110":">","01100":"<","00100":"@"},s="split",d="join",l="length",t=t[s]('\n').splice(2),t=t.map(function(x) x[s]('')),f=function(i,j)i<0||i>=t[l]?0:(j<0||j>=t[i][l]?0:t[i][j]==' '?0:1);for(o=t[l];o--;){for(p=t[o][l];p--;){y=[f(o+1,p),f(o,p+1),f(o,p),f(o,p-1),f(o-1,p)],h=m[y[d]('')];if(h){t[o][p]=h}}}t=t.map(function(x) x[d](''))[d]('\n');return t;}

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


1
মিটার ঘোষণা প্রতিস্থাপন m={22:"b",28:"d",13:"Y",7:"F",20:";",5:"V",6:">",12:"<",4:"@"}দিয়ে তারপর ধর্মান্তরিত M এর সাবস্ক্রিপ্ট parseInt(): m[parseInt(y[d](''),2)]। এটি আকার 373 টি অক্ষরে হ্রাস করে।
manatwork

3

পাইথন, 259 অক্ষর

H=input()
W=input()+1
I=' '.join(raw_input()for i in' '*H)
for i in range(H):print''.join(map(lambda(s,a,b,c,d):(s*5+'dY<'+s+'bF>'+s+';V@'+' '*16)[16*(s==' ')+8*(a==' ')+4*(b==' ')+2*(c==' ')+(d==' ')],zip(I,I[1:]+' ',' '+I,I[W:]+' '*W,' '*W+I))[i*W:i*W+W-1])

প্রোগ্রামটি একটি একক স্ট্রিংয়ের মধ্যে ইনপুট পড়বে I(ফাঁকা ফাঁকা ফাঁকাগুলি দিয়ে রেখাগুলি পৃথক করে), অক্ষর এবং তার চারপাশের চারটি অক্ষর সমন্বিত 5-টিপলগুলির একটি তালিকা জিপ করে, তারপরে স্ট্রিং ইনডেক্সিং ব্যবহার করে ফলাফলের অক্ষরটি দেখায়।


3

পিএইচপি - 359 330 282 268 257 টি অক্ষর

<?php
$i=fgets(STDIN)+0;$w=fgets(STDIN)+1;$s='';$m='@<;d>0b0VY00F000';
for(;$i--;)$s.=fgets(STDIN);
for(;++$i<strlen($s);){
$b=trim($s[$i])?0:15;
foreach(array($i+1,$i+$w,$i-1,$i-$w)as$k=>$x)
$b|=pow(2,$k)*(isset($s[$x])&&trim($s[$x]));
echo $m[$b]?$m[$b]:$s[$i];}

@ ফিলনটপি এটি কাজ করছে না কারণ আমার স্থানীয়ভাবে সংরক্ষণ করা পরীক্ষার ফাইলগুলিতে উইন্ডোজ-স্টাইলের ইওল ছিল \r\n। আমি ইউনিক্স স্টাইল EOL এর সাথে কাজ করার জন্য আমার কোড আপডেট করেছি \n
মরিচা ফাউসাক

ঠিক আছে, মনে হচ্ছে এটি এখন কাজ করছে।
PhiNotPi

2

পাইথন, 246 241

H=input();W=1+input()
S=' '
o=W*S
F=o+'\n'.join((raw_input()+o)[:W-1]for k in range(H))+o
print ''.join((16*x+'@;<d>b'+2*x+'V'+x+'Y'+x+'F'+3*x)[
16*(x>S)|8*(a>S)|4*(l>S)|2*(r>S)|(b>S)]for
x,a,l,r,b in zip(F[W:-W],F,F[W-1:],F[W+1:],F[2*W:]))

ডাব্লুসিসি এবং নমুনা 2 এ পরীক্ষা, উপরে রুবি সমাধানের আউটপুটটির সাথে পৃথক:

t:~$ wc trans.py && python trans.py < lala2 > o && diff -q o ruby_out2_sample
  2 11 241 trans.py
t:~$

1

সি # 591 563

string A(string t){var s=new StringReader(t);var h=int.Parse(s.ReadLine());var w=int.Parse(s.ReadLine());var lines=s.ReadToEnd().Split(new[]{"\r\n"},StringSplitOptions.None).Select(x=>x.ToCharArray()).ToArray();for(var i=0;i<h;i++)for(var j=0;j<w;j++){var c=lines[i][j];if(c==' ')continue;var n=(i>0?(lines[i-1][j]!=' '?1:0):0)+(i<h-1?(lines[i+1][j]!=' '?2:0):0)+(j>0?(lines[i][j-1]!=' '?4:0):0)+(j<w-1?(lines[i][j+1]!=' '?8:0):0);lines[i][j]=new[]{'@','V',';',c,'>','F','b',c,'<','Y','d',c,c,c,c,c}[n];}return string.Join("\r\n",lines.Select(l=>new string(l)));}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.