Dado (por qualquer meio) dois números naturais diferentes (de qualquer tamanho razoável), produza (por qualquer meio) o quadrado de sua soma, como nos exemplos abaixo:
Dados 4 e 3, saída:
12 12 12 12 9 9 9
12 12 12 12 9 9 9
12 12 12 12 9 9 9
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
Dados 1 e 3, saída:
3 9 9 9
3 9 9 9
3 9 9 9
1 3 3 3
O espaço em branco pode variar de acordo com o motivo, mas as colunas devem estar alinhadas à esquerda, alinhadas à direita ou (pseudo-) centralizadas.
Uma nova linha à direita é boa, mas as brechas padrão não são.
Isso é código-golfe, portanto inclua um cabeçalho como # LanguageName, 123
na sua resposta, onde o número é chars (bytes para idiomas que não são baseados em texto). O código de embalagem para caracteres Unicode grandes não é permitido.
Bônus: -3 se seu código gerar apenas um quadrado quando um dos números for 0; por exemplo, dado 0 e 3, saída:
9 9 9
9 9 9
9 9 9
Respostas:
J, 9 bytes - 3 = 6
Inspirado pela resposta do @ NBZ no APL , inspirado no @randomra. Isso define um verbo que recebe uma matriz de números. É usado da seguinte maneira:
Eu também reivindico o bônus de 3 bytes, uma vez que uma entrada 0 produz sub-matrizes de tamanho zero:
Explicação
J tem uma vantagem definitiva nesse desafio. Além de comer problemas de manipulação de matriz no café da manhã, imprime matrizes 2D no formato correto por padrão.
fonte
table flipper
emoticon ASCII (╯ ° □ °) ╯︵ ┻━┻Oitava, 45 bytes - 3 = 42
Explicação
Isso constrói dois vetores (vamos assumir
m = 4
en = 3
):ones(n, 1)
constrói uma matriz de tamanhon x 1
, multiplicando os valores porn
:Em seguida, os vetores são multiplicados de maneira elemento a elemento, com expansão de transmissão automática para que os vetores de 7 elementos produzam uma matriz de 7x7 elementos:
Por exemplo, a multiplicação da primeira linha de
a
porb
fornece:E da mesma forma para as linhas restantes de
a
.Saída:
Você pode tentar aqui no ideone
fonte
s=
. Temos a convenção de que funções anônimas / lambdas não precisam ser armazenadas em uma variável.Dyalog APL , 10-3 = 7
Inspirado * por esta resposta em que os argumentos são replicados e usados em uma tabela de multiplicação:
⎕
Emite um prompt (⎕:
) e avalia qualquer expressão inserida então. (Por motivos de segurança, isso não funciona no TryAPL, mas no NGN / APL .)/⍨
Replica o próprio argumento vezes (/⍨4 3
⇔3 3 3 4 4 4 4
)∘.×⍨
Cria uma tabela de multiplicação.⊖
Vira de cabeça para baixo.Isso funciona em qualquer entrada de comprimento (a entrada é recuada 6 espaços, a saída está na margem esquerda):
* Originalmente, eu tinha uma solução diferente em mente: cada retângulo é criado separadamente, criando uma tabela de multiplicação para cada combinação dos dois argumentos. Em seguida, os quatro quadrados são reparados juntos vertical e horizontalmente. Se parece com isso:
⎕
Prompt, como acima.,⍴×<
Combine (,
) os argumentos e use-os para modelar (⍴
) um retângulo preenchido com seu produto (×
).∘.(
…)⍨
Crie uma tabela em que cada célula seja o que for especificado em(
…)
⊖
Vire verticalmente.⍪⌿
Combine células verticalmente.,/
Combine células horizontalmente.fonte
(|.*/])@#~
R, 31-3 = 28
Explicação:
Isso também funciona para mais de dois números. Por exemplo, a saída para (5,3,2) fica assim:
fonte
cat
ouwrite
ser uma resposta válida.Haskell,
153125 bytes - 3 = 122Metade do código é para formatação de saída. Funciona para números inteiros grandes arbitrários. Exemplo de saída:
Às vezes, há um espaço em branco adicional entre os números, porque estou calculando o espaço necessário com base em
x*x+y*y
vez demax (x*x) (y*y)
, por exemploMas é no máximo um espaço em branco.
fonte
Mathematica 56-3 = 53
Atualização : eu adicionei um segundo método, exatamente do mesmo tamanho de código, que usa uma função nomeada. Emprega um
Array
e não umTable
mas segue a mesma lógica. (Ver abaixo.)Método 1
Isso cria uma tabela de produtos, cujos fatores dependem da linha, valores da coluna. O par de números é inserido como uma lista de números inteiros. Funções anônimas, como as seguintes, são mais úteis se forem usadas apenas uma vez em um programa. Caso contrário, faz mais sentido usar uma função nomeada.
Cada fator é uma instrução If-then:
If[r>#2,#,#2]
significa "Se o número da linha for maior que a segunda entrada, use a primeira entrada como fator, caso contrário, use a segunda entrada.If[c>#,#2,#]
significa "Se o número da coluna for maior que a primeira entrada, use a segunda entrada como fator, caso contrário, use a primeira entrada.Exemplo 1
Exemplo 2
Método 2 (também 56-3 = 53)
Isso funciona de maneira semelhante ao método 1. Mas requer menos código quando chamado. E as células são endereçáveis, ao contrário das células de uma tabela. Este método é melhor usar se a função for usada mais de uma vez.
Os exemplos acima são produzidos pelo seguinte:
Ex 1:
Ex 2:
fonte
Oitava, 34 - 3 = 31
Exemplos:
fonte
repelems
existia. Impressionante!CJam, 27 bytes - 3 = 24
Recebe entrada como uma matriz de estilo CJam. Ele usa um pouco mais de espaçamento do que o necessário, mas acho que está "dentro da razão" e sempre está alinhado corretamente.
Teste aqui.
Explicação
fonte
Função C (usando glibc), 122 bytes - 3 = 119
Implementação principalmente direta com 2 loops. Espero que haja algumas oportunidades de golfe que perdi aqui:
As entradas são passadas nos dois primeiros parâmetros da função, os outros dois são manequins. As colunas estão alinhadas à direita.
Observe que o glibc
puts()
sempre parece retornar o número de bytes escritos, incluindo a nova linha implícita à direita, que é o que precisamos aqui. Não há garantias de que isso funcione com qualquer outra libc.Em um programa completo:
Compile como
gcc sqrbin.c -o sqrbin
(oumake sqrbin
). Os avisos podem ser ignorados com segurança.Exemplo de saída:
fonte
puts()
depende da máquina. São 10 no meu, por exemplo. Além disso, aqui está uma dica: você geralmente pode compactar dois loops em um se incrementar condicionalmente o contador no loop externo. Minha solução demonstra como isso pode ser feito.puts()
código de retorno só é garantido como + ve para o sucesso. No entanto, meus testes com glibc parecem mostrar que o valor de retorno é o número de bytes gravados. Quanto à consolidação do loop - sim, eu conheço essa técnica e tentei isso aqui, até agora sem redução neste caso.Ruby, (133 - 3) = 130 bytes
para 4,3
para 1,3
para 0,3
fonte
1
e um grande número como9999
. Comos
sairá como4
, então você está preenchendo uma largura de,s+3 = 7
mas9999^2
precisa de 8 dígitos. Você pode usar em seu2*s
lugar.rjust
antes de fazerljust
. Você pode reduzirprint
para$><<
(e se livrar do espaço após ele).ARGV
tem um alias$*
. Você pode evitar issoflatten
construindo sua matriz com algo como isto: codegolf.stackexchange.com/a/19493/8478 . Além disso, respostas somente de função são definitivamente permitidas por aqui (mesmo funções sem nome), para que a função possa usar os números inteiros como entradas, e você não precisaria fazer nada.to_i
.Python 2, 176 bytes - 3 = 173
Isso usa funções de string do Python para criar uma grade de caracteres, substitui os caracteres por números inteiros e imprime a saída formatada.
fonte
Matlab, 58 - 3 = 55
Usando uma função anônima:
Exemplo:
(Solução antiga) 59 - 3 = 56
Usando uma função anônima:
fonte
C, (125 - 3) bytes
A entrada é tomada como dois números inteiros separados por espaço na mesma linha. Cada célula é preenchida com espaços para o dobro do comprimento da sequência de entrada.
fonte
Pitão, 39-3 = 36
Pyth não possui formatação matricial incorporada, o que aumenta muito o tamanho, pois é necessário preencher manualmente os números de saída. Aqui está o que eu criei.
Experimente online.
fonte
Blocos , 51 bytes
52628287(não concorrente)Ungolfed:
Tente
fonte