Làm cho tôi một diễu hành di chuyển


15

Giới thiệu

Bạn có nhớ những năm 80 ầm ầm không? Ý tôi là, bạn biết đấy, như 30 năm trước? Không điện thoại di động, không internet, không ATM, quần áo huỳnh quang (đó là gì?!) Và cuộn marqee ! Không không không! Không phải những người trực tuyến, nhưng những người thực sự, Với đèn LED.

Diễu hành

Vì tôi đang ở trong một tâm trạng hoài cổ, tôi muốn bạn tạo ra một diễu hành cuộn.

Thử thách

Tạo một chương trình nơi bạn có thể nhập một chuỗi một dòng. Chương trình của bạn cần tạo một vùng chọn cuộn rộng 80 ký tự, lặp lại văn bản nếu cần.

Quy tắc

  • Người dùng phải có thể nhập một chuỗi vào chương trình của bạn làm đầu vào. Chuỗi có thể là một tham số dòng lệnh hoặc một chuỗi được nhập trong khi chạy chương trình.
  • Chương trình của bạn phải liên tục in một chuỗi gồm 80 ký tự (hiển thị).
  • Chuỗi phải được cập nhật cứ sau 0,1 giây (nhiều hơn hoặc ít hơn; tôi sẽ không định thời gian cho chuỗi đó), dịch chuyển các ký tự mỗi lần lặp một vị trí sang trái.
  • Chuỗi "xoay". Ở cuối chuỗi do người dùng cung cấp, một phiên bản khác của chuỗi phải xuất hiện.
  • Chương trình của bạn phải in đầu ra của nó trên một dòng, không có nguồn cấp dữ liệu (sử dụng '\ r' thay vì '\ n')
  • Chương trình của bạn phải chạy quảng cáo vô hạn , cho đến khi người dùng bị gián đoạn.
  • Đây là một codegolf, vì vậy mã ngắn nhất trong byte thắng.
  • Có một tiền thưởng 10% (làm tròn lên đến số nguyên tiếp theo) để in màu đỏ trên nền đen.
  • Tiêu chuẩn áp dụng.

Tham chiếu thực hiện trong Python 2.7

Chương trình này không được đánh gôn, nhưng nó cung cấp một triển khai tham chiếu (và do đó giới hạn trên đối với kích thước).

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 tương tự, nhưng không giống nhau. Ngoài ra câu hỏi này trông giống như nó (tốt cho cảm hứng) nhưng nó khác nhau về một số khía cạnh, tôi nghĩ. Ngoài ra, tôi thấy điểm số (độ dài mã) khá đáng thất vọng. Tôi thực sự nghĩ rằng chúng ta có thể làm tốt hơn!
bất cứ lúc nào

Có thể là mã golf + cuộc thi phổ biến?
SuperJedi224

Chúng ta có phải đợi chính xác 100 ms không?
Dennis

1
@Dennis tốt, nhiều hay ít. Sẽ ổn nếu bạn đặt nó thành 99 để lưu char. Giả sử việc thực hiện các hướng dẫn khác sẽ mất 0,01 giây. :-)
bất cứ lúc nào

1
Điều gì sẽ xảy ra nếu chuỗi đầu vào có hơn 80 ký tự? Việc triển khai tham chiếu của bạn và câu trả lời của tôi, nhận được s [80: 160] và sau đó quay lại s [0 ..] họ không bao giờ in phần cuối của chuỗi dài, ví dụ: đầu vào 1 2 3 4 5 6 7 8 9 10 11 ... 300bị cắt sau khoảng 56.
TessellatingHeckler

Câu trả lời:


4

CJam, 31 byte

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

Chờ đợi chính xác 100 ms.

Điều này sẽ chỉ hoạt động với trình thông dịch Java chính thức , vì trình thông dịch trực tuyến chỉ hiển thị đầu ra sau khi thoát khỏi chương trình.

Văn bản màu đỏ trên nền đen có thể có 40 (hoặc 39) byte, với số điểm 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

Làm thế nào nó hoạt động

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.

Tôi nghi ngờ họ sẽ không đến ngắn hơn thế này. Xin chúc mừng!
bất cứ lúc nào

Có vẻ tlike sự ;trong việc giải thích được lệch
Ven

@Ven Đã sửa, Cảm ơn!
Dennis

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}

Với lời cảnh báo mà bây giờ nó bắt đầu vòng lặp đầu tiên với ký tự thứ hai; Các quy tắc không nói rằng nó phải bắt đầu từ phía trước của chuỗi, và quy tắc đầu tiên được bao gồm tổng thể, vì vậy điều đó tốt đối với tôi. Tôi sẽ lấy nó tới 100 ký tự bằng cách nào đó - chỉnh sửa: cảm ơn @ConnorLSW cho các chỉnh sửa để có được nó dưới 100.

Hướng dẫn

  1. Chạy PowerShell (bảng điều khiển bình thường, nó không hoạt động trong PowerShell ISE)
  2. Dán phiên bản dòng đơn vào PoSH, nhấn enter
  3. Nhập tin nhắn, nhấn enter
  4. Ctrl-C để phá vỡ

Đầu ra

Đầu ra ví dụ PowerShell marquee

Ghi chú

Một phiên bản dễ đọc hơn với các tên và tham số biến được điền vào một chút:

$test = (Read-Host) * 180
for () {
    Write-Host ($text.substring(($i=++$i%80), 80)+"`r") -NoNewLine -ForegroundColor Red -BackgroundColor Black
    sleep -Miliseconds 99
}
  • Các tham số chỉ cần đủ dài để là duy nhất, do đó, -F Rđủ độc đáo để đặt Red ForegroundColor chẳng hạn.
  • 'Đen' phải là 'Bla' là duy nhất so với 'Blue', nhưng -B 0đặt nó thành màu Enum value 0 được hiểu là Đen.

Thay thế, marquee 'chính xác' hơn:

Mã tham chiếu không xử lý các chuỗi dài hơn 80 ký tự một cách độc đáo, bỏ qua mọi thứ trong tin nhắn vừa qua ~ 160 ký tự và nó sẽ ổn định lại mỗi ký tự 99 * len (chuỗi). ví dụ: nếu chiều rộng dấu hiệu dài 5 ký tự, thì nó thực hiện điều này:

   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|
    ...

Phiên bản này lập chỉ mục modulo độ dài văn bản thay vì chiều rộng dấu, vì vậy nó chạy qua toàn bộ chuỗi. 106 - 10% = 95 ký tự.

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

Thay thế: ký tên theo chu kỳ như .gif trong câu hỏi, 118-10% = 106

Bởi vì nó trông tốt hơn.

$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}

Dấu hiệu ví dụ hoạt hình


1
Tôi biết câu trả lời này là khá cũ, nhưng câu hỏi này là frontpage ngay bây giờ - Blađể 0- Write-Hostsẽ giải thích con số để màu sắc.
colsw

@ConnorLSW Cảm ơn, bạn đã nhận được dưới 100 ký tự! Và tôi không biết tại sao tôi lại bỏ lỡ bình luận của bạn một năm trước (!) Ai đó vừa nêu lên và tôi đã quay lại để xem nó là gì.
TessellatingHeckler

không phải lo lắng, tôi nghĩ rằng bạn cũng có thể thay đổi while(1)để for()tiết kiệm một số byte :)
colsw

@ConnorLSW vì vậy bạn có thể, làm điều đó quá. (Tôi có thể làm điều đó trong hầu hết các môn đánh gôn của mình, đó không phải là điều tôi nghĩ bình thường).
TessellatingHeckler

Khi bạn đang sử dụng for(), bạn có thể lưu thêm một byte thay đổi $s=(Read-Host)*180;for(){thànhfor($s=(Read-Host)*180){
Clijsters

6

Matlab, 76 byte

Điều tôi nghĩ là tốt ở đây là bạn có thể có các vectơ như các chỉ số mảng. Điều này trả về một vectơ của các mục mảng tương ứng, giúp dễ dàng nối thêm chuỗi đã cho độc lập với độ dài.

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

Kết quả:

nhập mô tả hình ảnh ở đây


Thủ thuật hay với clc. Bạn đã quên thêm 's'vàoinput
Luis Mendo

Bạn có ý gì? Nó hoạt động hoàn toàn tốt như trong phiên bản Matlab mà tôi có (R2010b).
flawr

1
Như bây giờ, bạn cần nhập chuỗi có dấu ngoặc kép. Để nhập nội dung chuỗi trực tiếp (không có qoutes) bạn cầna=input('','s')
Luis Mendo

Bây giờ tôi thấy, tôi đã không nhận thức được tính năng đó. Vì thông số kỹ thuật không yêu cầu điều này, tôi nghĩ sẽ ổn khi yêu cầu các 'chuỗi phân tách làm đầu vào. Nhiều ngôn ngữ cần một dấu phân cách chuỗi hoặc chúng sẽ diễn giải một đối số dòng lệnh dưới dạng câu (các từ được phân tách bằng dấu cách) dưới dạng nhiều đối số.
lỗ hổng

4

QBasic, 116 113 byte - 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

Trình diễn Marquee

Đây là một phiên bản được định dạng với một số ý kiến:

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

Một vài lưu ý:

  • Tôi không biết tại sao PRINTsau FORvòng lặp là cần thiết. CLSnên đặt lại con trỏ đến góc trên cùng bên trái mỗi lần. Nhưng trên QB64, ít nhất, nếu tôi không đưa phần bổ sung PRINTvào, phần chọn sẽ kết thúc ở dòng thứ hai thay vì dòng thứ nhất. Nếu bất kỳ ai có QBasic được thiết lập trên DosBox hoặc somesuch, tôi rất muốn biết liệu điều tương tự có xảy ra ở đó hay nếu đó là lỗi QB64.
  • Mã có một trục trặc nhỏ vì nó dựa vào TIMER(số giây kể từ nửa đêm) cho độ trễ. Nếu mã đang chạy vào nửa đêm, marquee sẽ bị kẹt vì TIMERsẽ thiết lập lại 0và luôn luôn ít hơn tsau đó.

Ngôn ngữ đầu tiên của tôi! Dù sao, IIRC, trong QB 4.5, một dấu chấm phẩy ở cuối chuỗi in có nghĩa là câu lệnh PRINT không in trở lại vận chuyển.
bgStack15

@ bgStack15 Của tôi cũng vậy. : ^ D Vấn đề không thực sự xảy ra PRINTnhưng với - CLSsau đó CLS, bất kể điều gì đã được in trước đó, PRINTcâu lệnh tiếp theo sẽ xuất ra ở mức 1,1; nhưng thay vào đó, tôi gặp phải tình huống đầu ra ở mức 2.1.
DLosc

4

Perl, 99 98 byte (-10% = 89)

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

Lấy đầu vào của nó từ tham số dòng lệnh.

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

3

pb , ⌈ (216 + 3) * 0,9⌉ = 198

+3 byte cho cờ phiên dịch 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]}

Một số điểm khá khủng khiếp, nhưng xem xét mức độ khó để làm bất cứ điều gì trong ngôn ngữ này, nó có thể tồi tệ hơn. Tỷ lệ (byte được sử dụng để lấy văn bản màu đỏ) của câu trả lời này (phần thưởng từ việc có văn bản màu đỏ) thực sự tốt, toàn bộ đầu ra được chuyển sang màu đỏ chỉ cvới phần đầu!

Thời gian giữa mỗi lần đánh dấu khác nhau tùy thuộc vào độ dài của chuỗi đầu vào nhưng khoảng 0,1 giây.

Nhân tiện, đầu ra của chương trình này trông giống như toàn bộ rác vì trình thông dịch rất tệ. Mỗi mili giây nó xóa thiết bị đầu cuối và vẽ lại mọi thứ, vì vậy nó thực sự nhấp nháy.

Với nhận xét:

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 byte (-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}}

Hầu tước


2

Matlab, ⌈188 * .9⌉ = 170

Điều này hoạt động trong phiên bản Matlab R2014b trở lên. Kết quả được hiển thị trên một cửa sổ hình.

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

Trong ví dụ sau , văn bản được gõ in đậm để trực quan hóa tốt hơn (không được thực hiện trong đoạn mã trên vì chi phí một vài byte). Cũng lưu ý rằng tốc độ của hình động GIF không tương ứng với thời gian tạm dừng 0,1 giây cần thiết, nhưng thời gian là chính xác trong hình thực tế được hiển thị bằng cách chạy chương trình.

nhập mô tả hình ảnh ở đây


2

SpecBAS, 130 byte (-10% = 117)

Nhân chuỗi gốc để tạo thành 80 ký tự trở lên, sau đó chọn chuỗi chính xác đến 80.

TEXTlà một lệnh trong SpecBAS hoạt động giống như PRINT(trong ví dụ này) nhưng lưu một ký tự.

Các SCALE lệnh bổ sung thêm một vài ký tự bổ sung cho các mã, nhưng làm cho nó trông marquee-ish.

Chương trình tiếp tục cho đến khi bạn nhấn 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

nhập mô tả hình ảnh ở đây


2

Perl, 63 (70 ký tự - 10% cho tiền thưởng)

Không phải là một giải pháp cực kỳ khác biệt với những người khác, nhưng tôi đã lãng phí thời gian để thực hiện nó, vì vậy tôi nghĩ tôi cũng sẽ đăng nó!

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

Dựa vào thiết bị đầu cuối tương thích Unix với mã ANSI và lệnh gọi tới coreutils ' sleep. Hai \x..ký tự ở trên thực sự là một nguồn cấp dữ liệu theo nghĩa đen và thoát char theo kết xuất hex này:

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

Ruby, 79 76 75 byte

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

Tôi vẫn không phải là một chuyên gia về ruby, có thể chơi golf.

Với cùng số điểm đỏ & đen:

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

2

Perl, 84 byte (- 10% = 76)

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

Điều này có một đối số dòng lệnh là văn bản trong vùng chọn.

Giải trình:

  1. Chuẩn bị 80 khoảng trắng cho văn bản và lưu trữ trong $_
  2. In backspace ( \b) và dấu cách ( ). Điều này loại bỏ ký tự cuối cùng từ bản in trước. Sau đó in trở lại vận chuyển và màu sắc.
  3. In 80 ký tự của văn bản từ vị trí $p
  4. $p = ($p+1) % length of text
  5. Ngủ trong 0,1 giây

2

bash, 121 byte

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 byte

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

Điều này sẽ chỉ hoạt động trên các thiết bị đầu cuối hỗ trợ các chuỗi thoát ANSI. Nếu bạn đang ở trên Windows, hãy thử ansicon .

Thắng cho flushtừ khóa trong Python 3, vì vậy chúng tôi không phải thực hiện một sys.stdout.flush()cuộc gọi đắt tiền .


1

C, 293 269 ​​byte

(Dòng mới được thêm vào để dễ đọc)

Điều này nhận đầu vào từ đầu vào tiêu chuẩn kết thúc bởi EOF; vì vậy tốt nhất là nhập một chuỗi, một dòng mới và sau đó là EOF (ví dụ: 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);}}}

Ung dung:

#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 LỚN, 79 byte

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

Tôi đã có một giải pháp đồ họa đẹp gần như được thực hiện khi tôi nhận ra rằng nó phải cuộn toàn bộ 1 ký tự một lần.


1

Thạch , 20 19 18 byte

  • -1 byte bằng cách thay thế đầu tiên 80bằng (= 256) vì nó phải được nhân với ít nhất 80
  • -1 byte bằng cách thay đổi vòng lặp vô hạn thành Çß(từ Ç1¿).

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

Với một số thủ thuật từ câu trả lời của @Dennis tại đây . Jelly mới hơn thử thách, nhưng không thực sự được thiết kế riêng cho nó. Đề xuất về cách cải thiện được chào đón! Nếu bảng điều khiển của bạn ở utf-8, hãy chạy export LC_ALL=en_UShoặc tương tự trước khi thử.

Thí dụ

https://gyazo.com/f3594391a6b4d459a9d30bd47cf598b1

Giải trình

ẋ⁹ḣ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 byte

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

Yêu cầu đầu vào phải ở trong một tệp có tên 'tt' trong thư mục gốc, do đó, 3 byte bổ sung đã được thêm vào điểm số.

Thực sự cơ bản về chức năng, chỉ trong một vòng lặp gồm 80 lần lặp, nối thêm ký tự theo chỉ số của i cộng với thời gian hiện tại tính bằng giây được điều chỉnh bởi độ dài của chuỗi hiện tại, tạo ra một chuỗi dài 80 ký tự lặp lại, dịch chuyển sang trái khi thời gian trôi qua

Tôi đã sử dụng LOVE2D cho những tiếng cười.


0

Sinclair ZX81 / Timex TS1000 / 1500 BASIC, 110 byte 182 byte (cho danh sách)

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

Nó hoạt động bằng cách in 32 80 ký tự đầu tiên của chuỗi A$ở vị trí màn hình 0,0 ở dòng hai, sau đó thao tác chuỗi từ vị trí 2 đến cuối sting trong dòng 3 (Sinclair ZX81 BASIC lập chỉ mục các chuỗi từ 1 chứ không phải 0 ), do đó thêm ký tự đầu tiên vào cuối và chuyển nó trở lại A$biến; sau đó có một vòng lặp vô điều kiện trở lại dòng 2.


0

Hàng hóa 64, 434 byte

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

Vì điều này đòi hỏi 80 ký tự để hiển thị và C64 theo mặc định chỉ có 40 ký tự, sau đó 40 ký tự của scrolly được in trên dòng trên cùng của khu vực màn hình trong khi 40 ký tự khác được in gần phía dưới.

Để làm rõ những gì {HOME}và các biểu tượng khác được dịch thành PETSCII thì đây là một màn hình lấy từ trình giả lập của tôi:

Hàng hóa 64 scrolly qua hai dòng

Tôi sẽ thực hiện phiên bản chơi gôn đầy đủ khi cài đặt CBM PRG Studio (hoặc khi tôi không ăn trưa tại nơi làm việc).


0

Ruby, 79 77 ký tự

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

0

PHP, 136 byte

<?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;
  • Gọi nó với php -f marquee.php hello\ worldchuỗi marquee "hello world".
  • Vì một số lý do, tôi đã phải thực hiện 160 ký tự cho chuỗi ban đầu, nếu không thì đầu ra sẽ giống như vậy hello worlddddddddddddddddddddddddddddddddddddddd, nhưng nó sẽ chỉ lặp qua 80 ký tự - tôi hy vọng điều đó vẫn còn.

https://gyazo.com/4c433abf04d71ca7ebb63a0889ca705d

Đó là một ngày dài, có lẽ tôi có thể làm gì đó để cải thiện nó


0

PHP, 85 byte

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

lấy đầu vào từ đối số dòng lệnh đầu tiên; chạy với-nr .

Bắt đầu cuộn với nhân vật thứ hai. Thêm một byte để bắt đầu ở ký tự đầu tiên:
Thay thế =++$i%bằng %=;;bằng ;;$i++,.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.