Karakterleri karanlığa göre sırala


38

Programınız şöyle bir karakter satırı almalıdır, şunun gibi:

@+.0

Ve ne kadar karanlık olduğuna göre sıralanan karakterleri çıktılar, şöyle:

.+0@

Gereksinimler:

  • Karanlığın tespiti için monospaced font kullanmanız gerekir.

  • Her karakterin kaç piksel alanını bulmanız gerekir. Aslında karakteri çizmeli ve pikselleri saymalısınız, yani yalnızca piksel miktarlarını sabitleyemezsiniz.

    • Daha somut bir kural olarak: yazı tipini değiştirdiyseniz, programınız hala çalışmalıdır. Ayrıca, programınız koddaki bir değişkeni veya değeri veya dizeyi değiştirerek fontları değiştirebilmelidir.
  • Antialiasing kullanıyorsanız, pikselleri tamamen siyah bir pikselin yüzdesi olarak saymanız gerekir. Örneğin, bir rgb(32, 32, 32)piksel, tam bir pikselin 1 / 8'i olarak sayılır. Karakterleriniz antialiased değilse bu kuralı dikkate almayın.

  • Pikselleri saydıktan sonra, karakterleri piksel miktarına göre sıralamanız ve sırayla bunları çıkarmanız gerekir.

  • Bu , yani bayt cinsinden en kısa kod kazanacak.


7
Garip bir şekilde, bu RPG.se için de uygun!
corsiKa

1
Karanlıkta hesaplamada ekran gaması için düzeltme yok mu?
Ilmari Karonen

6
Beyaz bir yazı tipi kullanabilir miyiz? Eğer öyleyse, sanırım bunu tamamladım.
Paul

Yanıtlar:


22

Mathematica, 112 110 108 bayt

Bu hala daha fazla golf oynayabilir. Dize s değişkeninde olduğunu varsayar.

Ve şimdi bir listeyi başka bir listeye göre sıralamak için doğru bir sözdizimi kullanıyor.
Şanslı test durumları -> "Ah evet, işe yarıyor" -> Facepalm
Keskin gözler için teşekkürler David Carraher.

Güncelleme: OCR A'yı Menlo ile değiştirdim çünkü OSX'de OCR A font ailesi isminin aslında OCR A Std olduğunu anladım. Bu yüzden gerçek anlaşma yerine varsayılan bir yazı tipi sıralıyordum. Menlo, aynı byte sayımı ile monospaced edilir, bu nedenle net kazanç veya kayıp yoktur.

Dizüstü bilgisayarın barındırılan bir CDF dışa aktarmasını hazırladım , böylece isterseniz kodu çalışırken görebilirsiniz. Hala web'de barındırılan CDF'lere nasıl etkileşimler ekleyeceğime karar veriyorum, bu yüzden şimdilik sadece statik.

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

s = FromCharacterCode /@ Range[33, 135];"Courier" ile çıktı

görüntü tanımını buraya girin

Aynı çıktı, ancak FontFamily "Monospace" ile:

görüntü tanımını buraya girin

Son sonuçların, sıralanan fontta değil, MM'nin dahili fontunda gösterildiğini unutmayın. Bu nedenle, seçilen yazı tipinde, sıralamada yansıtılan farklılıkları görürsünüz. CDF bağlantısı tamamlayıcılar için her ikisini de gösterir.

Ungolfed kod:

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

1
Bu girdiyi inceleyin:"" <> (FromCharacterCode /@ Range[33, 135])
DavidC

Varsayılan aile ya da değil, "programınız yalnızca bir değişkeni değiştirerek yazı tiplerini değiştirebilmelidir" şartı aranıyordu. Kenar yumuşatma değerleri nedeniyle, hatalı görünen bazı türler elde etmek mümkündür, ancak tüm aralığa başka bir göz atacağım ve yanlış bir şey olup olmadığına bakacağım.
Jonathan Van Matre

1
Ne muhteşem bir dil! Wolfram'ın yeni programlama dili çabasını geçen gün öğrendim.
the0ther

1
Karakterleri [], Karakterler @ ve Geri [] değiştirerek @ @ değiştirerek iki bayttan tasarruf edebilirsiniz.
Michael Stern

2
Ben de benzer bir yanıt sonrası istemiyorum ama kendimi denedim ve kısa geldiStringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
homoseksüel

25

Bash + ImageMagick: 164 147 148 karakter

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[@]}"

Örnek çalışma:

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

Ayırıcılar, grilik grupları arasına yerleştirilir. Aynı gri tonlama seviyesine sahip karakterler ayrılmaz:

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

Bash dizi indekslerini kullanarak sıralama yapmak için +1sort
Digital Trauma

9

QBasic, 259 bayt

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

Bunu eğlenmek için yaptım, bu yüzden teknik olarak bir şekilde kurallara uygun değil. Bir karakter listesi almaz, bunun yerine 32-255 arasındaki tüm karakterleri yazdırır ve onu kullanır. Bu kurala uyan bir sürümü gerçekten görmek istiyorsanız, lütfen bana bildirin.

Ayrıca, başka bir teknikte de başarısız olur: "Ayrıca, programınız koddaki bir değişkeni veya değeri veya dizeyi değiştirerek fontları değiştirebilmelidir." Bunu QBasic içinden yapmanın kolay bir yolu yoktur. Ancak, program elbette seçtiğiniz herhangi bir kod sayfası ile iyi çalışacaktır.

Son olarak, birkaç karakteri sıkıştırabilirim (çoğunlukla QBasic IDE'nin yararlı bir şekilde yerleştirdiği boşluk), ancak bu cevabın kazanma şansı olmadığından muhtemelen buna değmez.

QBasic karakterleri karanlığa göre sıralama


Artı bir eğlence için yaptığınız için!
Jonathan Van Matre

8

Javascript + Tuval ve Tarayıcı DOM ( 280 237 235 bayt)

Yorumlarda Fors ve diş fırçası gelen öneri ile güncellenmiş sürümü:

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(''))

Daha okunabilir sürüm:

// 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(''))

Belki daha çok golf oynayabilirsin.

Bu sitede yeniyim, bu yüzden girişin Javascript cevapları için normalde nasıl okunacağından emin değilim. Girişin adında bir değişkende olduğunu varsayıyorum s. Bu doğru değilse, cevabı ve karakter sayısını güncelleyeceğim.

Güncelleştirilmiş sürümün JSFiddle'ı.

JSFiddle ilk versiyonunun .


Gerçekten beğendim, ancak burada birçok olası gelişme var. Değişkenler cve sgereksiz olan ( a=document.createElement('canvas').getContext('2d')ve y+=a.getImageData(0,0,30,30).data[i], eleman eklenir gerek yoktur), sıfır başlatılması yile kombine edilebilir i( i=y=0), artırma sonrası ieklenmesi ile kombine edilebilir y( for(...;y+=...[i++]);), ve yazı tipi Monaco mono aralıklı ve Courier'den daha kısa bir isme sahip.
Fors

Teşekkürler! Henüz tecrübeli bir golfçü değilim, bu yüzden yorumlarınız çok yardımcı olur. Onları şimdi kodun içine dahil ettim.
ağustos

Javascript cevapları burada normal olarak okunan girişi prompt(); ama bu da iyi.
Kartik

Sen kaldırabilir y=i=0;ve değiştirmek a.fillText(x,0,20)için a.fillText(x,y=i=0,20).
Diş fırçası

Teşekkürler, bunu da ekledik! İki karakter iki karakterdir!
balmumu 13'14

3

PHP, 298 karakter

Birkaç satır sonu ekledim, böylece tüm çirkinliğini görebiliyorsun:

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

Bu kod PHP ile yerleşik olarak gelen GD yazı tiplerini kullanır. İkinci argüman imagechar()fontu seçer (1'den 5'e kadar olan rakamlar geçerlidir).

Örnek:

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

Aşağıdakini yukarıda gösterilen kodun üstüne eklerseniz, web tarayıcınızda karakter listesini sağlayabilirsiniz.

<?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
kullanırsanız imagecreatetruecolorilk tahsisi bırakabilir ve işlev ismini doğrudan ikinci tuşa, -11 için kullanabilirsiniz. []yerine array(). ve foreach($a as$v)aynı zamanda çalışır
Einacio

3

GTB

Bu hesap makinesi için şimdiye kadar yazdığım en zor ikinci kod olacak kod var. Kodlanmış piksel değeri yok, aslında metni grafik üzerine çizer ve her pikseli saymak için döngüler.

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

Giriş

,O.i

Çıktı

.,iO

Bu işe yararsa, şu ana kadarki en iyi cevap. GTB nedir?
Slater

@slater Neden linke tıklayıp öğrenmiyorsunuz?
Timtech

Gönderi başlığınızın gerçekten bir bağlantı olduğunu belirttiğiniz için teşekkür ederiz.
Slater

2
Derleyicinizin şifresini çözmek için gereken yazılımı almak için etki alanı öldü . Burada da ölü . Test etme eğlencesi için kodu elle çevirdim, ancak 10 tane paren açmış ve sadece birini kapatmış gibi görünüyorsunuz, bu yüzden bunu nasıl çözeceğimden emin değilim. Kafamdaki derleyici şöyle der: "Hata :: Eşsiz tanımlayıcı" :)
Jonathan Van Matre

1
@JonathanVanMatre Endişelenme; TI-84 sizin için otomatik olarak kapatır.
Timtech

3

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

İpucu: mümkün olduğunca genel veya özel değiştiricileri kullanmaktan kaçının; Bu gereksiz bayt kaydeder
masterX244

tüm bunları unuttum
Mark Jeronimus

@MarkJeronimus bu benim üstesinden geldiğim yoldu, ancak FontRenderingContext'i kullanmayı denemek istedim.
Magic Octopus Urn

3

Postscript, 381

İşte eğlence için tamamen farklı bir şey. Yazı tiplerinin çoğu zaten vektör olduğu için, 'piksel sayma' biraz tuhaf değil mi? Glif şekli alanını hesaplamak, doğru yol olsa da, kolay değildir. Bir alternatif, bir dikdörtgeni taramak ve bir nokta bir glif şekli içindeyken 'isabetleri' saymak olabilir ve Postscript bu tür kontroller için operatörlere sahiptir. Her ne kadar doğru olsa da, tarama ve anlamsızlık testi pikselleri saymanın tuhaf bir yoludur.

(%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
()=

Ve işte 3 farklı yazı tipi için sonuçlar (bunların seçimi yorumlanamaz, yukarıda):

$ 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@

Piksel sayma ... piksel kesişme sayımı ... domates .... tomahto ....
Jonathan Van Matre

2

Perl (GD ile birlikte) (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

kullanımı:

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

düzenleme: kısaltılmış 159 karakter


2

Java, 584

Vay ... Bu bunu yapmak için iyi bir dil değildi.

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

Kullanımı:

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

Bu kurulum şununla sonuçlanır:

[., +, 0, @]

Burada açıklama gerektiren tek hat:

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 font nesnesini geçirilen fontla başlat.
  • Bir GraphicsContext öğesine bağlı bir Graphics2D nesnesi oluşturmak için yeni bir BufferedImage obejct oluşturun.
  • S dizesi için 2D grafik bağlamının font oluşturma içeriğini alın.
  • Dizedeki ilk glifi (sadece glif) alın.
  • Yol yineleyicisini al (noktaların listesi).

Sonra bu son parça bir araya getiriyor ...

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

Tüm noktaları yineleyerek ve puan sayısını toplayarak. Bu yoğunluk bilgisi tekrar karşılaştırıcıya iletilir ve sıralama için kullanılır.


1

R, 195 karakter

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="")

Yorumlarla girintili:

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

Örnek:

> 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 grafiklerindeki fontların platformu platforma bağımlı olduğunu, PC'de çalıştığını garanti edemiyorum, ancak Mac'te yapıyor (OS X 10.7.5, R 2.14.2).


1

SmileBASIC, 179 176 173 bayt

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

Şu anda yüklü yazı tipini kullanır. Yazı tipleri ile yüklenebilir LOAD"GRPF:filename".

Daha okunabilir kod:

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

Demo:

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

Kod:

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

Hey, bana X.TTF bir kopyasını göndermek ... Ben var en kısa yazı OCR A. ;-D olduğunu
Jonathan Van Matre

0

Python + freetype-py: 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()]))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.