Będzie to stosunkowo trudne wyzwanie dla golfisty.
Dane wejściowe: dowolny adres URL musi mieć dołączony protokół, np. Http://codegolf.stackexchange.com (który będzie naszym przypadkiem testowym)
Dane wyjściowe: Wygenerowany kod QR reprezentujący ten adres URL, który po zeskanowaniu przez urządzenie inteligentne przeniesie Cię pod ten adres URL w przeglądarce urządzenia inteligentnego.
Zasady tego Code-Golfa
- Jak zwykle wygrywa najmniejszy kod.
- Brak zewnętrznych zasobów internetowych, bibliotek lub wtyczek do generowania kodu dla Ciebie. Twój kod musi obliczyć obraz kodu QR.
- Dane wyjściowe mogą być prezentowane przez obraz, wygenerowany przez HTML5 / CSS3, lub nawet przy użyciu odpowiednich bloków Unicode, lub jeśli ASCII twojej platformy ma to dostępne, poprzez znaki ASCII, które mogą tworzyć kod QR (ten ostatni jest skierowany do Commodore 64 Basic, Amiga QBasic, Amstrad Basic itp.), Ale musi wygenerować kod QR, aby można było zeskanować kod.
- Po wpisaniu kodu należy wygenerować dane wyjściowe, albo zrzut ekranu wyniku po wykonaniu kodu, albo link pokazujący dane wyjściowe (w zależności od tego, co najlepiej pasuje do sytuacji)
- Masz przetestować swój kod za pomocą adresu URL „ http://codegolf.stackexchange.com ” i zgłosić wynik zgodnie z Regułami 3–4.
- Musisz również przetestować kod z wybranym adresem URL i zgłosić wynik zgodnie z Regułami 3–4.
Bibliografia:
1) http://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders
2) http://www.pclviewer.com/rs2/calculator.html
3) http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
4) http://en.wikipedia.org/wiki/QR_code
5) http://www.qrstuff.com/ po inspirację ...;)
code-golf
graphical-output
browser
WallyWest
źródło
źródło
Odpowiedzi:
Znaki Pythona 3: 974 [nb]
Dalsze bicie brzydkim kijem, patrz notatnik na GH-Gist . Python 3 ma wbudowane kodowanie ASCII-85, które pomaga w spakowaniu kiełbasy. Bardziej zaawansowane wbudowane algorytmy kompresji (LZMA) 3 nie wydają się dobrze współpracować z tak małymi rzeczami.
Zipowanie jest bardzo kapryśne w zmienianiu znaków, prawie kusiło mnie, aby napisać coś, co losowo wypróbuje różne 1-literowe nazwy zmiennych, aby zminimalizować spakowany rozmiar.
Python 2:
1420 1356 10851077 znakówPrzeczytałem pierwszy argument przekazany po wywołaniu, który może być łańcuchem o długości do 106 znaków. Wyjście jest zawsze wersją 5-L kodu QR i maski 4, co oznacza, że ma wymiary 37 x 37 modułów i może obsłużyć tylko ~ 5% uszkodzeń.
Jedynymi zależnościami programu są
numpy
(manipulacje tablicami) imatplotlib
(tylko wyświetlanie); całe kodowanie Reed-Solomon, pakowanie danych i układ modułu są obsługiwane w ramach dostarczonego kodu . W przypadku RS w zasadzie obrabowałem funkcje Wikiversity . To wciąż dla mnie rodzaj czarnej skrzynki. Nauczyłem się ton o QR w każdym przypadku.Oto kod, zanim go pokonam brzydkim kijem:
Po:
(polegając na tabulatorze, który liczy się jako 4/8 / dowolna liczba spacji> = 2., nie jestem pewien, jak dobrze się skopiuje)
Ponieważ jest tak długi, możemy go skompresować (zobaczyłem, że ktoś robi to gdzieś indziej, zapomniałem, kto jednak :(), aby zapisać więcej znaków, zmniejszając całkowitą liczbę do
10851077, ponieważpylab
jest brudny:Jeśli zamienisz ostatni wiersz na następujący (dodaje 62 znaki), otrzymasz prawie idealną wydajność, ale pozostałe nadal skanują, więc cokolwiek.
źródło
struct
połączenie i trochę niepotrzebnego przesuwania, po prostu obcinając mój „ciąg główny” ...