รออินพุตอย่างอดทน


39

งานของคุณในวันนี้คือการใช้การ จำกัด เวลาสำหรับการป้อนข้อมูลงานที่ฉันพบค่อนข้างน่ารำคาญที่จะประสบความสำเร็จในภาษาส่วนใหญ่

คุณจะสร้างฟังก์ชั่นโปรแกรมที่แจ้งให้ผู้ใช้ป้อนข้อมูล ทันทีหลังจากผู้ใช้ป้อนข้อมูลให้พิมพ์ข้อความinput receivedและสิ้นสุดการดำเนินการ / ส่งคืน อย่างไรก็ตามหากผู้ใช้รอนานกว่า 10 วินาทีเพื่อให้อินพุตเอาต์พุตข้อความno input receivedและสิ้นสุดการเรียกใช้งาน / ส่งคืน

อินพุตต้องมาจากstdin(คอนโซล) หรือเทียบเท่าไม่ใช่ฟังก์ชันหรืออาร์กิวเมนต์ของโปรแกรมอย่างไรก็ตามเอาต์พุตสามารถเป็นได้ถึงstdoutค่าส่งคืนของฟังก์ชันหรือวิธีเอาต์พุตอื่นที่ยอมรับ

คุณอาจถามจำนวนการป้อนข้อมูลใด ๆ ก็ได้ซึ่งอาจเป็นอักขระตัวเดียวบรรทัดคำหรือวิธีการใดก็ตามที่สั้นที่สุดในภาษาของคุณตราบใดที่ภาษานั้นรออย่างน้อยหนึ่งตัว

คุณต้องส่งออกทันทีที่ได้รับอินพุตไม่ใช่หลังจากผ่านไป 10 วินาที

หลังจากผ่านไป 10 วินาทีคุณจะต้องจบคุณจะไม่สามารถรออินพุตno input receivedได้หลังจากพิมพ์ออกมาแล้ว

คุณอาจสมมติว่าอินพุตไม่ถูกส่งผ่านในช่วงเวลา 10 วินาทีที่ผ่านไปและข้อความที่พิมพ์ไปยังหน้าจอเนื่องจากหน้าต่างนี้มีขนาดเล็กมาก คุณอาจจะคิดว่าภาษาของคุณsleepนั้นมีความสมบูรณ์แบบเสมอกัน

นี่คือไบต์ที่น้อยที่สุดชนะ!


6
+1 เพื่อสัมผัสที่ดีเพื่อป้องกันภาษากอล์ฟไม่ให้ใช้พจนานุกรมของพวกเขา โอ้และความท้าทายที่ยิ่งใหญ่เช่นกัน
อดัม

1
@ Adámยกเว้นว่าภาษาของคุณมีการอ่านในตัวโดยหมดเวลาฉันคิดว่าวิธีเดียวที่ดีในการทำเช่นนี้คือเวทมนตร์ OS / Thread ซึ่งภาษากอล์ฟส่วนใหญ่ไม่สามารถทำได้
Pavel

ตอนนี้ฉันต้องเขียนโปรแกรมใหม่ ก็เกือบจะพร้อมที่จะโพสต์ ... ;-)
อดัม

1
@TheLethalCoder คุณสามารถใช้sleepฟังก์ชันที่เทียบเท่ากับภาษาของคุณได้อย่างสมบูรณ์แบบ 100% ของเวลา
Pavel

1
@ Lembik คุณไปได้อย่างไรคำตอบของ Python
Pavel

คำตอบ:


24

ทุบตี, 38 ไบต์

read -t10||a=no;echo $a input received

ใช้-tตัวเลือก (หมดเวลา) เพื่อทุบตีreadซึ่งทำให้มันล้มเหลวและกลับรหัสทางออกที่ไม่ใช่ศูนย์ถ้าไม่มีการป้อนข้อมูลจะได้รับในจำนวนวินาทีที่ระบุ


6
มันควรจะพูดว่า "(ไม่) การป้อนข้อมูล REC เช่น ved" ซึ่งสำคัญขัดขวางภาษากอล์ฟด้วยพจนานุกรม
อดัม

8
@ Adámจริงๆแล้วมันเป็นคำที่สะกดผิด
Pavel

7
@Phoenix Noooo!
Adám

1
ทำไม a = ไม่แล้ว $ a มีจุดประสงค์หรือไม่? แก้ไขฉันได้รับฉันไม่ได้อ่านคำถามอย่างถูกต้อง
เฟลิกซ์กัว

12

Haskell, 97 89 ไบต์

import System.Timeout
timeout(10^7)getChar>>=putStr.(++"input received").maybe"no "mempty

หากtimeoutหมดเวลาให้ส่งคืนNothingและJust Char( Charเพราะเราใช้getChar) เป็นอย่างอื่น ค่าตอบแทนนี้จะถูกแปลงเป็น"no "หรือโดยฟังก์ชั่น"" maybe "no " memptyผนวก"input received"และพิมพ์

แก้ไข: @BMO แนะนำmaybeและบันทึกบางส่วน


ดูเหมือนว่าจะทำงานไม่ถูกต้องใน ghci
maple_shaft

@maple_shaft: ภายใน ghci คุณต้องผูกgกับlet: let g Nothing="no ";g _=""จากนั้นการเรียกฟังก์ชั่นใช้timeout....งานได้ดีสำหรับฉัน
nimi

1
คุณสามารถแทนที่gโดยmaybe"no "(pure"")ที่สั้นและคุณยังสามารถ inline มัน - คุณประหยัด 6 ไบต์
ბიმო

@BMO: ดีมาก! memptyแทนที่จะ(pure"")สั้นกว่า
nimi

เยี่ยมมากนั่นฉลาดจริงๆ!
ბიმო

11

POSIX C99, 71 63 ไบต์

main(){puts("no input received"+3*poll((int[]){0,1},1,10000));}

Ungolfed:

#include <unistd.h>
#include <poll.h>
#include <stdio.h>
int main()
{
  struct pollfd pfd; 
  pfd.fd = STDIN_FILENO; 
  pfd.events = POLLIN;  
  puts("no input received"+3*poll(&pfd,1,10000));
}

เนื่องจากpollจะส่งคืน 1 ในกรณีที่ประสบความสำเร็จเราจะคูณผลลัพธ์ด้วย 3 และเปลี่ยนสตริงตาม จากนั้นเราใช้ความจริงที่struct pollfdมีรูปแบบต่อไปนี้:

     struct pollfd {
     int    fd;       /* file descriptor */
     short  events;   /* events to look for */
     short  revents;  /* events returned */
 };

และนั่นSTDIN_FILENOคือ0, POLLINเป็น1ที่จะแทนที่pfdด้วยint pfd[] = {0,1}ซึ่งในที่สุดเราก็ทำให้ litteral สารประกอบ (ตามที่ได้รับอนุญาตจาก C99)


3
คุณต้องระบุว่าเป้าหมายนี้เป็น POSIX เนื่องจากpoll.hส่วนหัวไม่ได้เป็นส่วนหนึ่งของมาตรฐานภาษา C99
โคดี้เกรย์


6

APL (Dyalog) , 41 40 ไบต์

'no input received'↓⍨{3*⍨⎕RTL10::03⊣⍞}

นี่คือฟังก์ชั่นเงียบโดยไม่ระบุชื่อซึ่งต้องการอาร์กิวเมนต์ดัมมี่เพื่อให้ทำงานได้

'no input received' สตริงเต็ม

↓⍨ วางอักขระจำนวนมากจากด้านหน้าของตัวเลขที่ส่งคืนโดย

{ ฟังก์ชั่นที่ไม่ระบุชื่อชัดเจน ( หมายถึงการโต้แย้ง)

⎕RTL←10 ตั้งค่าR esponse T ime Lเป็นสิบวินาที

3*⍨ เพิ่มจำนวนที่ (สิบ) ถึงอำนาจของสาม (หนึ่งพันหมายถึง "ทั้งหมด")

:: ตามข้อยกเว้นเหล่านั้น (ทั้งหมด)

  0 กลับ 0

 ลอง:

   รับอินพุต

  3⊣ ยกเลิกสิ่งนั้นและส่งคืน 3 แทน

}สิ้นสุดฟังก์ชั่น (โปรดทราบว่าข้อโต้แย้งไม่เคยพูดถึง)


6

Perl , 74 67 ไบต์

$m="input received";$SIG{ALRM}=sub{die"no $m\n"};alarm 10;<>;say$m

เวอร์ชั่นเก่า

$m="input received";$SIG{ALRM}=sub{die "no $m\n"};alarm 10;<stdin>;say $m;

(เรียกใช้ผ่าน perl -M5.10.1 ... )


ไม่จำเป็นต้องขึ้นบรรทัดใหม่ในส่วนท้ายเพื่อให้คุณสามารถตัด\nได้
Pavel

3
ยินดีต้อนรับสู่ PPCG!
Pavel

-M5.10.1ที่จริงคุณไม่จำเป็นต้อง คุณก็สามารถทดแทนด้วย-e -E(ถ้าคุณต้องการ-M5.10.1คุณจะต้องเพิ่มบทลงโทษให้คะแนนของคุณ)
แบรดกิลเบิร์ต b2gills

@Phoenix \nนั่นเป็นเพราะdieพฤติกรรมของ:“ ถ้าองค์ประกอบสุดท้ายของรายการไม่ได้ขึ้นบรรทัดใหม่หมายเลขบรรทัดสคริปต์ปัจจุบันและหมายเลขบรรทัดอินพุต (ถ้ามี) จะถูกพิมพ์ด้วยและมีการขึ้นบรรทัดใหม่” ดังนั้นหากไม่มีจะแสดงข้อความว่า "ไม่ได้รับอินพุตที่บรรทัด -e 1" แต่แน่นอนมันอาจเป็นตัวแบ่งบรรทัดตามตัวอักษรในสตริง นอกจากนั้นช่องว่างระหว่างdieและsayและพารามิเตอร์ของพวกเขาไม่จำเป็นต้องใช้ ;เดียวกันสุดท้าย และ<>ก็เพียงพอที่จะอ่านจากอินพุตมาตรฐาน
จัดการ

1
ถ้าคุณevalอ่านจาก STDIN คุณสามารถหลีกเลี่ยงการต้องการdieข้อความ ในความเป็นจริงข้อผิดพลาด runtime $SIG{ALRM}=sub{&0};alarm 10;say'no 'x!eval'<>','input received'งานก็เช่นกัน:
primo

6

Perl 6 ,  72  66 ไบต์

my $s='input received';Promise.in(10).then:{say "no $s";exit};get;say $s

ลองใช้โดยไม่มีอินพุต
ลองใช้กับอินพุต

my$s='input received';start {sleep 10;say "no $s";exit};get;say $s

ลองใช้โดยไม่มีอินพุต
ลองใช้กับอินพุต

my $s = 'input received'; # base message

start {         # create a Promise with a code block
                # that is run in parallel
  sleep 10;     # delay for 10 seconds
  say "no $s";  # say 「no input received」
  exit          # exit from the process
}

get;            # get a line from the input
say $s          # say 「input received」

1
"ess ของฉันได้รับการป้อนข้อมูล - สัญญาใน 10 จากนั้นพูดว่า 'ess' และออกหรือรับว่า 'ess'"
แมว

คุณสามารถลบช่องว่างระหว่างstartและ{?
Pavel

@Phoenix นั่นจะถูกแยกวิเคราะห์เป็นการเชื่อมโยงดัชนีกับตัวแปร sigilless ที่มีชื่อstartดังนั้นไม่
Brad Gilbert b2gills

ลิงก์ TIO ของคุณไม่ทำงานอีกต่อไป
Pavel

@Pavel, คงที่, เพียงแค่ต้องทำให้ชั้นทดสอบจำลองเป็นประเภทย่อยของ IO :: จัดการและโทรหา.newมัน
Brad Gilbert b2gills

5

C #, 180 171 148 131 ไบต์

()=>{var t=new System.Threading.Thread(()=>{System.Console.ReadKey();});t.Start();return(t.Join(10000)?"":"no ")+"input recieved";}

บันทึกแล้ว 17 ไบต์ขอบคุณ @VisualMelon

เวอร์ชันเต็ม / ฟอร์แมต:

class P
{
    static void Main()
    {
        System.Func<string> f = () =>
        {
            var t = new System.Threading.Thread(() =>
            {
                System.Console.ReadKey();
            });
            t.Start();

            return (t.Join(10000) ? "" : "no ") + "input recieved";
        };

        System.Console.WriteLine(f());
        System.Console.ReadLine();
    }
}

ทำไมnamespaceและไม่ใช่usingคำสั่ง?
Pavel

@Phoenix พวกเขาจะต้องมี namespace อยู่แล้วดังนั้นพวกเขาจึงบันทึกไบต์ทั้งหมดของusing
LiefdeWen

ทำไมคุณถึงบันทึกส่วนที่สำคัญไว้ในรูปแบบ Action และดำเนินการในภายหลัง ฉันไม่เห็นคำถามที่ระบุสิ่งนี้จริงๆ
Snowfire

1
สามารถบันทึกค่อนข้างน้อยโดยใช้ค่าส่งคืนจากThread.Join(int), (กำจัดc, สูญเสียเครื่องหมายปีกกา, ฯลฯ ): var t=new System.Threading.Thread(()=>System.Console.ReadKey());t.Start();return(t.Join(10000)?"":"no ")+"input recieved";(VB.NET ดูเหมือนว่าจะทำเช่นนี้)
VisualMelon

1
@TaylorScott ฉันสามารถทำได้1e4แต่นั่นคือdoubleและฉันต้องการintดังนั้นฉันต้องทำ(int)1e4:( ความคิดที่ดีแม้ว่า
TheLethalCoder

5

TI-BASIC, 84 77 ไบต์

-7 ขอบคุณ@ kamoroso94

:startTmr→T         //Start Timer, 5 bytes
:Repeat checkTmr(T)=10 or abs(int(.1K)-8)≤1 and 1≥abs(3-10fPart(.1K  //Loop until the timer is 10 seconds or a number key is pressed, 32 bytes
:getKey→K           //get key code, 4 bytes
:End                //end loop, 2 bytes
:"NO INPUT RECEIVED //Push string "NO INPUT RECEIVED" to Ans, 18 bytes
:If K               //If input was received, 3 bytes
:Disp sub(Ans,3,15  //Diplay "INPUT RECEIVED", 9 bytes
:If not(K           //If no input, 3 bytes
:Ans                //Display "NO INPUT RECEIVED", 1 byte

รอจนกระทั่งกดหมายเลข

{72,73,74,82,83,84,92,93,94}ฉันพยายามที่จะคิดออกว่าจะกอล์ฟลำดับ มันใช้พื้นที่มาก


หากคุณต้องการรอเพียงคีย์ใด ๆ ก็Repeat K or 10=checkTmr(Tจะทำ
bb94

นอกจากนี้บรรทัดสุดท้าย 4 บรรทัดสามารถย่อให้เหลือ:4-3not(K:sub("NO INPUT RECEIVED",Ans,18-Ans
bb94

1
@ bb94 ฉันไม่ต้องการรอกุญแจเลยเพราะทุกคนไม่ได้ใส่อักขระจริงๆ มันจะเหมือนกับรอShiftกุญแจบนคอมพิวเตอร์ นอกจากนี้การตัดทอน 4 บรรทัดสุดท้ายด้วยวิธีการของคุณจะให้จำนวนไบต์เท่ากับของฉัน ฉันชอบวิธีการของคุณ
Scott Milner

คุณสามารถตรวจสอบรหัสใด ๆ ที่ไม่ใช่ 21 หรือ 31 ได้
bb94

หลังจากorใช้คำสั่งซ้ำให้ใช้แทน -7 ไบต์:abs(int(.1K)-8)≤1 and 1≥abs(3-10fPart(.1K
kamoroso94

4

NodeJS, 105 103 101 ไบต์

-2 bytes ต้องขอบคุณ @apsillers
-2 bytes โดยเลื่อนconsole.log()เข้าไปexit()

with(process)stdin.on('data',r=x=>exit(console.log((x?'':'no ')+'input received'))),setTimeout(r,1e4)

รันโดยการบันทึกเป็นไฟล์และรันกับโหนดหรือรันโดยตรงจากบรรทัดคำสั่งโดยทำ node -e "<code>"


@apsillers Yup จับได้ดี
Justin Mariner

@apsillers ผมกำลังจะแก้ไขอีกครั้งเพื่อย้ายจริงโทรเข้าพารามิเตอร์ของconsole.log() exit()นั่นสองน้อยกว่าตอนนี้
Justin Mariner

4

JavaScript (ES6) + HTML, 86 84 82 79 + 11 = 97 95 93 90 ไบต์

setTimeout(oninput=_=>i.remove(alert(`${i.value?"":"no "}input received`)),1e4)
<input id=i
  • บันทึก 2 ไบต์ขอบคุณapsillers ที่ชี้ให้เห็นว่าฉันโง่!

ลองมัน

ต้องปิด>ในinputเพื่อที่จะทำงานในส่วนย่อย

setTimeout(oninput=_=>i.remove(alert(`${i.value?"":"no "}input received`)),1e4)
<input id=i>


1e5 คือ 100,000 หรือ 100 วินาที 1e4 คือ 10 วินาที
PunPun1000

อ๊ะ! เห็นดีขอบคุณ @ PunPun1000
Shaggy

การเขียน10แทนที่จะสั้นกว่านี้1e4หรือไม่
musicman523

@ musicman523, 10จะเป็น 10 มิลลิวินาทีท้าทายความท้าทายโดยเฉพาะกล่าวว่า 10 วินาทีซึ่งเป็น 10000 1e4มิลลิวินาทีด้วยเหตุนี้
Shaggy

ไม่ดีของฉันลืมว่า10 != 1e4เพราะฉันเป็นคนโง่
musicman523

3

VB.Net - 174 ไบต์

Module M
Sub Main()
Dim t=New Threading.Thread(Sub()Console.Read()):t.Start():Console.WriteLine(If(t.Join(10000),"","no ") & "input received"):End
End Sub
End Module

รุ่นภาษาโคบอลจะมาในวันพรุ่งนี้ ;-)


3
ฉันไม่แน่ใจว่าข้อดีของการรวมสายกับ:อะไร ที่ใช้จำนวนไบต์เท่ากับตัวแบ่งบรรทัดดังนั้นจึงลดความสามารถในการอ่านโดยไม่ต้องปรับปรุงคะแนนกอล์ฟ
โคดี้เกรย์

@CodyGray ฉันเชื่อว่าการ:ทดแทนตัวแบ่งบรรทัดอาจเป็นไปได้ว่าการเรียก treading อาจถูกประกาศแบบอินไลน์โดยไม่ต้องทำซ้ำ - แต่นั่นบอกว่าฉันไม่แน่ใจภาษาหลักของฉันคือ VBA ซึ่งไม่สนับสนุนเธรดหรือการอ่านจากคอนโซล <strike> < / strike> หน้าต่างทันทีที่พิจารณาจากเวลาของการกำหนดฟังก์ชั่นหรือการโทร: P
Taylor Scott

3

ไป 149 ไบต์

package main
import(
."fmt"
."time"
."os"
)
func main(){
o:="input received"
go func(){Sleep(1e10)
Print("no "+o)
Exit(0)}()
i:=""
Scan(&i)
Print(o)}

3

AHK , 67 65 ไบต์

บันทึก 2 ไบต์โดยBlauhirn

InputBox,o,,,,,,,,,10
s:=ErrorLevel?"no ":
Send %s%input received

AHK มีไทม์เอาต์ในตัวสำหรับกล่องอินพุต
ฉันพยายามฉลาดและใช้!oแทนErrorLevelแต่ล้มเหลวหากผู้ใช้ป้อนค่าเท็จ
เกือบครึ่งหนึ่งของคำตอบเป็นเพียงชื่อคำสั่งและข้อความคงที่


1
เครื่องหมายจุลภาคทั้งหมดมีไว้เพื่ออะไร?
Pavel

@Phoenix อาจมีข้อโต้แย้งในการใช้ InputBox
อาจ

@Phoenix Timeoutเกือบเป็นพารามิเตอร์สุดท้าย:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]
วิศวกร Toast

สองตัวอักษรสั้นลง:s:=errorLevel?"no ":
phil294

@Blauhirn Gah! ฉันเป็นคนงี่เง่า ขอบคุณ
Engineer Toast

3

Python3, 100 89 83 71 ไบต์

import pty
print("no input received"[3*any(pty.select([0],[],[],10)):])

ลองเล่นกอล์ฟก่อน

-4 สำหรับany(), -7 สำหรับการหั่นขอบคุณ @ user2357112!

-6, ได้รับselect()จากการแทนptyselect


คุณสามารถตัดบางไบต์โดยหั่นสตริง:"no input received" "no input received"[3*bool(...):]
user2357112

นอกจากนี้คุณยังสามารถใช้แทนany(...) bool(...[0])
user2357112

- ผู้ใช้ใหม่: "บน Windows มันจะโยน ModuleNotFoundError: ไม่มีโมดูลชื่อ 'termios'"
FantaC

ptyโมดูลจะใช้ได้เฉพาะบนแพลตฟอร์มลินุกซ์ แต่ฉันเพียงแค่ใช้มันเพราะชื่อของมันเป็นระยะสั้นและก็จะทำให้selectสามารถใช้ได้ เวอร์ชัน 2อาจทำงานได้ดีขึ้นบน Windows
เซท


3

Python 3, 158 ไบต์

import os,threading as t,time
def k(t=10):time.sleep(t);print("No input received"[(10-t)//3:]);os.kill(os.getpid(),t)
t.Thread(None,k).start()
if input():k(0)

ฉันลองใช้คำตอบ Python 3 ของ Sethแต่ใน Windows มันจะพ่นModuleNotFoundError: No module named 'termios'ออกและเนื่องจากฉันไม่สามารถออกความเห็นเกี่ยวกับคำตอบของเขาเกี่ยวกับเรื่องนี้ได้ฉันจึงตัดสินใจที่จะหาวิธีแก้ปัญหาที่ควรเป็นแพลตฟอร์มอิสระแทน

มันเป็นครั้งแรกของฉันที่เล่นกอล์ฟดังนั้นฉันแน่ใจว่ามันจะดีขึ้น


2
ยินดีต้อนรับสู่ PPCG!
Steadybox


2

SmileBASIC 3, 74 ไบต์

"ยอมรับอินพุต" โดยรอการกดปุ่มใด ๆ (ซึ่งควรนับเป็นอินพุต)

M=MAINCNT@L
N=MAINCNT-M>599CLS?"NO "*N;"INPUT RECEIVED
ON N+BUTTON()GOTO@L

ผลลัพธ์ควรเป็น "(ไม่) รับอินพุต" ไม่ใช่ "รับ (ไม่ใช่) รับ"
Pavel

2

ขีดข่วน 2 / 3.x, 41 คะแนน ( คำอธิบาย )

หมดความอดทนจับเวลา

1: เมื่อคลิก GF

1: ถาม [] แล้วรอ

1 + 14 ตัวอักษร: พูดว่า [รับอินพุตแล้ว]

1: หยุด [all v] (หมายเหตุ: เนื่องจาก "all" เป็นการตั้งค่าเริ่มต้นของฉันฉันนับบล็อกเป็น 1)

1 + 2 หลัก: รอ (10) วินาที

1 + 17 ตัวอักษร: พูดว่า [ไม่ได้รับอินพุต]

1: หยุด [ทั้งหมด v]


ยินดีต้อนรับสู่ PCG!
ราหุล Bharadwaj

1

> <> , 43 + 6 = 49 ไบต์

a/!/i0(?\~"input recieved"r>o<
o "\?:-1/r"n

ลองออนไลน์!

+5 สำหรับการ-t.08ตั้งค่าสถานะซึ่งตั้งค่าขีดเป็น 0.08 วินาทีและ +1 สำหรับการaตั้งค่าสถานะซึ่งนับคำแนะนำในช่องว่างและข้ามเป็นเห็บ

โปรแกรมตรวจสอบอินพุตประมาณหนึ่งครั้งทุกวินาทีและออกจากลูปหากตรวจพบอินพุต หากไม่ได้รับอินพุตอินพุตจะออกจากลูปจากด้านล่างต่อท้ายnoไปยังจุดเริ่มต้นของสตริง เริ่มต้น/คือการตรวจสอบให้แน่ใจว่าการตรวจสอบครั้งสุดท้ายสำหรับการป้อนข้อมูลตรงกับเครื่องหมาย 10 วินาที

จากนั้นจะใช้เวลาประมาณ 5-6 วินาทีในการพิมพ์สตริงเอง


คุณสามารถใช้การตั้งค่าสถานะเดียว-at.08เพื่อบันทึกไบต์
พาเวล

@Pavel ขอขอบคุณ!
Jo King

1

Java 1.4+, 284 ไบต์

import static java.lang.System.*;public class X{public static void main(String[]x){new Thread(){public void run(){try{Thread.sleep(10000L);}catch(Exception e){}out.print("no input recieved");exit(0);}}.start();new java.util.Scanner(System.in).nextLine();out.print("input recieved");}}

Ungolfed:

import static java.lang.System.*;

public class InputAndWait {
    public static void main(String[] x) {
        new Thread() {
            public void run() {
                try {
                    Thread.sleep(10000L);
                } catch (Exception e) {
                }
                out.print("no input recieved");
                exit(0);
            }
        }.start();
        new java.util.Scanner(System.in).nextLine();
        out.print("input recieved");
    }
}

โปรดอย่าแนะนำการปรับปรุง Java เฉพาะรุ่นนี่เป็นคำตอบ Java ทั่วไปที่ทำงานในสภาพแวดล้อม Java ที่มีเสถียรภาพในปัจจุบัน (1.4 ขึ้นไป)


น่าจับใจมาก ... ต้องจับไม่สามารถโยนได้ การนำเข้าของระบบจะลดลงเช่น 5 ไบต์ ... การโหลดมากเกินไปก็เป็นเรื่องที่พูดมากเกินไปดังนั้นมันจึงกลายเป็นระเบียบที่ดูไม่ดีนัก


มันจะต้องมี10000Lและไม่10000? ฉันคิดว่า ints ใช้เวลานานโดยอัตโนมัติ
Pavel

1

Julia 0.6 , 78 bytes

นานกว่าที่ฉันคาดไว้ ดูความคิดเห็นสำหรับลิงก์ "ไม่รับอินพุต" TIO

s="input recieved"
Timer(x->(show("no "*s);exit()),10)
readline(STDIN)
show(s)

ลองออนไลน์!


1
มันไม่ได้บล็อคใน TIO เพราะอ่านจากไฟล์ มันกระทบ EOF และเสร็จสิ้นทันที หากคุณไพพ์
Pavel

0

SmileBASIC, 74 73 ไบต์

M=MAINCNT
WHILE!I*M>MAINCNT-600I=INKEY$()>"
WEND?"no "*!I;"input received

ใช้อินพุต 1 ตัว

และโซลูชัน 39 ไบต์ซึ่งอาจไม่ถูกต้อง (ไม่ยอมรับการป้อนข้อความเพียงแค่มีOKปุ่มที่คุณสามารถกด)

?"no "*!DIALOG("",,,10);"input received
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.