Решение палиндромной головоломки "Triangle Quest" в Python
Я пытаюсь решить эту головоломку программирования:
вам дано положительное целое число N (0
например, палиндромный треугольник размером 5:
1 121 12321 1234321 123454321
вы не можете взять больше двух строк. Вы должны завершить код используя ровно один оператор печати.
Примечание: использование чего-либо, связанного со строками, даст оценку 0. С помощью больше чем один for-statement даст оценку 0.
Я могу думать только о "тупом" способе сделать это:
for i in range(1, N+1):
print([0, 1, 121, 12321, 1234321, 123454321, 12345654321, 1234567654321, 123456787654321, 12345678987654321][i])
есть ли более элегантное решение?
9 ответов
в итоге я сделал следующее (Спасибо @raina77ow за идею):
for i in range(1, N+1):
print((111111111//(10**(9-i)))**2)
for i in range(1,6):
print (((10 ** i - 1) // 9) ** 2)
вот один лайнер wtf:
f=lambda n:n and[f(n-1),print((10**n//9)**2),range(1,n+1)];f(5)
def palindrome(N):
for i in range(1, N + 1):
print(int('1' * i)**2)
palindrome(int(input()))
- 1 * 1 = 1
- 11 * 11 = 121
- 111 * 111 = 12321
просто потому, что каждое решение, предлагаемое до сих пор, включает range (), который я чувствую, используется в коде Python:
from math import log10
i = 1
while (N > log10(i)): print(i**2); i = i * 10 + 1
Я могу печатать в формате списка, используя ниже:
for i in range(1,5):
print [j for j in range(1,i+1) ], [j for j in range(i-1,0,-1) ]
результат:
[1] []
[1, 2] [1]
[1, 2, 3] [2, 1]
[1, 2, 3, 4] [3, 2, 1]
[1, 2, 3, 4, 5] [4, 3, 2, 1]
for i in range(1,int(input())+1):
print(int((10**i-1)/9)**2)
1 -> ( 10 - 1) / 9 = 1, 1 * 1 = 1
2 -> ( 100 - 1) / 9 = 11, 11 * 11 = 121
3 -> ( 1000 - 1) / 9 = 111, 111 * 111 = 12321
4 -> (10000 - 1) / 9 = 1111, 1111 * 1111 = 1234321
for i in range(2,int(raw_input())+2):
print ''.join(([unicode(k) for k in range(1,i)]))+""+''.join(([unicode(k) for k in range(i-2,0,-1)]))
print ''.join(map(unicode,range(1,i)))+""+''.join(map(unicode,range(i-2,0,-1)))
Я надеюсь, что это поможет.