スクロールマーキーにする


15

前書き

80年代のro音を覚えていますか?30年前のようにね 携帯電話、インターネット、ATM、蛍光灯(それは何でしたか!)、スクロールマーキーはありません!ダメダメダメ!オンラインではなく、実際のもの、LEDライト付き。

スクロールマーキー

ノスタルジックな雰囲気なので、スクロールマーキーを作成してください。

チャレンジ

1行の文字列を入力できるプログラムを作成します。プログラムでは、必要に応じてテキストを繰り返す80文字幅のスクロールマーキーを作成する必要があります。

ルール

  • ユーザーは、入力としてプログラムに文字列を入力できる必要があります。文字列は、コマンドラインパラメータ、またはプログラムの実行中に入力された文字列です。
  • プログラムは、正確に80文字(可視)の文字列を継続的に印刷する必要があります。
  • 文字列は、0.1秒ごとに更新する必要があり(多かれ少なかれ、タイミングを計りません)、反復ごとに文字を1ポジション左にシフトします。
  • 文字列は「回転します」。ユーザーが指定した文字列の最後に、文字列の別のインスタンスが表示される必要があります。
  • プログラムは、改行なしで出力を1行で印刷する必要があります(「\ n」の代わりに「\ r」を使用します)
  • プログラムは広告を無限に実行する必要がありますユーザーが割り込むまで、。
  • これはcodegolfなので、バイト単位の最短コードが優先されます。
  • 10%のボーナスがあります(四捨五入アップ黒色の背景に赤色で印刷するための次の整数には)。
  • 標準の抜け穴が適用されます。

Python 2.7のリファレンス実装

このプログラムはゴルフではありませんが、参照実装(およびサイズの上限)を提供します。

import time,sys
s=raw_input()*99
while 1:
    for i in range(80):
        print s[i:i+80]+'\r',
        sys.stdout.flush()
        time.sleep(0.1)

@ mbomb007は似ていますが、同じではありません。また、この質問はそのように見えます(インスピレーションに適しています)が、いくつかの点で異なっていると思います。また、スコア(コード長)が非常に残念でした。私たちはもっと良くできると本当に思っています!
agtoever

多分コードゴルフ+人気コンテストとして?
SuperJedi224

正確に 100ミリ秒待つ必要がありますか?
デニス

1
@Dennisまあ、多かれ少なかれ。文字を保存するために99に設定しても問題ありません。他の命令の実行には0.01秒かかるとしましょう。:
agtoever

1
入力文字列が80文字を超える場合はどうなりますか?あなたのリファレンス実装、および私の答え、S [80:160]を取得し、その後、戻っsのジャンプ[0 ..]彼らは長い文字列、例えばの入力の最後に印刷決して1 2 3 4 5 6 7 8 9 10 11 ... 30056程度後のオフカット
TessellatingHeckler

回答:


4

CJam、31バイト

l80*{Dco_80<o(+es99+{es1$<}g;}h

正確に100ミリ秒待機します。

オンラインインタープリターはプログラムを終了した後にのみ出力を表示するため、これは公式のJavaインタープリターでのみ機能します。

黒の背景に赤のテキストを40(または39)バイトで入力すると、スコアは36になります。

0000000: 6c 38 30 2a 7b 22 0d 1b 5b 33 31 3b 34 30 6d 22 6f 5f  l80*{"..[31;40m"o_
0000012: 38 30 3c 6f 28 2b 65 73 39 39 2b 7b 65 73 31 24 3c 7d  80<o(+es99+{es1$<}
0000024: 67 3b 7d 68                                            g;}h

使い方

l80*                             Read a line and repeat it 80 times.
    {                        }h  Do:
     Dco                           Print the character with code point 13.
        _80<o                      Print the first 80 characters of the string.
             (+                    Rotate the string one charcter to the left.
               es99+               Push the current time (ms) plus 99.
                    {     }g       Do:
                     es1$<           Compare the current time with the sum.
                                     Repeat the loop if 99 or less ms have passed.
                            ;      Discard the time stamp.
                                 Repeat the loop.

彼らはこれより短くならないだろうと思う。おめでとう!
-agtoever

tlike思える;の説明では、ずれている
ヴェン

@Ven Fixed、ありがとう!
デニス

9

PowerShell、118 113 112 108 102 101 99 96-10%= 86

コード

$s=(Read-Host)*180;for(){Write-Host($s.substring(($i=++$i%80),80)+"`r")-N -F R -B 0;sleep -m 99}

現在、最初のループは2番目の文字で始まるという警告があります。ルールは、文字列の先頭から開始する必要があるとは言っておらず、最初のものは全体的に含まれているので、それで問題ありません。どうにかして100文字になります-編集:@ConnorLSWに感謝します。編集で100未満になります。

説明書

  1. PowerShellを実行します(通常のコンソール、PowerShell ISEでは機能しません)
  2. 単一行バージョンをPoSHに貼り付け、Enterキーを押します
  3. メッセージを入力して、Enterキーを押します
  4. 中断するにはCtrl-C

出力

PowerShellマーキーの出力例

ノート

変数名とパラメーターが少し記入された、より読みやすいバージョン:

$test = (Read-Host) * 180
for () {
    Write-Host ($text.substring(($i=++$i%80), 80)+"`r") -NoNewLine -ForegroundColor Red -BackgroundColor Black
    sleep -Miliseconds 99
}
  • パラメーター-F Rは、一意になるのに十分な長さである必要があるため、たとえば、Red ForegroundColorを設定するのに十分一意です。
  • 「黒」は「青」と比較して一意であるには「ブラ」でなければなりませんが-B 0、黒として解釈される色の列挙値0に設定します。

代替の、より「正しい」マーキー:

参照コードは80文字を超える文字列をうまく処理せず、メッセージ内の〜160文字を超える部分をスキップし、99 * len(string)文字ごとにグリッチをリセットします。たとえば、記号の幅が5文字の場合、次のようになります。

   here is my long test input
 0 |here |            
 1  |ere i|          ^^^^ never shown
 2   |re is|
 3    |e is |
 4     | is m|
 0 |here |
 1  |ere i|
    ...

このバージョンは、符号幅ではなくテキストの長さを法としてインデックス付けするため、文字列全体を実行します。106-10%= 95文字。

$l=($s=Read-Host).Length;for(){Write-Host(($s*160).substring(($i=++$i%$l),80)+"`r")-N -F R -B 0;sleep -m 99}

代替案:質問の.gifのように循環する記号、118-10%= 106

見た目が良いからです。

$s=' '*80+(read-host)+' '*80;for(){write-host($s.Substring(($i=++$i%($s.length-80)),80)+"`r")-N -F R -B 0;sleep -m 99}

Alternative sign example animation


1
私はこの答えがかなり古いことを知っていますが、この質問は現在、フロントページです- Bla0- Write-Host数字を色に解釈します。
COLSW

@ConnorLSWありがとう、100文字以下になりました!1年前にコメントを逃した理由がわからない(!)
TessellatingHeckler

心配しないで、いくつかのバイトを保存while(1)するfor()ように変更することもできると思います:)
colsw

@ConnorLSWので、できます。(おそらく、ほとんどのゴルフでそれを行うことができますが、それは私が普通に考えていることではありません)。
TessellatingHeckler

を使用しているときにfor()、変更$s=(Read-Host)*180;for(){するバイトをもう1つ保存できますfor($s=(Read-Host)*180){
Clijsters

6

Matlab、76バイト

ここでいいと思うのは、配列インデックスとしてベクトルを持つことができるということです。これは、対応する配列エントリのベクトルを返します。これにより、長さに関係なく、指定された文字列を簡単に追加できます。

a=input('');k=1:80;while 1;pause(.1);clc;k=mod(k+1,nnz(a));disp(a(k+1));end

結果:

enter image description here


で素敵なトリックclc。追加するのを忘れ's'input
ルイスメンドー

どういう意味ですか?私がアクセスしたMatlabバージョン(R2010b)にあるように、それは完全に正常に動作します。
flawr

1
現状では、引用符で文字列を入力する必要があります。文字列の内容を(qoutesなしで)直接入力するには、以下が必要ですa=input('','s')
ルイス・Mendo

今、私はその機能に気付いていませんでした。仕様ではこれを必要としないため、'入力として区切り文字列を要求することは問題ないと思います。多くの言語では文字列区切り文字が必要です。そうでない場合は、コマンドライン引数を文の形式(スペースで区切られた単語)を複数の引数として解釈します。
-flawr

4

QBasicを、116の 113バイト- 10%= 105 102

INPUT s$
COLOR 4
1CLS
FOR i=a TO a+79
?MID$(s$,i MOD LEN(s$)+1,1);
NEXT
?
a=a+1
t=TIMER+.1
2ON(TIMER<t)+2GOTO 2,1

Marquee demonstration

以下に、コメント付きのフォーマット済みバージョンを示します。

INPUT s$
COLOR 4   ' 4 is the color code for red (the background's already black)

1 CLS   ' CLear Screen (and mark this as line number 1)

' The variable a represents an offset from the beginning of the string
' As a numeric variable, it is 0 at the beginning of the program
FOR i = a TO a + 79
    ' Print i'th character mod string length (+ 1 because QBasic strings
    ' are 1-indexed)
    PRINT MID$(s$, i MOD LEN(s$) + 1, 1);
NEXT i
PRINT
a = a + 1

' Do a busy-wait for .1 seconds
' (Unfortunately, QBasic's SLEEP command only takes integer values)
' Set t to the time we want to stop waiting, .1 seconds in the future
t = TIMER + .1
' We want to stay on line number 2 while TIMER < t; once that condition is
' no longer true, we want to goto the top of the outer loop (line number 1)
' Since true is -1 and false is 0 in QBasic, adding 2 to the conditional
' gives 1 for true and 2 for false; we can pass these values to the
' ON ... GOTO statement to branch conditionally
2 ON (TIMER < t) + 2 GOTO 2, 1

いくつかのメモ:

  • PRINTアフターFORループが必要な理由はわかりません。CLSカーソルを毎回左上隅にリセットする必要があります。しかし、少なくともQB64では、余分なものPRINTを入れないと、マーキーは最初の行ではなく2行目になります。誰かがDosBoxなどでQBasicを設定している場合、そこで同じことが起こるのか、それともQB64のバグなのかを知りたいと思います。
  • このコードはTIMER、遅延を(深夜0時からの秒数)に依存しているため、小さな不具合があります。コードが深夜に実行されている場合、マーキーはスタックします。TIMERはリセットされ0、常にtそれ以降にます。

私の第一言語!とにかく、IIRC、QB 4.5では、印刷された文字列の最後のセミコロンは、PRINTステートメントがキャリッジリターンを印刷しないことを意味します。
bgStack15

@ bgStack15私も。:^ D問題は実際にはありませんPRINTが、-- CLSafterを使用するとCLS、前に何が印刷されたとしても、次のPRINTステートメントは1,1で出力されるはずです。代わりに、2,1で出力される状況に遭遇しました。
DLosc

4

Perl、99 98バイト(-10%= 89)

$|=@_=split('',pop);printf("\e[31m\r%.80s",join('',@_)x80)while select($a,$a,$a,.1)|push@_,shift@_

コマンドラインパラメータから入力を取得します。

perl marquee.pl "Welcome to Programming Puzzles & Code Golf "

3

pb、⌈(216 + 3)*0.9⌉= 198

インタープリターフラグ用に+3バイト d=1

c^w[Y=-1]{w[B!0]{>}t[X]<[X-79]w[X!0]{t[T-1]w[T=-1]{t[0]}<}vw[T=0]{^w[B!0]{t[B]^b[T]>v}<[X]^w[B!0]{t[B]vw[B!0]{>}b[T]<[X]^w[B=0]{>}b[0]>}v}}^w[1=1]{<[X-80]w[X!0]{<t[B]vb[T]^}w[B!0]{t[B]<b[T]>>}<[X]<t[B]w[B!0]{>}<b[T]}

かなり恐ろしいスコアですが、この言語で何かをするのがどれほど難しいかを考えると、それはさらに悪いことです。(赤いテキストを取得するために使用されるバイト)と(赤いテキストを持つことによるボーナス)のこの回答の比率は本当に良いです。cです。

各ティック間の時間は、入力文字列の長さによって異なりますが、約0.1秒です。

ところで、このプログラムの出力は、インタプリタが非常に悪いため、完全なゴミのように見えます。ミリ秒ごとにターミナルをクリアし、すべてを再描画するため、非常にちらつきます。

コメント付き:

c           # Change paint colour to red

^w[Y=-1]{   # While Y=-1 (arbitrary condition we can break later)

    w[B!0]{>}   # Go to end of input

    t[X]        # Save length of input in T

    # SET T TO MAX(T-79, 0)

    <[X-79]     # Go to (79, -1)

    w[X!0]{     # While X is not 0
        t[T-1]      # Subtract 1 from T
        w[T=-1]{    # If T is now negative
            t[0]        # Set it back to 0
        }
        <         # Move left (position doesn't matter except to end the loop eventually)
    }

    # DONE SETTING T TO MAX(T-79, 0)
    # If T == 0, the string needs to be doubled. Otherwise this part of the program is done

    v           # Move down to break the loop unless this is specifically undone
    w[T=0]{     # While T == 0
        ^w[B!0]{    # For each byte of input
            t[B]^b[T] # Copy it up 1 place
            >v        # Go to the next byte
        }
        <[X]^     # First byte of the copy
        w[B!0]{   # For each byte of the copy
            t[B]      # Save the byte's value
            vw[B!0]{>}# Go to the first empty spot after the original
            b[T]      # Write the saved value
            <[X]^w[B=0]{>} # Go back to the first byte of the copy
            b[0]>     # Erase it and go to the next one
        }
        v       # Back to Y=-1 to reset the loop from the very beginning
    }

}

# After ALL OF THAT nonsense, we're now at (0, 0) and the input string is guaranteed to be
# at least 80 characters long

^
w[1=1]{       # While 1=1 (should hold true until mathematics itself breaks down)
    <[X-80]        # Go to the 81st character
    w[X!0]{        # While X!=0
        <t[B]vb[T]^    # Go left and copy that character down
    }

    w[B!0]{      # For each byte in the string
        t[B]<b[T]>>  # Copy that byte left
    }

    <[X]<t[B]    # Go get the first value (copied to (-1, -1))
    w[B!0]{>}<b[T]# Bring it to the end of the string
}

3

Perl-120バイト(-10%= 108)

$|=1;$_=<>;chomp;for(;;){print "\e[31m",substr(" "x80 .$_,$p++,80)," \r";select($z,$z,$z,0.1);if($p>length()+80){$p=0}}

Perl marquee


2

Matlab、⌈188*.9⌉= 170

これは、MatlabバージョンR2014b以降で機能します。結果はFigureウィンドウに表示されます。

h=text(.1,.1,repmat(' ',1,80),'fontn','courier','ba','k','co','r');set(1,'pos',[90 90 990 90]);axis off
s=input('','s');n=0;while 1
n=n+1;pause(.1)
h.String=s(mod((0:79)+n,numel(s))+1);end

次の例では、視覚化のためにテキストが太字で入力されています(数バイトかかるため、上記のコードでは行われません)。また、GIFアニメーションの速度は必要な0.1秒の一時停止に対応していませんが、プログラムを実行することで表示される実際の図ではタイミングが正しいことに注意してください。

enter image description here


2

SpecBAS、130バイト(-10%= 117)

元の文字列を乗算して80文字以上にしてから、正確に80文字に切り刻みます。

TEXT と同じように機能するSpecBASのコマンド PRINT(この例では) 1文字を保存します。

SCALEコマンドは、コードにいくつかの余分な文字を追加しますが、よりマーキーに見えます。

Escを押すまで、プログラムは続行します。

1 INPUT s$: LET s$=s$*CEIL(80/LEN s$)
2 TEXT PAPER 0;INK 2;SCALE 1,2;AT 1,1;s$( TO 80)
3 LET s$=s$(2 TO)+s$(1): PAUSE 5: GO TO 2

enter image description here


2

Perl、63(70文字-ボーナス10%)

他と大きく異なる解決策ではありませんが、作成に時間を浪費したので、私もそれを投稿すると思いました!

$_=<>;s/
/ /;print"\x0d\x1b[91m",substr"$_"x80,$z++%y///c,80 until`sleep .1`

ANSIコードとcoreutils 'の呼び出しについては、Unix互換端末に依存していsleepます。上記の2つの\x..文字は、実際にはこの16進ダンプによるリテラルの改行およびエスケープ文字です。

0000000: 245f 3d3c 3e3b 732f 0a2f 202f 3b70 7269  $_=<>;s/./ /;pri
0000010: 6e74 220d 1b5b 3931 6d22 2c73 7562 7374  nt"..[91m",subst
0000020: 7222 245f 2278 3830 2c24 7a2b 2b25 792f  r"$_"x80,$z++%y/
0000030: 2f2f 632c 3830 2075 6e74 696c 6073 6c65  //c,80 until`sle
0000040: 6570 202e 3160                           ep .1`

2

ルビー、79 76 75バイト

t,i=gets.chop*81,0
loop{system'cls'
$><<t[(i=(i+1)%80)..i+79]
sleep 0.1}

私はまだルビーの専門家ではありません。

赤と黒の同じスコア:

t,i=gets.chop*81,0
loop{system'cls&color 4'
$><<t[(i=(i+1)%80)..i+79]
sleep 0.1}

2

Perl、84バイト(-10%= 76)

$_=' 'x80 .pop;$|=print"\b \r\e[31m".substr$_,++$p% length,80until select$z,$z,$z,.1

これは、マーキーのテキストであるコマンドライン引数を取ります。

説明:

  1. テキストの前に80個のスペースを追加して保存する $_
  2. バックスペース(\b)およびスペース()を印刷します。これにより、前の印刷から最後の文字が削除されます。次に、キャリッジリターンとカラーを印刷します。
  3. 位置からテキストの80文字を印刷します $p
  4. $p = ($p+1) % length of text
  5. 0.1秒間スリープ

2

bash、121バイト

A=$(printf ' %.s' {1..80})$1
while :; do
printf "%s \r" "${A:((P++)):80}"
if [ $P == ${#A} ];then
 P=0
fi
sleep 0.1
done

1

Python 3、96バイト

import time;s=input()*80
while 1:print("\033[2J",end=s[:80],flush=1);s=s[1:]+s[0];time.sleep(.1)

これは、ANSIエスケープシーケンスをサポートする端末でのみ機能します。Windowsを使用している場合は、ansiconを試してください

flushPython 3 のキーワードは大丈夫ですので、高価なsys.stdout.flush()電話をかける必要はありません。


1

C、293 269バイト

(読みやすさのために追加された改行)

これは、EOFで終了する標準入力から入力を取得します。そのため、文字列、改行、およびEOF(Ctrl ^ Dなど)を入力するのが最善です。

#include<stdio.h>
#include<string.h>
#define Z '\0'
main(){int i=0,j;char m[80],o[80],n[2];
while(~(j=getchar())&&i<80)j-'\n'?m[i++]=j:0;m[i]=Z;
while(1){for(i=0;m[i]-Z;++i){strcpy(o,&m[i]);
for(j=0;j<i;)*n=m[j++],n[1]=Z,strcat(o,n);
printf("\x1b[40;31m%s\x1b[0m\r",o);}}}

ゴルフをしていない:

#include <stdio.h>
#include <string.h>
#define ANSI_COLOR_SET "\x1b[40;31m"
#define ANSI_COLOR_RESET "\x1b[0m"

int main(void)
{
  int i, j, c;
  char msg[80], out[80], next[2];

  for (i = 0; (c = getchar()) != EOF && i < 80; ++i) {
    if (c != '\n') {
      msg[i] = c;
    }
  }
  msg[i - 1] = '\0';

  while (1) {
    for (i = 0; msg[i] != '\0'; ++i) {
      strcpy(out, &msg[i]);
      for (j = 0; j < i; ++j) {
        next[0] = msg[j];
        next[1] = '\0';
        strcat(out, next);
      }
      printf(ANSI_COLOR_SET "%s\r" ANSI_COLOR_RESET, out);
    }
  }
  return(0);
}

1

SmileBASIC BIG、79バイト

COLOR 3INPUT S$@L
CLS
FOR I=0TO 79?S$[(I+O)MOD LEN(S$)];
NEXT
WAIT 6O=O+1GOTO@L

一度に1文字ずつスクロールしなければならないことに気付いたとき、ほぼ完成した素晴らしいグラフィカルなソリューションがありました。


1

ゼリー20 19 18バイト

  • 最初に置換することによって-1バイト80によってそれが乗じなければならないので(= 256)少なくとも 80
  • 無限ループをÇß(からÇ1¿)に変更して-1バイト。

ẋ⁹ḣ80ṙ1;”ÆṄœS.1
Çß

ここで@Dennisの答えからいくつかのトリックを使って。ゼリーはチャレンジよりも新しいですが、実際に特別に調整されたわけではありません。改善方法に関する提案は大歓迎です!コンソールがutf-8にある場合は、実行しますexport LC_ALL=en_US前か、同様の。

https://gyazo.com/f3594391a6b4d459a9d30bd47cf598b1

説明

ẋ⁹ḣ80ṙ1;”ÆṄœS.1         Monadic helper link - Argument: s
ẋ⁹                      Repeat s 256 times.
  ḣ80                   Head. Set {output} to first 80 characters from repeated s.
     ṙ1                 Rotate. Rotates {output} one character to the left.
       ;Ӯ              Concatenate character 0D, the carriage return, to {output}.
          Ṅ             Print and return {output}.
           œS.1         Wait 0.1 seconds before returning {output} from the
                        helper link.

Çß                      Monadic main link - Argument: s
Ç                       Execute helper link with argument s. Replace s by
                        result of helper link.
 ß                      Execute this link with argument s (while true).

0

LOVE2D Lua、197-10%= 178バイト

f=io.open("t.t"):read().."  "love.graphics.setColor(255,0,0)love.window.setMode(640,14)function love.draw()s=""for i=1,80 do n=i+os.clock()s=s..f:sub(n%#f,n%#f) end love.graphics.print(s,0,0)end

ルートの「tt」というファイルに入力が必要であるため、3バイトがスコアに追加されました。

80反復のforループで、機能の基本は本当に基本で、iのインデックスに現在の文字列の長さで変調された秒単位の現在の時間を追加し、入力の80文字の長さの文字列を繰り返して左にシフトします時間が経つにつれて。

笑いにはLOVE2Dを使用しました。


0

Sinclair ZX81 / Timex TS1000 / 1500 BASIC、110バイト 182バイト(リスト用)

1 LET A$="I LIKE TO SCROLL IT... HELLO MUM, BY DONKEYSOFT... THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG... STILL SCROLLING... "
2 PRINT AT 0,0;A$(1 TO 80)
3 LET A$=A$(2 TO )+A$(1)
4 GOTO 3

2行目の画面位置0,0の文字列の最初の32 80文字を印刷し、A$2行目から3行目の文字列の最後まで操作します(Sinclair ZX81 BASICは0ではなく1から文字列をインデックス付けします)、したがって、最初の文字を最後に追加し、A$変数に戻します。次に、2行目に戻る無条件ループがあります。


0

コモドール64、434バイト

0 A$="I LIKE TO SCROLL IT... SAMPLE SCROLLY ROUTINE FOR CODE-GOLF MADE BY DONKEYS
1 A$=A$+"OFT MMXVII... HELLO MUM... SCROLLING IS FUN, INNIT? GREETZ TO ALL...
2 POKE53280,6:PRINT"{CLEAR}";
3 PRINTLEFT$(A$,40)"{HOME}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}"MID$(A$,41,40)"{HOME}";
4 FORI=0TO99:NEXT:A$=RIGHT$(A$,142)+LEFT$(A$,1):GOTO3

これを表示するには80文字が必要であり、デフォルトでC64は40文字のみであるため、スクロール領域の40文字が画面領域の一番上の行に印刷され、残りの40文字は下部近くに印刷されます。

{HOME}PETSCIIに変換される記号やその他の記号を明確にするために、エミュレーターから取得した画面を以下に示します。

コモドール64は2行にわたってスクロールします

CBM PRG Studioがインストールされたとき(または仕事で昼食をとっていないとき)、完全なゴルフバージョンを実行します。


0

ルビー、79 77文字

->(s){t=0;loop{system("clear");puts (s*80)[t..(80+t)];t=(t+1)%80;sleep(0.1)}}

0

PHP、136バイト

<?php
$s="\e[0;31;40m".substr(str_repeat($argv[1],160),0,160);
while(true){for($i=0;$i<=80;$i++){usleep(100000);echo substr($s,$i)."\r";}}die;
  • php -f marquee.php hello\ world「hello world」文字列をマーキーにするためにそれを呼び出します。
  • 何らかの理由で、最初の文字列に160文字を入力する必要がありました。そうしないと、出力はのようなものhello worldddddddddddddddddddddddddddddddddddddddになりますが、80文字までしかループしません。

https://gyazo.com/4c433abf04d71ca7ebb63a0889ca705d

長い一日でした。改善するためにできることはおそらくあります。


0

PHP、85バイト

for(;;usleep(1e5))echo substr(str_repeat($s=$argv[1],80),$i=++$i%strlen($s),80),"\r";

最初のコマンドライン引数から入力を受け取ります。で実行し-nrます。

2番目の文字からスクロールを開始します。最初の文字で開始するように1つのバイトを追加します。
元に戻し=++$i%%=;;して;;$i++,

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