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í 123se 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)(~xes-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
Yespacios (ç) insertados (i) al principio. Esto está asignado aU.["123", " 123", " 123"]Concatene eso con sí mismo girado 90 ° a la derecha (
1tiempo). 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: PUs 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 xaxx? :-)Ruby ,
6155 + 1 = 56 bytesUsa la
-nbandera. Entrada de STDIN.Pruébalo en línea!
fuente
102033su programa imprime728714mientras el valor correcto es729702.02033fue 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
Pes la longitud de la entrada - 1 (es decir,2multiplicada por la representación entera de este2 * 123 = 246) ( ).Al final, sumamos los dos resultados:
285 + 246por lo tanto, obtenemos531cuá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 +-lmindicador 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
-lmpara 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;)-lmes 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.-lmno es requerido porgccel hecho de queglibcno incluye las funciones matemáticas en la biblioteca principal.msvcrt.dlllo hace, por lo que compilar en Windows congcctrabajos 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-lyMath.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
substrexplí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