Ahora que sabemos cómo cuadrar y hacer un triángulo correctamente un número, vamos a aprender a ponerlo en paralelo. Para un paralelogramo de un número, primero lo organizamos como un paralelogramo apilándolo encima de sí mismo varias veces igual al número de dígitos que tiene, y agregando espacios para convertirlo en un paralelogramo. Así 123
se formaría:
123
123
123
Ahora tomamos cada número horizontal y vertical y los sumamos 123+123+123+1+12+123+23+3
, que es igual 531
, que es el paralelogramo de 123
.
Tu tarea:
Escriba un programa o función que, cuando se le da un número como entrada, devuelve el paralelogramo del número.
Entrada:
Un entero no negativo o un entero no negativo representado por una cadena.
Salida:
El paralelogramo del entero.
Casos de prueba:
1234567 -> 10288049
123 -> 531
101 -> 417
12 -> 39
Puntuación:
Este es el código de golf , ¡el puntaje más bajo en bytes gana!
Respuestas:
MATL , 12 bytes
La entrada es una cadena. Pruébalo en línea!
Explicación
Considere la entrada
'123'
como un ejemplo.El código duplica la entrada (
t
) y crea una matriz de identidad (Xy
) de tamaño dos veces la longitud de entrada (nE
):luego lo voltea (
P
):La cadena de entrada, interpretada como códigos ASCII de los dígitos, es equivalente al vector de fila numérico
La convolución bidimensional de tamaño completo (
Y+
) del vector y la matriz anteriores daLa interpretación de esos números como códigos ASCII (
c
) da la siguiente matriz de caracteres, con el carácter 0 representado como espacio:Transposición (
!
) transforma esto enInterpretar cada fila como un número (
U
) da el vector de columna numéricay sumando que (
s
) da el resultado final,531
.fuente
Retina , 22 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación: La primera etapa divide el número de entrada en cada dígito e incluye todos los prefijos exclusivos y sufijos inclusivos, dando los números verticales, además del número de entrada original repetido para cada dígito, dando los números horizontales. Las etapas restantes simplemente suman los números resultantes.
fuente
05AB1E ,
12 118 bytesEstoy
seguro de queestosepuede jugar más golf, ¡consejos bienvenidos!-1 byte gracias a Erik the Outgolfer (evita envolturas pero usando una concatenación)
y luego ...
-3 bytes más gracias a Adnan (evita la multiplicación por longitud-1 vectorizando la suma y restando la entrada al final)
Pruébalo en línea!
¿Cómo?
fuente
«
para concatenar los sufijos y los prefijos:g<*¹.s¹η«O+
.s¹η++Oα
debería funcionar para 8 bytesHaskell ,
9078767164635957 bytesPruébalo en línea!
fuente
g x=sum[x+div x a+mod x a|(a,_)<-zip((10^)<$>[1..])$show x]
.g x=sum[x+div x(10^a)+mod x(10^a)|(a,_)<-zip[1..]$show x]
Es un pelo más corto aún.g x=sum[x+x`div`10^a+x`mod`10^a|(a,_)<-zip[1..]$show x]
.Casco ,
1312 bytesPruébalo en línea!
Explicación
fuente
Neim , 7 bytes
Tener cuidado. Contiene serpientes:
S𝐬𝕤
Pruébalo en línea!
fuente
S𝐬𝕤
" Lol ..𝐗𝔻
Python 3 ,
8570 bytesPara la entrada 12345:
Resume las porciones de entrada 1 + 2345 + 12345, 12 + 345 + 12345, 123 + 45 + 12345, 1234 + 5 + 12345, utilizando la indexación de cadenas al índice (r) = 1,2,3,4 antes de convertir a entero y se agrega a 12345 * 2
Agradecimientos especiales a:
-14 Bytes @Jonathan Allen
-1 Byte @ovs
Pruébalo en línea!
fuente
(len(n)+1)
se puede jugar a-~len(n)
(~x
es-1-x
), y luego eso puede guardar otro byte usando-i(n)*~len(n)
. Entonces puede convertirlo en una función anónima:lambda n,i=int:sum(i(n[:r])+i(n[r:])for r in range(1,len(n)))-i(n)*~len(n)
(74 bytes)f=lambda n,r=1,i=int:n[r:]and i(n[r:])+i(n[:r])+f(n,r+1)or-i(n)*~len(n)
Japt ,
1511 bytes-4 bytes gracias a @Shaggy.
Toma la entrada como cadenas.
Pruébalo en línea!
Explicación
Divida la matriz de entrada en dígitos (
¬
) y asigne por (£
) la siguiente función, donde Y es el índice.["1", "2", "3"]
El valor de entrada (implícito) con
Y
espacios (ç
) insertados (i
) al principio. Esto está asignado aU
.["123", " 123", " 123"]
Concatene eso con sí mismo girado 90 ° a la derecha (
1
tiempo). Luego sum (x
).["123", " 123", " 123", " 1", " 12", "123", "23 ", "1 "]
->531
.fuente
Japt ,
3118 bytes-13 bytes gracias a @ETHproductions
Este enfoque no funciona bien con Japt. La solución de Justin es mucho mejor.
Explicación:
Pruébalo en línea!
fuente
Ul
: PU
s en las funciones, y el elemento del medio en la matriz se puede condensarUå+ x
, lo que creo que lo reduce a 23 bytes.mx x
axx
? :-)Ruby ,
6155 + 1 = 56 bytesUsa la
-n
bandera. Entrada de STDIN.Pruébalo en línea!
fuente
102033
su programa imprime728714
mientras el valor correcto es729702
.02033
fue el problema)JavaScript,
7774 bytesGuardado 3 bytes gracias a Value Ink
fuente
Pyth ,
2019 bytesMi enfoque actual de prefijo (con suerte jugaré más golf).
Pruebe Suite o pruebe un enfoque alternativo con el mismo número de bytes .
Explicación
Para entender mejor el concepto, tomaremos un ejemplo, digamos
"123"
.Primero obtenemos los prefijos de la entrada. Esos son
['1', '12', '123']
.Luego, obtenemos los prefijos de la entrada invertida, es decir:
['3', '32', '321']
y revertimos cada uno, de ahí obtenemos['3', '23', '123']
.Concatenamos las dos listas y convertimos cada elemento en un entero, por lo que obtenemos
[3, 23, 123, 1, 12, 123]
.Al sumar la lista, el resultado es
285
.El producto
P
es la longitud de la entrada - 1 (es decir,2
multiplicada por la representación entera de este2 * 123 = 246
) ( ).Al final, sumamos los dos resultados:
285 + 246
por lo tanto, obtenemos531
cuál es el resultado correcto.Pyth , 20 bytes
Banco de pruebas.
Explicación
Explicación por venir después de más golf.No logré seguir jugando al golf por ahora (aunque tengo ideas).fuente
q / kdb +, 34 bytes
Solución:
Ejemplos:
Explicación:
fuente
Jalea , 18 bytes
Pruébalo en línea!
fuente
Swift 3 , 213 bytes
No se puede probar en línea, porque es lento y se agota el tiempo de espera. Puedes probarlo en Swift Playgrounds si deseas probarlo.
Ejecución de la muestra
Entrada:
Salida:
fuente
Jalea , 12 bytes
Pruébalo en línea!
Toma la entrada como una cadena. Crea el "paralelogramo" como una matriz de caracteres, luego evalúa cada fila y columna para obtener los números para sumar.
Explicación
fuente
C (gcc) ,
958481 bytes (78 +-lm
indicador del compilador)¡Hola! Esta es mi primera presentación, espero no haber roto ninguna regla.
Pruébalo en línea!
Sin golf, sin advertencias:
fuente
-lm
para funciones matemáticas sólo es necesario para algunos tiempos de ejecución C, como por ejemploglibc
. Compilando, por ejemplo, con MinGW (usando Microsoftmsvcrt.dll
), no sería necesario. Entonces, ¿no estás seguro de que es necesario agregarlo aquí? De todos modos, si lo agrega, generaría 3 bytes;)-lm
es necesario para lapow()
función con gcc. Traté de trabajar sin él, pero no pude encontrar una solución con menos de 6 bytes (pow + el indicador del compilador). No pude encontrar reglas sobre cómo incluir banderas en el bytecount, y sé darme cuenta de que hice una suposición falsa acerca de que el-
personaje no se cuenta. Estoy agregando un byte +1 en este momento.-lm
no es requerido porgcc
el hecho de queglibc
no incluye las funciones matemáticas en la biblioteca principal.msvcrt.dll
lo hace, por lo que compilar en Windows congcc
trabajos sin el-lm
. Esto es una trampa y no estoy completamente seguro de lo que las reglas sobre esto realmente tienen que decir.Java 8,
147137126116114 bytes-13 bytes (137 → 126 y 116 → 114) gracias a @ OlivierGrégoire .
Explicación:
Pruébalo aquí
fuente
n->{Integer l=(n+"").length(),s=n*l,i=0;for(;++i<l*2;)s+=l.valueOf((n+"").substring(l<i?i-l:0,i<l?i:l));return s;}
. Es una ventana deslizante con min-max para reducir la cantidad de llamadas a los costososnew Integer(....substring(...))
Math.max(0,i-l)
a0>i-l?0:i-l
yMath.min(i,l)
parai>l?l:i
. Modificándolo ahora. Ah, veo que has editado tu comentario después de haber copiado la respuesta de 126 bytes. ;)R ,
168162103 bytes-6 bytes al no usar c ()
-59 bytes gracias a @Giuseppe
Pruébalo en línea!
Toma la entrada como una cadena.
Estoy absolutamente seguro de que hay mejoras que hacer, principalmente para aprovechar cualquiera de las fortalezas de R ... pero en un desafío que es básicamente manipular cuerdas, estoy luchando por ver cómo.
Editar: ¡Mucho mejor ahora que no estoy iterando sobre una mala idea!
fuente
substr
explícitamente en lugar de bucles, lo que ahorraría unos pocos bytes.Perl 5 , 53 + 1 (-n) = 54 bytes
Pruébalo en línea!
fuente
Mathematica, 77 bytes
fuente