Esto va a ser un desafío de código de golf relativamente desafiante.
Entrada: cualquier URL, debe tener el protocolo adjunto, por ejemplo, http://codegolf.stackexchange.com (que será nuestro caso de prueba)
Salida: un código QR generado que representa esta URL, que, cuando es escaneado por un dispositivo inteligente, lo llevará a esa URL en el navegador del dispositivo inteligente.
Reglas para este Código-Golf
- Como de costumbre, el código más pequeño gana.
- No hay recursos web externos, bibliotecas o complementos para generar el código por usted. Su código debe calcular la imagen del código QR.
- La salida se puede presentar mediante una imagen, generada por HTML5 / CSS3, o incluso utilizando los bloques Unicode apropiados, o si el ASCII de su plataforma lo tiene disponible, a través de caracteres ASCII que pueden formar el código QR (este último está dirigido a Commodore 64 Basic, Usuarios de Amiga QBasic, Amstrad Basic, etc.), pero debe generar una salida de código QR para que pueda escanear el código.
- Las entradas del código deben seguirse con la salida generada, ya sea por una captura de pantalla de la salida después de ejecutar su código, o con un enlace que muestre la salida (lo que mejor se adapte a la situación)
- Debe probar su código con la URL " http://codegolf.stackexchange.com " e informar el resultado de acuerdo con las Reglas 3 a 4.
- También debe probar su código con una URL de su elección e informar el resultado de acuerdo con las Reglas 3 a 4.
Referencias
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/ para inspirarse ...;)
code-golf
graphical-output
browser
WallyWest
fuente
fuente
Respuestas:
Python 3: 974 caracteres [nb]
Golpee aún más con el palo feo, vea el cuaderno en GH-Gist . Python 3 tiene una codificación ASCII-85 incorporada, que ayuda con el saus comprimido. Los algoritmos de compresión incorporados más avanzados de 3 (LZMA) no parecen funcionar bien con cosas tan pequeñas.
La compresión es muy voluble sobre el cambio de caracteres, estuvo casi tentado a escribir algo que probaría al azar diferentes nombres de 1 letra para las variables para minimizar el tamaño comprimido.
Python 2:
1420 1356 10851077 caracteresLeí el primer argumento pasado cuando se lo llamó, que puede ser una cadena de hasta 106 caracteres de longitud. La salida siempre es un código QR de la versión 5-L y una máscara 4, lo que significa que tiene 37x37 módulos de gran tamaño y solo puede manejar ~ 5% de daño.
Las únicas dependencias del programa son
numpy
(manipulaciones de matriz) ymatplotlib
(solo visualización); toda la codificación Reed-Solomon, el empaquetado de datos y el diseño del módulo se manejan dentro del código provisto . Para RS, básicamente robé las funciones de Wikiversity ... todavía es una especie de caja negra para mí. Aprendí un montón sobre QR en cualquier caso.Aquí está el código antes de vencerlo con el palo feo:
Después:
(confiando en una pestaña para contar como 4/8 / cualquier número de espacios> = 2., no estoy seguro de qué tan bien se copiará)
Debido a que es tan largo, podemos comprimirlo (vi a alguien hacer esto en otro lugar, olvidé quién aunque :() para guardar algunos caracteres más, reduciendo el total a
10851077 porquepylab
está sucio:Si reemplaza la última línea con la siguiente (agrega 62 caracteres), obtendrá una salida casi perfecta, pero la otra aún escanea, así que lo que sea.
fuente
struct
llamada y presiono un poco innecesariamente simplemente truncando mi 'cadena maestra' ...