Tugas Anda hari ini adalah menerapkan batas waktu untuk mendapatkan input, tugas yang menurut saya agak menyebalkan untuk dicapai dalam kebanyakan bahasa.
Anda akan membuat fungsi program yang meminta input dari pengguna. Segera setelah input persediaan pengguna, cetak pesan input received
dan akhiri eksekusi / kembali. Namun, jika pengguna menunggu lebih dari 10 detik untuk memberikan input, output pesan no input received
dan akhiri eksekusi / kembali.
Input harus dari stdin
(konsol) atau yang setara, bukan argumen fungsi atau program, namun output dapat berupa stdout
nilai pengembalian fungsi Anda, atau metode output lain yang diterima.
Anda dapat meminta input dalam jumlah berapa pun, dapat berupa satu karakter, satu baris, satu kata, atau metode apa pun yang terpendek dalam bahasa Anda selama menunggu setidaknya satu karakter.
Anda harus mengeluarkan segera setelah input diterima, tidak setelah 10 detik berlalu.
Setelah 10 detik berlalu, Anda harus mengakhiri, Anda tidak dapat terus menunggu input setelah no input received
dicetak.
Anda dapat berasumsi bahwa input tidak lulus dalam waktu antara 10 detik berlalu dan teks dicetak ke layar, karena ini adalah jendela yang sangat kecil. Anda juga dapat mengasumsikan bahwa bahasa Anda setara dengan sleep
konsisten, benar-benar sempurna.
Ini adalah kode-golf , byte terkecil menang!
sleep
fungsi bahasa Anda setara dengan sempurna 100% dari waktu.Jawaban:
bash, 38 byte
Ini menggunakan opsi
-t
(batas waktu) untuk bashread
, yang menyebabkannya gagal dan mengembalikan kode keluar yang tidak nol jika tidak ada input yang diberikan dalam jumlah detik yang ditentukan.sumber
Haskell,
9789 byteJika
timeout
waktu habis, ia kembaliNothing
danJust Char
(Char
, karena kami menggunakangetChar
) sebaliknya. Nilai pengembalian ini dikonversi ke"no "
atau""
oleh fungsimaybe "no " mempty
. Tambah"input received"
dan cetak.Sunting: @BMO menyarankan
maybe
dan menyimpan beberapa byte.sumber
g
denganlet
:let g Nothing="no ";g _=""
, maka fungsi panggilantimeout....
bekerja dengan baik bagi saya.g
denganmaybe"no "(pure"")
yang lebih pendek dan Anda bahkan bisa menyejajarkannya - menghemat 6 byte.mempty
bukannya(pure"")
lebih pendek.POSIX C99,
7163 byteTidak Disatukan:
Karena
poll
akan mengembalikan 1 jika berhasil, kami mengalikan hasilnya dengan 3 dan menggeser string yang sesuai. Kemudian, kami menggunakan fakta yangstruct pollfd
memiliki tata letak berikut:dan itu
STDIN_FILENO
adalah0
,POLLIN
adalah1
untuk menggantikanpfd
denganint pfd[] = {0,1}
, yang akhirnya kami membuat senyawa litteral (sebagaimana diizinkan oleh C99).sumber
poll.h
header bukan bagian dari standar bahasa C99.Applescript, 113
Applescript tidak benar-benar membaca dari STDIN. Semoga a
display dialog
diterima di sini:sumber
APL (Dyalog) ,
4140 byteIni adalah fungsi diam anonim yang membutuhkan argumen dummy untuk dijalankan .
'no input received'
string penuh↓⍨
drop sebanyak karakter dari depan sebagai jumlah yang dikembalikan oleh{
fungsi eksplisit anonim (⍵
menunjukkan argumen)⎕RTL←10
atur R esponse T ime L imit ke sepuluh detik3*⍨
naikkan angka itu (sepuluh) menjadi tiga (seribu berarti "semua")::
atas pengecualian tersebut (semua),0
kembali 0⋄
mencoba:⍞
dapatkan input3⊣
buang itu dan sebaliknya kembalikan 3}
akhir fungsi (perhatikan bahwa argumen⍵
tidak pernah disebutkan)sumber
Perl ,
7467 byteVersi lama
(Jalankan via perl -M5.10.1 ...)
sumber
\n
.-M5.10.1
. Anda bisa menggantinya-e
dengan-E
. (jika Anda perlu-M5.10.1
, Anda harus menambahkan penalti ke skor Anda)\n
apakah ada karenadie
perilaku: "Jika elemen terakhir dari LIST tidak berakhir pada baris baru, nomor baris skrip saat ini dan nomor baris input (jika ada) juga dicetak, dan baris baru diberikan." Jadi tanpa itu akan menampilkan "tidak ada input yang diterima di -e line 1.". Tapi tentu saja, itu bisa menjadi garis putus-putus dalam string. Selain itu, ruang antaradie
dansay
dan parameternya tidak diperlukan. Sama untuk final;
. Dan<>
cukup untuk membaca dari input standar.eval
membaca dari STDIN, Anda dapat menghindari kebutuhandie
pesan. Bahkan, kesalahan runtime bekerja sama dengan baik:$SIG{ALRM}=sub{&0};alarm 10;say'no 'x!eval'<>','input received'
.Perl 6 ,
7266 byteCobalah tanpa input.
Coba dengan input
Cobalah tanpa input.
Coba dengan input
sumber
start
dan{
?start
, jadi tidak..new
ituC #,
180171148131 byteDisimpan 17 byte berkat @VisualMelon.
Versi Lengkap / Terformat:
sumber
namespace
dan bukanusing
arahan?using
Thread.Join(int)
, (menghilangkanc
, kehilangan kawat gigi, dll.):var t=new System.Threading.Thread(()=>System.Console.ReadKey());t.Start();return(t.Join(10000)?"":"no ")+"input recieved";
(VB.NET tampaknya sudah melakukan ini)1e4
tetapi itu adalahdouble
dan saya perluint
jadi saya harus melakukan(int)1e4
:( Ide bagusTI-BASIC,
8477 byte-7 terima kasih kepada @ kamoroso94
Tunggu hingga nomor ditekan.
Saya mencoba mencari cara untuk bermain golf urutan
{72,73,74,82,83,84,92,93,94}
. Ini memakan banyak ruang.sumber
Repeat K or 10=checkTmr(T
lakukan.:4-3not(K:sub("NO INPUT RECEIVED",Ans,18-Ans
Shift
kunci di komputer. Juga, memperpendek 4 baris terakhir dengan metode Anda sebenarnya memberikan jumlah byte yang sama dengan saya. Saya suka metode Anda.or
dalam pernyataan berulang Anda, gunakan ini untuk -7 byte:abs(int(.1K)-8)≤1 and 1≥abs(3-10fPart(.1K
NodeJS,
105103101 byte-2 bytes berkat @apsillers
-2 bytes dengan pindah
console.log()
keexit()
Jalankan dengan menyimpan ke file dan menjalankannya dengan node atau menjalankannya langsung dari baris perintah dengan melakukan
node -e "<code>"
sumber
console.log()
panggilan ke parameterexit()
. Itu kurang dua, sekarang.JavaScript (ES6) + HTML,
86848279 + 11 =97959390 byteCobalah
Memerlukan penutupan
>
padainput
agar dapat bekerja di Cuplikan.sumber
10
daripada menulis1e4
?10
akan menjadi 10 milidetik, tantangan tantangan secara khusus mengatakan 10 detik , yaitu 10.000 milidetik, karenanya1e4
.10 != 1e4
karena saya bodohVB.Net - 174 byte
Versi COBOL akan datang besok ;-)
sumber
:
. Itu membutuhkan jumlah byte yang sama sebagai penghentian baris, sehingga hanya mengurangi keterbacaan tanpa meningkatkan skor golf.:
penggantian baris mungkin dilakukan sehingga panggilan treading dapat dinyatakan sebaris tanpa diulang - tetapi yang mengatakan saya tidak positif, bahasa utama saya adalah VBA yang tidak mendukung threading atau membaca dari konsol <strike> < / strike> jendela langsung pada saat definisi fungsi atau panggilan: PPergi, 149 byte
sumber
AHK ,
6765 byte2 byte disimpan oleh Blauhirn
AHK memiliki batas waktu bawaan untuk kotak input.
Saya mencoba untuk mendapatkan pintar dan menggunakan
!o
bukannyaErrorLevel
tetapi gagal jika input pengguna nilai falsey.Hampir setengah dari jawabannya hanya nama perintah dan teks tetap.
sumber
Timeout
hampir menjadi parameter terakhir:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]
s:=errorLevel?"no ":
Python3,
100898371 bytePertama kali mencoba bermain golf.
-4 untuk
any()
, -7 untuk memotong, terima kasih @ user2357112!-6, dapatkan
select()
daripty
bukanselect
.sumber
"no input received"
tali:"no input received"[3*bool(...):]
.any(...)
bukanbool(...[0])
.pty
Modul ini hanya tersedia pada platform linux, tapi aku hanya menggunakannya karena namanya pendek dan itu membuatselect
tersedia. Versi 2 mungkin bekerja lebih baik di Windows.PowerShell, 110 byte
sumber
Python 3, 158 byte
Saya mencoba menjalankan jawaban Python 3 Seth tetapi pada Windows itu melempar
ModuleNotFoundError: No module named 'termios'
, dan karena saya tidak dapat mengomentari jawabannya tentang hal itu, saya memutuskan untuk datang dengan solusi yang seharusnya menjadi platform independen.Ini pertama kalinya saya bermain golf, jadi saya yakin ini bisa ditingkatkan.
sumber
Tcl, 99 byte
sumber
SmileBASIC 3, 74 byte
"Terima input" dengan menunggu tombol apa saja ditekan (yang seharusnya dianggap sebagai input.)
sumber
Gores 2 / 3.x, 41 poin ( Penjelasan )
1: Ketika GF diklik
1: tanyakan [] dan tunggu
1 + 14 karakter: katakan [input diterima]
1: berhenti [semua v] (catatan: karena "semua" adalah pengaturan standarnya, saya menghitung blok sebagai 1)
1 + 2 digit: tunggu (10) detik
1 + 17 karakter: katakan [tidak ada input yang diterima]
1: berhenti [semua v]
sumber
> <> , 43 + 6 = 49 byte
Cobalah online!
+5 untuk
-t.08
bendera, yang menetapkan kutu ke 0,08 detik, dan +1 untuka
bendera, yang menghitung spasi dan melompati instruksi sebagai kutu.Program memeriksa input sekitar sekali setiap detik, dan keluar dari loop jika input terdeteksi. Jika input tidak diterima, maka keluar loop dari bawah, menambahkan
no
ke awal string. Yang pertama/
adalah untuk memastikan bahwa pemeriksaan terakhir untuk input tepat pada tanda 10 detik.Kemudian dibutuhkan sekitar 5-6 detik untuk mencetak string itu sendiri.
sumber
-at.08
untuk menyimpan satu byte.Java 1.4+, 284 bytes
Tidak Disatukan:
Tolong jangan menyarankan peningkatan Java khusus-Versi, ini adalah jawaban Java umum yang bekerja di semua Lingkungan Java yang saat ini stabil (1.4 dan lebih tinggi).
Sangat bertele-tele ... Menangkap diperlukan, tidak bisa membuangnya. Impor sistem berkurang seperti 5 byte ... Kelebihan beban juga bertele-tele, sehingga berakhir dengan kekacauan yang tampak buruk pada golf.
sumber
10000L
dan tidak10000
? Saya pikir ints untuk merindukan otomatis.Julia 0,6 , 78 byte
Lebih lama dari yang saya harapkan. Lihat komentar untuk tautan TIO "tidak ada masukan yang diterima".
Cobalah online!
sumber
SmileBASIC,
7473 byteMembawa 1 karakter input.
Dan solusi 39 byte yang mungkin tidak valid (sebenarnya tidak menerima input teks, hanya memiliki OKtombol yang dapat Anda tekan)
sumber