Найкоротший код для отримання недетермінованого виводу


83

Вам потрібно отримати вихід, який не є детермінованим .

У цьому випадку це буде визначено, щоб результат не завжди був однаковим результатом.

Правила:

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

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

  • Ідентифікатор процесу вашого коду (якщо його не виправлено інтерпретатором) може вважати недетермінованим.

  • Ви можете покластися на випадковість на веб-основі.

  • Ваш код може не приймати непорожній вхід. Пов’язаний мета-пост .

  • Програма не зупиняється, але вихід повинен відображатися.

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


33
@ mbomb007 У C є багато речей, які є просто "невизначеною" поведінкою. Будь-якому даному перекладачу в будь-якій ситуації дозволено робити все, що завгодно. Наскільки нам відомо, gcc може замовити вам піцу, якщо ви спробуєте перелити підписане ціле число у дощовий вівторок, але змусить форель вистрибнути з вашого екрану в усі інші дні. Таким чином, ви насправді ніколи не дізнаєтесь, чи є вона насправді детермінованою чи ні в якійсь задачі.
Мартін Ендер

12
@MartinEnder Я не впевнений, чи це має значення. Тут ми визначаємо мови за їх реалізацією, а не за специфікацією (оскільки мови без її реалізації заборонені)
Nathan Merrill

2
@MartinEnder Так, я згоден з Натаном.
mbomb007

7
Зауважте, що невизначена поведінка в C часто призводить до збоїв, а збої в UNIX та Linux призводять до основних файлів, що містять ідентифікатор процесу всередині них. Це могло б відповідати питанню, як це написано на даний момент.

5
Якщо я неправильно зрозумів, питання не запитувало код, який використовує перевагу невизначеної поведінки. Він запитує код, який використовує перевагу визначеної поведінки, щоб гарантувати недетермінізм.
WGroleau

Відповіді:


110

WinDbg, 1 байт

#

Оце Так! Ніколи не очікував рішення на 1 байт від WinDbg!

#шукає шаблон розбирання, але оскільки немає параметрів, він, як видається, просто поверне наступну інструкцію по збірці в будь-який дамп / процес, до якого ви додаєте. Не впевнений у логіці встановлення початкової адреси, але вона є.

Вибірка зразка:

0:000> #
Search address set to 75959556 
user32!NtUserGetMessage+0xc
75959556 c21000          ret     10h

0:000> #
user32!NtUserGetMessage+0xf 
75959559 90              nop

0:000> #
user32!NtUserMessageCall 
7595955a 90              nop

0:000> #
user32!NtUserMessageCall+0x1 
7595955b 90              nop

0:000> #
user32!NtUserMessageCall+0x2 
7595955c 90              nop

0:000> #
user32!NtUserMessageCall+0x3 
7595955d 90              nop

0:000> #
user32!GetMessageW
7595955e 8bff            mov     edi,edi

0:000> #
user32!GetMessageW+0x2 
75959560 55              push    ebp

0:000> #
user32!GetMessageW+0x3 
75959561 8bec            mov     ebp,esp

0:000> #
user32!GetMessageW+0x5 
75959563 8b5510          mov     edx,dword ptr [ebp+10h]

9
Один із крутих відповідей тут, це, на мою думку, має перемогти над рішенням "Поточна дата".
Magic Octopus Urn

що вище здається безладним, крок за кроком початку деякої функції у складі 386 Intel cpu
RosLuP

60

Java 7, 33 30 27 байт

int a(){return hashCode();}

Тому що Java.


49
Тому що Java. Мабуть, найкраще пояснення Java коли-небудь.
Ф. Джордж

5
@carusocomputing У мене був toStringу попередній версії, але тоді тип повернення Stringдовший, ніж int. Збережіть байти! :]
Poke

12
Чи дійсно це як функція? hashCode()тут абревіатура для this.hashCode(), тому вона буде працювати лише як метод екземпляра, а не статичний метод. У такому випадку вам знадобиться додатковий код, щоб створити об’єкт у абонента. Це актуально тут, оскільки це код для створення об'єкта, відповідального за недетермінізм.

15
У Java 8: ()->hashCode()на 14 байт. Just sayin ';)
Олів'є Грегоар

4
@pts Я виходжу з мета-повідомлення, обговорюючи структуру подання за замовчуванням для публікацій. Функції дозволені за замовчуванням, якщо у виклику не вказано, що потрібна повна програма.
Поки

52

MATLAB, 3 байти

why

whyдає відповіді майже на будь-яке запитання. Кілька прикладів:

why
The programmer suggested it.

why
To fool the tall good and smart system manager. 

why
You insisted on it.

why
How should I know?

Це коротше, ніж будь-яка randфункція, про яку я можу придумати.


33
MATLAB має для цього вбудований ? Чому?
ETHproductions

59
@ETHproductions Програміст запропонував це
Едді Кертіс

40

R, 1 байт

t

Виводить вихідний код функції та адресу вказівника пам'яті, яка змінюється з кожним (повторним) початком R.


36

так? , 0 байт


Порожня програма все ще дає результат. Останні рядки інтерпретатора Python, які виконуються:

print "..."
f = open('Notes.txt', 'w')
f.write(time.strftime("%c") + " - The user tried to give me commands again. I still have no idea what they are talking about...\n")

В кінці програми інтерпретатор Python надрукує ..., потім створить / відкриє текстовий файл, який називається, Notes.txtі запише рядок, який містить поточний час попереду.


5
З усіх речей, які я думав, що люди будуть використовувати на моєму GitHub, я не думав, що перекладачем мови жарту буде одна: P
Каде

@Kade Я фактично збирався використовувати його для відповіді на інше питання (найкоротший код для відтворення звуку, маючи лише один байт) - але питання зараз закрите.
mbomb007

Хоча це було б неконкурентоспроможним, якщо я не подивився на оригінальний інтерпретатор .NET, я думаю.
mbomb007

30

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

v
!
@

Або відбитки, 0або нічого (50% шансів на кожен).

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

Є дуже специфічний випадок, коли Лабіринт виявляє випадкову поведінку:

  • Перед вказівником та за нею повинна бути стіна.
  • Ліворуч і праворуч від вказівника інструкції повинно бути не стінка.
  • Поточна вершина стека повинна дорівнювати нулю.

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

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

За допомогою інструкцій з обертання вихідного коду ( <^>v) можна ввести ІР у цю ситуацію. Один з таких прикладів бачимо вгорі. IP спочатку вказує на схід і починається вгорі. В vобертає поточний стовпець так , що ми отримуємо:

@
v
!

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

Є три інші програми, які використовують цю програму (одна, яка також друкує 0, та яка друкує 00та та яка друкує 000):

v
@
!

"
>@!

"
>!@

(Насправді є набагато більше, ніж три інші програми, тому що ви також можете використовувати .замість того, !щоб надрукувати нульові байти, або замінити "їх великою кількістю команд, але я вважаю, що всі вони працюють однаково.)


30

Befunge (-93 та -98), 3 байти

?.@

Виконання ?відправки у випадковому напрямку. Якщо вона піднімається вгору або вниз, вона повертається назад ?і перекручується. Якщо вона піде ліворуч, програма обертається навколо @і, таким чином, виходить, не друкуючи нічого. Якщо він іде правильно, він друкує 0(результат, отриманий, .коли стек порожній), а потім виходить на @.


Це не гарантовано припинить, але я збирався опублікувати це саме так +1
Даніель

Ви можете змінити кому на період, щоб вивести 0 у вигляді числа, а не нульового символу (значення ASCII 0). +1
MildlyMilquetoast

Це було .в програмі, яку я використовував для тестування, але якось це стало, ,коли я скопіював його на PPCG. Виправлено.

7
@Dopapp це припиняється майже напевно, хоча, з ймовірністю 1. Я б вважав це гарантією;)
Oliphaunt

@JamesHolderness Я думаю, що ти можеш це зробити за 1. Не впевнений, якщо це рахується, хоча ...
MildlyMilquetoast

29

Minecraft, 5 4 байти

op 8

Використовується для введення в консоль сервера або командний блок та надання йому живлення. Можна запустити з інтерфейсу чату, попередньо натиснувши a /.

Зазвичай це нічого не робить, але якщо на сервері є гравець з іменем користувача "8", вони отримують дозволи оператора. Зауважте, що, хоча Minecraft вимагає, щоб імена користувачів не перевищували 3 символи, деякі облікові записи із меншою довжиною імен були створені перед цим обмеженням.

Версія, яка може бути показана недетермінованою без одного з цих імен користувачів або ризику надання дозволу оператору користувача, знаходиться тут:

me @r

Відображає повідомлення для всіх, причому це ім'я користувача випадкового гравця. opКоманда приймає тільки строковий літерал, а не якийсь - або сценарій , який повертає рядок.

meКоманда не буде дійсно працювати на перший приклад, він буде відображати "<your-username> 8". При запуску з командного блоку це не буде детерміновано, оскільки всі командні блоки мають однакове "ім'я користувача", але для його запуску через інтерфейс чату знадобиться /ще один додатковий байт.


Так /не входить до складу байтів?
Esolanging Fruit

11
@ Challenger5 Штрих необов’язковий у командних блоках, не допускається в консолі сервера та є обов'язковим в інтерфейсі чату.
Павло

2
Насправді це має бути 4 байти + 2 блоки (командний блок та джерело червоного каменю), або 6 бітів
RudolfJelin

2
@RudolphJelinek Ви можете запустити його з консолі без командних блоків.
Павло

1
Інший недетермінований варіант буде helpв командному блоці, який становить 4 байти (і не вимагає піратських ігор).
Pokechu22

21

sh + propps, 1 байт

w

Це найкоротше рішення, про яке я знаю, що працює через виклик у зовнішні виконавчі файли. procpsє відповідальним пакетом для повідомлення інформації про поточний стан системи ( psта друзів) та встановлений у більшості дистрибутивів Linux за замовчуванням; w- це найкоротша команда, яка називається в ній, і повертає інформацію про зареєстрованих користувачів, а також деяку недетерміновану інформацію, таку як час роботи.


21

Повідомте 7, 6 байт

x is y

Це не є дійсною програмою Inform 7, оскільки ні "x", ні "y" не були визначені. Тож це кидає помилку.

Однак деякі повідомлення про помилки Inform 7, включаючи це, є випадковими. Отже текст, який він друкує, технічно не є детермінованим.

Кілька можливих результатів включають:

Проблема. У реченні "x є y" сказано, що дві речі однакові - я читаю "x" і "y" як дві різні речі, і тому немає сенсу говорити, що одна інша: це було б так, як сказати що "Адамс - Джефферсон". Було б добре, якби друга річ мала назву роду, можливо, з властивостями: наприклад, "Вірджинія - це освітлена кімната" говорить, що щось, що називається Вірджинія, існує, і що це "кімната", яку я знаю про, у поєднанні з властивістю під назвою "освітлений", про яку я також знаю.

Проблема. У реченні "x є y" сказано, що дві речі однакові - я читаю "x" і "y" як дві різні речі, і тому немає сенсу говорити, що одна інша: це було б так, як сказати що «Адам - ​​Єва». Було б добре, якби друга річ мала назву роду, можливо, з властивостями: наприклад, "Земля Нода - це освітлена кімната", говорить про те, що існує щось, що називається Земля Ноду, і що це "кімната", тобто вид, про який я знаю, у поєднанні з властивістю під назвою "освітлений", про яку я також знаю.

Проблема. У реченні "x є y" сказано, що дві речі однакові - я читаю "x" і "y" як дві різні речі, і тому немає сенсу говорити, що одна інша: це було б так, як сказати що "Кларк Кент - Лекс Лютор". Було б добре, якби друга річ мала назву роду, можливо, з властивостями: наприклад, "Метрополіс - освітлена кімната" говорить, що щось, що називається "Метрополіс", існує, і що це "кімната", яку я знаю про, у поєднанні з властивістю під назвою "освітлений", про яку я також знаю.

Проблема. У реченні "x є y" сказано, що дві речі однакові - я читаю "x" і "y" як дві різні речі, і тому немає сенсу говорити, що одна інша: це було б так, як сказати що «Есхіл - Евріпід». Було б все нормально, якби друга річ мала назву роду, можливо, з властивостями: наприклад, "Підземний світ - освітлена кімната" говорить про те, що існує щось, що називається Подземний світ, і що це "кімната", яку я знаю про, у поєднанні з властивістю під назвою "освітлений", про яку я також знаю.


7
Навіть повідомлення про помилки є багатослівними!
Руйнуючий лимон

21

JavaScript, 4 байти

Date

Функція, яка повертає поточну дату / час. Я думаю, що це найкоротше, що вийде ...

Пояснення

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

В JavaScript функція запису є дійсною, якщо її можна присвоїти змінній і викликати як функцію. Наприклад, ця функція є дійсним записом:

function(){return Date()}

Тому що це функція, яка може бути призначена такій змінній:

f=function(){return Date()}

А потім бігайте f()стільки разів, скільки потрібно. Кожен раз він повертає поточний рядок дати / часу, який ОП визнав недетермінованим.

Ця стрілкова функція ES6 також діє:

_=>Date()

Його можна призначити f=_=>Date(), а потім запустити, f()як і інший.

Тепер ось ще один дійсний запис:

Date

Чому? Оскільки так само, як і двом другим записам, його можна призначити, f=Dateа потім викликати f(), повертаючи точно те саме, що й два інших. Спробуй це:


1
Вам це не потрібно, Date()щоб викликати функцію?
молоко

4
@milk Date- це функція, яка при виклику без входів виробляє поточну дату / час. _=>Date()це чітко дійсний запис, який робить точно те саме, що й Dateдійсний запис.
ETHproductions

1
Що має сенс.
молоко

2
Набравши Dateна консоль JavaScript в браузері виробляє детермінований висновок, він завжди робить це: function Date() { [native code] }. Ви, мабуть, маєте на увазі Date()6 байт.
пт

2
якщо "дата" вище гаразд, "" malloc (8) "або" time (0) "буде також нормально і в C
RosLuP

12

Bash (procps-ng), 2 байти

ps

$$ також є рішенням.


1
Якщо це так, wвін коротший, а також походить від підсилювачів.
liori

1
Ви відредагували це у двох примірниках моєї відповіді .

@ ais523 На жаль, вибачте.
Rɪᴋᴇʀ

11

Python 2, 11 байт

print id(1)

1
Це я знайшов. Я мав id(0), хоча. :)
mbomb007

2
Я побив вас, технічно, оскільки я ОП і знайшов це, перш ніж я поставив питання. Я не хотів публікувати запитання і негайно опублікувати свою найкоротшу відповідь.
mbomb007

11

Pyth, 2 байти

O0

Пояснення:

 0 0
O  Random float in [0, 1)

Це те, коли Oє0 свій аргумент, він просто повертає випадковий проміжок між 0і 1, виключно.

Давайте зробимо це просто для чорта!

Крім того, здається, що це може бути сорт ретро (завдяки 34718 / mbomb007):

Ділберт: 8 вересня 1992 року


Pyth, 2 байти

OT

Пояснення:

 T 10
O  Random integer in [0, 10]

Спробуйте скористатися цією версією booooooooooooooooring>:(



10

PowerShell, 4 2 байти

(перекреслено 4 все ще виглядає як 4 )

ps

Це псевдонім, для Get-Processякого буде виводитися поточний перелік процесів у вигляді таблиці, включаючи ручки, приватну пам'ять, час процесора тощо.

Виконайте це за допомогою наступного:

C:\Tools\Scripts\golfing>powershell.exe "ps"

1
Треба визнати, я перевірив, чи справді це перекреслено. Ви насправді навіть не можете сказати.
Carcigenicate

@Carcigenicate Я можу сказати, чи він перекреслений, не вибираючи текст (Ubuntu 16.04.1, Chrome 54.0.2840.100).
Ерік Аутгольфер

Видно також на android, хоча і не чітко: p
tomsmeding

Це добре виглядає в додатку для iOS.
Матеуш Піотровський

У мене немає представника, щоб це зробити самостійно, але ви можете зробити 04 і викреслити це.
Бобсон


9

Commodore 64 Basic, 4 байти

1S|0

PETSCII підміна: |=SHIFT+Y

Нульовий сторінка з Commodore 64 є областю 256 байт пам'яті , які можуть бути доступні швидше , ніж інша частина оперативної пам'яті. Отже, програми (наприклад, інтерпретатор BASIC) використовують його для часто доступних даних, а сам ЦП зберігає тут частину свого внутрішнього стану. Вміст може бути змінено без попереднього повідомлення.

Програма BASIC, наведена вище, unololf, є 1 SYS 0, тобто. виконання передачі в місце пам'яті 0. Починається виконання нульової сторінки як коду. Зазвичай, коли інтерпретатор BASIC починає виконувати програму, перші 16 байт - це

2F 37 00 AA  B1 91 B3 22
22 00 00 4C  00 00 00 00

так SYS 0би виконати наступне

00: ROL-AND $37,A  - Undocumented opcode: rotate the value at memory location 0x37 left, and store the result in the accumulator
02: BRK            - Call the interrupt vector

Загальний результат полягає у виведенні READY.підказки BASIC і повернення контролю користувачеві. Однак місце пам'яті 0x00 - це регістр напрямків вводу / виводу процесора, а розташування пам'яті 0x01 - це регістр адрес вводу / виводу процесора. Якщо ви зробили щось, що змінило їх перед запуском програми, результати можуть бути непередбачуваними, починаючи від виведення сміття до блокування комп'ютера (0x22 зазвичай міститься в пам'яті 0x07, якщо виконується як інструкція, є незадокументованим HALTкодом) .

Крім того, більш надійно непередбачувана програма - чотирибайт

1?TI

Друкує пройдений час, в мігфіксах (1/60 секунди), з моменту ввімкнення системи.


8

05AB1E , 2 байти

žd

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

Виводить поточні мікросекунди з внутрішнього годинника виконавчої машини.

Або ви могли зробити щось подібне ...

05AB1E , 3 байти

A.r

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

Виводить випадковим чином зміщений нижній регістр алфавіту.

Або це також працює:

A.R

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

Виводить з алфавіту випадкову літеру.

Або це також працює, і це крутіше:

05AB1E , 9 байт

"ž"A.RJ.V

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

Виводить випадковим чином один із них:

ž 23  > ža           push current hours
        žb           push current minutes
        žc           push current seconds
        žd           push current microseconds
        že           push current day
        žf           push current month
        žg           push current year
        žh           push [0-9]
        ži           push [a-zA-Z]
        žj           push [a-zA-Z0-9_]
        žk           push [z-aZ-A]
        žl           push [z-aZ-A9-0_]
        žm           push [9-0]
        žn           push [A-Za-z]
        žo           push [Z-Az-a]
        žp           push [Z-A]
        žq           push pi
        žr           push e
        žs           pop a, push pi to a digits (max. 100000)
        žt           pop a, push e to a digits (max. 10000)
        žu           push ()<>[]{}
        žv           push 16
        žw           push 32
        žx           push 64
        žy           push 128
        žz           push 256


8

C, 25 21 байт

Завдяки псевдоніму117 за збереження 4 байтів.

main(i){putchar(&i);}

Скомпільовано з gcc -o test lol.c(так, я досить оригінальний з назвою мого файлу ...) і побіг з ./test.

Він робить те, що говорить: друкує символ, що відповідає адресі пам'яті i, яка визначена під час виконання, тому вона повинна бути недетермінованою.


1. Чи можете ви пропустити значення, &оскільки значення змінної у стеку не визначено? 2. У вас є стійка кількість речей на стеку, так чи є адреса пам'яті, якщо є iпостійною?
Райлі

2
iстає тим, що зазвичай називається argc, тож ви праві, це завжди буде 1, якщо аргументів більше немає. Я не можу повірити, що не пам’ятав цього. Я досі не впевнений, чому місце розташування змінюється, але якщо воно працює, воно працює.
Райлі

1
Він змінюється в сучасних операційних системах завдяки ASLR , функції захисту, покликаної ускладнювати експлуатації в здогадуванні адрес. Ви отримаєте стійкий результат на деяких старих ОС.

1
Можна трохи заощадити, замінивши putcharнаreturn
roofcat

1
На сучасних компіляторах із застереженнями щодо декларування типу параметра ви можете зробити:main(){printf("%d");}
Myria

7

Python 2, 29 байт

import os
print os.urandom(9)

На жаль, це не перший раз написання коду на смартфоні.


6

Perl, 5 байт

say$$

Виводить ідентифікатор процесу та новий рядок.



5

Пайк, 1 байт

C

Спробуйте тут!

Виводить поточний час


1
Я впевнений, що це детерміновано.
Rɪᴋᴇʀ

@EasterlyIrk у видаленому коментарі mbomb сказав, що це нормально
Синій

О, гаразд. Мені здається детермінованим, але правила ОП.
Rɪᴋᴇʀ

У моїй історії редагування у мене була 3-байтна версія з належною випадковістю
Blue

@EasterlyIrk Якщо поточний час детермінований, то так само псевдовипадкові числа, оскільки це те, з чим вони посіяні. Мета - не "випадковість". Мета - недетермінізм.
mbomb007

5

C89 з GCC / Clang, 20 байт

Інше рішення C просто знімається з кожним разом, коли будується за допомогою GCC або Clang. Це, правда.

main(n){puts(&n+1);}

Як виглядає:

$ for _ in `seq 1 50`; do ./test_89; done
���z�U
�VW��U
�F��U
�v�f2V
��FV
���*=V
�6���U
�20wU
��
�+V
�6
   �U
��V�uU
�v��V
���K�U
��7�qU
�6S�jU
�&�WU
��wV
��6l�U
���U
�F�ߨU
�f���U
���s7V
�f��?V
��;B�U
�;��U
��GV
�� ��U
�vKV
�V?]wU
�����U
��.�U
�v"�XU
��uhpU
��LD�U
�����U
�6X�U
��M�.V
�69��U
��ԤV
���U
����U
�vx4.V
�֝+xU
�F��U
�֤BQV
��#�U
���1^U
����sU
��4�U
��AݗU

Досить багато недрукованих мотлохів, але це недетерміновано!


чому "main (n) {put (& n + 1);}", а не "main (n) {put (& n);}"?
RosLuP

@RosLuP Ваш другий варіант, який видається очевидним для випадкового спостерігача, дає байт у значенні n (коли n дорівнює 1, якщо putsйого адреса дає 1, а коли n - 2, якщо putsйого адреса дає 2). Додавання 1 до адреси n, що повинно вказувати на 4-байтну ширину int, дає небажану адресу із збереженим там значенням із небажаною кількістю байтів до наступного байту NUL. Така поведінка відтворюється між GCC та Clang і зовсім поза мною. Я думаю, я піду запитати на StackOverflow.
кіт

я читаю "ставить (& n)" таким чином: він дає ставити адресу n, припустимо, що n = 0x01020304 ставить друкується перетворене в символи 04 03 02 01 або реверс цього
RosLuP

1
Пам'ятайте, що ваш текст nвсе ще ініціалізований тим, що зазвичай називається, argcщо є 0у вашому загальному тестовому випадку, тому з &n, putsотримує цілком детермінований покажчик на байт '\ 0', що призводить до порожнього рядка (припустимо, що розмір вказівника == цілий розмір і все те) . &n+1однак це адреса, яку зазвичай називають argv(принаймні, на ABI, які передають параметри на стеку у зворотному порядку замість регістрів, і зі стеком, який зростає від високої до низької адреси), яка, припускаючи ASLR, повинна бути різною вказівкою кожен час.
Гунтрам Блом

@GuntramBlohm Ви маєте рацію, і це дуже цікаво, хоча для мене вказівники складають 8 байт, а ints - 4 байти.
кіт

5

PHP, 12 байт

<?=uniqid();

Виводить унікальний ідентифікатор 583f4da627ee3на основі поточного часу в мікросекундах.


<?=time();<- 10 байт.
Ісмаїл Мігель

@IsmaelMiguel uniqid()в 1'000'000 разів більше невизначеного, ніж time();)
Маріо

Я не кажу про протилежне. Але пропоную ще одну відповідь. Ви можете вибрати цей.
Ісмаїл Мігель

@IsmaelMiguel хтось ще дав таку ж відповідь ...
Маріо

5

Groovy, 9 байт

{print{}}

Виходи:

Script1$_run_closure1@2c8ec01c

Оскільки він видає адресу пам'яті закриття, це не детерміновано.


І я подумав, що Котлін - шлях до найкоротшого можливого рішення JVM.
Ф. Джордж

Спроба помістити це в файл і працює groovy Script1.groovy, я отримую повідомлення про помилку: Ambiguous expression could be either a parameterless closure expression or an isolated open code block;. Як це використовувати?
Paŭlo Ebermann

Призначте його до змінної закриття, а потім зателефонуйте.
Чарівна урва восьминога

5

Емотиномікон, 15 байт

😀😅🎲⏬

Пояснення:

😀😅🎲⏬
😀      push 0. Stack: [0]
  😅    push 1. Stack: [1]
    🎲  random[pop;pop]. Stack: [1 or 0]
      ⏬output

Назва мови - Emotinomicon
акроліт

@daHugLenny Як я пропустив це :)
Roman Gräf

5

Borland C у Windows, 12 байт

m(){puts();}

Я переписав це, тому що вони кажуть, що можна використовувати одну функцію. Компілятор не перевірив аргумент, тому компілюйте його; але ставить бачити одну адресу "ніхто" не знає і починає друкувати яку точку цієї адреси, поки не знайде байт 0x00. Це може бути не нормально, якщо ця адреса не збережена в пам'яті для програми, але тут щось надрукуйте


Це не дає недетермінованого виводу, воно щоразу перетворюється в сегменти.
кіт

Крім того, якщо ви отримаєте щось інше, ніж segfault, який компілятор ??
кіт

@cat це один компілятор Borland C + Windows7 Os. Як я бачу: вище код отримує адресу вершини стека (де в цьому випадку є адреса для повернення у функцію main ()) та зчитування з цієї адреси всередині основного простору коду ... Отже, це залежить від виводу компілятора. Але я не знаю на 100% ... Можливо, простір коду не читається у вашому Ос і з цього вини => seg fault
RosLuP

1
@RosLuP: Це було б просто надрукувати те, що сміття було в пам'яті стека (або у другому реєстрі, що передає аргументи, для x86-64 та більшості викликів RISC, що передають перші кілька аргументів у регістри). Він би не друкував адресу стека. У x86-64 це буде певною мірою надрукувати argv, оскільки компілятор, ймовірно, викликає printf з головним аргументом main ще в цьому реєстрі. Саме так відбувається з націлюванням gcc6.2 на Linux: Дивіться джерело + asm на провіднику компілятора Godbolt : main раніше не торкався RSI call printf.
Пітер Кордес

1
@RosLuP: argvзнаходиться в стеці, але не в самій вершині. На його адресу впливає стек ASLR, хоча це працює. Це мало б добре працювати -m32. Ви, ймовірно, завжди отримуєте нуль, оскільки mainмає підтримувати стек у вирівнюванні, щоб слот стека над рядком формату може бути свіжою пам'яттю стека, яку ніколи не торкалося (і, ймовірно, завжди дорівнює нулю, оскільки ядро ​​уникає витоку інформації замість нульових сторінок надання сторінок у просторі користувачів, повні старих даних).
Пітер Кордес

5

Мова для немовлят , 0 байт



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

Мова немовляти задається, щоб ігнорувати задану програму і робити щось навмання. (Перекладач, пов’язаний на сторінці Esolang, генерує випадкову юридичну програму BF і запускає її.) Це здається ідеально підходить для цього завдання.

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