Sắp xếp nhân vật theo bóng tối


38

Chương trình của bạn phải lấy đầu vào là một dòng ký tự, như thế này:

@+.0

Và xuất các ký tự được sắp xếp theo độ tối của chúng, như thế này:

.+0@

Yêu cầu:

  • Bạn phải sử dụng phông chữ đơn cách để phát hiện bóng tối.

  • Bạn phải tìm ra mỗi nhân vật chiếm bao nhiêu pixel. Bạn thực sự phải vẽ ký tự và đếm pixel, tức là bạn không thể chỉ số lượng pixel cứng.

    • Như một quy tắc cụ thể hơn: nếu bạn chuyển đổi phông chữ, chương trình của bạn vẫn hoạt động. Hơn nữa, chương trình của bạn sẽ có thể chuyển đổi phông chữ bằng cách thay đổi một biến hoặc giá trị hoặc chuỗi trong mã.
  • Nếu bạn sử dụng khử răng cưa, bạn phải tính pixel theo tỷ lệ phần trăm của pixel đen hoàn toàn. Ví dụ: một rgb(32, 32, 32)pixel sẽ được tính là 1/8 pixel đầy đủ. Bỏ qua quy tắc này nếu nhân vật của bạn không được khử răng cưa.

  • Sau khi đếm pixel, bạn phải sắp xếp các ký tự theo số lượng pixel và xuất chúng theo thứ tự.

  • Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ giành chiến thắng.


7
Thật kỳ lạ, điều này cũng thích hợp cho RPG.se!
corsiKa

1
Cái gì, không có hiệu chỉnh cho gamma hiển thị trong tính toán bóng tối?
Ilmari Karonen

6
Chúng ta có thể sử dụng một phông chữ màu trắng? Nếu vậy, tôi nghĩ rằng tôi có cái này được bọc lại.
Paul

Câu trả lời:


22

Toán học, 112 110 108 byte

Điều này vẫn có thể được đánh gôn hơn nữa. Giả sử chuỗi là trong biến s.

Và bây giờ sử dụng một cú pháp đúng để sắp xếp một danh sách theo danh sách khác.
Các trường hợp thử nghiệm may mắn -> "Ồ đúng rồi, nó hoạt động" -> Facepalm
Cảm ơn vì đôi mắt sắc bén, David Carraher.

Cập nhật: Đã thay thế OCR A bằng Menlo vì tôi nhận ra rằng trên OSX, OCR Một tên họ phông chữ thực sự là OCR A Std. Vì vậy, tôi đã sắp xếp một phông chữ mặc định thay vì thỏa thuận thực sự. Menlo cũng được đơn cách hóa với cùng số byte, do đó không có lãi hoặc lỗ ròng.

Tôi đã đưa ra một bản xuất CDF được lưu trữ của máy tính xách tay , để bạn có thể thấy mã hoạt động nếu bạn muốn. Tôi vẫn đang tìm cách thêm một số tương tác vào các CDF được lưu trữ trên web, vì vậy bây giờ nó chỉ là tĩnh.

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

Đầu ra cho s = FromCharacterCode /@ Range[33, 135];"Chuyển phát nhanh"

nhập mô tả hình ảnh ở đây

Đầu ra tương tự, nhưng với "Monospace" của FontF Family:

nhập mô tả hình ảnh ở đây

Lưu ý rằng kết quả cuối cùng được hiển thị bằng phông chữ bên trong của MM, không phải trong phông chữ được sắp xếp. Do đó, bạn thấy sự khác biệt trong phông chữ được chọn phản ánh trong sắp xếp. Liên kết CDF hiển thị cả hai, mặc dù, cho người hoàn thành.

Mã bị đánh cắp:

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

1
Kiểm tra đầu vào này:"" <> (FromCharacterCode /@ Range[33, 135])
DavidC

Gia đình mặc định hay không, thông số kỹ thuật yêu cầu "chương trình của bạn sẽ có thể chuyển đổi phông chữ bằng cách thay đổi một biến". Do các giá trị khử răng cưa, có thể có một số loại nhìn sai, nhưng tôi sẽ có cái nhìn khác về phạm vi đầy đủ và xem có gì sai không.
Jonathan Van Matre

1
Thật là một ngôn ngữ tuyệt vời! vừa mới phát hiện ra nỗ lực ngôn ngữ lập trình mới của Wolfram vào một ngày khác, mong chờ điều đó.
the0ther

1
Bạn có thể lưu hai byte bằng cách thay đổi Ký tự [] thành Ký tự @ và Đảo ngược [] thành Đảo ngược @.
Michael Stern

2
Tôi không muốn đăng một câu trả lời tương tự, nhưng tôi đã cố gắng bản thân mình và nó đã đưa ra ngắn hơnStringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
swish

25

Bash + ImageMagick: 164 147 148 ký tự

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

Chạy mẫu:

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

Dấu phân cách được chèn giữa các nhóm màu xám. Các ký tự có mức độ xám giống hệt nhau không được tách rời:

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

+1 để sắp xếp sử dụng các chỉ số mảng bash thay vìsort
Chấn thương kỹ thuật số

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

Tôi đã làm điều này để giải trí, vì vậy về mặt kỹ thuật nó không tuân thủ các quy tắc theo một cách. Nó không lấy danh sách các ký tự, mà thay vào đó in tất cả các ký tự từ 32-255 và sử dụng thay thế. Nếu bạn thực sự muốn xem một phiên bản tuân thủ quy tắc này, xin vui lòng cho tôi biết.

Nó cũng thất bại về mặt kỹ thuật khác: "Hơn nữa, chương trình của bạn sẽ có thể chuyển đổi phông chữ bằng cách thay đổi một biến hoặc giá trị hoặc chuỗi trong mã." Không có cách dễ dàng để làm điều này từ trong QBasic. Tuy nhiên, chương trình tất nhiên sẽ hoạt động tốt với bất kỳ bảng mã nào bạn chọn.

Cuối cùng, tôi có thể loại bỏ một vài ký tự (chủ yếu là khoảng trắng mà QBasic IDE chèn một cách hữu ích), nhưng có lẽ không đáng vì câu trả lời này không có cơ hội chiến thắng.

QBasic sắp xếp các nhân vật theo bóng tối


Thêm một để làm điều đó cho vui!
Jonathan Van Matre

8

Javascript + Canvas và Trình duyệt DOM ( 280 237 235 byte)

Phiên bản cập nhật với các loại đường từ Fors và bàn chải đánh răng trong các bình luận:

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

Phiên bản dễ đọc hơn:

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

Có thể chơi golf nhiều hơn.

Tôi mới đến trang web này, vì vậy tôi không chắc cách thức đầu vào thường được đọc cho câu trả lời Javascript. Tôi giả sử đầu vào được chứa trong một biến có tên s. Nếu điều này không ổn, tôi sẽ cập nhật câu trả lời và số char.

JSFiddle của phiên bản cập nhật.

JSFiddle của phiên bản đầu tiên .


Tôi thực sự thích nó, tuy nhiên có nhiều cải tiến có thể có ở đây. Các biến cskhông cần thiết ( a=document.createElement('canvas').getContext('2d')y+=a.getImageData(0,0,30,30).data[i]), phần tử không cần phải được thêm vào, việc khởi tạo bằng 0 ycó thể được kết hợp với biến i( i=y=0), tăng sau của icó thể được kết hợp với việc thêm y( for(...;y+=...[i++]);) và kiểu chữ Monaco có khoảng cách đơn và có tên ngắn hơn Courier.
Dành cho

Cảm ơn! Tôi chưa phải là một tay golf dày dạn kinh nghiệm, vì vậy ý ​​kiến ​​của bạn giúp ích rất nhiều. Tôi đã kết hợp chúng vào mã bây giờ.
tượng sáp

Câu trả lời Javascript ở đây thường đọc đầu vào thông qua prompt(); nhưng điều này cũng tốt
Kartik

Bạn có thể loại bỏ y=i=0;và thay đổi a.fillText(x,0,20)thành a.fillText(x,y=i=0,20).
Bàn chải đánh răng

Cảm ơn, thêm vào đó là tốt! Hai nhân vật là hai nhân vật!
tượng sáp

3

PHP, 298 ký tự

Tôi đã thêm một vài ngắt dòng để bạn có thể thấy nó trong tất cả sự ghê tởm của nó:

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

Mã này sử dụng các phông chữ GD được tích hợp sẵn với PHP. Đối số thứ hai của việc imagechar()chọn phông chữ (các số từ 1 đến 5 là hợp lệ).

Thí dụ:

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

Nếu bạn chèn đoạn mã lên trên cùng của mã được hiển thị ở trên, thì bạn sẽ có thể cung cấp danh sách các ký tự trong trình duyệt web của mình.

<?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
nếu bạn sử dụng, imagecreatetruecolorbạn có thể bỏ phân bổ đầu tiên và sử dụng tên hàm trực tiếp vào lần thứ hai, cho -11. []thay vì array(). và cũng foreach($a as$v)hoạt động
Einacio

3

GTB

Đây có mã là mã khó thứ hai tôi từng viết cho máy tính. Không có giá trị pixel được mã hóa cứng, nó thực sự vẽ văn bản trên biểu đồ và các vòng lặp để đếm từng pixel.

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

Đầu vào

,O.i

Đầu ra

.,iO

Nếu điều này hoạt động, nó là câu trả lời tốt nhất cho đến nay. GTB là gì?
Slater

@slater Tại sao bạn không nhấp vào liên kết và tìm hiểu?
Timtech

Cảm ơn bạn đã chỉ ra rằng tiêu đề bài viết của bạn thực sự là một liên kết.
Slater

2
Tên miền để có được phần mềm cần thiết để giải mã trình biên dịch của bạn đã chết . Chết ở đây quá. Tôi đã dịch mã bằng tay cho niềm vui của việc thử nghiệm nó, nhưng dường như bạn đã mở 10 parens và chỉ đóng một, vì vậy tôi không chắc làm thế nào để giải quyết điều đó. Trình biên dịch trong đầu tôi nói: "Error :: định danh chưa từng có" :)
Jonathan Van Matre

1
@JonathanVanMatre Đừng lo lắng; TI-84 tự động đóng chúng cho bạn.
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@

Ung dung:

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

Mẹo: tránh sửa đổi công khai hoặc riêng tư càng xa càng tốt; lưu các byte không cần thiết
masterX244

quên tất cả về điều đó
Mark Jeronimus

@MarkJeronimus đây là cách tôi sẽ làm hỏng nó, nhưng tôi muốn thử sử dụng FontRenderingContext.
Bạch tuộc ma thuật Urn

3

Bản tin, 381

Đây là một cái gì đó hoàn toàn khác, chỉ để cho vui. Vì hầu hết các phông chữ là vectơ, 'đếm pixel' là một số lẻ, không phải vậy. Tính diện tích hình dạng glyph, trong khi là cách chính xác, không phải là dễ dàng. Một cách khác có thể là quét một hình chữ nhật và đếm 'lần truy cập' khi một điểm nằm trong hình dạng glyph và Postcript có các toán tử cho loại kiểm tra này. Mặc dù, sự thật, quét và kiểm tra độ trong suốt chỉ là một cách đếm pixel kỳ lạ.

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

Và đây là kết quả cho 3 phông chữ khác nhau (lựa chọn có thể không được bình luận, ở trên):

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

Đếm pixel ... đếm giao điểm pixel ... cà chua .... tomahto ....
Jonathan Van Matre

2

Perl (với 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

sử dụng:

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

chỉnh sửa: rút ngắn xuống còn 159 ký tự


2

Java, 584

Wow ... Đây không phải là một ngôn ngữ tốt để làm điều này.

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

Sử dụng:

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

Thiết lập này dẫn đến:

[., +, 0, @]

Dòng duy nhất ở đây cần giải thích:

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));
  • Khởi tạo đối tượng phông chữ 12pt với phông chữ được truyền.
  • Tạo một obejct BufferedImage mới để tạo một đối tượng Graphics2D được liên kết với GraphicsContext.
  • Lấy bối cảnh kết xuất phông chữ của bối cảnh đồ họa 2D cho chuỗi s.
  • Lấy glyph đầu tiên (chỉ glyph) trong chuỗi.
  • Lấy đường dẫn lặp (danh sách các điểm).

Sau đó, tác phẩm cuối cùng này mang nó lại với nhau ...

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

Bằng cách lặp qua tất cả các điểm và tổng số điểm. Thông tin mật độ này được truyền lại cho bộ so sánh và được sử dụng để sắp xếp.


1

R, 195 ký tự

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

Có ý kiến:

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

Thí dụ:

> 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

Sự tắc nghẽn của các phông chữ trong các ô R phụ thuộc vào nền tảng, tôi không thể đảm bảo rằng nó hoạt động trên PC, nhưng nó hoạt động trên máy Mac (OS X 10.7.5, R 2.14.2).


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

Sử dụng phông chữ hiện đang được tải. Phông chữ có thể được tải với LOAD"GRPF:filename".

Mã dễ đọc hơn:

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

Bản giới thiệu:

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

Mã số:

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

Xin chào, gửi cho tôi một bản sao của X.TTF ... phông chữ ngắn nhất tôi có là 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()]))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.