function answersUrl(a){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(a,b){return"https://api.stackexchange.com/2.2/answers/"+b.join(";")+"/comments?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(a){answers.push.apply(answers,a.items),answers_hash=[],answer_ids=[],a.items.forEach(function(a){a.comments=[];var b=+a.share_link.match(/\d+/);answer_ids.push(b),answers_hash[b]=a}),a.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(a){a.items.forEach(function(a){a.owner.user_id===OVERRIDE_USER&&answers_hash[a.post_id].comments.push(a)}),a.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(a){return a.owner.display_name}function process(){var a=[];answers.forEach(function(b){var c=b.body;b.comments.forEach(function(a){OVERRIDE_REG.test(a.body)&&(c="<h1>"+a.body.replace(OVERRIDE_REG,"")+"</h1>")});var d=c.match(SCORE_REG);d?a.push({user:getAuthorName(b),size:+d[2],language:d[1],link:b.share_link}):console.log(c)}),a.sort(function(a,b){var c=a.size,d=b.size;return c-d});var b={},c=1,d=null,e=1;a.forEach(function(a){a.size!=d&&(e=c),d=a.size,++c;var f=jQuery("#answer-template").html();f=f.replace("{{PLACE}}",e+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link),f=jQuery(f),jQuery("#answers").append(f);var g=a.language;g=jQuery("<a>"+g+"</a>").text(),b[g]=b[g]||{lang:a.language,lang_raw:g,user:a.user,size:a.size,link:a.link}});var f=[];for(var g in b)b.hasOwnProperty(g)&&f.push(b[g]);f.sort(function(a,b){return a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase()?1:a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase()?-1:0});for(var h=0;h<f.length;++h){var i=jQuery("#language-template").html(),g=f[h];i=i.replace("{{LANGUAGE}}",g.lang).replace("{{NAME}}",g.user).replace("{{SIZE}}",g.size).replace("{{LINK}}",g.link),i=jQuery(i),jQuery("#languages").append(i)}}var QUESTION_ID=101638,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",OVERRIDE_USER=34718,answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:400px;float:left}table thead{font-weight:800}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table></div><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table></div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table><table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>
Odpowiedzi:
WinDbg, 1 bajt
Łał! Nigdy nie oczekiwałem rozwiązania 1-bajtowego od WinDbg!
#
szuka wzorca dezasemblacji, ale ponieważ nie ma parametrów, wygląda na to, że zwróci następną instrukcję asemblera w jakimkolwiek zrzutie / procesie, do którego jesteś podłączony. Nie jestem pewien logiki ustawiania adresu początkowego, ale tak jest.Przykładowe dane wyjściowe:
źródło
Java 7,
333027 bajtówPonieważ Java.
źródło
toString
w poprzedniej wersji, ale wtedy typ zwracanyString
jest dłuższy niżint
. Zapisz bajty! :]hashCode()
jest tutaj skrótemthis.hashCode()
, więc działałaby tylko jako metoda instancji, a nie metoda statyczna. W takim przypadku potrzebujesz dodatkowego kodu, aby utworzyć obiekt w wywołującym. Jest to istotne tutaj, ponieważ to kod do stworzenia obiektu odpowiedzialnego za niedeterminizm.()->hashCode()
dla 14 bajtów. Po prostu mówię;)MATLAB, 3 bajty
why
zapewnia odpowiedzi na prawie każde pytanie. Kilka przykładów:To jest krótsze niż jakakolwiek
rand
funkcja, o której mogę myśleć.źródło
R, 1 bajt
Wysyła kod źródłowy funkcji i adres wskaźnika pamięci, który zmienia się z każdym (ponownym) początkiem R.
źródło
co? , 0 bajtów
Pusty program nadal generuje dane wyjściowe. Ostatnie wiersze interpretera Pythona, które są wykonywane:
Na końcu programu interpreter Pythona wydrukuje
...
, a następnie utworzy / otworzy plik tekstowy o nazwieNotes.txt
i zapisze ciąg znaków zawierający bieżący czas z przodu.źródło
Labirynt , 5 bajtów
Odbitki
0
lub brak (każda szansa 50%).Wypróbuj online!
Istnieje bardzo szczególny przypadek, w którym Labirynt wykazuje losowe zachowanie:
Jeśli wszystkie te warunki są spełnione, kierunek, w którym porusza się IP, jest wybierany (jednolicie) losowo. Najważniejsze jest to, że tych trzech warunków nie można spełnić przy regularnym przepływie kontroli, co oznacza, chyba że zmodyfikujesz kod źródłowy w czasie wykonywania.
(Może to wydawać się nieco arbitralne, ale w rzeczywistości jest to najbardziej spójne zachowanie, jakie mogę znaleźć w tych warunkach, ponieważ zwykle kierunek adresu IP zawsze zależy od poprzedniego kierunku, jego sąsiadów i znaku górnej części stosu, i wydawało się to eleganckim sposobem na uwzględnienie źródła losowości w języku).
Za pomocą instrukcji rotacji kodu źródłowego (
<^>v
) można wprowadzić IP do tej sytuacji. Jeden taki przykład widać na górze. IP początkowo wskazuje wschód i zaczyna się na górze. Thev
obraca obecna kolumna tak, że otrzymujemy:IP porusza się wraz z tym obrotem, tak że wciąż jest na
v
, wskazując na wschód. Wszystkie warunki są teraz spełnione, więc IP losowo wzrośnie lub spadnie. Jeśli wzrośnie, program natychmiast się kończy. Jeśli spadnie, drukuje zero, ponownie obraca kolumnę, a następnie kończy.Istnieją trzy inne programy korzystające z tego (jeden, który również drukuje
0
, jeden, który drukuje,00
a drugi, który drukuje000
):(W rzeczywistości istnieje o wiele więcej niż trzy inne programy, ponieważ można również użyć
.
zamiast!
wypisać bajty zerowe lub zastąpić"
je szeroką gamą poleceń, ale uważam, że wszystkie działają w zasadzie tak samo.)źródło
Befunge (-93 i -98), 3 bajty
?
Wysyła wykonanie w losowym kierunku. Jeśli idzie w górę lub w dół, zapętla się z powrotem do?
i przewija. Jeśli pójdzie w lewo, program zawija się do@
i w ten sposób kończy pracę bez drukowania niczego. Jeśli pójdzie dobrze, drukuje0
(dane wyjściowe wyprodukowane,.
gdy stos jest pusty), a następnie kończy działanie na@
.źródło
.
w programie, którego,
używałem do testowania, ale jakoś stało się, gdy skopiowałem go na PPCG. Naprawiony.Minecraft,
54 bajtówUżywane, pisząc w konsoli serwera lub bloku poleceń i dając mu moc. Można uruchomić z interfejsu czatu, przygotowując
/
.Zwykle nic to nie robi, ale jeśli na serwerze jest gracz o nazwie użytkownika „8”, otrzymają uprawnienia operatora. Pamiętaj, że chociaż Minecraft zwykle wymaga, aby nazwy użytkowników składały się z 3 znaków, niektóre konta o krótszych nazwach zostały utworzone przed tym ograniczeniem.
Wersja, którą można zademonstrować jako niedeterministyczną bez jednej z tych nazw użytkownika lub ryzyka nadania uprawnień operatorowi użytkownika, znajduje się tutaj:
Wyświetla wiadomość dla wszystkich, która jest nazwą użytkownika losowego gracza.
op
Komenda zajmuje tylko ciąg dosłowny, nie każdy skrypt, który zwraca ciąg znaków.me
Polecenie nie będzie naprawdę pracować dla pierwszego przykładu, to wyświetlane"<your-username> 8"
. Po uruchomieniu z bloku poleceń nie byłoby deterministyczne, ponieważ wszystkie bloki poleceń mają tę samą „nazwę użytkownika”, ale uruchomienie go z interfejsu czatu wymagałoby/
jednego dodatkowego bajtu.źródło
/
nie jest uwzględniony w liczbie bajtów?help
blok poleceń, który ma 4 bajty (i nie wymaga pirackich gier).sh + procps, 1 bajt
Jest to najkrótsze znane mi rozwiązanie, które działa poprzez wywołanie zewnętrznych plików wykonywalnych.
procps
jest odpowiedzialnym pakietem za raportowanie informacji o bieżącym stanie systemu (ps
i znajomych) i jest domyślnie instalowany w większości dystrybucji Linuksa;w
jest najkrótszą w nim komendą i zwraca informacje o zalogowanych użytkownikach, ale także pewne niedeterministyczne informacje, takie jak czas pracy.źródło
Poinformuj 7, 6 bajtów
To nie jest prawidłowy program Inform 7, ponieważ nie zdefiniowano ani „x”, ani „y”. To powoduje błąd.
Jednak niektóre komunikaty o błędach Inform 7 - w tym ten - są losowe. Tak więc tekst, który drukuje, jest technicznie niedeterministyczny.
Kilka możliwych wyników to:
źródło
JavaScript, 4 bajty
Funkcja, która zwraca bieżącą datę / godzinę. Myślę, że to najkrótszy będzie ...
Wyjaśnienie
Ponieważ wydaje się, że powoduje to wiele nieporozumień, dlaczego jest to ważne, postaram się wyjaśnić.
W JavaScript wpis funkcji jest poprawny, jeśli można go przypisać do zmiennej i wywołać jak funkcję. Na przykład ta funkcja jest poprawnym wpisem:
Ponieważ jest to funkcja, którą można przypisać do zmiennej takiej jak:
A następnie biegnij
f()
tyle razy, ile to konieczne. Za każdym razem zwraca bieżący ciąg daty / godziny, który został uznany przez PO za niedeterministyczny.Ta funkcja strzałki ES6 jest również ważna:
Można go przypisać za pomocą
f=_=>Date()
, a następnie uruchomić zf()
innym.Oto kolejny ważny wpis:
Dlaczego? Ponieważ podobnie jak dwa pozostałe wpisy, można go przypisać za pomocą,
f=Date
a następnie wywołać za pomocąf()
, zwracając dokładnie to samo, co pozostałe dwa. Spróbuj:Pokaż fragment kodu
źródło
Date()
aby wywołać tę funkcję?Date
jest funkcją, która wywołana bez wprowadzania danych generuje bieżącą datę / godzinę._=>Date()
jest wyraźnie poprawnym wpisem, który robi dokładnie to samo, więcDate
jest poprawnym wpisem.Date
do konsoli JavaScript w przeglądarce powoduje wyjście deterministyczny, to zawsze daje to:function Date() { [native code] }
. Prawdopodobnie masz na myśliDate()
6 bajtów.Bash (procps-ng), 2 bajty
$$
jest również rozwiązaniem.źródło
w
jest krótszy i również pochodzi z procps.Python 2, 11 bajtów
źródło
id(0)
jednak. :)Pyth, 2 bajty
Wyjaśnienie:
Chodzi o to, że gdy
O
ma0
swój argument, po prostu zwraca losową liczbę zmiennoprzecinkową pomiędzy0
i1
, wyłączne.Zróbmy to tylko do cholery!
Wygląda też na to, że może to być retro (dzięki 34718 / mbomb007):
Pyth, 2 bajty
Wyjaśnienie:
Zamiast tego wypróbuj tę wersję boooooooooooooooring
>:(
źródło
PowerShell,
42 bajty(przekreślone 4 nadal wygląda jak 4 )
Jest to alias, dla
Get-Process
którego bieżąca lista procesów wyświetli się w postaci tabeli, w tym uchwytów, pamięci prywatnej, czasu procesora itp.Wykonaj to za pomocą czegoś takiego:
źródło
Zsh, 5 bajtów
Drukuje PID.
źródło
Commodore 64 Basic, 4 bajty
Podstawienie PETSCII:
|
=SHIFT+Y
Strona zerowa Commodore 64 to obszar 256 bajtów pamięci, do którego można uzyskać dostęp szybciej niż reszta pamięci RAM. W związku z tym programy (takie jak interpreter BASIC) używają go do często używanych danych, a sam procesor przechowuje tutaj część swojego wewnętrznego stanu. Treść może ulec zmianie bez powiadomienia.
Powyższy program BASIC, bez golfa, to
1 SYS 0
np. przesyłanie wykonania do miejsca pamięci 0. To zaczyna wykonywanie strony zerowej jako kodu. Zwykle, gdy interpreter BASIC zaczyna uruchamiać program, pierwsze 16 bajtów towięc
SYS 0
wykonaj następujące czynnościOgólnym wynikiem jest wyświetlenie
READY.
monitu BASIC i zwrócenie kontroli użytkownikowi. Jednak lokalizacja pamięci 0x00 to rejestr kierunku we / wy procesora, a lokalizacja pamięci 0x01 to rejestr adresu we / wy procesora. Jeśli zrobiłeś coś, co je zmienia przed uruchomieniem programu, wyniki mogą być nieprzewidywalne, począwszy od wyrzucania śmieci do blokowania komputera (0x22 zwykle zawarty w pamięci 0x07, jeśli wykonany jako instrukcja, jest nieudokumentowanymHALT
opcode) .Alternatywnie, bardziej wiarygodnym nieprzewidywalnym programem jest czterobajtowy
Drukuje czas, który upłynął, w jiffies (1/60 sekundy), od włączenia zasilania systemu.
źródło
05AB1E , 2 bajty
Wypróbuj online!
Wysyła bieżące mikrosekundy z wewnętrznego zegara maszyny wykonującej.
Lub możesz zrobić coś takiego ...
05AB1E , 3 bajty
Wypróbuj online!
Wyprowadza losowo tasowane małe litery.
Lub to też działa:
Wypróbuj online!
Wysyła losową literę z alfabetu.
Lub to też działa i jest fajniejsze:
05AB1E , 9 bajtów
Wypróbuj online!
Generuje losowo jeden z tych:
źródło
BrainfuckX i mały skrypt (itp.) Polyglot - 2 bajty
? - Losuj wartość w bieżącej komórce
. - Wyślij bieżącą komórkę na standardowe wyjście
źródło
C,
2521 bajtówDzięki pseudonimowi 117 za zapisanie 4 bajtów.
Skompilowałem
gcc -o test lol.c
(tak, jestem dość oryginalny z nazwą mojego pliku ...) i uruchomiłem z./test
.Robi to, co mówi: drukuje znak odpowiadający adresowi pamięci
i
zdefiniowanemu w czasie wykonywania, więc powinien być niedeterministyczny.źródło
&
ponieważ wartość zmiennej na stosie nie jest zdefiniowana? 2. Masz stałą liczbę rzeczy na stosie, więc czy adres pamięci jesti
stały?i
staje się tym, co zwykle się nazywaargc
, więc masz rację, zawsze będzie to 1, chyba że będzie więcej argumentów. Nie mogę uwierzyć, że tego nie pamiętam. Nadal nie jestem pewien, dlaczego zmienia się lokalizacja, ale jeśli działa, to działa.putchar
zreturn
main(){printf("%d");}
Python 2, 29 bajtów
Niestety nie pierwszy raz pisze kod na smartfonie.
źródło
Perl, 5 bajtów
Wysyła identyfikator procesu i nowy wiersz.
źródło
Rubinowy , 3 bajty
Wypróbuj online!
Drukuje identyfikator procesu.
źródło
Pyke, 1 bajt
Wypróbuj tutaj!
Wyświetla aktualny czas
źródło
C89 z GCC / Clang, 20 bajtów
Inne rozwiązanie C po prostu ulega awarii za każdym razem, gdy jest budowane z GCC lub Clang. To jednak.
Który wygląda jak:
Dość dużo niepotrzebnych śmieci, ale to niedeterministyczne!
źródło
puts
jego adres daje 1, a gdy n jest 2,puts
jego adres daje 2). Dodanie 1 do adresu n, który powinien wskazywać na szerokość 4 bajtówint
, daje adres śmieci z przechowywaną tam wartością śmieci z bardzo pewną liczbą bajtów do następnego bajtu NUL. To zachowanie jest powtarzalne między GCC i Clangiem i całkowicie poza mną. Myślę, że zapytam o StackOverflow.n
nadal inicjujesz to, co zwykle się nazywa,argc
co jest0
w ogólnym przypadku testowym, więc za pomocą&n
,puts
dostaje dość deterministyczny wskaźnik do bajtu „\ 0”, co skutkuje pustym łańcuchem (zakładając rozmiar wskaźnika == rozmiar liczby całkowitej i wszystkie inne rzeczy) .&n+1
jest to jednak adres tego, co zwykle się nazywaargv
(przynajmniej na ABI, które przekazują parametry na stos w odwrotnej kolejności zamiast rejestrów, i na stosie, który rośnie z wysokich do niskich adresów), który przy założeniu ASLR powinien być innym wskaźnikiem co czas.PHP, 12 bajtów
Wysyła unikalny identyfikator
583f4da627ee3
na podstawie bieżącego czasu w mikrosekundach. ↑źródło
<?=time();
<- 10 bajtów.uniqid()
jest 1'000'000 razy bardziej nieokreślony niżtime()
;)Groovy, 9 bajtów
{print{}}
Wyjścia:
Script1$_run_closure1@2c8ec01c
Ponieważ wyprowadza adres pamięci zamknięcia, nie jest deterministyczny.
źródło
groovy Script1.groovy
, pojawia się błąd:Ambiguous expression could be either a parameterless closure expression or an isolated open code block;
. Jak tego użyć?Emotinomicon, 15 bajtów
Wyjaśnienie:
źródło
Borland C w systemie Windows, 12 bajtów
Przepisałem go, ponieważ mówią, że można użyć jednej funkcji. Kompilator nie sprawdził argumentu, więc go skompiluj; ale stawia jeden adres „nikt” nie zna i zaczyna wypisywać, jaki punkt ten adres, aż do znalezienia bajtu 0x00. Może nie być w porządku, jeśli w tym adresie brakuje pamięci zarezerwowanej dla programu, ale tutaj coś wydrukuj
źródło
argv
, ponieważ kompilator prawdopodobnie wywołałby printf z drugim argumentem main nadal w tym rejestrze. Tak właśnie dzieje się z gcc6.2 atakującym na Linuksa: Zobacz źródło + asm w eksploratorze kompilatora Godbolt : main nie dotyka wcześniej RSIcall printf
.argv
jest na stosie, ale nie na samej górze. Jednak na jego adres wpływa stos ASLR, więc to działa. To działałoby gorzej-m32
. Prawdopodobnie zawsze miałbyś zero, ponieważ musiałmain
zachować wyrównany stos, aby szczelina stosu nad ciągiem formatu mogła być świeżą pamięcią stosu, która nigdy nie została zmieniona (i prawdopodobnie jest zawsze zerowa, ponieważ jądro unika wycieków informacji poprzez zerowanie stron zamiast tego udostępniania stron przestrzeni użytkownika pełnych starych danych).Język dziecka , 0 bajtów
Nie przesłałem tego pierwotnie, ponieważ myślałem, że postdatował to pytanie. Myliłem się; język miał tłumacza utworzonego na czas. Jest to również prawdopodobnie najmniej oszukane rozwiązanie 0-bajtowe, jakie widziałem (biorąc pod uwagę, że program 0-bajtowy jest przeznaczony do robienia dokładnie tego, o co program prosi, a nie do oszukiwania w wyzwaniach golfowych).
Język dziecka jest określony, aby zignorować podany program i zrobić coś losowo. (Tłumacz, do którego link znajduje się na stronie Esolang, generuje losowy legalny program BF i uruchamia go.) Wydaje się, że idealnie pasuje do tego wyzwania.
źródło