Sortuj postacie według ciemności


38

Twój program musi przyjmować jako wiersz wiersza znaków, takich jak to:

@+.0

I wypisz postacie posortowane według ich ciemności, tak:

.+0@

Wymagania:

  • Do wykrywania ciemności należy użyć czcionki o stałej szerokości.

  • Musisz dowiedzieć się, ile pikseli zajmuje każda postać. Musisz właściwie narysować znak i policzyć piksele, tzn. Nie możesz po prostu ustalić liczby pikseli na stałe.

    • Bardziej konkretna zasada: jeśli zmieniłeś czcionki, twój program powinien nadal działać. Co więcej, twój program powinien móc przełączać czcionki po prostu zmieniając zmienną, wartość lub ciąg znaków w kodzie.
  • Jeśli używasz antyaliasingu, musisz liczyć piksele jako procenty w pełni czarnego piksela. Na przykład rgb(32, 32, 32)piksel będzie liczył się jako 1/8 pełnego piksela. Zignoruj ​​tę zasadę, jeśli twoje postacie nie są antyializowane.

  • Po zliczeniu pikseli należy posortować znaki według liczby pikseli i wydrukować je w kolejności.

  • To jest , więc wygra najkrótszy kod w bajtach.


7
O dziwo, jest to również odpowiednie dla RPG.se!
corsiKa

1
Co, brak korekty wyświetlania gamma w obliczeniach ciemności?
Ilmari Karonen

6
Czy możemy użyć białej czcionki? Jeśli tak, to chyba mam to zapakowane.
Paul

Odpowiedzi:


22

Mathematica, 112 110 108 bajtów

To nadal prawdopodobnie można pograć w golfa. Zakłada, że ​​ciąg znajduje się w zmiennej s.

A teraz używa poprawnej składni do sortowania jednej listy według innej.
Szczęśliwe przypadki testowe -> „O tak, to działa” -> Facepalm
Dzięki za ostre oczy, David Carraher.

Aktualizacja: Zastąpiłem OCR A Menlo, ponieważ zdałem sobie sprawę, że w OSX nazwa rodziny czcionek OCR A to tak naprawdę OCR A Std. Więc sortowałem domyślną czcionkę zamiast prawdziwej okazji. Menlo jest również monospacowane z tą samą liczbą bajtów, więc nie ma zysku ani straty netto.

Mam postawić gospodarzem eksport CDF notebooka , dzięki czemu można zobaczyć kod w akcji, jeśli chcesz. Nadal zastanawiam się, jak dodać interaktywność do hostowanych w sieci CDF, więc na razie jest to tylko statyczne.

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

Dane wyjściowe dla s = FromCharacterCode /@ Range[33, 135];„Kurier”

wprowadź opis zdjęcia tutaj

Wyjście dla tego samego, ale z FontFamily „Monospace”:

wprowadź opis zdjęcia tutaj

Pamiętaj, że ostateczne wyniki są wyświetlane czcionką wewnętrzną MM, a nie sortowaną czcionką. Dlatego widać różnice w wybranej czcionce odzwierciedlone w tym rodzaju. Link CDF pokazuje jednak oba dla kompletistów.

Nieskluczony kod:

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

1
Sprawdź te dane wejściowe:"" <> (FromCharacterCode /@ Range[33, 135])
DavidC

Domyślna rodzina, czy nie, specyfikacje wymagały: „Twój program powinien móc przełączać czcionki po prostu zmieniając zmienną”. Z powodu wartości antyaliasingu możliwe jest uzyskanie niektórych rodzajów, które wyglądają źle, ale przejrzę jeszcze raz pełny zakres i zobaczę, czy coś jest nie tak.
Jonathan Van Matre

1
co za wspaniały język! właśnie dowiedziałem się o nowym wysiłku Wolfram dotyczącym nowego języka programowania, czekając na to.
the0ther

1
Możesz zapisać dwa bajty, zmieniając Znaki [] na Znaki @ i Odwróć [] na Odwróć @.
Michael Stern,

2
Nie chcę publikować podobnej odpowiedzi, ale spróbowałem i okazało się, że jest krótszyStringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
świst

25

Bash + ImageMagick: 164 147 148 znaków

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

Przykładowy przebieg:

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

Separatory są wstawiane między grupami szarości. Znaki o identycznym poziomie szarości nie są rozdzielane:

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

+1 za sortowanie za pomocą wskaźników tablicy bash zamiastsort
Digital Trauma

9

QBasic, 259 bajtów

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

Zrobiłem to dla zabawy, więc jest to technicznie niezgodne z zasadami w jeden sposób. Nie pobiera listy znaków, ale zamiast tego drukuje wszystkie znaki z 32-255 i używa ich zamiast tego. Jeśli naprawdę chcesz zobaczyć wersję zgodną z tą zasadą, powiedz mi.

Nie udaje się też z innej przyczyny technicznej: „Ponadto twój program powinien móc przełączać czcionki, po prostu zmieniając zmienną, wartość lub ciąg znaków w kodzie”. Nie ma łatwego sposobu na zrobienie tego z poziomu QBasic. Jednak program będzie oczywiście działał poprawnie z dowolną wybraną stroną kodową.

Na koniec mogłem wycisnąć kilka znaków (głównie białe znaki, które QBasic IDE pomaga wstawić), ale prawdopodobnie nie warto, ponieważ ta odpowiedź i tak nie ma szans na wygraną.

QBasic sortuj znaki według ciemności


Plus jeden za robienie tego dla zabawy!
Jonathan Van Matre

8

JavaScript + Canvas i przeglądarka DOM ( 280 237 235 bajtów)

Zaktualizowana wersja z cukierkami Forsa i szczoteczki do zębów w komentarzach:

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

Bardziej czytelna wersja:

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

Może być bardziej golfa.

Jestem nowy na tej stronie, więc nie jestem pewien, jak zwykle czytane są dane wejściowe dla odpowiedzi Javascript. Zakładam, że dane wejściowe są zawarte w zmiennej o nazwie s. Jeśli to nie jest OK, zaktualizuję odpowiedź i liczbę znaków.

JSFiddle zaktualizowanej wersji.

JSFiddle pierwszej wersji .


Naprawdę mi się podoba, ale tutaj jest wiele możliwych ulepszeń. Zmienne ci snie są konieczne ( a=document.createElement('canvas').getContext('2d')a y+=a.getImageData(0,0,30,30).data[i]), przy czym element ten nie musi być dodawana, inicjalizacja zero ymoże być połączone z urządzeniem i( i=y=0), przy czym po przyrost imoże być połączone z dodawaniem y( for(...;y+=...[i++]);) i krój Monako ma monofoniczny odstęp i ma krótszą nazwę niż Courier.
Fors

Dzięki! Nie jestem jeszcze doświadczonym golfistą, więc twoje komentarze bardzo pomagają. Włączyłem je teraz do kodu.
Jemiołuszka

Tutaj odpowiedzi JavaScript zwykle czytają dane wejściowe prompt(); ale to też dobrze.
Kartik

Możesz usunąć y=i=0;i zmienić a.fillText(x,0,20)na a.fillText(x,y=i=0,20).
Szczoteczka do zębów

Dzięki, również to dodał! Dwie postacie to dwie postacie!
jemiołucha

3

PHP, 298 znaków

Dodałem kilka podziałów linii, abyś mógł to zobaczyć w całej swojej ohydności:

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

Ten kod używa czcionek GD wbudowanych w PHP. Drugi argument imagechar()wybiera czcionkę (poprawne są liczby od 1 do 5).

Przykład:

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

Jeśli wstawisz poniższy kod na powyższym kodzie, będziesz w stanie podać listę znaków w przeglądarce internetowej.

<?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
jeśli używasz imagecreatetruecolor, możesz upuścić pierwszy przydział i użyć nazwy funkcji bezpośrednio na drugim, dla -11. []zamiast array(). i foreach($a as$v)działa również
Einacio

3

GTB

Ten kod jest drugim najtrudniejszym kodem, jaki kiedykolwiek napisałem dla kalkulatora. Brak sztywno zakodowanych wartości pikseli, rysuje tekst na wykresie i zapętla, aby policzyć każdy 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

Wkład

,O.i

Wydajność

.,iO

Jeśli to zadziała, jest to najlepsza jak dotąd odpowiedź. Czym jest GTB?
Slater

@slater Dlaczego nie klikniesz linku i się nie dowiesz?
Timtech

Dziękujemy za zwrócenie uwagi, że tytuł posta jest rzeczywiście linkiem.
Slater

2
Domena do pobrania oprogramowania niezbędnego do odszyfrowania kompilatora jest martwa . Tu też nie żyje . Przetłumaczyłem kod ręcznie dla zabawy, aby go przetestować, ale wydaje się, że otworzyłeś 10 parenów i zamknąłeś tylko jedną, więc nie jestem pewien, jak to rozwiązać. Kompilator w mojej głowie mówi: „Błąd :: niedopasowany identyfikator” :)
Jonathan Van Matre

1
@JonathanVanMatre Nie martw się; TI-84 automatycznie je dla ciebie zamyka.
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@

Nie golfowany:

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

Wskazówka: w miarę możliwości unikaj publicznych lub prywatnych modyfikatorów; oszczędza niepotrzebne bajty
masterX244

zapomniałem o tym wszystkim
Mark Jeronimus

@MarkJeronimus to był sposób, w jaki zamierzałem to rozwiązać, ale chciałem spróbować FontRenderingContext.
Magic Octopus Urn

3

Postscriptum, 381

Oto coś zupełnie innego, dla zabawy. Ponieważ większość czcionek i tak jest wektorowa, „zliczanie pikseli” jest trochę dziwne, prawda? Obliczanie obszaru kształtu glifu, mimo że jest prawidłowy, nie jest takie łatwe. Alternatywą może być skanowanie prostokąta i liczenie „trafień”, gdy punkt znajduje się w kształcie glifu, a Postscript ma operatory do tego rodzaju kontroli. Chociaż prawda, skanowanie i testowanie nieuczciwości to po prostu dziwny sposób liczenia pikseli.

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

A oto wyniki dla 3 różnych czcionek (których wybór można skomentować powyżej):

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

Liczenie pikseli ... liczenie przecięć pikseli ... pomidor .... tomahto ....
Jonathan Van Matre

2

Perl (z 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

stosowanie:

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

edycja: skrócona do 159 znaków


2

Java, 584

Wow ... To nie był dobry język do robienia tego.

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

Stosowanie:

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

Ta konfiguracja powoduje:

[., +, 0, @]

Jedyny wiersz, który wymaga wyjaśnienia:

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));
  • Zainicjuj obiekt czcionki 12pt z przekazaną czcionką.
  • Utwórz nowy obiekt BufferedImage, aby utworzyć obiekt Graphics2D połączony z GraphicsContext.
  • Pobierz kontekst renderowania czcionek w kontekście grafiki 2D dla łańcucha s.
  • Uzyskaj pierwszy glif (tylko glif) w ciągu.
  • Uzyskaj iterator ścieżki (lista punktów).

Potem ten ostatni kawałek łączy go ...

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

Poprzez iterację przez wszystkie punkty i sumowanie liczby punktów. Informacje o gęstości są przekazywane z powrotem do komparatora i służą do sortowania.


1

R, 195 znaków

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

Wcięte z komentarzami:

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

Przykład:

> 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

Gęstość czcionek na wykresach R zależy od platformy, nie mogę zagwarantować, że działa na PC, ale działa na Macu (OS X 10.7.5, R 2.14.2).


1

SmileBASIC, 179 176 173 bajtów

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żywa aktualnie załadowanej czcionki. Czcionki można ładować za pomocą LOAD"GRPF:filename".

Bardziej czytelny 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

Próbny:

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

Hej, wyślij mi kopię X.TTF ... najkrótsza czcionka, jaką mam, to 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()]))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.