Cetak semua bilangan bulat


48

Tulis sebuah program atau fungsi yang akan mencetak semua bilangan bulat dengan tepat sekali waktu dan memori yang tak terbatas.

Output yang mungkin bisa:

0, 1, -1, 2, -2, 3, -3, 4, -4, …

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -2, -3, -4, -5, -6, -7, -8, -9, 10, 11, …

Ini bukan output yang valid, karena ini tidak akan pernah menyebutkan angka negatif:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,…

  • Outputnya harus dalam desimal, kecuali bahasa Anda tidak mendukung bilangan bulat desimal (dalam hal ini gunakan representasi alami dari bilangan bulat yang digunakan bahasa Anda).

  • Program Anda harus bekerja dengan angka-angka dengan besarnya terbesar dari tipe integer standar bahasa Anda.

  • Setiap bilangan bulat harus dipisahkan dari yang berikutnya menggunakan pemisah apa pun (spasi, koma, linebreak, dll.) Yang bukan digit atau tanda negatif bahasa Anda.

  • Pemisah tidak boleh berubah kapan saja.

  • Pemisah dapat terdiri dari beberapa karakter, selama tidak ada dari mereka yang merupakan digit atau tanda negatif (mis. Sama validnya dengan adil ,).

  • Setiap bilangan bulat yang didukung pada akhirnya harus dicetak setelah waktu yang terbatas.

Mencetak gol

Ini adalah , jadi jawaban tersingkat dalam byte menang

Papan peringkat


3
Jika bahasa kami mendukung daftar yang tidak terbatas, bisakah kita mengeluarkan daftar dari suatu fungsi daripada mencetak? (Memanggil cetak pada daftar seperti itu akan mencetak elemen-elemennya satu per satu untuk selamanya.)
xnor

5
Saya merasa seperti persyaratan bilangan bulat ukuran arbitrer tidak melakukan apa-apa selain mencegah bahasa tanpa bilangan bulat dari berpartisipasi. Mereka juga harus memiliki impor yang dapat mereka gunakan atau memecahkan tantangan yang sama sekali berbeda dari orang lain.
xnor

2
@ xnor Berubah, meskipun itu semacam reruntuhan nama tantangannya.
Fatalkan

5
@ xnor, bahasa dengan integer presisi sewenang-wenang masih harus menyelesaikan masalah yang berbeda dari orang lain, sehingga semua perubahan yang telah dilakukan adalah membuat masalah ini sepele dalam banyak bahasa.
Peter Taylor

2
@PeterTaylor Ya, ini sangat disayangkan. Solusi pembungkus tidak terasa bagi saya seperti mereka mencetak negatif, tapi saya tidak melihat cara untuk secara tegas menentukan perbedaan ketika itu masalah representasi.
xnor

Jawaban:


19

Sesos , 11 3 3 byte

0000000: c4ceb9                                            ...

Cobalah online! Periksa Debug untuk melihat kode SBIN yang dihasilkan.

Perakitan Sesos

File biner di atas telah dihasilkan dengan merakit kode SASM berikut.

set numout

jmp ; implicitly promoted to nop
    put,   fwd 1
    sub 1, put
    rwd 1, add 1
; jnz (implicit)

bagaimana 3 byte ini?
Semoga bermanfaat

1
Readme pada GitHub (ditautkan dalam header) menjelaskan secara detail bagaimana instruksi dikodekan.
Dennis

1
6 hex digit / 2 = 3 byte @HopefullyHelpful
Stan Strum

@StanStrum, terima kasih
Semoga bermanfaat

47

Haskell, 19 byte

do n<-[1..];[1-n,n]

Menghasilkan daftar tanpa batas [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...

Haskell memungkinkan daftar tak terbatas secara asli. Mencetak daftar semacam itu akan mencetak elemen-elemennya satu kali untuk selamanya.


2
Saya suka [n,1-n]!
flawr

3
IMHO [1-n,n]akan menghasilkan output yang lebih bagus.
Neil

@Neil Saya setuju, mengubahnya.
xnor

2
Ah, itu monadese concatMap (\n -> [1-n, n]) [1..], kan? Bagus!
Carsten S

@ Karsten Ya, tepatnya.
xnor

29

Brainfuck, 6 byte

Ini memanfaatkan pembungkus sel dan mencetak semua nilai yang mungkin. Dalam Brainfuck, representasi integer asli adalah dengan nilai byte .

.+[.+]

Cobalah online!


2
Bagus, ini jawaban Brainfuck terpendek yang pernah saya lihat sejauh ini di PPCG.
Kevin Cruijssen

1
Ini tidak akan berfungsi untuk versi brainfuck dengan sel yang tidak terikat. Silakan perbaiki (bahkan jika sebagai jawaban terpisah)
John Dvorak

16
@JanDvorak Jawaban tidak perlu bekerja di setiap implementasi, hanya di salah satu dari mereka.
Martin Ender

7
Bisakah saya mendapatkan penjelasan mengapa ini valid? Tidak ada pemisah seperti yang disebutkan dalam pertanyaan dan tidak ada yang negatif. Serta fakta bahwa Anda dapat menampilkan nilai lebih besar dari 9 di brainfuck. Saya kurang pengalaman di golf kode dan mulai bekerja pada sesuatu yang output negatif dan positif dipisahkan hingga angka yang lebih tinggi sebelum menjilat.
gtwebb

5
@SQB Bahkan dengan memori tidak terbatas, tipe bilangan bulat asli masih 8bit. Java inttidak tiba-tiba memiliki bit lebih banyak atau lebih sedikit hanya karena Anda menambahkan atau menghapus beberapa ram.
flawr

26

Cubix , 14 12 byte

.(.\OSo;?.>~

Uji secara online! Anda sekarang dapat menyesuaikan kecepatan jika Anda ingin berlari lebih cepat atau lebih lambat.

Bagaimana itu bekerja

Hal pertama yang dilakukan oleh interpreter adalah menghapus semua spasi dan pad kode dengan no-ops .sampai cocok di sebuah kubus. Itu berarti bahwa kode di atas juga dapat ditulis seperti ini:

    . (
    . \
O S o ; ? . > ~
. . . . . . . .
    . .
    . .

Sekarang kodenya dijalankan. IP (penunjuk instruksi) dimulai di sudut kiri atas wajah paling kiri, menunjuk ke timur. Inilah jalur yang dibutuhkan selama menjalankan program:

masukkan deskripsi gambar di sini

IP dimulai pada jejak merah di paling kiri gambar. Itu kemudian berjalan OSo;, yang melakukan hal berikut:

  • OCetak TOS (top-of-stack) sebagai bilangan bulat. Di awal program, tumpukan berisi nol tanpa batas, jadi ini dicetak 0.
  • STekan 32, kode karakter untuk karakter spasi.
  • oCetak TOS sebagai karakter. Ini mencetak spasi.
  • ;Pop TOS. Menghapus 32dari tumpukan.

Sekarang IP mengenai ?, yang mengarahkannya ke kiri, kanan, atau lurus tergantung pada tanda KL. Saat ini, TOS-nya 0begitu lurus. Ini adalah jalur biru; .tidak melakukan apa-apa, dan IP menyentuh panah >, yang mengarahkannya ke timur di sepanjang jalur merah lagi. ~mengambil BOT bitwise dari TOS, mengubahnya menjadi -1.

Di sini IP mencapai tepi kanan jaring, yang membungkusnya kembali ke kiri; ini lagi mencetak TOS (kali ini -1) dan spasi.

Sekarang IP mengenai ?lagi. Kali ini, KL adalah -1; karena ini negatif, IP belok kiri, mengambil jalur hijau. Cermin \membelokkan IP ke (, yang menurunkan TOS, mengubahnya menjadi -2. Muncul kembali dan mengenai panah; ~Dibutuhkan bitwise TIDAK lagi, memutar -2ke 1.

Sekali lagi, TOS dikeluarkan dan spasi dicetak. Kali ini ketika IP mencapai ?, TOS adalah 1; karena ini positif, IP berbelok ke kanan, mengambil jalur kuning. Operator pertama yang ditemui adalah S, mendorong tambahan 32; yang ;muncul sebelum dapat menyebabkan masalah.

Sekarang IP kembali ke panah dan melakukan rutinitasnya, ~mengubah TOS -2dan Omencetaknya. Karena TOS negatif lagi, IP mengambil jalur hijau sekali lagi. Dan itu terus berputar seperti itu selamanya *: merah, hijau, merah, kuning, merah, hijau, merah, kuning ..., mencetak dalam siklus berikut:

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

TL; DR

Program ini berulang kali melalui 3 langkah mudah ini:

  1. Keluarkan nomor saat ini dan spasi.
  2. Jika angka saat ini negatif, kurangi dengan 1.
  3. Ambil bitwise BUKAN dari nomor saat ini.

Versi tidak terpisahkan, 6 byte

nO?~>~

Menghapus pemisahan menyederhanakan program sehingga bisa masuk ke dalam unit cube:

  n
O ? ~ >
  ~

* Catatan : Tidak ada program yang benar-benar tidak terbatas, karena hanya menghitung hingga 522 (di mana JavaScript mulai kehilangan presisi bilangan bulat).


4
Diagram yang bagus! :) Apakah Anda membuatnya dengan tangan atau menulis alat untuk menghasilkannya?
Martin Ender

5
@ MartinEnder Terima kasih! Itu terinspirasi oleh diagram Hexagony Anda. Saya menciptakannya dengan tangan; meskipun saya ingin menulis alat untuk menghasilkan mereka ketika saya punya cukup waktu untuk melakukannya.
ETHproduk

18

MATL , 8 byte

0`@_@XDT

Ini menggunakan tipe data default MATL, yaitu double, sehingga berfungsi hingga 2^53dalam nilai absolut. Outputnya adalah

0
-1
1
-2
2
···

Cobalah online!

Penjelasan

0            % Push 0
  `     T    % Do...while true: infinite loop
   @_        % Push iteration index and negate
     @       % Push iteration index
      XD     % Display the whole stack

Mengapa ada penundaan besar sebelum mulai mencetak?
Fatalkan

@Fatalize Saya pikir Octave perlu di-restart untuk setiap kali Anda menjalankan program MATL di TIO, dan itu membutuhkan waktu.
flawr

@Faktalisasi Saya tidak yakin. Itu terjadi di kompiler online, bukan offline. Saya pikir itu mungkin ada hubungannya dengan oktaf paging output, tetapi sekarang saya tidak yakin apakah itu alasannya
Luis Mendo

1
Gagasan cerdas untuk dilakukan @_@XDalih - alih @_D@Dagar Anda dapat memasukkan 0 pada proses pertama.
Sanchises

3
XD+1 untuk smiley
TuxCrafting

16

Bahasa Pemrograman Shakespeare , 227 byte

.
Ajax,.
Puck,.
Act I:
Scene I:
[Enter Ajax,Puck]
Puck:You ox!
Ajax:Be me without myself.Open thy heart.
Scene II:      
Ajax:Be thyself and ash.Open thy heart.Be me times you.Open thy heart.Be me times you.Let us return to scene II.

Jelas, jawaban ini sama sekali tidak menang, tetapi saya suka bahwa ini adalah kasus penggunaan yang cocok untuk SPL.

Dijelaskan:

// Everything before the first dot is the play's title, the parser treats it as a comment.
.

// Dramatis personae. Must be characters from Shakespeare's plays, again with a comment.
Ajax,.
Puck,.

// Acts and scenes serve as labels. Like the whole play, they can have titles too,
// but for the sake of golfing I didn't give them any.
Act I:

// This scene would've been named "You are nothing"
Scene I:

// Characters can talk to each other when on stage
[Enter Ajax,Puck]

// Characters can assign each other values by talking. Nice nouns = 1, ugly nouns = -1.
Puck: You ox!                 // Assignment: $ajax = -1;
Ajax: Be me without myself.   // Arithmetic: $puck = $ajax - $ajax;
      Open thy heart.         // Standard output in numerical form: echo $puck;

// Working title "The circle of life"
Scene II:

// Poor Ajax always doing all the work for us
Ajax: Be thyself and ash.          // $puck = $puck + (-1);
      Open thy heart.              // echo $puck;
      Be me times you.             // $puck *= $ajax;  (remember $ajax==-1 from scene I)
      Open thy heart.              // echo $puck;
      Be me times you.             // negate again
      Let us return to scene II.   // infinite goto loop

Seperti yang Anda lihat ketika membandingkan kode ini dengan jawaban saya terhadap tantangan terkait untuk menghitung selamanya (yaitu mencetak semua nomor alami), panjang kode SPL tumbuh agak buruk ketika ukuran masalah meningkat ...


1
Saya suka ini. Sangat buruk untuk bermain golf, tetapi bagus untuk membaca.
swinefish

Mengetik pada baris terakhir dari penjelasan. Let us return to scene II.seharusnya scene I.
Oliver Ni

Terima kasih telah menunjukkan perbedaannya! Kesalahan pengetikan sebenarnya ada di kode atas: Kita tidak boleh mengulang adegan I karena akan mengatur ulang $puckke 0 dan kemudian menghitung tidak akan berfungsi lagi. Saya menambahkan yang hilang Idalam kode dan mengoreksi panjang byte (yang agak off anyops oops)
Christallkeks

14

Python 2, 27 byte

n=0
while 1:print~n,n,;n+=1

Cetakan -1 0 -2 1 -3 2 -4 3 ...


10

05AB1E , 9 6 byte

Disimpan 3 byte berkat Adnan

[ND,±,

Cobalah online!

Cetakan 0, -1, 1, -2, 2 ...dipisahkan oleh baris baru.


2
Saya bisa mendapatkannya turun ke 6 byte menggunakan sihir bitwise: [N,N±,.
Adnan

1
@ Adnan: Bagus! Saya mencoba melakukan sesuatu yang serupa sebelumnya, tetapi tidak digunakan ±dan berakhir 3 byte lebih lama dari milik Anda.
Emigna

Saya tahu ini sudah lama, tapi D,bisa diganti dengan =menyimpan satu byte.
Kevin Cruijssen

10

GNU sed, 189 + 2 (rn flags) = 191 byte

Ini kemungkinan merupakan solusi terpanjang, karena sed tidak memiliki tipe integer atau operasi aritmatika. Karena itu, saya harus meniru operator peningkatan ukuran sewenang - wenang menggunakan ekspresi reguler saja.

s/^/0/p
:
:i;s/9(@*)$/@\1/;ti
s/8(@*)$/9\1/
s/7(@*)$/8\1/
s/6(@*)$/7\1/
s/5(@*)$/6\1/
s/4(@*)$/5\1/
s/3(@*)$/4\1/
s/2(@*)$/3\1/
s/1(@*)$/2\1/
s/0(@*)$/1\1/
s/^@+/1&/;y/@/0/
s/^/-/p;s/-//p
t

Lari:

echo | sed -rnf all_integers.sed

Keluaran:

0
-1
1
-2
2
-3
3
etc.

10

Brainfuck, 127 byte

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

Cobalah online!

Diberikan rekaman tak terbatas secara teoritis akan berjalan selamanya.

0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7,8,-8,9,-9,10,-10,11,-11,12,-12,13,-13,14,-14,15,-15,16,-16,17,-17,18,-18,19,-19,20,-20,21,-21,22,-22,23,-23,24,-24,25,-25,26,-26,27,-27,28,-28,29,-29,30,-30,31,-31,32,-32,33,-33,34,-34,35,-35,36,-36,37,-37,38,-38,39,-39,40,-40,41,-41,42,-42,43,-43,44,-44,45,-45,46,-46,47,-47,48,-48,49,-49,50,-50,51,-51,52,-52,53,-53,54,-54,55,-55,56,-56,57,-57,58,-58,59,-59,60,-60,61,-61,62,-62,63,-63,64,-64,65,-65,66,-66,67,-67,68,-68,69,-69,70,-70,71,-71,72,-72,73,-73,74,-74,75,-75,76,-76,77,-77,78,-78,79,-79,80,-80,81,-81,82,-82,83,-83,84,-84,85,-85,86,-86,87,-87,88,-88,89,-89,90,-90,91,-91,92,-92,93,-93,94,-94,95,-95,96,-96,97,-97,98,-98,99,-99,...

Tidak terkompresi

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

9

ShadyAsFuck , 3 byte

FVd

Penjelasan:

F     prints the current cell value (0) and increases it by 1
 V    starts a loop and prints the current value
  d   increases the current value and ends the loop

Ini memanfaatkan pembungkus sel dan mencetak semua nilai yang mungkin. Dalam SAF, representasi integer asli adalah dengan nilai byte .


5
Jawaban ini ... teduh.
Conor O'Brien

1
Saya bertanya-tanya siapa yang datang dengan nama bahasa, kemudian saya perhatikan dari bahasa apa itu berasal.
John Dvorak

8

R, 25 24 byte

Golf satu byte berkat @JDL.

repeat cat(-F,F<-F+1,'')

Cobalah online!

Contoh output:

0 1 -1 2 -2 3 -3 4 -4 5 -5 6 -6 7 -7 8 -8 9 -9 10 

2
Anda dapat menggantinya while(1)dengan repeat untuk menyimpan char.
JDL

@JDL Terima kasih! Saya lupa bahwa konstruk kadang-kadang ada.
rturnbull

7

Batch, 56 byte

@set n=0
:l
@echo %n%
@set/an+=1
@echo -%n%
@goto l

Keluaran:

0
-1
1
-2
2
-3

dll. Bekerja hingga 2147483647; 58 byte jika Anda ingin (-) 2147483648 di output:

@set n=0
:l
@echo %n:-=%
@set/an-=1
@echo %n%
@goto l

44 byte jika mencetak semua bilangan bulat positif yang didukung, maka semua bilangan bulat negatif yang didukung, kemudian diulang tanpa henti, dapat diterima:

@set n=0
:l
@echo %n%
@set/an+=1
@goto l

7

Java 7, 151 134 122 118 byte

import java.math.*;void c(){for(BigInteger i=BigInteger.ONE,y=i;;i=i.add(y))System.out.println(y.subtract(i)+"\n"+i);}

12 byte disimpan berkat @ flawr (dan @xnor secara tidak langsung)

Setelah perubahan peraturan .. ( 59 56 63 byte)

void c(){for(int i=0;i>1<<31;)System.out.println(~--i+"\n"+i);}

Karena di Jawa 2147483647 + 1 = -2147483648, kita tidak bisa begitu saja melakukan i++dan melanjutkan tanpa batas, karena tantangannya adalah mencetak semua angka satu kali. Dengan kode di atas dengan kisaran menambahkan, hal itu malah akan mencetak semua bilangan bulat dari -2147483648ke 2147483647masing-masing sekali, dengan urutan sebagai berikut: 0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648. Terima kasih kepada @ OlivierGrégoire karena menunjukkan perilaku Java tentang MIN_VALUE-1/ MAX_VALUE+1. Coba di sini.

Tidak digabungkan & kode uji:

Coba di sini - menghasilkan kesalahan runtime

import java.math.*;
class M{
  static void c() {
    for(BigInteger i = BigInteger.ONE, y = i; ; i = i.add(y)){
      System.out.println(y.subtract(i) + "\n" + i);
    }
  }

  public static void main(String[] a){
    c();
  }
}

Keluaran:

0
1
-1
2
-2
3
-3
4
-4
5
-5
...

1
Saya pikir Anda dapat menyimpan beberapa byte dengan mencetak n dan 1-n pada saat yang sama, dengan cara ini Anda dapat menghapus compraision. @ xnor adalah yang pertama menggunakan ide ini di sini.
flawr

1
intProgram-versi Anda , diberikan waktu tanpa batas, akan mencetak setiap bilangan bulat dalam waktu tanpa batas.
Olivier Grégoire

1
@ OlivierGrégoire Ah, tentu saja, MAX_VALUE + 1 adalah MIN_VALUE .. desah. Saya sudah mengeditnya, terima kasih sudah menunjukkannya.
Kevin Cruijssen

1
Jika Anda ingin bermain golf lebih banyak (mis. Menyingkirkan MAX_VALUE, Anda dapat memeriksa jawaban saya (mungkin masih di halaman terakhir)
Olivier Grégoire

1
Solusi 53 byte Anda adalah cuplikan, bukan fungsi atau program, dan karenanya tidak valid.
Mego

6

DC (rasa GNU atau OpenBSD) - 16 byte

Versi ini tidak lebih pendek dari versi di bawah ini tetapi harus dapat berjalan tanpa tumpukan meledak di PC Anda. Namun demikian, jumlah besar yang tak terbatas akan memakan banyak memori ... terkadang ...

Karena rperintah itu diperlukan GNU-DC atau OpenBSD-DC .

0[rp1+45Pprdx]dx

Uji:

$ dc -e '0[rp1+45Pprdx]dx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

DC - 16 byte

Sedikit kejam sekarang. ;-)

Versi ini menyalahgunakan panjang tumpukan sebagai penghitung sementara membiarkan tumpukan tumbuh.

z[pz45Ppllx]dslx

Uji:

$ dc -e 'z[pz45Ppllx]dslx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

DC - 17 byte

Tanpa trik kotor.

0[p1+45Ppllx]dslx

Uji:

$ dc -e '0[p1+45Ppllx]dslx' | head
0
-1
1
-2
2
-3
3
-4
4
-5

+? untuk "cepat atau lambat ... lebih cepat dari yang Anda duga"
Greg Martin

2
Alih-alih [-]P, lakukan 45P. "GNU-Dc atau OpenBSD-Dc" - Apakah ada versi lain yang biasa ditemukan di sana?
Digital Trauma

1
Saya punya solusi lain (atau beberapa), tetapi mereka melibatkan angka negatif aktual. Bolehkah saya mempostingnya di jawaban baru? Saya bertanya karena mereka terlihat sangat mirip dengan ini, karena dchanya memiliki beberapa operator. Saya mengembangkannya secara independen dari ini.
Joe

@DigitalTrauma ... tentu ... Dc asli tidak / tidak memiliki r"swap". Terkadang saya bingung ketika melihat versi yang berbeda. Mungkin tidak ada yang mau kode di Dc kuno lagi (dan rakan menghapus tumpukan). Mungkin saya akan mengubah "Dc" menjadi "AT&T dc"? ... dan terima kasih atas 45Ppetunjuknya ...
yeti

2
@yeti saya hanya memberi "dc" pada jawaban saya. Saya tidak berpikir orang-orang di sini terlalu khawatir, terutama mengingat di mana-mana rasa dc "modern".
Digital Trauma

6

C # 74 byte

class P{void Main(){for(var x=0m;;System.Console.Write(x+++","+-x+","));}}

class P
{
    void Main()
    {
        for(var x = 0m; ; System.Console.Write(x++ + "," + -x + ","));
    }
}

Keluaran:

0,-1,1,-2,2,-3,3,-4,4,-5,5,-6,6,-7,7,-8,8,-9,9,-10,10,...

Cobalah:

dotnetfiddle.net (terbatas hingga 1000)


Bukankah ini cuplikan dan bukan fungsi / program lengkap?
pinkfloydx33

Maaf, program lengkap ditambahkan
alex

2
Anda dapat menghilangkan publicpengubah dan menyimpan 14 byte. Defaultnya akan melakukan hal yang sama baiknya.
Alejandro

@Alejandro terima kasih, ini adalah posting pertama saya :)
alex

6

Ruby, 26 22 19 16 byte

Mencetak angka yang dipisahkan oleh baris baru. -3 byte dari @manatwork. -3 byte dari @ m-chrzan.

0.step{|n|p~n,n}

Anda mengeluarkan nilai numerik di sini, jadi Anda juga pakan melakukannya.
manatwork

0.step{|n|p n,~n}selama 17 byte.
m-chrzan

1
@ m-chrzan karena pesanan tidak terlalu penting, saya dapat mencukur byte tambahan, di atas saran Anda!
Nilai Tinta

6

JavaScript, 29 26 byte

Versi tidak terbatas, 26 byte

Disimpan 3 byte berkat produk ETH

for(n=1;;)alert([1-n,n++])

akan menampilkan semua bilangan bulat antara -9007199254740991 dan 9007199254740992.

Versi tak terbatas (ES6), 114 112 byte

Disimpan 2 byte berkat produk ETH

for(n=[-1];1;alert(n[a||n.unshift(1),0]?(x=n.join``)+' -'+x:0))for(i=n.length,a=0;i--;a=(n[i]+=1-a)>9?n[i]=0:1);

akan menampilkan semua bilangan bulat, mengingat waktu dan memori yang tidak terbatas.


Anda dapat menjatuhkan fungsi boilerplate dan menyebutnya program lengkap.
Conor O'Brien

@ ConorO'Brien - Oh, kamu benar. Terima kasih :)
Arnauld

n[a,b,c]kembali n[c], sehingga Anda dapat memasukkan tanda kurung n[(a||n.unshift(1),0)].
ETHproduksi

Anda tidak perlu 1in untuk loop; for(;;)berjalan selamanya. Anda dapat menyimpan dua byte lagi dengan for(n=1;;)alert([1-n,n++]). Juga, ini tidak lagi menggunakan fitur ES6 ;-)
ETHproduksi

5

> <> , 19 15 byte

1::1$-naonao1+!

Ini mencetak yang berikut ini:

0
1
-1
2
-2
3
-3

... dan seterusnya. Pemisah adalah baris baru.

Ditulis ulang setelah membaca jawaban xnor untuk menggunakan versi algoritma itu. Mulai dari n=1, program mencetak 1-ndan n, masing-masing diikuti oleh baris baru, sebelum ditambahkan n. Setelah meluap nilai maksimum program akan berakhir dengan kesalahan something smells fishy.... Tepat kapan ini akan terjadi tergantung pada implementasi juru bahasa.


Versi sebelumnya:

0:nao0$-:10{0(?$~+!

Mulai dari 0, loop program tanpa batas. Pada setiap loop, nilai saat ini dicetak bersama dengan baris baru. Ini kemudian dinegasikan, dan bertambah jika positif.


Apakah xnor jelas-jelas seorang "dia"? Atau apakah bias tak sadar kita menunjukkan ...?
Greg Martin

2
@GregMartin Sangat menarik, saya rasa saya tidak pernah menyebut jenis kelamin.
xnor

5

Utilitas Bash + GNU, 26

seq NaN|sed '1i0
p;s/^/-/'

Saya belum pernah melihat seq digunakan seperti itu, apakah ini seperti bug? Juga, apakah akan mulai mengulangi angka setelah tipe meluap? Saya tahu itu $[++i]dilakukan di bash.
seshoumara

Sepertinya fitur yang lebih baru - lihat kode sumber . Menambahkan 1 ke NaN seharusnya tidak menyebabkan sampul.
Digital Trauma

Saya pergi seq NaNuntuk menjalankan dan setelah 999999 pencetakan dilakukan dalam notasi ilmiah dengan presisi 5 digit. Sehubungan dengan tantangan, nilai itu adalah bilangan bulat terbesar yang Anda cetak, yang baik karena sisanya tidak akan mengulangi angka sebelumnya. Juga perhatikan Anda dapat menjalankan seq dengan inf, case sensitif seperti untuk nan. +1
seshoumara

5

bc, 17 16 byte

Sunting: 1 byte lebih sedikit berkat Digital Trauma .

Menambah keragaman bahasa yang digunakan sejauh ini, saya menyajikan solusi bc yang bekerja dengan bilangan bulat ukuran sewenang - wenang . Baris baru diperlukan setelah kode dan dihitung dalam total byte.

for(;;){i;-++i}

Di iterasi pertama i tidak ditentukan, tetapi mencetaknya memberikan 0 kejutan saya.


1 byte lebih pendek:for(;;){i;-++i}
Trauma Digital

@DigitalTrauma Terima kasih, saya memperbarui jawaban saya. Yang lucu adalah bahwa saya menggunakan loop itu membangun hari ini di jawaban bash saya yang lain , tetapi lupa yang bcmemilikinya juga.
seshoumara

Atau for(;;){i++;-i}(panjang yang sama).
sch

5

Labirin , 9 byte

!`
\:"
 (

Cobalah online!

Ini juga berfungsi dan pada dasarnya sama:

 "
`:(
\!

Penjelasan

Aliran kontrol dalam kode ini agak lucu. Ingat bahwa penunjuk instruksi (IP) dalam program Labirin mengikuti jalur karakter non-spasi dan memeriksa bagian atas tumpukan di persimpangan mana pun untuk memutuskan jalur mana yang akan diambil:

  • Jika bagian atas tumpukan positif, belok kanan.
  • Jika bagian atas tumpukan nol, terus bergerak lurus ke depan.
  • Jika bagian atas tumpukan negatif, belok kiri.

Ketika IP menemui jalan buntu, berbalik (mengeksekusi perintah di akhir hanya sekali). Dan IP dimulai di sudut kiri atas bergerak ke timur. Perhatikan juga bahwa tumpukan secara implisit diisi dengan jumlah nol yang tidak terbatas untuk memulai.

Program dimulai dengan bit pendek ini:

!    Print top of stack (0).
`    Multiply by -1 (still 0).
:    Duplicate.

Sekarang IP berada di persimpangan yang relevan dan bergerak lurus ke depan ke (mana mengurangi bagian atas tumpukan -1. IP mencapai jalan buntu dan berbalik. :menggandakan bagian atas tumpukan sekali lagi. Sekarang bagian atas tumpukan negatif dan IP belok kiri (barat). Kami sekarang menjalankan satu iterasi lagi dari loop utama:

\   Print linefeed.
!   Print top of stack (-1).
`   Multiply by -1 (1).
:   Duplicate.

Kali ini, bagian atas tumpukan positif, sehingga IP berbelok ke kanan (barat) dan segera menjalankan iterasi lain dari loop utama, yang mencetak 1. Kemudian setelah dinegasikan lagi, kita memukul :dengan-1 pada stack.

Kali ini IP belok kiri (timur). Ini "hanya no-op dan IP berbalik di jalan buntu. :membuat salinan lain dan kali ini IP berbelok ke selatan. (mengurangi nilai -2, IP berbalik lagi. Dengan bagian atas tumpukan masih negatif, IP sekarang berubah ke barat pada :dan melakukan iterasi berikutnya dari loop utama.

Dengan cara ini, IP sekarang akan beralih antara iterasi loop ketat, mencetak angka positif, dan iterasi yang melewati kedua jalan buntu untuk mengurangi nilai sebelum mencetak angka negatif.

Anda mungkin bertanya pada diri sendiri mengapa ada di "baris kedua jika tidak benar-benar melakukan apa-apa: tanpanya, ketika IP mencapai :nilai negatif, itu tidak bisa berbelok ke kiri (timur) sehingga akan berbelok ke kanan (barat) sebagai gantinya (sebagai aturan praktis, jika arah biasa di persimpangan tidak tersedia, IP akan mengambil arah yang berlawanan). Itu berarti IP juga tidak akan pernah mencapai (bagian bawah dan kami tidak dapat membedakan iterasi positif dan iterasi negatif.


Inilah yang saya pikirkan sebelum melihat jawaban Anda: pastebin.com/VHzAvABe
Robert Hickman

5

JavaScript (ES5), 32 31 30 29 byte

for(i=0;;)[i++,-i].map(alert)

Cetakan 0 -1 1 -2 2 -3 3 -4 4 -5 5 ...

Disimpan 1 byte berkat Patrick Roberts! Disimpan 2 byte berkat Conor O'Brien!


1
Bagaimana kalau [i++,-i].map(alert)bukan alert(i++),alert(-i)?
Conor O'Brien

for(;;)lebih pendek satu byte dariwhile(1)
Patrick Roberts

@ ConorO'Brien mapadalah ES6
Paul Schmitz


Anda dapat memindahkan i=0;bit di dalam for loop untuk menyimpan byte.
Conor O'Brien

4

Java, 65 54 byte

i->{for(;;)System.out.print(i+++" "+(-i<i?-i+" ":""));

Kode tes tidak digabungkan

public static void main(String[] args) {
    Consumer<Integer> r = i -> {
        for (;;) {
            System.out.print(i++ + " " + (-i < i ? -i + " " : ""));
        }
    };

    r.accept(0);
}

3
biggest magnitude of the standard integer type of your language intadalah tipe integer standar Java.
Shaun Wild

1
Maaf soal itu, persyaratannya telah berubah sementara ...
flawr

2
Anda dapat golf ke ()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};( 53 byte )
Kevin Cruijssen

@KevinCruijssen Itu meniduri jarak ...
Shaun Wild

1
Diberikan waktu tak terbatas, itu akan mencetak setiap bilangan bulat jumlah tak terbatas setiap kali.
Olivier Grégoire

4

C #, 83 byte

void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}

Tidak Disatukan:

void f()
{
  for (decimal n=0;;n++)
  {
    Console.Write(n + ",");
    if (n > 0) Console.Write(-n + ",");
   }
}

Output:

0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6.......

Ada beberapa hal yang bisa dilakukan untuk mengurangi karakter. Pertama, program Anda tidak memerlukan ruang nama. Kedua nama kelas tidak perlu terlalu panjang. Anda juga membuat dua panggilan ke console.writeline yang dapat disederhanakan menjadi delegasi. Sementara true dapat disederhanakan menjadi aa untuk (;;) dan pernyataan if dapat dihapus dengan mengeluarkan nilai nol terlebih dahulu melalui delegasi.
Nico

Terima kasih. Saya tidak tahu apakah seorang delegasi mungkin "curang"?
Pete Arden

Hai, selamat datang di PPCG! Saya pikir Anda mungkin menemukan ini menarik untuk dibaca: Tips untuk bermain golf di C # . Juga, Anda tidak perlu program lengkap, hanya fungsi yang akan dilakukan (kecuali jika tantangan mengatakan sebaliknya). Jadi void f(){code_present_in_main}sudah cukup untuk byte-count. Adapun kode itu sendiri, Anda dapat golf lagi seperti ini: void f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}( 61 bytes )
Kevin Cruijssen

1
Oh bagus, sekarang jauh lebih sehat, terima kasih! Saya tidak akan merasa benar menggunakan semua jawaban Anda, tetapi ini jelas merupakan peningkatan dan tips-tips itu akan membantu golf saya di masa depan!
Pete Arden

@PeteArden Saya mengerti untuk tidak menggunakan kode saya, karena ini pendekatan yang berbeda. Hmm, Anda masih bisa memasukkan 2 byte dalam jawaban Anda sendiri dengan menempatkan decimal n=0dan n++;di dalam for-loop: void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}:)
Kevin Cruijssen

4

C # 86 66 byte

Jawaban baru:

void b(){for(var i=0;;i++)Console.Write(i==0?","+i:","+i+",-"+i);}

Bersih:

void b() 
{
    for(var i=0;;i++)
        Console.Write(i == 0 ? "," + i : "," + i + ",-" + i);
}

Jawaban lama (86 byte):

void a(){Console.Write(String.Join(",",Enumerable.Range(int.MinValue,int.MaxValue)));}

Tidak Disatukan:

void a()
{
    Console.Write(String.Join(",", Enumerable.Range(int.MinValue, int.MaxValue)));
}

1
Ada 2 ruang putih yang tidak berguna. Satu sebelum Enumerable.Rangedan satu sebelumnya int.MaxValue.
Yytsi

1
Selamat datang di PPCG! +1 Anda mungkin menemukan ini menarik untuk dibaca: Tips untuk bermain golf di C # . Dalam jawaban Anda saat ini, tanda kurung untuk for-loop dapat dihapus, karena hanya ada satu baris di dalam. Atau, ini adalah pendekatan yang lebih pendek: void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}( 57 byte ) .
Kevin Cruijssen

@KevinCruijssen Terima kasih. Braket hilang.
Daniel Lerps

4

J, 25 byte

([:$:1:`-`(1+-)@.*[echo)0

Bekerja di situs online , tetapi saya belum dapat memverifikasinya di komputer. Mencetak angka seperti:

0
1
_1
2
_2
3
_3
4

dll.


4

Powershell, 20 19 18 byte

Diperbaiki dengan mencuri tanpa malu-malu dari jawaban TimmyD

0;for(){-++$i;$i}

Keluaran:

0
-1
1
-2
2
-3
3
-4
4

Versi lama:

for(){-$i;$i++;$i}

Tidak yakin mengapa tbh, tetapi - variabel yang tidak dideklarasikan (atau - $ nol) dievaluasi sebagai 0, yang menyelamatkan kami 2 byte dalam versi ini ...


1
Selamat datang di PPCG!
AdmBorkBork


4

Brachylog , 2 byte

ẉ⊥

Cobalah online!

ẉ     Print with a newline
      the input,
 ⊥    then try again.

Karena program tidak diberi input, variabel input predikat utama dibiarkan tidak dibatasi. Pada awalnya, diasumsikan 0, tetapi ketika eksekusi berhasil , ia akan kembali ke satu-satunya titik kegagalan: pilihan nilai untuk variabel input. Maka ia mencoba 1, dan -1, dan setiap bilangan bulat lainnya, mencetak masing-masing dipisahkan oleh baris baru selamanya karena selalu memaksa mundur, dan efek dieksekusi segera.

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.