Tüm tamsayıları yazdır


48

Sonsuz zaman ve hafıza verildiğinde tüm tamsayıları kesin olarak basacak bir program veya işlev yazın .

Olası çıktılar şunlar olabilir:

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

Bu, hiçbir zaman negatif sayıları saymayacağından geçerli bir çıktı değildir:

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

  • Diliniz ondalık tamsayıyı desteklemediği sürece, çıktının ondalık olması gerekir (bu durumda dilinizin kullandığı tamsayıların doğal gösterimini kullanın).

  • Programınız, dilinizin standart tamsayı tipinin en büyük büyüklüğüne sahip sayıları bulmalıdır.

  • Her tamsayı bir dilden veya dilinizin negatif işareti olmayan herhangi bir ayırıcı (boşluk, virgül, satır sonu vb.) Kullanılarak ayrılmalıdır.

  • Ayırıcı herhangi bir noktada değişmemelidir.

  • Ayırıcı, hiçbiri bir rakam veya negatif bir işaret olmadıkça (örneğin , sadece olduğu kadar geçerlidir ,) birden çok karakterden oluşabilir .

  • Desteklenen herhangi bir tamsayı sonunda belirli bir süre sonra yazdırılmalıdır.

puanlama

Bu , yani bayt cinsinden en kısa cevap kazanır.

Liderler Sıralaması


3
Dilimiz sonsuz listeleri destekliyorsa, listeyi yazdırmak yerine işlevden çıkarabilir miyiz? (Böyle bir listeye baskı yapmak, elemanlarını sonsuza dek teker teker
basar

5
Keyfi boyutta tamsayılar gereksiniminin, bu tür tamsayılar olmadan dilleri cesaretlendirmekten başka bir şey yapmadığını hissediyorum. Ya kullanabilecekleri bir ithalata sahip olmalılar ya da diğerlerinden tamamen farklı bir mücadeleyi çözmeliler.
xnor

2
@xnor Değişti, ancak bu tür harabeler meydan okumanın adını.
14'te ölümle sonuçlandı

5
@xnor, keyfi tamsayılı dillere sahip diller hala herkesinkinden farklı bir sorunu çözmek zorundadır, bu yüzden bu değişikliğin başardığı şey, bu problemi birçok dilde çok önemsiz hale getirmektir.
Peter Taylor

2
@PeterTaylor Evet, bu talihsiz bir durum. Ambalajlama çözümleri, herhangi bir olumsuzluk bastırıyormuş gibi hissetmiyorum, ancak bir temsil meselesi olduğunda farkı kesin olarak belirtmenin bir yolunu görmüyorum.
xnor

Yanıtlar:


19

Sesos , 11 3 3 bayt

0000000: c4ceb9                                            ...

Çevrimiçi deneyin! Kontrol Debug oluşturulan SBIN kodunu görmek için.

Sesos derleme

Yukarıdaki ikili dosya aşağıdaki SASM kodunu birleştirerek oluşturulmuştur.

set numout

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

bu 3 bayt nasıl?
Umarım yardımcı

1
GitHub'daki benioku (başlığa bağlı), talimatların nasıl kodlandığını detaylı olarak açıklar.
Dennis,

1
6 onaltılık basamak / 2 = 3 bayt @HopefullyHelpful
Stan Strum

@StanStrum teşekkürler
HopefullyHelpful

47

Haskell, 19 bayt

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

Sonsuz listesini üretir [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...

Haskell, sonsuz listeleri yerel olarak sağlar. Böyle bir listeyi yazdırmak, elemanlarını sonsuza dek bir defa basar.


2
Aşk [n,1-n]!
kusur

3
IMHO [1-n,n]daha iyi çıktılar üretecekti.
Neil

@Neil kabul edersem değiştirdim.
xnor

2
Ah, bu monadese için concatMap (\n -> [1-n, n]) [1..]değil mi? Güzel!
Carsten S

@ CarstenS Evet, kesinlikle.
xnor

29

Brainfuck, 6 bayt

Bu hücre sargısını kullanır ve olası tüm değerleri yazdırır. Brainfuck'ta, yerel tamsayı gösterimi bayt değerine göredir .

.+[.+]

Çevrimiçi deneyin!


2
Güzel, bu PPCG'de şu ana kadar gördüğüm en kısa Brainfuck cevabı.
Kevin Cruijssen

1
Bu, sınırlandırılmamış hücrelere sahip beyin fırtınası sürümleri için işe yaramaz. Lütfen düzeltin (ayrı bir cevap olarak bile olsa)
John Dvorak

16
@JanDvorak Cevaplar her uygulamada, sadece bir tanesinde çalışmak zorunda değildir .
Martin Ender

7
Bunun neden geçerli olduğunu açıklayabilir miyim? Soruda belirtildiği gibi ayırıcı ve olumsuzluk yoktur. Beyin fırtınasında 9'dan daha büyük değerleri üretebilmenizin yanı sıra. Kod golf deneyiminde tecrübem yok ve negatif ve pozitif çıktılar üzerinde çalışmaya başladım.
gtwebb

5
@SQB Sınırsız hafızaya sahip olsa bile, yerel tamsayılar hala 8bit. Java int, sadece biraz ram eklediğiniz veya kaldırdığınız için birden fazla veya daha fazla bit içermez.
kusur,

26

Cubix , 14 12 bayt

.(.\OSo;?.>~

Çevrimiçi test edin! Şimdi daha hızlı veya daha yavaş çalışmasını istiyorsanız, hızı ayarlayabilirsiniz.

Nasıl çalışır

Tercümanın yaptığı ilk şey tüm boşlukları kaldırmak ve .bir küp üzerine mükemmel bir şekilde oturana kadar no-ops ile kodu doldurmak . Bu, yukarıdaki kodun şöyle yazılabileceği anlamına gelir:

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

Şimdi kod çalıştırıldı. IP (talimat göstergesi), en soldaki yüzün sol üst köşesinde, doğuya işaret ederek başlar. İşte programın çalıştırılması boyunca izlenen yollar:

görüntü tanımını buraya girin

IP, görüntünün en solundaki kırmızı izde başlar. Sonra çalışır OSo;, aşağıdakileri yapar:

  • OTOS'u (yığının en üstünde) bir tamsayı olarak yazdırın. Programın başında, yığın sonsuz sıfırlar içeriyor, bu yüzden yazdırılıyor 0.
  • S32Boşluk karakterinin karakter kodunu itin .
  • oTOS'u bir karakter olarak yazdırın. Bu bir boşluk basar.
  • ;TOS'u patlat. 32Yığından gelenleri kaldırır .

Şimdi IP ?, TOS'un işaretine bağlı olarak sola, sağa veya dümdüze yönlendiren isabet eder . Şu anda, TOS 0, bu yüzden düz gider. Bu mavi yoldur; .hiçbir şey yapmaz ve IP >onu tekrar kırmızı yol boyunca doğuya yönlendiren oka vurur . ~TOS'un bittiğini DEĞİL alır, değiştirerek -1.

Burada IP, onu sola doğru geri sararak ağın sağ kenarına ulaşır; bu yine TOS'u (bu sefer -1) ve bir alanı yazdırır .

Şimdi IP ?tekrar vurur . Bu kez, TOS -1; bu negatif olduğu için IP yeşil yoldan sola döner. Ayna \IP'yi, TOS'u (azaltan, konumuna değiştiren yere indirir -2. Geri dönüyor ve oku vuruyor; ~dönüm, bit DEĞİL tekrar alır -2için 1.

Yine TOS yazdırılır ve bir alan yazdırılır. IP bu kez vurduğunda ?, TOS 1; bu pozitif olduğu için IP sarı yoldan sağa döner. Karşılaştığı ilk operatör S, fazladan itmek 32; ;o herhangi bir sorun neden olabilir önce onu çıkar.

Artık IP ok etrafında dönüyor ~ve TOS'u değiştirerek -2ve Oyazdırırken rutini gerçekleştiriyor . TOS tekrar negatif olduğu için IP yeşil yoldan bir kez daha geçer. Ve sonsuza dek böyle sürmeye devam ediyor *: kırmızı, yeşil, kırmızı, sarı, kırmızı, yeşil, kırmızı, sarı ...

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

TL; DR

Bu program tekrar tekrar bu 3 kolay adımdan geçer:

  1. Geçerli sayıyı ve boşluğu girin.
  2. Geçerli sayı negatifse, 1 ile azaltın.
  3. Geçerli numaradan bit bit NOT al.

Ayrılmamış versiyon, 6 bayt

nO?~>~

Ayırmanın kaldırılması, programı ünite küpüne sığabilecek kadar basitleştirir:

  n
O ? ~ >
  ~

* Not : Hiçbir program gerçekten sınırsızdır, çünkü sadece 2 52'ye kadar sayılır (JavaScript tam sayı hassasiyetini kaybetmeye başlar).


4
Güzel diyagram! :) Bunu elle mi yarattınız veya oluşturmak için bir araç mı yazdınız?
Martin Ender

5
@MartinEnder Teşekkürler! Senin Hexagony diyagramlarından ilham aldı. Bunu elle yarattım; Yine de yapacak kadar vaktim olduğunda onları üretmek için bir araç yazmak istiyorum.
ETHproductions

18

MATL , 8 bayt

0`@_@XDT

Bu MATL'ın varsayılan veri tipini kullanır double, yani 2^53mutlak değerde çalışır. Çıktı

0
-1
1
-2
2
···

Çevrimiçi deneyin!

açıklama

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

Baskıya başlamadan önce neden bu kadar büyük bir gecikme var?
ölümle sonuçlandı

@Fatalize TIO'da bir MATL programını her çalıştırışınızda Octave'nin yeniden başlatılması gerektiğini düşünüyorum ve bu biraz zaman alıyor.
kusur

@ Fatalize Emin değilim. Çevrimdışı değil, çevrimiçi derleyicide gerçekleşir. Octave'in çıktıyı sayfalama ile ilgisi olabileceğini düşündüm, ama şimdi bunun nedeni olup olmadığından emin değilim
Luis Mendo

1
Bunun @_@XDyerine akıllıca bir fikir yapmak @_D@D, ilk çalıştırmaya 0 ekleyebilmektir.
Sanchises

3
XDSmiley için +1
TuxCrafting

16

Shakespeare Programlama Dili , 227 bayt

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

Açıkçası, bu cevap kazanmaya yakın bir yer değil, ancak bunun SPL'nin buna uygun bir kullanım olayı olduğunu sevdim.

Açıklaması:

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

Bu kodu karşılaştırırken gördüğüm kadarıyla sonsuza kadar saymak için (yani tüm doğal sayıları yazdırmak) ilgili zorluklara verdiğim cevapta , sorun boyutu arttıkça SPL kod uzunluğu oldukça kötü büyüyor ...


1
Bunu severim. Golf oynamak için korkunç, ama okumak için harika.
domuz balığı

Açıklamanın son satırında yazım hatası. Let us return to scene II.olmalı scene I.
Oliver Ni,

Farkı gösterdiğin için teşekkürler! Yazım hatası aslında üst koddaydı: 1. sahneyi tekrar etmemeliyiz çünkü $puck0'a sıfırlanacak ve sonra sayma artık işe yaramayacaktı. Koddaki eksik Iolanı ekledim ve bayt uzunluğunu düzelttim (bu durum zaten biraz kapalıydı)
Christallkeks

14

Python 2,27 bayt

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

Baskılar -1 0 -2 1 -3 2 -4 3 ...


10

05AB1E , 9 6 bayt

Adnan sayesinde 3 bayt kurtarıldı

[ND,±,

Çevrimiçi deneyin!

Yeni 0, -1, 1, -2, 2 ...satırlarla ayrılmış baskılar .


2
Bazı bit düzeyinde büyü kullanarak 6 bayt için aşağı almak başardı: [N,N±,.
Adnan

1
@Adnan: Güzel! Daha önce benzer bir şeyler yapmaya çalıştım ama kullanmadım ±ve sizinkinden 3 byte daha uzun sürdü.
Emigna

Bir süre geçtiğini biliyorum ama bir bayttan tasarruf etmek D,için değiştirilebilir =.
Kevin Cruijssen

10

GNU sed, 189 + 2 (rn bayrakları) = 191 bayt

Sed'nin tamsayı türü veya aritmetik işlemi olmadığından, bu muhtemelen en uzun çözümdür. Bu nedenle, sadece normal ifadeler kullanarak rastgele bir boyut artış operatörü taklit etmek zorunda kaldım .

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

Çalıştırmak:

echo | sed -rnf all_integers.sed

Çıktı:

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

10

Brainfuck, 127 bayt

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

Çevrimiçi deneyin!

Sonsuz bir kaset verilen teorik olarak sonsuza dek koşacaktı.

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

sıkıştırılmamış

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

9

ShadyAsFuck , 3 bayt

FVd

Açıklama:

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

Bu hücre sargısını kullanır ve olası tüm değerleri yazdırır. SAF'ta, yerel tamsayı gösterimi bayt değerine göredir .


5
Bu cevap ... gölgeli.
Conor O'Brien,

1
Dil adını kimin bulduğunu merak ediyordum, sonra hangi dilden geldiğini fark ettim.
John Dvorak

8

R, 25 24 bayt

@JDL sayesinde bir bayt golf attı.

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

Çevrimiçi deneyin!

Örnek çıktı:

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

2
Bir karakter kaydetmek için while(1)ile değiştirebilirsiniz repeat .
JDL

@JDL Teşekkürler! Bu yapının bazen var olduğunu unutuyorum.
rturnbull

7

Toplu iş, 56 bayt

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

Çıktı:

0
-1
1
-2
2
-3

vb 2147483647'ye kadar çalışır; 58 bayt isterseniz (-) 2147483648 çıktıda:

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

Desteklenen tüm pozitif tam sayıların yazdırılması, ardından desteklenen tüm negatif tam sayıların yazdırılması ve ardından sonsuz bir şekilde tekrarlanması durumunda 44 bayt kabul edilebilir:

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

7

Java 7, 151 134 122 118 bayt

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 (ve @xnor dolaylı olarak) sayesinde 12 bayt kaydedildi

Kural değişikliğinden sonra .. ( 59 56 63 bayt)

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

Java’dan beri, sınırsız sayıda devam 2147483647 + 1 = -2147483648edemeyiz i++, çünkü zorluk tüm sayıları bir kez basmaktı. Katma aralığı ile yukarıdaki kod ile, bunun yerine tüm tamsayıları yazdırır -2147483648için 2147483647aşağıdaki sırayla, her bir kere: 0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648. Java'nın / ile ilgili davranışını gösterdiği için @ OlivierGrégoire'a teşekkür ederiz . Burada dene.MIN_VALUE-1MAX_VALUE+1

Ungolfed ve test kodu:

Burada deneyin - çalışma zamanı hatasıyla sonuçlanır

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

Çıktı:

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

1
Sanırım n ve 1-n tuşlarına aynı anda yazarak bazı baytları kaydedebilirsiniz, bu şekilde karşılaştırmayı kaldırabilirsiniz. @xnor bu fikri ilk kullanan kişi oldu.
kusur

1
Sizin intsonsuz zaman verilen -version programı, zamanın sonsuz miktarda tamsayı her yazdırılır.
Olivier Grégoire

1
@ OlivierGrégoire Ah, elbette, MAX_VALUE + 1 MIN_VALUE .. iç çeker. Düzeltdim, gösterdiğin için teşekkürler.
Kevin Cruijssen

1
Daha fazla golf oynamak istiyorsan (yani MAX_VALUE, kurtulmak istiyorsan, cevabımı kontrol edebilirsin (muhtemelen hala son sayfada).
Olivier Grégoire

1
53 baytlık çözümünüz bir snippet, bir işlev veya program değil ve bu nedenle geçerli değil.
Mego

6

DC (GNU veya OpenBSD lezzet) - 16 bayt

Bu sürüm aşağıdaki sürümden daha kısa değildir ancak PC'nizde patlayan bir yığın olmadan çalışabilmelidir. Yine de sonsuz büyük sayılar sonsuz miktarda hafıza alacaktır ... bir süre ...

rKomut nedeniyle GNU-DC veya OpenBSD-DC'ye ihtiyaç duyar .

0[rp1+45Pprdx]dx

Ölçek:

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

DC - 16 bayt

Şimdi biraz demek istiyorum. ;-)

Bu sürüm, yığının büyümesine izin verirken yığının uzunluğunu sayaç olarak kullanıyor.

z[pz45Ppllx]dslx

Ölçek:

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

DC - 17 bayt

Kirli numaralar olmadan.

0[p1+45Ppllx]dslx

Ölçek:

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

+? "er ya da geç ... beklediğinizden daha erken"
Greg Martin

2
Yerine [-]P, do 45P. "GNU-Dc veya OpenBSD-Dc" - Doğada sıkça rastlanan başka sürümler var mı?
Dijital Travma

1
Başka bir çözümüm var (veya birkaç tane), ancak gerçek negatif sayıları içeriyor. Onları yeni bir cevapta gönderebilir miyim? Soruyorum çünkü bunlara çok benziyorlar, çünkü dcsadece birkaç operatör var. Onlardan bağımsız olarak onları geliştirdim.
Joe

@ DigitalTrauma ... elbette ... orijinal Dc'nin r"takas" özelliği yoktur / yoktur . Bazen defferent versiyonlarına bakarken kafam karışıyor. Muhtemelen kimse artık antik Dc’de kod yazmayı istemez (ve ryığını temizler). Belki "Dc" yi "AT&T dc" olarak değiştirirdim? ... ve teşekkür için 45Pipucu ...
yeti

2
@yeti Cevaplarıma sadece "dc" koyuyorum. Buradaki insanların çok endişeli olduğunu sanmıyorum, özellikle de "modern" dc lezzetlerinin ubiquity'si göz önüne alındığında.
Dijital Travma

6

C # 74 bayt

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

Çıktı:

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

Dene:

dotnetfiddle.net (1000 ile sınırlı)


Bu snippet'ler değil mi / tam programlar değil mi?
pinkfloydx33

Üzgünüz, tam program eklendi
alex

2
publicDeğiştiricileri atlayabilir ve 14 bayt kaydedebilirsiniz. Varsayılan değerler eşit derecede iyi olacaktır.
Alejandro,

@Alejandro, bu benim ilk yazım teşekkür ederim :)
alex

6

Ruby, 26 22 19 16 bayt

Yeni satırlarla ayrılmış sayıları yazdırır. @Manatwork'ten -3 bayt. @ M-chrzan'dan -3 bayt.

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

Burada sayısal değerler çıktınız, paynı zamanda bunu da yapacaksınız.
Manatwork

0.step{|n|p n,~n}17 bayt için
m-chrzan

1
@ m-chrzan çünkü sipariş o kadar önemli değil, öneriniz üzerine fazladan bir byte atmayı başardım!
Değerli Mürekkep

6

JavaScript, 29 26 bayt

Sonsuz olmayan versiyon, 26 bayt

ETHproductions sayesinde 3 bayt kurtardı

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

-9007199254740991 ve 9007199254740992 arasındaki tüm tamsayıları gösterecektir.

Sonsuz versiyon (ES6), 114 112 bayt

ETHproductions sayesinde 2 bayt kurtardı

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

sonsuz zaman ve hafıza verilen tüm tamsayıları gösterecektir.


Fonksiyon kazanını düşürerek tam bir program olarak adlandırabilirsiniz.
Conor O'Brien,

@ ConorO'Brien - Oh, haklısın. Thanks :)
Arnauld,

n[a,b,c]döner n[c], böylece parantezleri bırakabilirsiniz n[(a||n.unshift(1),0)].
ETHproductions

1Döngü için ikisine de ihtiyacınız yoktur ; for(;;)sonsuza kadar çalışır. İki bayttan daha fazlasını kaydedebilirsiniz for(n=1;;)alert([1-n,n++]). Ayrıca, bu artık herhangi bir ES6 özelliğini kullanmıyor ;-)
ETHproductions

5

> <> , 19 15 bayt

1::1$-naonao1+!

Bu, aşağıdakileri yazdırır:

0
1
-1
2
-2
3
-3

... ve bunun gibi. Ayırıcı yeni bir satırdır.

Bu algoritmanın bir sürümünü kullanmak için @ xnor'ın cevabını okuduktan sonra yeniden yazıldı. Başlangıçta n=1, program , her birini arttırmadan önce 1-nve nardından her biri bir yeni satır izler n. Maksimum değerin aşılmasından sonra program bir hatayla bitecektir something smells fishy.... Bunun tam olarak ne zaman gerçekleşeceği tercüman uygulamasına bağlıdır.


Önceki versiyon:

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

0'dan başlayarak, program süresiz olarak döngüye girer. Her döngüde, geçerli değer yeni bir satırla birlikte yazdırılır. Daha sonra olumsuzlanır ve pozitifse arttırılır.


Xnor açıkça bir "o" mu? Yoksa bilinçsiz önyargılarımız ...?
Greg Martin

2
@GregMartin İlginç, hiç cinsiyetten bahsettiğimi sanmıyorum.
xnor

5

Bash + GNU yardımcı programları, 26

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

Hiç seq'un böyle kullanıldığını görmedim, bu bir böcek gibi mi? Ayrıca, bir tür taşma işleminden sonra sayıları tekrar etmeye başlayacak mı? Bunu $[++i]bash içinde dediğini biliyorum .
seshoumara 17:16

Daha yeni bir özelliğe benziyor - kaynak koduna bakın . 1 ila NaN eklenmesi bir sarmalamaya neden olmamalıdır.
Dijital Travma

seq NaNKoşmaya gittim ve 999999'dan sonra baskı bilimsel gösterimde 5 basamaklı olarak yapıldı. Meydan okumaya gelince, bu değer, yazdırdığınız en büyük tam sayıdır, geri kalanı önceki bir sayıyı tekrarlamayacağından iyi. Ayrıca inf, tıpkı olduğu gibi, büyük / küçük harfe duyarlı olmayan bir sıra ile koşabileceğinizi de farkettim nan. +1
seshoumara

5

bc, 17 16 bayt

Düzenleme: Dijital Travma sayesinde 1 bayt daha az .

Şimdiye kadar kullanılan dil çeşitliliğine ek olarak, keyfi büyüklükte tamsayılarla çalışan bir bc çözümü sunuyorum . Koddan sonra bir yeni satır gerekir ve toplam bayt olarak sayılır.

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

İlk yinelemede itanımlanmadı, ancak yazdırmak benim sürprizime 0 veriyor.


1 byte daha kısa:for(;;){i;-++i}
Dijital Travma

@DigitalTrauma Teşekkürler, cevabımı güncelledim. İşin garibi, şu döngü yapısını bugün diğer bash cevabımda kullandım , ama bconun da olduğunu unuttum .
seshoumara

Veya for(;;){i++;-i}(aynı uzunluk).
sch

5

Labirent , 9 bayt

!`
\:"
 (

Çevrimiçi deneyin!

Bu aynı zamanda çalışır ve aslında aynıdır:

 "
`:(
\!

açıklama

Bu koddaki kontrol akışı oldukça komik. Bir Labyrinth programındaki talimat göstergesinin (IP) boşluksuz karakterlerin yolunu takip ettiğini ve hangi yolun alınacağına karar vermek için herhangi bir kavşakta yığının tepesini incelediğini unutmayın:

  • Yığının üstü pozitifse, sağa dönün.
  • Yığının üstü sıfırsa, düz ilerlemeye devam edin.
  • Yığının üstü negatifse, sola dönün.

IP bir çıkmaza çarptığında, etrafında döner (komutu yalnızca bir kez çalıştırma). Ve IP, sol üst köşede doğuya doğru hareket ederek başlar. Ayrıca yığının başından itibaren sınırsız sayıda sıfırla dolu olduğunu unutmayın.

Program bu kısa bit ile başlar:

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

Şimdi IP, ilgili kavşakta ve (yığının tepesini azaltan üzerine dümdüz ilerliyor -1. IP bir çıkmaz isabet eder ve geri döner. :yığının üstünü bir kez daha çoğaltır. Şimdi yığının üstü negatiftir ve IP sola döner (batı). Şimdi ana döngünün bir yinelemesini daha gerçekleştiriyoruz:

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

Bu sefer, yığının üstü pozitifdir, bu nedenle IP sağa döner (batı) ve hemen bunu basan ana döngünün başka bir yinelemesini gerçekleştirir 1. Sonra tekrar ihmal edildikten sonra , yığında :ile beraber -1vururuz.

Bu kez IP sola döner (doğu). Bu "sadece bir op-op ve IP çıkmazda dönüyor. :başka bir kopya çıkarır ve bu kez IP güneye döner. (değeri azaltır, -2IP tekrar döner. Yığının üst kısmı hala negatifken, IP şimdi batıya döner :ve ana döngünün bir sonraki yinelemesini yapar.

Bu şekilde IP şimdi, bir negatif sayı yazdırmadan önce değeri azaltmak için sıkı bir döngü yineleme, pozitif bir sayı yazdırmak ve her iki ölü uçtan geçen bir yineleme arasında yinelenecektir.

Sebebisiniz kendinize sorun "olmadan, IP ulaştığında: aslında hiçbir şey yapmaz ise ikinci satırda :negatif değer, bir olamaz (doğu) sola doğru (batıya) açacak, böylece yerine (kural olarak, bir kavşaktaki normal yön mevcut değilse, IP ters yöne dönecektir). Bu, IP'nin asla (dibe asla ulaşamayacağı ve pozitifleri negatif yinelemelerden ayırt edemediğimiz anlamına gelir .


Cevabınızı görmeden önce bulduğum şey bu: pastebin.com/VHzAvABe
Robert Hickman

5

JavaScript (ES5), 32 31 30 29 bayt

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

Baskılar 0 -1 1 -2 2 -3 3 -4 4 -5 5 ...

Patrick Roberts sayesinde 1 bayt kaydedildi! Conor O'Brien sayesinde 2 bayt kaydedildi!


1
Peki [i++,-i].map(alert)yerine alert(i++),alert(-i)?
Conor O'Brien,

for(;;)ondan daha kısa olan bir bayttırwhile(1)
Patrick Roberts

@ ConorO'Brien map: ES6
Paul Schmitz


i=0;Bir bayttan tasarruf etmek için biti for döngüsü içinde hareket ettirebilirsiniz .
Conor O'Brien,

4

Java, 65 54 bayt

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

Ungolfed test kodu

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'nın standart tamsayı türüdür.
Shaun Wild

1
Üzgünüm, bu arada gereksinimler değişti ...
kusur

2
Şunları yapabilirsiniz golf o kadar ()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};( 53 bayt )
Kevin Cruijssen

@KevinCruijssen Bu boşluk kadar sikikleri ...
Shaun Wild

1
Sonsuz bir zaman verildiğinde, her bir tamsayıya, her seferinde sonsuz miktarda baskı yapar.
Olivier Grégoire

4

C #, 83 bayt

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

Ungolfed:

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

Çıktılar:

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

Karakterleri azaltmak için yapılabilecek birkaç şey var. İlk önce programın bir isim alanına ihtiyacı yoktur. İkincisi, sınıf adının çok uzun olması gerekmez. Ayrıca bir delegeye göre basitleştirilebilen, konsol.writeline'a iki çağrı yaptınız. True, (;;) için aa'ya basitleştirilebilir ve ilk önce delege aracılığıyla sıfır değerinin çıkarılmasıyla if ifadesi kaldırılabilir.
Nico

Teşekkürler. Bir delegenin "hile yapıp yapamayacağını" bilmiyordum?
Pete Arden

Merhaba, PPCG'ye hoş geldiniz! Bunu okumak için ilginç bulabileceğinizi düşünüyorum: C # ile golf oynamak için ipuçları . Ayrıca, tam bir programa ihtiyacınız yoktur, sadece bir fonksiyon işe yarar (zorluk aksini belirtmediği sürece). Yani void f(){code_present_in_main}bayt sayısı için yeterlidir. Kodun kendisine gelince, biraz daha şöyle golf oynayabilirsiniz: void f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}( 61 bytes )
Kevin Cruijssen

1
Oh harika, şimdi çok daha sağlıklı 85, teşekkürler! Tüm cevabınızı kullanmakta kendimi haklı hissetmem ama kesinlikle bir gelişme ve bu ipuçları gelecekteki golf oynamaya yardımcı olacak!
Pete Arden

@PeteArden Kodumu kullanmadığım için anlıyorum çünkü farklı bir yaklaşım. Hmm, hala golf 2 yerleştirerek kendi cevap bayt olabilir decimal n=0ve n++;For döngüsü içinde olsa: void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}:)
Kevin Cruijssen

4

C # 86 66 bayt

Yeni cevap:

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

Açık:

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

Eski cevap (86 bayt):

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

Ungolfed:

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

1
2 faydasız boşluk var. Bir önce Enumerable.Rangebir tane de bir tane önce int.MaxValue.
Yytsi

1
PPCG'ye Hoşgeldiniz! +1 Bunu okumak için ilginç bulabilirsin: C # golf için ipuçları . Mevcut cevaplarınızda, for döngüsü için parantezler çıkarılabilir, çünkü içeride sadece bir satır vardır. Alternatif olarak, bu daha kısa bir yaklaşımdır: void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}( 57 bayt ) .
Kevin Cruijssen

@KevinCruijssen Teşekkürler. Frenler gitti.
Daniel Lerps,

4

J, 25 bayt

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

Çalışır Online sitesinde ama henüz bilgisayarda bunu doğrulamak mümkün değil. Gibi sayıları yazdırır:

0
1
_1
2
_2
3
_3
4

vb.


4

Powershell, 20 19 18 bayt

TimmyD'in cevabından utanmadan çalmak suretiyle geliştirildi

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

Çıktı:

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

Eski versiyon:

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

Neden tbh, ancak - bildirilmemiş değişken (veya - $ null) 0 olarak değerlendirildi, bu da bizi bu sürümde 2 bayt kurtardı ...


1
PPCG'ye Hoşgeldiniz!
AdmBorkBork


4

Brachylog , 2 bayt

ẉ⊥

Çevrimiçi deneyin!

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

Programa giriş verilmediğinden, ana yüklemenin giriş değişkeni sınırsız kalır. İlk başta, 0 olduğu varsayılır, ancak yürütme çarptığında , olası tek başarısızlık noktasına geri döner : giriş değişkeni için değer seçimi. O zaman 1 ve -1'i dener ve her diğer tam sayı, her birini sonsuza dek yeni satırlarla ayırarak yazdırır çünkü her zaman geri izlemeyi zorlar ve etkisi hemen uygulanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.