Definiuję metodę łączenia sekwencji, aby każda liczba w sekwencji była konkatenowana jako ciąg znaków, a następnie wynikiem jest liczba całkowita.
[1, 2, 3] -> 123
Dla każdej skończonej sekwencji co najmniej 3 kolejnych liczb całkowitych, brakuje dokładnie jednego elementu w sekwencji, a ten brakujący element może nie być pierwszym lub ostatnim elementem w sekwencji, wypisz liczbę całkowitą wynikającą z połączonej sekwencji. Mówię o tym jako o „liczbie pojedynczej stratnej”.
[1, 2, 3] -> {1, 3} (missing an element) -> 13
Ta sekwencja pojedynczo stratnych liczb całkowitych jest sumą następujących podsekwencji (partycji?):
Pierwsza podsekwencja {n, n+2}
to 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)
Te liczby całkowite muszą być drukowane w kolejności rosnącej. Pierwszych 25 pojedynczych stratnych liczb całkowitych znajduje się poniżej :
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, ...
Pierwsze liczby całkowite 7597 Singly Lossy
Implementacje referencyjne bez golfisty. Sprawiłem, że jest szybszy niż mniejszy.
Zasady:
- Najkrótszy kod wygrywa
- Możesz albo (powiedzieć, który):
- Wydrukuj zawsze stratne liczby całkowite
- Biorąc pod uwagę dodatnią liczbę całkowitą n , wydrukuj lub zwróć pierwsze n elementów jako listę lub ciąg znaków rozdzielany przecinkami lub białymi znakami.
- Powinieneś obsługiwać dowolnie duże liczby całkowite, jeśli Twój język na to pozwala, zwłaszcza jeśli drukujesz w nieskończoność.
Uwaga: Nie ma jeszcze wpisu w OEIS dla tej sekwencji.
Kolejna uwaga: nazwałem je „Singly Lossy Integers”, aby z kolei mogły być „Doubly Lossy Integers”, „N-ly Lossy Integers”, „(N + 1)-Lossy Integers” oraz „Lossy Integers” „(połączenie wszystkich tych elementów).
fastest-code
wyzwanie.Odpowiedzi:
Mathematica, 101 bajtów
Tak! Tym razem mam najkrótszą odpowiedź!
Party[Hard]
źródło
Party[_]:=While[True,Print["PARTY!!!"]]
. Argument jest ignorowany, ponieważ wszystkie imprezy są imprezowe.Party[Where]
powinien drukowaćHere!
,Party[When]
powinien drukowaćNow!
itp. Nie myśl lekko o przyjęciu.Party[x_]:=Switch[x,Where,"Here!",When,"Now!",How,Pause[1];"...Really?",_,While [True,Print["PARTY!!!"]]]
Haskell,
131,114, 106 bajtówTo jest ograniczona przez rozmiar
Int
, ale może być łatwo rozszerzony poprzez zastąpienieInt
zInteger
.Mniej golfa:
8 bajtów golfowanych przez @nimi.
źródło
n
?Integer
, będzie kontynuować, dopóki nie zabraknie pamięci (lub cierpliwości). Będzie kontynuowałInt
, ale zacznie dawać błędne odpowiedzi, gdy się przepełni (> 2^29-1
).main=print$
tego GHCi. W GHC.io zabrakło pamięci, a zestaw funkcji TryHaskell.org jest zbyt ograniczony.Python 3,
136127126122 bajtówrozwiązanie brute force, nawet nie próbuję n = 7000 (to już trwa 10s dla n = 100)
Wyjaśnienie
Wyniki
Dzięki @ mbomb007 i @FricativeMelon za pomoc
źródło
)
i następującym znakiem, możesz dodaćt=range
na początku programu i zastąpić wszystkierange
wywołania funkcjit
wywołaniami. To powinno znacznie zmniejszyć liczbę bajtów.i!=l+k
można również zastąpićl+k-i
, co oszczędza bajt.str(i)for i in r(1+k,j+k)if l+k-i
można zastąpićstr(i+k)for i in r(1,j)if l-i
, oszczędzając 4 bajty.Python 3,
319,270, 251 bajtówPobiera dane
h
wejściowe ze STDIN i wypisuje tablicę pierwszychh
liczb całkowitych bez strat. Jest również bardzo szybki, zajmuje tylko kilka sekundh=7000
.Objaśnienie: Zauważ, że gdybyśmy mieli nieskończony czas, moglibyśmy po prostu iterować wszystkie
n,k
i dla każdej pary upuścić każdą zn+1,n+2,...,n+k-1
(k-1
możliwości) i uzyskać wszystkie (nieskończenie wiele) wartości z tych, a następnie po prostu posortować sekwencję w kolejności rosnącej i skrócić doh
elementy. Oczywiście nie możemy tego zrobić, ale jeśli osiągniemy punkt, w którym pierwsze posortowaneh
elementy nie będą już mogły się zmienić, dodając wartości dowolnych przyszłychn,k
par, możemy po prostu obciąć i wykonać w skończonym czasie. Dla każdejn,k
pary ma co najmniejfloor(log10(n)+1)*k
cyfry, a może nawet więcej. Pozwólmy więc pogrupować te pary według wartościc(n,k)=floor(log10(n)+1)*k
, gdzie gwarantujemy, że jeślic(a,b)<c(n,k)
przetworzymya,b
wcześniejn,k
. Jeśli mamy posortowaną listę, a jej ostatni element mad
cyfry, id<c(n,k)
dla następnejn,k
przetwarzamy, możemy przerwać, ponieważ nie możemy już uzyskać liczby z taką liczbą cyfr lub mniejszą, ponieważ dzięki naszej gwarancji powinniśmy ją już przetworzyć, a zatem bez względu na to, jakie liczby skończymy obliczać, pierwszyh
elementy nie mogą się zmienić, więc możemy je po prostu zwrócić.Teraz potrzebujemy tylko funkcji, która gwarantuje ustaloną kolejność
c(n,k)
. Dla każdegoy
możliwego do uzyskaniac(n,k)
, musimy przetwarzać wszystkie(n,k)
takiey=c(n,k)
. PowiedzmyL=floor(log10(n)+1)
za trochęn
. Dlategoy=L*k
musi trzymać. Zacznij odk=2,L=y/2
, a następniek=3,L=y/3;k=4,L=y/4...k=y,L=1
pomiń wartości inne niż całkowiteL
. Aby wygenerować całąc(n,k)
funkcję, należy zacząć(1,2)
sięy=2
i zwiększyćy
o 1 i uruchomić ponownie, gdy można dostaćL==1
. Teraz mamy wyliczenie par(L,k)
i spełnia nasze warunki. Jednak musimy pobrać wszystkie możliwen
odL
, co robimy przez wyliczanie wszystkich liczb całkowitych zL
cyfr. Następnie dla każdej z tych(n,k)
par, dla każdej zk-1
możliwe usunięte elementy musimy wygenerować liczbę stratną, którą otrzymamy, i dodać ją do naszej listy, która zaczyna się pusta. Następnie sortujemy listę i powtarzamy na następnej(L,k)
parze, zatrzymując się, gdy mamy to jużd<c(n,k)
wcześniej.Podział kodu (nieco przestarzały):
źródło
len(`q[h]`)
powinno byćlen(str(q[h]))
wspieranie dowolnych liczb całkowitych? Lub po prostu powiedz, czy to działa tylko do pewnego ograniczenia, ponieważ bierzesz parametr, a nie drukujesz na zawsze.2**63-1
) będzie miałaL
na końcu wartośćrepr
. Zauważ, że ten wpis jest prawdopodobnie bardzo daleko w sekwencji.