Mencari Urutan Swapping Rahasia


19

Ini adalah tantangan , utas perampok dapat ditemukan di sini .

Tugas Anda adalah menulis beberapa kode yang menghasilkan urutan OEIS, dan berisi nama urutan dalam kode ( A______) dan menampilkan urutan terpisah kedua ketika nama urutan dalam kode diubah ke nama urutan kedua.

Berikut ini contoh di Haskell yang bekerja untuk A000217 dan A000290 .

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

Cobalah online!

Anda kemudian akan mengungkapkan salah satu dari dua urutan, dan kode menjaga kerahasiaan urutan kedua. Perampok akan berusaha mencari tahu apa urutan tersembunyi itu. Jika perampok berhasil menentukan apa urutan Anda (atau urutan lain yang sesuai dengan kriteria) Anda menjawab retak. Jika tidak ada yang melakukannya dalam seminggu jawaban Anda diposting, Anda dapat menandai jawaban Anda sebagai Aman dan mengungkapkan solusi yang dimaksudkan untuk verifikasi. Jawaban aman tidak dapat dipecahkan.

Input output

Diambil dari sini

Kode Anda dapat berupa fungsi atau program lengkap yang mengambil n melalui metode input standar dan menghasilkan urutan ke- n dari urutan yang diindeks oleh indeks yang disediakan pada halaman OEIS.

Anda harus mendukung semua nilai yang disediakan dalam file OEIS b untuk urutan itu, nomor apa pun yang tidak ada dalam file b tidak perlu didukung.

Mencetak gol

Skor Anda akan menjadi jumlah byte dalam kode Anda, dengan lebih sedikit byte yang lebih baik.


1
Skor Anda akan menjadi jumlah byte dalam kode Anda, dengan lebih sedikit byte yang lebih baik. - Lalu, mengapa ini bukan kode-golf yang ditandai ?
Tn. Xcoder

@ Mr.Xcoder saya lupa. Jangan terlalu banyak membaca hal-hal ini;)
Wheat Wizard

Jadi kode harus menampilkan urutan beberapa panjang (didefinisikan atau tidak?) Atau elemen urutan ke-n?
Dead Possum

@DeadPossum n jangka th .
Tn. Xcoder

@WheatWizard kira saya mencari di tempat lain, tapi monitor. Buruk saya
Dead Possum

Jawaban:



5

Python 3 , 62 byte, A017016 ( Retak )

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

Cobalah online!


Saya mencoba membuatnya
sesederhana

1
@ resmi saya lakukan itu dengan sengaja. Saya ingin membuat ini dikaburkan. Saya tidak terlalu peduli tentang golf, karena Python tidak akan memenangkan kontes kebingungan kode-golf: p
Mr. Xcoder


Omong-omong, apakah itu solusi yang dimaksudkan?
totallyhuman

@totallyhuman Ya, itu adalah solusi yang tidak diinginkan.
Tn. Xcoder

4

Japt , 13 byte ( Retak )

Ada (setidaknya) satu solusi lain, jika ada orang lain yang mau menikamnya.

p#A000012uCnG

Cobalah online
A000012


Penjelasan

#diikuti oleh karakter di Japt memberi kita karakter kode dari karakter itu, jadi #A=65, yang kemudian ditambahkan nomornya, memberi kita 65000012atau 65000290.

uadalah metode modulo (berbeda dengan metode modulo %akan selalu mengembalikan angka positif).

The nMetode mengurangi jumlah itu diterapkan untuk dari jumlah berlalu untuk itu. Cdan Gadalah konstanta Japt untuk 11 & 15, masing-masing. Jadi, CnGberi kami 4.

Kami sekarang memiliki 65000012%4=0dan 65000290%4=2. The pMetode menimbulkan jumlah itu diterapkan (dalam hal ini yaitu, secara implisit, input bilangan bulat U) dengan kekuatan jumlah berlalu untuk itu, memberikan kita 2 rumus akhir U**0dan U**2.



1
@officialaimm: Benar, bagus sekali.
Shaggy

Karena saya tidak tahu Japt, saya berasumsi bahwa kekuatan yang dimunculkan adalah (sum_of_numbers_in_oeis(excluding 'A') + 1)%4. : D
officialaimm

1
@officialaimm: Saya suka melihat perampok memecahkan tantangan dalam bahasa yang mereka tidak tahu :) Saya benar-benar memposting ini dengan harapan bahwa itu akan menjadi seseorang yang tidak terbiasa dengan Japt yang akan memecahkannya.
Shaggy

A020338 juga dapat berfungsi jika input string diizinkan (1-diindeks).
Bubbler

4

MATL , 30 29 byte ( Retak )

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

A077430

Cobalah online!

-1 byte berkat @Sanchises


1
Harus diperbaiki sekarang
Cinaski

1
Sekedar petunjuk: Anda dapat mengganti `3` dengan Iselama 1 byte.
Sanchises

@Sanchises Terima kasih! Tidak tahu Idiinisialisasi ke 3
Cinaski

2
Anda harus memeriksa Tabel 3. Bersama dengan l(satu) dan O(nol), Anda seharusnya hampir tidak perlu menggunakan spasi dalam program MATL Anda. Pada catatan terkait, periksa juga Tabel 7, yang mengandung banyak konstanta standar yang bermanfaat (walaupun waspadalah karena 4X2Z%memiliki steno 1Z%)
Sanchises



3

Python 2, 43 byte, A000079 ( Retak )

Cobalah online

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


@TheLethalCoder Yah .. Ini cocok, tapi bukan yang saya pilih. Saya juga mengedit sebelum komentar Anda, dan itu tidak lagi cocok
Dead Possum

5
Anda mengubahnya setelah memposting? Agak tidak adil.
TheLethalCoder

@TheLethalCoder Saya melakukannya untuk melindungi dari urutan positif palsu ini: C
Dead Possum

1
Saya tidak tahu tentang mengedit entri, tetapi dari aturan di OP, " Jika seorang perampok berhasil menentukan apa urutan Anda (atau urutan lain yang sesuai dengan kriteria) Anda menjawab sudah retak ", hanya FYI.
alleks

3

C #, 75 byte, ( Retak )

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

A000244

Cobalah online!



@ Lynn Apa yang memberikannya? Urutan pertama?
TheLethalCoder

3
Anda mengambil nomor OEIS % 2- sehingga program ini hanya dapat melakukan dua hal , tergantung pada hasilnya: satu untuk 0dan satu untuk 1. Jadi saya menempatkan angka ganjil di tempatnya, dan tantangannya agak retak sendiri.
Lynn

@ Lynn Ah kira, tidak berpikir mengaburkan bagian itu.
TheLethalCoder

2

Python 2 , 53 byte, A000012 [retak]

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

Cobalah online!

Urutan berikutnya adalah A055642 (panjang digit dalam angka desimal). Untuk yang angka dievaluasi sendiri, karena jumlah digit dalam OEIS sama dengan 22; len (...) dengan demikian menghitung panjang aktual dari nomor input untuk 'A055642'. Untuk sekuens A000012 (atau selain A055642. Len akan selalu sama dengan satu, karena bilangan yang dievaluasi adalah '1'.



1

Python 3, 65 byte, A000027, retak

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

Yay aritmatika gila!


Um, A004526, memberikan n=12yang terlihat benar, tetapi hasilnya akan dimatikan oleh satu indeks - apakah saya retak dengan bug atau jatuh untuk ikan merah yang sangat pintar?
Jonathan Allan

Tidak juga; Anda salah mengartikan A004526, yang dengan jelas menyatakan a(n) = floor(n/2); urutan yang tercantum dimulai dengan 0. Namun, itulah solusi yang dimaksudkan.
pppery

Oh ya offsetnya - benar (wah), terima kasih! Baik retak lalu.
Jonathan Allan

1

Smalltalk, 148 byte, aman!

|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

Mengambil integer sebagai input, urutannya berbasis 1.

Urutan kedua yang dimaksud adalah A133020 . Dalam penulisan untuk A018253 adalah tautan ke daftar entri untuk urutan yang terkait dengan pembagi angka . Dalam daftar itu, A133020 berada di bawah kotak kuadrat: 100² . Jika Anda ingin melihat seluruh urutan, masukkan Transcript show: o printString; cr.sebelum ^pernyataan kembali dalam kode.


1

Haskell, 226 byte, aman!

Tidak yakin apakah pintar atau jelek, mungkin keduanya ...

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)

Jadi sekarang ini menghitung A001906 , tetapi seharusnya dapat menghasilkan banyak urutan.

Cobalah online!


Solusi: A131078

Ingin tahu apakah ini terlalu sulit atau tidak ada yang mencoba?

o 1untuk o 6adalah digit nomor seri, madalah daftar operasi. ladalah daftar tak terbatas yang didefinisikan secara rekursif dengan dua nilai pertama yang berasal dari nomor seri dan yang tersisa dihitung dari dua sebelumnya menggunakan operasi tetap dari m. Dalam kasus A001906, definisi dapat disederhanakan

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

(flip(+))adalah (biasanya) sama dengan (+), dan kami mendapatkan definisi bilangan Fibonacci yang terkenal (tapi bukan yang terpendek). Skema rekursi ini dapat secara langsung menghitung A001906, tetapi itu membutuhkan operasi yang lebih rumit daripada yang ada di m. Contoh lain: menggunakan nilai awal 1dan 2dan operasi (*)memberikan seri A000301 . Itu dihitung oleh kode kami ketika nomor seri diganti dengan?103206 .

Akhirnya, fungsi findeks ke dalam daftar l, tetapi hanya setelah beberapa transformasi input. Untuk A001906, bagian tengah dikurangi menjadi (*)2, sehingga kami hanya mendapatkan angka Fibonacci di posisi genap. Bagian yang tepat menjadiflip const 1 , yang merupakan fungsi identitas dan tidak ikut campur lebih jauh.

Untuk solusinya A131078, nilai-nilai mulai dari lyang 1dan 0, dan operasi adalah flip const, yang memungkinkan lmenjadi 1,0,1,0,.... Bagian tengah fmenjadi (flip div 4), menghasilkan 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,.... Ini tampak seperti jawaban yang bagus, tetapi kemudian saya melihat bahwa A131078 dimulai n=1, jadi saya menambahkan bagian yang tepat f, yang di sini adalahflip(-)1 untuk mengurangi satu.

Gagasan saya adalah membuatnya agak dikaburkan dengan menggunakan mdan mengindeks ke dalamnya dengan angka dari angka seri, kemudian menjadi lebih dikaburkan (istilah rumit) untuk membuatnya bekerja (mungkin saya tidak mencari cukup lama untuk alternatif); dan kemudian menjadi lebih membingungkan (bagian kanan dari f) untuk membuatnya benar-benar berfungsi. Masih saya pikir beberapa menebak dan mencoba bisa memecahkannya.


Saya mencoba beberapa urutan dan mereka biasanya memberikan pembagian dengan kesalahan nol, kesalahan eksponen negatif atau hanya berjalan selamanya. Sejujurnya, Haskell membuatku takut , sepertinya tidak bisa membungkus kepalaku, menghabiskan terlalu lama dalam prosedural kurasa.

Jika Anda hanya mencoba, ada masalah tambahan yang bahkan solusinya memberikan kesalahan "indeks negatif" ketika diberikan 0. Itu baik-baik saja karena baru dimulai 1! Mulai dari 1juga harus menghapus beberapa kesalahan "pembagian dengan nol". Saya terkejut dengan contoh-contoh yang berjalan selamanya. Mungkin transformasi indeks menciptakan nilai yang sangat besar dalam kasus ini ...
Christian Sievers


0

Python 3.6, 114 byte, retak

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) mengembalikan nilai ke-n dari urutan untuk n> = 0.

random.choices(s,k)baru dalam Python 3.6, ia mengembalikan kitem yang dipilih sdengan penggantian.


Merasa sangat seperti enkripsi / hashing.
pppery

@pperry - jika itu melanggar aturan, saya akan menghapusnya.
RootTwo


0

Chip , 67 byte, dipecahkan oleh Yimin Rong

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

A000012 . Agak kurang ajar, ya.

Cobalah online!

Menggunakan byte untuk i / o, jadi saya bagus dan membuat pembungkus bashy / pythony.


Urutan alternatif adalah A060843 . Cobalah online untuk input 1..4.

Yimin Rong membungkuk dengan benar, program Chip sesingkat itu hanya bisa menghitung hal-hal yang sangat sederhana. Urutan asli adalah semua milik seseorang, dan urutan alternatifnya adalah nomor berang-berang yang sibuk, yang hanya diketahui 4 berang-berang.

Angka-angka ini,, 1, 6, 21, 107hanya kode-keras untuk input 1..4.

Satu hal yang menarik tentang penggunaan Chip untuk tantangan ini adalah bahwa digit 0- 9bukan angka, tetapi elemen logis. Secara khusus, 0- 7adalah delapan bit yang ditujukan ke kepala stack, dan hadiah potensial adalah bahwa hanya -8 dan9 adalah matikan baca dan tulis. Itu membuat ini sedikit lebih menarik dan lebih membingungkan.

AD muncul, artinya kita hanya memiliki 4 bit untuk mengindeks urutannya. Ini berarti bahwa mungkin ada paling banyak 16 nilai yang berbeda. Bahkan, hanya A- Cyang benar-benar digunakan untuk urutan alternatif, memberikan paling banyak 8 nilai berbeda.

Untuk siapa pun yang mungkin tertarik, ini adalah kode yang sama, dilucuti dari no-ops dan elemen yang tidak digunakan:

.

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

Hanya untuk mengecualikan yang sudah jelas, Anda tidak mencoba menyelinap dalam urutan kosong, misalnya A290000 ? Secara teknis, karena kode Anda tidak mengembalikan apa pun untuk input nol, urutan ini akan cocok!

Ha, ada setidaknya satu nilai di urutan lain :) Juga, saya harus mengatakan, saya merancang ini menjadi 1-diindeks, karena itulah bagaimana OEIS diindeks.
Phlarx

(Nevermind, saya menemukan contoh tandingan. Kode saya masih 1-diindeks.)
Phlarx

Jadi saya melakukan beberapa pencarian lagi, dan tidak melakukan apa pun adalah kesalahan python. Itu tidak memberikan output nol, jadi kode saya tidak pernah berjalan. Saya telah memperbaikinya di tautan TIO sekarang. (Berikan bit-panjang lantai 1 byte).
Phlarx

1
Retak .
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.