Myślę więc, że prawdopodobnie wszyscy widzieliśmy ten komiks xkcd :
:
To może być zbyt ogólne lub zbyt trudne, nie jestem pewien. Ale wyzwaniem jest stworzenie programu w dowolnym języku, który tworzy okno, które ma co najmniej 2 kolory i wyświetla w języku angielskim, jaki procent ekranu jest w każdym kolorze.
dawny. Najprostszym rozwiązaniem byłoby białe tło z czarnymi literami z napisem „Procent tego obrazu, który jest czarny: [x]%. Procent tego obrazu, który jest biały: [y]%”
Możesz zwariować lub tak prosto, jak chcesz; zwykły tekst jest poprawnym rozwiązaniem, ale jeśli robisz ciekawe obrazy, takie jak w komiksie xkcd, to nawet lepiej! Zwycięzca będzie najbardziej zabawnym i kreatywnym rozwiązaniem, które uzyska najwięcej głosów. Więc idź i stwórz coś zabawnego i godnego xkcd! :)
Więc co o tym myślisz? Brzmi jak zabawne wyzwanie? :)
W odpowiedzi umieść zrzut ekranu swojego programu :)
źródło
"/.*/"
(czytaj: [kod źródłowy] nie zawiera nowego wiersza)Odpowiedzi:
Wiąz
Jeszcze nikt nie widział tej luki: demo
źródło
view source
Jest umieścić tam share-elm.com i nie jest częścią skompilowanego JS / HTML.JavaScript z HTML
Starałem się dokładniej odtworzyć oryginalny komiks. Zrzut ekranu jest wykonywany przy użyciu biblioteki html2canvas. Liczby są obliczane wielokrotnie, więc możesz zmienić rozmiar okna, a nawet dodać coś do strony w czasie rzeczywistym.
Wypróbuj online: http://copy.sh/xkcd-688.html
Oto zrzut ekranu:
źródło
Przetwarzanie, 222 znaki
Zawsze chciałem stworzyć własną wersję tego komiksu! Najprostszym (tylko?) Sposobem, w jaki mogłem to zrobić, były próby i błędy - narysuj coś, policz, ponownie narysuj ...
Ten program ustala dokładny procent po kilku sekundach. Nie jest bardzo ładny, ale interaktywny ; możesz zmienić rozmiar okna, a ono zacznie się ponownie obliczać.
Dodano kilka nowych linii dla czytelności:
Pokazuje tylko procent białych pikseli; Z powodu antyaliasingu tekstu nie białe piksele niekoniecznie są czarne. Im dłużej działa, tym więcej czasu będzie wymagało aktualizacji przy zmianie rozmiaru.
Edytować:Jest to więc wyzwanie kodowe; W każdym razie grałem w golfa. Może mógłbym później dodać jakieś wykresy, ale ogólna zasada pozostanie taka sama. Myślę, że interaktywność to zgrabna część.
źródło
background(-1)
zamiastbackground(255)
Wielkie wyzwanie. Oto moje rozwiązanie. Próbowałem zbliżyć się do oryginalnego komiksu, nawet użyłem czcionki xkcd .
Jest to aplikacja WPF, ale robiłem
System.Drawing
części do rysowania, ponieważ jestem leniwy.Podstawowa koncepcja: w WPF okna są
Visuals
, co oznacza, że można je renderować. Renderuję całą instancję Window na mapę bitową, liczę czarny i całkowity czarny lub biały (ignorując szarości w wygładzaniu czcionek i inne), a także liczę je za każdą trzecią obrazu (dla każdego panelu). Następnie robię to ponownie na zegarze. Osiąga równowagę w ciągu sekundy lub dwóch.Pobieranie:
MEGA Zawsze sprawdzaj pobierane pliki pod kątem wirusów itp.
Musisz zainstalować powyższą czcionkę w swoim systemie, jeśli chcesz ją zobaczyć, w przeciwnym razie jest to domyślna czcionka WPF.
XAML:
Kod:
Kod nie został wyczyszczony, ale przepraszam, powinien być nieco czytelny.
źródło
C (z SDL i SDL_ttf): Rozwiązanie w skali szarości
Oto rozwiązanie, które wykorzystuje formę wykresu kołowego do przechwytywania pełnego spektrum kolorów pikseli w skali szarości, z taktowaniem poniżej 100 linii.
Podobnie jak w moim poprzednim rozwiązaniu, ścieżka do pliku czcionek musi być albo zakodowana na stałe w źródle, albo dodana do komendy build, np .:
Dane wyjściowe programu wyglądają następująco:
Ten jest fajny do oglądania, ponieważ cała matematyka spowalnia przerysowywanie do miejsca, w którym można zobaczyć program zerujący na stabilnym rozwiązaniu. Pierwsze oszacowanie jest szalone (ponieważ powierzchnia zaczyna się całkowicie czarna), a następnie zmniejsza się do ostatecznego rozmiaru po około kilkunastu iteracjach.
Kod działa na podstawie liczby ludności każdego koloru piksela na bieżącym obrazie. Jeśli ta liczba ludności nie pasuje do ostatniej, przerysowuje obraz. Kod iteruje się po każdym pikselu, ale przekształca współrzędne x, y we współrzędne biegunowe, obliczając najpierw promień (wykorzystując środek obrazu jako początek). Jeśli promień mieści się w obszarze wykresu kołowego, oblicza theta. Theta można łatwo skalować do liczby ludności, która określa kolor piksela. Z drugiej strony, jeśli promień jest tuż przy granicy wykresu kołowego, wówczas obliczana jest wartość wygładzania, aby narysować okrąg wokół zewnętrznej części wykresu. Współrzędne biegunowe ułatwiają wszystko!
źródło
float
wersji funkcji biblioteki matematycznej, ale czy nie powinnofabs
byćfabsf
?fabs()
jest bardziej przenośny.C (z SDL i SDL_ttf)
Oto bardzo prosta implementacja, w około 60 liniach kodu C:
Aby to skompilować, musisz zdefiniować
FONTPATH
wskazywanie pliku .ttf czcionki, która ma być używana:Na większości nowoczesnych maszyn z systemem Linux można użyć
fc-match
narzędzia do wyszukiwania lokalizacji czcionek, dzięki czemu polecenie kompilacji staje się:(Oczywiście możesz zastąpić żądaną czcionkę ulubioną czcionką).
Kod w szczególności nie żąda wygładzania, dlatego okno zawiera tylko czarno-białe piksele.
Wreszcie zainspirowało mnie eleganckie rozwiązanie @ daniero, umożliwiające zmianę rozmiaru okna. Przekonasz się, że czasami program oscyluje między zliczeniami, utknął na orbicie wokół atraktora, do którego nigdy nie może dotrzeć. Kiedy tak się stanie, po prostu zmień rozmiar okna, aż się zatrzyma.
I, na żądanie, oto jak to wygląda po uruchomieniu go w moim systemie:
Wreszcie uważam, że powinienem wskazać, na wypadek, gdyby ktokolwiek tutaj jeszcze tego nie widział, że MAA opublikowała wywiad z Randallem Munroe, w którym szczegółowo omawia tworzenie kreskówki nr 688.
źródło
Obraz ma wymiary 100 x 100, a liczby są dokładne i mam na myśli dokładne - wybrałem obraz 10000 pikseli, aby odsetki mogły być wyrażone z dokładnością do dwóch miejsc po przecinku. Metoda polegała na odrobinie matematyki, zgadywaniu i pewnej liczbie zgryzień w Pythonie.
Widząc, jak wcześniej wiedziałem, że wartości procentowe mogą być wyrażone w 4 cyfrach, policzyłem, ile czarnych pikseli było w każdej z cyfr od 0 do 9, w 8-pikselowej wysokości Arial, w której jest napisany tekst. Napisałem szybka funkcja,
weight
która informuje, ile pikseli potrzeba do napisania danej liczby, po lewej stronie uzupełnione zerami, aby miały 4 cyfry:px
to tablica odwzorowująca cyfry na liczbę wymaganych pikseli. Jeśli B to liczba czarnych pikseli, a W to liczba białych pikseli, mamyB + W = 10000
i potrzebujemy:Skąd pochodzą stałe? 423 to „początkowa” liczba czarnych pikseli, liczba czarnych pikseli w tekście bez liczb. 9577 to liczba początkowych białych pikseli. Musiałem dostosować ilość początkowych czarnych pikseli kilka razy, zanim udało mi się uzyskać stałe, tak że powyższy system ma nawet rozwiązanie. Dokonano tego zgadując i krzyżując palce.
Powyższy system jest okropnie nieliniowy, więc oczywiście możesz zapomnieć o rozwiązywaniu go symbolicznie, ale możesz po prostu przejrzeć każdą wartość B, ustawić W = 10000 - B i wyraźnie sprawdzić równania.
źródło
QBasic
Ponieważ nostalgia.
A ponieważ tak naprawdę nie wiem, żadne biblioteki obrazów to współczesne języki.
Dość prosta metoda liczenia i powtarzania wyników. Główną „interesującą” rzeczą jest to, że program losowo wypróbowuje różne precyzyjne wartości procentowe - stwierdziłem, że nie zawsze było inaczej.
I dane wyjściowe (testowane na QB64 ):
źródło
AWK
... z netpbm i innymi pomocnikami
Plik „x”:
Bieg:
Obraz jest zapisany jako „x.pbm”, przekonwertowałem go do formatu png do przesłania:
źródło