Poszukiwanie sekretnych sekwencji zamiany


19

To wyzwanie dla , wątek rabusiów można znaleźć tutaj .

Twoim zadaniem jest napisanie kodu, który wyprowadza sekwencję OEIS i zawiera nazwę sekwencji w kodzie ( A______) i wyświetla drugą osobną sekwencję, gdy nazwa sekwencji w kodzie zostanie zmieniona na nazwę drugiej sekwencji.

Oto przykład w Haskell, który działa dla A000217 i A000290 .

f x|last"A000217"=='0'=x^2|1>0=sum[1..x]

Wypróbuj online!

Następnie odkryjesz jedną z dwóch sekwencji, a kod utrzymujący drugą sekwencję w tajemnicy. Rabusie spróbują dowiedzieć się, co to jest ukryta sekwencja. Jeśli złodziejowi uda się ustalić, jaka jest twoja sekwencja (lub inna sekwencja spełniająca kryteria), twoja odpowiedź jest łamana. Jeśli nie zrobisz tego w ciągu tygodnia od opublikowania odpowiedzi, możesz oznaczyć ją jako Bezpieczną i ujawnić zamierzone rozwiązanie do weryfikacji. Bezpiecznych odpowiedzi nie można złamać.

Wejście wyjście

Zabrano stąd

Kod może być funkcją lub kompletnym programem, który pobiera n za pomocą standardowej metody wprowadzania i generuje n- ty ciąg sekwencji indeksowany przez podany indeks na stronie OEIS.

Musisz obsługiwać wszystkie wartości podane w plikach OEIS b dla tej sekwencji, dowolna liczba nie w plikach b nie musi być obsługiwana.

Punktacja

Twój wynik będzie liczbą bajtów w kodzie, przy czym mniej bajtów będzie lepszych.


1
Twój wynik będzie liczbą bajtów w kodzie, przy czym mniej bajtów będzie lepszych. - Dlaczego więc nie jest to oznaczone golfem kodowanym?
Pan Xcoder,

@ Mr.Xcoder Zapomniałem. Nie czytaj zbytnio tych rzeczy;)
Wheat Wizard

Więc kod powinien wypisywać sekwencję o określonej długości (zdefiniowanej czy nie?) Lub n-ty element sekwencji?
Dead Possum,

@DeadPossum n- ty termin .
Pan Xcoder,

@WheatWizard zgaduję, że szukałem gdzie indziej, ale monitoruj. Mój zły
Dead Possum

Odpowiedzi:



5

Python 3 , 62 bajty, A017016 ( pęknięty )

n=int(input())
print(sum(1for i in"A017016"if i>"0")*-~n//-~n)

Wypróbuj online!


Próbowałem uczynić to tak zaciemnionym, jak to tylko możliwe ...
Pan Xcoder,

1
@officialaimm Zrobiłem to celowo. Chcę to zaciemnić. Tak naprawdę nie dbam o golfa, ponieważ Python nie wygra konkursu zaciemniania kodu: p
Mr. Xcoder


Nawiasem mówiąc, czy było to zamierzone rozwiązanie?
całkowicie ludzki,

@ totalniehuman Tak, to było rozwiązanie.
Pan Xcoder,

4

Japt , 13 bajtów ( pęknięty )

Jest (co najmniej) jedno inne rozwiązanie, jeśli ktoś inny chce go dźgnąć.

p#A000012uCnG

Wypróbuj online
A000012


Wyjaśnienie

#po którym następuje znak w Japt, podaje nam kod znaków tego znaku, więc do #A=65której reszty liczby dołącza się, podając nam 65000012lub 65000290.

ujest metodą modulo (różni się od %tego, że zawsze zwraca liczbę dodatnią). Metoda odejmuje liczby to nakłada się od numeru przekazany do niego. i są stałymi Japt odpowiednio dla 11 i 15. Tak, daje nam . Teraz mamy i . Metoda budzi numer to stosowaną do (w tym przypadku jest niejawnie, liczba całkowita wejście ) do potęgi liczby przekazany do niego, dając nam ostatecznych formuł 2 a .

nCGCnG4

65000012%4=065000290%4=2pUU**0U**2



1
@officialaimm: Poprawnie, ładnie zrobione.
Kudłaty

Ponieważ nie znam Japt, założyłem, że moc, którą należy podnieść, była (sum_of_numbers_in_oeis(excluding 'A') + 1)%4. : D
officialaimm

1
@officialaimm: Uwielbiam patrzeć, jak złodzieje łamią wyzwania w językach, których nie znają :) Właściwie opublikowałem to z nadzieją, że to ktoś nieznający Japt, kto by to zrobił.
Kudłaty

A020338 może również działać, jeśli dozwolone jest wprowadzanie łańcucha (indeksowane 1).
Bubbler

4

MATL , 30 29 bajtów ( pęknięty )

A077430I\2-|Gw^1Mwx*10&Ylk1+&

A077430

Wypróbuj online!

-1 bajt dzięki @Sanchises


1
Powinien zostać teraz naprawiony
Cinaski

1
Tylko wskazówka: możesz zastąpić „3” przez I1 bajt.
Sanchises,

@Sanchises Thanks! Nie wiedziałem, że Izostał zainicjowany na 3
Cinaski

2
Powinieneś sprawdzić tabelę 3. Wraz z l(jednym) i O(zero) prawie nigdy nie powinieneś używać spacji w swoich programach MATL. W pokrewnej uwadze sprawdź również tabelę 7, która zawiera wiele użytecznych predefiniowanych stałych (choć strzeż się, że np. 4X2Z%Ma skrót 1Z%)
Sanchises



3

Python 2, 43 bajty, A000079 ( pęknięty )

Wypróbuj online

lambda n:((sum(map(ord,'A000079'))*2)%8)**n


@TheLethalCoder Cóż .. Pasuje, ale to nie ten, który wybrałem. Dokonałem również edycji przed twoim komentarzem i już nie pasuje
Dead Possum

5
Zmieniłeś to po opublikowaniu? Trochę niesprawiedliwe.
TheLethalCoder

@TheLethalCoder Zrobiłem to, aby ochronić się przed tą fałszywie dodatnią sekwencją: C
Dead Possum

1
Nie wiem o edycji wpisu, ale z zasad w PO „ Jeśli złodziejowi uda się ustalić, jaka jest twoja sekwencja (lub inna sekwencja spełniająca kryteria), odpowiedź jest łamana ”, po prostu FYI.
alleks

3

C #, 75 bajtów, ( pęknięty )

n=>{int r=1,e=3-0xA000244%2;for(;n>0;e*=e){r*=(n%2>0?e:1);n>>=1;}return r;}

A000244

Wypróbuj online!



@ Lynn Co ci to dało? Pierwsza sekwencja?
TheLethalCoder

3
Bierzesz numer OEIS % 2- więc program może dosłownie tylko dwie rzeczy , w zależności od wyniku: jedna za 0i jedna za 1. Więc umieściłem nieparzystą liczbę na swoim miejscu, a wyzwanie trochę się złamało.
Lynn,

@Lynn Ah przypuszczam, że nie myślałem o zaciemnieniu tej części.
TheLethalCoder

2

Python 2 , 53 bajty, A000012 [pęknięty]

lambda x:len(`x**(sum(map(int,'A000012'[1:]))==22)`) 

Wypróbuj online!

Następna sekwencja to A055642 (długość cyfr w liczbach dziesiętnych). Dla których liczba ocenia się sama, ponieważ suma cyfr w OEIS wynosi 22; len (...) oblicza zatem rzeczywistą długość liczby wejściowej dla „A055642”. W przypadku sekwencji A000012 (lub dowolnej innej niż A055642. Długość zawsze będzie równa jeden, ponieważ obliczona liczba będzie wynosić „1”.



1

Python 3, 65 bajtów, A000027, pęknięty

a=lambda a,n=((int("A000027",11)-0x103519a)%100%30+1)/2:a//(14-n)

Zwariowana arytmetyka!


Um, A004526, daje to, n=12co wygląda dobrze, ale wynik będzie wyłączony przez jeden indeks - czy złamałem się z błędem, czy wpadłem na bardzo sprytnego czerwonego śledzia?
Jonathan Allan

Ani; źle zinterpretowałeś A004526, co wyraźnie stwierdza a(n) = floor(n/2); wymieniona sekwencja zaczyna się od 0. To jest jednak zamierzone rozwiązanie.
pppery

O tak, offset - w prawo (uff), dzięki! Dobrze pęknięty .
Jonathan Allan

1

Smalltalk, 148 bajtów, bezpiecznie!

|x o|x:=(16rA018253*0.00861-1445345)floor. o:=OrderedCollection new. 1 to:x/2 do:[:i|x\\i=0 ifTrue:[o add:i]].o add:x.^o at:stdin nextLine asInteger

A018253

Pobiera na wejściu liczbę całkowitą, sekwencja jest oparta na 1.

Zamierzona druga sekwencja to A133020 . W piśmie dla A018253 znajduje się link do listy pozycji dla sekwencji związanych z dzielnikami liczb . Na tej liście A133020 ma dzielniki kwadratów: 100² . Jeśli chcesz zobaczyć całą sekwencję, wstaw Transcript show: o printString; cr.przed ^kodem instrukcji return .


1

Haskell, 226 bajtów, bezpiecznie!

Nie jestem pewien, czy sprytny czy brzydki, może oba ...

o n=read.pure.(!!n)$"A001906"
m::Integral a=>[a->a->a]
m=[const,(+),(-),(*),div,(^)]++(flip<$>m)
l=o 1:o 3-o 1:zipWith(m!!(o 6+o 3-o 2))(tail l)l
f=(l!!).((m!!(o 4+o 5+o 6-2*o 1-o 2))$sum[1|n<-[1..6],odd(o n)]).((m!!o 6)$o 3)

Więc teraz oblicza to A001906 , ale powinno być w stanie wygenerować wiele sekwencji.

Wypróbuj online!


Rozwiązanie: A131078

Zastanawiasz się, czy to było zbyt trudne, czy nikt nie próbował?

o 1aby o 6to cyfry numeru serii, mjest lista operacji. ljest rekurencyjnie zdefiniowaną nieskończoną listą z pierwszymi dwiema wartościami wyprowadzonymi z numeru serii, a pozostałe obliczone z poprzednich dwóch przy użyciu stałej operacji z m. W przypadku A001906 definicję można uprościć

l=0:1:zipWith(flip(+))(tail l)l

(flip(+))jest (zwykle) taki sam jak (+)i otrzymujemy dobrze znaną (ale nie najkrótszą) definicję liczb Fibonacciego. Ten schemat rekurencji mógłby bezpośrednio obliczyć A001906, ale wymaga to operacji bardziej skomplikowanej niż te w m. Inny przykład: przy użyciu wartości wyjściowych 1i 2oraz działania (*)daje seria A000301 . Jest on obliczany przez nasz kod po zastąpieniu numeru serii ?103206.

Wreszcie funkcja findeksuje się do listy l, ale dopiero po pewnej transformacji danych wejściowych. W przypadku A001906 środkowa część zmniejsza się do (*)2, dzięki czemu liczby Fibonacciego otrzymujemy tylko w pozycjach parzystych. Właściwą częścią staje sięflip const 1 , która jest funkcją tożsamości i nie przeszkadza dalej.

Dla rozwiązania problemu A131078wartości wyjściowe l1a 0, a działanie to flip const, co pozwala lsię 1,0,1,0,.... Środkowa część fstaje się (flip div 4), co powoduje 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,.... Wyglądało to na ładną odpowiedź, ale potem zobaczyłem, że A131078 zaczyna się od n=1, więc dodałem właściwą część f, która tutaj jestflip(-)1 odjęcie jednej.

Mój pomysł polegał na tym, aby nieco go zaciemnić, używając mi indeksując go cyframi z numerów serii, a następnie stał się bardziej zaciemniony (skomplikowane terminy), aby działał (może nie szukałem wystarczająco długo alternatyw); a potem stało się jeszcze bardziej zaciemnione (prawa część f), aby naprawdę działało. Nadal wydaje mi się, że zgadywanie i próby mogły go złamać.


Próbowałem kilku sekwencji i zwykle dały podział przez zero błędów, ujemne błędy wykładnicze lub po prostu wydawały się działać wiecznie. Szczerze mówiąc, Haskell wkurza mnie , po prostu nie wydaje mi się , żeby mnie owijał , chyba zbyt długo spędziłem na procedurach.

Jeśli tylko próbujesz, istnieje dodatkowy problem, że nawet rozwiązanie daje błąd „indeks ujemny”, gdy jest podawany 0. W porządku, bo zaczyna się dopiero 1! Rozpoczęcie od 1powinno również usunąć niektóre błędy „dzielenia przez zero”. Jestem zaskoczony przykładami działającymi wiecznie. Może transformacja indeksu tworzy w tych przypadkach bardzo duże wartości ...
Christian Sievers


0

Python 3.6, 114 bajtów, pęknięty

from random import*
g=lambda n:eval(''.join(Random("A005843").choices('n8-9+17n#8*+26%n1 32-3+4-545*-#6*7',k=34)))

A005843

g(n) zwraca n-tą wartość sekwencji dla n> = 0.

random.choices(s,k)jest nowy w Pythonie 3.6, zwraca kelementy wybrane sz zamiennika.


Poczuj się jak szyfrowanie / mieszanie.
pppery

@ppperry - jeśli jest to niezgodne z zasadami, usunę je.
RootTwo


0

Chip , 67 bajtów, złamany przez Yimin Rong

2D5B#{*Cm49!}E-7
(A000012d#,zkmsh
b-\6/e2)[1Zv^~^S
33a#kcf3g88taz1@

A000012 . Trochę bezczelny, tak.

Wypróbuj online!

Używa bajtów do we / wy, więc byłem miły i zbudowałem bashy / pythony wrapper.


Alternatywna sekwencja to A060843 . Wypróbuj online dla danych wejściowych 1..4.

Yimin Rong zgarbił się w prawo, taki krótki program Chip może obliczyć tylko bardzo proste rzeczy. Oryginalna sekwencja należy do wszystkich, a sekwencją alternatywną są zajęte numery bobrów, z których znane są tylko 4.

Liczby te 1, 6, 21, 107są po prostu na stałe zakodowane dla danych wejściowych 1..4.

Jedną interesującą rzeczą w użyciu Chipa do tego wyzwania jest to, że cyfry 0- 9nie są liczbami, ale elementami logicznymi. W szczególności 0- 7czy osiem bitów odnosi się do wierzchołka stosu, a potencjalnym upominkiem jest to, że tylko -8 i9 to czytać i pisać przełącza. To sprawiło, że stało się to trochę bardziej interesujące i znacznie bardziej zaciemnione.

AD pojawiają się, co oznacza, że ​​mamy tylko 4 bity do indeksowania sekwencji. Oznaczało to, że może być maksymalnie 16 różnych wartości. W rzeczywistości tylko A- Csą używane w alternatywnej sekwencji, dając maksymalnie 8 różnych wartości.

Dla każdego, kto może być zainteresowany, oto ten sam kod, pozbawiony zakazów i nieużywanych elementów:

.

   B  *C 49!
 A000012d ,z  s
b-\6/e   1Zv-~^S
`3a`-cf3g`8taz1

Aby wykluczyć to, co oczywiste, nie próbujesz podkraść się w pustej sekwencji, np. A290000 ? Technicznie, ponieważ twój kod nic nie zwraca na zero, ta sekwencja byłaby zgodna!

Ha, w drugiej sekwencji jest co najmniej jedna wartość :) Powinienem też powiedzieć, że zaprojektowałem ją tak, aby była indeksowana 1, ponieważ w ten sposób indeksowany jest OEIS.
Phlarx,

(Nieważne, znalazłem kontrprzykłady. Mój kod jest nadal indeksowany jako 1).
Phlarx

Zajrzałem więc do tego trochę dalej, a to, że nic nie robię, jest winą Pythona. Nie dawał żadnego wyniku dla zera, więc mój kod nigdy nie działał. Naprawiłem to teraz w łączu TIO. (Dał bitowi długość 1 bajtu).
Phlarx,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.