Escreva o código mais curto para imprimir a seguinte tabela de multiplicação:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
code-golf
kolmogorov-complexity
matrix89
fonte
fonte
for
loops? Onde está a parte desafiadora (interessante)?for
. Ok, eu usowhile
.Respostas:
Excel,
9291 BytesNa janela imediata do editor VBA, execute o seguinte comando:
Range("A1:I9").Formula="=IF(ROW()<COLUMN(),"""",COLUMN()&""×""&ROW()&""=""&COLUMN()*ROW())"
A saída está diretamente na planilha ativa.I golfed um byte extra, trocando a ordem de um
if
para mudar>=
para<
. Não atualizei a captura de tela, mas ela afeta apenas a fórmula na parte superior, não a saída.fonte
FOR
loop aninhado usual .Python (75)
um pouco melhor do que as outras duas versões do Python.
fonte
C ++,
10698 bytesEu usei dois loops e alguns truques.
fonte
#import <stdio.h> main(){for(int i=0,j;i++-9;j=0)while(j++-i)printf("%dx%d=%d%s",j,i,i*j,j<i?"\n":" ";}
é 3 bytes mais curto.#import
e<cstdio>
?J:
5751 caracteresSem loops.
fonte
([:;"2*\#"2(":@],'x',":@[,'=',":@*,' '"_)"0/~)>:i.9
APL (37)
E não são apenas duas alternativas. No APL, a seguinte construção:
onde
x
ey
são listas, eF
é uma função, aplica-seF
a cada par de itens emx
ey
e dá-lhe uma matriz.Assim:
∆∘.×∆←⍳9
deixa uma tabela de multiplicação de 1 a 9. A função acima gera a cadeia necessária para cada par, isto é(⍕⍺)
, a representação cadeia do primeiro número, seguido por×
, seguido por(⍕⍵)
, representação em cadeia da segunda série, seguido por=
, seguido por⍕⍺×⍵
, contanto que⍺≥⍵
.fonte
Ruby:
6059 caracteresExemplo de execução:
fonte
(1..9).map{
para1.upto(9){
!Perl, 54 caracteres
fonte
APL (Dyalog), 28
Análogo a um loop duplo em outros idiomas
{⍵{...}¨⍳⍵}¨⍳9
configura o loop duplo⍕⍵,'×',⍺,'=',⍺×⍵
cria a string para cada par↑
Converter array de array de strings em uma matriz de picadasResultado
fonte
↑{⍵{⍕⍵'×'⍺'=',⍺×⍵}¨⍳⍵}¨⍳9
ou até mesmo usar o novo "operador principal":{⍕⍵'×'⍺'=',⍺×⍵}¨∘⍳⌸⍳9
Mathematica , 45
Muito chato, mas acho que serve como uma comparação de sintaxe:
fonte
D, 75 caracteres
você acabou de dizer que o código não funciona ou programa completo
fonte
foreach(i,1..10){foreach(j,1..i+1)writef("%dx%d=%d ",i,j,i*j);writeln;}
VBScript (133); sem loops.
A pedido do desafiante: sem loops. Esse código usa chamadas de sub-rotina recursivas.
fonte
Maple, 64
fonte
código de máquina x86_64 (linux),
1759976 bytesIsso é um despejo do arquivo binário e tudo isso tem 175 bytes. Basicamente, ele executa os mesmos dois loops que todas as respostas, mas imprimir no console é um pouco mais difícil e requer basicamente pressionar os caracteres para imprimir na pilha ao contrário e, em seguida, fazer um syscall (específico do linux) para realmente colocar esses caracteres. em stdout.Agora eu otimizei isso para que apenas uma operação de gravação seja executada (mais rápido!) E tenha números mágicos (uau!) E empurrando o resultado inteiro para a pilha para trás antes de fazer a chamada do sistema. Também tirei a rotina de saída porque quem precisa do código de saída adequado?
Aqui está um link para minhas primeira e segunda tentativas, na sintaxe original do NASM.
Congratulo-me com qualquer pessoa que tenha outras sugestões sobre como melhorar. Também posso explicar a lógica com mais detalhes se alguém estiver curioso.
(Além disso, ele não imprime os espaços extras para alinhar todas as colunas, mas, se necessário, posso colocar a lógica ao custo de mais alguns bytes).EDIT: Agora imprime espaços extras e é jogado golfe ainda mais! Está fazendo algumas coisas bem loucas com os registros e provavelmente é instável se esse programa for expandido.
fonte
Javascript, 190 bytes
Cheguei atrasado na festa, mas fiquei impressionado com o comentário de @jdstankosky e decidi adotar uma abordagem diferente. Aqui está uma entrada Javascript que arrasta um modelo e se avalia ao longo do caminho.
Versão sem golfe (versão um pouco mais antiga na qual uma função retorna a tabela em vez de um script alertando-a, mas os mesmos princípios se aplicam):
fonte
Pascal, 128 bytes
Um procedimento recursivo cuida de tudo. Ligue com
m(9,9)
.Ungolfed:
fonte
Fourier,
756632 bytesObrigado @BetaDecay por 124 bytes!
fonte
vba 55
(janela imediata)
nota - o GWBasic precisa apenas de 2 caracteres extras:
fonte
Javascript, 75
Gostaria de saber se algo melhor do que dois (combinado?) Para loops é possível ...
fonte
Coreutils / Bash:
147136135Jogou golfe, usando nova linha explícita e, usando a opção de cabeçalho obsoleta (obrigado manatwork):
Resultado:
fonte
$(( ))
as avaliações aritméticas por$[ ]
; compartilhe 2 caracteres substituindo o$'\n'
caractere de nova linha de escape por um literal (quero dizer,yes '
em uma linha e depois'
na seguinte); poupe 2 caracteres por não usarhead
a-n
opção de explicitamente, just-
e o número.$[ ]
notação, é bom saber. Substituir-n
por-
é apenas um caractere a menos, portanto, são 11 no total, muito obrigado :).LOLCODE, 202 bytes
Ungolfed:
Python para não-leetspeakers:
fonte
c #, 142 bytes
E não é à vista ...
fonte
ForEach
"não é um espetáculo" bem ... xD> <> , 50 bytes
Você pode experimentá-lo no intérprete online .
Observe que há espaços à direita em cada linha, o que pode torná-lo incorreto (o OP não declarou neste ponto neste momento).
fonte
/// , 268 bytes
fonte
JAVA,
103 94 9290 bytesO uso do JShell do Java 9 SDK permite economizar grande quantidade de espaço
Seguindo a sugestão de Kevin, reduzi a solução em 2 bytes.
Graças ao cliffroot, consegui reduzi-lo em mais 1 byte
fonte
int
do segundo loop for e adicioná,j
-lo ao primeiro. Assim como isto:for(int i=0,j;++i<=9;)for(j=1;j<=i;)System.out.print(i+"*"+j+"="+i*j+"\t"+(j++<i?"":"\n"));
++i<=9
comi++<9
C 79 bytes
o principal
a mesa
fonte
Tcl 98 chars
fonte
Javascript: 82 caracteres
fonte
for(i=0,s="";9>i++;){for(j=0;j++<i;)s+=j+"x"+i+"="+j*i+" ";s+="\n"}alert(s)
, no entanto, a coisa de espaços duplos em 2 dígitos não é respeitada, eu estava prestes a enviar esse, mas usando em+(9<i*j?" ":" ")
vez de apenas+" "
editar: no ternário, os espaços duplos desapareceram, mas estão no segundo param4x4
não está diretamente sob5x4
como na tarefa.Python: 87
Estou observando as soluções que outras pessoas postaram e a maioria delas não parece ter o espaçamento correto.
fonte
Python (79)
ou ( 77 ) se eu usar,
range(10)
exceto que produz uma linha vazia no iníciofonte
Perl:
65, 62 caracteresfonte
printf
parênteses do; reposição 1 personagem movendo a atribuição de $ i na expressão intervalo:map{map{printf"%dx%d=%2d ",$_,$i,$_*$i}1..($i=$_);print$/}1..9
.