Agora que sabemos como fazer corretamente quadrado e triângulo um número, vamos aprender como paralelogramo um. Para paralelogramar um número, primeiro organizamos-o como um paralelogramo, empilhando-o em cima de si várias vezes igual ao número de dígitos que possui e adicionando espaços para torná-lo um paralelogramo. Então 123
formaria:
123
123
123
Agora pegamos cada número horizontal e vertical e os adicionamos 123+123+123+1+12+123+23+3
, que é igual a 531
, que é o paralelogramo de 123
.
Sua tarefa:
Escreva um programa ou função que, ao receber um número como entrada, retorne o paralelogramo do número.
Entrada:
Um número inteiro não negativo ou um número inteiro não negativo representado por uma sequência.
Resultado:
O paralelogramo do número inteiro.
Casos de teste:
1234567 -> 10288049
123 -> 531
101 -> 417
12 -> 39
Pontuação:
Isso é código-golfe , a menor pontuação em bytes ganha!
Respostas:
MATL , 12 bytes
Entrada é uma sequência. Experimente online!
Explicação
Considere a entrada
'123'
como um exemplo.O código duplica a entrada (
t
) e cria uma matriz de identidade (Xy
) de tamanho duas vezes o comprimento da entrada (nE
):depois vira de cabeça para baixo (
P
):A sequência de entrada, interpretada como códigos ASCII dos dígitos, é equivalente ao vetor de linha numérica
A convolução bidimensional em tamanho real (
Y+
) do vetor e da matriz acima forneceA interpretação desses números como códigos ASCII (
c
) fornece a seguinte matriz de caracteres, com char 0 representado como espaço:Transposition (
!
) transforma isso emInterpretar cada linha como um número (
U
) fornece o vetor da coluna numéricae somar (
s
) fornece o resultado final531
,.fonte
Retina , 22 bytes
Experimente online! O link inclui casos de teste. Explicação: O primeiro estágio divide o número de entrada em cada dígito e inclui todos os prefixos exclusivos e sufixos inclusivos, fornecendo os números verticais, além do número de entrada original repetido para cada dígito, fornecendo os números horizontais. Os estágios restantes simplesmente somam os números resultantes.
fonte
05AB1E ,
12 118 bytesI
'm certezasabia que issopodepoderia ser golfed ainda - dicas bem-vindos!-1 byte graças a Erik the Outgolfer (evite envoltórios, mas usando uma concatenação)
e depois ...
-3 mais bytes graças a Adnan (evite a multiplicação pelo comprimento-1 vetorizando a adição e subtraindo a entrada no final)
Experimente online!
Quão?
fonte
«
para concatenar os sufixos e os prefixos:g<*¹.s¹η«O+
.s¹η++Oα
deve trabalhar por 8 bytesHaskell ,
9078767164635957 bytesExperimente online!
fonte
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]
é um cabelo mais curto ainda.g x=sum[x+x`div`10^a+x`mod`10^a|(a,_)<-zip[1..]$show x]
.Casca ,
1312 bytesExperimente online!
Explicação
fonte
Neim , 7 bytes
Cuidado. Contém cobras:
S𝐬𝕤
Experimente online!
fonte
S𝐬𝕤
" Lol ..𝐗𝔻
Python 3 ,
8570 bytesPara a entrada 12345:
Resume fatias da entrada 1 + 2345 + 12345, 12 + 345 + 12345, 123 + 45 + 12345, 1234 + 5 + 12345, usando a indexação de sequência no índice (r) = 1,2,3,4 antes da conversão para o número inteiro e adiciona a 12345 * 2
Agradecimentos especiais para:
-14 Bytes @ Jonathan Allen
-1 Byte @ovs
Experimente online!
fonte
(len(n)+1)
pode ser jogado para-~len(n)
(~x
é-1-x
) e, em seguida, isso pode salvar outro byte usando-i(n)*~len(n)
. Então você pode fazer tudo uma função 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)
Japonês ,
1511 bytes-4 bytes graças a @Shaggy.
Recebe entrada como strings.
Experimente online!
Explicação
Divida a matriz de entrada em dígitos (
¬
) e mapeie por (£
) a seguinte função, onde Y é o índice.["1", "2", "3"]
O valor de entrada (implícito) com
Y
espaços (ç
) inseridos (i
) no início. Isso é atribuído aU
.["123", " 123", " 123"]
Concatene que ele próprio girou 90 ° para a direita (
1
tempo). Então soma (x
).["123", " 123", " 123", " 1", " 12", "123", "23 ", "1 "]
->531
.fonte
Japonês ,
3118 bytes-13 bytes graças a @ETHproductions
Essa abordagem não funciona bem usando o Japt. A solução de Justin é muito melhor.
Explicação:
Experimente online!
fonte
Ul
: PU
s nas funções, e o item do meio da matriz pode ser condensadoUå+ x
, o que eu acho que reduz os 23 bytes.mx x
paraxx
? :-)Ruby ,
6155 + 1 = 56 bytesUsa a
-n
bandeira. Entrada de STDIN.Experimente online!
fonte
102033
seu programa imprime728714
enquanto o valor correto é729702
.02033
foi a questão)JavaScript,
7774 bytesEconomizou 3 bytes graças ao Value Ink
fonte
Pitão ,
2019 bytesMinha abordagem atual do prefixo (espero que seja ainda mais).
Teste o Suite ou tente uma abordagem alternativa com a mesma contagem de bytes .
Explicação
Para entender melhor o conceito, vamos dar um exemplo, digamos
"123"
.Primeiro obtemos os prefixos da entrada. Aqueles são
['1', '12', '123']
.Então, obtemos os prefixos da entrada invertida, ou seja:
['3', '32', '321']
e invertemos cada um, daí obtemos['3', '23', '123']
.Concatenamos as duas listas e convertemos cada elemento em um número inteiro, para obtermos
[3, 23, 123, 1, 12, 123]
.Somando a lista, o resultado é
285
.O produto
P
é o comprimento da entrada - 1 (ou seja2
) multiplicado pela representação inteira dele (2 * 123 = 246
).No final, somamos os dois resultados:
285 + 246
portanto, obtemos531
qual é o resultado correto.Pitão , 20 bytes
Suíte de teste.
Explicação
Explicação a seguir após mais golfe.Por enquanto não consegui jogar golfe ainda mais (tenho idéias).fonte
q / kdb +, 34 bytes
Solução:
Exemplos:
Explicação:
fonte
Geléia , 18 bytes
Experimente online!
fonte
Swift 3 , 213 bytes
Não pode ser testado online, porque é lento e atinge o tempo limite. Você pode experimentá-lo no Swift Playgrounds se desejar testá-lo.
Amostra de execução
Entrada:
Resultado:
fonte
Gelatina , 12 bytes
Experimente online!
Recebe a entrada como uma sequência. Cria o "paralelogramo" como uma matriz de caracteres e avalia cada linha e coluna para obter os números somados.
Explicação
fonte
C (gcc) ,
958481 bytes (78 +-lm
sinalizador do compilador)Oi! Esta é a minha primeira submissão, espero não ter infringido nenhuma regra.
Experimente online!
Sem Golfe, sem avisos:
fonte
-lm
para funções matemáticas é necessário apenas para alguns tempos de execução C, como por exemploglibc
. Compilar, por exemplo, com MinGW (usando Microsoftmsvcrt.dll
), não seria necessário. Não tem certeza se é necessário adicionar aqui? De qualquer forma, se você adicioná-lo, faria 3 bytes;)-lm
é necessário para apow()
função com o gcc. Tentei trabalhar sem ele, mas não consegui encontrar uma solução usando menos de 6 bytes (pow + o sinalizador do compilador). Não consegui encontrar regras sobre como incluir sinalizadores no número de bytes, e sei que fiz uma suposição falsa sobre o-
personagem não estar sendo contado. Estou adicionando um byte de +1 no momento.-lm
não é necessário,gcc
mas pelo fato deglibc
não incluir as funções matemáticas na biblioteca principal.msvcrt.dll
assim, compilando em janelas comgcc
obras sem o-lm
. Isso é óbvio e não tenho muita certeza do que as regras sobre isso realmente têm a dizer.Java 8,
147137126116 116114 bytes-13 bytes (137 → 126 e 116 → 114) graças a @ OlivierGrégoire .
Explicação:
Experimente aqui.
fonte
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;}
. É uma janela deslizante com min-max para reduzir o número de chamadas para o caronew Integer(....substring(...))
Math.max(0,i-l)
para0>i-l?0:i-l
eMath.min(i,l)
parai>l?l:i
. Modificando-o agora. Ah, vejo que você editou seu comentário depois de copiar a resposta de 126 bytes. ;)R ,
168162103 bytes-6 bytes por não usar c ()
-59 bytes graças a @Giuseppe
Experimente online!
Recebe a entrada como uma sequência.
Estou absolutamente certo de que há melhorias a serem feitas, principalmente para alavancar qualquer um dos pontos fortes de R ... mas em um desafio que é basicamente manipulação de cordas, estou lutando para ver como.
Edit: Muito melhor agora que não estou repetindo uma má idéia!
fonte
substr
explicitamente em vez de fazer loop, o que economizaria alguns bytes.Perl 5 , 53 + 1 (-n) = 54 bytes
Experimente online!
fonte
Mathematica, 77 bytes
fonte