すべての整数を出力


48

無限の時間とメモリが与えられた場合、すべての整数を正確に一度だけ印刷するプログラムまたは関数を作成します。

可能な出力は次のとおりです。

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

これは有効な出力ではありません。これは負の数を列挙しないためです。

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

  • ご使用の言語が10進整数をサポートしていない限り、出力は10進数でなければなりません(その場合は、言語が使用する整数の自然表現を使用してください)。

  • あなたのプログラムは、あなたの言語の標準整数型の最大の大きさの数値まで動作しなければなりません。

  • 各整数は、言語の数字でも負符号でもないセパレーター(スペース、コンマ、改行など)を使用して次の整数から分離する必要があります。

  • 区切り文字はどの時点でも変更してはなりません。

  • 区切り文字は、数字でも負符号でもない限り、複数の文字で構成することができます(例:と同じくらい有効です,)。

  • サポートされている整数は、最終的に有限時間後に印刷されなければなりません。

得点

これはなので、バイト単位の最短回答が勝ちます

リーダーボード


3
言語が無限リストをサポートしている場合、印刷するのではなく関数からリストを出力できますか?(そのようなリストでprintを呼び出すと、その要素が一度に1つずつ永久に印刷されます。)
xnor

5
任意のサイズの整数に対する要件は、そのような整数が参加しない言語を思いとどまらせるだけだと思います。使用できるインポートを用意するか、他のユーザーとはまったく異なる課題を解決する必要があります。
XNOR

2
@xnorは変更されましたが、そのような種類の遺跡はまさにチャレンジの名前です。
致命的

5
@xnor、任意精度の整数を持つ言語はまだので、すべてその変更がなされたことを、誰もが異なる問題を解決しなければならない言語の多くでは、この問題はうんざり些細なようにすることです。
ピーターテイラー

2
@PeterTaylorうん、これは残念です。ラッピングソリューションは、ネガを印刷しているようには感じませんが、表現の問題である場合に違いをしっかりと特定する方法がわかりません。
xnor

回答:


19

Sesos11 3 3バイト

0000000: c4ceb9                                            ...

オンラインでお試しください!デバッグをチェックして、生成されたSBINコードを確認します。

Sesosアセンブリ

上記のバイナリファイルは、次のSASMコードをアセンブルして生成されています。

set numout

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

この3バイトはどうですか?
うまくいけば

1
GitHubのreadme(ヘッダーにリンクされています)に、命令のエンコード方法が詳しく説明されています。
デニス

1
6桁の16進数/ 2 = 3バイト@HopefullyHelpful
Stan Strum

@StanStrum感謝
うまくいけば

47

Haskell、19バイト

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

無限リストを作成します [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...

Haskellは、無限リストをネイティブに許可します。そのようなリストを印刷すると、その要素が永久に1つずつ印刷されます。


2
大好き[n,1-n]
flawr

3
私見[1-n,n]はより良い出力を生成します。
ニール

@Neil同意して、変更しました。
xnor

2
ああ、それはモナデスconcatMap (\n -> [1-n, n]) [1..]ですよね?いいね!
カーステンS

@CarstenSはい、正確に。
-xnor

29

Brainfuck、6バイト

これはセルの折り返しを利用し、すべての可能な値を出力します。Brainfuckでは、ネイティブの整数表現はバイト値です。

.+[.+]

オンラインでお試しください!


2
ニース、これはこれまでPPCGで見てきた最短のBrainfuck回答です。
ケビンCruijssen

1
これは、無制限のセルを持つBrainfuckバージョンでは機能しません。修正してください(別の回答であっても)
ジョンドヴォルザーク

16
@JanDvorak Answersは、すべての実装で動作する必要はなく、いずれか1つで動作するだけです。
マーティンエンダー

7
これがなぜ有効なのか説明をいただけますか?質問で言及されているセパレーターやネガはありません。また、brainfuckで9を超える値を出力できるという事実もあります。コードゴルフに不慣れで、負の数と正の数を分けて出力するものに取り組み始めてから、数字を大きくしました。
gtwebb

5
@SQBメモリが無制限であっても、整数のネイティブタイプは8ビットのままです。intラムを追加または削除したからといって、Javaのビット数が突然増減することはありません。
-flawr

26

Cubix14 12バイト

.(.\OSo;?.>~

オンラインでテストしてください!速度を速くしたり遅くしたい場合は、速度を調整できるようになりました。

使い方

インタープリターが最初に行うことは、すべての空白を削除.し、キューブに完全に収まるまで何もしないでコードを埋め込みます。つまり、上記のコードは次のようにも記述できます。

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

これでコードが実行されました。IP(命令ポインター)は、左端の東上を指す左上隅から始まります。以下は、プログラムの実行中に必要なパスです。

ここに画像の説明を入力してください

IPは、画像の左端の赤い軌跡から始まります。次に実行されOSo;、次のことを行います。

  • OTOS(スタックの最上部)を整数として出力します。プログラムの開始時には、スタックには無限のゼロが含まれているため、これが出力され0ます。
  • S32スペース文字の文字コードであるプッシュ。
  • oTOSを文字として印刷します。これにより、スペースが印刷されます。
  • ;TOSをポップします。を32スタックから削除します。

これで、IPはにヒットし?、TOSの符号に応じて、左、右、またはまっすぐになります。現在、TOSは0ですので、まっすぐ進みます。これが青いパスです。.何もせず、IPは矢印>に当たり、再び赤いパスに沿って東に向けられます。~TOSのビット単位のNOTを取り、に変更し-1ます。

ここで、IPはネットの右端に到達し、左に折り返されます。これは再びTOS(今回は-1)とスペースを出力します。

IPが?再びヒットします。今回、TOSは-1; これは負であるため、IPは左に曲がり、緑のパスを取ります。ミラー\はIPをに偏向し(、これによりTOSが減少し、に変更され-2ます。それは戻ってきて矢印に当たります。~回し、ビット単位のNOT再び取り-21

再びTOSが出力され、スペースが印刷されます。今回IPがヒットする?とき、TOSは1; これは正の値なので、IPは右に曲がり、黄色のパスを取ります。最初に遭遇する演算子はS、追加のプッシュ32です。;それはどんな問題を引き起こすことができる前にそれをポップ。

IPは矢印に戻り、そのルーチンを実行して~、TOSを変更し-2O印刷します。TOSは再び負であるため、IPは再び緑のパスを取ります。そして、そのような循環を永遠に続けます*:赤、緑、赤、黄、赤、緑、赤、黄...、次のサイクルで印刷:

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

TL; DR

このプログラムは、次の3つの簡単な手順を繰り返します。

  1. 現在の番号とスペースを出力します。
  2. 現在の数値が負の場合は、1だけ減分します。
  3. 現在の数のビット単位のNOTを取ります。

分離されていないバージョン、6バイト

nO?~>~

分離を削除すると、プログラムが非常に単純化され、ユニットキューブに収まるようになります。

  n
O ? ~ >
  ~

* :どちらのプログラムも最大で2 52(JavaScriptが整数精度を失い始める)までしかカウントしないため、どちらのプログラムも真に無限ではありません。


4
素敵な図!:)それを手で作成したか、それを生成するツールを作成しましたか?
マーティンエンダー

5
@MartinEnderありがとうございます!六角形の図に触発されました。私はそれを手で作成しました。ただし、十分な時間があるときに生成するためのツールを作成したいと思います。
ETHproductions

18

MATL、8バイト

0`@_@XDT

これはMATLのデフォルトのデータ型であるを使用doubleするため2^53、絶対値まで機能します。出力は

0
-1
1
-2
2
···

オンラインでお試しください!

説明

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

印刷を開始する前に、なぜそんなに大きな遅延があるのですか?
致命的

@Fatalize TIOでMATLプログラムを実行するたびにOctaveを再起動する必要があると思いますが、それには時間がかかります。
flawr

@Fatalizeよくわかりません。オフラインではなく、オンラインコンパイラで発生します。私はそれがOctaveは、出力をページングとしなければならないかもしれないと思ったが、今はそれが理由だかどうかわからないんだけど
ルイスMendo

1
最初の実行で0を含めることができるようにするのでは@_@XDなく、行うのが賢明@_D@Dです。
Sanchises

3
XDスマイリーの+1
TuxCrafting

16

シェークスピアプログラミング言語、227バイト

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

明らかに、この答えは勝ちに近いものではありませんが、これはSPLが比較的よく適しているユースケースであることが好きでした。

説明:

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

このコードを、永遠にカウントアップする(つまり、すべての自然数を印刷する)関連の課題に対する私の答えと比較するとわかるように、問題のサイズが大きくなるとSPLコードの長さがかなり大きくなります...


1
私はこれが好き。それはゴルフにはひどいですが、読書には素晴らしいです。

説明の最後の行のタイプミス。Let us return to scene II.する必要がありますscene I
オリバーNi

違いを指摘してくれてありがとう!タイプミスは実際には上位コードにありました。シーンI $puckを0にリセットしてからカウントアップが機能しなくなるため、シーンIを繰り返さないでください。Iコードに欠落を追加し、バイト長を修正しました(とにかく少し外れました)
-Christallkeks

14

Python 2、27バイト

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

プリント -1 0 -2 1 -3 2 -4 3 ...


10

05AB1E9 6バイト

Adnanのおかげで3バイト節約

[ND,±,

オンラインでお試しください!

0, -1, 1, -2, 2 ...改行で区切られた印刷。


2
ビット単位のマジックを使用して、6バイトまで下げることができました[N,N±,
アドナン

1
@アドナン:いいね!私は以前に似たようなことをしようとしましたが、使用しなかったため±、あなたのものよりも3バイト長くなりました。
エミグナ

私はそれがしばらくされていることを知っていD,ますが=、バイトを保存するために置き換えることができます。
ケビンクルーッセン

10

GNU sed、189 + 2(rnフラグ)= 191バイト

sedには整数型または算術演算がないため、これはおそらく最も長いソリューションです。そのため、正規表現のみを使用して、任意のサイズの増分演算子をエミュレートする必要がありました。

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

実行:

echo | sed -rnf all_integers.sed

出力:

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

10

Brainfuck、127バイト

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

オンラインでお試しください!

無限のテープが理論的には永遠に実行されると仮定します。

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

非圧縮

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

9

ShadyAsFuck、3バイト

FVd

説明:

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

これはセルの折り返しを利用し、すべての可能な値を出力します。SAFでは、ネイティブ整数表現はバイト値です。


5
この答えは...日陰です。
コナーオブライエン

1
誰がその言語名を思いついたのかと思っていたのですが、その言語の由来に気付きました。
ジョンドヴォルザーク

8

R、25 24バイト

@JDLのおかげで1バイトのゴルフをした。

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

オンラインでお試しください!

出力例:

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

2
に置き換えwhile(1)repeat 文字を保存できます。
JDL

@JDLありがとう!コンストラクトが時々存在することを忘れます。
rturnbull

7

バッチ、56バイト

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

出力:

0
-1
1
-2
2
-3

など2147483647まで動作します。出力に(-)2147483648が必要な場合は58バイト:

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

サポートされているすべての正の整数を印刷し、サポートされているすべての負の整数を印刷してから無限に繰り返す場合、44バイトが許容されます。

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

7

Java 7、151 134 122 118バイト

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

@flawr(および間接的に@xnor)のおかげで12バイト節約

ルール変更後..(59 56 63バイト)

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

Javaでは2147483647 + 1 = -2147483648i++すべての数字を一度だけ出力することが課題であったため、単純に無限に実行して継続することはできません。上記のコードに範囲を追加すると、代わりにから-2147483648までのすべての整数2147483647が次の順序で出力されます0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648。/ に関するJavaの動作を指摘してくれた@OlivierGrégoireに感謝します。ここで試してみてください。MIN_VALUE-1MAX_VALUE+1

未ゴルフ&テストコード:

ここで試してください-実行時エラーが発生します

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

出力:

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

1
nと1-nを同時に印刷することで、いくつかのバイトを節約できると思います。この方法で比較を削除できます。@xnorは、このアイデアをここで最初に使用した人です。
flawr

1
あなたのint無限の時間与えられた-versionプログラムは、無限の時間整数ごとに印刷されます。
オリヴィエグレゴワール

1
@OlivierGrégoireああ、もちろん、MAX_VALUE + 1はMIN_VALUE ..ため息です。指摘してくれてありがとう、編集しました。
ケビンCruijssen

1
。あなたはより多くの(すなわち退治ゴルフをしたい場合MAX_VALUE、あなたはおそらくまだ最後のページに私の答えを(OU確認することができます)
オリヴィエ・グレゴワール

1
53バイトのソリューションはスニペットであり、関数やプログラムではないため、有効ではありません。
メゴ

6

DC(GNUまたはOpenBSDフレーバー) -16バイト

このバージョンは以下のバージョンよりも短くはありませんが、PCでスタックが爆発することなく実行できるはずです。それにもかかわらず、無限の大きな数は無限のメモリを占有します...いつか...

rコマンドのために、GNU-DCまたはOpenBSD-DCが必要です。

0[rp1+45Pprdx]dx

テスト:

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

DC -16バイト

今少し意味します。;-)

このバージョンは、スタックを成長させながら、カウンターとしてスタックの長さを乱用しています。

z[pz45Ppllx]dslx

テスト:

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

DC -17バイト

汚いトリックなし。

0[p1+45Ppllx]dslx

テスト:

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

+?「遅かれ早かれ...予想よりも早く」
グレッグマーティン

2
代わりに[-]P、行います45P「GNU-DcまたはOpenBSD-Dc」 -世の中によく見られる他のバージョンはありますか?
デジタル外傷

1
別の解決策(またはいくつか)がありますが、実際の負の数に関係しています。新しい回答でそれらを投稿できますか?dcいくつかの演算子しか持っていないので、これらに非常に似ているので私は尋ねています。これらとは独立して開発しました。
ジョー

@DigitalTrauma ...確かに... 元のDcにr「スワップ」がありませんでした。dofferentバージョンを見ると時々混乱することがあります。おそらく、古代のDcでコードを作成したい人rはいないでしょう(そして、スタックがクリアされます)。「Dc」を「AT&T dc」に変更したのでしょうか?...そして45Pヒントをありがとう
...-イエティ

2
@yeti答えに「dc」を付けました。特に「現代の」DCフレーバーの遍在を考えると、ここの人々はあまり心配していないと思います。
デジタル外傷

6

C#74バイト

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

出力:

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

それを試してみてください:

dotnetfiddle.net (1000に制限)


これらのスニペットは機能/完全なプログラムではありませんか?
pinkfloydx33

申し訳ありませんが、完全なプログラムが追加されました
アレックス

2
public修飾子を省略して、14バイトを節約できます。デフォルトも同様に機能します。
アレハンドロ

@Alejandroは:)それは私の最初の投稿です、ありがとうございました
アレックス・

6

ルビー、26 22 19 16バイト

改行で区切られた数字を出力します。@manatworkから-3バイト。@ m-chrzanから-3バイト。

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

ここで数値を出力pしているので、それも行います。
マナトワーク

0.step{|n|p n,~n}17バイトの場合。
m-chrzan

1
@ m-chrzan順序はそれほど重要ではないので、あなたの提案に加えて、余分なバイトを削ることができました!
バリューインク

6

JavaScript、29 26バイト

無限バージョン、26バイト

ETHproductionsのおかげで3バイト節約

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

-9007199254740991から9007199254740992までのすべての整数を表示します。

無限バージョン(ES6)、114 112バイト

ETHproductionsのおかげで2バイト節約

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

無限の時間とメモリを指定すると、すべての整数が表示されます。


関数ボイラープレートをドロップして、完全なプログラムと呼ぶことができます。
コナーオブライエン

@ ConorO'Brien-ああ、そうだね。ありがとう:)
アーナルド

n[a,b,c]が返されるn[c]ので、括弧をドロップできますn[(a||n.unshift(1),0)]
ETHproductions

1どちらのforループも必要ありません。for(;;)永遠に実行されます。でさらに2バイト節約できますfor(n=1;;)alert([1-n,n++])。また、これはES6機能を使用しなくなりました;-)
ETHproductions

5

> <>19 15バイト

1::1$-naonao1+!

これにより、次が印刷されます。

0
1
-1
2
-2
3
-3

... 等々。区切り記号は改行です。

@xnorの回答を読んでそのアルゴリズムのバージョンを使用した後に書き直されました。から開始してn=1、プログラムはとを出力1-nnますn。最大値をオーバーフローした後、プログラムはのエラーで終了しますsomething smells fishy...。いつこれが起こるかは、インタープリターの実装に依存します。


前のバージョン:

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

0から開始すると、プログラムは無限にループします。各ループで、現在の値が改行とともに出力されます。その後、否定され、正の場合は増分されます。


xnorは明確に「彼」ですか?または私たちの無意識の偏見が示しています...?
グレッグマーティン

2
@GregMartinそれは面白いです、私は今まで性別について言及したことはないと思います。
xnor

5

Bash + GNUユーティリティ、26

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

seqがそのように使用されるのを見たことがありませんが、これはバグのようなものですか?また、型オーバーフローの後、数字を繰り返し始めますか?私$[++i]はそれがbashでそうであることを知っています。
seshoumara

新しい機能のように見えます- ソースコードを参照してください。NaNに1を追加しても、ラップアラウンドは発生しません。
デジタル外傷

seq NaN実行を辞め、999999の後、印刷は5桁の精度で科学表記法で行われました。チャレンジに関しては、その値は印刷する最大の整数であり、残りは前の数字を繰り返さないので問題ありません。またinf、のように大文字と小文字を区別せずにseqを実行できることに注意してくださいnan。+1
seshoumara

5

bc、17 16バイト

編集:Digital Traumaのおかげで1バイト少なくなりました。

これまでに使用された言語の多様性に加えて、任意のサイズの整数で動作するbcソリューションを紹介します。コードの後に​​改行が必要であり、合計バイト数でカウントされます。

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

最初の反復iでは定義されていませんが、印刷すると0になります。


1バイト短縮:for(;;){i;-++i}
デジタル外傷

@DigitalTraumaありがとう、回答を更新しました。面白いのは、他のbashの回答で今日ループ構成を使用したことですが、bcそれも忘れていました。
seshoumara

またはfor(;;){i++;-i}(同じ長さ)。
sch

5

ラビリンス、9バイト

!`
\:"
 (

オンラインでお試しください!

これも機能し、基本的に同じです。

 "
`:(
\!

説明

このコードの制御フローはかなり面白いです。Labyrinthプログラムの命令ポインター(IP)は非スペース文字のパスをたどり、どのジャンクションでスタックの最上部を調べて、どのパスを取るかを決定することに注意してください。

  • スタックの上部が正の場合、右に曲がります。
  • スタックの最上部がゼロの場合は、まっすぐ進んでください。
  • スタックの上部が負の場合、左に曲がります。

IPが行き止まりに到達すると、向きを変えます(最後に1回だけコマンドを実行します)。そして、IPは東上に移動する左上隅から始まります。また、スタックには最初から無限のゼロが埋め込まれていることに注意してください。

プログラムは次の短いビットで始まります。

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

ここで、IPは関連するジャンクションにあり(、スタックの最上部をに減らします-1。IPは行き止まりになり、向きを変えます。:スタックの一番上をもう一度複製します。スタックの上部が負になり、IPが左(西)に変わります。ここで、メインループのもう1つの反復を実行します。

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

今回は、スタックの最上部が正であるため、IPは右(西)に変わり、すぐにメインループの別の反復を実行します1。その後、再び否定された後、スタックで:with をヒット-1します。

今回は、IPが左(東)になります。これ"はただの操作ではなく、IPは行き止まりに向きを変えます。:別のコピーを作成し、今度はIPが南になります。(値を-2に減らして、IPが再び向きを変えます。スタックのトップがまだ負であるため、IPは今度は西でターンし:、メインループの次の反復を実行します。

このようにして、IPは、正の数を出力するタイトループの反復と、負の数を出力する前に値を減らすために両方の行き止まりを通過する反復の間で反復します。

"実際に何もしないのに2行目にある理由を自問するかもしれません:それなしでは、IPが:負の値に達すると、左(東)に回転できず、代わりに右(西)になります(経験則として、ジャンクションで通常の方向が利用できない場合、IPは反対方向を取ります)。つまり、IPが(最下位に到達することは決してなく、正の反復と負の反復を区別できませんでした。


これは私があなたの答えを見る前に思い付いたものです:pastebin.com/VHzAvABe
ロバート・ヒックマン

5

JavaScript(ES5)、32 31 30 29バイト

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

プリント 0 -1 1 -2 2 -3 3 -4 4 -5 5 ...

Patrick Robertsのおかげで1バイト節約できました!Conor O'Brienのおかげで2バイト節約できました!


1
どの程度[i++,-i].map(alert)の代わりにalert(i++),alert(-i)
コナーオブライエン

for(;;)は1バイト短いwhile(1)
パトリックロバーツ

@ ConorO'Brien mapはES6
ポールシュミッツ


i=0;forループ内でビットを移動して、バイトを節約できます。
コナーオブライエン

4

Java、65 54バイト

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

ゴルフされていないテストコード

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 intJavaの標準整数型です。
ショーンワイルド

1
申し訳ありませんが、そのことについて、要件が...その間に変更されました
flawr

2
ゴルフすることができます()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};53バイト
ケビンCruijssen

間隔アップファック...それ@KevinCruijssen
ショーン・ワイルド

1
無限の時間を指定すると、すべての整数をそれぞれ無限の回数印刷します。
オリビエグレゴワール

4

C#、83バイト

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

ゴルフをしていない:

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

出力:

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

文字を減らすためにできることはかなりあります。まず、プログラムに名前空間は必要ありません。第二に、クラス名はそれほど長くする必要がない。また、デリゲートに簡略化できるconsole.writelineを2回呼び出します。while trueはaa for(;;)に簡素化でき、ifステートメントはデリゲートを通じて最初にゼロの値を出力することで削除できます。
ニコ

ありがとう。デリゲートが「不正行為」をしている可能性があるかどうか知りませんでしたか?
ピートアーデン

こんにちは、PPCGへようこそ!あなたはこれを読んで面白いと思うかもしれません:C#でのゴルフのヒント。また、完全なプログラムを必要とせず、機能があれば十分です(別の方法で課題が示されていない限り)。void f(){code_present_in_main}バイトカウントにはこれで十分です。コード自体については、次のようにゴルフをすることができます:void f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}61バイト
ケビンクルーイッセン

1
素晴らしいですね、今は85より健康的です、ありがとう!私はあなたの答えのすべてを使うのは正しいとは思いませんが、それは間違いなく改善であり、それらのヒントは私の将来のゴルフに役立ちます!
ピートアーデン

@PeteArden私は自分のコードを使用しないことを理解しています。これは別のアプローチだからです。うーん、あなたはまだゴルフ2を配置することによって、あなた自身の答えでバイトすることができますdecimal n=0し、n++;forループけれども内側:void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}:)
ケビンCruijssen

4

C#86 66バイト

新しい答え:

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

クリア:

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

古い回答(86バイト):

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

ゴルフをしていない:

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

1
2つの無駄な空白があります。1つ前Enumerable.Rangeと1つ前int.MaxValue
Yytsi

1
PPCGへようこそ!+1これを読むと面白いかもしれません:C#でのゴルフのヒント。現在の回答では、forループの括弧を削除できます。これは、内部に1行しかないためです。または、これはより短いアプローチです:void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}57バイト
ケビンCruijssen

@KevinCruijssenありがとう。ブラケットはなくなりました。
ダニエル・レプス


4

Powershell、20 19 18バイト

TimmyDの答えから恥知らずに盗むことにより改善

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

出力:

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

旧版:

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

なぜtbhなのかわかりませんが、- 未宣言の変数(または-$ null)が0として評価されるため、このバージョンでは2バイト節約されました...


1
PPCGへようこそ!
AdmBorkBork


4

Brachylog、2バイト

ẉ⊥

オンラインでお試しください!

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

プログラムには入力が与えられていないため、メイン述語の入力変数は制約されません。最初は0であると想定されますが、実行がヒットすると、唯一の可能性のある障害点、つまり入力変数の値の選択に戻ります。そのため、1、-1、およびその他すべての整数を試行し、常にバックトラックを強制するため、改行で区切られた各整数を永久に出力し、その効果はすぐに実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.