Tarea
La tarea es mostrar cualquiera de los 128 estados posibles de una pantalla de 7 segmentos .
Su programa debe aceptar una cadena de 7 caracteres ("bits") que son 0
o 1
. El primer bit de entrada corresponde al segmento A de la siguiente ilustración, el segundo a B, etc. (ignorar dp
):
La forma de representar la pantalla depende de usted: un único símbolo Unicode o ASCII, arte ASCII , gráficamente o lo que sea que se le ocurra. Sin embargo, cada entrada debe tener su propia salida distinta. Si se te ocurre algo elegante, estoy seguro de que puedes cosechar votos a favor mostrando algunos ejemplos.
Los 128 estados posibles de la pantalla son:
Reglas
- Codegolf
- Como dije, se permite cualquier tipo de salida, pero sería bueno si lo especificaras.
- La entrada puede ser stdin o argumento de línea de comando.
Ejemplos
Entrada
1101101
Salida
Como ASCII / Unicode:2
Diferentes tipos de arte ASCII (no soy demasiado bueno en esto)
_ ╺┓ ╒╗ ---
_| ┏┛ ╔╝ |
|_ ┗╸ ╚╛ ---
|
---
Respuestas:
J (51)
salida:
fuente
1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1
.C, 106
El tamaño es de 74 caracteres si se le permite cambiar el nombre del programa "W00WG5WW1GW66WG4WW2GW33WG"
corriendo:
notas:
'W' y 'G' (0x47 y 0x57) se eligen de modo que el valor & 7 = 7, es decir, indexen de forma segura el carácter nulo que termina la cadena de entrada.
fuente
Brainfuck - 224
Imprime utilizando puntos de Exlamación:
No es el más legible, pero tampoco demasiado horrible.
Sorprendido de lo cerca que está de no ser el último lugar.
fuente
Postscript
121107requiere
n
ser definido como la cadena a procesar, así que invoque comoLlegar
el conjunto completo es
fuente
Mathematica:
135129118, visualización de imagenespacios añadidos "para mayor claridad"
Editar
Para aquellos usuarios exigentes del sitio: Sin usar una máscara externa:
fuente
&
.&
.APL,
5855Entrada de ejemplo:
Salida:
⍞='1'
toma la entrada como una matriz de caracteres y la convierte en una matriz numérica.1 2 2 1 2 2 1×⍞='1'
convierte esa matriz en:0
para espacios en blanco,1
para_
,2
para|
(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
asignar esa matriz a variablex
y reordenar para representar los segmentos F, G, B, E, D, C0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
concatena un blanco, segmento A y otro blanco al frente3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
remodelar a una matriz 3x31+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]
se convierte en indexación basada en 1Finalmente usa la cadena
' _|'
para convertir las indicaciones en caracteresEditar
Eliminó 3 caracteres concatenando a
0
para enfrente de la matriz y utilizando índices duplicados, evitando una asignación variablefuente
{
es 1-char más corta que la indexación de paréntesis[]
.PHP 66 bytes
Una ligera mejora utilizando una
md5
fórmula mágica, pero requiere 3 bytes adicionales binarios:¡
,æ
, yÚ
son caracteres 161, 230, y 218, respectivamente. Debería funcionar como está si se copia directamente y se guarda como un formato ANSI.PHP 73 (70) bytes
Si me permite tres caracteres binarios, esto se puede reducir a 70 bytes :
donde
ƒ
,ß
yõ
son los caracteres 131, 223 y 245 respectivamente.Recibe la entrada como un argumento de línea de comando. Uso de la muestra:
fuente
php.ini
(por defecto ya lo están), o para probar, puede anteponer el siguiente código al script:<? error_reporting(E_ALL & ~E_NOTICE); ?>
JavaScript + jQuery + HTML + CSS (
210201)Esta solución utiliza sprites CSS y la imagen proporcionada como ejemplo :
HTML (3)
CSS (
8271)Gracias a xem por el truco " background: url ":
JavaScript (125 después de eliminar las nuevas líneas agregadas aquí para facilitar la lectura)
Prueba en línea: http://jsfiddle.net/zhqJq/3/
fuente
<p>
etiqueta y evitardisplay:block
en CSS para ahorrar espacioR (65 caracteres):
Se basa en algunas aproximaciones sueltas para algunos números trascendentales ...
fuente
Python 2 - 65
Ejemplo:
fuente
PostScript:
53 binarios, 87 ASCII52 binarios, 86 ASCIIHexdump del programa usando tokens binarios:
Descargue este archivo para probarlo.
Usando tokens ASCII:
El primer
forall
bucle pone todas las coordenadas requeridas en la pila. Las coordenadas se almacenan en una cadena para minimizar el espacio requerido. Las coordenadas están en orden inverso, es decir, los últimos 4 caracteres son para el segmento de A. Nos dibujar una línea de(0,8)
a(4,8)
para este segmento (en realidad, hay que añadir 48 a todas las coordenadas, ya queforall
pone todos los códigos ASCII en la pila).El segundo
forall
recorre todos los0
sys1
en la cadena de entrada y los convierte en un valor gris.0
s se dibujan en blanco (valor gris 1) y1
s se dibujan en negro (valor gris 0). Luego usamos las coordenadas queforall
dejó el primer bucle en la pila para dibujar las líneas.Invoque el programa usando Ghostscript, al igual que Geoff Reedy:
Esto muestra:
fuente
neg 49 add
(lo cual es increíble por cierto) con1 and
.not 1 and
, ¿verdad? Todavía guarda un byte tanto en ASCII como en binario.bitshift
es una palabra tan largaAPL
101 86 7369La entrada es desde la pantalla a través de ⍞
Que produce una matriz de caracteres de 9x5 compuesta de espacios en blanco y ⎕ de la siguiente manera:
El número de siete dígitos se convierte en un vector de partición para seleccionar las coordenadas ⎕.
fuente
Mathematica
1121031009688, usando gráficasfuente
[123]
ni ["123"], niIntegerDigits[123]
trabajo para mí. Solo obtengoz
, sin resaltar.Pitón (107)
Definitivamente más golfable.
Salida:
Explicación:
fuente
Python 2.7 (93 caracteres):
Explicación:
Con la entrada stdin, use un operador ternario improvisado para dar
*
verdadero y un espacio para falso. Tome esos valores y conéctelos a una declaración de formato que tenga el formato de la pantalla de 7 dígitos. Sería como máximo 83 caracteres si la pantalla funcionara así:pero el pedido lo hace más largo. Alguien tiene una forma de evitar esto?
Ejemplo:
fuente
print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()])
:;) Tampoco se necesitan corchetes ni espacio para la declaración de impresión.>'0'
lugar de=='1'
yinput()
(con backticks alrededor, pero eso no se mostrará debido al formato aquí) en lugar deraw_input()
.x = `input()`
Pensé que necesitábamos una respuesta lispy ...
Clojure, 159 caracteres
Lo anterior se ejecutará en el REPL y proporcionará la respuesta correcta. Por ejemplo:
Lanzarle números con pequeñas modificaciones:
rendimientos:
No es fácil de leer, ¡pero están ahí!
fuente
Javascript 123
Puedo reducir el recuento de caracteres (101) si usamos solo un carácter para el estado "activado", pero es menos legible:
fuente
Posdata 136
No ganador, sino un enfoque diferente.
Espera que la cadena de entrada esté en la pila:
Este es aún peor. 294 para hacer un mapa de bits "binario". Me tomó un tiempo recordar que cada fila está acolchada a un byte uniforme. Entonces, un mapa de bits de 3x5 es de cinco bytes con los 3 bits de msb significativos.
La salida es tan fea como la otra. :(
Muy bien, aquí hay uno que se ve bien. 190
Editar: fue al revés y al revés. Corregido ahora.
fuente
Mathematica 264
Hacer que la salida se vea bien requiere muchos bytes, por lo que esta vez no habrá cigarros. Pero aquí está el código detallado (264 caracteres) de todos modos.
El conjunto completo de personajes:
Los dígitos:
fuente
PHP - 155 caracteres
serían 150 caracteres si utilizamos la declaración de matriz de tipo php 5.4, pero no tengo eso instalado en mi computadora portátil, así que no pude probarlo.
Muestra de salidas.
Explicación:
Primero dividí la pantalla de 7 segmentos en Cinco filas y 3 columnas. Con la 1ra, 3ra y 5ta fila havimg '-' en la columna del medio, y espacio de lo contrario.
La segunda y cuarta fila tiene una tubería '|' personaje en la primera y última columna. Ahora la presencia de estos caracteres debe guiarse por los valores de entrada.
Creé una tabla de búsqueda, que es básicamente dos tablas de búsqueda. Primero para el cálculo de valores para la 1ra, 3ra y 5ta fila. Y otro en el desplazamiento 2 (3er elemento) para el cálculo de las filas 2da y 4ta.
fuente
Java - 204 caracteres
Salida de muestra:
Formateado correctamente:
Realmente desearía poder evitar eso para el bucle, pero probé algunas otras cosas y todas fueron más largas. Probablemente haya una mejor manera de hacer esto, pero este es mi primer intento de golf de código. (Y Java es el peor lenguaje para él, por eso pensé que sería interesante). Incluso Brainfuck me tiene vencido, pero al menos mi salida se ve mejor.
EDITAR: puedo deshacerme de "público" en clase, ¡me ahorra 7 caracteres!
Y gracias, daniero, por mostrarme printf! (18 caracteres guardados)
Reescribió el formato de salida, cambió los literales de caracteres a decimal, se guardaron 12 caracteres.
fuente
printf
método algunas versiones atrás, que es básicamenteprintln
yformat
en uno (como la función C); Esto te ahorrará algunos personajes,for
bucle y la parte de actualización en uno, guardando un personaje:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
VBA - 263
Es feo pero funciona, creo. Tengo problemas para ver el orden de bits adecuado, así que deduzco de las respuestas de los demás. Incluso si esa pieza está mal, la longitud del código debe permanecer igual.
fuente
VBScript - 178 caracteres
fuente
CJam - 29
CJam es un nuevo lenguaje que estoy desarrollando, similar a GolfScript - http://sf.net/p/cjam . Aquí está la explicación:
l
lee una línea de la entrada0
el número 0N
es una variable preinicializada a la cadena de nueva línea que]
reúne los elementos de la pila en una matriz,s
convierte un valor (la matriz) en una cadena, por lo que agrega un cero y una nueva línea a la entrada dada7078571876784728737
es una número (el mismo número que usé en python, pero estaba en hexadecimal allí)A
es una variable preinicializada a 10 queb
realiza una conversión base, generando la matriz [7 0 7 8 ... 3 7]\
intercambia los dos últimos valores en la pilaf=
aplica el=
operador (aquí, acceso a matriz indexada) en la cadena de entrada (más cero y nueva línea) y cada número 7, 0, 7, ...El índice 7 corresponde al cero añadido, y 8 corresponde a la nueva línea añadida.
Mi solución de Python hace exactamente lo mismo (excepto que la separación de dígitos se realiza mediante la conversión de cadenas)
fuente
VBA, 188 caracteres
Tenga en cuenta que uno debe escribir 188 caracteres si solo incluye espacios en blanco obligatorios: el IDE lo expande cuando lo copia en el editor VBA.
Lamentablemente, VBScript no tiene una matriz de Bytes fuertemente tipada, o esa podría ser mucho más corta usando este método.
fuente
Javascript (ECMAScript 2016) - 108 bytes
Esto probablemente se pueda jugar más, pero no se me ocurre nada.
fuente
JavaScript, 148 bytes
Pruébalo en línea! (El pie de página es Node.js para leer
.input.tio
)Acepta la entrada de ABCDEFG en banderas binarias y devuelve:
fuente
SmileBASIC, 136 bytes
La salida es gráfica.
fuente
05AB1E , 4 bytes
Pruébalo en línea o verifique todas las entradas posibles .
Vea verificar todas las entradas posibles enlace de arriba para ver la asignación utilizada para cada entrada.
Explicación:
Esto abusa de las reglas donde dice:
Alternativa más en el espíritu del desafío utilizando el formato de salida:
38 bytes :
Definitivamente se puede jugar al golf ..
Pruébelo en línea o verifique todas las entradas posibles .
Explicación:
Ver este consejo 05AB1E mío ( sección Cómo comprimir grandes números enteros? ) Para entender por qué
•L7ו
es1367524
.fuente
PHP 5.6, 65 bytes ASCII simple
o, sin un salto de línea final, pero con algo de diversión bit a bit:
Ejecutar como tubería
-nR
o probarlos en línea .desglose 1
desglose 2
fuente