अंधेरे द्वारा वर्णों को क्रमबद्ध करें


38

आपके कार्यक्रम को इस तरह से वर्णों की एक पंक्ति के रूप में लेना चाहिए:

@+.0

और इस तरह से अंधेरा करके वर्णों को क्रमबद्ध किया जाता है:

.+0@

आवश्यकताएँ:

  • आपको अंधेरे का पता लगाने के लिए एक मोनोसेप्ड फ़ॉन्ट का उपयोग करना चाहिए।

  • आपको पता लगाना चाहिए कि प्रत्येक वर्ण कितने पिक्सेल लेता है। आपको वास्तव में चरित्र को आकर्षित करना चाहिए और पिक्सेल की गिनती करनी चाहिए, अर्थात आप केवल पिक्सेल राशि को हार्डकोड नहीं कर सकते।

    • एक अधिक ठोस नियम के रूप में: यदि आपने फोंट स्विच किया, तो आपका प्रोग्राम अभी भी काम करना चाहिए। इसके अलावा, आपका प्रोग्राम कोड में केवल एक चर या मूल्य या स्ट्रिंग को बदलकर फोंट स्विच करने में सक्षम होना चाहिए।
  • यदि आप एंटीएलियासिंग का उपयोग करते हैं, तो आपको पिक्सेल को पूरी तरह से काले पिक्सेल के प्रतिशत के रूप में गिनना चाहिए। उदाहरण के लिए, एक rgb(32, 32, 32)पिक्सेल पूर्ण पिक्सेल के 1/8 भाग के रूप में गिना जाएगा। इस नियम की अवहेलना करें यदि आपके वर्ण प्रतिशोधी नहीं हैं।

  • पिक्सेल की गणना के बाद, आपको वर्णों को पिक्सेल की मात्रा से सॉर्ट करना होगा, और उन्हें क्रम में आउटपुट करना होगा।

  • यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाएगा।


7
काफी अजीब है, यह RPG.se के लिए भी उपयुक्त है!
corsiKa

1
क्या, अंधेरे गणना में प्रदर्शन गामा के लिए कोई सुधार नहीं?
इल्मरी करोनें

6
क्या हम एक सफेद फ़ॉन्ट का उपयोग कर सकते हैं? यदि हां, तो मुझे लगता है कि मेरे पास यह एक लपेटा हुआ है।
पॉल

जवाबों:


22

गणितज्ञ, 112 110 108 बाइट्स

यह अभी भी आगे गोल्फ होने की संभावना है। मान लें कि स्ट्रिंग वेरिएबल एस में है।

और अब एक सूची को दूसरी सूची द्वारा क्रमबद्ध करने के लिए एक सही वाक्यविन्यास का उपयोग करता है।
लकी परीक्षण के मामले -> "ओह, यह काम करता है" -> तेज आंखों के लिए फेसप्लेम
धन्यवाद, डेविड कैरर।

अपडेट: Menlo के साथ OCR ए को बदला गया क्योंकि मुझे एहसास हुआ कि OSX पर OCR A फ़ॉन्ट परिवार का नाम वास्तव में OCR A Std है। इसलिए मैं असली सौदे के बजाय एक डिफ़ॉल्ट फ़ॉन्ट छाँट रहा था। मेनो भी एक ही बाइट की गिनती के साथ मोनोपोज़ किया जाता है, इसलिए कोई शुद्ध लाभ या हानि नहीं होती है।

मैंने नोटबुक का होस्टेड CDF निर्यात किया है , ताकि आप चाहें तो कोड को कार्रवाई में देख सकें। मुझे अभी भी पता चल रहा है कि वेब-होस्टेड सीडीएफ में कुछ अन्तरक्रियाशीलता कैसे जोड़ी जाए, इसलिए अभी के लिए यह केवल स्थिर है।

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

s = FromCharacterCode /@ Range[33, 135];"कूरियर" के साथ आउटपुट

यहाँ छवि विवरण दर्ज करें

उसी के लिए आउटपुट, लेकिन FontFamily "मोनोस्पेस" के साथ:

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि अंतिम परिणाम एमएम के आंतरिक फ़ॉन्ट में दिखाए गए हैं, न कि फ़ॉन्ट में सॉर्ट किए जा रहे हैं। इसलिए, आप फ़ॉन्ट में अंतर को इस प्रकार परिलक्षित देखते हैं। सीडीएफ लिंक दोनों पूर्णताओं के लिए, हालांकि, दिखाता है।

अघोषित कोड:

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
क्या एक भयानक भाषा है! बस दूसरे दिन वुल्फराम द्वारा नए प्रोग्रामिंग भाषा प्रयास के बारे में पता चला, उसी की प्रतीक्षा कर रहा है।
The0ther

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 @

ग्रेपन समूहों के बीच विभाजक डाला जाता है। समान धूसरता स्तर वाले वर्ण अलग नहीं किए जाते हैं:

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

बजाय बैश सरणी सूचकांक का उपयोग कर छँटाई के लिए +1sort
डिजिटल ट्रामा

9

QBasic, 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 से प्रिंट करता है और इसके बजाय इसका उपयोग करता है। यदि आप वास्तव में एक संस्करण देखना चाहते हैं जो इस नियम का अनुपालन करता है, तो कृपया मुझे बताएं।

यह एक और तकनीकीता को भी विफल करता है: "इसके अलावा, आपका प्रोग्राम कोड में केवल एक चर या मूल्य या स्ट्रिंग को बदलकर फोंट स्विच करने में सक्षम होना चाहिए।" QBasic के भीतर से ऐसा करने का कोई आसान तरीका नहीं है। हालाँकि, प्रोग्राम आपके चुनने के किसी भी कोडपेज के साथ ठीक काम करेगा।

अंत में, मैं कुछ अक्षर (ज्यादातर व्हाट्सएप जो QBasic IDE सहायक रूप से सम्मिलित करता है) को निचोड़ सकता है, लेकिन यह शायद इस लायक नहीं है क्योंकि यह उत्तर वैसे भी जीतने का कोई मौका नहीं देता है।

QBasic अंधेरे द्वारा वर्णों को क्रमबद्ध करें


प्लस एक यह मनोरंजन के लिए करने के लिए!
जोनाथन वान मैट्रे

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। यदि यह ठीक नहीं है, तो मैं उत्तर और चार गिनती अपडेट करूंगा।

अद्यतन संस्करण की JSFiddle।

पहले संस्करण का JSFiddle


मैं वास्तव में इसे पसंद करता हूं, हालांकि यहां कई संभावित सुधार हैं। चर cऔर sअनावश्यक हैं ( a=document.createElement('canvas').getContext('2d')और y+=a.getImageData(0,0,30,30).data[i]), तत्व को संलग्न करने की आवश्यकता नहीं है, के शून्य आरंभीकरण को yउस i( i=y=0) के साथ जोड़ा जा सकता है , के बाद के वेतन वृद्धि iको y( for(...;y+=...[i++]);) और टाइपफेस के साथ जोड़ा जा सकता है मोनाको मोनो-स्पेस है और इसका कोरियर से छोटा नाम है।
फोर्स

धन्यवाद! मैं अभी तक अनुभवी गोल्फर नहीं हूं, इसलिए आपकी टिप्पणियां बहुत मदद करती हैं। मैंने उन्हें अब कोड में शामिल कर लिया है।
वैक्सिंग

जावास्क्रिप्ट उत्तर यहां सामान्य रूप से इनपुट पढ़ते हैं prompt(); लेकिन यह भी ठीक है।
कार्तिक

आप निकाल सकते हैं y=i=0;और परिवर्तन a.fillText(x,0,20)करने के लिए a.fillText(x,y=i=0,20)
टूथब्रश

धन्यवाद, कहा कि साथ ही! दो वर्ण दो वर्ण हैं!
वैक्सिंग

3

PHP, 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);

यह कोड GD फोंट का उपयोग करता है जो PHP के साथ अंतर्निहित होते हैं। 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करते हैं, तो आप पहले आवंटित को छोड़ सकते हैं और दूसरे, for -11 पर सीधे फ़ंक्शन नाम का उपयोग कर सकते हैं। []के बजाय array()। और foreach($a as$v)साथ ही काम करता है
Einacio

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
@JonathanVanMatre चिंता मत करो; TI-84 स्वचालित रूप से आपके लिए उन्हें बंद कर देता है।
टिमटेक

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);
}

युक्ति: जहां तक ​​संभव हो सार्वजनिक या निजी संशोधक से बचें; अनावश्यक बाइट्स बचाता है
मास्टर 8244

उस बारे में सब कुछ भूल गए
मार्क जेरोनिमस

@MarkJeronimus यह तरीका था कि मैं इसे ओटलेकल नहीं कर रहा था, लेकिन मैं FontRenderingContext का उपयोग करना चाहता था।
मैजिक ऑक्टोपस Urn

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 फ़ॉन्ट ऑब्जेक्ट को प्रारंभ करें।
  • GraphicsContext से जुड़े Graphics2D ऑब्जेक्ट को बनाने के लिए एक नया बफ़रमैडम ऑब्जेक्ट बनाएं।
  • स्ट्रिंग s के लिए 2D ग्राफिक्स संदर्भ का फ़ॉन्ट रेंडरिंग संदर्भ प्राप्त करें।
  • स्ट्रिंग में पहला ग्लिफ़ (केवल ग्लिफ़) प्राप्त करें।
  • पाथ इटरेटर (अंकों की सूची) प्राप्त करें।

फिर यह अंतिम टुकड़ा इसे एक साथ लाता है ...

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

सभी बिंदुओं के माध्यम से पुनरावृति और अंकों की गणना। इस घनत्व की जानकारी को तुलनित्र तक वापस भेज दिया जाता है और छँटाई के लिए उपयोग किया जाता है।


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

R प्लॉट्स में फोंट का इशारा प्लेटफॉर्म पर निर्भर होने के कारण, मैं यह गारंटी नहीं दे सकता कि यह पीसी पर काम करता है, लेकिन यह मैक (OS X 10.7.5, R 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

PHP - 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 A. है; --D
जोनाथन वान मैटर

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()]))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.