Jadikan aku tenda bergulir

15

pengantar

Ingat raungan 80-an? Maksud saya, Anda tahu, seperti 30 tahun yang lalu? Tidak ada ponsel, tidak ada internet, tidak ada ATM, pakaian neon (apa itu ?!) dan scrolling marqee ! Tidak tidak Tidak! Bukan yang online, tapi yang asli, Dengan lampu LED.

Tenda bergulir

Karena saya dalam suasana nostalgia, saya ingin Anda membuat tenda bergulir.

Tantangan

Buat program di mana Anda dapat memasukkan string satu baris. Program Anda perlu membuat tenda gulir dengan lebar 80 karakter, mengulangi teks jika perlu.

Aturan

  • Pengguna harus dapat memasukkan string ke program Anda sebagai input. String dapat berupa parameter baris perintah atau string yang dimasukkan saat menjalankan program.
  • Program Anda harus terus mencetak string yang persis 80 karakter (terlihat).
  • String harus diperbarui setiap 0,1 detik (lebih atau kurang; saya tidak akan menghitung waktu), menggeser karakter setiap iterasi satu posisi ke kiri.
  • String "berputar". Di akhir string yang disediakan pengguna, instance string lain harus muncul.
  • Program Anda harus mencetak outputnya pada satu baris, tanpa baris baris (gunakan '\ r' alih-alih '\ n')
  • Program Anda harus menjalankan infinitum iklan , hingga seorang pengguna menyela.
  • Ini adalah codegolf, jadi kode terpendek dalam byte menang.
  • Ada 10% bonus (dibulatkan sampai ke integer berikutnya) untuk mencetak merah pada latar belakang hitam.
  • Celah standar berlaku.

Implementasi referensi dalam Python 2.7

Program ini tidak golf, tetapi menyediakan implementasi referensi (dan karenanya batas atas untuk ukuran).

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)
agtoever
sumber
@ mbomb007 mirip, tetapi tidak sama. Juga pertanyaan ini sepertinya (baik untuk inspirasi) tetapi berbeda dalam beberapa hal, saya pikir. Juga, saya menemukan skor (panjang kode) cukup mengecewakan. Saya benar-benar berpikir kita bisa melakukan yang lebih baik!
agtoever
Mungkin sebagai kontes kode golf + popularitas?
SuperJedi224
Apakah kita harus menunggu tepat 100 ms?
Dennis
1
@ Dennis baik, lebih atau kurang. Tidak apa-apa jika Anda mengaturnya ke 99 untuk menyimpan char. Katakanlah pelaksanaan instruksi lainnya akan memakan waktu 0,01 detik. :-)
agtoever
1
Apa yang harus terjadi jika string input lebih dari 80 karakter? Implementasi referensi Anda, dan jawaban saya, dapatkan ke s [80: 160] dan kemudian melompat kembali ke s [0 ..] mereka tidak pernah mencetak akhir dari string panjang, misalnya input dari 1 2 3 4 5 6 7 8 9 10 11 ... 300cut off setelah sekitar 56.
TessellatingHeckler

Jawaban:

4

CJam, 31 byte

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

Menunggu tepat 100 ms.

Ini hanya akan bekerja dengan penerjemah resmi Java , karena penerjemah online hanya menampilkan keluaran setelah keluar dari program.

Teks merah dengan latar belakang hitam dimungkinkan dalam 40 (atau 39) byte, dengan skor 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

Bagaimana itu bekerja

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.
Dennis
sumber
Saya curiga mereka tidak akan datang lebih pendek dari ini. Selamat!
agtoever
Sepertinya ;penjelasannya tidak selaras
Ven
@Ven Diperbaiki, Terima kasih!
Dennis
9

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

Kode

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

Dengan peringatan bahwa sekarang dimulai lingkaran pertama dengan karakter kedua; Aturannya tidak mengatakan itu harus dimulai dari depan string, dan yang pertama disertakan secara keseluruhan, jadi tidak masalah bagi saya. Saya akan mendapatkannya ke 100 karakter entah bagaimana - edit: terima kasih @ConnorLSW untuk hasil edit untuk mendapatkan di bawah 100.

Instruksi

  1. Jalankan PowerShell (konsol normal, itu tidak berfungsi di PowerShell ISE)
  2. Rekatkan versi baris tunggal ke PoSH, tekan enter
  3. Ketikkan pesan, tekan enter
  4. Ctrl-C untuk memecah

Keluaran

Contoh output PowerShell marquee

Catatan

Versi yang lebih mudah dibaca dengan nama dan parameter variabel terisi sedikit:

$test = (Read-Host) * 180
for () {
    Write-Host ($text.substring(($i=++$i%80), 80)+"`r") -NoNewLine -ForegroundColor Red -BackgroundColor Black
    sleep -Miliseconds 99
}
  • Parameter hanya perlu cukup panjang untuk menjadi unik, jadi -F Rcukup unik untuk menetapkan ForegroundColor Merah, misalnya.
  • 'Hitam' harus 'Bla' untuk menjadi unik dibandingkan dengan 'Biru', tetapi -B 0set ke warna Enum nilai 0 yang ditafsirkan sebagai Hitam.

Alternatif, tenda yang lebih 'benar':

Kode referensi tidak menangani string lebih dari 80 karakter dengan baik, melewatkan apa pun dalam pesan yang melewati ~ 160 karakter, dan kesalahan-reset setiap 99 * len (string) karakter. mis. jika lebar tanda adalah 5 karakter, itu artinya:

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

Versi ini mengindeks modulo panjang teks, bukan lebar tanda, sehingga berjalan melalui seluruh string. 106 - 10% = 95 karakter.

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

Alternatif: tandatangani siklus seperti .gif dalam pertanyaan, 118-10% = 106

Karena terlihat lebih baik.

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

Contoh tanda animasi alternatif

TessellatingHeckler
sumber
1
Saya tahu jawaban ini cukup lama, tetapi pertanyaan ini adalah halaman depan sekarang - Blauntuk 0- Write-Hostakan menafsirkan angka menjadi warna.
colsw
@ConnorLSW Terima kasih, Anda mendapatkannya di bawah 100 karakter! Dan saya tidak tahu mengapa saya merindukan komentar Anda setahun yang lalu (!) Seseorang baru saja divonis dan saya kembali untuk melihat apa itu.
TessellatingHeckler
jangan khawatir, saya pikir Anda juga dapat mengubah while(1)untuk for()menyimpan beberapa byte :)
colsw
@ConnorLSW sehingga Anda dapat melakukannya juga. (Saya mungkin bisa melakukan itu di sebagian besar golf saya, itu bukan sesuatu yang saya pikirkan secara normal).
TessellatingHeckler
Saat Anda menggunakan for(), Anda dapat menyimpan satu byte lagi yang diubah $s=(Read-Host)*180;for(){menjadifor($s=(Read-Host)*180){
Clijsters
6

Matlab, 76 byte

Apa yang saya pikir bagus di sini adalah bahwa Anda dapat memiliki vektor sebagai indeks array. Ini mengembalikan vektor entri array yang sesuai, yang membuatnya sangat mudah untuk menambahkan string yang diberikan secara terpisah dari panjangnya.

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

Hasil:

masukkan deskripsi gambar di sini

cacat
sumber
Trik yang bagus dengan clc. Anda lupa untuk menambahkan 's'diinput
Luis Mendo
Apa maksudmu? Ini berfungsi dengan baik seperti di versi Matlab saya memiliki akses ke (R2010b).
flawr
1
Seperti sekarang, Anda perlu memasukkan string dengan tanda kutip. Untuk memasukkan konten string secara langsung (tanpa qoutes), Anda perlua=input('','s')
Luis Mendo
Sekarang saya mengerti, saya tidak mengetahui fitur itu. Karena spesifikasi tidak memerlukan ini, saya pikir tidak masalah untuk meminta 'string yang dibatasi sebagai input. Banyak bahasa membutuhkan pembatas string atau mereka akan menafsirkan argumen baris perintah dalam bentuk kalimat (kata-kata dipisahkan oleh spasi) sebagai argumen berganda pula.
flawr
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

Demonstrasi tenda

Ini versi terformat dengan beberapa komentar:

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

Beberapa catatan:

  • Saya tidak tahu mengapa PRINTsetelah FORloop diperlukan.CLSharus mengatur ulang kursor ke sudut kiri atas setiap kali. Tetapi pada QB64, setidaknya, jika saya tidak memasukkan ekstra PRINT, tenda berakhir di baris kedua, bukan yang pertama. Jika ada yang memasang QBasic di DosBox atau semacamnya, saya akan tertarik untuk mengetahui apakah hal yang sama terjadi di sana atau apakah itu bug QB64.
  • Kode memiliki kesalahan kecil karena itu bergantung TIMER (jumlah detik sejak tengah malam) untuk penundaan. Jika kode berjalan pada tengah malam, tenda akan macet karena TIMERakan diatur ulang 0dan selalu kurang dari titu.
DLosc
sumber
Bahasa pertamaku! IIRC, dalam QB 4.5, titik koma di akhir string yang dicetak berarti pernyataan PRINT tidak mencetak carriage return.
bgStack15
@ bgStack15 Milik saya juga. : ^ D Masalahnya bukan dengan PRINTtetapi dengan CLS--setelah CLS, tidak peduli apa yang dicetak sebelumnya, PRINTpernyataan berikutnya harus menghasilkan 1,1; tetapi sebaliknya, saya mengalami situasi di mana output di 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@_

Mengambil input dari parameter baris perintah.

perl marquee.pl "Welcome to Programming Puzzles & Code Golf "
Laposhasú Acsa
sumber
3

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

+3 byte untuk bendera juru bahasa 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]}

Skor yang cukup mengerikan, tetapi mengingat betapa sulitnya melakukan apa pun dalam bahasa ini, bisa jadi lebih buruk. Rasio jawaban ini dari (byte yang digunakan untuk mendapatkan teks merah) ke (bonus dari memiliki teks merah) benar-benar baik, seluruh output berubah menjadi merah hanya denganc di awal!

Waktu antara setiap centang bervariasi tergantung pada panjang string input tetapi sekitar 0,1 detik.

Omong-omong, output program ini terlihat seperti sampah total karena penerjemahnya sangat buruk. Setiap milidetik membersihkan terminal dan menggambar semuanya, sehingga benar-benar berkedip.

Dengan komentar:

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
}
monmon bawah tanah
sumber
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}}

Perl tenda

steve
sumber
2

Matlab, ⌈188 * .9⌉ = 170

Ini berfungsi dalam versi Matlab R2014b atau lebih tinggi. Hasilnya ditampilkan pada jendela gambar.

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

Dalam contoh berikut , teks diketik dalam huruf tebal untuk visualisasi yang lebih baik (tidak dilakukan dalam kode di atas karena harganya beberapa byte). Perhatikan juga bahwa kecepatan animasi GIF tidak sesuai dengan jeda 0,1 detik yang diperlukan, tetapi waktunya tepat pada gambar aktual yang ditunjukkan dengan menjalankan program.

masukkan deskripsi gambar di sini

Luis Mendo
sumber
2

SpecBAS, 130 byte (-10% = 117)

Lipat gandakan string asli menjadi 80 karakter atau lebih, lalu potong menjadi 80.

TEXTadalah perintah dalam SpecBAS yang bekerja dengan cara yang sama seperti PRINT(dalam contoh ini) tetapi menyimpan satu karakter.

The SCALEperintah menambahkan beberapa karakter tambahan untuk kode, tetapi membuatnya tampak lebih tenda-ish.

Program terus berjalan sampai Anda menekan 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

masukkan deskripsi gambar di sini

Brian
sumber
2

Perl, 63 (70 karakter - 10% untuk bonus)

Bukan solusi yang sangat berbeda dengan yang lain, tetapi saya membuang-buang waktu untuk membuatnya, jadi saya pikir saya akan mempostingnya juga!

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

Bergantung pada terminal yang kompatibel dengan Unix untuk kode ANSI dan panggilan ke coreutils ' sleep. Dua \x..karakter di atas sebenarnya adalah line-feed literal dan escape char sesuai dengan hex dump ini:

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`
Dom Hastings
sumber
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}

Saya masih bukan ahli ruby, mungkin bisa bermain golf.

Dengan skor yang sama merah & hitam:

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

Perl, 84 byte (- 10% = 76)

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

Ini mengambil argumen baris perintah yang merupakan teks dalam tenda.

Penjelasan:

  1. Sertakan 80 spasi ke teks dan simpan di $_
  2. Print backspace ( \b) dan spasi ( ). Ini menghilangkan karakter terakhir dari cetakan sebelumnya. Kemudian cetak kembali carriage dan warnai.
  3. Cetak 80 karakter teks dari posisi $p
  4. $p = ($p+1) % length of text
  5. Tidur selama 0,1 detik
svsd
sumber
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
steve
sumber
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)

Ini hanya akan bekerja pada terminal yang mendukung urutan pelarian ANSI. Jika Anda menggunakan Windows, coba ansicon .

Hore untuk flushkata kunci di Python 3, jadi kami tidak perlu melakukan sys.stdout.flush()panggilan mahal .

Tryth
sumber
1

C, 293 269 ​​byte

(Baris ditambahkan untuk keterbacaan)

Ini mengambil input dari input standar yang diakhiri oleh EOF; jadi yang terbaik adalah memasukkan string, baris baru, dan kemudian EOF (misalnya, 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);}}}

Tidak Disatukan:

#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);
}
musarithmia
sumber
1

SmileBASIC BIG, 79 byte

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

Saya punya solusi grafis yang bagus hampir selesai ketika saya menyadari itu harus menggulir 1 karakter keseluruhan sekaligus.

12Me21
sumber
1

Jelly , 20 19 18 byte

  • -1 byte dengan mengganti yang pertama 80dengan (= 256) karena harus dikalikan dengan setidaknya 80
  • -1 byte dengan mengubah infinite loop ke Çß(dari Ç1¿).

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

Dengan beberapa trik dari jawaban @Dennis di sini . Jelly lebih baru daripada tantangannya, tetapi tidak benar-benar dirancang khusus untuk itu. Saran tentang cara meningkatkan dipersilahkan! Jika konsol Anda dalam utf-8, jalankanexport LC_ALL=en_US atau mirip sebelum mencoba.

Contoh

https://gyazo.com/f3594391a6b4d459a9d30bd47cf598b1

Penjelasan

ẋ⁹ḣ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).
PidgeyDigunakanGust
sumber
0

LOVE2D Lua, 197-10% = 178 Bytes

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

Membutuhkan input berada di file yang disebut 'tt' di root, sehingga 3 byte tambahan ditambahkan ke skor.

Fungsionalitas yang sangat mendasar, hanya dalam satu loop untuk 80 iterasi, tambahkan karakter pada indeks i ditambah waktu saat ini dalam detik yang dimodulasi oleh panjang string saat ini, memberikan string input 80 karakter yang berulang, yang bergeser ke kiri seiring berjalannya waktu.

Saya menggunakan LOVE2D Untuk tertawa.

ATaco
sumber
0

Sinclair ZX81 / Timex TS1000 / 1500 BASIC, 110 byte 182 byte (untuk daftar)

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

Ia bekerja dengan mencetak 32 80 karakter pertama dari string A$pada posisi layar 0,0 di baris dua, dan kemudian memanipulasi string dari posisi 2 ke ujung sting in line 3 (Sinclair ZX81 BASIC mengindeks string dari 1 dan bukan nol ), oleh karena itu menambahkan karakter pertama ke akhir dan meneruskannya kembali ke A$variabel; lalu ada loop tanpa syarat kembali ke jalur 2.

Shaun Bebbers
sumber
0

Commodore 64, 434 bytes

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

Karena ini membutuhkan 80 karakter untuk ditampilkan, dan C64 secara default hanya 40 karakter, maka 40 karakter scrolly dicetak pada baris atas area layar sedangkan 40 lainnya dicetak di dekat bagian bawah.

Untuk menjernihkan apa yang {HOME}diterjemahkan dan simbol-simbol lain menjadi PETSCII maka berikut ini adalah ambil layar yang diambil dari emulator saya:

Commodore 64 scrolly melalui dua baris

Saya akan melakukan versi golf penuh ketika saya menginstal CBM PRG Studio (atau ketika saya sedang tidak makan siang di tempat kerja).

Shaun Bebbers
sumber
0

Ruby, 79 77 karakter

->(s){t=0;loop{system("clear");puts (s*80)[t..(80+t)];t=(t+1)%80;sleep(0.1)}}
Dorian
sumber
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;
  • Sebut saja dengan php -f marquee.php hello\ worldstring "hello world" ke tenda.
  • Untuk beberapa alasan, saya harus melakukan 160 karakter untuk string awal, kalau tidak, hasilnya akan seperti hello worlddddddddddddddddddddddddddddddddddddddd, tapi itu hanya akan diulang melalui 80 karakter - saya harap masih diperhitungkan.

https://gyazo.com/4c433abf04d71ca7ebb63a0889ca705d

Sudah hari yang panjang, mungkin ada sesuatu yang bisa saya lakukan untuk memperbaikinya

ʰᵈˑ
sumber
0

PHP, 85 byte

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

mengambil input dari argumen baris perintah pertama; jalankan bersama -nr.

Mulai menggulir dengan karakter kedua. Tambahkan satu byte untuk memulai karakter pertama:
Ganti =++$i%dengan %=dan ;;dengan ;;$i++,.

Titus
sumber