বর্ণমালা টাইপ করুন - আপনি যত তাড়াতাড়ি পারেন!


44

আপনার কাজটি এমন একটি প্রোগ্রাম তৈরি করা যা আপনি ইংলিশ বর্ণমালার অক্ষরগুলি কত দ্রুত টাইপ করতে পারবেন তা পরিমাপ করে।

  • প্রোগ্রামটি শুধুমাত্র ছোট হাতের অক্ষর গ্রহণ করিবে aকরার zক্রম অনুযায়ী।
  • প্রতিটি অক্ষর একই লাইনে টাইপ করা হিসাবে প্রতিধ্বনিত হয় (নতুন লাইন বা অক্ষরের মধ্যে অন্য কোনও বিভাজক ছাড়া)।
  • আপনি যদি একটি অবৈধ চরিত্র টাইপ করেন তবে প্রোগ্রামটি Fail একটি নতুন লাইনে আউটপুট আউট হবে এবং প্রস্থান করবে।
  • আপনি যদি সমস্ত 26 টি অক্ষর টাইপ করেন তবে প্রোগ্রামটি, একটি নতুন লাইনে , আউটপুটটি মিলিসেকেন্ডে প্রথম থেকে শেষ বর্ণের সময় নিয়ে গেছে এবং প্রস্থান করবে।
  • টাইমার শুরু হয় যখন আপনি প্রথম অক্ষর টাইপ করেন a,।

উদাহরণ ফলাফল:

b
Fail

abcdefgg
Fail

abcdefghijklmnopqrstuvwxyz
6440

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।


4
প্রাসঙ্গিক প্রকল্প আমি কিছুক্ষণ আগে তৈরি করেছি। (15 তম স্তরটি মূলত এটি)
ইটিএইচ প্রডাকশনগুলি

4
আমরা Failএকটি শিরোনাম নিউলাইন ছাড়া আউটপুট করতে পারি ? (যেমন abdFail\nবা abd Fail\n))
স্কটিনেট

1
@ স্কটনেট, না, ফলাফল ( Failবা মিলিসেকেন্ড) অবশ্যই একটি নতুন লাইনে থাকতে হবে, উদাহরণের মতো। বেশিরভাগ উত্তর ইতিমধ্যে এটি ধরে নিয়েছে।
ডানকো দুর্বিć

2
-১ এই "নতুন" বিধিটি মূল স্পেসিফিকেশনে ছিল না এবং পাইথন উত্তরগুলির মধ্যে আমার পরামর্শগুলি অকার্যকর করে যা মূল নিয়মের মধ্যে ছিল।
এলপেড্রো

আমি এইটি বর্ণমালা মুদ্রণের দ্রুততম কোড চ্যালেঞ্জ হিসাবে প্রত্যাশা করছিলাম ।
এটাকো

উত্তর:


40

এইচটিএমএল (জাভাস্ক্রিপ্ট (ইএস 6)), 129 126 117 বাইট

<input id=i onfocus=l=0,n=Date.now onkeypress=event.which-97-l?i.outerHTML='Fail':24<l?i.outerHTML=n()-t:t=l++?t:n()>

ইনপুটটিতে ক্লিক করুন এবং টাইপিং শুরু করুন! এছাড়াও, আমার টাইপ সফল হয়; অনুশীলন সহ আমি প্রায় 5 সেকেন্ডও সময় নিই। সম্পাদনা: ভাষা স্যুইচ করে @ হারম্যানল্যানস্টাইনকে 2 বাইট সংরক্ষণ করা হয়েছে @ বিডব্লিউ 3 এন ধন্যবাদ 3 বাইট সংরক্ষণ করা। 9 টি বাইটস সংরক্ষণ করেছেন @ টিএসএসকে ধন্যবাদ thanks


1
স্ক্রিপ্ট ট্যাগ সহ এইচটিএমএল ব্যবহার করে -2 বাইট <input id=i><script>l=0;n=Date.now;i.onkeypress=e=>e.charCode-97-l?i.outerHTML='Fail':l>24?i.outerHTML=n()-t:t=l++?t:n()</script>:, সমাপনী ট্যাগটির প্রয়োজন না হলে -11 বাইট
হারমান এল

@HermanLauenstein ক্লোজিং ট্যাগ একটি স্নিপেট জন্য প্রয়োজনীয় মনে করা হয়, অন্তত, তাই আমি এটা ছেড়ে দেব।
নিল

2
এটি একই সাথে অত্যন্ত উত্সাহজনক এবং মজাদার।
জেনন

1
ইনপুট এ পুট ইভেন্ট সম্পর্কে কি? <input id=i onkeypress=event.which-97-l?i.outerHTML='Fail':24<l?i.outerHTML=n()-t:t=l++?t:n() onfocus=l=0,n=Date.now>
tsh

1
কোনও নতুন লাইনে পাঠ্য প্রতিধ্বনিত করে না
dkudriavtsev

33

6502 মেশিন কোড (C64 PAL), 189 165 বাইট

00 C0 A9 17 8D 18 D0 A9 40 85 FE E6 FE 20 E4 FF F0 FB 20 D2 FF C5 FE 38 D0 38
C9 5A 18 F0 33 C9 41 D0 E8 A9 00 85 FC 85 FD A9 18 85 FB A9 7F 8D 0D DD A9 7F
8D 18 03 A9 C0 8D 19 03 A9 D8 8D 04 DD A9 03 8D 05 DD A9 01 8D 0E DD A9 81 8D
0D DD D0 B9 A9 7F 8D 0D DD A9 47 8D 18 03 A9 FE AD 19 03 CE 0E DD B0 14 A9 0D
20 D2 FF A4 FC A5 FD 20 91 B3 20 DD BD A9 01 A8 D0 04 A9 9D A0 C0 4C 1E AB 48
AD 0D DD 29 01 F0 14 E6 FC D0 02 E6 FD C6 FB D0 0A A9 18 85 FB CE 0E DD EE 0E
DD 68 40 0D C6 41 49 4C 00
  • -24 বাইটগুলি ইনলাইন করে ফাংশনগুলি দিয়ে এবং অন্যান্য সিআইএ 2 বিঘ্নগুলির জন্য যত্ন না করে

অনলাইন ডেমো (ব্যবহারsys49152:)

স্ক্রিনশট


ব্যাখ্যা:

এটি একটি ক্ষুদ্রতর প্রোগ্রাম হবে যদি এটি সি 64-তে মিলি সেকেন্ডের সঠিক পরিমাপের সমস্যা না হয়। সিস্টেম ব্যাহত হয় প্রতি সেকেন্ডে প্রায় 60 বার, যা এমনকি ঘনিষ্ঠ হয় না। সুতরাং আমাদের এখানে একটি হার্ডওয়্যার টাইমার ব্যবহার করতে হবে যা সিস্টেম ঘড়ি থেকে তার ইনপুট টিক্স পায়।

PAL মেশিনে, সিস্টেমের ঘড়িটি হ'ল 985248 Hz। তাই টাইমারটি 985 তে আরম্ভ করার ফলে মিলিসেকেন্ড টিক্সের কাছাকাছি কিছু পাওয়া যায় তবে এটি কিছুটা দ্রুতগতির, আমাদের প্রতিটি চতুর্থ টিকের জন্য 986 চক্র গণনা করতে হবে, বা একক চক্রের জন্য টাইমার ধরে রাখতে হবে। যদি সম্ভব না হয়, কিন্তু আমরা ক্রম 6 চক্র টাইমার ধরে রাখতে পারেন DEC $DD0E, INC $DD0E: $DD0Eবিট 0 এবং বন্ধ এটা সুইচিং সঙ্গে টাইমার নিয়ন্ত্রণ রেজিস্টার, এবং উভয় নির্দেশাবলী 6 চক্র নিতে, তাই সঠিক লিখেছে যে স্টপ শুরু টাইমার হ'ল 6 চক্র পৃথক। অতএব আমাদের এই ক্রমটি প্রতি 6 * 4 = 24 টি টিকটি কার্যকর করতে হবে। এটি এখনও একেবারে নয়ঠিক, টাইমারটি 8 মিনিট 12 সেকেন্ডের পরে 1 মিলিসেকেন্ড পিছনে যাবে, তবে এটি সম্ভবত যথেষ্ট ভাল - সেই কোডটির জন্য ক্ষতিপূরণ দিতে প্রচুর কোড লাগবে ।

সম্পাদনা করুন : টাইমারটির শুরু মান অবশ্যই 984 হতে হবে, 985 নয়, কারণ এই টাইমারগুলি "আন্ডারফ্লোতে" গুলি চালায়, সুতরাং 0 এর মান একটি গুলি চালানোর আগে আরও একটি চক্র গণনা করবে। কোড স্থির, বাইট গণনা অপরিবর্তিত।

এখানে মন্তব্য বিচ্ছিন্ন তালিকা:

         00 C0       .WORD $C000        ; load address
.C:c000  A9 17       LDA #$17           ; mode for upper/lower text
.C:c002  8D 18 D0    STA $D018          ; set in graphics chip
.C:c005  A9 40       LDA #$40           ; initialize expected character
.C:c007  85 FE       STA $FE            ; to 'a' - 1
.C:c009   .mainloop:
.C:c009  E6 FE       INC $FE            ; increment expected character
.C:c00b   .getchar:
.C:c00b  20 E4 FF    JSR $FFE4          ; read character from keyboard
.C:c00e  F0 FB       BEQ .getchar       ; until actual character entered
.C:c010  20 D2 FF    JSR $FFD2          ; output this character
.C:c013  C5 FE       CMP $FE            ; compare with expected
.C:c015  38          SEC                ; set carry as marker for error
.C:c016  D0 38       BNE .result        ; wrong character -> output result
.C:c018  C9 5A       CMP #$5A           ; compare with 'z'
.C:c01a  18          CLC                ; clear carry (no error)
.C:c01b  F0 33       BEQ .result        ; if 'z' entered, output result
.C:c01d  C9 41       CMP #$41           ; compare with 'a'
.C:c01f  D0 E8       BNE .mainloop      ; if not equal repeat main loop
.C:c021  A9 00       LDA #$00           ; initialize timer ticks to 0
.C:c023  85 FC       STA $FC
.C:c025  85 FD       STA $FD
.C:c027  A9 18       LDA #$18           ; counter for adjusting the timer
.C:c029  85 FB       STA $FB
.C:c02b  A9 7F       LDA #$7F           ; disable all CIA2 interrupts
.C:c02d  8D 0D DD    STA $DD0D
.C:c030  A9 7F       LDA #<.timertick   ; set NMI interrupt vector ...
.C:c032  8D 18 03    STA $0318
.C:c035  A9 C0       LDA #>.timertick
.C:c037  8D 19 03    STA $0319          ; ... to our own timer tick routine
.C:c03a  A9 D9       LDA #$D8           ; load timer with ...
.C:c03c  8D 04 DD    STA $DD04
.C:c03f  A9 03       LDA #$03
.C:c041  8D 05 DD    STA $DD05          ; ... 985 (-1) ticks (see description)
.C:c044  A9 01       LDA #$01           ; enable timer
.C:c046  8D 0E DD    STA $DD0E
.C:c049  A9 81       LDA #$81           ; enable timer interrupt
.C:c04b  8D 0D DD    STA $DD0D
.C:c04e  D0 B9       BNE .mainloop      ; repeat main loop
.C:c050   .result:
.C:c050  A9 7F       LDA #$7F           ; disable all CIA2 interrupts
.C:c052  8D 0D DD    STA $DD0D
.C:c055  A9 47       LDA #$47           ; set NMI interrupt vector ...
.C:c057  8D 18 03    STA $0318
.C:c05a  A9 FE       LDA #$FE
.C:c05c  AD 19 03    LDA $0319          ; ... back to system default
.C:c05f  CE 0E DD    DEC $DD0E          ; disable timer
.C:c062  B0 14       BCS .fail          ; if carry set, output fail
.C:c064  A9 0D       LDA #$0D           ; load newline
.C:c066  20 D2 FF    JSR $FFD2          ; and output
.C:c069  A4 FC       LDY $FC            ; load timer value in
.C:c06b  A5 FD       LDA $FD            ; A and Y
.C:c06d  20 91 B3    JSR $B391          ; convert to float
.C:c070  20 DD BD    JSR $BDDD          ; convert float to string
.C:c073  A9 01       LDA #$01           ; load address of
.C:c075  A8          TAY                ; string buffer
.C:c076  D0 04       BNE .out           ; and to output
.C:c078   .fail:
.C:c078  A9 9D       LDA #<.failstr     ; load address of "Fail" string
.C:c07a  A0 C0       LDY #>.failstr     ; in A and Y
.C:c07c   .out:
.C:c07c  4C 1E AB    JMP $AB1E          ; done; OS routine for string output
.C:c07f   .timertick:
.C:c07f  48          PHA                ; save accu
.C:c080  AD 0D DD    LDA $DD0D          ; load interrupt control register
.C:c083  29 01       AND #$01           ; to know whether it was a timer NMI
.C:c085  F0 14       BEQ .tickdone      ; if not -> done
.C:c087  E6 FC       INC $FC            ; increment timer ticks ...
.C:c089  D0 02       BNE .adjusttick
.C:c08b  E6 FD       INC $FD            ; high byte only on overflow
.C:c08d   .adjusttick:
.C:c08d  C6 FB       DEC $FB            ; decrement counter for adjusting
.C:c08f  D0 0A       BNE .tickdone      ; not 0 yet -> nothing to do
.C:c091  A9 18       LDA #$18           ; restore counter for adjusting
.C:c093  85 FB       STA $FB
.C:c095  CE 0E DD    DEC $DD0E          ; halt timer for exactly
.C:c098  EE 0E DD    INC $DD0E          ; 6 cycles
.C:c09b   .tickdone:
.C:c09b  68          PLA                ; restore accu
.C:c09c  40          RTI
.C:c09d   .failstr:
.C:c09d  0D C6 41    .BYTE $0D,"Fa"
.C:c0a0  49 4C 00    .BYTE "il",$00

6
ভাল, এখন আমার সরঞ্জাম বাক্সে কিছুটা শালীন মিলিসেকেন্ড টাইমার রয়েছে;) কোনও দিন কার্যকর হতে পারে।
ফেলিক্স পামেন 16

11
মনোযোগ দিন, স্ক্রিপ্ট বাচ্চা। এটি বাস্তব গল্ফ।
জে ...

1
@ জে ... আমি ইনলাইন করে আরও গল্ফ .starttimerকরতে পারি - শীঘ্রই করবো :) (এবং আরও এই বেসিক উত্তরেরTI মতো সিস্টেমটি ব্যবহার করে , তবে আমি নিশ্চিত নই যে এটি বৈধ কিনা, কারণ আপনি মেশিন কোডে আরও ভাল করতে পারবেন) )
ফেলিক্স প্যালম্যান

বাহ, আমি আমার সময় পরিমাপের ত্রুটিটি প্রথম গণনা করার সময় 985 এর একটি ফ্যাক্টরটি মিস করেছি - এটি আসলে এটি বেশ ভাল ((যদি আমি আমার গণনায় অন্য একটি ত্রুটি করে থাকি তবে দয়া করে উল্লেখ করুন!) :)
ফেলিক্স প্যালম্যান

এবং আপনি কি দেখতে পাচ্ছেন যে এই লোকটির গিথাবটিতে কী আছে ?: অ্যান্ড্রয়েড বুট পুনরুদ্ধার .... তিনি সম্পূর্ণ উন্মাদ! তার প্রোফাইল পছন্দসই
লুসিয়ানো এন্ড্রেস মার্টিনি

13

বাশ + কোর্টিলস, 103 99 98 বাইট

for((;c==p%26;r=`date +%s%3N`-(s=s?s:r),c=62#$c-9,p++))
{
read -N1 c
}
((c==p))||r=Fail
echo "
$r"

একটি টার্মিনালে চালানো আবশ্যক।

টেস্ট রান

$ bash type.sh
abcdefghijklmnopqrstuvwxyz
3479
$ bash type.sh
abcz
Fail
$ bash type.sh 2>&- # typing '@' would print to STDERR
ab@
Fail
$ bash type.sh
A
Fail

4
3479বেশ দ্রুত! ভাল হয়েছে :)
রবউ

বাশের কোনও নির্দিষ্ট সংস্করণ প্রয়োজন কি না কিছু? 4.4.12 এ, টাইপ করা aসঙ্গে সঙ্গে আমাকে দেয় line 1: ((: r=15094100773N: value too great for base (error token is "15094100773N")এবং প্রস্থান করে।
নম্বরমানিয়াক

@ নাম্বারমানিয়াক বাশের সংস্করণটি বিবেচনা করা উচিত নয়, তবে শক্তির একটি date। খনিটি জিএনইউ কোর্টিলস 8.23 ​​থেকে এসেছে। date +%s%3Nআপনার সিস্টেমে কী মুদ্রণ করা যায়?
ডেনিস

@ ডেনিস এটি আউটপুট করে 15094104833N- এটি যদি কোনও পার্থক্য করে তবে এটি ম্যাকোজে অন্তর্নির্মিত dateইউটিলিটি।
সংখ্যামানিয়াক

1
@ নাম্বারমানিয়াক বিএসডি dateমনে হয় স্ট্রফটাইম ব্যবহার করছে যা স্বীকৃতি দেয় না %N
ডেনিস

9

পাইথন 2 + গেটেচ , 116 বাইট

import time,getch
t=[i+97-ord(getch.getche())and exit("Fail")or time.time()for i in range(26)]
print(t[-1]-t[0])*1e3

কোড ঠিক করার জন্য এবং 57 বাইট সংরক্ষণ করার জন্য ওভিএস এবং এলপেড্রোকে ধন্যবাদ


7

এসওজিএল ভি0.12 , 35 বাইট

"ζ¦F‘→I
]I!}Su[I:lzm≠?■Fail←z=?Suκ←

এখানে চেষ্টা করুন! - রান ক্লিক করুন, এবং ইনপুট বাক্সে বর্ণমালা প্রবেশ করুন। মনে রাখবেন এটি কিছুটা পিছিয়ে থাকতে পারে কারণ এসওজিএল প্রতি 100 এক্সিকিউটড টোকেনগুলিকে ইনপুট দেওয়ার জন্য কেবল বিরতি দেয় (এবং এসওজিএল বেশ ধীর হয়)। যদি এটি আপনাকে বিরক্ত sleepBI=trueকরে, কনসোলে চালান ।

দ্রষ্টব্য: এটি সামঞ্জস্যতা মোডে চালাবেন না - এটি চিরতরে লুপ হয়ে যাবে।

ব্যাখ্যা:

"ζ¦F‘    push "inputs.value" (yes, that is a word in SOGLs english dictionary)
     →   execute as JS, pushing the inputs contents
      I  named function I


]  }                do while POP is truthy
 I                    execute I
  !                   negate it - check if it's empty
    Su              push the current milliseconds since start
[                   loop
 I                    execute I
  :                   duplicate the result
   l                  let its length
    zm                mold the alphabet to that size
      ≠?              if that isn't equal to one of the result copies
        ■Fail           push "Fail"
             ←          and exit, implicitly outputting that
              z=?     if the other copy is equal to the alphabet
                 Su     push the milliseconds since start
                   κ    subtract the starting milliseconds from that
                    ←   and exit, implicitly outputting the result

@ হাইপার নিউট্রিনো আমি জানতাম এটি কার্যকর হবে: পি
ডিজাইমা

কে আশা করবে যে এসওজিএল এটি করতে সক্ষম হবে ... উপায় দ্বারা অভিধানে "ব্যর্থ" হয় না?
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার ভাল, এসওজিএল একটি সর্ব-উদ্দেশ্যমূলক ভাষা হওয়ার কথা ছিল , তবে তা কার্যকর হয়নি: পি
ডিজেমা

BTW আমি যদি এই সম্পূর্ণরূপে বৈধ জানি না, কিন্তু তারপর আবার আমি মনে করি যে ইন্টারফেসের সাথে একটি সমস্যা এবং অনুবাদক পিছনে ... হতে পারে
এরিক Outgolfer

@ এরিকথ আউটগলফার হ্যাঁ, আমি জানি না যে এটি কতটা বৈধ, আমি অনুমান করি যে আমি অপের অপেক্ষায় আছি। প্রথমে আমি ভেবেছিলাম এটি এইচটিএমএল উত্তরের মতো, তবে এটি এখন অন্যরকম হয়ে গেছে বলে আমি
দেখেছি

7

পাস্কাল (এফপিসি) , 176 বাইট

Uses CRT,SysUtils;Var c:char;a:Real;Begin
for c:='a'to'z'do
if c=ReadKey then
begin Write(c);if c='a'then a:=Now;end
else
begin
Write('Fail');Halt;end;Write((Now-a)*864e5)
End.

এটি অনলাইন চেষ্টা করুন!

গল্ফিংয়ের জন্য কোডে ব্যবহৃত কয়েকটি কৌশল:

  • ব্যবহার করুন Realএকটি খাটো বিকল্প হিসেবে TDateTime, কারণ হিসাবে সংজ্ঞায়িত এখানে , TDateTime= Double, যা ফ্লোটিং পয়েন্ট প্রকার।
  • MilliSecondsBetweenসময়ের ব্যবধান গণনা করার পরিবর্তে , এই কোডটি দুটি ভাসমান-পয়েন্ট মানের মধ্যে পার্থক্যকে গুণ করে 864e5, যা এখানেTDateTime বর্ণিত ফ্রি পাস্কেল এনকোডের কারণে কাজ করে ।

বিঃদ্রঃ:

  • ReadKeyফাংশনটি আসলে কনসোলে কীটি প্রিন্ট করে না, সুতরাং কনসোলের জন্য ম্যানুয়াল লিখন Write(c)প্রয়োজনীয় is
  • টিআইও 0স্পষ্ট কারণে বর্ণমালা টাইপ করার জন্য একটি নম্বর পেয়েছে ।
  • প্রোগ্রামটি ভাসমান-পয়েন্ট স্বরলিপিতে সময় প্রিন্ট করে, আমার ধারণা এটি অনুমোদিত।

সাইটে স্বাগতম!

আপনি for c:='a'to'z'doএকই লাইনে সরানোর মাধ্যমে 1 বাইট সংরক্ষণ করতে পারেন a:=Time;
ইসমাইল মিগুয়েল 21

এটি সংক্ষিপ্ত হিসাবে Nowপরিবর্তে আপনার চেষ্টা করা উচিত Time
tsh

কেন 86398338?? আমি বুঝতে পারি যদি আপনি একাধিক 864e5 হয় যেহেতু একদিনে 864e5 মিলি সেকেন্ড রয়েছে। তবে এই ম্যাজিক নম্বরটি কীভাবে আসে?
tsh

@ আমি জানি না। ম্যানুয়াল টেস্টিংয়ের মাধ্যমে আমি সেই "যাদু" নম্বরটি দেখতে পাই এবং আমি জানি না যে পাস্কাল কীভাবে সংরক্ষণ TDateTimeকরে Double864e5আরও সঠিক মনে হচ্ছে, আমি সমস্যাগুলি ঠিক করব।
ব্যবহারকারী 75648

5

জাভা, 404 388 354 348 320 318 বাইট

import java.awt.*;import java.awt.event.*;interface M{static void main(String[]a){new Frame(){{add(new TextArea(){{addKeyListener(new KeyAdapter(){long t,i=64;public void keyPressed(KeyEvent e){t=t>0?t:e.getWhen();if(e.getKeyChar()!=++i|i>89){System.out.print(i>89?e.getWhen()-t:"Fail");dispose();}}});}});show();}};}}

এবং এখানে আমি ভেবেছিলাম জাভা কনসোলটি ইতিমধ্যে ভার্বোস ছিল ..
যেহেতু জাভায় কনসোল-তে কী-টিপুনগুলি কাঁচা শুনতে কোনও উপায় নেই, তাই আমি একটি জিইউআই ব্যবহার করি java.awt

-78 by বাইট @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ ।

ব্যাখ্যা:

import java.awt.*;                 // Required import for Frame and TextField
import java.awt.event.*;           // Required import for KeyAdapter and KeyEvent
interface M{                       // Class
  static void main(String[]a){     //  Mandatory main-method
    new Frame(){                   //   Create the GUI-Frame
      {                            //    With an initialization-block
        add(new TextArea(){        //     Add an input-field
          {                        //      With it's own initialization-block
            addKeyListener(new KeyAdapter(){
                                   //       Add a KeyAdapter to the input-field
              long t,              //        Long to save the time
                   i=64;           //        Previous character, starting at code of 'a' -1
              public void keyPressed(KeyEvent e){ 
                                   //        Override the keyPressed-method:
                t=t>0?             //         If `t` is already set:
                   t               //          Leave it the same
                  :                //         Else:
                   e.getWhen();    //          Save the current time (== start the timer)
                if(e.getKeyCode()!=++i
                                   //         As soon as an incorrect character is pressed,
                   |i>89){         //         or we've reached 'z':
                  System.out.print(i>89?
                                   //          If we're at 'z':
                    e.getWhen()-t  //           Print the end-time in ms to the Console
                   :               //          Else (an incorrect character was pressed)
                    "Fail");       //           Print "Fail" to the Console
                  dispose();}      //          And exit the application
              }                    //        End of keyPressed-method
            });                    //       End of KeyAdapter
          }                        //      End of input-field initialization-block
        });                        //     End of input-field
        show();                    //     Initially show the Frame
      }                            //    End of Frame initialization-block
    };                             //   End of Frame 
  }                                //  End of main-method
}                                  // End of class

সাফল্যের জিএফ উদাহরণ: (হ্যাঁ, আমি বর্ণমালাটি ধীরে ধীরে এখানে টাইপ করি ..)
দ্রষ্টব্য: এটি একটি পুরানো জিআইএফ। বর্তমান সংস্করণটি আর কনসোলে কী-প্রেসগুলি মুদ্রণ করে না। এবং এটি দশমিক বিন্দুর পরে অঙ্কগুলির সাথে আর মুদ্রণ করে না।

এখানে চিত্র বর্ণনা লিখুন
ব্যর্থতার জিআইফ উদাহরণ:
দ্রষ্টব্য: এটি একটি পুরানো জিআইএফ। বর্তমান সংস্করণটি আর কনসোলে কী-প্রেসগুলি মুদ্রণ করে না।

এখানে চিত্র বর্ণনা লিখুন


2
চিত্তাকর্ষক উত্তরটি বিবেচনা করে এটি একটি গি!
পিওরফেরেট

1
388 বাইট । গল্ফিংয়ের পাশাপাশি আপনার কোডটি ঠিক করার জন্য আমি স্বাধীনতা নিয়েছিলাম কারণ আপনি setVisible(false)প্রস্থান করার পরিবর্তে ব্যবহার করেছেন ।
অলিভিয়ার

@ অলিভিয়ারগ্রোওয়ের ধন্যবাদ ভুলে গেছেন showএবং disposeযা এর চেয়েও ছোট setVisible। আমি জাভা এর জিইউআই প্রায় কখনও ব্যবহার করি না ... এবং মূল-পদ্ধতিতে না রেখে ক্লাস-ইনিশিয়েশন ব্যবহার করতে স্মার্ট। আমার এটা মনে রাখা উচিত।
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন ধন্যবাদ, এবং কোনও সমস্যা নেই ;-) যদিও আরও কিছু সাধারণ মন্তব্য: আপনার চিঠিগুলি দুবার আউটপুট দেওয়ার দরকার নেই। প্রতিধ্বনি ইতিমধ্যে সরবরাহ করা হয়েছে TextField। এছাড়াও, আপনি দুটি বাইট অর্জন করার TextAreaপরিবর্তে ব্যবহার করতে পারেন TextField। শেষ অবধি, KeyEventএমন একটি getWhenপদ্ধতি রয়েছে যা যুগ এবং ইভেন্টের মধ্যে মিলি সেকেন্ডের মধ্যে সময় দেয়। System.nanoTime()আরও বেশি বাইট অর্জন করার পরিবর্তে কেবল সেগুলি ব্যবহার করা দরকার ।
অলিভিয়ার

1
আপনাকে স্বাগতম! তবে আমি এটিকে আরও 320 বাইটে নামিয়েছি । ;-)
অলিভিয়ার

4

সি # (.নেট কোর), 245 + 13 183 + 41 177 + 41 বাইট

জন্য +41 বাইট using System;using static System.Console

আমি মোবাইলে থাকায় অনীকৃত এবং এটি টিআইওতে চলবে না।

n=>{int c=ReadKey().KeyChar,x=0;try{if(c!=97)x/=x;var s=DateTime.Now;while(c<149)if(ReadKey().KeyChar!=c++)x/=x;Write((DateTime.Now-s).TotalMilliseconds);}catch{Write("Fail");}}

1
এটি পরীক্ষা করতে সক্ষম না হয়ে কোনও কার্যকারিতা প্রোগ্রাম তৈরি করার জন্য +1। গল্ফিং: 1) একটি সংক্ষিপ্ত উপায় ব্যতিক্রমটি উত্পাদন করতে পেরেছি: int x=0;এবং তারপরে তা করুন x=1/x;। এটি 14 বাইট সংরক্ষণ করতে হবে। দুর্ভাগ্যক্রমে আপনার প্রয়োজন x। আপনি যদি চেষ্টা করার চেষ্টা করেন তবে ধ্রুব শূন্য সংকলক ত্রুটি করে1/0 একটি বিভাগ পান । 2) cপ্রথম ঘোষণার সাথে একত্রিত করার জন্য -5 বাইট ReadKey। 3) পরিবর্তন করুন ভেতরের মধ্যে শর্ত ifথেকে ReadKey!=++cএবং অপসারণ c++;elseঅন্যের জন্য -9 বাইট।
রাজনগুল

@ রজনগুল ধন্যবাদ! x=1/xকমে যেতে পারে x/=x। এবং আমি আরও using static System.Console;কিছু বাইট সংরক্ষণ করার জন্য যুক্ত করেছি :)
ইয়ান এইচ।

পরিবর্তে লুপ অবস্থায় অপসারণ করে iএবং আরও কিছু বাইট সংরক্ষণ cকরা যায়।
রাজনগুল

3

এমএসএক্স-বেসিক, 126 টি অক্ষর

1C=97:GOSUB3:TIME=0
2IFASC(C$)<>CTHEN?"Fail":ENDELSEIFC=122THEN?TIME*20:ENDELSEC=C+1:GOSUB3:GOTO2
3C$=INKEY$:IFC$=""GOTO3
4RETURN

TIME একটি অভ্যন্তরীণ এমএসএক্স-বেসিক ভেরিয়েবল যা প্রতি 20 মিলিসেকেন্ডে একটি করে বৃদ্ধি করে।


3

সি # (.নেট কোর) , 184 + 13 = 197 173 + 13 = 186 বাইট

()=>{var s=DateTime.Now;var i=97;while(i<123&&Console.ReadKey().KeyChar==i)if(i++<98)s=DateTime.Now;Console.Write(i>122?$"\n{(DateTime.Now-s).TotalMilliseconds}":"\nFail");}

এটি অনলাইন চেষ্টা করুন!

দুর্ভাগ্যক্রমে টিআইও এটি চালাতে পারে না, তবে এটি বাইট গণনা পাওয়ার পক্ষে সহজ।

+13 এর জন্য using System;

-1 এ পরিবর্তন i==123করে i>122। আমি এটি করতে প্রলুব্ধ হয়েছিল i>'z'

প্রাপ্তি স্বীকার

-10 বাইট @ রজনগুলকে ধন্যবাদ

Ungolfed

()=>{
    var s=DateTime.Now;
    var i=97;

    while(i<123&&Console.ReadKey().KeyChar==i)
        if(i++<98)
            s=DateTime.Now;

    Console.Write(i>122?
        $"\n{(DateTime.Now-s).TotalMilliseconds}":
        "\nFail"
    );
} 

1
ReadKeyলুপের অবস্থাতে সরিয়ে আপনি কিছু বাইট সংরক্ষণ করতে পারেন যাতে আপনি প্রথমটি ifএবং এটি সরাতে পারেন break
রাজনগুল

3

নোড.জেএস, 240 213 বাইট

require('readline',{stdin:i,stdout:o,exit:e}=process).emitKeypressEvents(i)
w=s=>o.write(s)
n=0
i.on('keypress',c=>w(c)&&c.charCodeAt()-97-n?e(w(`
Fail`)):!n++?s=d():n>25&&e(w(`
`+(d()-s)))).setRawMode(d=Date.now)

সম্পাদনা: জর্দানের জন্য 27 বাইট সংরক্ষণ করা হয়েছে

অবরুদ্ধ সংস্করণ:

const readline = require('readline')

let index = 0
let start

readline.emitKeypressEvents(process.stdin)
process.stdin.setRawMode(true)

process.stdin.on('keypress', character => {
  process.stdout.write(character )

  // Lookup character in ASCII table
  if (character !== String.fromCharCode(97 + index) {
    process.stdout.write('\nFail')
    process.exit()
  }

  index++

  if (index === 1) {
    start = Date.now()
  }

  if (index === 26) {
    process.stdout.write('\n' + (Date.now() - start))
    process.exit()
  }
})

3

সি (জিসিসি) , 303 বাইট

* নিক্স সিস্টেমে কাজ করে। স্ট্যান্ড্যালোন কোডটি নতুন লাইনের জন্য অপেক্ষা না করে অক্ষরগুলি পড়ার অনুমতি দেওয়ার জন্য বর্তমান টার্মিনালের ক্যানোনিকাল মোড সরিয়ে দিচ্ছে:

/! This এই প্রোগ্রামটি চালানো টার্মিনালটিকে প্রায় অকেজো করে তুলবে।

#import <stdlib.h>
#import <termios.h>
#define x gettimeofday(&t,0)
#define r t.tv_sec*1000+t.tv_usec/1000
c,i=97;main(){long s=0;struct termios n;struct timeval t;cfmakeraw(&n);n.c_lflag|=ECHO;tcsetattr(0,0,&n);for(;i<'d';){c=getchar();if(c!=i++)puts("\nFail"),exit(0);x;s=s?:r;}x;printf("\n%ld",r-s);}

অবহেলিত এবং মন্তব্য করেছেন:

// needed in order to make gcc aware of struct termios
// and struct timeval sizes
#import <stdlib.h>
#import <termios.h>

// gets the time in a timeval structure, containing
// the number of seconds since the epoch, and the number
// of µsecs elapsed in that second
// (shorter than clock_gettime)
#define x gettimeofday(&t,0)
// convert a timeval structure to Epoch-millis
#define r t.tv_sec*1000+t.tv_usec/1000

// both integers
// c will contain the chars read on stdin
// 97 is 'a' in ASCII
c,i=97;

main(){
  long s=0; // will contain the timestamp of the 1st char entered
  struct timeval t; // will contain the timestamp read from gettimeofday

  // setting up the terminal
  struct termios n;
  cfmakeraw(&n);//create a raw terminal configuration
  n.c_lflag|=ECHO;//makes the terminal echo each character typed
  tcsetattr(0,0,&n);//applies the new settings

  // from 'a' to 'z'...
  for(;i<'{';){
    // read 1 char on stdin
    c=getchar();

    // if int value of the input char != expected one => fail&exit
    if(c!=i++)puts("\nFail"),exit(0);

    // macro x: get current timestamp
    x;

    // if not already set: set starting timestamp
    s=s?:r;
  }

  // get end of sequence timestamp
  x;

  // prints the end-start timestamps difference
  printf("\n%ld",r-s);
}

বিকল্প সমাধান (218 বাইট):

যদি আগেই টার্মিনালটি কনফিগার করার অনুমতি দেওয়া হয় তবে আমরা সেই অংশটি পরিচালনা করার কোডের অংশ থেকে মুক্তি পেতে পারি।

এখানে টার্মিনাল কারসাজি ছাড়াই একই কোডটি রয়েছে:

#import <stdlib.h>
#define x gettimeofday(&t,0)
#define r t.tv_sec*1000+t.tv_usec/1000
c,i=97;main(){long s=0;struct timeval t;for(;i<'{';){c=getchar();if(c!=i++)puts("\nFail"),exit(0);x;s=s?:r;}x;printf("\n%ld",r-s);}

এটা কাজ করতে:

$ gcc golf.c
$ stty -icanon
$ a.out

রানটাইম উদাহরণ: এখানে চিত্র বর্ণনা লিখুন


3

কমোডোর বেসিক ভি 2 - 113 বাইট

মূলধনপত্রগুলি স্থানান্তর করতে হবে।
কিছু টাইপগুলি নির্দেশ করার জন্য ফেলিক্স প্যালম্যানকে ধন্যবাদ, চশমা
চেষ্টা করে দেখুন

0d=64
1on-(f=26)gO5:gEa$:ifa$=""tH1
2iff=0tHt=ti
3f=f+1:ifa$<>cH(d+f)tH6
4?cH(14)a$;:gO1
5?:?(ti-t)/60*1000:eN
6?"Fail"

সংশোধিত মার্কডাউন কোডটি দেখতে সম্পাদনে ক্লিক করুন।
NieDzejkob

সাইটে স্বাগতম! আপনি কি কোনও দোভাষীর সাথে একটি লিঙ্ক যুক্ত করতে পারেন (যদি তা বিদ্যমান থাকে), যাতে অন্যরা আপনার কোডটি পরীক্ষা করতে পারে?
কেয়ার্ড কোইনরিঙ্গিংহিং

ঠিক আছে, এটি IRQ সিস্টেমটি ব্যবহার করে (এতে TIবর্ধিত হয়) আমি এটির যথার্থতার অভাবের জন্য অনুপযুক্ত বলে মনে করি, তবে আমি অনুমান করি এটি এখানে নিখুঁত খেলা কারণ বেসিকের ক্ষেত্রে আরও ভাল করার কোনও উপায় নেই :) তবুও, এটি উপকরণের সাথে আটকানো, আমি পেয়েছি একটি বাক্য গঠন ত্রুটি 1- কোন সাহায্য?
ফেলিক্স পামেন

এটি নিজেই খুঁজে বের করলেন, আপনার এক লাইনে টাইপ রয়েছে, 1on-(f=26)gO4:gEa$:ifa$=""tH1নিতপিক্স হওয়া উচিত : ১) আউটপুট একই লাইনে থাকবে, ২) আউটপুটটি সমস্ত ক্যাপস রয়েছে - আমার মনে হয় আপনার এগুলি ঠিক করা উচিত, অনেকগুলি বাইট লাগবে না যাইহোক :)
ফেলিক্স প্যালম্যান

সমস্যাগুলি সমাধান, কোনও টাইপস বাকি?
সোমবার

2

পার্ল 5, 79 93 +31 (-এমটার্ম :: রিডকি-এমটাইম :: হাইরেস = সময়) বাইট

$|=1;map{ReadKey eq$_||exit print"
Fail";$s||=time}a..z;print$/,0|1e3*(time-$s)

$|=1কাঁচা মোডে টার্মিনাল সেট করতে যথেষ্ট নয়, stty -icanonএটি আগে বা চালানো উচিত

ReadMode 3;map{ReadKey eq$_||exit print"
Fail";print;$s||=time}a..z;print$/,0|1e3*(time-$s)

কমান্ড চালানোর পরে টার্মিনালে অক্ষরগুলি দেখতে: stty echoবাstty echo icanon


ভাল পুরানো ReadKey! আপনি কয়েক বাইট এখানে সংরক্ষণ করতে পারবেন এবং সেখানে, 1e3জন্য 1000, $s||=timeএবং আপনি সেট যদি $sপ্রথম এবং তারপর কল ReadKey, আপনি খুঁজে অদলবদল করতে পারেন mapএকটি পোস্টসাফিক্স করতে for। আমি এর dieপরিবর্তে বলতে চাই exit print, তবে আমি মনে করি আপনি ঠিক সেখানে আছেন ... আমি টিঙ্কার দিয়েছিলাম printf"\n%i"তবে এটি বড় আকারে শেষ হয়েছিল, এবং আমি $-পরিবর্তে এটি ব্যবহারের কথা ভেবেছিলাম $s, তবে এটি বোকামি ছিল! :)
ডম হেস্টিংস

@ ডোমহাস্টিংস, আপনার সহায়তার জন্য আপনাকে ধন্যবাদ, আমি ৪ টি বাইট সংরক্ষণ করতে পারলাম, তবে আমি অবিচ্ছিন্ন ইনপুট সেট করতে 5 বাইট যুক্ত করেছি $|=1;, এছাড়াও also গুলি || = সময়টি মানচিত্রের অদলবদল হতে পারে না কারণ টাইমারটি প্রথম কী টিপানোর পরে শুরু হওয়া উচিত, এবং stdout এর পরিবর্তে stderr এ dieপ্রতিধ্বনিত হবে Fail
নাহুয়েল ফিউইলুল

সাহায্য করতে পেরে খুশি, আশা করি আপনি আমাকে ধারণা দেওয়ার প্রস্তাব দিবেন না! হ্যাঁ, এটা লজ্জাজনক, exit printএত দীর্ঘ! দুঃখিত, আমি মনে করি না আমি আমার চিন্তা ব্যাখ্যা forসঠিকভাবে: $s||=time,ReadKey eq$_||exit print" Fail"for a..zআমি মনে করি ... হতে পারে এমনকি কাজ করা উচিত $|=$s||=...বা $|=map...আপনি যে পদ্ধতির পছন্দ করা! আপনি ভাবছেন যদিও এটি বেশ পেরেক দেওয়া হয়েছে!
ডম হেস্টিংস

$|=map..নতুন টার্মিনালে আনফারড ইনপুট সেট করে না (সরানোর সময় আমার ত্রুটি ছিল, রিডমড 3, কারণ আমি একই অধিবেশনটিতে পরীক্ষা করছিলাম), এবং $s||=timeআগে রিডকি খুব তাড়াতাড়ি টাইমার শুরু করবে
নাহুয়েল ফিউইলুল

আহ, আমি ভুল বুঝেছি, এখনই পেয়েছি, স্ক্রিপ্ট শুরু করার পরে এটি পরীক্ষা করার জন্য খুব বেশি সময় অপেক্ষা করেনি ... :) লজ্জাজনক $|, তবে আবার এটি লুপের পরে সংরক্ষণ করছে যা অনেক দেরি হয়ে গেছে! তুমি একধাপ এগিয়ে!
ডম হেস্টিংস

2

অ্যাসেটো , 70 বাইট

d'|d 't9
$z=p zp1
!=   >#v
d,   1 +
cTpaXpn3
Io$'p"*F
|'!=ilnu
@ad,aF"

@|স্ট্যাকের মানটি সত্য হলে আমি একটি ধরা চিহ্ন সেট করে এবং অনুভূমিকভাবে মিরর করে শুরু করি । এটি প্রাথমিকভাবে নয়, এবং পরে সর্বদা থাকবে। কোনও ভুল কী প্রবেশ করা গেলে আমরা এখানে আবার লাফিয়ে যাব। এর পরে, আমরা স্ট্যাক ( 'a) এ একটি চাপ দিই , তারপরে আমরা এটির সদৃশ করব এবং ব্যবহারকারীর ( d,) থেকে একটি অক্ষর পড়ি read যদি দুটি অক্ষর সমান না হয় ( =!), আমরা "ক্র্যাশ" ( $) করি এবং ক্যাচ চিহ্নটিতে ফিরে যাই । অন্যথায়, আমরা অন্য "ক" টিপুন এবং এটি মুদ্রণ করি, তারপরে আমরা বর্তমান সময় নির্ধারণ করি ( 'apT)।

তারপরে আমরা আমাদের "মেইন লুপ" প্রবেশ করি: আমরা বর্তমানের চরিত্রটিকে "বৃদ্ধি" এবং "বর্ধন" অক্ষর ( 'apToIc) দেব, তারপরে আমরা এটিকে সদৃশ করব, একটি নতুন অক্ষর পড়ি, তুলনা করি এবং অক্ষরগুলি অভিন্ন না হলে "ক্র্যাশ" হয় ( d,=!$)। যদি আমরা ক্র্যাশ না করি তবে আমরা বর্তমান চরিত্রটিকে "জেড" ( d'z=|) এর সাথে তুলনা করি , যদি এটি সমান না হয়, আমরা অক্ষরটি মুদ্রণ করি, তবে আমরা একটি 1 টি চাপি এবং "শর্তসাপেক্ষে" (এই ক্ষেত্রে: সর্বদা) ঝাঁপ দাও শুধুমাত্র oকোডে (আমাদের মূল লুপের শুরু)। যদি এটি z এর সমান হয় তবে আমরা উপরের কিছু ফাঁকা জায়গায় অনুভূমিকভাবে মিরর করেছিলাম। আমরা "জেড" মুদ্রণ করি, তারপরে বর্তমান সময়টিকে (শুরুর সময়কে বিয়োগ করে; t) চাপুন এবং তারপরে 91+3Fএটির মাধ্যমে 1000 সংখ্যা (তৃতীয় শক্তিতে 10 বৃদ্ধি করে অর্জিত ; ) গুন করব (কারণ আমরা সেকেন্ড পেয়েছি, মিলিসেকেন্ড নয়)। তারপরে আমরা একটি নতুন লাইন, সময় এবং প্রস্থান প্রিন্ট করি (pX)।

যদি আমরা কখনও ক্রাশ হয় (ব্যবহারকারীর দ্বারা খারাপ ইনপুট), আমরা শুরুতে সমস্ত পথে ঝাঁপিয়ে পড়ি। যেহেতু এখন আমাদের স্ট্যাকের কিছু সত্যবাদী মান থাকবে, তাই আমরা অনুভূমিকভাবে মিররটি আড়াআড়ি করব u, যা আমরা যে দিকে এগিয়ে চলেছি সেই দিকটিকে বিপরীত করে দেয় na একটি নতুন লাইন অক্ষর "Fail"মুদ্রণ করে, তারপরে আমরা স্ট্যাকটি চাপি, প্রিন্ট করব এবং প্রস্থান করব ( pX)।


1

গণিত (নোটবুক এক্সপ্রেশন), 248 বাইট

DynamicModule[{x={},s=0,t=0},EventHandler[Framed@Dynamic[If[x=={"a"}&&s<1,s=SessionTime[]];Which[x==a,If[t==0,t=SessionTime[]-s];1000t,x==a~Take~Length@x,""<>x,1>0,"Fail"]],Table[{"KeyDown",c}:>x~AppendTo~CurrentValue@"EventKey",{c,a=Alphabet[]}]]]

কিভাবে এটা কাজ করে

DynamicModule[{x={},s=0,t=0},
  EventHandler[
    Framed@Dynamic[
      If[x=={"a"} && s<1,s=SessionTime[]];
      Which[
        x==a,If[t==0,t=SessionTime[]-s];1000t,
        x==a~Take~Length@x,""<>x,
        1>0,"Fail"]],
    Table[{"KeyDown",c}:>x~AppendTo~CurrentValue@"EventKey",
      {c,a=Alphabet[]}]]]

একটি DynamicModuleএমন একটি EventHandlerযা ছোট অক্ষরের কীপ্রেসগুলিতে সাড়া দেয়। ভেরিয়েবলগুলি x, sএবং tএখনও পর্যন্ত চাপানো অক্ষরগুলি যথাক্রমে শুরুর সময় এবং শেষ সময়টি ধরে রাখে। xসমান হওয়ার বিষয়টি লক্ষ্য করার সাথে সাথে {"a"}আমরা সময়টি শুরু করি; আমরা হয় মোট ব্যয়কৃত সময় বা এ পর্যন্ত নির্মিত স্ট্রিং বা "Fail"কোন শর্তটি পূরণ করা হয় তার উপর নির্ভর করে প্রদর্শন করি।

আমরা সাথে অন্য বাইট বাঁচাতে পারে t<1বদলে t==0যদি আমরা অনুমান করতে পারেন কেউ কিছু ফাস্ট কম এক সেকেন্ডের মধ্যে বর্ণমালা টাইপ করতে যথেষ্ট :)

আপনি যদি গাণিতিক নোটবুকটিতে এটি চেষ্টা করে দেখছেন তবে মনে রাখবেন আপনার কীপ্রেসগুলি নিবন্ধিত হওয়ার আগে আপনাকে ফ্রেমের ভিতরে ক্লিক করতে হবে। (এ কারণেই আমাদের ফ্রেমটি শুরু হওয়া দরকার; এটি যদি Framedনা থাকে তবে কীটি চাপলে পুরো সিলেক্টেডটি পরিবর্তিত হয়, তাই এটি নির্বাচন করা বন্ধ করে দেয় এবং আপনাকে আবার ক্লিক করতে হবে))


1

সি #, 154 152 + 13 = 165 বাইট

আইব 4 বি টি টিউর মন্তব্যে 2 বাইট সংরক্ষণ করা হয়েছে

x=>{
  long t=0,c=97;
  for(;Console.ReadKey().KeyChar==c++&&c<123;t=t<1?DateTime.Now.Ticks:t);
  Console.Write(c>122?"\n"+(DateTime.Now.Ticks-t)/1e4:"\nFail");
}

উপরের কোডটিতে কোনও স্ক্রোলবার ছাড়াই এটি SE এ ফিট করার জন্য সাদা স্থান রয়েছে। হোয়াইটস্পেস বাইট গণনার অংশ নয়

এবং 13 বাইট জন্য using System;

এটি আইবি 4 বিটিটির সংস্করণের মতো তবে নিম্নলিখিত পার্থক্যগুলির সাথে:

  • ডেটটাইমকে দীর্ঘ হিসাবে সংরক্ষণ করা, আমাদের দীর্ঘতর করার অনুমতি দেয় cএবং সংক্ষিপ্ত বিবৃতি ঘোষণা করে

  • লুপের জন্য পৃথক বিরতির প্রয়োজন নেই

  • $"interpreted strings"মিলি সেকেন্ডে এটির জন্য প্রয়োজনীয় "\ n" যুক্ত করে বনামকে ইনলাইনটির জন্য স্ট্রিং তৈরি করতে ব্যবহার করা আসলে সংক্ষিপ্ত নয় if

  • একটি forলুপ ব্যবহার করা কখনও কখনও আমাদের কিছু সময়ের জন্য অক্ষর সংরক্ষণ করতে দেয়, যদিও আমি মনে করি এটি সমতুল্যর চেয়ে বেশি সঞ্চয় করতে পারে নাwhile

আইবি 4 বিটিটু থেকে:

  • s=s==0হয়ে উঠতে পারে s=s<1, c==123হয়ে যেতে পারেc>122

Ungolfed

long t=0,c=97;

for (;                                         //no loop vars declared
  Console.ReadKey().KeyChar == c++ && c < 123; //loop test
  t = t < 1 ? DateTime.Now.Ticks : t          //post-loop assigns
) ;                                            //empty loop body!

//now just need to turn ticks into millis, 10,000 ticks per millis
Console.Write(c>122?"\n"+(DateTime.Now.Ticks-t)/1e4:"\nFail");

আপনি কীভাবে ব্যবহার করেছেন তা নিয়ে দুর্দান্ত সমাধান DateTime। আপনি একটি দম্পতি আরো সংরক্ষণ করতে পারবেন পরিবর্তন করে বাইট s=s==0থেকে s=s<1(সত্য যে গুলি নেতিবাচক হবে না গণনা), এবং পরিবর্তন i==123করার i>122
আইয়বি 4 বিটিটি

এছাড়াও, এটিও পরীক্ষা করা হয়েছে? যেমন আমি দেখেছি যে i<123আগে যেতে হয়েছিল ReadKey(), অন্যথায় এটি সময় প্রদর্শনের আগে z এর পরে অন্য কোনও চরিত্রের জন্য অপেক্ষা করে।
আইয়ব 4 বিটিটু

অদ্ভুত, কারণ বর্ণমালাটির শেষে, zরিডকি-কিচারের 122 রিটার্ন হওয়া উচিত যখন ব্যবহারকারী টাইপ করে z, c 122 হয়, সুতরাং 'z' == 122সফল হয়, সি এর পরে বৃদ্ধি করা হয়, তারপরে সি (এখন 123) পরীক্ষা করা হয় c<123এবং ব্যর্থ হয় লুপ .. ?
Caius Jard 10

আপনি ঠিক বলেছেন, আমি c++যখন ইনক্রিমেন্টটি দেখছিলাম তখন আমি মিস করেছি। যাইহোক, আমি কেবল এটি চেষ্টা করেছি এবং আমি abcdefghijklmnopqrstuvwxysএটি টাইপ করলে ব্যর্থ হওয়ার পরিবর্তে সময় দেয়। আমি বিশ্বাস করি তার কারণ হল, cএখনও বৃদ্ধি যদিও KeyCharচেক ব্যর্থ হয়, তাই ক্ষণস্থায়ী c>122চেক।
আইয়বি 4 বিটিটি

ভাল কথা - সম্ভবত ++ কে সি <123 চেক এ স্থানান্তর করা বাইটকাউন্টটি একই রাখবে এবং শেষ চরটি ভুল হলে সিটিকে বাড়ানো থেকে আটকাবে - এখনই ডিবাগ করার সময় নেই, তবে আমি এটি একবার দেখে নিই! চিয়ার্স :)
Caius Jard

0

Processing.org 133 142

প্রথম কোডটি প্রস্থান করে নি

char k=97;int m;void draw(){if(key==k){m=m<1?millis():m;print(key=k++,k>122?"\n"+(millis()-m):"");}if(m>0&&key!=k-1){print("\nFail");exit();}}

0

জিসিসি, উইন্ডোজ, 98 বাইট

t;main(i){for(;i++<27;t=t?:clock())if(95+i-getche())return puts("\nFail");printf("\n%d",clock()-t);}

প্রথম কীটির জন্য তাত্ক্ষণিকভাবে কোনও ইনপুট দরকার নেই

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.