Escriba el programa más corto que tome un solo entero como entrada e imprima un ábaco de Suanpan
Casos de prueba
Entrada:
314159
Salida:
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|
Entrada:
6302715408
Salida:
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
Respuestas:
J,
126124121119116115113105116115112 caracteresToma entrada del teclado. Ejemplo:
El truco principal aquí es el abuso del boxeo de J redefiniendo los personajes que usa. Se utiliza un parámetro global -
9!:7
- para hacer esto. Puede haber espacio para seguir jugando al golf, pero para ser honesto, me alegré de que algo funcionara para compensar mi último intento en esta pregunta .Encaja en un tweet con suficientes caracteres para decir 'Gaz hizo esto' :-).
Editar: 3 caracteres de ahorro se deben al préstamo
2 6$' || (__)'
de la respuesta de Jesse Millikan .Edición adicional: Perdí 11 personajes agregando espacios adicionales a cada lado que no había notado que no estaban presentes.
Explicación:
El código está en tres secciones principales:
1) Configuración
Esto es en sí mismo en dos partes.
9!:7'\=/<=>/=\|='
redefine los caracteres que J usará para mostrar cuadros. El boxeo de J normalmente se ve así:pero después de redefinir se ve así:
(s=:[,.~,.)
define un verbo que voy a usar un par de veces más tarde. Este resulta ser el mejor lugar para declararlo. Toma un carácter a la izquierda y una serie de caracteres a la derecha y empareja la matriz entre los caracteres. Por ejemplo:La final
[
solo sirve para separar la configuración de la siguiente parte.2) Entrada y representación
".,.1!:1[1
toma la entrada del teclado y la separa en dígitos individuales:((i.5)</5|])
crea una representación de ceros y unos de la parte inferior del ábaco:|:@(1,.<&5)
crea una representación de ceros y unos de la parte superior del ábaco:Estas dos partes se encuadran juntas usando
;
:Luego, las cajas se colocan una encima de la otra para formar la base del ábaco, dando:
3) salida
&.>
significa que lo que sigue operará en ambas cajas a su vez.(,-.)
este es un gancho que negará la entrada y luego lo agregará al final del original:Esto es realmente parte de la representación, pero para fines de golf es mejor tenerlo en esta sección. Aplicado a la entrada anterior:
[:,.(_6[\' || (__)'){~
Los ceros y unos ahora se usan para seleccionar una cadena para representar una cuenta o la ausencia de una:Pero ahora, como Howard me señaló, hay un espacio corto a cada lado de las cuentas. Entonces usamos el
s
verbo predefinido para emparejar el contenido de cada cuadro entre dos columnas de espacios:Una vez hecho eso, todo lo que queda es convertir esto en una cadena usando
":
para que podamos emparedarlo entre dos columnas de|
:fuente
Ruby 1.9, 154 caracteres
Asume que la entrada no termina con una nueva línea.
Dato curioso: debido a la forma en que estoy convirtiendo los dígitos de entrada en números (
$&.hex
es un byte más corto que$&.to_i
), este ábaco en realidad funciona con dígitos hexadecimales hastae
:Porque
0xf
, un tercer cordón aparece mágicamente en la mitad superior.Al permitir marcas adicionales durante la invocación del script, esto se puede acortar a 152 bytes (código de 149 bytes + banderas de invocación adicionales de 3 bytes):
Corre con
ruby -n suanpan.rb
.fuente
Perl (151 caracteres)
(
168163158157156154)Explicación
Ediciones
\n
sa caracteres de nueva línea reales. ¡No puedo creer que no haya pensado en eso antes!fuente
Windows PowerShell, 191
Historia:
$l
.%
números de los dígitos.$r
y$b
. Y$a
también es obsoleto. Como es$l
.$OFS
si lo necesito solo una vez.$f
.-join
ya que en realidad podemos usar el espacio adicional con buenos resultados.fuente
Haskell, 243 caracteres
No particularmente inteligente. Estoy seguro de que se puede acortar de alguna manera ...
fuente
interact
z x|x=" (__) "|0<1=" || "
.Delfos, 348
Esta versión crea una cadena para escribir solo una vez; Los dígitos son manejados por una función separada que funciona a través de una
digit modulo m >= value
construcción (negada si el valor <0).Delfos, 565Primer intento :
Esto usa 3 matrices; uno para las 7 cadenas que se pueden discernir, uno para las líneas de salida y otro para asignar las 7 cadenas a 11 columnas (10 dígitos y 1 columna inicial).fuente
GolfScript, 139 caracteres
Todavía no se juega mucho, pero cabe en un tweet (con solo ASCII). Probarlo aquí .
fuente
J, 225
Pasa dos pruebas, debe funcionar hasta al menos varios cientos de dígitos.
Primero apagado: sí, sí, sepulturero. Segundo: eso es vergonzosamente largo. Oh bien. Todavía no he decidido si seguir jugando al golf o acurrucarme en posición fetal y llorar. (¡O ambos!)
Aquí hay un poco de explicación en lugar de un programa más corto:
fuente
C,
277274 caracteresSabes, me parece que simplemente no tenemos suficientes soluciones aquí que realmente aprovechen el preprocesador C. En parte, eso se debe a que esos
#define
realmente ocupan un poco de espacio. Pero aún así, hay mucho potencial. Siento la necesidad de abordar esta deficiencia.Eso es mejor.
fuente
Mathematica 281
Ejemplo
fuente
C, 548
Primera versión, solo un poco de golf hasta ahora.
fuente
Scala (489 caracteres)
Intento bastante malo realmente.
fuente
Sclipting , 77 caracteres
La recompensa se refiere a los tweets y Twitter cuenta los caracteres (no los bytes). :)
De hecho, escribí esto hace años (cuando se publicó este desafío), pero nunca lo publiqué porque inventé Sclipting después de que este desafío se publicara por primera vez. Si cree que esto lo hace inelegible, lo entiendo.
Explicación
fuente
Pitón,
309301288 caracteresVersión compacta:
Versión clara:
Tenga en cuenta que para la compactación, las variables se renombraron a una sola letra, y las comprensiones de la lista se cambiaron a generadores que no requieren corchetes adicionales.
fuente