В Lua:
function f()return 1+f()end f()
необходимо сделать что-то к результату рекурсивного вызова, или иначе оптимизация последнего вызова позволит ему циклично выполняться навсегда. Слабый для гольфа кода, но хороший иметь!
я предполагаю, что и долгие ключевые слова означают, что Lua не будет выигрывать гольф кода в ближайшее время.
Выбирать случайные значения, а затем отбрасывать те, которые вы уже использовали, - плохая идея. Это увеличивает время выполнения, поскольку пул доступных номеров становится меньше, так как вы выбрасываете все больше и больше.
Что вам нужно, так это список в случайном порядке, который я бы реализовал с помощью следующего кода (псевдокод, поскольку это домашнее задание ):
dim n[10] // gives n[0] through n[9]
for each i in 0..9:
n[i] = i // initialize them to their indexes
nsize = 10 // starting pool size
do 10 times:
i = rnd(nsize) // give a number between 0 and nsize-1
print n[i]
nsize = nsize - 1 // these two lines effectively remove the used number
n[i] = n[nsize]
Просто выбрав случайное число из пула, затем заменив его на верхнее число из этого пула и уменьшив размер пула, вы получите перемешивание, не беспокоясь о большом количестве свопов заранее. Это важно, если число велико, так как оно не приводит к ненужной задержке запуска.
Например, рассмотрите следующую лабораторную проверку:
<--------- n[x] ---------->
for x = 0 1 2 3 4 5 6 7 8 9 nsize rnd(nsize) output
--------------------------- ----- ---------- ------
0 1 2 3 4 5 6 7 8 9 10 4 4
0 1 2 3 9 5 6 7 8 9 7 7
0 1 2 3 9 5 6 8 8 2 2
0 1 8 3 9 5 6 7 6 6
0 1 8 3 9 5 6 0 0
5 1 8 3 9 5 2 8
5 1 9 3 4 1 1
5 3 9 3 0 5
9 3 2 1 3
9 1 0 9
Вы можете видеть, что пул уменьшается по мере вашего продвижения и, потому что вы ' Но я категорически не рекомендую использовать его более чем с одним разработчиком.
В книге SVN говорится:
Не соблазняйтесь простой идеей чтобы все ваши пользователи получили доступ к репозиторий напрямую через URL file: //. Даже если репозиторий легко доступен всем через сеть поделитесь, это плохая идея. Он удаляет любые уровни защиты между пользователи и репозиторий: пользователи могут случайно (или намеренно) повредить базу данных репозитория, это становится трудно взять репозиторий в автономном режиме для проверки или обновления, и это может привести к беспорядку проблемы с правами доступа к файлам (см. раздел под названием «Поддержка нескольких Методы доступа к репозиторию ».) Обратите внимание, что это также одна из причин, по которой мы предупреждать о доступе к репозиториям через svn + ssh: // URL - из ценной бумаги точка зрения, это фактически то же самое как локальные пользователи, получающие доступ через file: //, и может повлечь за собой все те же проблемы если администратор неосторожен.
(От: http://svnbook.red-bean.com/en/1.4/svn.serverconfig.choosing.html )
Установка svnserve isn Это не так сложно, и действительно стоит потратить час или два на настройку.
Очевидный недостаток: даже если вы используете RAID, поэтому у вас есть избыточность на дисках, если ваш компьютер будет потерян или украден, вы попадете под удар. Если у вас есть источник, размещенный где-то на сервере, то если либо сервер , либо ваш клиентский компьютер будет украден, у вас будет еще одна копия. (Конечно, если сервер украдут, вы потеряете историю и ветки, но это лучше, чем ничего.)
Я делаю это. Я использую общую папку SVN. Внутри этой папки находятся все мои репозитории Subversion для различных проектов.
Не было никаких проблем. Теперь я размещаю это на массиве RAID 5.
Я должен отметить, что делал это уже более 3 лет.
Я также установил это в корпоративной среде в течение последних 2 лет, где в репозитории было более 200 проверок, а размер превышал 200 МБ.
Раньше я запускал Linux-сервер только для размещения SVN-сервера (я почти всю свою разработку занимаюсь на Windows), но мне надоело, что он воет под моим столом, и я переключился на одиночный- пользовательский SVN, размещенный в Windows. У меня не было проблем (прикоснитесь к дереву), но я стараюсь часто создавать резервные копии всех своих репозиториев SVN, чтобы в лучшем случае я мог потерять работу на несколько дней. Нет необходимости в сложных процедурах резервного копирования, просто купите себе несколько штук флэш-памяти USB и просто скопируйте в них каталоги архива SVN.
Я предлагаю вам быть очень осторожными с разрешениями. Я обнаружил некоторые случайные проблемы в конфигурации соло-разработчика, поэтому, если что-то работает странно, сначала проверьте разрешения и заблокируйте статус репозитория. Если у вас, как и у меня, есть несколько несвязанных проектов, то я создаю каталог для каждого проекта, и в этот каталог я помещаю два подкаталога: SVN, который содержит репо для проекта, и «checkout», который содержит фактическую проверку. Я использую этот подход, потому что у меня есть автоматическое резервное копирование моего домашнего каталога, поэтому я могу создавать резервные копии как проекта, так и его репозитория. В качестве альтернативы,