Comments 53
Конечно, гуру Python’а скажут “И что тут такого?”, но стоит заметить, что указанный подход не является очевидным для начинающих.
Начинающим такой подход противопоказан.
j=''.join;r=range(1,11);print(j(j(f'{x*y}\t' for x in r)+'\n' for y in r))
Вариант в одну строку с print
UPD: Выкинул квадратные скобки
С использованием точки с запятой неинтересно
(основано на лучшем пока решении habr.com/ru/post/458362/#comment_20345872)
r,_=range(1,11),[print(*[x*y for x in r],sep='\t')for y in r]
Интересно? :)
71
во 2м питоне можно 89, так как скобочки у принта не нужны:
r=range(1,11);print'\n'.join('\t'.join(str(x*y)for x in r)for y in r)
r=range(1,11)
for y in r:print('\t'.join(str(x*y)for x in r))
62 байта в p3, 60 в p2
r=range(1,11);_=[print('\t'.join(str(x*y)for x in r))for y in r]
[63, если допустить непустой результат, как ниже GCU сделал]:
r=range(1,11);[print('\t'.join(str(x*y)for x in r))for y in r]
_=[print(*[str(x*y) for x in range(1,11)],sep='\t') for y in range(1,11)]
r=range(1,11);[print(*[str(x*y)for x in r],sep='\t')for y in r]
for(s='',i=11;i++<121;s+=i%11?'\t'+(i/11|0)*(i%11):'\n');console.log(s);
for(s='',i=11;i++<121;s+=(r=i%11)?'\t'+(i/11|0)*r:'\n');console.log(s);
И кажется подсветка не осилила
for(s='',l=i=11;i++-l*l;s+=(r=i%l)?'\t'+(i/l|0)*r:'\n');console.log(s);
for(s='',l=i=11;i++-l*l;s+=i%l?'\t'+i%l*(i/l|0):'\n');console.log(s)
на 2 символа меньше (без учёта точки с запятой)
for(s='',l=i=11;i++-l*l;s+=i%l?'\t'+i%l*(i/l|0):'\n');s
но не в терминале node
> for(s='',l=i=11;i++<l*l;s+=i%l?'\t'+i%l*(i/l|0):'\n');s
'\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10\n\t2\t4\t6\t8\t10\t12\t14\t16\t18\t20\n\t3\t6\t9\t12\t15\t18\t21\t24\t27\t30\n\t4\t8\t12\t16\t20\t24\t28\t32\t36\t40\n\t5\t10\t15\t20\t25\t30\t35\t40\t45\t50\n\t6\t12\t18\t24\t30\t36\t42\t48\t54\t60\n\t7\t14\t21\t28\t35\t42\t49\t56\t63\t70\n\t8\t16\t24\t32\t40\t48\t56\t64\t72\t80\n\t9\t18\t27\t36\t45\t54\t63\t72\t81\t90\n\t10\t20\t30\t40\t50\t60\t70\t80\t90\t100\n'
for(s='',i=11;i++<121;s+=i%11?'\t'+i%11*(i/11|0):'\n');console.log(s)
как гуру питона я такой код реждекчу на code review. Причина — я ничерта не понимаю что хочет автор. Что делает — понимаю, а что хочет — нет. И это не одно и то же, к сожалению. Если бы было одно и то же, то у нас бы не было багов.
А баг возникнет в тот момент, когда кто-то заменит 11 на чуть большую константу.
>>> print (''.join([''.join([f'{x*y}\t' for x in range(999999, 1000010)])+'\n' for y in range(9,12)]))
8999991 9000000 9000009 9000018 9000027 9000036 9000045 9000054 9000063 9000072 9000081
9999990 10000000 10000010 10000020 10000030 10000040 10000050 10000060 10000070 10000080 10000090
10999989 11000000 11000011 11000022 11000033 11000044 11000055 11000066 11000077 11000088 11000099
Вы уверены, что это таблица умножения?
from itertools import starmap, product
from operator import mul
for i in range(1, 11): print(*starmap(mul, product(range(1, 11), [i])), sep="\t")
Длиннее, зато питонистее :)
Не мог пройти мимо
julia> [x*y for x in 1:10, y in 1:10]
10?10 Array{Int64,2}:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
julia> "[x*y for x in 1:10, y in 1:10]"|>length
30
или юзая линал (транспонирование столбца в строку):
[1:10...].*[1:10...]'
Ладно, то что интерпретатор выводит результат не честно, тогда
["$(prod(["$(x*y) " for x=1:10]))\n" for y=1:10]|>prod|>print
61 символ
Откуда взялось магическое число 60?
Даже в PEP-8 указано 79 символов. Всё что меньше — это уже мазохизм какой-то
Debug.Log(Enumerable.Range(0, 100)
.Select(i => (i / 10 + 1) * (i % 10 + 1) + ((i + 1) % 10 == 0 ? "\n" : "\t"))
.Aggregate("", (a, b) => a + b)
);
++++++++++[>++++++++++<-]>[->+>[-]>[-]++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]>[-]>[<+<+>>-]+<[>-<[-]]>[>-<<<++++++++++>>-]<<[>+>+<<-]>>>+<[>[>+>+<<-]>[<+>-]<<-]>[-]>>[>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<[.[-]<]<[-]<<<<---------->+<[>-<[-]+++++++++.[-]]>[[-]++++++++++.[-]]<<<<]
P.S. Ужимать код не пытался, главное, что вообще работает.
import numpy;x=range(1,11);print(numpy.multiply.outer(x, x))
_=[print('\t'.join(map(str,range(x,x*11,x)))) for x in range(1,11)]
Таблица умножения в одну строку