Perampok: Substring OEIS Tersembunyi

23

Ini adalah tantangan Polisi dan Perampok. Ini adalah utas perampok. The benang polisi di sini .

Polisi akan memilih urutan apa pun dari OEIS , dan menulis program p yang mencetak bilangan bulat pertama dari urutan itu. Mereka juga akan menemukan beberapa string yang s . Jika Anda memasukkan s di suatu tempat ke p , program ini harus mencetak bilangan bulat kedua dari urutan. Jika Anda memasukkan s + s ke lokasi yang sama di p , program ini harus mencetak bilangan bulat ketiga dari urutan. s + s + s di lokasi yang sama akan mencetak yang keempat, dan seterusnya dan seterusnya. Ini sebuah contoh:

Python 3, urutan A000027

print(1)

String tersembunyi adalah dua byte .

Untaiannya adalah +1, karena program print(1+1)akan mencetak bilangan bulat kedua di A000027, program print(1+1+1)akan mencetak bilangan bulat ketiga, dll.

Polisi harus mengungkapkan urutan, p program asli , dan panjang string yang tersembunyi s . Perampok memecahkan kiriman dengan menemukan string apa pun hingga panjang itu dan lokasi untuk memasukkannya untuk membuat urutan. String tidak perlu cocok dengan solusi yang dimaksudkan untuk menjadi celah yang valid, juga tidak lokasi di mana dimasukkan.

Jika Anda memecahkan salah satu jawaban polisi, posting solusi Anda (dengan string dan lokasi tersembunyi terungkap) dan tautan ke jawabannya. Kemudian komentari jawaban polisi dengan tautan ke celah Anda di sini.

Aturan

  • Solusi Anda harus berfungsi untuk nomor apa pun dalam urutan, atau setidaknya hingga batas yang wajar jika gagal karena batasan memori, integer / stack overflow, dll.

  • Perampok yang menang adalah pengguna yang memecahkan sebagian besar pengiriman, dengan tiebreak yang mencapai jumlah celah pertama.

  • Polisi menang adalah polisi dengan string terpendek s yang tak retak. Tiebreak adalah terpendek p . Jika tidak ada pengiriman yang tidak terputus, polisi yang memiliki solusi tidak terpecahkan untuk kemenangan terlama.

  • Agar dinyatakan aman, solusi Anda harus tetap tidak retak selama 1 minggu dan kemudian memiliki string tersembunyi (dan lokasi untuk memasukkannya) terungkap.

  • s mungkin tidak bersarang, itu harus digabungkan ujung ke ujung. Sebagai contoh, jika s adalah 10, setiap iterasi akan pergi 10, 1010, 101010, 10101010...daripada10, 1100, 111000, 11110000...

  • Semua solusi kriptografi (misalnya, memeriksa hash dari substring) dilarang.

  • Jika s berisi karakter non-ASCII, Anda juga harus menentukan penyandian yang digunakan.

DJMcMayhem
sumber

Jawaban:

13

Python 2 , urut A138147 oleh xnor

Asli:

print 10

Retak:

print "1%s0"%10
      ^^^^^^^

Cobalah online!

hobbs
sumber
3
Kamu mendapatkannya! Itulah solusi yang saya pikirkan. Saya menemukan itu menarik bahwa itu bekerja mengingat %rekan kiri itu.
xnor
Yup, tetapi format string adalah string, dan "1% s0"% "1% s0" adalah "11% s00" yang masih melakukan hal yang kita inginkan terjadi.
hobbs
10

Brain-Flak , A000984 oleh Nitrodon

({({}<>({}))<>}<>){({}<>)<>}<>

Ini hanya 30 byte, tidak yakin apa yang ada dalam benak Nitrodon.

Cobalah online!

Penjelasan

Saya mencoba banyak hal tetapi inilah yang berhasil. Istilah A000984 adalah elemen utama dari segitiga Pascal.

Elemen pusat

Sekarang saya tahu bahwa saya bisa mendapatkannya dengan menjumlahkan diagonal di atas mereka:

Sebagai contoh:

1+3+6+10=20

Jumlah pusat

Dan karena tindakan terakhir dalam program Nitrodon adalah untuk meringkas semua ini tampak seperti kandidat yang baik (lebih seperti saya mencoba banyak hal tetapi yang ini akhirnya berhasil).

Jadi kami menginginkan program yang mengambil satu jumlah parsial dan menghasilkan yang berikutnya. Untungnya ada cara yang cukup rapi untuk beralih dari yang satu ke yang berikutnya. Setiap baris adalah delta dari baris berikutnya. Itu adalah n th istilah berturut-turut adalah perbedaan antara n th dan n-1 th istilah dalam baris berikutnya.

Rumus baris berikutnya

Masalahnya adalah kita tidak memiliki cukup baris terakhir untuk menghitung baris yang kita inginkan. Karena setiap baris lebih panjang daripada yang terakhir jika kita memiliki baris, kita tidak bisa mendapatkan anggota terakhir dari baris berikutnya dengan metode ini. Namun di sini kita memiliki trik lain, anggota terakhir dari setiap baris sama dengan semua anggota sebelumnya dari baris itu!

1+3+6=10

Formula anggota terakhir

Dan jika Anda terbiasa dengan Brain-Flak yang seharusnya mencuat Anda sebagai sesuatu yang akan sangat mudah dilakukan.

Sekarang untuk kode:

Untuk memulai kita lakukan perhitungan baris berikutnya di mana setiap anggota baru adalah jumlah dari dua anggota lama yang berdekatan. Itu bisa dilakukan dengan:

{({}<>({}))<>}<>

Yang pada dasarnya memindahkan elemen dan menambahkan (tanpa penghapusan) apa yang sudah ada di atasnya. Namun ini membalikkan semuanya jadi untuk kali berikutnya kita mendapatkan baris kita harus mengembalikannya.

{({}<>({}))<>}<>{({}<>)<>}<>

Sekarang kita perlu menghitung anggota baris terakhir. Seperti yang saya katakan sebelumnya ini sangat mudah. Karena kami memiliki loop di atas semua elemen baris, kami bisa mengambil jumlah itu dan mendorongnya. Kami mendorongnya sebelum loop kedua sehingga berakhir di bagian bawah.

({({}<>({}))<>}<>){({}<>)<>}<>

Dan itu saja.

Wisaya Gandum
sumber
1
Bahkan lebih baik dari apa yang ada dalam pikiran saya. Namun, satu koreksi pada penjelasan Anda: untuk beralih dari satu diagonal ke yang berikutnya, Anda menambahkan nomor lama ke nomor baru (menghitung jumlah kumulatif dari diagonal lama), bukan menambahkan dua angka lama.
Nitrodon
Penjelasan @Nitrodon telah diperbaiki. Jika saya telah membaca kode saya sendiri, saya akan dapat melihat bahwa itu salah.
Wheat Wizard
6

Brain-Flak, A000290 , oleh Sriotchilism O'Zaic

Asli:

((()))({}<>)

Retak:

((()))({}([])[]<>)
         ^^^^^^

Cobalah online!

Kalau tidak:

((())([])[])({}<>)
     ^^^^^^

Cobalah online!

jimmy23013
sumber
Itu adalah string tersembunyi saya! tapi itu bukan tempat saya meletakkannya. Pekerjaan yang bagus!
Wheat Wizard
1
@ SriotchilismO'Zaic Maka yang ini pasti yang asli.
jimmy23013
6

MATL , urutan A005206 oleh Luis Mendo

Asli:

voOdoO

Cobalah online!

Retak:

voOdoOdNq17L/k
      ^^^^^^^^

Saya bukan ahli MATL, tetapi dari apa yang saya mengerti, dokumen asli voOdoOmembuat dua array kosong dan sebuah array [0]di stack. inilah [0]yang dicetak tanpa tanda kurung sebagai elemen pertama dari urutan. Retak / solusi kemudian melakukan hal berikut:

  • dmengambil elemen dari stack dan (dengan asumsi itu angka atau array ukuran 1) mengubahnya menjadi array kosong. Array kosong ini tidak bisa dicetak, tetapi berkontribusi pada ukuran tumpukan
  • Nqmenghitung ukuran tumpukan dan mengurangi satu. Ini adalah n+1istilah ketika mengevaluasi fungsi (karena dimulai pada 2 dan meningkat satu iterasi setiap karena dmenambahkan hal-hal yang tidak terlihat ke stack)
  • 17L ini adalah konstanta Phi = (1+sqrt(5))/2
  • /kini melakukan floor((n+1)/Phi)yang merupakan salah satu formula yang menghitung unsur-unsur urutan. Formula ini terdaftar di OEIS a(n) = floor(sigma*(n+1)) where sigma = (sqrt(5)-1)/2kecuali kami menggunakan identitas(sqrt(5)-1)/2 = 1/Phi
SamYonnou
sumber
Saya bukan ahli MATL , saya pikir Anda telah menjadi satu - :) Untuk referensi, string tersembunyi saya adalah \N17L/k&(perhatikan dua penggunaan berbeda &di tengah dan di akhir kode), tetapi solusi Anda lebih sederhana dan lebih anggun
Luis Mendo
5

Python 3 - A__

print(100+-1)

Cobalah online!

100 botol bir, tambahkan -1untuk mendapatkan nomor berikutnya 99, dll.

Giuseppe
sumber
Kalahkan saya 7 detik. :) Juga, aturannya mengatakan menemukan string hingga panjang itu sehingga Anda bisa melakukannya -1saja. Saya akan membuatnya lebih eksplisit.
DJMcMayhem
@DJMcMayhem Saya memang membacanya setelah saya kirimkan, tetapi lebih menyenangkan untuk meletakkan batasan tambahan untuk crack yang mudah :-)
Giuseppe
5

Tong , urutan A000045 , oleh A__

Asli:

0.

Retak:

01":&+.
 ^^^^^

Perhatikan bahwa tantangannya adalah menemukan substring panjang <= 6, tetapi string yang ditemukan memiliki panjang 5.

Definisi perintah untuk mereka yang terlalu malas untuk mencari spesifikasi Tong: 0dan 1mendorong nomor masing-masing ke tumpukan; "memindahkan tumpukan bagian atas ke bagian bawah tumpukan (roll); &muncul tumpukan bagian atas ke register jika kosong, jika tidak mengosongkan register ke tumpukan; +menambahkan dua nilai tumpukan teratas.

Awal 1"hanya menyisipkan 1 di bagian bawah tumpukan. Daftar 1 yang terus bertambah ini hanya berperan dalam iterasi pertama, di mana ia memungkinkan kita untuk menganggap tumpukan dimulai sebagai 1 0bukan hanya 0. Memang, program 10:&+., di mana :&+bagian itu diulang, memiliki perilaku yang sama persis dengan solusi di atas, kecuali bahwa ia tidak memiliki daftar 1 yang tumbuh di bagian bawah.

Karena &digunakan hanya sekali di bagian berulang dan memiliki perilaku bergantian, perilaku 1":&+tergantung pada paritas iterasi.

Sekarang, program ini tidak benar-benar mencetak urutan Fibonacci yang dimulai dengan 0, 1 dari awal; sebenarnya mencetak urutan Fibonacci 1, 0 dari tempat kedua, yaitu dari angka 0. (Ini menghasilkan urutan yang sama.) Mengetahui hal ini, program ini mudah dianalisis:

  • Dalam iterasi pertama, ketiga, ..., negara dimulai sebagai [a, b]dan berakhir sebagai a+b (&=b).
  • Dalam iterasi kedua, keempat, ..., negara dimulai sebagai [b] (&=a)dan berakhir sebagai [b, b+a].

Ini memang menghitung urutan yang diperlukan.

tommeding
sumber
1
Bagus, sekarang ada seseorang yang menggunakan Tong seperti saya.
A
@ A__ Apa string 6-karakter asli Anda? :)
tommeding
Ini sebenarnya sangat mirip dengan string Anda; satu-satunya perbedaan adalah bahwa saya menambahkan :perintah di awal string.
A
Apakah ini string tersisip yang terpendek yang dapat Anda temukan?
A
2
Argh. Saya menemukan ini, tetapi kembali ketika tantangannya adalah <= 4 byte.
Khuldraeseth na'Barya
4

Pyret , urutan A083420 , oleh MLavrentyev

fold({(b,e):(2 * b) + 1},1,[list: 0,0,])
                                  ^^^^

Anda dapat menjalankannya di sini, tetapi saya belum menemukan cara menautkan ke kode. Anda harus menyalin-menempel.

Fungsi yang disediakan mengabaikan argumen kedua. Ini menggandakan yang pertama dan menambahkan satu, yang akan menghasilkan 2^n - 1urutan yang diperlukan diperlukan di sini — yang perlu saya lakukan adalah mengatakan berapa kali untuk melakukan operasi itu, dilakukan dengan mengubah panjang daftar yang dilipat. Untungnya, Pyret tidak mengeluh tentang koma yang tertinggal itu.

Khuldraeseth na'Barya
sumber
4

Python 3 , urut A268575 oleh NieDzejkob

Asli:

from itertools import product
S,F,D=lambda*x:tuple(map(sum,zip(*x))),lambda f,s:(v for x in s for v in f(x)),lambda s:{(c-48>>4,c&15)for c in map(ord,s)}
W=D("6@AQUVW")
print(len(W))

Retak (100 byte):

from itertools import product
S,F,D=lambda*x:tuple(map(sum,zip(*x))),lambda f,s:(v for x in s for v in f(x)),lambda s:{(c-48>>4,c&15)for c in map(ord,s)}
W=D("6@AQUVW");A=-1,1,0;*X,=F(lambda a:(S(a,x)for x in product(A,A)),W);W={p for p in X if 2<X.count(p)<4+({p}<W)}
print(len(W))

Cobalah online!

Dari apa yang saya dapat kumpulkan, kode asli menyiapkan definisi untuk membuat string tersembunyi disingkat mungkin dan kemudian mendefinisikan pola awal Game of Life. String tersembunyi kemudian setara dengan menulis iterasi Game Kehidupan Conway dalam 102 byte.

Untuk keperluan crack ini, Sadalah fungsi yang menjumlahkan elemen-elemen dalam argumennya (yang merupakan iterables) dan Fmenerapkan fungsi yang mengembalikan iterable ke setiap elemen daftar dan menghancurkan semua hasil bersama-sama.

  • ;A=-1,1,0;mengakhiri pernyataan sebelumnya dan menyingkat tupel (-1,1,0) dengan A, yang digunakan sebagai product(A,A)yang memberikan semua tetangga relatif terhadap sel yang diberikan serta sel itu sendiri.
  • *X,=F(lambda a:(S(a,x)for x in product(A,A)),W);membuat daftar baru yang Xmenampung semua tetangga sel Wdan sel dalam Wdiri mereka sendiri dengan menambahkan posisi relatif tetangga ke setiap sel dan menghancurkannya bersama menjadi daftar.
  • W={p for p in X if 2<X.count(p)<4+({p}<W)}Xmemeriksa daftar ini dan menentukan apakah masing-masing sel dalam Xtermasuk dalam set sel dalam iterasi berikutnya. Ini diambil hampir kata demi kata dari golf Game of Life ini .
Liresol
sumber
Saya sangat terkejut oleh jawaban NieDzejkob (string tersembunyi 102 byte!) Sehingga saya bergabung dengan StackExchange untuk mencoba memecahkannya, tetapi ternyata akun baru saya tidak dapat mengomentari kiriman orang lain sehingga saya tidak dapat sepenuhnya mematuhi aturan ( yang salah saya)
Liresol
Selamat datang di CGCC! Saya telah mengomentari jawaban Cop untuk Anda. Saya harap Anda tetap disini!
Jo King
Terima kasih! Saya belum benar-benar mencoba tantangan kode seperti ini tetapi melakukan ini adalah ledakan.
Liresol
Kerja bagus! Saya akan mengungkapkan string yang saya maksudkan ketika saya menemukan waktu.
NieDzejkob
3

Haskell, A014675 oleh Khuldraeseth na'Barya

Kode asli

main=print$uncurry(!!)([2],0)

Dengan substring

main=print$uncurry(!!)                                   ([2],0)
                      $(\(a,n)->(a>>= \e->2:[1|e>1],n+1))

Cobalah online!

nimi
sumber
Itu akan berhasil! Aku flip take[1,2]bukannya lambda batin itu. Kalau tidak identik.
Khuldraeseth na'Barya
1
@ Khuldraesethna'Barya: (`take`[2,1])bahkan satu byte lebih pendek
nimi
Sengatan itu. Mungkin bisa memiliki yang aman ini untuk sentuhan yang lebih lama saya sadari. (`take`)bertemu kesalahan kompilasi, jadi saya pikir (`take`[2,1])juga. :(
Khuldraeseth na'Barya
2

Kalkulator Desktop, A006125 , oleh A__

Asli:

1n

Retak:

1 2lx1+dsx^*n
 ^^^^^^^^^^^

Cobalah online!

Implementasi langsung.

jimmy23013
sumber
String asli saya adalah Sa2Lad1-*2/^, siapa tahu ada yang bertanya tentang itu.
A
2

cQuents , urutan A003617 oleh Stephen

=10#2:pZ
  ^

Cobalah online!

Mulailah dengan angka n + 1 digit terendah, yang diikuti oleh n nol. Yang #2menentukan bahwa hanya istilah kedua dari urutan, yang merupakan definisi urutan yang diterapkan satu kali untuk benih, akan dicetak; definisi urutan ini hanya menemukan dan mengembalikan prime berikutnya.

Khuldraeseth na'Barya
sumber
2

Python 3 - agtoever

from sympy import isprime, primerange
from itertools import count
r=1
r+=1
while isprime(r-2)or r&1<1and r>3:r+=1
print(r)

Cobalah online!

NieDzejkob
sumber
2
Alasan saya bertanya tentang dugaan Goldbach adalah bahwa solusi seperti ini tidak benar jika ada entri genap dalam seri selain 2. Saya pikir ini berfungsi jika Anda tidak dapat mengasumsikan dugaan tersebut, tetapi menggunakan dasar yang sama ide (jangan ragu untuk meninggalkan ini sebagai celah, saya hanya ingin menjadi bertele-tele).
FryAmTheEggman
Solusi yang bagus. Lebih pendek dari milikku. Saya akan memposting milik saya besok (CET). Saya tidak memiliki kode saya saat ini. Solusi saya menggunakan ekspresi generator dan tidak bergantung pada dugaan Gb, tapi itu masih meninggalkan jawaban sebagai golf (dan menurut saya kualifikasi).
agtoever
1
@FryAmTheEggman Ya, bagian "formula" dari OEIS tidak menyebutkan bahwa itu tergantung pada dugaan ... brb dengan bukti;)
NieDzejkob
2

MATL , urutan A000796 oleh Luis Mendo

Asli:

'pi'td1_&:_1)Y$J)

Cobalah online!

Retak:

'pi'td1_&:|SQ_1)Y$J)
          ^^^

Penulis asli secara diam-diam menciptakan array [-7:-1]dan kemudian mengekstraksi dan meniadakan elemen pertama untuk mendapatkannya 7. Dia kemudian menggunakannya untuk mendapatkan digit pi ke-7 yang bulat (yang merupakan 3) dan menyajikannya sebagai digit pertama dari pi. Menambahkan menambahkan |SQmembuat array asli semuanya positif, mengurutkannya, dan menambahkan satu ke semuanya. Ini berarti bahwa setelah semuanya bukannya mendapatkan indeks 7itu mendapatkan indeks -2setelah satu aplikasi,-3 setelah dua aplikasi, dan seterusnya. Ini -penting karena memberitahu Y$fungsi untuk tidak membulatkan angka.

SamYonnou
sumber
String tersembunyi saya! Sudah selesai dilakukan dengan baik!
Luis Mendo
2

Keempat (gforth) , A000042 , oleh NieDzejkob

.( 1)1 .
^^^^^

Cobalah online!

1-byter yang sepele hanya memperluas literal. Masalahnya adalah, itu meluap 64 bit sedini digit kesembilan. Perbaikan yang mudah adalah dengan mencetak satu digit berulang kali, bukan? Ya, tapi itu tidak semudah itu. Meskipun menempel1 . ke ujung memang akan mencetak angka tambahan yang kami butuhkan, mereka akan dipisahkan oleh spasi. Itu tidak akan berhasil.

Sekarang, menurut Wikipedia, " .((dot-paren) adalah kata langsung yang mem-parsing string yang dibatasi tanda kurung dan menampilkannya." Untungnya, tampilan itu tidak memiliki karakter aneh lainnya, jadi menggunakan .(untuk mencetak satu 1 sudah cukup. Dan itu benar. Tidak diperlukan spasi setelah paren dekat, jadi lima karakter ini (ada spasi setelah paren terbuka) dapat diulang sesuai dengan isi hati kami. Untuk menunjukkan, saya telah memasukkan dalam TIO contoh yang akan meluap int 64-bit beberapa kali lipat. Bekerja seperti pesona.

Khuldraeseth na'Barya
sumber
Kerja bagus! Itu tepatnya tali saya.
NieDzejkob
2

Unefunge-98 (PyFunge) , urutan A000108 , oleh NieDzejkob

1# 2g1+:2p4*6-*2g/.@
 ^^^^^^^^^^^^^^^^^

Cobalah online!

Diulang enam kali

Dua byte untuk cadangan dari sembilan belas diizinkan! Apa yang tampak sebagai spasi sebenarnya adalah 0x01 karakter Start Of Header.

Penjelasan:

Tantangan ini adalah tentang menghasilkan a(n)dari a(n-1)dan mungkin n. OEIS menyediakan rumus eksplisit a(n) = (2n)!/(n!(n+1)!), yang cukup mudah dikonversia(n) = a(n-1) * (4n-6) / n . Sekarang untuk mengimplementasikan ini di Funge.

Saya harus memasukkan kode antara 1dan .. Itu setengah dari teka-teki yang sudah dilakukan. Yang tersisa hanyalah kode apa yang akan dimasukkan? Funge terutama kurang dalam alat manipulasi tumpukan, sehingga bagian bawah tumpukan tidak dibatasi; Saya perlu melacak keduanya ndana(n) tanpa menumbuhkan tumpukan. Dan bagaimana lebih baik melakukannya daripada dengan ruang Funge?

Karakter 0x01 itu adalah counter saya n. Saya tetap a(n)di stack, karena harus di stack setelah bit saya selesai dieksekusi.

1# 2g1+:2p4*6-*2g/.@
1                       Push 1. This is a(0).
 #                        Skip the next instruction. Without this, I believe the instruction pointer will reverse direction upon encountering 0x01.
   2g                     Push the third character in the source, which starts out as 1.
     1+                   Increment it...
       :                  ...copy it...
        2p                ...and put it back. One copy remains atop the stack.
          4*6-            Multiply by four. Subtract six.
              *           Multiply by a(n), leaving the result alone on the stack.
               2g         Push n again...
                 /        ...and divide our intermediate result by it. Ta-da!
                          At this point, the stack is the same as at the start of the indented block, except the one item has been advanced one place in the sequence.
                          The source of the program has changed; the third character holds the number of times this indented block has run.
                  .@    Print and terminate.
Khuldraeseth na'Barya
sumber
2

V, A000290 , oleh DJMcMayhem

é*Ä2é*Ø.
  ^^^^

menghasilkan kuadrat dari 1.

Cobalah online!

Basis é*memasukkan *dan Ø.menghitung jumlah karakter non-baris baru di seluruh buffer. Penyisipan Ämenduplikasi baris teratas ke barisnya sendiri, yang 2é*disisipkan **. Rangkaian penyisipan menghasilkan angka ganjil berturut-turut dengan yang terbesar di atas. Yang terakhir Ø.berlaku menjumlahkan n angka ganjil pertama, karenanya menghasilkan kuadrat ke-n.

Kritixi Lithos
sumber
Ahh, menjumlahkan angka ganjil, aku tidak memikirkan itu. Baik dilakukan :) Saya mengambil frase angka persegi jauh lebih harfiah denganÄÎé*<CR>
DJMcMayhem
@DJMcMayhem Saya pikir hal yang sama pada awalnya, tetapi mengacaukan sesuatu / mendapat 6 byte, jadi coba pendekatan lain ini terinspirasi oleh konstruksi angka persegi brainflak wiki melalui penjumlahan angka ganjil.
Kritixi Lithos
2

AsciiDots , urutan A019523 oleh Alion

\ +++ /
// \ / \

Sekali!

Dua kali!

Sepuluh kali!

Ketika mencoba mencari tahu bagaimana kode / bahasa bekerja, saya belajar bahwa dua baris pertama dari kode yang ada melakukan semua pekerjaan menghasilkan urutan Fibonacci tanpa batas. Kode berakhir ketika titik apa pun mengenai &, jadi saya hanya perlu menambahkan penundaan lebih lanjut di baris yang tersisa untuk memungkinkan jumlah entri yang sesuai untuk output.

Setelah beberapa percobaan, kesalahan, dan pengamatan, saya menemukan bahwa interval penundaan yang benar adalah 16 unit waktu per angka. Memasukkan karakter yang cukup dalam satu baris sepertinya tidak mungkin, jadi saya harus meletakkan penundaan dalam 2 baris, meninggalkan 10 karakter untuk penundaan yang sebenarnya. Agar pola cocok dengan dirinya sendiri, kedua baris harus memiliki 5 karakter, dan karena tiga karakter tengah berturut-turut dapat dilalui dua kali, ini memberikan 16 unit waktu yang diinginkan.

Persyaratan untuk mencocokkan ini dengan yang ada &di kolom kedelapan sepertinya membuat ini tidak mungkin, sampai saya menyadari bahwa saya bisa mulai dengan baris baru di bagian dalam baris ketiga. Ini membuat baris kedua dari belakang panjang yang tepat, dan menghilangkan ujung baris ketiga yang sekarang-redundan.

Nitrodon
sumber
1
Berikut ini juga berfungsi: \v/v>-----)
SamYonnou
Kerja bagus, kalian berdua. @ SamYonnou lebih dekat ke solusi yang dimaksud . Selain itu, saya senang bahwa proses pemikirannya mirip dengan yang dimaksudkan, meskipun mengarah ke solusi yang berbeda!
Alion
2

Brachylog , urutan A114018 oleh Unrelated String

Program asli:

≜ṗ↔ṗb&w

String untuk disisipkan:

≜ṗ↔ṗẹbb&w
    ^^

Cobalah online!

Penjelasan

Berikut adalah penjelasan pertama dari program aslinya (mengetahui bahwa urutan yang digunakan adalah "prime paling sedikit n-digit yang pembalikan digitnya juga prima")

≜         Assign an integer value to a variable named ? 
            (try 0, then 1, then -1, then 2, etc.)
 ṗ        ? must be prime
  ↔ṗ      The reverse of ? must be prime
    b     Remove the first element of ?
     &    Ignore that we removed that element
      w   Write ? to STDOUT

Seperti yang Anda lihat, program ini cukup mudah kecuali untuk satu hal: ada yang sama sekali tidak berguna b - behead panggilan predikat yang , yang menghilangkan elemen pertama dari kebalikan dari nomor kami, yang dengannya kami tidak melakukan apa pun.

Ini adalah petunjuk yang pasti tentang bagaimana kita dapat menemukan string. Idenya adalah bahwa, karena kita ingin menambah panjang angka dengan 1 digit setiap kali kita menambahkan string, kita membutuhkan string yang "mengevaluasi" panjang angka itu, menggunakan itu tidak berguna b.

Solusinya adalah dengan menggunakan ẹb: pertama, ẹ - elementsakan mengubah angka menjadi daftar angka; lalu, b - beheadakan menghapus elemen pertamanya. Kuncinya adalah itu bakan gagal jika daftar digit kosong. Jadi setiap kali kita menambahkan a b, kita akan menambah panjang angka yang dibutuhkan sebesar 1 (karena akan gagal sampai nilai yang ditentukan? cukup tinggi untuk memuat cukup banyak digit sehingga angka terakhir bditerapkan pada daftar satu digit).

Pengaplikasian ulang setiap waktu tidak memiliki efek karena sudah merupakan daftar angka. Kita hanya perlu sekali di awal karena jika kita memenggal angka seperti 9001bukan daftar digit-nya, kita akan mendapatkan 001 = 1yang kehilangan informasi tentang jumlah digit.

Fatalisasi
sumber
1
Dilakukan dengan sangat baik. Saya bahkan tidak pernah memikirkan 9001b1masalah ini, sebenarnya hanya ternyata meskipun bakan gagal jika daftar digit kosong, itu tidak akan gagal jika Anda tidak pernah benar-benar memiliki daftar, karena angka satu digit dipenggal ke 0, termasuk 0 sendiri .
String Tidak Terkait
1
@UnrelatedString Singkatnya: baneh
Fatalize
2

VDM-SL , A000312 , oleh Data Kedaluwarsa

let m={1|->{0}}in hd reverse[let x=x+1 in x**x|x in set m(1)&x<card m(1)]
                             ^^^^^^^^^^^^^

Karena VDM- letSL'sexpressions dapat mengikat kembali variabel yang sudah terikat dalam lingkup terlampir, x**xdapat dievaluasi secara sewenang-wenang bersarang dalam lingkup di mana xsatu lebih dari dalam lingkup sebelumnya, sedangkan yang asli xmasih kurang dari kardinalitas m(1).

String yang tidak terkait
sumber
Saya mengujinya hingga n = 11 dan itu bekerja dengan baik
String tidak terkait
... itu seharusnya hanya satu nomor. If you insert s somewhere into p, this program must print the second integer from the sequence. If you insert s + s into the same location in p, this program must print the third integer from the sequence. Perhatikan perilaku contoh print(1).
String Tidak Terkait
Ah rip, bisa dimengerti
String tidak terkait
1
Jangan berpikir ini super sepele, masih cukup keren!
Data Kedaluwarsa
1
Gunakan ++untuk memetakan override
Data Kedaluwarsa
2

Haskell , A000045 (Fibonacci) , oleh transformasi Fourier milik Rin

f = head $(flip(:)<*>sum.take 2)[0, 1]
         ^^^^^^^^^^^^^^^^^^^^^^^

Cobalah online!

Tepatnya 23 byte.

Yang ini menyenangkan dan sedikit rumit. 0 dan 1 terbalik membuat saya sedikit sebelum saya menyadari bahwa itu bukan masalah. Kurangnya $dalam aslinya membuat saya mencoba hal-hal samar seperti $...$id(satu byte terlalu lama) sebelum saya sadar bahwa saya bisa membungkus semuanya dalam tanda kurung. Semua dalam semua, puzzle kecil yang bagus.

H.PWiz menunjukkan bahwa pencocokan pola bisa menyelamatkan saya setidaknya lima byte: $(\[x,y]->[y,x+y]). Tantangan pointfree sialan itu membuat saya berpikir pointfree di mana-mana.

Khuldraeseth na'Barya
sumber