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 golf-golf , więc wygra najkrótszy kod w bajtach.
Odpowiedzi:
Mathematica,
112 110108 bajtówTo 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.
Dane wyjściowe dla
s = FromCharacterCode /@ Range[33, 135];
„Kurier”Wyjście dla tego samego, ale z FontFamily „Monospace”:
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:
źródło
"" <> (FromCharacterCode /@ Range[33, 135])
StringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
Bash + ImageMagick:
164147148 znakówPrzykładowy przebieg:
Separatory są wstawiane między grupami szarości. Znaki o identycznym poziomie szarości nie są rozdzielane:
źródło
sort
QBasic, 259 bajtów
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ą.
źródło
JavaScript + Canvas i przeglądarka DOM (
280237235 bajtów)Zaktualizowana wersja z cukierkami Forsa i szczoteczki do zębów w komentarzach:
Bardziej czytelna wersja:
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 .
źródło
c
is
nie są konieczne (a=document.createElement('canvas').getContext('2d')
ay+=a.getImageData(0,0,30,30).data[i]
), przy czym element ten nie musi być dodawana, inicjalizacja zeroy
może być połączone z urządzeniemi
(i=y=0
), przy czym po przyrosti
może być połączone z dodawaniemy
(for(...;y+=...[i++]);
) i krój Monako ma monofoniczny odstęp i ma krótszą nazwę niż Courier.prompt()
; ale to też dobrze.y=i=0;
i zmienića.fillText(x,0,20)
naa.fillText(x,y=i=0,20)
.PHP, 298 znaków
Dodałem kilka podziałów linii, abyś mógł to zobaczyć w całej swojej ohydności:
Ten kod używa czcionek GD wbudowanych w PHP. Drugi argument
imagechar()
wybiera czcionkę (poprawne są liczby od 1 do 5).Przykład:
Jeśli wstawisz poniższy kod na powyższym kodzie, będziesz w stanie podać listę znaków w przeglądarce internetowej.
źródło
imagecreatetruecolor
, możesz upuścić pierwszy przydział i użyć nazwy funkcji bezpośrednio na drugim, dla -11.[]
zamiastarray()
. iforeach($a as$v)
działa również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.
Wkład
Wydajność
źródło
Java -
468 450444@+.0abcdefghijklmnopqrstuvwxyz
->.irl+jcvtfxyzsuonkheaqpdb0wgm@
Nie golfowany:
źródło
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.
.
A oto wyniki dla 3 różnych czcionek (których wybór można skomentować powyżej):
źródło
Perl (z GD) (159)
stosowanie:
edycja: skrócona do 159 znaków
źródło
Java, 584
Wow ... To nie był dobry język do robienia tego.
Stosowanie:
Ta konfiguracja powoduje:
Jedyny wiersz, który wymaga wyjaśnienia:
Potem ten ostatni kawałek łączy go ...
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.
źródło
R, 195 znaków
Wcięte z komentarzami:
Przykład:
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).
źródło
SmileBASIC,
179176173 bajtówUżywa aktualnie załadowanej czcionki. Czcionki można ładować za pomocą
LOAD"GRPF:filename"
.Bardziej czytelny kod:
źródło
PHP - 485
Próbny:
Kod:
źródło
Python + freetype-py: 147
źródło