Tantangan
Tulis fungsi yang mengambil satu parameter: integer t
. Fungsi Anda harus menghentikan program Anda selama beberapa t
detik sebelum melanjutkan, mirip dengan time.sleep(t)
Python dan WAIT t
di BBC BASIC.
Anda tidak boleh menggunakan fungsi menunggu bawaan atau fungsi bawaan untuk menjalankan kode setelah waktu tertentu, dan program Anda harus melanjutkan setelah t
detik.
Untuk menguji fungsi Anda, ada toleransi 0,1 detik lebih atau kurang dari yang diberikan t
pada mesin Anda sendiri: varians antar komputer baik-baik saja.
Jika jawaban Anda ditantang oleh siapa pun, Anda harus memberikan bukti fotografis (screenshotted) bahwa fungsi Anda berfungsi dengan benar t=1
, t=5
dan t=25
. Anda juga dapat memberikan rincian komputer Anda sehingga orang dapat mencoba untuk mereplikasi di komputer mereka sendiri.
Program Anda harus dan akan dijalankan pada komputer yang kecepatan clock-nya 1,6 GHz atau lebih tinggi.
Kemenangan
Program terpendek menang.
Karunia
Hadiah akan keluar ke program terpendek yang menghentikan program tanpa menggunakan loop memeriksa berapa banyak waktu yang telah berlalu. Jika Anda sedang dalam menjalankan hadiah ini, tambahkan catatan kaki yang mengatakan bahwa jawaban Anda adalah untuk hadiah itu.
Papan peringkat
/* Configuration */
var QUESTION_ID = 55293; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 30525;
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "http://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "http://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var patt = new RegExp(/[Bb]ounty/);
var res = patt.test(body);
var bountyyn = "no";
if (res) {
bountyyn = "yes";
}
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
bounty: bountyyn
});
});
valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link)
.replace("{{BOUNTY}}", a.bounty);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
if (/<a/.test(lang)) lang = jQuery(lang).text();
languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body { text-align: left !important}
#answer-list {
padding: 10px;
width: 400px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
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="answer-list">
<h2>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr><td></td><td>Author</td><td>Language</td><td>Size</td><td>Bounty?</td></tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<div id="language-list">
<h2>Winners 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>
<table style="display: none">
<tbody id="answer-template">
<tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td>{{BOUNTY}}</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>
BBC BASIC
contohnya merujuk pada acara tv Sherlock atau apakah saya terlalu banyak membaca tentang ini?Jawaban:
kode mesin x86_64, 10 byte
Hexdump kode:
Kode sumber (dapat dikumpulkan oleh
ml64
Visual Studio):Melakukan loop kosong, mulai dari nilai yang ditentukan hingga 0. Saya memilih pengganda 945421514 secara empiris dengan coba-coba, hingga program pengujian saya mengeluarkan hasil yang memuaskan.
Program uji (tunggu 10 kali untuk masing-masing durasi 1, 5 dan 25 detik):
Hasil:
Saya menjalankan program ini di komputer Windows yang tidak ada hubungannya. Jika menjalankan beberapa aplikasi, waktu tunggu lebih tidak menentu.
Kecepatan CPU adalah 3,9 GHz. Tampaknya kode ini hampir tidak cukup baik untuk teknologi PC saat ini - jika frekuensi clock sekitar 8,8 GHz, pengali tidak akan cocok dengan int 32-bit yang ditandatangani.
NB Karena jawaban ini tidak memeriksa berapa lama waktu telah berlalu, itu adalah kandidat untuk hadiah.
sumber
Bash,
2925242319 byteTes akurasi (
time
) di mana$1
= 1 detik:Terima kasih Dennis karena telah memangkas hitungan byte menjadi 19 dari 23!
EDIT : Saya telah mengubah IP untuk menghindari
ping
pada Linux pinging 0.0.0.0, yang merupakan perangkat loopback.Bagaimana ini bekerja?
ping
memiliki batas waktu default 1 detik, jadi, saat menghubungi alamat IP yang tidak ada, ping tidak dapat dilanjutkan sampai batas waktu berlalu, atau mendapat balasan dari IP.-t
memberitahuping
untuk mencoba$1
beberapa kali pada alamat IP palsu ini, memaksaping
untuk mengambil$1
detik untuk menyelesaikan ping.Ini memenuhi syarat untuk hadiah! Tidak ada loop!
sumber
w()(ping -t$1 0.0)
(Kita harus punyaping
s yang berbeda ; milikku membutuhkan-w$1
dan mendapat balasan dari localhost.)/dev/lo
w 10
, saya mulai10.02 sec real
menggunakantime
.w()(ping -w$1 1.2)
bekerja seperti pesona.Matlab, 33 byte
Atau Anda juga dapat menggunakan ini di Octave: coba online
Matlab, 31 byte
Seperti yang disarankan oleh @ flawr , ini dapat dilakukan dengan fungsi anonim (harus diberi nama untuk menggunakannya):
Contoh:
sumber
@(t)eval('tic;while toc<t,end')
eval
untuk mengemas beberapa pernyataan dalam fungsi anonim. Terima kasih!bsxfun
.t
variabel di dalam eval.Java,
6362 byteTidak ada yang mengejutkan - hanya meraih jumlah nanodetik sejak 1/1/1970 beberapa kali dan memeriksa apakah yang kedua telah berlalu.
Disimpan 1 byte berkat Ypnypn dan aditsu.
sumber
for(long a=System.nanoTime();System.nanoTime()-a<t*1E9;);
t->
?Batch, 27 Bytes
Trik batch populer, karena batch tidak memiliki fungsi tidur.
Tidak ada loop, jadi hadiah memenuhi syarat
sumber
set/ac=%1+1
menghemat 2 byte.Commodore 64 BASIC, 19
16byteDengan sebuah panggilan
N=<number-of-secods>:GOSUB1000
.Namun, saya tidak dapat memberikan akurasi yang cukup. Karena C64 memiliki sekitar 1 MHz kecepatan CPU, saya ingat itu cukup baik untuk membuat kosong
FOR
-NEXT
lingkaran 1000 kali sehingga itu sekitar 1 detik.Bahkan ada dua versi utama dari mesin: PAL 0,985 MHz dan NTSC 1,023 MHz (semua data dari C64 Wikipedia Page ). Karena saya memiliki versi NTSC, itu diperlukan untuk menjalankan loop sekitar 930 kali.
Tes dengan program berikut (
N
detik, disediakan oleh pengguna diINPUT
):di mana
TI$
adalah variabel sistem yang berisi string (hhmmss
format) dengan waktu berlalu dari reset terakhir (akurasi 1 detik, namun juga tergantung pada kecepatan CPU, jadi ini tidak cukup relevan, karena itu jam yang sama).Cuplikan layar dibuat dengan emulator C64 online http://codeazur.com.br/stuff/fc64_final/ .
Program ini (
1000
hanya baris ) menempati1619 byte dalam memori, sebagaimana diuji denganPRINT FRE(0)+65535
baik sebelum mengetik kode (38908 byte) dan setelah (3889338889 byte).PRINT FRE(0)
mengembalikan memori bebas untuk program BASIC (ini adalah nilai negatif dan konstan65535
harus ditambahkan, tetapi sebenarnya tidak masalah).Karena program ini tidak menguji waktu yang berlalu dalam satu lingkaran, itu memenuhi syarat untuk hadiah.
sumber
TI$
variabel akurat dan itu sekitar 1 detik per ca. Perbedaan 2 jam dengan jam referensi (di luar C64), jadi akurasinya cukup. Apa yang saya tidak yakin adalah nilainya950
, apakah itu nilai lain <1000 (yang saya yakin), itu masih jumlah byte yang samaJ
variabel entah bagaimana harus menjadi bagian dari kode nyata, bukan bagian dari program pengujian - jadi itu akan menunggu selama N detik, bukan hanya 1 detik. Saya tidak tahu bagaimana mengintegrasikannya ke dalam sintaksis BASIC.1000 FOR I=1 TO N:FOR I=1 TO 950:NEXT I:NEXTJ:RETURN
panggilan misalnya.200 N=5:GOSUB 1000
. Saya juga telah memperhatikan OP membutuhkan fungsi . Saya akan mencoba memperbaikinyaGOSUB
-RETURN
pernyataan, karena tidak ada fungsi di BASICDEF FN
suka di BBC BASIC?JavaScript ES6,
504540 byteini menggunakan fungsi self-executing, tidak yakin mengapa
+new Date
tidak berfungsi.Pemakaian
Saya sudah menguji ini dengan Safari Nightly tetapi juga akan berfungsi di Firefox. Diuji dengan:
Anda dapat menjalankannya dengan mengelilinginya dengan tanda kurung:
Atau dengan menamainya:
Penjelasan
Inilah logika utama di balik program:
Versi yang saya gunakan menggunakan logika yang sama:
sumber
CJam, 15
Ini adalah blok yang dapat dieksekusi atau disimpan ke dalam variabel (sehingga menjadi fungsi bernama). Dennis dan Mr Consensus setuju bahwa menghitung hanya blok saja yang dapat diterima :)
Penjelasan:
Cobalah online
sumber
JavaScript,
68 54 5142Saya pikir tidak diperlukan tangkapan layar. Tapi saya curiga Anda bisa bermain golf ini lebih ...
Versi baru: Saya sekarang akhirnya berhasil menghindari
new
dan menggunakanDate
dua kali:Versi yang lebih lama:
sumber
PHP,
1711778479656462 bytePenggunaan:
Panggil fungsi seperti ini:
php -d error_reporting=0 -r "require 'script.php'; a(5);echo 'Hello, World!';"
Di mana 5 adalah waktu dalam detik, program harus menunggu sebelum menggema "Halo, Dunia!".
Penjelasan:
Pada awalnya fungsi mendapatkan waktu saat ini dalam milidetik. Kemudian fungsi melakukan loop sampai Waktu saat ini lebih kecil dari waktu pertama + input. Setelah itu "Halo Dunia!" digaungkan.
Log:
Disimpan 113 byte berkat Voitcus
Disimpan 2 byte berkat aksioma
sumber
$get_as_float
parameter. Hapus juga$t
,$s
- Anda tidak membutuhkannya (lihat kode saya)echo 1e6;
bekerja. Tapi ya - mendapatkan float adalah jumlah detik, jadi$e=microtime(1)+$i;
itu sudah cukupJulia,
3320 byteHanya berfungsi di Julia v0.4 karena perubahan fungsi tanda tangan dari
watch_file
. Menentukan fungsi anonim dengan satu parametert
yang (ab) menggunakan parameter batas waktu dalamwatch_file
fungsi.Ini adalah kandidat untuk hadiah!
Demonstrasi menggunakan Julia REPL:
Jawaban sebelumnya (33 byte), juga berfungsi di Julia stable
sumber
R, 48 byte
Demonstrasi:
sumber
f=
dalam hitungan byte, potongan fungsi baik-baik saja.PHP, 39 byte
(Perhatikan bahwa saya benar-benar bisa mendapatkan ini lebih pendek jika program penuh diperlukan dengan mengambil keuntungan dari argumen yang diteruskan pada baris perintah. Turun ke 35 )
Program yang digunakan untuk pengujian:
Hasil:
Meskipun saya memenuhi syarat untuk mendapatkan hadiah itu, saya sulit dalam menjalankannya dengan beberapa entri lainnya!
sumber
Windows CMD, 22 byte
Ini tidak menggunakan loop (label dan goto) sehingga ini memenuhi syarat untuk hadiah
Ia mengirim
t
ping ke 1.0.0.1 (tidak valid) dan menunggu respons untuk 1000 mssumber
JavaScript ES6, 40 byte
Diuji dengan yang berikut:
sumber
elapsed(STOP, t)
? Apa itu STOP dan berlalu?elapsed
mengukur waktu yang dibutuhkan argumen pertama untuk dijalankan, dalam hal iniSTOP
,, yang pada gilirannya hanyalah cuplikan kode pertama. Arg kedua yang telah berlalu adalah arg yang diteruskan keSTOP
.TI-BASIC (84 + SE), 21 byte
Metode input:
T:prgmT
. Ini setara dengan fungsi terdekat dalam TI-BASIC. Program:Semua akurasi diperoleh melalui coba-coba; mengatur waktu dengan stopwatch berfungsi untuk semua kasus uji yang diberikan dalam sepersepuluh detik.
Informasi perangkat:
W00T berhak atas hadiah!
sumber
For(
putaran kalkulator Anda tergantung pada berapa banyak variabel huruf yang ada? Lebih banyak variabel menyumbat PPN dan dapat memakan waktu hingga 20% dari waktu Anda. Variabel sistem (misalnya n ,Xmin
) kebal.Python, 57 byte
Fungsi panggilan
y()
sumber
PureBasic, 92 byte
Itu yang terpendek yang bisa saya pikirkan. Saya menduga ini akan menjadi yang terpanjang di sini juga ...
Untuk menguji:
sumber
PowerShell, 75 byte
Panggilan prosedur deskriptif yang panjang. Yay untuk kejelasan dalam bahasa. :)
Disebut dalam suatu program dengan sesuatu seperti
Atau, jika kita diizinkan untuk memanggil program eksternal, kita bisa turun ke 59 Bytes dengan yang berikut:
Ini akan dipanggil dalam program sebagai berikut (menganggap di atas untuk disimpan sebagai "wait-function.ps1" dan disimpan dalam folder yang sama):
Apa yang kita simpan secara tertulis fungsi / program lebih dari musnah oleh kelebihan yang dibutuhkan untuk benar-benar menjalankannya. Le menghela nafas.
sumber
Python, 66 byte
Catatan, implementasi saya tidak memanggil fungsi waktu bawaan, atau menggunakan fitur penjadwalan.
Dan ya, itu memenuhi syarat untuk hadiah.
sumber
Hassium , 55 Bytes
Jalankan dan lihat diperluas: http://HassiumLang.com/Hassium/index.php?code=9f4e2bdb292b14b150fba63677a11a79
sumber
Pyth, 19 byte
Masuk terlambat tetapi setelah menemukan
.d0
di dokumen tadi malam saya memutuskan untuk mencobanya.Menentukan fungsi yang loop hingga waktu yang berlalu
N
detik.Coba di sini .
sumber
DCNJ+.dZN#Ig.dZJB))
, yang juga 19 byte.RProgN 2 , 13 byte
Dijelaskan
Bounty secara khusus mengatakan "tanpa menggunakan loop memeriksa berapa banyak waktu yang telah berlalu ", yang ini tidak dilakukan. Ini menetapkan waktu target, dan terus memeriksa apakah itu melewati waktu target itu, sehingga memenuhi syarat untuk hadiah.
Cobalah online!
sumber
Tcl , 53 byte
Cobalah online!
Dijelaskan
Perintah
clock milliseconds
dapat dikurangi menjadiclock mil
, dengan lolos braket 1, itu akan ditafsirkan pada setiap loop, dan tanpa satu kali saja. Karena mengukur milidetik, kita perlu mengalikan 1000 atau 1e3 yang menghemat 1 Byte.sumber
C # (Visual C # Interactive Compiler) + /u:System.Threading, 36 byte
Cobalah online!
Membuat semaphore tanpa kapasitas dan mencoba mendapatkannya selama jumlah detik yang ditentukan.
Saya sadar saya sedang "menunggu" sesuatu di sini. Bagi saya ini sepertinya solusi ping / timeout yang bertentangan
Thread.Sleep
. Kode mencoba mendapatkan sumber daya yang tidak bisa didapat dan berhenti mencoba setelah batas.===
Di bawah ini adalah variasi yang memulai a
Task
dengan infinite loop, kemudian menunggu sampai selesai dengan batas waktu. Semua ruang nama yang diperlukan disertakan secara default, tetapi solusinya beberapa byte lebih lama daripada yang di atas.C # (Visual C # Interactive Compiler) , 40 byte
Cobalah online!
sumber
05AB1E , 22 byte
Cobalah online.
CATATAN: Tergantung pada berapa banyak mikrodetik dalam detik saat ini telah berlalu, toleransi mungkin sedikit lebih besar dari 0,1 detik. Tetapi karena hampir separuh jawaban memiliki masalah yang sama, saya pikir itu diperbolehkan.
Penjelasan:
05AB1E tidak memiliki bawaan untuk saat ini. Namun memiliki builtin untuk tahun / bulan / hari / jam / menit / detik / mikrodetik saat ini sebagai builtin yang terpisah. Karena hanya menggunakan detik yang berpotensi membungkus sekitar 59 hingga 0 menyebabkan masalah, saya memerlukan menit dan detik, membuat kode lebih lama daripada kebanyakan jawaban dalam bahasa non-codegolfing sayangnya.
sumber
SmileBASIC, 20 byte
Membuka kotak dialog yang menutup secara otomatis setelah
T
detik. Saya tidak yakin apakah ini dianggap sebagai "fungsi menunggu yang dibangun", tapi saya pikir ini sama validnya dengan menggunakanping
.Program 37 byte alternatif yang pasti tidak curang:
Menyebabkan warna layar pudar berubah menjadi 0 (alfa = 0, merah = 0, hijau = 0, biru = 0) (tidak ada efek) secara bertahap selama beberapa
T
detik, kemudian menunggu animasi itu selesai.sumber