Роздрукуйте всі цілі числа


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

  • Вихід повинен бути десятковим, якщо ваша мова не підтримує десяткових цілих чисел (у такому випадку використовуйте природне подання цілих чисел, якими користується ваша мова).

  • Ваша програма повинна працювати до чисел з найбільшою величиною стандартного цілого числа вашої мови.

  • Кожне ціле число має бути відокремлене від наступного, використовуючи будь-який роздільник (пробіл, кома, рядок рядків тощо), який не є цифрою і не від'ємним знаком вашої мови.

  • Сепаратор не повинен змінюватися в будь-який момент.

  • Розділювач може складатися з декількох символів, якщо жоден з них не є цифрою або негативним знаком (наприклад, такий же дійсний, як і просто ,).

  • Будь-яке підтримуване ціле число повинно бути надруковано через певний час.

Оцінка балів

Це , тому найкоротша відповідь у байтах виграє

Таблиця лідерів


3
Якщо наша мова підтримує нескінченні списки, чи можемо ми вивести список із функції, а не з друку? (Якщо викликати друк у такому списку, він надрукував би його елементи один за одним назавжди.)
xnor

5
Я відчуваю, що вимога щодо цілих чисел довільного розміру не означає нічого, крім відштовхування мов без участі таких цілих чисел. Вони або повинні мати імпорт, який вони можуть використовувати, або вирішити абсолютно інший виклик від усіх інших.
xnor

2
@xnor Змінено, хоча цей вид руйнує саму назву виклику.
Фаталізувати

5
@xnor, мови з цілими цілями довільної точності все-таки повинні вирішити іншу проблему, ніж усі інші, тому все, що ця зміна здійснила, - це зробити проблему нудно тривіальною для багатьох мов.
Пітер Тейлор

2
@PeterTaylor Так, це прикро. Для обгорткового рішення мені не здається, що вони друкують будь-які негативи, але я не бачу способу чітко визначити різницю, коли це питання представництва.
xnor

Відповіді:


19

Sesos , 11 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
Readme на GitHub (зв'язаний у заголовку) докладно пояснює, як кодуються інструкції.
Денніс

1
6 шістнадцяткових цифр / 2 = 3 байти @HopefullyHelpful
Стен Струм

@StanStrum дякую
сподіваюсьДопомога

47

Хаскелл, 19 байт

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

Створює нескінченний список [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...

Haskell дозволяє нескінченні списки на самому собі. При надрукуванні такого списку друкуються його елементи один раз назавжди.


2
Я люблю [n,1-n]!
flawr

3
ІМХО [1-n,n]дасть кращий вихід.
Ніл

@Neil Я згоден, змінив це.
xnor

2
Ах, це для монади concatMap (\n -> [1-n, n]) [1..], правда? Приємно!
Carsten S

@CarstenS Так, саме так.
xnor

29

Brainfuck, 6 байт

Це використовує обгортання комірок і друкує всі можливі значення. У Brainfuck власне ціле представлення є байтовим значенням .

.+[.+]

Спробуйте в Інтернеті!


2
Приємно, це найкоротша відповідь Brainfuck, яку я бачив поки що на PPCG.
Кевін Круїйсен

1
Це не працює для мозкових версій з необмеженими клітинами. Виправте (навіть якщо як окрему відповідь)
Джон Дворак

16
@JanDvorak Відповіді не потрібно працювати у кожній реалізації, як і в будь-якій з них.
Мартін Ендер

7
Чи можу я отримати пояснення, чому це дійсно? Немає відокремлювачів, як зазначено у запитанні, і негативів немає. Як і той факт, що ви можете виводити значення, більші за 9, в мозковий ебать. Я недосвідчений в коді гольфу і почав працювати над тим, що виводить негативні та позитивні, що стосуються більш високих цифр, перш ніж збиратись.
gtwebb

5
@SQB Навіть маючи необмежену кількість пам'яті, основний тип цілих чисел все ще становить 8 біт. Java intнесподівано має більш-менш біти лише тому, що ви додали або видалили якийсь баран.
flawr

26

Cubix , 14 12 байт

.(.\OSo;?.>~

Перевірте це в Інтернеті! Тепер ви можете налаштувати швидкість, якщо хочете, щоб вона працювала швидше або повільніше.

Як це працює

Перше, що робить перекладач, - це видалити всю пробіл і нанести на неї код без відключення, .поки він ідеально не поміститься на кубі. Це означає, що наведений вище код також може бути записаний так:

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

Тепер код запускається. IP (вказівний вказівник) починається у верхньому лівому куті крайнього лівого обличчя, спрямованому на схід. Ось шляхи, пройдені впродовж виконання програми:

введіть тут опис зображення

IP починається з червоного сліду в крайній лівій частині зображення. Потім він запускається OSo;, що робить наступне:

  • OРоздрукуйте TOS (верхній стек) як ціле число. На початку програми стек містить нескінченні нулі, тому це друкує 0.
  • SНатисніть 32, char код для символу пробілу.
  • oРоздрукуйте TOS як символ. Це друкує пробіл.
  • ;Поп TOS. Вилучає 32зі стека.

Тепер IP потрапляє на те ?, що спрямовує його вліво, вправо або прямо залежно від знаку TOS. Зараз TOS є 0, тож він іде прямо. Це синій шлях; .нічого не робить, і IP вдаряє стрілку >, яка знову спрямовує її на схід по червоній стежці. ~приймає побіто НЕ TOS, змінюючи його на -1.

Тут IP доходить до правого краю мережі, яка обертає його назад ліворуч; це знову друкує TOS (цього разу -1) та пробіл.

Тепер IP ?знову потрапляє . Цього разу TOS є -1; оскільки це негативно, IP повертає ліворуч, беручи зелений шлях. Дзеркало \відхиляє IP-адресу до (, яка зменшує TOS, змінюючи його на -2. Він повертається навколо і б’є стрілу; ~приймає побітно НЕ знову, перетворюючи -2на 1.

Знову виводиться TOS і друкується пробіл. Цього разу, коли IP потрапляє на ?, TOS є 1; оскільки це позитивно, IP повертає праворуч, беручи жовтий шлях. Перший оператор, з яким стикається, - це Sвиштовхування додаткового 32; ;плескає його , перш ніж він може викликати якісь - небудь проблеми.

Тепер IP повертається до стрілки і виконує свою процедуру, ~змінюючи TOS на -2та Oдрукуючи її. Оскільки 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. Візьміть побіжно НЕ поточного числа.

Не відокремлена версія, 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 Я думаю, що Octave потрібно перезапускати щоразу, коли ви запускаєте програму MATL в TIO, і це потребує певного часу.
flawr

@Fatalize Я не впевнений. Це відбувається в онлайн-компіляторі, а не в офлайні. Я подумав, що це може стосуватися Octave, підкачуючи вихідний результат, але зараз я не впевнений, чи це причина
Луїс Мендо

1
Розумна ідея зробити @_@XDзамість @_D@Dцього, ви можете включити 0 у перший запуск.
Санчіз

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.
Олівер Ні

Дякуємо, що вказали на різницю! Опечатка була фактично у верхньому коді: ми не повинні повторювати сцену I, оскільки вона буде скинута $puckдо 0, а потім підрахунок більше не працюватиме. Я додав відсутність Iу коді та виправив довжину байтів (що було трохи відключено ой)
Christallkeks

14

Python 2, 27 байт

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

Друкує -1 0 -2 1 -3 2 -4 3 ...


10

05AB1E , 9 6 байт

Збережено 3 байти завдяки Аднану

[ND,±,

Спробуйте в Інтернеті!

Друкується 0, -1, 1, -2, 2 ...розділеними новими рядками.


2
Я був в змозі отримати його до 6 байт , використовуючи деякі побітову магію: [N,N±,.
Аднан

1
@Adnan: Приємно! Я намагався зробити щось подібне раніше, але не користувався, ±і в кінцевому підсумку це було на 3 байти довше, ніж у вас.
Емінья

Я знаю, що минуло деякий час, але D,його можна замінити, =щоб зберегти байт.
Кевін Cruijssen

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
Ця відповідь ... тіниста.
Conor O'Brien

1
Мені було цікаво, хто придумав назву мови, потім я помітив, з якої мови вона походить.
Джон Дворак

8

R, 25 24 байти

Один байт в гольфі завдяки @JDL.

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; 58 байт, якщо ви хочете (-) 2147483648 у висновку:

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

12 байтів збережено завдяки @flawr@xnor побічно)

Після зміни правила .. ( 59 56 63 байт)

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

Оскільки в Java 2147483647 + 1 = -2147483648ми не можемо просто робити i++і продовжувати нескінченно, оскільки завданням було надрукувати всі номери один раз. З урахуванням зазначених вище коду з додаванням діапазону, то замість цього надрукувати всі цілі числа від -2147483648до 2147483647один раз, в такій послідовності: 0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648. Завдяки @ OlivierGrégoire за вказівку на поведінку Java щодо MIN_VALUE-1/ MAX_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 першим застосував цю ідею тут.
недолік

1
Ваша intпрограма -версія з заданим нескінченним часом надрукує кожне ціле число нескінченну кількість часу.
Олів'є Грегоар

1
@ OlivierGrégoire Ну, звичайно, MAX_VALUE + 1 - MIN_VALUE .. зітхне. Я її відредагував, дякую, що вказав на це.
Кевін Круїссен

1
Якщо ви хочете більше пограти в гольф (тобто позбутися MAX_VALUE, ви можете перевірити мою відповідь (напевно, все ще на останній сторінці).
Олів'є Грегоар

1
Ваше байтове рішення на 53 байти - це фрагмент, а не функція чи програма, і тому недійсний.
Mego

6

DC (аромат GNU або OpenBSD) - 16 байт

Ця версія не коротша, ніж наведена нижче версія, але повинна мати можливість працювати без вибуху стека на вашому ПК. Тим не менш, нескінченно велика кількість займе нескінченну кількість пам'яті ... колись ...

Через 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"swap". Я іноді плутаюсь, дивлячись на різні версії. Напевно, ніхто більше не хоче кодувати в древньому Dc (і там rби очистився стек). Можливо, я б змінив "Dc" на "AT&T DC"? ... і спасибі за 45Pпідказку ...
yeti

2
@yeti Я просто поставив "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

Вибачте, додано повну програму
alex

2
Ви можете опустити publicмодифікатори і зберегти 14 байт. Значення за замовчуванням виконають однаково добре.
Алехандро

@Alejandro дякую, це мій перший пост :)
alex

6

Рубі, 26 22 19 16 байт

Друкує числа, розділені новими рядками. -3 байти від @manatwork. -3 байти від @ m-chrzan.

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

Ви виводите тут числові значення, так само pце зробите і
манатство

0.step{|n|p n,~n}за 17 байт.
m-chrzan

1
@ m-chrzan, оскільки замовлення не має великого значення, я зміг поголити зайвий байт, зверху на вашу пропозицію!
Значення чорнила

6

JavaScript, 29 26 байт

Нескінченна версія, 26 байт

Збережено 3 байти завдяки ETHproductions

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

відображатиме всі цілі числа між -9007199254740991 та 9007199254740992.

Нескінченна версія (ES6), 114 112 байт

Збережено 2 байти завдяки 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);

відображатиме всі цілі числа, враховуючи нескінченний час та пам'ять.


Можна скинути функціональну котельну панель і назвати її повноцінною програмою.
Conor O'Brien

@ ConorO'Brien - О, ти маєш рацію. Дякую :)
Арнольд

n[a,b,c]повертається n[c], тому ви можете випустити круглі дужки n[(a||n.unshift(1),0)].
ETHproductions

Вам не потрібен 1цикл in для for; for(;;)працює вічно. Ви можете зберегти ще два байти за допомогою 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-nі n, після чого новий рядок, перед збільшенням 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]це робить у баш.
seshoumara

Виглядає як новіша функція - див. Вихідний код . Додавання 1 до NaN не повинно спричиняти перекручування.
Цифрова травма

Я залишився seq NaNбігати, і після 999999 року друк робиться в науковій нотації з 5-значною точністю. Що стосується виклику, то це значення є найбільшим цілим числом, яке ви друкуєте, і це добре, оскільки решта не повторить попереднє число. Також помічено, що ви можете запускати послідовності з inf, нечутливих до регістру так само, як для nan. +1
сешомара

5

bc, 17 16 байт

Редагувати: на 1 байт менше завдяки Digital Trauma .

Додаючи розмаїття мов, що використовуються дотепер, я представляю рішення bc, яке працює з цілими числами довільної величини . Після коду необхідний новий рядок, і він підраховується в загальній кількості байтів.

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

У першій ітерації iне визначено, але друк дає моє здивування 0.


На 1 байт коротше:for(;;){i;-++i}
Цифрова травма

@DigitalTrauma Спасибі, я оновив свою відповідь. Найсмішніше те, що я сьогодні використав цю конструкцію циклу у своїй іншій відповіді на башти , але забув, що bcвона теж була.
seshoumara

Або for(;;){i++;-i}(однакова довжина).
sch

5

Лабіринт , 9 байт

!`
\:"
 (

Спробуйте в Інтернеті!

Це також працює і по суті те саме:

 "
`:(
\!

Пояснення

Контрольний потік у цьому коді є досить смішним. Пам’ятайте, що вказівник інструкцій (IP) у програмі «Лабіринт» слідує за маршрутом символів, що не знаходяться у космосі, і вивчає верхню частину стека на будь-якому стику, щоб вирішити, який шлях слід пройти:

  • Якщо вершина стека позитивна, поверніть праворуч.
  • Якщо вершина стека дорівнює нулю, продовжуйте рухатися прямо вперед.
  • Якщо верхня частина стека негативна, поверніть ліворуч.

Коли IP потрапляє в глухий кут, він обертається (виконуючи команду в кінці лише один раз). І IP розпочинається у верхньому лівому куті, рухаючись на схід. Також зауважте, що стек неявно заповнений нескінченною кількістю нулів для початку.

Програма починається з цього короткого біта:

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

Тепер IP знаходиться у відповідному стику і рухається прямо вперед, на (який зменшується вершина стека -1. ІР потрапляє в глухий кут і обертається. :дублює верхню частину стека ще раз. Тепер верхня частина стека від’ємна, і IP повертає вліво (на захід). Тепер виконуємо ще одну ітерацію основного циклу:

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

Цього разу верхня частина стека є позитивною, тому IP повертає вправо (на захід) і негайно виконує ще одну ітерацію основного циклу, яка друкує 1. Потім після того , як заперечується ми знову потрапили в :з-1 в стеці.

На цей раз IP повертає ліворуч (на схід). Це "просто бездіяльність, і ІР обертається в глухий кут. :робить ще одну копію, і цього разу IP повертає на південь. (зменшує значення до -2, IP знову обертається. Якщо верхня частина стека все ще негативна, IP тепер повертається на захід: і робить наступну ітерацію основного циклу.

Таким чином, IP тепер буде ітератором між ітерацією жорсткого циклу, друком додатного числа та ітерацією, яка проходить через обидва тупикові місця, щоб зменшити значення перед друком від'ємного числа.

Ви можете запитати себе, чому є "другий рядок, якщо він насправді нічого не робить: без нього, коли 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 ...

Збережено 1 байт завдяки Патріку Робертсу! Збережено 2 байти завдяки Conor O'Brien!


1
Як щодо [i++,-i].map(alert)цього alert(i++),alert(-i)?
Conor O'Brien

for(;;)на один байт коротший, ніжwhile(1)
Патрік Робертс

@ ConorO'Brien mapis ES6
Пол Шмітц


Ви можете перемістити i=0;біт всередині циклу for, щоб зберегти байт.
Conor O'Brien

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 intє стандартним цілим типом Java.
Шон Уайлд

1
Вибачте з цього приводу, вимоги тим часом змінилися ...
flawr

2
Можна ()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};
пограти в

@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, які можна спростити делегату. У той час як true може бути спрощено до aa для (;;), а оператор if можна видалити, вивівши значення нуля спочатку через делегат.
Ніко

Дякую. Я не знав, чи може делегат "обманювати"?
Піт Арден

Привіт, Ласкаво просимо до PPCG! Я думаю, що вам може бути цікаво прочитати: Поради щодо гольфу в C # . Крім того, вам не потрібна повна програма, просто виконуватиметься функція (якщо виклик не говорить про інше). Тож void f(){code_present_in_main}достатньо для підрахунку байтів. Що стосується самого коду, ви можете void f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}
пограти в

1
О прекрасно, це набагато здоровіше 85 зараз, дякую! Я б не почував себе правильно, використовуючи всі ваші відповіді, але це, безумовно, поліпшення, і ці поради допоможуть моєму майбутньому гольфу!
Піт Арден

@PeteArden Я розумію, що не використовую свій код, оскільки це інший підхід. Хм, ви можете по- , як і раніше гольф 2 байта в своїй відповіді, поміщаючи decimal n=0і n++;всередині для петлі , хоча: void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}:)
Kevin 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 марних пробіли. Один перед Enumerable.Rangeі один раніше int.MaxValue.
Yytsi

1
Ласкаво просимо до PPCG! +1 Вам може бути цікаво прочитати: Поради щодо гольфу в C # . У ваших поточних відповідях дужки для циклу for-петлі можна видалити, оскільки всередині є лише один рядок. Крім того, це коротший підхід: void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}( 57 байт ) .
Kevin 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

Брахілог , 2 байти

ẉ⊥

Спробуйте в Інтернеті!

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

Оскільки програмі не введено даних, вхідна змінна головного предиката залишається необмеженою. Спочатку передбачається, що це 0, але коли виконання потрапляє , воно повертається до єдиної можливої ​​точки відмови: вибору значення для вхідної змінної. Тоді воно намагається 1, і -1, і кожне інше ціле число, друкуючи кожне, відокремлене новими рядками назавжди, тому що завжди примушує зворотний трек, і ефект виконується негайно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.