스크롤하는 나포를 만들어 줘


15

소개

포효하는 80 년대를 기억하십니까? 30 년 전과 같이? 휴대 전화, 인터넷, ATM, 형광등 (무엇입니까?!)과 스크롤링 마키도 없습니다 ! 아니, 아니! 온라인 조명이 아니라 실제 조명, LED 조명 포함.

스크롤 선택 윤곽

나는 그리운 분위기에 있기 때문에 스크롤하는 움직이는 윤곽을 만들고 싶습니다.

도전

한 줄 문자열을 입력 할 수있는 프로그램을 작성하십시오. 프로그램은 필요한 경우 텍스트를 반복하여 80 자 너비의 스크롤 선택 윤곽을 만들어야합니다.

규칙

  • 사용자는 프로그램에 입력으로 문자열을 입력 할 수 있어야합니다. 문자열은 명령 행 매개 변수이거나 프로그램을 실행하는 동안 입력 된 문자열 일 수 있습니다.
  • 프로그램은 정확히 80 (표시) 문자의 문자열을 계속 인쇄해야합니다.
  • 문자열은 0.1 초마다 업데이트해야합니다 (더 많거나 적습니다. 타이밍을 지정하지는 않습니다). 반복마다 문자를 한 위치 왼쪽으로 이동시킵니다.
  • 문자열은 "회전"합니다. 사용자 제공 문자열의 끝에 다른 문자열 인스턴스가 나타나야합니다.
  • 프로그램은 줄 바꿈없이 한 줄에 출력을 인쇄해야합니다 ( '\ n'대신 '\ r'사용)
  • 프로그램은 사용자가 중단 될 때까지 ad infinitum을 실행해야합니다 .
  • 이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
  • (반올림 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

정확히 100ms 기다려야 합니까?
Dennis

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

정확히 100ms 기다립니다.

온라인 인터프리터는 프로그램을 종료 한 후에 만 ​​출력을 표시하므로 공식 Java 인터프리터 에서만 작동 합니다.

검은 색 바탕에 빨간색 텍스트는 36 (36 점)으로 40 (또는 39) 바이트로 가능합니다.

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

;설명이 틀린 것 같습니다
Ven

@Ven Fixed, 감사합니다!
Dennis

9

PowerShell, 118113112108102101 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}

경고와 함께 이제 두 번째 문자로 첫 번째 루프를 시작합니다. 규칙은 문자열 앞에서 시작해야한다고 말하지 않으며 첫 번째 규칙은 전체적으로 포함되므로 나에게 좋습니다. 어떻게 든 100 문자로 가져올 것입니다-편집 : 편집을 100 미만으로 설정하는 @ConnorLSW 감사합니다.

명령

  1. PowerShell 실행 (일반 콘솔, PowerShell ISE에서 작동하지 않음)
  2. 한 줄 버전을 PoSH에 붙여 넣고 Enter 키를 누릅니다
  3. 메시지를 입력하고 Enter를 누르십시오
  4. Ctrl-C를 깰

산출

PowerShell marquee example output

노트

변수 이름과 매개 변수가 약간 더 읽기 쉬운 버전 :

$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를 설정하기에 고유해야합니다.
  • 'Blue'는 'Blue'에 비해 고유하려면 'Bla'이어야하지만 -B 0색상 Enum 값 0 (검정색으로 해석 됨)으로 설정합니다.

대안적인 '올바른'선택 윤곽 :

참조 코드는 80 자보다 긴 문자열을 잘 처리하지 않고 메시지에서 ~ 160 자 이상의 항목을 건너 뛰고 99 * len (문자열) 문자마다 글리치 리 세트합니다. 예를 들어 부호 너비가 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
나는이 대답이 꽤 오래되었다는 것을 알고 있지만,이 질문은 현재 첫 페이지입니다- Bla에서 0- Write-Host숫자를 색상으로 해석합니다.
colsw

@ConnorLSW 감사합니다, 당신은 100 자 이하로 그것을 얻었다! 그리고 나는 왜 1 년 전에 왜 당신의 의견을 놓쳤는 지 전혀 몰랐습니다.
TessellatingHeckler

걱정 아니, 당신은 또한 변경할 수 있다고 생각 while(1)하는 for()일부 바이트를 :) 저장
colsw

@ConnorLSW도 그렇게 할 수 있습니다. (아마도 대부분의 골프에서 그렇게 할 수있을 것입니다. 평소에는 생각하지 않습니다).
TessellatingHeckler

를 사용 for()하면서 다음으로 변경 $s=(Read-Host)*180;for(){하여 한 바이트를 더 절약 할 수 있습니다.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
루이스 Mendo

무슨 소리 야? 내가 액세스 한 Matlab 버전 (R2010b)에서와 같이 완벽하게 작동합니다.
flawr

1
지금처럼 따옴표로 문자열을 입력해야합니다. 문자열 내용을 (qoutes없이) 직접 입력하려면a=input('','s')
Luis 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 를 선택 윤곽이 첫 번째 줄 대신 두 번째 줄에 나타납니다. 누구든지 DosBox 등에서 QBasic을 설정 한 경우 동일한 일이 발생하는지 또는 QB64 버그인지 알고 싶습니다.
  • 이 코드는 TIMER지연 시간 (자정 이후의 초 수)에 의존하기 때문에 작은 결함이 있습니다. 코드가 자정에 실행중인 경우 때문에 천막이 붙어 얻을 것이다 TIMER으로 재설정됩니다 0항상 미만 일 t이후.

내 첫 번째 언어! 어쨌든 QB 4.5에서 IIRC는 인쇄 된 문자열의 끝에 세미콜론이있어 PRINT 문이 캐리지 리턴을 인쇄하지 않음을 의미합니다.
bgStack15

@ bgStack15 나도. : ^ D이 문제는 실제로 인쇄 된 것이 PRINT아니라 CLS--after 와 함께 CLS인쇄됩니다 PRINT. 그러나 대신 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}}

펄 마키


2

Matlab, ⌈188 * .9⌉ = 170

Matlab 버전 R2014b 이상에서 작동합니다. 결과는 그림 창에 표시됩니다.

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 초 일시 정지와 일치하지 않지만 프로그램을 실행하면 실제 그림에서 타이밍이 정확합니다.

여기에 이미지 설명을 입력하십시오


2

SpecBAS, 130 바이트 (-10 % = 117)

원래 문자열을 곱하여 80 자 이상으로 만든 다음 정확히 80 자로 자릅니다.

TEXT SpecBAS의 명령은 다음과 같은 방식으로 작동합니다 PRINT (이 예제에서) 하지만 하나의 문자를 저장합니다.

그만큼 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

여기에 이미지 설명을 입력하십시오


2

Perl, 63 (70 자-보너스 10 %)

다른 사람들에게는 크게 다른 해결책은 아니지만 시간을 허비했기 때문에 게시 할 것이라고 생각했습니다!

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

ANSI 코드 및 coreutils에 대한 호출은 Unix 호환 터미널에 의존합니다 sleep. 위의 두 \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

파이썬 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

스마일 베이직 빅, 79 바이트

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

한 번에 하나의 전체 문자를 스크롤해야한다는 것을 알았을 때 멋진 그래픽 솔루션이 거의 완성되었습니다.


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 루아, 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로 변환되는 것을 정리하려면 여기 에뮬레이터에서 가져온 화면이 있습니다.

Commodore 64 두 줄로 스크롤

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.

두 번째 문자로 스크롤을 시작합니다. 첫 번째 문자에서 시작하는 한 바이트를 추가
교체 =++$i%와 함께 %=;;함께 ;;$i++,.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.