- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
def making_field(size):
field = []
for i in range(size):
field.append([0] * size)
return field
size = 1001
quad = making_field(size)
def print_quad(quad):
for i in range(0,len(quad)):
print '\n'
for y in range(0,len(quad[i])):
c = str(quad[i][y])
if len(c) == 1: c = '00' + c
elif len(c) == 2: c = '0' + c
print c,
def get_new_direction(direction):
if direction == 'right': return 'down'
elif direction == 'down': return 'left'
elif direction == 'left': return 'up'
elif direction == 'up': return 'right'
def making_step_rules(size):
steps = [1]
for i in range(1,size*size):
steps.append(i)
steps.append(i)
return steps
steps = making_step_rules(size)
def making_step(steps):
steps.pop(0)
return steps[0]
def step_by_step(quad, y, x, direction, steps, fill):
if fill-1 == size*size-steps: steps -= 1
if direction == 'right':
for i in range(0,steps):
fill += 1
quad[y][x+i] = fill
x = x + steps - 1
y = y + 1
elif direction == 'left':
for i in range(0,steps):
fill += 1
quad[y][x-i] = fill
x = x - steps + 1
y = y - 1
elif direction == 'up':
for i in range(0,steps):
fill += 1
quad[y-i][x] = fill
y = y - steps + 1
x = x + 1
elif direction == 'down':
for i in range(0,steps):
fill += 1
quad[y+i][x] = fill
y = y + steps - 1
x = x - 1
return fill, y, x
def fill_quad(quad):
fill = 1
x, y = size/2, size/2
direction = 'up'
quad[y][x] = fill
x += 1
while fill < size*size-1:
step = making_step(steps)
direction = get_new_direction(direction)
fill, y, x = step_by_step(quad, y, x, direction, step, fill)
fill_quad(quad)
print 'Sum :' , sum(quad[i][i]+quad[i][(len(quad)-1)-i] for i in range(0,len(quad)))-1
Zuzik 14.04.2016 22:03 # 0
Zuzik 14.04.2016 22:05 # 0
kegdan 15.04.2016 11:43 # +1
https://ideone.com/QbAoIS
guest 14.05.2016 17:22 # 0
3.14159265 14.05.2016 17:41 # +1
Ахахаха.
Особенно учитывая что он не выдаёт правильных ответов, только какие-то вореции.
3.14159265 14.05.2016 17:54 # +1
Просто в мою и wvxvw формулы надо подставлять половину n
n=500; //669171001
12*n+(4*n*(n-1)*(4*n+7))/3 +6*(n+1)*n+1
n=2; //101
12*n+(4*n*(n-1)*(4*n+7))/3 +6*(n+1)*n+1
wvxvw 16.04.2016 12:04 # +2
Т.е. на каждом витке спирали разность увеличивается на 2. Т.о. чтобы получить искомую суму нужно вычислить рекурсию T(n) = T(n - 1) + 4 * (n - 1) * 2, где T(1) = 1.
wvxvw 16.04.2016 14:47 # +1
wvxvw 16.04.2016 14:53 # 0
bormand 16.04.2016 16:11 # 0
З.Ы. Можно вообще в формулу преобразовать и считать за O(1), но я так и не научился ;(
wvxvw 16.04.2016 16:43 # 0
Но проверять влом.
3.14159265 18.04.2016 15:13 # 0
Сумма состоит из сумм арифметических прогрессий 4х членов.
b - основание b0 = 1, b1 = 3, b2 = 13, b3 = 31
Сумма каждой мини-прогресии
sum=b+(b+k)+(b+2*k)+(b+3*k)=4*b+6*k
Следующий шаг (k) на 2 больше предыдущего
kn+1=kn+2
bn+1=bn+3*k+(k+2)=bn+4*k+2
3.14159265 18.04.2016 15:32 # 0
b(0)=3
b(1)=4+6+3=13
b(2)=4*2*2+6*2+3=16+12+3=28+3=31
wvxvw 19.04.2016 22:23 # 0
kegdan 16.04.2016 17:18 # +1
>> Или просто переписать в виде цикла.
http://govnokod.ru/19819#comment321693
wvxvw 16.04.2016 18:02 # +2
3.14159265 18.04.2016 15:17 # 0
3.14159265 18.04.2016 15:25 # 0
3.14159265 18.04.2016 15:50 # +1
3.14159265 18.04.2016 14:35 # 0
O(N)
3.14159265 18.04.2016 14:46 # 0
kegdan 16.04.2016 16:34 # +1
bormand 16.04.2016 16:45 # +3
kegdan 16.04.2016 17:17 # +4
1024-- 16.04.2016 20:13 # +3
Я, конечно, писал мелкие куски кода на обфусцированных C, Haskell и JavaScript, но это сначала были нормальные, понятные программы, которые я последовательными эквивалентными преобразованиями доводил до убожеского состояния.
kegdan 16.04.2016 21:07 # +5
несколько последовательных глаголов
@ - это связка
в порядке выполнения
1 i. - создать список от ноля до n-1
2 ] #~ ] - +:@<.@-:
это сложно. тут глагол двойная вилка, состоящий из 5 глаголов
(a b c d f) x = (a x) b ((c x) d (f x))
2.1 +:@<.@-:
последовательность трех глаголов
-: - разделить на два
<. округлить
+: удвоить
2.2 -
простая разность
2.3 ]
тождественная функция
2.1 -2.3 по сути - обычный mod 2
Может в J есть mod из коробки, но я его не нашел, подскажите кто знает
2.4 #~- выбрать
работает так
то есть 1 взята 0 раз, двойка - один раз и т.д
~ меняет аргументы местами
2.5 ]
тождественная функция
3. +&2
"плюс и два" сложить с двойкой
4 *&4@*: - *&6@<:
тут у нас снова вилка, но уже простая
4.1 *&6@<:
<: - уменьшить на 1
*&6 - умножить на 6
4.2 - простая советская разность
4.3 *&4@*:
*: - в квадрат
*&4 - умножить на 4
5. +/
сумма элементов вектора
6. >:
ну и прибавить 1
вот и все, ребята
3_dar 16.04.2016 22:11 # +4
Просто въебал плюс, и пролистал дальше.
Ты когда большие комменты пишешь, сразу предупреждай что это не вореции.
kegdan 16.04.2016 22:12 # 0
1024-- 16.04.2016 22:25 # +1
А как протекает процесс написания? Похоже на работу с регулярными выражениями? (Написал, пока пишешь, помнишь; отлаживаешь - уже проще переписать)
Или же после какого-то момента начинаешь мыслить в этих букашках, и код легко читается?
kegdan 16.04.2016 22:33 # +2
потом сливаешь кусочки вместе и удивляешь как это оно не наебнулось)
На регулярки не похоже, скорее на хаскель в точечной нотации
kegdan 16.04.2016 22:52 # 0
http://euler.jakumo.org/problems/view/1.html
вот тебе словарь
http://www.jsoftware.com/help/dictionary/vocabul.htm
1024-- 16.04.2016 22:55 # +1
kegdan 16.04.2016 22:57 # 0
В J еще есть крюк
(a b) x = (x) a (b x)
1024-- 16.04.2016 23:06 # 0
Вилки, крюки... А электрическую схему на J можно написать? Скажем, генератор -> фильтр из индуктивности и ёмкости -> динамик. Вместо генератора - какое-то число, которое пускают по двум линиям, кобенируют, пропускают через функцию-конденсатор, пускают как-то число и сконденсированное число в функцию-индуктивность (только куда деть результат?), потом число и сконденсированное число подают на динамик (скажем, сложение и вывод).
kegdan 16.04.2016 23:20 # 0
пример
f =: * (+ %&2)
f 4
24
f 2
6
типа число делим пополам, потом прибавляем исходное число, а потом умножаем на исходное число
если ты об этом
1024-- 17.04.2016 05:32 # 0
kegdan 17.04.2016 07:56 # 0
только так
Слева список глаголов, справа данные. в J глагол не может принимать больше 2 параметров
3.14159265 18.04.2016 23:10 # 0
В юниксе эти идеи с 70х витают, stdin, stdout, piping, кобенации простых вореционных фильтров.
cat x.txt | awk ... | grep vorecii | sed | wc - l
https://en.wikipedia.org/wiki/Unix_philosophy
guest 18.04.2016 23:14 # 0
guest 18.04.2016 23:14 # +1
Алоиз это папа Адика
kegdan 19.04.2016 03:33 # 0
3.14159265 18.04.2016 23:20 # 0
>The Unix philosophy emphasizes building simple, short, clear, modular, and extensible code that can be easily maintained and repurposed by developers other than its creators.
>алоиз
гость ниже сказал
guest 18.04.2016 23:28 # 0
да?
guest 18.04.2016 23:39 # +3
точнее не так:
Unix: мы делаем много маленьких тулзов, каждая из которых отвечает за одну тех. деталь. Одна умеет SMTP, другая умеет файлы парсить, третья еще чего-то.
Windows: мы делаем программу которая решает бизнес-задачу. Exchange помогает обмениваться документами и письмами, Project планировать проекты итд
ps:да, я знаю что sendmail делал много чего, и про systemd тоже в курсе
Но философия такова
3.14159265 18.04.2016 23:46 # +2
Потому грубо говоря
ms-подход: поставил софтину и ищещь в интерфейсе кнопку которая сделает всё хорошо. Приспособить абстрактный ворд, фотошоп или там просмотрщик pdf для других целей, совместить с чем-то непредусмотренным -- варьируется от "трудно" до "невозможно".
unix-подход: миллиона кнопок которые сделают всё как надо нет. если надо сделать, то придётся поебаться/найти чужое.
но зато у тебя есть конструктор. можешь собрать что хочешь.
Опять же не аксиома. Но таков общий тренд.
3_14dar 19.04.2016 15:01 # 0
3_14dar 18.04.2016 23:28 # +1
kegdan 16.04.2016 23:47 # 0
найти числа фибоначи, меньшие заданного
kegdan 16.04.2016 22:18 # +1
и того
3.14159265 18.04.2016 14:38 # +3
В принципе для поехавших математиков, работающих с массивами, если руку набить - вполне удобно.
Реально как регулярки, то что делается 100 строками лапши substringов / indexofов [в случае J это унылые for (i=0)], превращается в быстрые, но нечитабельные пару строк.
Удивляет что крестолюбители и просто хацкелисты не текуют слюной от J.
6a6yuH 24.08.2021 21:46 # 0
guest6 24.08.2021 21:56 # 0
мой любимый ник...
adrnin 24.08.2021 21:57 # 0
guest6 24.08.2021 22:00 # +1
adrnin 24.08.2021 22:01 # 0
guest6 24.08.2021 22:06 # 0
1024-- 24.08.2021 22:14 # 0
guest6 24.08.2021 22:18 # 0
10 minutes mail же, уже прошли
1024-- 24.08.2021 22:19 # 0
guest6 24.08.2021 22:26 # 0