In tất cả các số nguyên


48

Viết chương trình hoặc hàm có thể in tất cả các số nguyên chính xác một lần cho thời gian và bộ nhớ vô hạn.

Đầu ra có thể có thể là:

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, …

Đây không phải là đầu ra hợp lệ, vì điều này sẽ không bao giờ liệt kê các số âm:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, lỗi

  • Đầu ra phải ở dạng thập phân, trừ khi ngôn ngữ của bạn không hỗ trợ số nguyên thập phân (trong trường hợp đó sử dụng biểu diễn tự nhiên của số nguyên mà ngôn ngữ của bạn sử dụng).

  • Chương trình của bạn phải làm việc với các số có độ lớn nhất của loại số nguyên tiêu chuẩn của ngôn ngữ của bạn.

  • Mỗi số nguyên phải được phân tách khỏi số tiếp theo bằng cách sử dụng bất kỳ dấu tách nào (dấu cách, dấu phẩy, ngắt dòng, v.v.) không phải là chữ số cũng không phải là dấu âm của ngôn ngữ của bạn.

  • Dải phân cách không được thay đổi tại bất kỳ điểm nào.

  • Dấu phân cách có thể bao gồm nhiều ký tự, miễn là không có ký tự nào là chữ số cũng không phải là dấu âm (ví dụ: có giá trị như chỉ ,).

  • Bất kỳ số nguyên được hỗ trợ cuối cùng phải được in sau một khoảng thời gian hữu hạn.

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng

Bảng xếp hạng


3
Nếu ngôn ngữ của chúng tôi hỗ trợ danh sách vô hạn, chúng tôi có thể xuất danh sách từ một chức năng thay vì in không? (Gọi in trên một danh sách như vậy sẽ in từng phần tử của nó một lần mãi mãi.)
xnor

5
Tôi cảm thấy như yêu cầu về số nguyên kích thước tùy ý không làm gì khác ngoài việc ngăn cản các ngôn ngữ mà không có số nguyên như vậy tham gia. Họ phải có một bản nhập mà họ có thể sử dụng hoặc giải quyết một thách thức hoàn toàn khác với mọi người khác.
xnor

2
@xnor Thay đổi, mặc dù đó là loại hủy hoại chính tên của thách thức.
Gây tử vong vào

5
@xnor, các ngôn ngữ có số nguyên chính xác tùy ý vẫn phải giải quyết một vấn đề khác với mọi người khác, vì vậy tất cả những thay đổi đó đã đạt được là làm cho vấn đề này trở nên nhàm chán trong rất nhiều ngôn ngữ.
Peter Taylor

2
@PeterTaylor Vâng, điều này thật đáng tiếc. Các giải pháp gói không cảm thấy với tôi như họ đang in bất kỳ tiêu cực nào, nhưng tôi không thấy cách nào để xác định rõ sự khác biệt khi đó là vấn đề đại diện.
xnor

Câu trả lời:


19

Sesos , 11 3 3 byte

0000000: c4ceb9                                            ...

Hãy thử trực tuyến! Kiểm tra gỡ lỗi để xem mã SBIN được tạo.

Sesos lắp ráp

Tệp nhị phân ở trên đã được tạo bằng cách lắp ráp mã SASM sau.

set numout

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

Làm thế nào là 3 byte này?
Hy vọng có ích vào

1
Readme trên GitHub (được liên kết trong tiêu đề) giải thích chi tiết cách các hướng dẫn được mã hóa.
Dennis

1
6 chữ số hex / 2 = 3 byte @Hop HopeHelpful
Stan Strum

@StanStrum cảm ơn
Hy vọng sẽ có ích vào

47

Haskell, 19 byte

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

Tạo danh sách vô hạn [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...

Haskell cho phép danh sách vô hạn nguyên bản. In một danh sách như vậy sẽ in các yếu tố của nó một lần mãi mãi.


2
Tôi tình yêu [n,1-n]!
flawr

3
IMHO [1-n,n]sẽ sản xuất đầu ra đẹp hơn.
Neil

@Neil Tôi đồng ý, đã thay đổi nó.
xnor

2
Ah, đó là đơn nguyên cho concatMap (\n -> [1-n, n]) [1..], phải không? Đẹp!
Carsten S

@CarstenS Vâng, chính xác.
xnor

29

Brainfuck, 6 byte

Điều này làm cho việc sử dụng gói tế bào và in tất cả các giá trị có thể. Trong Brainfuck, biểu diễn số nguyên gốc là theo giá trị byte .

.+[.+]

Hãy thử trực tuyến!


2
Thật tuyệt, đây là câu trả lời Brainfuck ngắn nhất tôi từng thấy cho đến nay trên PPCG.
Kevin Cruijssen

1
Điều này sẽ không hoạt động cho các phiên bản brainfuck với các tế bào không bị ràng buộc. Vui lòng sửa (ngay cả khi là câu trả lời riêng)
John Dvorak

16
@JanDvorak Câu trả lời không cần phải hoạt động trong mọi triển khai, chỉ trong bất kỳ một trong số chúng.
Martin Ender

7
Tôi có thể có được một lời giải thích tại sao điều này là hợp lệ? Không có ngăn cách như được đề cập trong câu hỏi và không có tiêu cực. Cũng như thực tế là bạn có thể xuất ra các giá trị lớn hơn 9 trong brainfuck. Tôi thiếu kinh nghiệm chơi golf mã và bắt đầu làm việc với thứ gì đó tạo ra âm tính và dương tách biệt với số lượng cao hơn trước khi tăng tốc.
gtwebb

5
@SQB Ngay cả với bộ nhớ không giới hạn, loại số nguyên vẫn là 8 bit. Một Java intkhông đột nhiên có nhiều hoặc ít bit chỉ vì bạn đã thêm hoặc xóa một số ram.
flawr

26

Khối , 14 12 byte

.(.\OSo;?.>~

Kiểm tra nó trực tuyến! Bây giờ bạn có thể điều chỉnh tốc độ nếu bạn muốn nó chạy nhanh hơn hoặc chậm hơn.

Làm thế nào nó hoạt động

Điều đầu tiên trình thông dịch thực hiện là loại bỏ tất cả các khoảng trắng và đệm mã bằng các lệnh không .cho đến khi nó khớp hoàn toàn trên một khối. Điều đó có nghĩa là đoạn mã trên cũng có thể được viết như thế này:

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

Bây giờ mã được chạy. IP (con trỏ lệnh) bắt đầu ở góc trên bên trái của mặt xa bên trái, chỉ về hướng đông. Đây là những con đường cần có trong suốt quá trình chạy chương trình:

nhập mô tả hình ảnh ở đây

IP bắt đầu trên vệt đỏ ở phía xa bên trái của hình ảnh. Sau đó nó chạy OSo;, thực hiện như sau:

  • OIn ĐKDV (top-of-stack) dưới dạng số nguyên. Khi bắt đầu chương trình, ngăn xếp chứa các số 0 vô hạn, do đó, bản in này 0.
  • SĐẩy 32, mã char cho ký tự không gian.
  • oIn ĐKDV như một nhân vật. Điều này in một không gian.
  • ;Pop các ĐKDV. Loại bỏ 32khỏi ngăn xếp.

Bây giờ IP chạm vào ?, điều hướng nó sang trái, phải hoặc thẳng tùy thuộc vào dấu hiệu của ĐKDV. Ngay bây giờ, ĐKDV là 0, vì vậy nó đi thẳng. Đây là con đường màu xanh; .không làm gì cả, và IP chạm vào mũi tên >, hướng nó về phía đông dọc theo con đường màu đỏ một lần nữa. ~mất bitwise KHÔNG của ĐKDV, thay đổi nó thành -1.

Ở đây, IP đạt đến cạnh phải của mạng, nó bao bọc nó trở lại bên trái; cái này một lần nữa in ĐKDV (lần này -1) và một khoảng trắng.

Bây giờ IP ?lại xuất hiện. Lần này, ĐKDV là -1; vì điều này là âm, IP rẽ trái, đi theo con đường màu xanh lá cây. Chiếc gương \làm chệch hướng IP thành cái (, làm suy giảm ĐKDV, thay đổi nó thành -2. Nó quay lại và bắn trúng mũi tên; ~mất bitwise KHÔNG một lần nữa, chuyển -2sang 1.

Một lần nữa, ĐKDV được xuất ra và một không gian được in. Lần này khi IP chạm ?, ĐKDV là 1; vì điều này là tích cực, IP rẽ phải, đi theo con đường màu vàng. Toán tử đầu tiên nó gặp là S, đẩy thêm 32; các ;hiện nó trước khi nó có thể gây ra bất kỳ rắc rối.

Bây giờ IP quay lại mũi tên và thực hiện thói quen của nó, ~thay đổi ĐKDV -2Oin nó. Vì ĐKDV lại âm tính, IP lại đi theo con đường xanh. Và nó cứ tiếp tục đạp xe như vậy mãi mãi *: đỏ, xanh lá cây, đỏ, vàng, đỏ, xanh lá cây, đỏ, vàng ..., in theo chu kỳ sau:

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

TL; DR

Chương trình này liên tục trải qua 3 bước đơn giản sau:

  1. Xuất số hiện tại và một khoảng trắng.
  2. Nếu số hiện tại là âm, hãy giảm nó đi 1.
  3. Lấy bitwise KHÔNG của số hiện tại.

Phiên bản không tách rời, 6 byte

nO?~>~

Loại bỏ phân tách đơn giản hóa chương trình nhiều đến mức có thể vừa với khối đơn vị:

  n
O ? ~ >
  ~

* Lưu ý : Không chương trình nào thực sự là vô hạn, vì chúng chỉ đếm tối đa 2 52 (khi JavaScript bắt đầu mất độ chính xác nguyên).


4
Sơ đồ đẹp! :) Bạn đã tạo nó bằng tay hoặc viết một công cụ để tạo ra nó?
Martin Ender

5
@MartinEnder Cảm ơn bạn! Nó được lấy cảm hứng từ sơ đồ Hexagony của bạn. Tôi đã tạo ra nó bằng tay; mặc dù tôi muốn viết một công cụ để tạo chúng khi tôi có đủ thời gian để làm như vậy.
Sản phẩm ETH

18

MATL , 8 byte

0`@_@XDT

Cái này sử dụng kiểu dữ liệu mặc định của MATL double, vì vậy nó hoạt động với 2^53giá trị tuyệt đối. Đầu ra là

0
-1
1
-2
2
···

Hãy thử trực tuyến!

Giải trình

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

Tại sao có sự chậm trễ lớn như vậy trước khi nó bắt đầu in?
Gây tử vong vào

@Firthize Tôi nghĩ rằng Octave cần phải được khởi động lại cho mỗi lần bạn chạy chương trình MATL trong TIO và điều đó cần một chút thời gian.
flawr

@Firthize Tôi không chắc chắn. Nó xảy ra trong trình biên dịch trực tuyến, không ngoại tuyến. Tôi nghĩ rằng nó có thể phải làm với Octave phân trang đầu ra, nhưng bây giờ tôi không chắc đó có phải là lý do hay không
Luis Mendo

1
Ý tưởng thông minh để làm @_@XDhơn là @_D@Dđể bạn có thể bao gồm 0 trong lần chạy đầu tiên.
Sanchise

3
XD+1 cho mặt cười
TuxCrafting

16

Ngôn ngữ lập trình 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.

Rõ ràng, câu trả lời này không ở đâu gần chiến thắng, nhưng tôi thích rằng đây là trường hợp sử dụng mà SPL tương đối phù hợp.

Giải thích:

// 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

Như bạn có thể thấy khi so sánh mã này với câu trả lời của tôi với thách thức liên quan để đếm mãi mãi (tức là in tất cả các số tự nhiên), độ dài mã SPL tăng khá tệ khi kích thước sự cố tăng ...


1
Tôi thích điều này. Thật tệ khi chơi golf, nhưng thật tuyệt vời khi đọc sách.
cá heo

Typo trên dòng cuối cùng của lời giải thích. Let us return to scene II.nên scene I.
Oliver Ni

Cảm ơn đã chỉ ra sự khác biệt! Lỗi đánh máy thực sự nằm ở mã phía trên: Chúng ta không được lặp lại cảnh I vì nó sẽ được đặt lại $puckvề 0 và sau đó đếm ngược sẽ không hoạt động nữa. Tôi đã thêm phần còn thiếu Itrong mã và sửa lỗi độ dài byte (hơi lệch một chút)
Christallkeks

14

Python 2, 27 byte

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

Bản in -1 0 -2 1 -3 2 -4 3 ...


10

05AB1E , 9 6 byte

Đã lưu 3 byte nhờ Adnan

[ND,±,

Hãy thử trực tuyến!

Các bản in được 0, -1, 1, -2, 2 ...phân tách bằng dòng mới.


2
Tôi đã có thể giảm xuống còn 6 byte bằng một số phép thuật bitwise : [N,N±,.
Ad Nam

1
@Ad Nam: Đẹp quá! Tôi đã cố gắng làm một cái gì đó tương tự trước đó, nhưng không sử dụng ±và nó đã kết thúc lâu hơn 3 byte so với của bạn.
Emigna

Tôi biết đã được một lúc, nhưng D,có thể được thay thế bằng =để tiết kiệm một byte.
Kevin Cruijssen

10

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

Đây rất có thể là giải pháp dài nhất, vì sed không có kiểu số nguyên hoặc phép toán số học. Như vậy, tôi đã phải mô phỏng một toán tử tăng kích thước tùy ý chỉ sử dụng các biểu thức thông thường.

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

Chạy:

echo | sed -rnf all_integers.sed

Đầu ra:

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

10

Brainfuck, 127 byte

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

Hãy thử trực tuyến!

Cho một băng vô hạn về lý thuyết sẽ chạy mãi mãi.

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,...

Không nén

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

9

ShadyAsFuck , 3 byte

FVd

Giải trình:

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

Điều này làm cho việc sử dụng gói tế bào và in tất cả các giá trị có thể. Trong SAF, biểu diễn số nguyên gốc là theo giá trị byte .


5
Câu trả lời này là ... mờ ám.
Conor O'Brien

1
Tôi đã tự hỏi ai đã đưa ra tên ngôn ngữ, sau đó tôi nhận thấy nó phát ra từ ngôn ngữ nào.
John Dvorak

8

R, 25 24 byte

Chơi gôn một byte nhờ @JDL.

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

Hãy thử trực tuyến!

Ví dụ đầu ra:

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

2
Bạn có thể thay thế while(1)bằng repeat để lưu một char.
JDL

@JDL Cảm ơn! Tôi quên rằng cấu trúc tồn tại đôi khi.
rturnbull

7

Mẻ, 56 byte

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

Đầu ra:

0
-1
1
-2
2
-3

vv Hoạt động lên đến 2147483647; 58 byte nếu bạn muốn (-) 2147483648 ở đầu ra:

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

44 byte nếu in tất cả các số nguyên dương được hỗ trợ, sau đó tất cả các số nguyên âm được hỗ trợ, sau đó lặp lại vô tận, có thể chấp nhận được:

@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 được lưu nhờ vào @flawr (và @xnor gián tiếp)

Sau khi thay đổi quy tắc .. ( 59 56 63 byte)

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

Vì trong Java 2147483647 + 1 = -2147483648, chúng ta không thể đơn giản làm i++và tiếp tục vô tận, vì thách thức là in tất cả các số một lần. Với mã ở trên với phạm vi được thêm vào, thay vào đó, nó sẽ in tất cả các số nguyên từ một -2147483648đến 2147483647mỗi số, theo trình tự sau : 0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648. Cảm ơn @ OlivierGrégoire vì đã chỉ ra hành vi của Java liên quan đến MIN_VALUE-1/ MAX_VALUE+1. Hãy thử nó ở đây.

Mã thử nghiệm & mã hóa:

Hãy thử ở đây - dẫn đến lỗi thời gian chạy

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();
  }
}

Đầu ra:

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

1
Tôi nghĩ rằng bạn có thể lưu một số byte bằng cách in n và 1-n cùng một lúc, bằng cách này bạn có thể loại bỏ sự ép buộc. @xnor là người đầu tiên sử dụng ý tưởng này ở đây.
flawr

1
intChương trình chuyển đổi của bạn , được cung cấp thời gian vô hạn, sẽ in cho mỗi số nguyên một lượng thời gian vô hạn.
Olivier Grégoire

1
@ OlivierGrégoire Ah, tất nhiên, MAX_VALUE + 1 là MIN_VALUE .. thở dài. Tôi đã chỉnh sửa nó, cảm ơn vì đã chỉ ra nó.
Kevin Cruijssen

1
Nếu bạn muốn chơi gôn nhiều hơn (ví dụ: loại bỏ MAX_VALUE, bạn có thể kiểm tra câu trả lời của tôi (có lẽ vẫn ở trang cuối).
Olivier Grégoire

1
Giải pháp 53 byte của bạn là một đoạn mã, không phải là một chức năng hoặc chương trình và do đó không hợp lệ.
Mego

6

DC (hương vị GNU hoặc OpenBSD) - 16 byte

Phiên bản này không ngắn hơn phiên bản bên dưới nhưng có thể chạy mà không cần ngăn xếp phát nổ trong PC của bạn. Tuy nhiên, số lượng lớn vô hạn sẽ chiếm số lượng bộ nhớ vô hạn ... đôi khi ...

Do rlệnh này cần GNU-DC hoặc OpenBSD-DC .

0[rp1+45Pprdx]dx

Kiểm tra:

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

DC - 16 byte

Một chút ý nghĩa bây giờ. ;-)

Phiên bản này đang lạm dụng chiều dài ngăn xếp làm bộ đếm trong khi để ngăn xếp phát triển.

z[pz45Ppllx]dslx

Kiểm tra:

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

DC - 17 byte

Nếu không có thủ đoạn bẩn thỉu.

0[p1+45Ppllx]dslx

Kiểm tra:

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

+? cho "sớm hay muộn ... sớm hơn bạn tưởng"
Greg Martin

2
Thay vì [-]P, làm 45P. "GNU-Dc hoặc OpenBSD-Dc" - Có phiên bản nào khác thường được tìm thấy ngoài tự nhiên không?
Chấn thương kỹ thuật số

1
Tôi có một giải pháp khác (hoặc một vài), nhưng chúng liên quan đến các số âm thực tế. Tôi có thể đăng chúng trong một câu trả lời mới không? Tôi đang hỏi bởi vì chúng trông rất giống với những thứ này, vì dcchỉ có một vài toán tử. Tôi đã phát triển chúng một cách độc lập từ những thứ này.
Joe

@DigitalTrauma ... chắc chắn ... Dc ban đầu không / không có rdạng "hoán đổi". Đôi khi tôi cảm thấy bối rối khi nhìn vào các phiên bản khác nhau. Có lẽ không ai muốn viết mã trong Dc cổ nữa (và rsẽ xóa stack). Có lẽ tôi sẽ đổi "Dc" thành "AT & T dc"? ... và cảm ơn vì 45Pgợi ý ...
yeti

2
@yeti Mình chỉ đặt "dc" vào câu trả lời của mình. Tôi không nghĩ mọi người ở đây quá lo lắng về điều đó, đặc biệt là với sự phổ biến của các hương vị dc "hiện đại".
Chấn thương kỹ thuật số

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 + ","));
    }
}

Đầu ra:

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

Thử nó:

dotnetfiddle.net (giới hạn ở 1000)


Không phải những đoạn này và không phải chức năng / chương trình đầy đủ?
Pinkfloydx33

Xin lỗi, đã thêm chương trình đầy đủ
alex

2
Bạn có thể bỏ qua các publicsửa đổi và lưu 14 byte. Mặc định sẽ làm tốt như nhau.
Alejandro

@Alejandro cảm ơn bạn, đó là bài viết đầu tiên của tôi :)
alex

6

Ruby, 26 22 19 16 byte

In các số được phân tách bằng dòng mới. -3 byte từ @manatwork. -3 byte từ @ m-chrzan.

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

Bạn đang xuất các giá trị số ở đây, vì vậy pcũng sẽ làm điều đó.
manatwork

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

1
@ m-chrzan vì thứ tự không quan trọng lắm, tôi đã có thể tắt thêm một byte, ngoài đề xuất của bạn!
Mực giá trị

6

JavaScript, 29 26 byte

Phiên bản không vô hạn, 26 byte

Đã lưu 3 byte nhờ vào ETHproductions

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

sẽ hiển thị tất cả các số nguyên trong khoảng từ -9007199254740991 đến 9007199254740992.

Phiên bản vô hạn (ES6), 114 112 byte

Đã lưu 2 byte nhờ vào ETHproductions

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);

sẽ hiển thị tất cả các số nguyên, cho thời gian và bộ nhớ vô hạn.


Bạn có thể bỏ chức năng soạn sẵn và gọi nó là một chương trình đầy đủ.
Conor O'Brien

@ ConorO'Brien - Ồ, bạn nói đúng. Cảm ơn :)
Arnauld

n[a,b,c]trả về n[c], vì vậy bạn có thể thả dấu ngoặc đơn vào n[(a||n.unshift(1),0)].
Sản phẩm ETH

Bạn không cần 1trong vòng lặp for; for(;;)chạy mãi Bạn có thể lưu thêm hai byte với for(n=1;;)alert([1-n,n++]). Ngoài ra, tính năng này không còn sử dụng bất kỳ tính năng ES6 nào nữa ;-)
ETHproductions

5

> <> , 19 15 byte

1::1$-naonao1+!

Điều này in như sau:

0
1
-1
2
-2
3
-3

... và cứ thế. Dấu phân cách là một dòng mới.

Viết lại sau khi đọc câu trả lời của @ xnor để sử dụng phiên bản của thuật toán đó. Bắt đầu từ n=1, chương trình in 1-nn, mỗi dòng theo sau một dòng mới, trước khi tăng n. Sau khi tràn giá trị tối đa, chương trình sẽ kết thúc với lỗi something smells fishy.... Chính xác khi điều này sẽ xảy ra phụ thuộc vào việc thực hiện phiên dịch.


Phiên bản trước:

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

Bắt đầu từ 0, các vòng lặp chương trình vô thời hạn. Trên mỗi vòng lặp, giá trị hiện tại được in cùng với một dòng mới. Sau đó, nó được phủ định và tăng lên nếu tích cực.


Là xnor rõ ràng là một "anh ấy"? Hay là những thiên kiến ​​vô thức của chúng ta đang hiển thị ...?
Greg Martin

2
@GregMartin Thật thú vị, tôi không nghĩ mình đã từng đề cập đến giới tính.
xnor

5

Tiện ích Bash + GNU, 26

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

Tôi chưa bao giờ thấy seq được sử dụng theo cách đó, đây có phải là một lỗi không? Ngoài ra, nó sẽ bắt đầu lặp lại số sau khi tràn kiểu? Tôi biết điều $[++i]đó trong bash.
seshoumara

Trông giống như một tính năng mới hơn - xem mã nguồn . Thêm 1 vào NaN không nên gây ra lỗi.
Chấn thương kỹ thuật số

Tôi rời đi seq NaNđể chạy và sau 999999 việc in ấn được thực hiện theo ký hiệu khoa học với độ chính xác 5 chữ số. Liên quan đến thách thức, giá trị đó là số nguyên lớn nhất bạn in, điều này rất tốt vì phần còn lại sẽ không lặp lại một số trước đó. Cũng lưu ý rằng bạn có thể chạy seq với inf, trường hợp không nhạy cảm giống như cho nan. +1
seshoumara

5

bc, 17 16 byte

Chỉnh sửa: Giảm 1 byte nhờ Chấn thương số .

Thêm vào sự đa dạng của các ngôn ngữ được sử dụng cho đến nay, tôi trình bày một giải pháp bc hoạt động với các số nguyên có kích thước tùy ý . Một dòng mới được yêu cầu sau mã và nó được tính trong tổng số byte.

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

Trong lần lặp đầu tiên ikhông được xác định, nhưng việc in nó mang lại 0 làm tôi ngạc nhiên.


Ngắn hơn 1 byte:for(;;){i;-++i}
Chấn thương kỹ thuật số

@DigitalTrauma Cảm ơn, tôi đã cập nhật câu trả lời của mình. Điều buồn cười là tôi đã sử dụng cấu trúc vòng lặp đó ngày hôm nay trong câu trả lời bash khác của mình , nhưng quên rằng bcnó cũng có nó.
seshoumara

Hoặc for(;;){i++;-i}(cùng chiều dài).
sch

5

Mê cung , 9 byte

!`
\:"
 (

Hãy thử trực tuyến!

Điều này cũng hoạt động và về cơ bản là giống nhau:

 "
`:(
\!

Giải trình

Luồng điều khiển trong mã này khá buồn cười. Hãy nhớ rằng con trỏ lệnh (IP) trong chương trình Labyrinth đi theo đường dẫn của các ký tự không phải khoảng trắng và kiểm tra đỉnh của ngăn xếp tại bất kỳ đường giao nhau nào để quyết định đường đi nào:

  • Nếu đỉnh của ngăn xếp là dương, rẽ phải.
  • Nếu đỉnh của ngăn xếp bằng không, hãy tiếp tục di chuyển thẳng về phía trước.
  • Nếu đỉnh của ngăn xếp là âm, rẽ trái.

Khi IP chạm vào ngõ cụt, nó sẽ quay lại (thực hiện lệnh ở cuối chỉ một lần). Và IP bắt đầu ở góc trên bên trái di chuyển về phía đông. Cũng lưu ý rằng ngăn xếp được lấp đầy với một số lượng vô hạn để bắt đầu.

Chương trình bắt đầu với bit ngắn này:

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

Bây giờ IP đang ở ngã ba có liên quan và di chuyển thẳng về phía trước để phân (rã đỉnh của ngăn xếp -1. IP chạm vào ngõ cụt và quay lại. :nhân đôi đỉnh của ngăn xếp một lần nữa. Bây giờ đỉnh của ngăn xếp là âm và IP rẽ trái (hướng tây). Bây giờ chúng ta thực hiện thêm một lần lặp của vòng lặp chính:

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

Lần này, đỉnh của ngăn xếp là dương, vì vậy IP rẽ phải (hướng tây) và ngay lập tức thực hiện một bước lặp khác của vòng lặp chính, in ra 1. Sau đó, sau khi nó được phủ định lại, chúng ta nhấn vào :với -1stack.

Lần này IP rẽ trái (hướng đông). Đây "chỉ là một no-op và IP quay vòng vào ngõ cụt. :tạo một bản sao khác và lần này IP quay về hướng nam. (giảm giá trị thành -2, IP quay lại. Với đỉnh của ngăn xếp vẫn âm, IP bây giờ quay về hướng tây :và thực hiện lần lặp tiếp theo của vòng lặp chính.

Theo cách này, IP bây giờ sẽ lặp lại giữa một vòng lặp chặt chẽ, in một số dương và một lần lặp đi qua cả hai ngõ cụt để giảm giá trị trước khi in một số âm.

Bạn có thể tự hỏi tại sao lại có "dòng thứ hai nếu nó không thực sự làm gì: không có nó, khi IP đạt đến :giá trị âm, nó không thể rẽ trái (hướng đông) để thay vào đó, nó sẽ rẽ phải (hướng tây) (như một quy tắc tự nhiên, nếu không có hướng thông thường tại một ngã ba, IP sẽ đi theo hướng ngược lại). Điều đó có nghĩa là IP cũng sẽ không bao giờ chạm tới (đáy và chúng tôi không thể phân biệt tích cực với các lần lặp tiêu cực.


Đây là những gì tôi đã đưa ra trước khi thấy câu trả lời của bạn: pastebin.com/VHzAvABe
Robert Hickman

5

JavaScript (ES5), 32 31 30 29 byte

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

Bản in 0 -1 1 -2 2 -3 3 -4 4 -5 5 ...

Tiết kiệm được 1 byte nhờ Patrick Roberts! Đã lưu 2 byte nhờ Conor O'Brien!


1
Làm thế nào về [i++,-i].map(alert)thay vì alert(i++),alert(-i)?
Conor O'Brien

for(;;)ngắn hơn một byte so vớiwhile(1)
Patrick Roberts

@ ConorO'Brien maplà ES6
Paul Schmitz


Bạn có thể di chuyển i=0;bit bên trong vòng lặp for để lưu một byte.
Conor O'Brien

4

Java, 65 54 byte

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

Mã kiểm tra

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 intlà kiểu số nguyên tiêu chuẩn của Java.
Shaun Wild

1
Xin lỗi về điều đó, các yêu cầu đã thay đổi trong thời gian này ...
flawr

2
Bạn có thể đánh gôn tới ()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};( 53 byte )
Kevin Cruijssen

@KevinCruijssen Điều đó làm tăng khoảng cách ...
Shaun Wild

1
Cho thời gian vô hạn, nó sẽ in mỗi số nguyên một số lượng vô hạn mỗi lần.
Olivier Grégoire

4

C #, 83 byte

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

Ung dung:

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

Đầu ra:

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

Có khá nhiều điều có thể được thực hiện để giảm bớt các nhân vật. Đầu tiên, chương trình của bạn không cần một không gian tên. Thứ hai, tên lớp không cần quá dài. Ngoài ra, bạn thực hiện hai cuộc gọi đến console.writeline có thể được đơn giản hóa cho một đại biểu. Trong khi true có thể được đơn giản hóa thành aa cho (;;) và câu lệnh if có thể được loại bỏ bằng cách xuất giá trị 0 trước thông qua ủy nhiệm.
Nico

Cảm ơn. Tôi không biết liệu một đại biểu có thể "gian lận" không?
Pete Arden

Xin chào, chào mừng đến với PPCG! Tôi nghĩ rằng bạn có thể thấy điều này thú vị để đọc qua: Mẹo chơi golf trong C # . Ngoài ra, bạn không cần một chương trình đầy đủ, chỉ cần một chức năng sẽ làm (trừ khi thách thức nói khác). Như vậy void f(){code_present_in_main}là đủ cho số byte. Đối với bản thân mã, bạn có thể đánh golf nó giống như thế này: void f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}( 61 byte )
Kevin Cruijssen

1
Ôi thật tuyệt, giờ 85 khỏe mạnh hơn nhiều, cảm ơn! Tôi sẽ không cảm thấy đúng khi sử dụng tất cả câu trả lời của bạn, nhưng đó chắc chắn là một sự cải tiến và những lời khuyên đó sẽ giúp tôi chơi golf trong tương lai!
Pete Arden

@PeteArden Tôi hiểu vì không sử dụng mã của mình, vì đó là một cách tiếp cận khác. Hmm, bạn vẫn có thể chơi golf 2 byte trong câu trả lời của riêng mình bằng cách đặt decimal n=0n++;bên trong vòng lặp for: void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}:)
Kevin Cruijssen

4

C # 86 66 byte

Câu trả lời mới:

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

Thông thoáng:

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

Câu trả lời cũ (86 byte):

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

Ung dung:

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

1
Có 2 khoảng trắng vô dụng. Một trước Enumerable.Rangevà một trước int.MaxValue.
Yytsi

1
Chào mừng đến với PPCG! +1 Bạn có thể thấy điều này thú vị để đọc: Mẹo chơi gôn trong C # . Trong (các) câu trả lời hiện tại của bạn, các dấu ngoặc cho vòng lặp for có thể được loại bỏ, vì chỉ có một dòng bên trong. Ngoài ra, đây là một cách tiếp cận ngắn hơn: void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}( 57 byte ) .
Kevin Cruijssen

@KevinCruijssen Cảm ơn. Brakets đã biến mất.
Daniel Lerps


4

Powershell, 20 19 18 byte

Cải thiện bằng cách ăn cắp không biết xấu hổ từ câu trả lời của TimmyD

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

Đầu ra:

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

Phiên bản cũ:

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

Không chắc chắn tại sao tbh, nhưng - biến không được khai báo (hoặc - $ null) được đánh giá là 0, giúp chúng tôi tiết kiệm được 2 byte trong phiên bản này ...


1
Chào mừng đến với PPCG!
admBorkBork


4

Brachylog , 2 byte

ẉ⊥

Hãy thử trực tuyến!

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

Vì chương trình không có đầu vào, nên biến đầu vào của biến vị ngữ chính không bị giới hạn. Lúc đầu, nó được coi là 0, nhưng khi thực hiện chạm , nó quay lại điểm duy nhất có thể xảy ra: sự lựa chọn giá trị cho biến đầu vào. Vì vậy, sau đó nó cố gắng 1 và -1, và mọi số nguyên khác, in mỗi số được phân tách bằng dòng mới mãi mãi vì luôn buộc quay lại và hiệu ứng của nó được thực thi ngay lập tức.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.