অন্ধকার দ্বারা অক্ষর বাছাই করুন


38

আপনার প্রোগ্রামটি অবশ্যই অক্ষরের একটি লাইন ইনপুট হিসাবে গ্রহণ করবে:

@+.0

এবং অক্ষরগুলি নির্ধারিত হয় কত অন্ধকার দ্বারা সাজানো হয়, এর মতো:

.+0@

প্রয়োজনীয়তা:

  • অন্ধকার সনাক্তকরণের জন্য আপনাকে অবশ্যই মনসপাসেড ফন্ট ব্যবহার করতে হবে।

  • প্রতিটি অক্ষর কত পিক্সেল নেয় তা আপনাকে অবশ্যই খুঁজে বের করতে হবে। আপনাকে অবশ্যই অক্ষরটি আঁকতে হবে এবং পিক্সেলগুলি গণনা করতে হবে, অর্থাৎ আপনি কেবল পিক্সেলের পরিমাণকে হার্ডকোড করতে পারবেন না।

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

  • পিক্সেল গণনা করার পরে, আপনাকে অবশ্যই অক্ষরগুলি পিক্সেলের পরিমাণ অনুসারে বাছাই করতে হবে এবং সেগুলি ক্রম অনুসারে আউটপুট করতে হবে।

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


7
আশ্চর্যজনকভাবে যথেষ্ট, এটি RPG.se এর জন্যও উপযুক্ত!
কর্সিকা

1
কি, অন্ধকার গণনায় প্রদর্শনের গামার কোনও সংশোধন নেই?
ইলমারি করোনেন

6
আমরা কি একটি সাদা ফন্ট ব্যবহার করতে পারি? যদি তা হয় তবে আমি মনে করি এটি আমার জড়িয়ে আছে।
পল

উত্তর:


22

গণিত, 112 110 108 বাইট

এটি সম্ভবত আরও গল্ফ করা যেতে পারে। ধরুন স্ট্রিংটি ভেরিয়েবলের মধ্যে রয়েছে।

এবং এখন অন্য তালিকা অনুসারে একটি তালিকা সাজানোর জন্য একটি সঠিক বাক্য গঠন ব্যবহার করে।
ভাগ্যবান পরীক্ষার কেস -> " ওঁ হ্যাঁ, এটি কার্যকর হয়" -> মুখের
তীক্ষ্ণ চোখের জন্য ধন্যবাদ, ডেভিড ক্যারাহার।

আপডেট: ওসিআর এ মেনলোর সাথে প্রতিস্থাপন করা হয়েছে কারণ আমি বুঝতে পেরেছিলাম যে ওএসএক্স-এ ওসিআর-তে একটি ফন্ট পরিবারের নাম আসলে ওসিআর এ এস.ডি. সুতরাং আমি আসল চুক্তির পরিবর্তে একটি ডিফল্ট ফন্ট বাছাই করছিলাম। মেনলোও একই বাইট গণনা সহ মনোপ্রেস, তাই কোনও নেট লাভ বা ক্ষতি নেই।

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

c=Characters@s;Last/@Sort[Transpose@{Total[1-#&/@ImageData@Rasterize@Style[#,FontFamily->"Menlo"],3]&/@c,c}]

s = FromCharacterCode /@ Range[33, 135];"কুরিয়ার" দিয়ে আউটপুট

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

একই জন্য আউটপুট, তবে ফন্টফ্যামিলি "মনোস্পেস" সহ:

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

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

অবহেলিত কোড:

s = FromCharacterCode /@ Range[33, 135];
c = Characters@s;
Last /@ Sort[
    Transpose@{Total[1 - # & /@ 
        ImageData@Rasterize@Style[#, FontFamily -> "Menlo"], 3] & /@ c, c}]

1
এই "" <> (FromCharacterCode /@ Range[33, 135])
ইনপুটটির

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

1
কি ভয়ানক ভাষা! অন্যদিন ঠিক ওল্ফ্রামের নতুন প্রোগ্রামিং ভাষার প্রচেষ্টার সন্ধান পেয়েছি, তার অপেক্ষায় রয়েছি।
The0थर

1
আপনি অক্ষর [] অক্ষরে @ এবং বিপরীত [] কে বিপরীত @ তে দুটি বাইট সংরক্ষণ করতে পারেন।
মাইকেল স্টারন

2
আমি একটি অনুরূপ উত্তর পোস্ট করতে না চান, কিন্তু আমি নিজেকে চেষ্টা এবং এটি খাটো এসেছেনStringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
ফিটফাট

25

বাশ + চিত্রম্যাগিক: 164 147 148 টি অক্ষর

while read -n1 c
do
o=`convert -size 20x15 xc: +antialias -font cour.ttf -draw "text 0,10 '$c'" xpm:-`
o=${o//[^ ]}
a[${#o}]+=$c
done
echo "${a[@]}"

নমুনা রান:

bash-4.1$ echo -n '@+.0' | bash graysort.sh
. + 0 @

ধূসরতা গ্রুপগুলির মধ্যে বিভাজকগুলি inোকানো হয়। অভিন্ন ধূসরতার স্তরযুক্ত অক্ষরগুলি পৃথক নয়:

bash-4.1$ echo -n 'abcdefghijklmnopqrstuvwxyz' | bash graysort.sh
i cl jortz esv ax u df bgnpq y hk w m

পরিবর্তে বাশ অ্যারে সূচকগুলি ব্যবহার করে বাছাই করার জন্য +1sort
ডিজিটাল ট্রমা

9

কিউব্যাসিক, 259 বাইট

SCREEN 1
DIM a(255)
FOR i = 32 TO 255
    CLS
    PRINT CHR$(i);
    FOR p = 0 TO 64
        a(i) = a(i) + POINT(p MOD 8, p \ 8)
    NEXT p
NEXT i
FOR p = 0 TO 96
    FOR i = 32 TO 255
        IF a(i) = p THEN PRINT CHR$(i);
    NEXT i
NEXT p

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

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

শেষ অবধি, আমি কয়েকটি চরিত্রগুলি মুছে ফেলতে পারি (বেশিরভাগ সাদা অংশ যা QBasic IDE সাহায্যমূলকভাবে সন্নিবেশ করিয়েছে), তবে সম্ভবত এটি মূল্যবান নয় কারণ এই উত্তরটি যেভাবেই জয়ের সম্ভাবনা নেই।

কিউব্যাসিক অন্ধকার অনুসারে বাছাই করুন


মজা করার জন্য এটি করার জন্য প্লাস ওয়ান!
জোনাথন ভ্যান মাত্রে

8

জাভাস্ক্রিপ্ট + ক্যানভাস এবং ব্রাউজার ডোম ( 280 237 235 বাইট)

মন্তব্যগুলিতে ফোর্স এবং টুথব্রাশের কাছ থেকে সঞ্চারের সাথে আপডেট হওয়া সংস্করণ:

function m(x){a=document.createElement('canvas').getContext('2d');a.font='9px Monaco';a.fillText(x,y=i=0,20);for(;i<3600;)y+=a.getImageData(0,0,30,30).data[i++];return y}alert(s.split('').sort(function(a,b){return m(a)-m(b)}).join(''))

আরও পঠনযোগ্য সংস্করণ:

// Scoring function - Calculates darkness for single character
function m(x) {
    a = document.createElement('canvas').getContext('2d');
    a.font = '9px Monaco';
    a.fillText(x, y = i = 0, 20);
    for (; i < 3600;) y += a.getImageData(0, 0, 30, 30).data[i++];
    return y
}
// Assume input is in variable s and alert as output. Comparison function now expression.
alert(s.split('').sort(function (a, b) {
    return m(a) - m(b)
}).join(''))

আরও গল্ফ করা যেতে পারে।

আমি এই সাইটে নতুন, সুতরাং জাভাস্ক্রিপ্ট উত্তরের জন্য কীভাবে ইনপুট পড়তে হয় তা আমি নিশ্চিত নই। আমি ধরে নিই ইনপুট নামের একটি ভেরিয়েবলের মধ্যে রয়েছে s। যদি এটি ঠিক না থাকে তবে আমি উত্তর এবং চর গণনা আপডেট করব।

আপডেট হওয়া সংস্করণটির জেএসফিডেল।

প্রথম সংস্করণের জেএসফিডেল


আমি সত্যিই এটি পছন্দ করি, তবে এখানে অনেকগুলি সম্ভাব্য উন্নতি রয়েছে। ভেরিয়েবলগুলি cএবং sঅপ্রয়োজনীয় ( a=document.createElement('canvas').getContext('2d')এবং y+=a.getImageData(0,0,30,30).data[i]), উপাদানটি সংযোজন করার প্রয়োজন হয় না, এর শূন্য সূচনাটি yএর i( i=y=0) এর সাথে একত্রিত করা যায় , উত্তর-পরবর্তী বৃদ্ধি ( ) iযোগ করার সাথে সংযুক্ত করা যায় , এবং টাইপফেস মোনাকো মনো-স্পেসড এবং কুরিয়ারের চেয়ে ছোট নাম রয়েছে। yfor(...;y+=...[i++]);
ফর্স

ধন্যবাদ! আমি এখনও একটি পাকা গল্ফার নই, সুতরাং আপনার মন্তব্যগুলি অনেক সাহায্য করে। আমি তাদের এখন কোডে সংযুক্ত করেছি।
waxwing

জাভাস্ক্রিপ্ট এখানে উত্তর সাধারণত ইনপুট পড়ুন prompt(); তবে এটিও ঠিক আছে।
কার্তিক

আপনি অপসারণ করতে পারেন y=i=0;এবং পরিবর্তন a.fillText(x,0,20)করতে a.fillText(x,y=i=0,20)
টুথব্রাশ

ধন্যবাদ, পাশাপাশি যোগ! দুটি চরিত্র দুটি চরিত্র!
ওয়াক্সউইং

3

পিএইচপি, 298 টি অক্ষর

আমি কয়েকটি লাইন বিরতি যুক্ত করেছি যাতে আপনি এটির সমস্ত ঘৃণ্যতার মধ্যে দেখতে পান:

<?php
$s=@$_GET[s];$a=array();$v=imagecreate(16,16);$f='imagecolorallocate';
$f($v,0,0,0);for($i=0;$i<strlen($s);$i++){$c=$f($v,$i,0,1);
imagechar($v,5,2,$n=0,$s[$i],$c);for($y=16;$y--;)
for($x=16;$x--;)$n+=($c==imagecolorat($v,$x,$y));
$a[]=ord($s[$i])+($n<<8);}sort($a);foreach($a as $v)echo chr($v);

এই কোডটি জিডি ফন্টগুলি ব্যবহার করে যা পিএইচপি সহ অন্তর্নির্মিত হয়। imagechar()ফন্ট নির্বাচন করার দ্বিতীয় তর্কটি (1 থেকে 5 পর্যন্ত সংখ্যাগুলি বৈধ)।

উদাহরণ:

Input:  !@#$%^&*-=WEIX,./'
Output: '-.,^=!/*IE%X#$&@W

আপনি যদি উপরে বর্ণিত কোডের উপরে নিম্নলিখিতটি প্রবেশ করান, তবে আপনি আপনার ওয়েব ব্রাউজারে অক্ষরের তালিকা সরবরাহ করতে সক্ষম হবেন।

<?php
define("FONT_SIZE",5);
if(@$_SERVER['PATH_INFO']=='/a.png') {
  $s = $_GET['s'];
  $im = imagecreate(strlen($s)*(FONT_SIZE+4)+4,FONT_SIZE+12);
  imagecolorallocate($im,255,255,128);
  $c = imagecolorallocate($im,0,0,0);
  imagestring($im,FONT_SIZE,2,0,$s,$c);
  header("Content-Type: image/png");
  imagepng($im);
  imagedestroy($im);
  exit();
}
$me = $_SERVER['PHP_SELF'];
$t1 = $img = "";
if ($t1=htmlspecialchars(@$_GET['s'])) {
  $t2=urlencode($_GET['s']);
  $img="<p><img src=\"$me/a.png?s=$t2\" /></p>";
}
echo <<<END_HTML
<html>
<body>
$img
<form action="$me" method="get">
<input type="text" name="s" size="40" value="$t1" />
<input type="submit" value="Go" />
</form>
END_HTML;
if(!isset($_GET['s'])) exit();
?>

1
আপনি যদি ব্যবহার করেন তবে আপনি imagecreatetruecolorপ্রথম বরাদ্দটি ফেলে দিতে পারেন এবং -11 এর জন্য সরাসরি দ্বিতীয়টিতে ফাংশনটির নামটি ব্যবহার করতে পারেন। []পরিবর্তে array()। এবং foreach($a as$v)পাশাপাশি কাজ করে
আইনাসিও

3

GTB

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

0→I`_%I<l?_T;1,1,s;_,I,1
C;pT;{0,1,2,3,4,5},{0,1,2}→L1(I
0→I%I<l?_T;1,C;L1(I)>L1,I

ইনপুট

,O.i

আউটপুট

.,iO

যদি এটি কাজ করে তবে এটি এখন পর্যন্ত সেরা উত্তর। জিটিবি যা আছে?
স্লেটার

@ স্লেটার আপনি লিঙ্কটিতে ক্লিক করে খুঁজে বের করেন না কেন?
টিমটেক

আপনার পোস্টের শিরোনামটি আসলে একটি লিঙ্ক বলে চিহ্নিত করার জন্য আপনাকে ধন্যবাদ।
স্লটার

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

1
পুনঃটুইট করুন টিআই -৪৪ স্বয়ংক্রিয়ভাবে এগুলি আপনার জন্য বন্ধ করে দেয়।
টিমটেক

3

জাভা - 468 450 444

public static void main(String[]a){class c implements Comparable<c>{char d;c(char e){d=e;}public int compareTo(c o){return e(d)>e(o.d)?1:-1;}int e(char f){int a=0,x,y;BufferedImage img=new BufferedImage(99,99,1);img.getGraphics().drawString(""+f,9,80);for(y=0;y<99;y++)for(x=0;x<99;x++)a+=img.getRGB(x,y);return a;}}c[]s=new c[a[0].length()];int i=0;for(char d:a[0].toCharArray())s[i++]=new c(d);Arrays.sort(s);for(c d:s)System.out.print(d.d);}

@+.0abcdefghijklmnopqrstuvwxyz -> .irl+jcvtfxyzsuonkheaqpdb0wgm@

Ungolfed:

    public static void main(String[] a) {
    a = new String[]{"@+.0abcdefghijklmnopqrstuvwxyz"};
    class c implements Comparable<c> {
        char    d;

        c(char e) {
            d = e;
        }

        @Override
        public int compareTo(c o) {
            return e(d) > e(o.d)? 1 : -1;
        }

        int e(char f) {
            int a = 0, x, y;
            BufferedImage img = new BufferedImage(99, 99, 1);
            img.getGraphics().drawString("" + f, 9, 80);
            for (y = 0; y < 99; y++)
                for (x = 0; x < 99; x++)
                    a += img.getRGB(x, y);
            return a;
        }
    }
    c[] s = new c[a[0].length()];
    int i = 0;
    for (char d : a[0].toCharArray())
        s[i++] = new c(d);
    Arrays.sort(s);
    for (c d : s)
        System.out.print(d.d);
}

পরামর্শ: যতদূর সম্ভব সরকারী বা বেসরকারী সংশোধকগুলি এড়ানো; যা অপ্রয়োজনীয় বাইটগুলি সংরক্ষণ করে
এক্স 244

সব ভুলে গেছেন
মার্ক জেরোনিমাস

@ মারক জেরোনিমাস এইভাবেই এটি অট্যাকল করতে যাচ্ছিলাম না, তবে আমি ফন্টরেন্ডারিং কনটেক্সট ব্যবহার করার চেষ্টা করতে চেয়েছিলাম।
যাদু অক্টোপাস উরন

3

পোস্টস্ক্রিপ্ট, 381

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

(%stdin)(r)file token pop/Courier 99 selectfont[1 index length{0}repeat]0 1 99{0 1 99{0 1 5 index length 1 sub{newpath 9 19 moveto 3 copy 7 index exch 1 getinterval false charpath infill{3 index exch 2 copy get 1 add put}{pop}ifelse}for pop}for pop}for 0 1 99 dup mul{0 1 3 index length 1 sub{dup 3 index exch get 2 index eq{3 index exch 1 getinterval print}{pop}ifelse}for pop}for

(%stdin) (r) file token pop
/Courier 99 selectfont
%/DejaVuSansMono 99 selectfont
%/UbuntuMono-Regular 99 selectfont
[ 1 index length {0} repeat ]   % str []
0 1 99 {
    0 1 99 {
        0 1 5 index length 1 sub {
            newpath 
            9 19 moveto
            3 copy              % str [] n m i n m i
            7 index exch        % str [] n m i n m str i
            1 getinterval       % str [] n m i n m s
            false charpath      % str [] n m i n m
            infill              % str [] n m i bool
            {3 index exch 2 copy get 1 add put} {pop} ifelse
        } for
        pop
    } for
    pop
} for
% un-comment next line to print number of 'hits' for each glyph
%
% dup {=} forall
%
% next is 'lazy sort'
0 1 99 dup mul {                % str [] i
    0 1 3 index length 1 sub {  % str [] i j
        dup 3 index exch        % str [] i j [] j
        get 2 index eq          % str [] i j bool
        {3 index exch 1 getinterval print} {pop} ifelse
    } for
    pop
} for
()=

এবং এখানে 3 টি আলাদা ফন্টের ফলাফল রয়েছে (যার নির্বাচনটি উপরে মন্তব্য করা যাবে না):

$ echo '(.-?@AByz01)' | gs -q -dBATCH d.ps
.-?1z0yA@B
$ echo '(.-?@AByz01)' | gs -q -dBATCH d.ps
.-?z1yA0B@
$ echo '(.-?@AByz01)' | gs -q -dBATCH d.ps
.-?1zyA0B@

পিক্সেল গণনা করা হচ্ছে ... পিক্সেল ছেদ হচ্ছে ... টমেটো .... তোমাটো ....
জোনাথন ভ্যান

2

পার্ল (জিডি সহ) (159)

use GD;sub i{$i=new GD'Image 5,8;$B=colorExact$i 9,9,9;colorExact$i 0,0,0;char$i gdTinyFont,0,0,@_,1;$_=unpack"B*",wbmp$i 0;y/0//c}print+sort{i($a)-i($b)}@ARGV

ব্যবহার:

> perl dark.pl 1 2 3 @ # . , : ~ $ M i I s S
.,~:i13Is2S$M@#

সম্পাদনা: 159 অক্ষরে সংক্ষিপ্ত


2

জাভা, 584

বাহ ... এটি করার জন্য এটি ভাল ভাষা ছিল না।

import java.awt.geom.*;import java.util.*;class F{static void n(final String f,List<Character> s){Collections.sort(s,new Comparator<Character>(){public int compare(Character a,Character b){return d(f,""+a) - d(f,""+b);}});}static int d(String f,String s){int i=0;PathIterator p=new java.awt.Font(f,0,12).createGlyphVector(((java.awt.Graphics2D)new java.awt.image.BufferedImage(8,8,2).getGraphics()).getFontRenderContext(),s).getGlyphOutline(0).getPathIterator(AffineTransform.getRotateInstance(0.0, 0.0));while(!p.isDone()){i+=p.currentSegment(new double[99])/2;p.next();}return i;}}

ব্যবহার:

import java.awt.geom.*;
import java.util.*;
public class F {
    public static void main(String[]args){
        List<Character> s = new ArrayList<Character>(0);
        s.add('@');
        s.add('+');
        s.add('.');
        s.add('0');
        n("Calibri", s);
        System.out.println(s);
    }
    static void n(final String f,List<Character> s){
        Collections.sort(s,new Comparator<Character>(){
            public int compare(Character a,Character b){
                return d(f,""+a) - d(f,""+b);
            }
        });
    }

    static int d(String f,String s){
        int i=0;
        PathIterator p=new java.awt.Font(f,0,12).createGlyphVector(((java.awt.Graphics2D)new java.awt.image.BufferedImage(8,8,2).getGraphics()).getFontRenderContext(),s).getGlyphOutline(0).getPathIterator(AffineTransform.getRotateInstance(0.0, 0.0));
        while(!p.isDone()){
            i+=p.currentSegment(new double[99])/2;
            p.next();
        }
        return i;
    }
}

এই সেটআপের ফলাফল:

[., +, 0, @]

এখানে শুধুমাত্র লাইনটির ব্যাখ্যা প্রয়োজন:

PathIterator p=new java.awt.Font(f,0,12).createGlyphVector(((java.awt.Graphics2D)new java.awt.image.BufferedImage(8,8,2).getGraphics()).getFontRenderContext(),s).getGlyphOutline(0).getPathIterator(AffineTransform.getRotateInstance(0.0, 0.0));
  • পাস করা ফন্টের সাথে 12pt ফন্ট অবজেক্টটি আরম্ভ করুন।
  • গ্রাফিকস কনটেক্সট-এর সাথে যুক্ত গ্রাফিক্স 2 ডি অবজেক্ট তৈরি করতে একটি নতুন বাফারডেমেজ প্রবর্তন তৈরি করুন।
  • স্ট্রিংয়ের জন্য 2D গ্রাফিক্স প্রসঙ্গে ফন্টের রেন্ডারিং প্রসঙ্গে পান।
  • স্ট্রিংয়ে প্রথম গ্লাইফ (কেবলমাত্র গ্লিফ) পান।
  • পাথ পুনরাবৃত্তকারী (পয়েন্টগুলির তালিকা) পান।

তারপরে এই চূড়ান্ত টুকরোটি এটিকে একত্রিত করে ...

while(!p.isDone()){
    i+=p.currentSegment(new double[99])/2;
    p.next();
}

সমস্ত পয়েন্টের মাধ্যমে পুনরাবৃত্তি এবং পয়েন্টের সংখ্যার যোগফল By এই ঘনত্বের তথ্যটি তুলনামূলককে ফেরত দেওয়া হয়েছে এবং এটি বাছাইয়ের জন্য ব্যবহৃত হয়।


1

আর, 195 টি অক্ষর

A=strsplit(scan(,""),"")[[1]];cat(A[order(sapply(A,function(x){png('a',a='none',fa='monospace');frame();text(0,0,x);dev.off();sum(apply(png::readPNG('a'),c(1,2),function(x)any(x!=1)))}))],sep="")

মন্তব্যে অভিযুক্ত:

A=strsplit(scan(,""),"")[[1]] #Take characters as strings and split into single chars
cat(A[order(sapply(A,function(x){ #Apply the following function to each char and order accordingly
                 png('a',a='none',fa='monospace'); #Open empty png without antialiasing and with monospace font
                 frame(); #create empty plot
                 text(0,0,x); #add the char as text to the plot
                 dev.off(); #close png device
                 sum(apply(png::readPNG('a'), #read it back as rbga 3d matrix
                           c(1,2), #check every layer (R, G, B, A)
                           function(x)any(x!=1))) #if any are not 1, send TRUE
                 }))], #Sum all TRUEs
    sep="") #Prints to output

উদাহরণ:

> A=strsplit(scan(,""),"")[[1]];cat(A[order(sapply(A,function(x){png('a',a='none',fa='monospace');frame();text(0,0,x);dev.off();sum(apply(png::readPNG('a'),c(1,2),function(x)any(x!=1)))}))],sep="")
1: @+.0
2: 
Read 1 item
.+0@
> A=strsplit(scan(,""),"")[[1]];cat(A[order(sapply(A,function(x){png('a',a='none',fa='monospace');frame();text(0,0,x);dev.off();sum(apply(png::readPNG('a'),c(1,2),function(x)any(x!=1)))}))],sep="")
1: 1234567890
2: 
Read 1 item
1723450689

আর প্লট প্ল্যাটফর্ম নির্ভর নির্ভর ফন্টগুলির বর্ধন, আমি গ্যারান্টি দিতে পারি না যে এটি পিসিতে কাজ করে, তবে এটি একটি ম্যাকের (OS X 10.7.5, আর 2.14.2) এ করে।


1

স্মাইলব্যাসিক, 179 176 173 বাইট

INPUT S$DIM Q$[0],A[0],Z[0]WHILE""<S$C$=POP(S$)GCLS
PUSH Q$,C$
GPUTCHR.,0,C$
GSAVE.,0,8,8,A,0S=0FOR I=0TO 63S=S+A[I]NEXT
PUSH Z,S
WEND
RSORT Z,Q$
WHILE LEN(Q$)?POP(Q$);
WEND

বর্তমানে লোড হওয়া ফন্ট ব্যবহার করে। হরফ দিয়ে লোড করা যায় LOAD"GRPF:filename"

আরও পঠনযোগ্য কোড:

INPUT STRING$
DIM CHARS$[0],PIXELS[0],SIZES[0]
WHILE STRING$>""
 CHAR$=POP(STRING$)
 PUSH CHARS$,CHAR$
 GCLS
 GPUTCHR 0,0,CHAR$
 GSAVE 0,0,8,8,PIXELS
 SIZE=0
 FOR I=0 TO 63
  INC SIZE,PIXELS[I]
 NEXT
 PUSH SIZES,SIZE
WEND
RSORT SIZES,CHARS$
WHILE LEN(CHARS$)
 PRINT POP(CHARS$);
WEND

0

পিএইচপি - 485

ডেমো:

$ php pcg-23362.php "@+.0"
.+0@

কোড:

<?php $f='x.ttf';$d=array();foreach(str_split($argv[1]) as$_){$B=imagettfbbox(50,0,$f,$_);$w=abs($B[4]-$B[0]);$h=abs($B[5]-$B[1]);$im=imagecreate($w,$h);imagecolorallocate($im,255,255,255);imagettftext($im,50,0,0,$h-$B[1],imagecolorallocate($im,0,0,0),$f,$_);$b=$w*$h;for($x=0;$x<$w;$x++)for($y=0;$y<$h;$y++){$z=imagecolorsforindex($im,imagecolorat($im,$x,$y));$color=$z['red']*$z['green']*$z['blue'];$b-=$color/0x1000000;}$d[$_]=$b / ($w * $h);}asort($d);echo implode(array_keys($d));

আরে, আমাকে X.TTF একটি অনুলিপি পাঠাতে ... আমি আছে সবচেয়ে কম ফন্ট OCR করুন উ: ;-D হয়
জনাথন ভ্যান Matre থেকে

0

পাইথন + ফ্রিটাইপ-পাই: 147

import sys,freetype as F;f=F.Face('m.ttf');f.set_char_size(99);print(sorted([(f.load_char(c)or sum(f.glyph.bitmap.buffer),c)for c in raw_input()]))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.