ストップウォッチを実装する


23

以下に説明するように、経過時間を秒と分で表示する単純なデジタルストップウォッチを実装します。

重要

ディスプレイコントロールの両方のセクションをお読みください!

表示

経過時間はMM:SS、以前に表示された時間文字列を「その場で」置き換えることにより、形式で表示する必要があります(画面の全体または一部をクリアすることもできます)。

ストップウォッチは少なくとも1秒ごとに更新する必要があります。

例:

0分0秒

00:00

0分33秒

00:33

1分50秒

01:50

最初は、「00:00」または範囲[00:00-59:59]の他の値で開始できます。

ストップウォッチがに到達すると59:59、リセットし00:00て新たに続行する必要があります。

一般的なパターンに従っている限り、(10進数の代わりに)別の基数、または必要に応じて別の数字システムを使用できます。

たとえば、次の13:03ように表示できます。

小数

13:03

16進数

0D:03

Base64

N:D

クォーター虚数ベース

10101:3

ローマ数字

XIII:III

10進数以外の数字システム/ベースを使用する場合は、印刷可能なASCII(またはUnicode)文字を使用してエンコードする必要があります。たとえば、分と秒に2つのバイナリ(印刷不可)バイトを使用することはできません。

数値システムで許可されている場合は、出力に適切なゼロを左詰めする必要もあります。

区切り文字:を他の印刷可能な文字(数字を含む)に置き換えることも可能です。

コントロール

ストップウォッチは、ユーザーが「control」キーを押して明示的に開始するまで、一時停止状態で開始、この状態を維持する必要あります(以下を参照)。

ストップウォッチがカウントしている間に、ユーザが押下し、場合「コントロール」再度キーを、ストップウォッチべき一時停止されるまで、(現在の時刻を維持する)「コントロール」キーを一回押下されます。

「コントロール」キーを1回のキーストローク、例えばすることができs、例えば、またはキーの組み合わせCtrl+Shift+Xが、それは例えば、順番に複数のキーを押すと、「アトミック」でなければなりませんs、その後Enter、されて許可されていません

ストップウォッチを一時停止および再開するには、同じ「コントロール」キー(または組み合わせ)を使用する必要があります。

特定の「コントロール」キーを使用する必要があります。つまり、「任意のキー」は許可されません。

または、「コントロール」のキーを押す代わりに、シングルクリックまたはダブルマウスクリックを使用できます。


ルール

  • これはで、バイト単位の最短回答が勝ちます。
  • 標準的なコードとゴルフの抜け穴が適用されます。
  • プログラムは(理論的には)永久に実行可能でなければなりません。

「コントロール」キーを入力できますか?
-Loovjo

@Loovjoはい、Enterを含め、単一のキーまたはキーの組み合わせで実行できます(同じキーを使用して一時停止してから再開できる場合)。
ツェッペリン


1
1秒未満の粒度が必要ですか?つまり、ユーザー00:05が印刷後に約7000ミリ秒一時停止し、ある時点で再開する場合00:06、再開キーを押してから3000ミリ秒後に表示する必要がありますか、または再開キーを押してから1秒後に印刷しても大丈夫ですか?
smls

@smls再開後、1秒間待つことは問題ありません。
ツェッペリン

回答:


8

SmileBASIC、86 77 71バイト

@L
N=N!=DIALOG(FORMAT$("%02D:%02D",F/60MOD 60,F MOD 60),,,N)F=F+1GOTO@L

DIALOGタッチスクリーンにテキストボックスを表示します。Nは、テキストボックスが消えるまでに画面上に留まる秒数です。場合N0、ユーザーがタッチスクリーン上のボタンを押すまで、それがまま。

DIALOG1ユーザーがボタンを押した0かどうか、およびボタンが自動的に閉じたかどうかを返します。したがって、ユーザーが一時停止ボタンを押すと、が戻り1、表示時間がに設定され0、ストップウォッチが一時停止します。ユーザーが再度ボタンを押した後、表示時間をに戻し1、タイマーを再開します。基本的に、たびにDIALOG戻って1、表示時間が切り替えられる10使用!=の両方の入力が1または0である限り、論理XORにeqivilantあります。


これはすごいですね!それがどのように機能するかのアニメーション「スクリーンキャスト」も提供できれば、それは大歓迎です!
ツェッペリン

OK、すぐにやる
12Me21

このエミュレータでテストすることもできます:citra-emu.org/game/smilebasic
roblogic

9

Python 2、167 129バイト

例外を使用してキャッチするというMaltysenのアイデアctrl-c使用することで、主に-36バイト-クレジットを与えてください!
-4 DLoscおかげ(INITバイトnb0にではなくf()
FlipTack(使用のおかげ-1バイトp^=1ではなくp=1-p
-2フェリペナルディバティスタ(削除精度指定子)のおかげでバイト

import time
f=time.time
n=b=p=0
while 1:
 try:n=[n,f()][p];t=n-b;print'\r%02d:%02d'%(t/60%60,t%60),
 except:b=[b-n+f(),b][p];p^=1

以下のオリジナルと同じように機能しますが、コントロールキーシーケンスがctrl+c
(Windows
7、64 ビットのPython 2.7.8でテスト済み、Linux、64ビットのPython 2.7.13でブライアンミントンによってテスト済み)

*また、ワンライナーとしてif取得するために、リスト検索へのステートメントを折りたたみましたtry

私のオリジナル:

import time,msvcrt as m
f=time.time
n=b=p=0
while 1:
 if m.kbhit()and m.getch()==b'p':b=[b-n+f(),b][p];p^=1
 if p:n=f()
 t=n-b;print'\r%0.2d:%0.2d'%(t/60%60,t%60),

(Windows 7、64ビット上のPython 2.7.8で私がテストしました-ただし、このコードはmsvcrtライブラリを使用しているためWindows固有です)

コントロールキーは「p」です。

nそしてb、起動時に同じ値に初期化され、「オフセット」が0になります。p0に初期化され、一時停止状態を示します。

コントロールキーを押すたびに、の値pが切り替わります。一時停止状態からアクティブ状態に切り替えるとb、前のアクティブ状態からの現在のオフセットを保持する新しい値に更新されb-nます。

アクティブ状態の間、をn呼び出すことにより、現在の時刻に繰り返し更新されtime.time()ます。

nとはbt後(小数部を含む)秒数の合計がアクティブ状態(S)の間の経過です。

その後t/60、経過した分が経過し、分と秒のそれぞれがmod 60で表示されます(t/60%60,t%60)。整数部分の文字列フォーマットを使用して、先頭にゼロが追加されます'...%0.2d...',最初のアイテムの先頭にキャリッジリターン()があるタプル(末尾)を印刷する\rと、以前に印刷されたテキストが上書きされます。


ああ、良いキャッチ、私はもともと持って^=いたが、製剤中のある時点で切り替えました。
ジョナサンアラン

@DLosc確かに、感謝...
ジョナサン・アラン

Windows固有ではありません。Python 2.7.13を搭載したLinux 64ビットでこれをテストしたところ、動作しました。(Ctrl-Cのコントロールキーを使用)
ブライアンミントン

@BrianMinton教えてくれてありがとう!
ジョナサンアラン

必要性何.では%0.2d?それはとしてだけで正常に動作%02d
フェリペ・ナルディバティスタ

6

Pythonの- 160の 159 143バイト

18バイト節約してくれた@JonathanAllanに感謝します!

組み込みライブラリのみを使用するため、コントロールキーはctrl-cでキャッチされますexcept keyboardInterrupt

import time
Z=0
print'00:00'
while 1:exec"try:\n while 1:\n  %s\nexcept:1\n"*2%(1,"print'\033c%02d:%02d'%divmod(Z%3600,60);Z+=1;time.sleep(1)")

いいね。多分それだけで短くなると思いますexcept:。私はそれをやって私の作業バージョンを持っている...
ジョナサン・アラン

@JonathanAllanなんてこった、それができるとは知らなかった。
マルティセン

5

bash + Unixユーティリティ、90または93バイト

90バイトバージョン:

trap d=\$[!d] 2;for((n=0;;)){((d|!n))&&dc<<<DP60dod*d$n\r%+n|colrm 1 4&&: $[n++];sleep 1;}

93バイトバージョン:

trap d=\$[!d] 2;for((n=0;;)){((d|!n))&&dc<<<DP60dod*$n+n|colrm 1 4&&n=$[(n+1)%3600];sleep 1;}

Ctrl-Cは再開/一時停止の文字です。スペースは、分と秒の間の区切り文字です。

2つのバージョンの違いは、90バイトのプログラムが2 ^ 63秒間動作することです(この時点で、bashは整数オーバーフローを引き起こします)。

93バイトバージョンは、本当に永遠に機能します。

元の問題には、「プログラムは(理論的には)永遠に実行できなければならない」という要件が含まれていました。

その要件を満たすために2 ^ 63秒間実行するだけで十分な場合、90バイトのソリューションが機能します。その期間は宇宙の年齢の20倍以上です!

プログラムをそれより長く実行する必要がある場合は、93バイトのソリューションを使用する必要があります。


おそらく、このソリューションは、少なくとも投稿された他のいくつかのソリューションと同様に、実際の経過時間に非常にゆっくり遅れることを指摘する必要があります。このスリッページは、プログラムがループの本体の各実行間で1秒間スリープしているが、ループの本体の実行に少し時間がかかるためです。これは実際には重要ではありません。


これは、「一時停止解除」するまで、画面に初期値を表示しないようです。
ツェッペリン

「ストップウォッチは一時停止状態で起動し、ユーザーが「control」キーを押して明示的に起動するまでこの状態を維持する必要があります(下記参照)。」見逃した仕様はありますか?
ミッチェルスペクター

うん、これは正しいですが、初期値を表示する必要があります。これは、最初にInitially, you can start with '00:00' or with any other value in range [00:00-59:59]「control」を押すまで画面に表示されたままになります。これを明確に定式化できなかった場合は申し訳ありません!
ツェッペリン

OK、それは理にかなっています-私はそれを修正します。
ミッチェルスペクター

1
今すべてがよさそうだ!
ツェッペリン

5

QBasic、213 211バイト

コントロールキーはタブです。これを実行したままにすると、ラップトップの火災が発生する場合があります。あなたは警告されました。

DO
WHILE k$<>CHR$(9)
k$=INKEY$
LOCATE 1
?CHR$(48+m\10);CHR$(48+(m MOD 10));":";CHR$(48+(d MOD 60)\10);CHR$(48+(d MOD 10))
IF r THEN
n=TIMER
d=v+n-b+86400
m=d\60MOD 60
END IF
WEND
k$=""
v=v+n-b
r=1-r
b=TIMER
LOOP

ここでは、10、15、および20秒で一時停止します。

ストップウォッチの実行

非ゴルフとコメント

' Outer loop runs forever
DO
  ' The WHILE-WEND loop runs until tab is pressed
  WHILE key$ <> CHR$(9)
    key$ = INKEY$
    ' Output the stopwatch value at top left of screen
    LOCATE 1
    ' Unfortunately, QBasic's PRINT USING doesn't have a format for printing
    ' with leading zeros, so we have to do it manually by printing the
    ' 10s digit and the 1s digit
    PRINT CHR$(48 + minute \ 10); CHR$(48 + (minute MOD 10));
    PRINT ":";
    PRINT CHR$(48 + second \ 10); CHR$(48 + (second MOD 10))
    ' Update the current time if the running flag is set
    IF running THEN now = TIMER
    ' Take the difference between now and the last time we started the
    ' stopwatch, plus the amount of saved time from previous runs,
    ' plus 86400 to account for the possibility of running over midnight
    ' (since TIMER is the number of seconds since midnight, and QBasic's
    ' MOD doesn't handle negative values like we would need it to)
    diff = saved + now - lastStarted + 86400
    second = diff MOD 60
    minute = diff \ 60 MOD 60
  WEND
  ' If we're outside the WHILE loop, the user pressed tab
  key$ = ""
  ' Add the previous run's time to the saved amount
  saved = saved + now - lastStarted
  ' Toggle running between 0 and 1
  running = 1 - running
  ' If we're starting, we want to put the current time in lastStarted;
  ' if we're stopping, it doesn't matter
  lastStarted = TIMER
LOOP

の値TIMERは浮動小数点であることに注意してください。これは、以来、出力には影響を与えないMOD\切り捨て整数に。しかし、それは節約された時間の量に正確さを追加します:ティックの直前にタイマーを一時停止すると、数秒以内に変化することを再起動するとわかります。


4

バッチ、132バイト

set/ar=0,m=s=100
:l
cls
@choice/t 1 /d y /m %m:~1%:%s:~1% /n
set/as+=r,m+=c=s/160,s-=c*60,m-=m/160*60,r^^=%errorlevel%-1
goto l

を押すnと、タイマーが一時停止します。出力のちらつきは、3(または4)バイトのコストで削減できます。


4

純粋なbash、141バイト

set -m
while ! read -t 1;do printf '\r%02i:%02i' $[s=s>3598?0:s+1,s/60] $[s%60];done&trap 'fg>/dev/null' TSTP
printf '00:00'
kill -STOP $!
read

これはBashビルトインのみを使用します(外部ツールは使用しません)。制御文字はCtrl-Zであるため、標準SIGTSTP処理はストップウォッチを一時停止します。

場合はCtrl-Zサブシェルが前景化されている間押され、それが実行を一時停止し、それが静かに待ちます前景に外部スクリプトを返します。外部スクリプトがフォアグラウンドになっている場合、トラップハンドラーはサブシェルの実行を再開し、再びカウントアップします。


3

ChromeコンソールのJavascript、143バイト

f=document,m=s=g=i=0;setInterval(()=>{if(g%2){m=(i/60|0)%60;s=i++%60}f.write((m>9?m:'0'+m)+':'+(s>9?s:'0'+s));f.close();f.onclick=()=>g++},1e3)

コンソールに入力すると、カウンタが00:00に初期化され、ドキュメントでキーを押すコントロールが有効になります。

マジックはあまり進行していません。特に(i/60)|0フロアの数

Chromeコンソールで完了してテスト済み


いい答えだ。引数を受け取らない関数に仮引数を使用することでいくつかのバイトを削除できます。また、setIntervalの最初の引数をコードを含む文字列で置き換えることができます。
ルーク

1
132 B:m=s=g=i=0;(f=document).onclick=_=>g++;setInterval("g%2&&f.close(f.write(`${(m=i/60%60|0)>9?m:'0'+m}:`+((s=i++%60)>9?s:'0'+s)))",1e3)
ルーク

ああ、いいね:)ここでいくつかのことを学びました。間隔と_ => g ++の文字列。ありがとう:)
gzbz

3

HTML + JavaScript(ES6)、191 192 187 183 174バイト

<b onclick='b=b?clearInterval(b):setInterval("a.innerHTML=`${(d=(((c=a.innerHTML.split`:`)[1]>58)+c[0])%60)>9?d:`0`+d}:${(e=++c[1]%60)>9?e:`0`+e}",1e3)'onload='b=0'id=a>00:00

説明

タイマーをクリックして、ストップウォッチを開始または一時停止します。そのため、シングルクリックがコントロールキーです。2つの値の間の区切り文字はコロンです。

ユーザーがクリックをクリックするたびに、の値bがチェックされます。に0評価されるに初期化されるfalseため、コードの文字列は1000ミリ秒ごとに評価されます。これにより、変数が間隔のIDに設定されるため、後で停止できます。b数値が含まれている場合、評価はtrueであるため、間隔は停止します。これにより値が返されるundefinedため、サイクルが継続します。

コードの文字列は、id a(ストップウォッチ)を持つ要素のhtmlを変更します。最初に分は、前のストップウォッチ値を取得してコロンで分割し、分値を取得して解析されます。分値は、秒の値が59(58より大きい)でない場合は0、60を法とする場合は1増加します次に、この値が埋め込まれます。それからコロン、最後に秒が来ます。コードは単に古い値を取得し、それを1増やし、60を法として、オプションでそれを埋め込みます。


これはまったく機能しないようです。ReferenceError:dが定義されていません
アレクシスタイラー

また、onclickを使用しているため実際には必要ないため、href =#を削除することで数バイトを節約することもできます。
アレクシスタイラー

直しました。あなたが正しかったので、私もhrefを削除しました。ありがとう!
ルーク

onclickをbタグに入れて、答えでそう指定することはできませんか?

私はそれがうまくいくと思います。9B節約しました。どうもありがとう!
ルーク

3

C 309 179バイト

f(){m=0,s=0;A: while(getchar()^'\n'){if(s++==59){if(m++==59)m=0;s=0;}printf("\r%02d:%02d",m,s);sleep(1);system("clear");if(getchar()=='\n'){break;}}while(getchar()^'\n'){}goto A;}

ゴルフされていないバージョン:

void f()
{
   int m=0,s=0;

   A: while(getchar()^'\n')
      {           
       if(s++==59)
       {
         if(m++==59)
           m=0;

         s=0;
       }
       printf("\r%02d:%02d",m,s);
       sleep(1);  
       system("clear");

        if(getchar()=='\n')
        {
          break;
        }
      }

       while(getchar()^'\n')
       {}
       goto A ;
}

使用法:を押しEnterてストップウォッチを一時停止および再開します。

説明:

  • 待ってEnterキーストローク、break最初whileのループと次まで待っEnterています。
  • 次のEnterキーストロークで、goto最初にwhileループし、カウントを再開します。

これで、gotoCでのコーディングの習慣が悪いことがわかりましたが、別の方法を見つけることができませんでした。


コードはコンパイルされません。さらに、getchar()いくつかの文字が押されるまでブロックします。
G.スリーペン

Linuxマシンでコンパイルおよび実行
Abel Tom

おそらくゴルフバージョンはありませんが、ゴルフバージョンはありません。m=0,s=0;これらの変数をどこにも宣言しなかったため、すでに失敗しています。
G.スリーペン

3

Javascript、124バイト

s=i=1,setInterval("s&&(d=document).close(d.write(`0${i/60%60|0}:`.slice(-3)+`0${i++%60}`.slice(-2))),d.onclick=_=>s=!s",1e3)

「コントロールキー」とは、ドキュメントをクリックすることです。これをテストするには、コンソールまたは<script>タグ内のhtmlファイルにコードを貼り付けます。

説明:

let s = 1
let i = 1
setInterval(() => {
    //If s = true then check after the "&&" operator else false
    s && (d = document).close( //put the document variable inside the d variable, so now i don't need to use anymore the long word 'document, then i close the document
            d.write( //Write into the document the next string
                `0${i/60%60|0}:`.slice(-3) + `0${i++%60}`.slice(-2) //Here is the magic, here I update the 'i' variable and convert the 'i' value to minutes and seconds
            ) 
        ),
        d.onclick = _ => s = !s //Add onclick event to the document, if s = true then s = false, if s = false then s = true
}, 1e3) //1e3 = 1000

Chromeでテスト済み


1
サイトへようこそ!オンラインで試すなど、オンラインテストサイトへのリンクを編集することは可能でしょうか、他のユーザーがあなたの答えを確認できるように?
コイナーリンガーをケア

ありがとう@cairdcoinheringaahing、これはjsfiddleを使用しています:jsfiddle.net/xjw7o0ps
TheCopyright

2

PHP、94 91バイト

32はスペースバーのキーコードであると仮定します(おそらくそうではありません)。
現在、ncursesをテストする方法はありません。しかし、残りのコードは問題なく動作します。

for($s=[STDIN];;)echo date("\ri:s",$t+=$r^=stream_select($s,$n,$n,1)&&32==ncurses_getch());

で始まりますが00:00、一時停止が終了するとすぐに増分します

あなた(私のように)ncursesがない場合は、2番目のdateパラメーターを$t+=$r^=!rand(sleep(1),19);またはに置き換えることでテストできます$t+=$r^=++$x%20<1+sleep(1);。(sleep常に戻ります0。)

壊す

for($s=[STDIN];                     // set pointer for stream_select
    ;                               // infinite loop:
)
    echo date("\ri:s",                  // 5. print CR + time
        $t+=                            // 4. increment $t if watch is running
        $r^=                            // 3. then toggle pause
            stream_select($s,$n,$n,1)   // 1. wait 1 second for a keystroke
            &&32==ncurses_getch()       // 2. if keystroke, and key==space bar
    ;

2

C#220バイト

using static System.Console;
using static System.DateTime;
class P
{
    static void Main()
    {
        var l = Now;
        var d = l-l;
        for( var r = 1<0;;Write($"\r{d:mm\\:ss}"))
        {
            if (KeyAvailable&&ReadKey(1<2).KeyChar == 's')
            {
                l = Now;
                r = !r;
            }
            if (r)
                d -= l - (l = Now);
        }

    }
}

ゴルフ

using static System.Console;using static System.DateTime;class P{static void Main(){var l=Now;var d=l-l;for(var r=1<0;;Write($"\r{d:mm\\:ss}")){(KeyAvailable&&ReadKey(1<2).KeyChar=='s'){l=Now;r=!r;}if(r)d-=l-(l=Now);}}}

sキーを使用して開始/停止します。プログラム全体は、次を使用してTimeDeltaを記憶することによって機能します。DateTime.Now

ここでのほとんどのC#-Magicは、C#7.0機能に由来していますusing static


2

バッシュ、65バイト

trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}

正しく動作するにはファイルスクリプトに書き込む必要があることに注意してください。

bash -c 'trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}'

それを説明するための拡張バージョン:

trap d=\$[!d] 2                     # flip d for each INT (ctrl-c) signal.
for((n=0;;)){                       # repeat forever the code inside the {...}
                                    # The n=0 is not strictly needed.
    printf "\r%(%M:%S)T" "$[n+=d]"  # Print Minute:Second string calculated from 
                                    # the n value, increment by the value of d.
                                    # If IFS is not numeric (0-9), then, the
                                    # quotes around "$[n+=d]" could be removed.
    sleep 1                         # wait for 1 second.
}

%(...)Tprintf の形式は、bash 5以降で有効です。


動作しません。00:00ヒットするとカウンターを印刷してインクリメントしますCtrl-C。タイマーのアニメーションはありません。(bash 5.0.7でテスト済み)
roblogic

1
コードをスクリプトに書きましたか?または、試してください:bash -c 'trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}'。@roblogic
アイザック

ああ、うまくいきました!スクリプトはbash -c:) で実行する必要があります
roblogic

1

C(gcc)121 115バイト

p,r;g(){r^=1;}main(t,b){for(b=time(signal(2,g));;r?p=t:(b+=t!=p))t=time(0)-b,printf("\r%02d:%02d  ",t/60%60,t%60);}

オンラインでお試しください!

SIGINTのシグナルハンドラーを設定します。これは、control-Cを押すとトリガーされます。で時間オフセットを保持しb、壁時計時間から時間オフセットを引いた値を表示します。一時停止している場合は、壁時計がカチカチと音を立てるたびにタイムベースをインクリメントして、表示されている時間を固定します。

6バイトを削る@ceilingcatに感謝します!


0

Zsh + Gnu日付、242バイト

1/100秒を特徴としています!インタラクティブな端末が必要ですが、とにかくTIOリンクがあります。
ヒットEnterしてタイマーを開始/停止します。Ctrl-C出る。

u(){p=`gdate +%s`;q=`gdate +%N`;}
f(){read -t0.01&&{read;break};unset REPLY}
g(){while :;{u;t=$[p-a];s=$[t%60];m=$[(t%3600-s)/60]
echo "\r`printf %02d:%02d $m $s`.$q[1,2]\c";f;}}
<<<ready;read;u;a=$p
while :;{f;echo "\r\e[2A\c";u;a=$[p-t];g;}

コメント(少し古い):

u()echo $[`gdate +%s%N`/1000]       # fn:unix timestamp extended to µs
v()gdate +%s                        # fn:unix time, in s
f(){read -t0.01 -r&&{read -r;break;} # fn:listens for "Enter"
                      ;unset REPLY;}

g(){while :;                        # fn:rolling stopwatch
    {q=`u`;t=$[`v`-a]               #    t=time diff from baseline (s)
    ;echo "\r`printf %02d:%02d      #    format output
    $[(t%3600-s)/60] $s`            #    minutes:seconds
    .${q:10:2}\c";                  #    .xx = partial seconds
    f;}}                            #    listen for "Enter"

                                    # Execution starts here!
<<<ready;read;u;a=$p                # Wait for "Enter"; get baseline $a

while :;{                           # Main program loop
         f;                         # listen for an "Enter"
           echo "\r\e[2A\c"         # go up 1 line of the console
a=$[`v`-t]                          # reset the baseline
                ;g;}                # begin the stopwatch

@Isaac、簡潔さと優雅さのためにあなたの答えを打ち負かす方法はないので、代わりに機能を追加すると思った...
roblogic

1
それは素晴らしい目標です@roblogic :-) .... ....あなたのコードをまだ理解しています....
Isaac

0

Commodore BASIC(C64 / TheC64 Mini、VIC-20、PET、C16 / + 4)-147トークン化されたBASICバイト

 0?"{clear}":geta$:ifa$<>" "thengoto
 1ti$="000000"
 2fori=.to1:?"{home}"mid$(ti$,3,2)":"mid$(ti$,5,2):geta$:b$=ti$:i=-(a$=" "):nE:pO198,.
 3geta$:ifa$<>" "then3
 4ti$=b$:goto2

{clear}リストであるにSHIFT+CLR/HOME開口引用符を1つのPETSCII文字として出力以下、一方{home}CLR/HOME開口引用符を次のと同じ条件でシフトせずにキー。

スペースキーをコントロールキーとして使用します。

BASIC 7でCommodore 128を使用するには、次の行のリストを変更します。

 0?"{clear}":geta$:ifa$<>" "thengoto0
 2fori=.to1:?"{home}"mid$(ti$,3,2)":"mid$(ti$,5,2):geta$:b$=ti$:i=-(a$=" "):nE:poK198,.

カウントに余分な7つのトークンを追加します(すべての数値は7バイトとしてBASICに格納されるためgoto10、8トークン化されたバイトgotoは1だけです)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.