Deterministik olmayan çıktı üretmek için en kısa kod


83

Deterministik olmayan çıktılar üretmeniz gerekiyor .

Bu durumda, bu, çıktının her zaman aynı sonuç olmayacağı anlamına gelecektir.

Kurallar:

  • Her zaman aynı çekirdeğe sahip olan sözde rasgele sayı üreteci sayılmaz.

  • Her yürütmede farklı (bilinmeyen) bir zamanda çalıştırılan programa güvenebilirsiniz.

  • Kodunuzun işlem kimliğinin (tercüman tarafından belirlenmediyse) deterministik olmadığı varsayılabilir.

  • Web tabanlı rastgeleliğe güvenebilirsiniz.

  • Kodunuz boş olmayan bir giriş yapamaz. İlgili meta gönderisi .

  • Programın durması gerekmez, ancak çıktının gösterilmesi gerekir.

Liderler Sıralaması


33
@ mbomb007 C 'de "tanımsız" davranış olan birçok şey var. Herhangi bir tercümanın herhangi bir durumda istediğini yapmasına izin verilir. Bildiğimiz kadarıyla, yağmurlu bir Salı günü imzalı bir tamsayıyı taşmaya çalışırsanız, gcc size pizza sipariş edebilir, ancak diğer tüm günlerde ekranınızdan bir alabalık sıçramasına neden olur. Yani, herhangi bir uygulamada gerçekte deterministik olup olmadığını gerçekten bilemezsiniz.
Martin Ender

12
@MartinEnder Bunun önemli olup olmadığından emin değilim. Dilleri burada kendi tanımlamaları ile tanımladık, şartnamelere göre değil (uygulamalara sahip olmayan dillere izin verilmediğinden)
Nathan Merrill

2
@MartinEnder Evet, Nathan ile aynı fikirdeyim.
mbomb007

7
C'deki tanımsız davranışların çoğunlukla çökmelere yol açtığını ve UNIX ve Linux'ta çökmelerin içlerinde işlem kimliğini içeren çekirdek dosyalara yol açtığını unutmayın. Şu anda ifade edilen soruya uyuyor gibi görünüyor.

5
Yanlış anlamadığım sürece, soru tanımsız davranıştan yararlanan kod istemiyordu. Determinizmi garanti altına almak için tanımlanmış davranıştan yararlanan bir kod ister.
WGroleau

Yanıtlar:


110

WinDbg, 1 bayt

#

Vaov! WinDbg'den 1 baytlık bir çözüm beklemedim!

#Bir sökme düzenini arar, ancak hiçbir parametre olmadığı için, bağlı olduğunuz her dökümü / işleme bir sonraki montaj talimatını geri döndürmeye çalışır. İlk adresi ayarlama mantığından emin değilsiniz, fakat öyle.

Örnek çıktı:

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
Buradaki soğutucu cevaplardan biri, bence "Güncel Tarih" çözümünü kazanmalı.
Magic Octopus Urn

yukarıda 389 intel cpu meclisinde bazı işlevlerin başlangıcını adım adım sökmeye benziyor
RosLuP

60

Java 7, 33 30 27 bayt

int a(){return hashCode();}

Çünkü Java


49
Çünkü Java Muhtemelen Java'nın şimdiye kadarki en iyi açıklaması.
F. George

5
@ carusocomputing toStringBir önceki sürümde vardı ama sonra dönüş türü Stringdaha uzun int. Baytları kurtar! :]
Poke

12
Bu bir fonksiyon olarak geçerli mi? hashCode()burada kısaltmasıdır this.hashCode(), bu yüzden statik bir yöntem değil, sadece bir örnek yöntem olarak çalışırdı. Bu durumda, arayanda bir nesne oluşturmak için ek kod gerekir. Buradaki mesele, çünkü mezhepçilikten sorumlu bir nesne yaratmanın kodu.

15
Java 8'de: ()->hashCode()14 bayt için. Sadece söylüyorum;;)
Olivier Grégoire

4
Pts Gönderiler için varsayılan gönderme yapısını tartışan meta gönderiden yola çıkıyorum . Zorluk, tam bir programın gerekli olduğunu belirtmediği sürece işlevlere varsayılan olarak izin verilir.
Poke

52

MATLAB, 3 bayt

why

whyhemen hemen her soruya cevaplar sağlar. Birkaç örnek:

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?

Bu, randdüşünebildiğim herhangi bir işlevden daha kısa .


33
MATLAB için bir yerleşiği vardır bu ? Neden?
ETHProductions,

59
@ETHproductions Programcı bunu önerdi
Eddie Curtis,

40

R, 1 bayt

t

Fonksiyonun kaynak kodunu ve R'nin her (yeniden) başlangıcında değişen bir hafıza işaretçi adresini gösterir.


36

ha? , 0 bayt


Boş bir program hala çıktı üretir. Yürütülen Python yorumlayıcısının son satırları:

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

Bir programın sonunda Python yorumlayıcısı yazdıracak ..., daha sonra adında bir metin dosyası oluşturacak / açacak Notes.txtve şimdiki zamanı içeren bir dize yazacaktır.


5
İnsanların GitHub'ımda kullanabileceğini düşündüğüm her şeyden, şaka dili yorumlayıcısının bir olacağını düşünmemiştim: P
Kade

@Kade Aslında başka bir soruyu yanıtlamak için de kullanacaktım (bir ses çalmak için en kısa kod, sadece bir bayt ile) - ama soru şu anda kapalı.
mbomb007

Orijinal .NET tercümanına bakmadığım sürece rekabet edemezdi, sanırım.
mbomb007

30

Labirent , 5 bayt

v
!
@

Ya yazdırır 0ya da hiçbir şey (her biri% 50 şans).

Çevrimiçi deneyin!

Labirentin rastgele davranış sergilediği çok spesifik bir durum vardır:

  • Talimat göstergesinin önünde ve arkasında bir duvar bulunmalıdır.
  • Talimat işaretçisinin solunda ve sağında duvar bulunmamalı.
  • Yığının geçerli tepesi sıfır olmalıdır.

Bu koşulların tümü yerine getirilirse, IP'nin hareket ettiği yön rastgele seçilir (eşit olarak). Üstteki kiraz, bu üç koşulun düzenli kontrol akışında yerine getirilmemesi imkansızdır, yani çalışma zamanında kaynak kodunu değiştirmezseniz.

(Bu biraz keyfi görünebilir, ancak aslında bu koşullar için bulabileceğim en tutarlı davranış, çünkü normalde IP'nin yönü her zaman önceki yöne, komşularına ve yığının tepesinin işaretine bağlıdır ve bu, dilde bir rastlantı kaynağı dahil etmenin zarif bir yolu gibi görünüyordu.)

Kaynak kodu döndürme talimatlarının ( <^>v) yardımıyla IP'yi bu duruma getirmek mümkündür. Böyle bir örnek en üstte görülür. IP başlangıçta doğuya işaret eder ve tepeden başlar. vDöner akım kolon elde ederiz ki:

@
v
!

IP bu dönme ile birlikte hareket eder, böylece hala vdoğuya işaret eder. Tüm şartlar şimdi yerine getirildi, bu yüzden IP rastgele yukarı ya da aşağı gidecek. Yukarı giderse, program derhal sona erer. Aşağı inerse, sıfır yazdırır, sütunu tekrar döndürür ve sonra sonlandırır.

Bunu kullanan diğer üç program vardır (biri basar 0, biri basar , diğeri 00basar 000):

v
@
!

"
>@!

"
>!@

(Aslında üçten fazla başka program var, çünkü boş bayt yazdırmak veya çok çeşitli komutlarla değiştirmek .yerine kullanabilirsiniz , ancak hepsinin aynı şekilde çalıştığına inanıyorum.)!"


30

Befunge (-93 ve -98), 3 bayt

?.@

?Rasgele bir yöne yürütülmesine gönderir. Yukarı ya da aşağı giderse, tekrar geri döner ?ve yeniden başlar. Sola giderse, program yuvarlak bir şekilde sarar @ve böylece hiçbir şey basmadan çıkar. Doğru giderse, yazdırır 0( .yığın boşaldığında üretilen çıktı ) ve ardından çıkar @.


Bu fesih garanti değil, ama ben tam olarak bu yüzden +1
Daniel

Virgül, boş karakter yerine sayı olarak 0 çıktısı almak için bir süre olarak değiştirmek isteyebilirsiniz (ASCII değer 0). +1
MildlyMilquetoast

O oldu .ben test için kullanıyordum programda, ama bir şekilde bir oldu ,ben PPCG üzerine kopyalanan zaman. Sabit.

7
@Dopapp olasılıkla neredeyse kesin olarak sona erer, olasılık 1 ile. Bunu bir garanti olarak kabul ediyorum;)
Oliphaunt

@JamesHolderness 1 içinde yapabileceğini düşünüyorum. Ancak bu sayılır emin değilim ...
MildlyMilquetoast

29

Minecraft, 5 4 bayt

op 8

Bir sunucunun konsoluna veya komut bloğuna yazarak ve ona güç vererek kullanılır. A hazırlayarak sohbet arayüzünden çalıştırılabilir /.

Genellikle bu hiçbir şey yapmaz, ancak sunucuda "8" kullanıcı adına sahip bir oyuncu varsa, operatör izinleri verilir. Minecraft normalde kullanıcı adlarının 3 karakter uzunluğunda olmasını gerektirse de, bu kısıtlamadan önce daha kısa ad uzunluğuna sahip bazı hesapların oluşturulduğunu unutmayın.

Bu kullanıcı adlarından biri veya kullanıcı operatörüne izin verme riski olmadan belirleyici olmadığı gösterilebilecek sürüm burada:

me @r

Herkese bir mesaj görüntüler; mesaj rastgele bir oynatıcının kullanıcı adıdır. opKomut sadece bir dize döndüren bir dize hazır bilgi, herhangi bir komut alır.

meKomut gerçekten görüntüleyecektir, ilk örneğin işe yaramaz "<your-username> 8". Bir komut bloğundan çalıştırdığınızda, tüm komut blokları aynı "kullanıcı adına" sahip olduğundan, ancak bunu sohbet arayüzünden çalıştırmak /için bir tane daha bayt gerektirir .


Yani /bayt sayımı dahil değil mi?
Esolanging Fruit

11
@ Challenger5 Eğik çizgi, komut konsollarında isteğe bağlıdır, sunucu konsolunda izin verilmez ve sohbet arayüzünde zorunludur.
Pavel,

2
Aslında, 4 bayt + 2 blok (Komut bloğu ve redstone kaynağı) veya 6 blyte olmalıdır
RudolfJelin

2
@ RudolphJelinek Konsoldan komut blokları olmadan çalıştırabilirsiniz.
Pavel,

1
Deterministik olmayan bir seçenek help, 4 baytlık (ve korsan oyun gerektirmeyen) bir komut bloğunda olacaktır .
Pokechu22

21

sh + procps, 1 bayt

w

Bu, bildiğim kadarıyla harici yürütülebilir programlara çağrı yaparak çalıştığım en kısa çözüm. procpsmevcut sistem durumu ( psve arkadaşları) hakkındaki bilgileri rapor etmekten sorumlu olan pakettir ve varsayılan olarak çoğu Linux dağıtımında yüklüdür; wBu, içindeki en kısa adlandırılmış komuttur ve giriş yapmış kullanıcılar hakkında bilgi verir, aynı zamanda çalışma süresi gibi bazı karakteristik olmayan bilgiler de verir.


21

7, 6 bayt bilgilendir

x is y

Bu, geçerli bir Inform 7 programı değil, çünkü "x" veya "y" tanımlanmadı. Yani bu bir hata veriyor.

Bununla birlikte, Inform 7'nin bazı hata mesajları - bunlarla birlikte - rastgele seçilir. Dolayısıyla yazdırdığı metin teknik olarak belirleyici değildir.

Birkaç olası çıkış şunları içerir:

Sorun. 'X' y 'cümlesinin iki şeyin aynı olduğu söyleniyor -' x 've' y 'yi iki farklı şey olarak okuyorum ve bu nedenle birinin diğeri olduğunu söylemenin bir anlamı yok. 'Adams Jefferson'dur'. İkincisi, belki de özellikli bir türün adı olsaydı iyi olurdu: örneğin 'Virginia ışıklı bir oda', Virginia denilen bir şeyin var olduğunu ve benim de bildiğim bir tür olan bir 'oda' olduğunu söylüyor. hakkında da bildiğim 'ışıklı' olarak adlandırılan bir özellik ile birlikte.

Sorun. 'X' y 'cümlesinin iki şeyin aynı olduğu söyleniyor -' x 've' y 'yi iki farklı şey olarak okuyorum ve bu nedenle birinin diğeri olduğunu söylemenin bir anlamı yok. 'Adem Havva'dır'. İkincisi, belki de mülkleri olan bir türün adı olsaydı iyi olurdu: örneğin 'Nod Ülkesi ışıklı bir oda', Nod Ülkesi adı verilen bir şeyin var olduğunu ve orası bir 'oda' olduğunu söyler. Bildiğim bir tür, 'aydınlatılmış' olarak adlandırılan ve bir de bildiğim özellik.

Sorun. 'X' y 'cümlesinin iki şeyin aynı olduğu söyleniyor -' x 've' y 'yi iki farklı şey olarak okuyorum ve bu nedenle birinin diğeri olduğunu söylemenin bir anlamı yok. 'Clark Kent, Lex Luthor'dur. İkincisi, belki de mülkleri olan bir türün adı olsaydı iyi olurdu: örneğin 'Metropolis ışıklı bir oda' diyor Metropolis diye bir şeyin var olduğunu ve bildiğim türden bir 'oda' olduğunu söylüyor hakkında da bildiğim 'ışıklı' olarak adlandırılan bir özellik ile birlikte.

Sorun. 'X' y 'cümlesinin iki şeyin aynı olduğu söyleniyor -' x 've' y 'yi iki farklı şey olarak okuyorum ve bu nedenle birinin diğeri olduğunu söylemenin bir anlamı yok. 'Aeschylus Euripides'tir'. İkincisi, belki de özellikli bir türün adı olsaydı iyi olurdu: örneğin 'Yeraltı dünyası ışıklandırılmış bir oda' diyor Yeraltı Dünyası adı verilen bir şeyin var olduğunu ve benim tanıdığım bir tür oda olduğunu söylüyor. hakkında da bildiğim 'ışıklı' olarak adlandırılan bir özellik ile birlikte.


7
Hata mesajları bile ayrıntılı!
Yıkılabilir Limon

21

JavaScript, 4 bayt

Date

Geçerli tarih / saati döndüren bir işlev. Ben düşünüyorum bu o alacak en kısa olduğunu ...

açıklama

Bunun neden geçerli olduğu konusunda çok fazla kafa karışıklığına neden olduğu anlaşıldığından, açıklamaya çalışacağım.

JavaScript'te, bir değişkene bir değişkene atanabilir ve işlev olarak adlandırılabilirse, bir işlev girişi geçerlidir. Örneğin, bu işlev geçerli bir girdidir:

function(){return Date()}

Çünkü böyle bir değişkene atanabilecek bir fonksiyondur:

f=function(){return Date()}

Sonra f()gerektiği kadar koşun . Her seferinde, OP tarafından deterministik olmayan bir şekilde hükmedilen geçerli tarih / saat dizesini döndürür.

Bu ES6 ok işlevi de geçerlidir:

_=>Date()

İle atanabilir f=_=>Date(), sonra f()diğeri ile çalışabilirsin .

Şimdi, işte başka bir geçerli giriş:

Date

Neden? Çünkü tıpkı diğer iki giriş gibi, diğer ikisi f=Dateile f()tamamen aynı olanı döndürerek atanabilir ve sonra çağrılabilir . Dene:


1
Date()Fonksiyonu çağırmak için buna ihtiyacınız yok mu?
süt

4
@milk Date, giriş olmadan çağrıldığında geçerli tarih / saat üreten bir fonksiyondur. _=>Date()aynı şeyi yapan açıkça geçerli bir giriş, Dategeçerli bir giriş.
ETHProductions

1
Bu mantıklı.
süt

2
Yazma Datebenim tarayıcının JavaScript konsoluna hep bu üretir, deterministik çıktı üretir: function Date() { [native code] }. Muhtemelen Date()6 bayt demek istiyorsun .
puan

2
"tarihi" Yukarıda daha ok ise "malloc (8)" veya "zaman (0)" çok C tamam olurdu
RosLuP


11

Python 2, 11 bayt

print id(1)

1
Bulduğum şey bu. id(0)Yine de vardı . :)
mbomb007 20

2
Teknik olarak, OP olduğum ve soruyu göndermeden önce bulduğumdan seni yeniyorum. Soruyu göndermek ve hemen en kısa cevabımı göndermek istemedim.
mbomb007 20


10

PowerShell, 4 2 bayt

(4 çarpı hala 4 gibi gözüküyor )

ps

Bu, Get-Processgeçerli işlem listesini tutamaçları, özel belleği, CPU zamanını vb. İçeren bir tablo olarak çıkaran takma addır .

Aşağıdaki gibi bir şeyle yürütün:

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

1
İtiraf etmeliyim ki, gerçekte çarpı olup olmadığını kontrol ettim. Gerçekten söyleyemezsin bile.
Carcigenicate

@ Karsigenicate metni seçmeden çarpıldığını söyleyebilirim (Ubuntu 16.04.1, Chrome 54.0.2840.100).
Outgolfer Erik 19: 38'de

Açıkça
görülmese

İOS uygulamasında iyi görünüyor.
Mateusz Piotrowski

Kendim yapacak bir temsilcim yok, ama 04'ü yapabilir ve grevde bulunabilirsiniz.
Bobson,


9

Commodore 64 Basic, 4 bayt

1S|0

PETSCII ikamesi: |=SHIFT+Y

Sıfır sayfa bir Commodore 64 daha hızlı RAM kalanından daha erişilebilir bellek 256 bayt bir alandır. Sonuç olarak, programlar (BASIC tercümanı gibi) sık erişilen veriler için kullanır ve CPU burada kendi iç durumunun bir kısmını saklar. İçerikler önceden bildirilmeksizin değiştirilebilir.

Yukarıdaki BASIC programı ungolfed 1 SYS 0, yani. yürütmeyi bellek konumuna 0 aktarın. Bu, sıfır sayfasını kod olarak çalıştırmaya başlar. Normalde, BASIC yorumlayıcısı bir programı çalıştırmaya başladığında, ilk 16 bayt

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

böylece SYS 0aşağıdaki yürütmek

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

Genel sonuç, BASIC READY.komut isteminin çıktısını almak ve denetimi kullanıcıya iade etmektir. Ancak, bellek konumu 0x00, CPU'nun G / Ç yön kaydıdır ve bellek konumu 0x01, CPU'nun G / Ç adres kaydıdır. Programı çalıştırmadan önce bunları değiştiren bir şey yaptıysanız, sonuçlar çıktının çöpe gönderilmesinden bilgisayarı kilitlemeye kadar değişmeyebilir (bir talimat olarak yürütülürse genellikle 0x07 bellek konumunda bulunan 0x22 belgelenmemiş bir HALTkoddur) .

Alternatif olarak, daha güvenilir bir şekilde tahmin edilemeyen bir program dört bayttır

1?TI

Sistemin açılmasından bu yana geçen süreyi kısa sürede (saniyenin 1 / 60'ı) yazdırır.


8

05AB1E , 2 bayt

žd

Çevrimiçi deneyin!

Yürütülen makinenin dahili saatinden geçerli mikrosaniye çıkışlarını verir.

Ya da böyle bir şey yapabilirsin ...

05AB1E , 3 bayt

A.r

Çevrimiçi deneyin!

Rasgele karıştırılmış bir küçük harfli alfabe çıkarır.

Veya bu da çalışır:

A.R

Çevrimiçi deneyin!

Alfabeden rastgele bir harf çıkar.

Ya da bu da işe yarıyor ve daha havalı:

05AB1E , 9 bayt

"ž"A.RJ.V

Çevrimiçi deneyin!

Şunlardan birini rastgele olarak çıkarır:

ž 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 bayt

4 byte'ı kaydettiğiniz için takma adıma teşekkürler.

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

İle derlendi gcc -o test lol.c(evet, benim dosya adı ile oldukça özgün değilim ...) ve ile koştu ./test.

Ne diyorsa yapar: Çalışma izamanında tanımlanmış olan hafıza adresine karşılık gelen karakteri basar , bu nedenle deterministik olmamalıdır.


1. &Yığındaki bir değişkenin değeri tanımlanmadığı için atlayabilir misiniz ? 2. Yığın üzerinde sabit sayıda şey var, eğer isabitse bellek adresi de öyle mi?
Riley

2
inormal olarak adlandırılan hale gelir argc, bu yüzden haklısınız, daha fazla argüman olmadığı sürece her zaman 1 olacaktır. Bunu hatırlamadığıma inanamıyorum. Konumun neden değiştiğinden hala emin değilim, ancak çalışırsa çalışır.
Riley

1
Modern işletim sistemlerinde , istismarların adres tahminini zorlaştırmak için tasarlanmış bir güvenlik özelliği olan ASLR nedeniyle değişmektedir . Bazı eski işletim sistemlerinde tutarlı bir sonuç elde edersiniz.

1
Sen değiştirerek biraz kaydedebilirsiniz putcharilereturn
ceilingcat

1
Bir parametrenin türünü bildirmeme uyarıları olan modern derleyicilerde şunları yapabilirsiniz:main(){printf("%d");}
Myria

7

Python 2,29 bayt

import os
print os.urandom(9)

Ne yazık ki ilk kez bir akıllı telefon kodu yazma.


6

Perl, 5 bayt

say$$

İşlem kimliğini ve bir yeni satırı çıkarır.



5

Pyke, 1 bayt

C

Burada dene!

Geçerli saati çıkarır


1
Bunun deterministik olduğuna oldukça eminim.
Rɪᴋᴇʀ

@EasterlyIrk silinmiş bir yorumda mbomb bunun sorun olmadığını söyledi
Blue

Tamam. Bana göre belirleyici görünüyor, ancak OP kuralları.
Rɪᴋᴇʀ

Düzenleme geçmişimde uygun rastlantılı 3 baytlık bir sürüme sahiptim
Blue

@EasterlyIrk Eğer mevcut zaman deterministik ise, o zaman sahte rastgele sayılardır, çünkü ekildikleri şey budur. Amaç "rastgelelik" değildir. Amaç determinizm değil.
mbomb007 20

5

CCC, GCC / Clang, 20 bayt

Diğer C çözümü, GCC veya Clang ile yapıldığında her seferinde farklılaşıyor. Bu olsa.

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

Hangisine benziyor:

$ 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

Oldukça yazdırılamaz bir önemsiz ama bu özgün değil!


neden "main (n) {koyar (& n + 1);}" ve "main (n) {koyar (& n);}"?
RosLuP

@RosLuP Sıradan gözlemciye açık görünen ikinci seçeneğiniz, bayt'ı n değerinde verir (n, 1, putsadres 1, ve n 2, putsadres 2 verir). 4 bayt genişliğe işaret etmesi gereken n adresine 1 eklemek int, bir sonraki NUL baytına kadar çok sayıda baytla birlikte burada depolanmış bir hurda değeri olan bir önemsiz adres verir. Bu davranış, GCC ve Clang arasında ve tamamen ötesinde tekrarlanabilir. Sanırım gidip StackOverflow'u soracağım.
kedi

ben bu şekilde "koyar (& n)" okuyun: o kadar n adresini koyar vermek varsayalım n = 0x01020304 koyar karakter 04 03 02 01 dönüştürülen veya bunun tersine basmak istiyorum
RosLuP

1
Senin hatırla nyine de normal denen başlatılır argchangi 0ile, böylece genel bir test durumda &n, puts(işaretçi boyutu == tamsayı boyutu ve tüm bu maddeleri varsayarak) boş bir dize ile sonuçlanan bir '\ 0' byte için oldukça deterministik işaretçi alır . &n+1bununla birlikte normal olarak adlandırılanın adresidir argv(en azından kayıtlar yerine yığında parametreleri ters sırada geçiren ABI'lerde ve ASLR'nin her birinin farklı bir işaretçisi olması gerektiğini düşünen bir yığınla) saati.
Guntram Blohm

@GuntramBlohm Haklısın ve bu çok ilginç, çünkü benim için işaretçiler 8 byte ve 4 byte.
kedi

5

PHP, 12 bayt

<?=uniqid();

583f4da627ee3Mikrosaniye cinsinden geçerli zamana göre benzersiz bir kimlik çıkışı sağlar .


<?=time();<- 10 bayt.
Ismael Miguel

@IsmaelMiguel uniqid(), 1'000'000 katından daha fazla belirlenmemiş time();)
Mario

Ben oposite demiyorum. Ancak başka bir cevap önermek. Onu seçmekte özgürsün.
Ismael Miguel

@IsmaelMiguel başkası zaten aynı cevabı verdi ...
Mario

5

Groovy, 9 bayt

{print{}}

Çıktılar:

Script1$_run_closure1@2c8ec01c

Kapağın hafıza adresini çıktığından belirleyici değildir.


Kotlin’in mümkün olan en kısa JVM çözümünün yolu olduğunu düşündüm.
F. George

Bir dosyaya koymak için çalışıyorum ve çalışan groovy Script1.groovy, bir hata alıyorum: Ambiguous expression could be either a parameterless closure expression or an isolated open code block;. Bunu nasıl kullanırım?
Paŭlo Ebermann,

Bir kapatma değişkenine atayın, sonra onu çağırın.
Sihirli Ahtapot Urn

5

Emotinomicon, 15 bayt

😀😅🎲⏬

Açıklama:

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

Dilin adı Emotinomicon
saat

@daHugLenny Bunu nasıl kaçırdım :)
Roman Gräf

5

Windows'ta Borland C, 12 bayt

m(){puts();}

Tekrar yazdım çünkü bir işlevi kullanmanın mümkün olduğunu söylüyorlar. Derleyici argümanı kontrol etmedi, o yüzden derleyin; fakat bir kimsenin 'kimsenin olmadığını' görmesini ve bayt 0x00'ı bulana kadar hangi adresi yazdırmaya başladığını gösterir. Bu adresin program için ayrılmış belleği kalmamışsa sorun olmaz ancak burada bir şey yazdırın


Bu, klasik olmayan bir çıktı vermez, sadece her zaman farklılaşır.
kedi

Alternatif olarak, eğer bir segfault dışında bir şey alırsanız , ne derleyici ??
kedi

@cat bir Borland C derleyicisi + Windows7 Os. Gördüğüm gibi: yukarıdaki kod yığının adresini alır (burada bu durumda main () işlevinde döndürülecek adres var) ve bu alandan ana alan kodunun içinde okunan adres ... Bu yüzden derleyici çıkışına bağlıdır. Ama% 100 bilmiyorum ... Muhtemelen kod alanı
Os'unuzda okunmuyor

1
@RosLuP: Yığın hafızada ne olursa olsun çöpü (veya ikinci argümanlayıcı kayıt defterinde, x86-64 ve kayıtlarda ilk birkaç argümanı geçen çoğu RISC çağrı kuralı için) yazdırırdı. Yığının adresini yazdırmaz. X86-64'te, argvderleme işlemi muhtemelen o kayıt defterinde hala main'in ikinci argümanı ile printf olarak adlandırılacağı için, yazdırması biraz muhtemel olacaktır. Gcc6.2'nin Linux'u hedeflediği şey tam olarak budur: Godbolt derleyici gezgininde kaynak + bölüme bakın : main daha önce RSI'ye dokunmuyorcall printf .
Peter Cordes,

1
@RosLuP: argvyığında, ancak en üstünde değil. Adresi, ASLR yığından etkilenir, öyle ki çalışır. Bu daha az işe yarayacaktı -m32. mainYığını hizalanmış tutmak zorunda kalacaksınız , çünkü biçim dizesinin üstündeki yığın yuvası hiç dokunulmamış taze yığın bellek olabilir (ve muhtemelen her zaman sıfırdır, çünkü çekirdek bunun yerine sayfaları sıfırlayarak sızıntıları önler. eski sayfalarla dolu kullanıcı alanı sayfalarının verilmesi).
Peter Cordes,

5

Bebek Dili , 0 bayt



Bunu aslen göndermedim, çünkü soruyu yayınladığını düşündüm. Ben hatalıydım; dilin zamanında yaratılmış bir tercümanı vardı. Ayrıca muhtemelen gördüğüm en düşük 0 baytlık çözümdür (0 baytlık bir programın, programın istediği şeyi yapması ve golf oynamak için aldatma amacıyla yapılmadığının belirtilmesi şartıyla).

Bebek Dili, verilen programı görmezden gelmek ve rastgele bir şey yapmak için belirtilir. (Esolang sayfasına bağlı tercüman, rastgele bir yasal BF programı oluşturur ve çalıştırır.) Bu, bu zorluk için mükemmel bir seçim gibi görünüyor.

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.