Я определяю метод объединения последовательности, чтобы означать, что каждое число в последовательности объединяется в виде строки, тогда этот результат становится целым числом.
[1, 2, 3] -> 123
Для каждой конечной последовательности, состоящей по меньшей мере из 3 последовательных целых чисел, пропускающих ровно один элемент в последовательности, и этот пропущенный элемент не может быть первым или последним элементом в последовательности, выведите целое число, полученное из объединенной последовательности. Я называю это «целое число с потерями».
[1, 2, 3] -> {1, 3} (missing an element) -> 13
Эта последовательность целых чисел с одиночными потерями является объединением следующих подпоследовательностей (разбиений?):
Первая подпоследовательность {n, n+2}
является A032607 .
{n, n+2} -> 13, 24, 35, 46, 57, 68, 79, 810, 911, 1012, ...
{n, n+1, n+3} -> 124, 235, 346, ...
{n, n+2, n+3} -> 134, 245, 356, ...
{n, n+1, n+2, n+4} -> 1235, 2346, 3457, ...
{n, n+1, n+3, n+4} -> 1245, 2356, 3467, ...
{n, n+2, n+3, n+4} -> 1345, 2456, 3567, ...
...
for n ∈ ℕ (integers >= 1)
Эти целые числа должны быть напечатаны в порядке возрастания. Первые 25 целых чисел с потерями приведены ниже :
13, 24, 35, 46, 57, 68, 79, 124, 134, 235, 245, 346, 356, 457, 467, 568, 578, 679, 689, 810, 911, 1012, 1113, 1214, 1235, ...
Первые 7597 целых чисел с единичными потерями
Неуправляемые эталонные реализации. Я сделал это, чтобы быть быстрее, а не меньше.
Правила:
- Самый короткий код выигрывает
- Вы можете либо (скажите, какой):
- Напечатайте однозначные числа с потерями навсегда
- Если задано положительное целое число n , выведите или верните первые n элементов в виде списка или строки, разделенной запятыми или пробелами.
- Вы должны поддерживать произвольно большие целые числа, если ваш язык это позволяет, особенно если вы печатаете вечно.
Примечание. Для этой последовательности еще нет записи в OEIS.
Еще одно примечание: я назвал их «Единственными целыми числами с потерями», чтобы в свою очередь могли быть «Двойные целые числа с потерями», «Целые числа с нулевыми потерями», (N + 1) - только целые числа с потерями »и« Целые числа с потерями » "(объединение всех этих).
fastest-code
.Ответы:
Mathematica, 101 байт
Ура! На этот раз у меня самый короткий ответ!
Party[Hard]
источник
Party[_]:=While[True,Print["PARTY!!!"]]
. Аргумент игнорируется, потому что все вечеринки являются вечеринками.Party[Where]
должны печататьHere!
, иParty[When]
должны печататьNow!
, и т. д. Не думайте легко о вечеринках.Party[x_]:=Switch[x,Where,"Here!",When,"Now!",How,Pause[1];"...Really?",_,While [True,Print["PARTY!!!"]]]
Haskell,
131,114, 106 байтЭто ограничено размером
Int
, но его можно легко расширить, заменивInt
наInteger
.Менее гольф:
8 байтов, сыгранных @nimi.
источник
n
?Integer
, это будет продолжаться, пока у вас не кончится память (или терпение). Это будет продолжатьсяInt
, но начнет давать неправильные ответы, как только переполнится (> 2^29-1
).main=print$
что GHCi этого не требует. GHC.io не хватает памяти, а набор функций TryHaskell.org слишком ограничен.Python 3
136127126122 байтоврешение грубой силы, я даже не пытаюсь n = 7000 (это уже 10 секунд для n = 100)
объяснение
Результаты
Спасибо @ mbomb007 и @FricativeMelon за помощь
источник
)
и следующим символом, и вы можете добавитьt=range
в начало программы и заменить всеrange
вызовы функцийt
вызовами. Это должно уменьшить количество байтов.i!=l+k
также может быть заменено наl+k-i
, что сохраняет байт.str(i)for i in r(1+k,j+k)if l+k-i
может быть заменен наstr(i+k)for i in r(1,j)if l-i
, сохраняя 4 байта.Python 3,
319,270, 251 байтПринимает
h
как входные данные из STDIN и печатает массив первыхh
целых чисел с единичными потерями. Это также очень быстро, занимает всего несколько секундh=7000
.Объяснение: Обратите внимание, что если бы у нас было бесконечное время, мы могли бы просто выполнить итерацию по всем
n,k
и для каждой пары отбросить каждое изn+1,n+2,...,n+k-1
(k-1
возможностей) и получить все (бесконечно много) значений из них, а затем просто отсортировать последовательность в порядке возрастания и усечь доh
элементы. Конечно, мы на самом деле не можем этого сделать, но если мы можем достичь точки, в которой первые отсортированныеh
элементы больше не могут изменяться путем добавления значений любых будущихn,k
пар, мы можем просто усечь их и сделать это за конечное время. Для любойn,k
пары у нее есть хотя быfloor(log10(n)+1)*k
цифры, возможно, больше. Итак, давайте сгруппируем эти пары по значениюc(n,k)=floor(log10(n)+1)*k
, где мы гарантируем, что еслиc(a,b)<c(n,k)
мы обработаемa,b
раньшеn,k
. Если у нас есть список отсортирован, и его последний элемент имеетd
цифр, иd<c(n,k)
для следующей, которуюn,k
мы собираемся обработать, мы можем остановиться, так как мы больше не можем получить число с таким количеством или меньшим количеством цифр, поскольку по нашей гарантии мы должны были уже обработать его тогда, и, следовательно, независимо от того, какие числа мы в конечном итоге вычисления, первыеh
элементы не могут измениться, поэтому мы можем просто вернуть их.Так что теперь нам просто нужна функция, которая гарантирует заявленный порядок
c(n,k)
. Для каждогоy
получаемого заc(n,k)
, мы должны обработать все так(n,k)
, чтобыy=c(n,k)
. СкажемL=floor(log10(n)+1)
для некоторыхn
. Поэтому иy=L*k
держись. Начните сk=2,L=y/2
, затемk=3,L=y/3;k=4,L=y/4...k=y,L=1
пропустите нецелые значенияL
. Чтобы создать целуюc(n,k)
функцию, начните с(1,2)
сy=2
, и увеличениеy
на 1 и начать заново всякий раз , когда вы получаетеL==1
. Теперь у нас есть перечисление пар(L,k)
, и оно удовлетворяет нашему условию. Тем не менее, мы должны извлечь все возможноеn
изL
, которые мы делаем, перечисляя все целые числа сL
цифрами. Затем для каждой из этих(n,k)
пар, для каждого изk-1
Из возможных отброшенных элементов мы должны сгенерировать число с потерями, которое мы получим в результате, и добавить его в наш список, который начинается пустым. Затем мы сортируем список и повторяем следующую(L,k)
пару, останавливаясь, когда мы сделали,d<c(n,k)
как указано ранее.Разбивка кода (немного устаревшая):
источник
len(`q[h]`)
должно бытьlen(str(q[h]))
поддерживать произвольные целые числа? Или просто скажите, работает ли он только до определенной границы, поскольку вы берете параметр, а не печатаете вечно.2**63-1
), будет иметьL
конец в конце при использованииrepr
. Обратите внимание, что эта запись, вероятно, очень далеко в последовательности.