Urutkan karakter berdasarkan kegelapan

38

Program Anda harus mengambil input karakter, seperti ini:

@+.0

Dan menampilkan karakter yang diurutkan berdasarkan seberapa gelap mereka, seperti ini:

.+0@

Persyaratan:

  • Anda harus menggunakan font monospace untuk deteksi kegelapan.

  • Anda harus mencari tahu berapa banyak piksel yang diambil setiap karakter. Anda benar-benar harus menggambar karakter dan menghitung piksel, yaitu Anda tidak bisa hanya jumlah piksel hardcode.

    • Sebagai aturan yang lebih konkret: jika Anda mengganti font, program Anda tetap bekerja. Selain itu, program Anda harus dapat beralih font hanya dengan mengubah variabel atau nilai atau string dalam kode.
  • Jika Anda menggunakan antialiasing, Anda harus menghitung piksel sebagai persentase dari piksel hitam penuh. Misalnya, sebuah rgb(32, 32, 32)piksel akan dihitung 1/8 dari satu piksel penuh. Abaikan aturan ini jika karakter Anda tidak terhubung.

  • Setelah menghitung piksel, Anda harus mengurutkan karakter berdasarkan jumlah piksel, dan menampilkannya secara berurutan.

  • Ini adalah , jadi kode terpendek dalam byte akan menang.

Gagang pintu
sumber
7
Anehnya, ini juga cocok untuk RPG.se!
corsiKa
1
Apa, tidak ada koreksi untuk tampilan gamma dalam perhitungan kegelapan?
Ilmari Karonen
6
Bisakah kita menggunakan font putih? Jika demikian, saya pikir saya sudah membungkus ini.
Paul

Jawaban:

22

Mathematica, 112 110 108 byte

Ini kemungkinan masih bisa di-golf lebih lanjut. Mengasumsikan string dalam variabel s.

Dan sekarang menggunakan sintaks yang benar untuk mengurutkan satu daftar dengan daftar lain.
Kasing uji keberuntungan -> "Oh yeah, itu berhasil" -> Facepalm
Terima kasih untuk mata yang tajam, David Carraher.

Memperbarui: Mengganti OCR A dengan Menlo karena saya menyadari bahwa pada OSX nama font OCR A sebenarnya OCR A Std. Jadi saya menyortir font default, bukan real deal. Menlo juga monospace dengan jumlah byte yang sama, sehingga tidak ada laba atau rugi bersih.

Saya telah memasang ekspor CDF yang di-host notebook , sehingga Anda dapat melihat kode dalam tindakan jika Anda mau. Saya masih mencari cara bagaimana menambahkan beberapa interaktivitas ke CDF yang di-host di web, jadi untuk sekarang ini hanya statis.

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

Output untuk s = FromCharacterCode /@ Range[33, 135];dengan "Kurir"

masukkan deskripsi gambar di sini

Output untuk yang sama, tetapi dengan FontFamily "Monospace":

masukkan deskripsi gambar di sini

Perhatikan bahwa hasil akhir ditampilkan dalam font internal MM, bukan font yang sedang disortir. Karenanya, Anda melihat perbedaan dalam font yang dipilih tercermin dalam pengurutan. Namun, tautan CDF menunjukkan keduanya untuk yang melengkapi.

Kode tidak dikunci:

s = FromCharacterCode /@ Range[33, 135];
c = Characters@s;
Last /@ Sort[
    Transpose@{Total[1 - # & /@ 
        ImageData@Rasterize@Style[#, FontFamily -> "Menlo"], 3] & /@ c, c}]
Jonathan Van Matre
sumber
1
Periksa input ini:"" <> (FromCharacterCode /@ Range[33, 135])
DavidC
Keluarga default atau tidak, spesifikasi yang diperlukan "program Anda harus dapat beralih font hanya dengan mengubah variabel". Karena nilai-nilai anti-aliasing, dimungkinkan untuk mendapatkan beberapa jenis yang terlihat salah, tetapi saya akan melihat lagi pada kisaran penuh dan melihat apakah ada yang salah.
Jonathan Van Matre
1
bahasa yang luar biasa! baru tahu tentang upaya bahasa pemrograman baru oleh Wolfram tempo hari, menantikan itu.
the0ther
1
Anda dapat menyimpan dua byte dengan mengubah Karakter [] ke Karakter @ dan Membalikkan [] ke Membalikkan @.
Michael Stern
2
Saya tidak ingin memposting jawaban yang serupa, tetapi saya mencoba sendiri dan hasilnya lebih pendekStringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
desak
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[@]}"

Contoh dijalankan:

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

Pemisah dimasukkan di antara kelompok abu-abu. Karakter dengan tingkat abu-abu identik tidak terpisahkan:

bash-4.1$ echo -n 'abcdefghijklmnopqrstuvwxyz' | bash graysort.sh
i cl jortz esv ax u df bgnpq y hk w m
manatwork
sumber
+1 untuk menyortir menggunakan indeks bash array bukansort
Digital Trauma
9

QBasic, 259 byte

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

Saya melakukan ini untuk bersenang-senang, jadi secara teknis tidak sesuai dengan aturan dalam satu cara. Tidak mengambil daftar karakter, tetapi mencetak semua karakter dari 32-255 dan menggunakannya. Jika Anda benar-benar ingin melihat versi yang sesuai dengan aturan ini, tolong beri tahu saya.

Itu juga gagal teknis lainnya: "Selanjutnya, program Anda harus dapat beralih font dengan hanya mengubah variabel atau nilai atau string dalam kode." Tidak ada cara mudah untuk melakukan ini dari dalam QBasic. Namun, program ini tentu saja akan berfungsi dengan baik dengan codepage apa pun yang Anda pilih.

Terakhir, saya bisa memeras beberapa karakter (kebanyakan spasi putih yang disisipi oleh QBasic IDE,) tapi itu mungkin tidak sepadan karena jawaban ini tidak memiliki peluang untuk menang.

QBasic menyortir karakter berdasarkan kegelapan

nitro2k01
sumber
Plus satu untuk melakukannya demi kesenangan!
Jonathan Van Matre
8

Javascript + Kanvas dan Browser DOM ( 280 237 235 byte)

Versi terbaru dengan suggetions dari Fors dan sikat gigi di komentar:

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

Versi yang lebih mudah dibaca:

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

Mungkin bisa bermain golf lebih banyak.

Saya baru di situs ini, jadi saya tidak yakin bagaimana input biasanya dibaca untuk jawaban Javascript. Saya berasumsi input terkandung dalam variabel bernamas . Jika ini tidak apa-apa, saya akan memperbarui jawaban dan jumlah char.

JSFiddle dari versi yang diperbarui.

JSFiddle versi pertama .

waxwing
sumber
Saya sangat menyukainya, namun ada banyak kemungkinan peningkatan di sini. Variabel cdan stidak perlu ( a=document.createElement('canvas').getContext('2d')dan y+=a.getImageData(0,0,30,30).data[i]), elemen tidak perlu ditambahkan, nol inisialisasi dari ydapat dikombinasikan dengan i( i=y=0), penambahan selisih dari idapat dikombinasikan dengan penambahan y( for(...;y+=...[i++]);), dan jenis huruf Monako memiliki jarak satu dan memiliki nama yang lebih pendek dari Kurir.
Fors
Terima kasih! Saya belum menjadi pegolf berpengalaman, jadi komentar Anda sangat membantu. Saya telah memasukkan mereka ke dalam kode sekarang.
waxwing
Jawaban Javascript di sini biasanya membaca input melalui prompt(); tapi ini juga baik.
Kartik
Anda dapat menghapus y=i=0;dan mengubah a.fillText(x,0,20)ke a.fillText(x,y=i=0,20).
Sikat gigi
Terima kasih, menambahkan itu juga! Dua karakter adalah dua karakter!
waxwing
3

PHP, 298 karakter

Saya telah menambahkan beberapa jeda baris sehingga Anda dapat melihatnya dalam semua keburukannya:

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

Kode ini menggunakan font GD yang disertakan dengan PHP. Argumen kedua imagechar()memilih font (angka dari 1 hingga 5 valid).

Contoh:

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

Jika Anda memasukkan yang berikut di atas kode yang ditunjukkan di atas, maka Anda akan dapat menyediakan daftar karakter di browser web Anda.

<?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();
?>
lubang keras melengking
sumber
1
jika Anda menggunakan, imagecreatetruecolorAnda bisa menjatuhkan alokasi pertama dan menggunakan nama fungsi langsung pada yang kedua, untuk -11. []bukannya array(). dan foreach($a as$v)bekerja juga
Einacio
3

GTB

Ini memiliki kode untuk menjadi kode tersulit kedua yang pernah saya tulis untuk kalkulator. Tidak ada nilai piksel yang dikodekan dengan keras, ia menggambar teks pada grafik dan menghitung untuk menghitung setiap piksel.

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

Memasukkan

,O.i

Keluaran

.,iO
Timtech
sumber
Jika ini berhasil, itu adalah jawaban terbaik sejauh ini. Apa itu GTB?
Slater
@slater Mengapa Anda tidak mengklik tautan dan mencari tahu?
Timtech
Terima kasih telah menunjukkan bahwa judul posting Anda memang sebuah tautan.
slater
2
Domain untuk mendapatkan perangkat lunak yang diperlukan untuk mendekripsi kompiler Anda sudah mati . Mati di sini juga. Saya menerjemahkan kode dengan tangan untuk bersenang-senang mengujinya, tetapi Anda tampaknya telah membuka 10 parens dan hanya menutup satu, jadi saya tidak yakin bagaimana menyelesaikannya. Kompiler di kepalaku berkata: "Kesalahan :: pengidentifikasi tidak tertandingi" :)
Jonathan Van Matre
1
@JonathanVanMatre Jangan khawatir; TI-84 secara otomatis menutupnya untuk Anda.
Timtech
3

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

Tidak Disatukan:

    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);
}
Mark Jeronimus
sumber
Kiat: hindari pengubah publik atau pribadi sejauh mungkin; yang menyimpan byte yang tidak perlu
masterX244
lupa semua tentang itu
Mark Jeronimus
@ MarkJeronimus ini adalah cara saya akan mengatasinya, tapi saya ingin mencoba menggunakan FontRenderingContext.
Magic Octopus Mm
3

Catatan tambahan, 381

Ini sesuatu yang sangat berbeda, hanya untuk bersenang-senang. Karena sebagian besar font adalah vektor, 'menghitung piksel' sedikit aneh, bukan. Menghitung area bentuk mesin terbang, meskipun dengan cara yang benar, tidak mudah. Alternatif dapat memindai persegi panjang dan menghitung 'hit' ketika suatu titik berada di dalam bentuk mesin terbang, dan Postscript memiliki operator untuk pemeriksaan semacam ini. Padahal, benar, pemindaian dan pengujian-pengujian hanyalah cara aneh menghitung piksel.

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

Dan berikut ini adalah hasil untuk 3 font berbeda (pilihannya dapat di-komentar, di atas):

$ 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@
pengguna2846289
sumber
Menghitung piksel ... menghitung persimpangan piksel ... tomat .... tomahto ....
Jonathan Van Matre
2

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

pemakaian:

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

sunting: disingkat menjadi 159 karakter

perl Cina goth
sumber
2

Java, 584

Wow ... Ini bukan bahasa yang baik untuk melakukan ini.

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

Pemakaian:

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

Pengaturan ini menghasilkan:

[., +, 0, @]

Satu-satunya baris di sini yang perlu penjelasan:

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));
  • Inisialisasi objek font 12pt dengan font yang diteruskan.
  • Buat objek BufferedImage baru untuk membuat objek Graphics2D yang ditautkan ke GraphicsContext.
  • Dapatkan konteks rendering font dari konteks grafik 2D untuk string s.
  • Dapatkan mesin terbang pertama (hanya mesin terbang) dalam string.
  • Dapatkan iterator jalur (daftar poin).

Kemudian bagian terakhir ini menyatukannya ...

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

Dengan mengulangi semua poin dan menjumlahkan jumlah poin. Informasi kepadatan ini diteruskan kembali ke pembanding dan digunakan untuk menyortir.

Guci Gurita Ajaib
sumber
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="")

Diindentasikan dengan komentar:

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

Contoh:

> 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

Kehadiran font dalam plot R menjadi tergantung pada platform, saya tidak dapat menjamin bahwa itu bekerja pada PC, tetapi itu pada Mac (OS X 10.7.5, R 2.14.2).

plannapus
sumber
1

SmileBASIC, 179 176 173 byte

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

Menggunakan font yang saat ini dimuat. Font dapat dimuat dengan LOAD"GRPF:filename".

Kode lebih mudah dibaca:

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
12Me21
sumber
0

PHP - 485

Demo:

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

Kode:

<?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));
TimWolla
sumber
Hei, kirimi saya salinan X.TTF ... font terpendek yang saya miliki adalah OCR A. ;-D
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()]))
Mathieu Rodic
sumber