어둠을 기준으로 문자 정렬


38

프로그램은 다음과 같이 한 줄의 문자를 입력으로 가져와야합니다.

@+.0

그리고 다음과 같이 어둡게 정렬 된 문자를 출력하십시오.

.+0@

요구 사항 :

  • 어둠을 감지하려면 고정 폭 글꼴을 사용해야합니다.

  • 각 문자가 차지하는 픽셀 수를 알아야합니다. 실제로 캐릭터를 그리고 픽셀 수를 세어야합니다. 즉, 픽셀 양을 하드 코딩 할 수 없습니다.

    • 보다 구체적인 규칙 : 글꼴을 전환 한 경우에도 프로그램이 계속 작동합니다. 또한 프로그램은 단순히 코드에서 변수 또는 값 또는 문자열을 변경하여 글꼴을 전환 할 수 있어야합니다.
  • 앤티 앨리어싱을 사용하는 경우 픽셀을 완전 검정 픽셀의 백분율로 계산해야합니다. 예를 들어, rgb(32, 32, 32)픽셀은 전체 픽셀의 1/8로 계산됩니다. 캐릭터가 앤티 앨리어싱되지 않은 경우이 규칙을 무시하십시오.

  • 픽셀 수를 세면 픽셀 수로 문자를 정렬하고 순서대로 출력해야합니다.

  • 이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.


7
이상하게도 RPG.se에도 적합합니다!
corsiKa

1
어두움 계산에서 디스플레이 감마에 대한 보정이 없습니까?
Ilmari Karonen

6
흰색 글꼴을 사용할 수 있습니까? 그렇다면, 나는 이것을 싸서 생각합니다.
Paul

답변:


22

매쓰, 112 (110) 108 바이트

이것은 여전히 ​​더 골프 될 수 있습니다. 문자열이 변수 s에 있다고 가정합니다.

이제 올바른 구문을 사용하여 한 목록을 다른 목록으로 정렬합니다.
행운의 테스트 케이스 -> "오, 그래, 그 작품"-> 마른 세수
날카로운 눈, 데이비드 Carraher 주셔서 감사합니다.

업데이트 : OSX에서 OCR A 글꼴 패밀리 이름이 실제로 OCR A Std라는 것을 깨달았 기 때문에 OCR A를 Menlo로 대체했습니다. 그래서 실제 거래 대신 기본 글꼴을 정렬했습니다. Menlo는 또한 동일한 바이트 수로 고정 폭을 차지하므로 순 이득이나 손실이 없습니다.

노트북호스팅 CDF 내보내기를 작성 했으므로 원하는 경우 코드가 실제로 작동하는 것을 볼 수 있습니다. 웹 호스팅 CDF에 대화 형 기능을 추가하는 방법을 여전히 파악하고 있으므로 지금은 정적입니다.

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

s = FromCharacterCode /@ Range[33, 135];"Courier"로 출력

여기에 이미지 설명을 입력하십시오

동일하지만 FontFamily "Monospace"를 사용한 출력 :

여기에 이미지 설명을 입력하십시오

최종 결과는 정렬되는 글꼴이 아니라 MM의 내부 글꼴로 표시됩니다. 따라서 선택한 글꼴의 차이가 정렬에 반영됩니다. 그러나 CDF 링크는 completists에 대한 두 가지를 모두 보여줍니다.

Ungolfed 코드 :

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])
DavidC

기본 패밀리 여부에 관계없이 "프로그램은 단순히 변수를 변경하여 글꼴을 전환 할 수 있어야합니다." 앤티 앨리어싱 값으로 인해 잘못된 것으로 보이는 정렬을 얻을 수 있지만 전체 범위를 다시 살펴보고 잘못된 것이 있는지 확인합니다.
Jonathan Van Matre

1
정말 훌륭한 언어입니다! 요즘 Wolfram의 새로운 프로그래밍 언어 노력에 대해 알게되었습니다.
the0ther

1
Characters []를 Characters @로, Reverse []를 Reverse @로 변경하여 2 바이트를 절약 할 수 있습니다.
Michael Stern

2
나는 비슷한 대답을 게시하고 싶지 않아,하지만 난 자신을 시도하고 짧은 와서StringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]

25

배쉬 + ImageMagick이 : 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

bash 배열 인덱스 대신 정렬을 위해 +1sort
Digital Trauma

9

Q 기본, 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가 삽입하는 공백)를 짜낼 수는 있었지만,이 답변이 어쨌든 이길 가능성이 없기 때문에 그만한 가치가 없을 것입니다.

Q 어둠에 따른 기본 정렬 문자


재미를 위해 하나 더하기!
Jonathan Van Matre

8

자바 스크립트 + 캔버스와 브라우저 DOM ( 280 237 235 바이트)

의견에 Fors와 칫솔의 제안으로 업데이트 된 버전 :

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

더 골프를 칠 수 있습니다.

이 사이트를 처음 사용하므로 Javascript 답변에 대한 입력을 일반적으로 읽는 방법을 잘 모르겠습니다. 입력이라는 변수에 포함되어 있다고 가정합니다 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++]);), 및 서체 모나코는 고정 간격이며 Courier보다 이름이 짧습니다.
Fors

감사! 나는 아직 노련한 골퍼가 아니므로 귀하의 의견은 많은 도움이됩니다. 나는 지금 그것들을 코드에 포함시켰다.
waxwing

여기에 자바 스크립트 답변은 일반적으로 입력을 통해 읽습니다 prompt(); 하지만 이것도 괜찮습니다.
Kartik

당신은 제거 할 수 있습니다 y=i=0;변경 a.fillText(x,0,20)a.fillText(x,y=i=0,20).
칫솔

고맙습니다. 두 문자는 두 문자입니다!
waxwing

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

이 코드는 PHP와 함께 제공되는 GD 글꼴을 사용합니다. 두 번째 인수 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)같은 잘 작동
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

이것이 효과가 있다면 지금까지 가장 좋은 대답입니다. GTB 란 무엇입니까?
slater

@slater 왜 링크를 클릭하여 알아 내시겠습니까?
Timtech

게시물 제목이 실제로 링크임을 지적 해 주셔서 감사합니다.
slater

2
컴파일러를 해독하는 데 필요한 소프트웨어를 가져 오는 도메인이 죽었습니다 . 죽은 여기 너무. 테스트의 재미를 위해 코드를 직접 번역했지만 10 개의 parens을 열고 하나만 닫은 것처럼 보이므로 어떻게 해결할 수 있는지 잘 모르겠습니다. 내 머리 속에있는 컴파일러는 "오류 :: 일치하지 않는 식별자"라고 말합니다 :)
Jonathan Van Matre

1
@JonathanVanMatre 걱정하지 마십시오. TI-84가 자동으로 닫습니다.
Timtech

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@

언 골프 드 :

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

팁 : 가능한 한 공개 또는 개인 수정자를 피하십시오. 불필요한 바이트를 절약
masterX244

그 모든 것을 잊어 버렸습니다
Mark Jeronimus

@ MarkJeronimus 이것이 문제를 해결하는 방법 이었지만 FontRenderingContext를 사용 해보고 싶었습니다.
Magic Octopus Urn

3

포스트 스크립트, 381

재미를 위해 완전히 다른 것이 있습니다. 어쨌든 대부분의 글꼴은 벡터이므로 '카운팅 픽셀'은 약간 이상하지 않습니다. 글리프 모양 영역을 계산하는 것은 올바른 방법이지만 쉽지 않습니다. 점이 글리프 모양 안에있을 때 사각형을 스캔하고 '히트'를 세는 대안이 될 수 있으며 Postscript에는 이러한 종류의 검사를위한 연산자가 있습니다. 사실 스캔과 내부 테스트는 픽셀을 계산하는 이상한 방법입니다.

(%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@

픽셀 수 계산 ... 픽셀 교차점 계산 ... 토마토 ... 토마토 ...
Jonathan Van Matre

2

펄 (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

용법:

> 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 글꼴 개체를 초기화하십시오.
  • 새로운 BufferedImage 객체를 생성하여 GraphicsContext에 연결된 Graphics2D 객체를 생성합니다.
  • 문자열에 대한 2D 그래픽 컨텍스트의 글꼴 렌더링 컨텍스트를 가져옵니다.
  • 문자열에서 첫 번째 글리프 (글리프 만)를 가져옵니다.
  • 경로 이터레이터 (점 목록)를 가져옵니다.

그런 다음이 마지막 작품은 그것을 함께 가져옵니다 ...

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

모든 포인트를 반복하고 포인트를 합산합니다. 이 밀도 정보는 비교기로 다시 전달되어 정렬에 사용됩니다.


1

R, 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 플롯에서 글꼴을 플랫폼에 따라 다름으로써 PC에서 작동한다고 보장 할 수는 없지만 Mac (OS X 10.7.5, R 2.14.2)에서는 작동합니다.


1

SmileBASIC, 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
Jonathan Van 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.