Kode terpendek untuk menghasilkan keluaran non-periodik tanpa batas

8

Bukan tipuan untuk ini . Pertanyaan itu meminta penghitungan khusus untuk selamanya, sementara pertanyaan ini memungkinkan banyak pendekatan lain.

Tulis program atau fungsi yang, mengingat waktu dan memori yang tak terbatas, akan mencetak keluaran non-periodik yang tak terbatas.

Klarifikasi

  • 'Infinite' berarti solusi terus mengeluarkan sesuatu tanpa input atau operasi lebih lanjut setelah berhasil memulai program atau fungsi.
  • 'Non-periodik' berarti output tidak memiliki kemungkinan akhirnya mengulangi bagian yang sama selamanya (terlepas dari berapa lama periode itu). Contoh dari solusi yang valid akan mencetak angka-angka dari nomor irasional.
  • Solusi acak tidak akan dihitung kecuali Anda dapat membuktikan bahwa itu sesuai dengan persyaratan. Solusi berbasis tanggal / waktu juga mungkin tidak valid jika tidak disimpan dengan presisi sewenang-wenang.

Pemenang

Kode terpendek (dalam byte) menang.

no1xsyzy
sumber
1
Mengenai non-siklik, 1\n12\n123tidak valid?
ATaco
4
Bukan korban penipuan. Meskipun satu metode adalah menghitung selamanya, pertanyaannya di sini adalah untuk menghasilkan angka unik selamanya, tidak secara khusus menghitung selamanya. Bagaimana orang menjawab pertanyaan sebenarnya bukanlah pertanyaan.
Matthew Roh
@ no1xsyzy Saya memilih untuk membuka kembali pertanyaan Anda.
Julian Lachniet
Saya mengedit posting Anda untuk kejelasan. Jangan ragu untuk membatalkan perubahan yang tidak Anda setujui.
Martin Ender
Jadi, apakah ketepatan tak terbatas diperlukan atau tidak? Itu tidak dibuat sangat jelas dalam pertanyaan.
mbomb007

Jawaban:

12

Hexagony , 2 byte

(!

Cobalah online!

Kode sumber yang tidak dilipat terlihat seperti:

 ( !
. . .
 . .

Ini hanya menjalankan dua perintah ini dalam satu lingkaran, yaitu decrement ( () dan print ( !). Oleh karena itu, outputnya adalah:

-1-2-3-4-5-6-7-8-9-10-11-12...

Kita perlu menggunakan decrement daripada increment untuk memastikan bahwa program kembali ke baris pertama (jika nilai memori positif, Hexagony akan berputar antara baris kedua dan ketiga, dan berakhir dalam loop tanpa batas tanpa melakukan apa-apa).

Martin Ender
sumber
1
Apa yang terjadi ketika Hexagony mencapai integer representable terkecilnya?
Adám
1
@ Adám Hexagony menggunakan bilangan bulat presisi arbitrer.
Martin Ender
13

Python 2 , 23 byte

while 1:print id;id=id,

Cobalah online!

Cetakan

<built-in function id>
(<built-in function id>,)
((<built-in function id>,),)
(((<built-in function id>,),),)
((((<built-in function id>,),),),)

dan seterusnya. Mulai dengan fungsi idbawaan, nama variabel pra-inisialisasi terpendek, dan berulang kali mengubahnya menjadi tuple sendiri.

Dalam Python 3, solusi ini satu byte lebih lama karena print(), tetapi byte dapat dipulihkan dari printkeluaran None:

while 1:id=print(id),id

atau

while[print(id)]:id=id,
Tidak
sumber
5

Labirin , 3 byte

#:!

Cobalah online!

Mencetak semua bilangan bulat non-negatif tanpa pemisah:

024681012141618202224262830323436384042...

IP terpental bolak-balik pada kode, jadi ini benar-benar #:!:dalam satu lingkaran:

#  Push stack depth.
:  Duplicate.
!  Print.
:  Duplicate.

Banyak alternatif:

:#!     Prints all positive odd integers.
:)!     Prints all positive integers.
):!     Prints all positive integers.
:(!     Prints all negative integers.
(:!     Prints all negative integers.
Martin Ender
sumber
5

Brachylog , 2 byte

ẉ⊥

Cobalah online!

Ini mencetak semua bilangan bulat yang dipesan oleh besarnya. Ini tidak akan pernah meluap dan mencetak bilangan bulat yang terlihat karena Brachylog menggunakan bilangan bulat tak terikat secara default.

Penjelasan

ẉ      Writeln: the Input is anything, so we label it implicitely to an integer and write it
 ⊥     False: backtrack and try another integer value for the Input
Fatalisasi
sumber
2

> <>, 3 byte

l:n

Menghasilkan aliran angka, dihitung dari 0.

Saya percaya angka yang bertambah tidak berputar ...

Penjelasan:

l mendorong panjang tumpukan ke tumpukan

: duplikat nilai tumpukan teratas di atas tumpukan

n nilai output sebagai angka

Ketika garis selesai, ia kembali ke awal, jadi ia melakukannya lagi, tapi sekarang tumpukan lebih panjang ...

on line

JNF
sumber
2

PHP, 20 byte

for(;;)echo$argc.=0;

Output ini:

101001000100001000001000000100000001000000001000000000...

Jika argumen baris perintah disediakan, output akan berbeda, tetapi masih non-periodik.

Sejauh yang saya mengerti dokumentasi, bahasa itu sendiri tidak membatasi panjang string.

pengguna63956
sumber
2

JavaScript, 26 22 20 byte

for(;;)alert(Date())

(Peringatan: itu jahat)

Matthew Roh
sumber
1
Saya akan merekomendasikan membuatnya sehingga kode ini sehingga tidak memiliki opsi jalankan.
fəˈnɛtɪk
Anda dapat menyingkirkan titik koma pertama dan terakhir:for(n=0;;)alert(n++)
Arnauld
3
@Ahemone Ini tidak akan meluap tetapi pada akhirnya akan macet selamanya di 2 ^ 53 = 9007199254740992.
Arnauld
5
@Arnauld Jadi jawaban ini bukan non-periodik ...
kennytm
2
Anda bisa melakukannya for(;;)alert(Date())selama 20 byte.
ETHproduksi
2

Haskell - 10 byte

print[1..] 

Meskipun dalam ghci Anda cukup mengetik [1 ..] dan itu akan secara otomatis mulai dicetak.

Aneesh Durg
sumber
2

Brainfuck, 13 Bytes, dengan asumsi tidak ada upperbound tetapi output mod 256

+[[->+++.<]>]

output kode char 2 2 4 6 2 4 6 8 10 12 14 16 18 ...

maafkan kode lama cetak loop 0 2 4 6 ... 254,

Brainfuck, 13 12 Bytes (-1 dari Jo King)

+[[>.]<[<]+]

output kode char 0 1 0 1 1 0 1 1 1 0 ...

l4m2
sumber
Mengapa tidak menggabungkan ke [.>].dalam [>.]? +[[>.]<[<]+]cetakan 010110111011110 ...
Jo King
Thanks
l4m2
Apakah Anda memiliki juru bahasa yang memenuhi spesifikasi yang diperlukan untuk membuat ini non-periodik?
Ad Hoc Garf Hunter
esoteric.sange.fi/brainfuck/impl/interp/i.html dengan kode +[[>.]<[<],]dan isi bilah masukan dengan'\1'
l4m2
@WheatWizard Saya tidak tahu tentang yang pertama, tetapi untuk TIO kedua akan menunjukkan kotak untuk 1 dan ruang kosong untuk 0
Jo King
1

Jelly , 3 byte

‘Ȯß

Cobalah online! - memotong output dan memunculkan kesalahan, tetapi akan jauh lebih lama secara lokal (sampai memori habis).

Dengan input nol implisit, program ini terdiri dari satu tautan yang menambah ,, mencetak Ȯ, dan kemudian memanggil dirinya sendiri dengan nilai baru ß,.

Jonathan Allan
sumber
1

MATL, 4 byte

`@tD

Solusi ini menciptakan whileloop yang mendorong indeks loop ke stack, menduplikatnya, mencetak nilai dan kemudian memeriksa bahwa indeks loop tidak nol untuk mengulangi lagi.

Cobalah secara Online!

Suever
sumber
1

RProgN 2 , 13 byte

2{22.`2=2p2}:

Ada banyak pasangan dalam output, dipisahkan oleh baris baru yang semakin sparce.

2{22.`2=2p2}:
2               # Push a two to the stack
 {         }:   # While the top of the stack is truthy
  22.           # Push the value of "2" twice, and concatenate them together.
     `2=        # Set the value of "2" to this.
        2p      # Print the value of "2"
          2     # And push the value of "2"

Yang mencetak 2 ^ n 2d diikuti oleh baris baru untuk setiap iterasi.

Cobalah online!

ATaco
sumber
Saya ingat Anda mengatakan Stacked terlalu bertele-tele? ;)
Conor O'Brien
1

Befunge , 4 byte

1+:.

Cobalah online!

Di Befunge, tumpukan tidak memiliki dasar dan memiliki nol tanpa batas. Yang mengatakan:

1+ menambahkan satu ke atas tumpukan

: menggandakan bagian atas tumpukan

. mencetak nilai ascii dari bagian atas tumpukan sebagai angka

Dan itu berlanjut tanpa batas, karena tidak ada yang @menghentikan eksekusi. Ini sebenarnya salah satu masalah yang dibuat lebih mudah untuk diselesaikan dengan cara befunge bekerja ... aneh.

osuka_
sumber
1
Apakah ada juru bahasa Befunge yang menggunakan bilangan bulat presisi arbitrer?
Martin Ender
1
@ MartinEnder Meskipun tidak sepenuhnya sesuai spesifikasi, saya cukup yakin baik Befungee dan PyFunge menggunakan integer presisi sewenang-wenang untuk sel-sel stack mereka.
James Holderness
@ MartinEnder Maaf, saya seharusnya mencatat itu dalam respons asli. Saya pikir Pyfunge menggunakan bilangan bulat presisi arbitrer, tapi saya akan memastikannya ketika saya kembali ke rumah
osuka_
1

APL (Dyalog APL) , 8 byte

{∇⎕←0⍵}1

{emsp; fungsi anonim ...

 berulang lagi

⎕ ← output ke STDOUT

0 ⍵ daftar dua elemen yang terdiri dari nol dan argumen

} diterapkan pada nomor satu

Ini output (pada baris yang berbeda) [0,1], [0,[0,1]], [0,[0,[0,1]]], dll

Adm
sumber
1

Memproses, 30 29 byte

1 byte disimpan berkat QwerpDerp untuk menggunakan millis()alih-alihframeRate

void draw(){print(millis());}

Terus mencetak jumlah milidetik sejak awal program.

Output sampel:

3573743914054244404574734925085205375585755916...
pengguna41805
sumber
1

C (gcc) , 83 81 byte

*p,*t,*g;f(){for(t=p=malloc(1),g=--t;t<p?putchar(55):(t=g,*p++,putchar(9));t++);}

Pertama mengalokasikan pointer pada heap, fungsi kemudian dihitung ke alamat memori di depan sampai segfault dari *p++, oleh karena itu dibatasi oleh jumlah memori dalam sistem daripada tipe data yang digunakan yang pada akhirnya akan meluap dan mengulangi seri. Mengingat memori tak terbatas dengan kemampuan pengalamatan tak terbatas itu akan berlangsung selamanya.

Cobalah online!

Ahemone
sumber
Lihatlah "Dijawab 1 mnt yang lalu oleh Ahemone", dan sangat senang karena saya langsung tahu itu adalah jawaban C!
Albert Renshaw
@AlbertRenshaw Saya senang Anda menikmatinya. Namun saya baru sadar, saya harus melakukan dereferensi p++untuk membuat klaim.
Ahemone
65 byte
ceilingcat
1

7 , 2 byte

Karakter yang membentuk program ini adalah:

240223

Saat melihat file dalam editor, kemungkinan akan mencoba menafsirkannya sebagai ASCII, dalam hal ini terlihat seperti ini:

P$

Cobalah online!

Program mengambil input. Saya berasumsi di sini bahwa inputnya ada pada EOF; jika Anda memberikan input, kemungkinan itu akan macet.

Penjelasan

Iterasi nol

240223
240223 Tambahkan 240223 ke elemen tumpukan atas

Seluruh program di sini pasif, sehingga akan menambahkan versi aktifnya sendiri ke elemen tumpukan teratas (yang awalnya kosong). Program ini dalam loop implisit, yang mengevaluasi elemen tumpukan atas (sambil meninggalkannya di tumpukan) setiap iterasi. Jadi versi aktif akan berjalan. (Hampir semua 7 program mulai seperti ini.)

Iterasi pertama

240223 
2        Menyalin elemen tumpukan atas
  40      Melarikan diri dari elemen tumpukan kedua, menukarnya ke atas
    2     Menyalin elemen tumpukan atas
     23   Output elemen tumpukan atas

Sebelum perintah output, tumpukan berisi dua salinan 240223(yaitu pasif). Yang teratas mendapat output (tanpa efek yang bisa diamati selain memilih format output 2, "angka"), yang di bawah tetap dan menjadi program untuk iterasi berikutnya.

Iterasi kedua

240223
240223 Tambahkan 240223 ke elemen tumpukan atas

Sama dengan iterasi nol, kan? Tidak terlalu; stack memiliki konten berbeda. Tumpukan sekarang di 240223bawah .240223240223

Iterasi ketiga

240223 240223 
240223         Menambahkan 240223 ke elemen tumpukan atas
       2        Menyalin elemen tumpukan atas
       40      Melarikan diri dari elemen tumpukan kedua, menukarnya ke atas
          2     Menyalin elemen tumpukan atas
           23   Menghasilkan elemen tumpukan atas

Ini menghasilkan elemen tumpukan yang memiliki tiga 6s-dan-0s lebih banyak daripada 7s-and-1s. Output format 2 mengartikan ini sebagai permintaan untuk memasukkan nomor. Kita membaca EOF, dengan konsekuensi bahwa elemen berikutnya pada stack dikurangi menjadi string yang panjangnya nol. Namun, karena bug (yang tampaknya agak bermanfaat dan dapat dipromosikan ke fitur?), Ini hanya terjadi setelah mulai dijalankan. Tumpukan sekali lagi memiliki dua elemen, di 240223bawah , tetapi versi yang lolos dari elemen teratas ini , sekarang sedang dijalankan.24022324022324022372402236240223240223

Iterasi keempat

7 240223 6 240223240223
 7 240223 6 240223240223 Tambahkan 240223 240223240223 di bagian atas tumpukan

Bagian atas tumpukan adalah string nol panjang, jadi kami pada dasarnya hanya menghapus program yang berakhir di sana.

Iterasi kelima

240.223 240.223.240.223 
240.223               Append 240.223 ke atas tumpukan elemen
       2              Copy atas tumpukan elemen
       40            Escape elemen tumpukan kedua, swapping ke atas
          2           Copy atas tumpukan elemen
           23         Output atas tumpukan elemen
       2        Copy atas tumpukan elemen
       40      Luput kedua stack element, menukarnya ke atas
          2     Salin elemen stack atas
           23   Output elemen stack atas

Ini sangat mirip dengan iterasi ketiga. Namun ada dua perubahan. Pertama, sekarang ada 4 lebih banyak 0s-dan-6s daripada ada 1s-dan-7s, jadi kami akan mencoba untuk memasukkan karakter dari input standar daripada angka. Kami masih mendapatkan EOF, dan akhirnya mengurangi bagian atas tumpukan menjadi string yang panjangnya nol. Selanjutnya, ada kode yang berjalan setelah reduksi, sehingga iterasi berikutnya tidak segera dimulai. Sebaliknya, kami melakukan banyak operasi pada elemen panjang nol itu, berakhir dengan tiga elemen panjang nol. Kami mengeluarkan satu, dua lainnya menghilang (karena ini adalah akhir dari iterasi), dan kami pada dasarnya di mana kami berada di akhir iterasi ketiga.

Iterasi keenam

Program yang kami salin dari atas tumpukan sekarang . Semuanya berfungsi seperti pada iterasi sebelumnya sampai kita mencapai instruksi output pertama (yang pertama ). Ini sekarang memiliki lima 0s-dan-6s lebih banyak daripada 1s-dan-7s, sehingga menetapkan mode di mana instruksi output berikutnya akan diinterpretasikan sebagai permintaan untuk mengubah format output. Ini juga mengarah pada perubahan perilaku yang mencolok; karena tidak ada permintaan input, kami tidak membaca EOF, dan karenanya tidak memicu konsekuensi dari membaca EOF (elemen tumpukan atas yang baru dikosongkan), dan dengan demikian versi yang lolos dari elemen tumpukan asli tetap daripada menjadi dihapus. Ini artinya selanjutnya240223240223240223240223232402tidak lagi menjadi no-op, membuat dua salinan dari elemen stack yang di-escape (yaitu mereka sekarang di-escape-ganda). Kami output satu, mengatur format output ke 7 ("sama dengan input"); format output ini tidak memiliki perintah I / O, dan tidak ada perintah untuk mengubah format, jadi kami akan tetap di dalamnya selama sisa program. Kami juga menampilkan 724022362402232402232402232402236(dalam penyandian yang sama dengan input) ke keluaran standar.

Bagaimanapun, cukup jelas apa yang akan dilakukan program dari titik ini dan seterusnya: ini adalah kombinasi menambahkan berbagai jumlah salinan yang berbeda-beda lolos 240223ke bagian atas tumpukan, keluar dari bagian atas tumpukan, dan mengeluarkan salinan dari bagian atas tumpukan. Dari titik ini dan seterusnya, elemen tumpukan atas tidak pernah dihapus (karena kita tidak pernah membaca EOF), sehingga hanya tumbuh dan tumbuh dan tumbuh. Pelarian berkala memastikan bahwa output tidak pernah berulang (karena itu berarti bahwa setiap iterasi, output pertama dimulai dengan setidaknya satu lebih 7dari itu pada iterasi sebelumnya).


sumber
1

Ohm , 4 byte (CP437)

¼,¡∞

Mencetak variabel penghitung, menambahkannya, dan masuk ke loop tak terbatas! Cukup sederhana.

EDIT (1 Maret '17): Ketika saya sedang dalam proses melakukan beberapa pembaruan lainnya (setelah saya memposting jawaban ini), saya mengubah perilaku . Jawaban yang diperbarui adalah ∞^,.

Nick Clifford
sumber
1

DC "modern" , 9 byte

Memori tak terbatas?
Kemudian tumpukan yang terus tumbuh ok?
] :-)

[zprdx]dx

Berkomentar:

[         # start string constant
 z        #   push current stack depth
  p       #   print TOS without removing
   r      #   swap TOS and NOS
    d     #   duplicate TOS
     x    #   pop TOS and interprete it
      ]   # end string constant, push it
       d  # duplicate TOS
        x # pop TOS and interprete it

Karena menggunakan rperintah, ini tidak akan berjalan pada beberapa DC yang ada.


sumber
0

Ruby, 21 12 byte

loop{p$.+=1}

Cetak semua bilangan asli. Sejauh yang saya mengerti deskripsi masalah, ini harus ok.

GB
sumber
0

PHP, 21 byte

for(;;)echo uniqid();

Pemakaian: php -r "for(;;)echo uniqid();"

Keluarkan ID unik berdasarkan waktu saat ini dalam mikrodetik: 58b3e065e4b4c58b3e065e4b6358b3e065e4b7b58b3e065e4b9458b3e065e4bac58b3e065e4bc458b3e065e4bdc58b3e065e4bf558b3e065e4c0e58b3e065e4c2658b3e065e4c3e58b3e065e4c5658b3e065e4c6f58b3e065e4c8758b3e065e4c9f...

sebagai urutan berkelanjutan dari: 58b3e09390617 58b3e09390651 58b3e0939068a 58b3e093906c3 58b3e093906fc ...

Mario
sumber
Meskipun sangat tidak mungkin, bukan tidak mungkin ini berakhir berulang jika Anda melewati nilai-nilai dengan waktu yang sama persis setelah angka itu membungkus. Tantangannya sangat jelas bahwa seharusnya tidak ada kemungkinan sama sekali bahwa keluarannya bisa berkala.
Martin Ender
@ MartinEnder maksud Anda skrip dapat menampilkan dua nilai berturut-turut yang sama dalam kasus bahwa microtime akan sama untuk dua output? (eksekusi sangat cepat)
Mario
Tidak, saya mendapat kesan bahwa output dari uniqidmemiliki panjang yang tetap. Jadi, jika Anda membiarkan program berjalan cukup lama, string tersebut akan meluap dan mulai dari awal. Kemudian pada beberapa titik akan mencapai waktu awal dan kepala sekolah dapat menampilkan urutan ID yang sama lagi. Yang mengatakan, jika Anda dapat menunjukkan bahwa panjangnya tidak tetap, ini akan baik-baik saja.
Martin Ender
@MartinEnder uniuniqid´ harus menampilkan id berdasarkan waktu saat ini, dalam format ini: 8 karakter pertama adalah waktu unix dan 5 lainnya adalah mikrodetik, jadi saya pikir ini akan berjalan hampir selamanya tanpa limpahan string atau duplikasi. Atau apakah saya melewatkan sesuatu yang jelas? (Aku bukan ilmuwan komputer ...)
Mario
1
Jika panjangnya ditetapkan hingga 13 karakter, ia harus meluap di beberapa titik, karena hanya ada sejumlah nilai yang mungkin.
Martin Ender
0

Perl 6 , 11 byte

say($++)xx*

Mencetak bilangan asli.

Cobalah online!

seseorang
sumber
0

Python 2, 24 byte

Mencetak 9 kali setiap kekuatan 2.

n=9
while 1:print n;n+=n

Cobalah online

mbomb007
sumber
9 kali kekuatan 2? Apakah Anda mencoba untuk menjadi seaneh mungkin? Jika demikian, saya sarankan while n:.
CalculatorFeline
@ CalculatorFeline Itu tidak mengubah output. Tapi ya, saya tidak ingin hanya mencetak setiap bilangan bulat positif. Dengan cara ini menunjukkan bahwa bilangan bulat adalah presisi sewenang-wenang seperti yang dipersyaratkan, karena output tumbuh dengan cepat.
mbomb007
0

Batch, 7 byte

time|%0

Atau:

%random%|%0
Roman Gräf
sumber
Yang terakhir mungkin ulangi, itu menjadi acak
Conor O'Brien
0

Powershell, 19 Bytes

Membosankan menghitung jawaban.

for(){[bigint]$i++}

Versi jawaban yang ditingkatkan dari Count Up Forever

colsw
sumber
0

Bourne Shell, 11 byte

yes date|sh
Tomáš Nesrovnal
sumber
0

TI-Basic, 11 Bytes

While 1
Ans+1
Disp Ans
End
Julian Lachniet
sumber
Apakah Anda tidak mendapatkan kesalahan ketika jumlahnya terlalu besar?
user41805
Saya mengasumsikan memori tak terbatas dalam ukuran float dan presisi.
Julian Lachniet
0

GNU sed , 13 byte

Ini adalah penghitung presisi acak di unary. Itu cara yang bagus untuk mengatakan bahwa saya menambahkan satu 0ke ruang pola dan mencetaknya di setiap iterasi (infinite loop).

:
s:0*:&0:p
b

Setelah beberapa waktu ini biasanya akan mengalami kesalahan alokasi memori dan berhenti mencetak, karena tidak dapat menyimpan lagi ruang pola yang terus berkembang. Itu bukan masalah untuk tantangan ini, karena ingatannya dianggap tidak terbatas.

Cobalah online! (penerjemah ini selanjutnya membatasi sumber daya yang tersedia berdasarkan desain)

Pratinjau keluaran: hanya 5 baris pertama

me@LCARS:/PPCG$ echo | sed -f infinite_non_periodic.sed | head -5
0
00
000
0000
00000
seshoumara
sumber
0

Sesos , 2 byte

SASM

set numout
jmp, put, add 1

SBIN

00000000: c40a                                              ..

Mencetak semua bilangan bulat non-negatif secara berurutan.

Cobalah online!

Dennis
sumber
Apakah ini akan mencapai bilangan bulat maks dan melimpah, atau apakah seso menggunakan arbpreints?
FlipTack
Dengan tidak adanya set maskarahan, Sesos menggunakan integer presisi sewenang-wenang.
Dennis