Văn bản Marquee giả


46

Trong thử thách này, văn bản marquee giả là văn bản được hiển thị từng phần, theo kiểu cuộn.

Vài ví dụ:

testing 4

   t
  te
 tes
test
esti
stin
ting
ing
ng
g


hello 2

 h
he
el
ll
lo
o


foobarz 3

  f
 fo
foo
oob
oba
bar
arz
rz
z


Something a bit longer 10

         S
        So
       Som
      Some
     Somet
    Someth
   Somethi
  Somethin
 Something
Something 
omething a
mething a 
ething a b
thing a bi
hing a bit
ing a bit 
ng a bit l
g a bit lo
 a bit lon
a bit long
 bit longe
bit longer
it longer
t longer
 longer
longer
onger
nger
ger
er
r


small 15

              s
             sm
            sma
           smal
          small
         small
        small
       small
      small
     small
    small
   small
  small
 small
small
mall
all
ll
l


aaa 3

  a
 aa
aaa
aa
a


brace yourself 6

     b
    br
   bra
  brac
 brace
brace 
race y
ace yo
ce you
e your
 yours
yourse
oursel
urself
rself
self
elf
lf
f

Bạn phải viết một chương trình hoặc một hàm có hai đầu vào và in đầu ra như mô tả ở trên. Bạn có thể hoặc không thể xuất khoảng trắng ở đầu ra. Đây là mã golf để mã ngắn nhất tính theo byte thắng.

Nếu chương trình của bạn là độc lập (tức là khi chạy thực sự in các dòng) (Đầu vào có thể được mã hóa cứng nhưng dễ thay đổi) và ngủ một chút giữa mỗi dòng đầu ra, bạn nhận được phần thưởng -10.


Bạn có ý nghĩa gì bởi "bao gồm đầu ra"?
Trình tối ưu hóa

1
Ngoài ra, chúng ta có phải in các dòng đầu tiên và cuối cùng đơn giản là không gian không?
Trình tối ưu hóa

2
Lấy cảm hứng từ điều này ?
Spikatrix

1
Một dòng trống duy nhất ở đầu dường như được cho phép. Làm thế nào về một dòng trống khác ở cuối?
nimi

2
Vì bạn đang nói về "chỉ đầu ra có thể nhìn thấy", chúng ta có thể cho rằng đầu vào sẽ chỉ có thể in ASCII không? (mã ký tự 0x20 đến 0x7E)
Martin Ender

Câu trả lời:


24

CJam, 12 11 byte

1 byte được lưu bởi Dennis.

,Sf*\f+$zN*

Tôi đang sử dụng "Đầu vào có thể được mã hóa cứng nhưng dễ thay đổi": điều này hy vọng đầu vào đã có trên ngăn xếp, vì vậy "testing" 4, ví dụ , bạn có thể thêm vào phần trên.

Kiểm tra nó ở đây.

Giải trình

Lưu ý rằng chuyển vị của đầu ra mong muốn đơn giản hơn nhiều:

   testing
  testing
 testing
testing

Vì vậy, chúng ta chỉ cần tạo ncác dòng, chuẩn bị ikhoảng trắng cho itừ n-1xuống 0. Đó là những gì mã làm:

,            e# Turn n into a range [0 1 .. n-1]
 Sf*         e# Turn each i into a string of i spaces.
    \f+      e# Swap this array with the input string and append it to each of the
             e# strings of spaces.
       $     e# Sort the array to have the string with n-1 spaces first.
        z    e# Transpose the grid.
         N*  e# Join the lines with newline characters.

19 - 10 = 9?

Tôi thấy phần thưởng "ngủ một chút giữa mỗi dòng" hơi mơ hồ và tinh ranh, nhưng đây là phiên bản 19 byte chỉ đơn giản là đứng sau mỗi dòng bằng cách tính tất cả các hoán vị của mảng [0 1 .. 7]. Trong trình thông dịch trực tuyến, điều này chỉ dẫn đến kết quả cuối cùng được hiển thị muộn hơn một chút, nhưng nếu bạn sử dụng trình thông dịch Java thì điều này thực sự sẽ in mỗi dòng sau khi "ngủ một chút":

,Sf*\f+$z{oNo8e!;}/

Sử dụng tốt đẹp của z. Giả sử đầu vào là ASCII có thể in, bạn có thể thay thế W%bằng $.
Dennis

@Dennis Oh, tôi thích điều đó. Tôi đã yêu cầu làm rõ về điều này từ OP. (Điều đó nói rằng, tôi sử dụng ztất cả thời gian cho các thử thách dựa trên lưới ascii.)
Martin Ender

15

C, 69 byte

ma thuật printf!

f(s,n,i)char*s;{for(i=n;*s;i?i--:s++)printf("%*s%.*s\n",i,"",n-i,s);}

Phiên bản mở rộng với một số giải thích:

f(s,n,i)char*s;{       /* s is the string, n is the width of the grid. */
  for(i=n;             /* i is the number of preceding spaces. */
      *s;              /* Stop once we reach the end of the string. */
      i?i--:s++)       /* Decrease the number of spaces, and when there's 
                          none left start truncating the string itself. */
  printf("%*s          /* The first argument is the minimum width to print the 
                          string (left padded with spaces) and the second 
                          argument is the string to print. We use the empty 
                          string just to print the i spaces. */
    %.*s              /* The third argument is the maximum number of 
                         characters from the string (which is the fourth 
                         argument) to print. */
    \n",i,"",n-i,s);
}

Và đây là một ví dụ:

$ ./marquee stackoverflow 12

           S
          thứ
         sta
        stac
       cây rơm
      chồng
     chồng
    ngăn xếp
   chồng lên nhau
  stackoverf
 stackoverfl
stackoverflo
dòng chảy
dòng chảy
dòng chảy
dòng chảy
tràn ra
lời nói
dòng chảy
dòng chảy
lưu lượng
Thấp
con nợ
w

14

Bình thường, 13 byte

jb.:++K*dQzKQ

Dùng thử trực tuyến: Trình biên dịch / thực thi Pyth

Giải trình

                 implicit: z = input string, Q = input number
      K*dQ       K = " " * Q
    ++K   zK     K + z + K
  .:        Q    all substrings of length Q
jb               join by newlines and print

6

Con trăn 65 63

s=lambda t,s:'\n'.join((' '*s+t)[i:s+i]for i in range(len(t)+s))

Điều này thực sự được sử dụng để viết các ví dụ. Giải pháp cơ bản.

>>> print(s("foobarz", 3))

  f
 fo
foo
oob
oba
bar
arz
rz
z

2
Tôi chưa thử nó nhưng bạn sẽ có thể loại bỏ các dấu ngoặc vuông bên trongjoin
ngầm trong

@undergroundmonorail phải
Caridorc

6

Javascript ( Dự thảo ES7 ), 61 byte

f=(s,l)=>[x.substr(i,l)for(i in x=' '.repeat(l)+s)].join(`
`)
<input id="str" value="Some String" />
<input id="num" value="5" />
<button onclick="out.innerHTML=f(str.value, +num.value)">Run</button>
<br /><pre id="out"></pre>

Đầu vào được mã hóa Javascript ( ES6 ), 47 byte

Giả sử đầu vào được mã hóa cứng trong các biến s(chuỗi) và l(độ dài), có thể giảm xuống còn 47 byte in với cảnh báo cho mỗi dòng:

for(i in x=' '.repeat(l)+s)alert(x.substr(i,l))

5

K, 19 byte

{x#'![1]\(x#" "),y}

Tack xdấu cách ( x#" ") vào đầu chuỗi y. Sau đó sử dụng hình thức "quét điểm cố định" của toán tử \để tạo tập hợp các chuỗi xoay. Một điểm cố định trong K dừng lặp lại nếu kết quả của việc áp dụng hàm trả về kết quả lặp lại hoặc nếu đầu vào ban đầu được xem xét lại. Vì ![1]sẽ xoay một chuỗi một bước tại một thời điểm, ![1]\là một thành ngữ tốt đẹp cho hoán vị theo chu kỳ. Sau đó, chúng tôi chỉ cần cắt kết quả với x#'.

Một mẫu chạy:

  {x#'![1]\(x#" "),y}[4;"some text"]
("    "
 "   s"
 "  so"
 " som"
 "some"
 "ome "
 "me t"
 "e te"
 " tex"
 "text"
 "ext "
 "xt  "
 "t   ")

5

J (22)

Điều này đã kết thúc lâu hơn tôi dự đoán, nhưng tôi đoán nó không quá tệ.

[{."0 1[:]\.(' '#~[),]

Sự thật thú vị: không phải []thực sự phù hợp, hoặc có bất cứ điều gì để làm với nhau.


Sau 3 thay đổi nhỏ: [{."1]]\.@,~' '#~[(18 byte).
ngẫu nhiên

5

Julia, 75 byte

(s,n)->(n-=1;print(join([(" "^n*s*" "^n)[i:n+i]for i=1:length(s)+n],"\n")))

Điều này tạo ra một hàm không tên, chấp nhận một chuỗi và số nguyên làm đầu vào và in đầu ra. Để gọi nó, đặt tên cho nó, vd f=(s,n)->(...).

Ungolfed + giải thích:

function f(s, n)
    # Decrement n by 1
    n -= 1

    # Construct the lines as an array using comprehension by repeatedly
    # extracting subsets of the input string padded with spaces
    lines = [(" "^n * s * " "^n)[i:n+i] for i = 1:length(s)+n]

    # Print the array elements separated by a newline
    print(join(lines, "\n"))
end

Ví dụ:

julia> f("banana", 3)
  b
 ba
ban
ana
nan
ana
na 
a

julia> f("Julia", 6)
     J
    Ju
   Jul
  Juli
 Julia
Julia 
ulia  
lia   
ia    
a     

Lưu ý rằng giải pháp này là 66 byte nếu snđược giả sử là đã tồn tại trong chương trình.


5

QBasic, 56 - 10 = 46

Đây là QBasic được đánh gôn - bộ lọc tự động sẽ mở rộng ?vào PRINTvà thêm một số khoảng trắng. Đã thử nghiệm với QB64 , mặc dù không có gì ở đây không hoạt động với DOS QBasic.

s=SPACE$(n)+s
FOR i=1TO LEN(s)
?MID$(s,i,n)
SLEEP 1
NEXT

QBasic thường không tốt với các hoạt động chuỗi, nhưng rất thuận tiện một hàm trả về một số lượng không gian nhất định!

Lấy một số quyền tự do với "đầu vào có thể được mã hóa cứng", mã này hy vọng biến ssẽ làDIM 'd AS STRING, để tránh $hậu tố kiểu, cũng như chuỗi được gán svà số cho n.

Lời mở đầu ví dụ:

DIM s AS STRING
s="string"
n=4

Đầu ra:

   S
  thứ
 str
đình công
trin
nhẫn
ing
ng
g

Hàng trống trên cùng có thể được loại bỏ bằng cách bắt đầu FORvòng lặp ở 2 thay vì 1.

Phần thưởng: Thêm CLSngay trước đó NEXTcho bốn byte nhỏ gọn biến điều này thành ... một hầu tước thực sự !

Hầu tước

Tôi PRINT CHR$(3)QBasic. : ^ D


Tôi nên thử lại QBasic ... Đó là những gì tôi học được lần đầu tiên
Luke Luke REINSTATE MONICA

5

Ruby, 68 , 55 byte

a=" "*$*[1].to_i+$*[0]+" ";a.size.times{|b|puts a[b...b+$*[1].to_i]}

Sau khi cập nhật từ @blutorange:

a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}

Đầu ra:

         S
        So
       Som
      Some
     Somet
    Someth
   Somethi
  Somethin
 Something
Something 
omething a
mething a 
ething a b
thing a bi
hing a bit
ing a bit 
ng a bit l
g a bit lo
 a bit lon
a bit long
 bit longe
bit longer
it longer 
t longer 
 longer 
longer 
onger 
nger 
ger 
er 
r 

ruby marquee.rb "Something a bit longer" 10

Trình đầu tiên để yêu cầu phê bình.


1
Trông cũng được thực hiện với tôi, sử dụng một số phím tắt ruby. Không gian cuối cùng dường như không cần thiết mặc dù ("chỉ có vấn đề đầu ra có thể nhìn thấy") và bạn có thể lưu một số byte bằng cách sử dụng một biến tạm thời:a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}
blutorange

@blutorange Cảm ơn bạn đã phản hồi!
DickieBoy

Không có gì. Vui lòng chỉnh sửa câu trả lời nếu bạn muốn;)
blutorange

4

Haskell, 61 59 54 byte

m n=unlines.scanr((take n.).(:))[].(replicate n ' '++)

Ví dụ sử dụng:

*Main> putStr $ m 6 "stackoverflow"

     s
    st
   sta
  stac
 stack
stacko
tackov
ackove
ckover
koverf
overfl
verflo
erflow
rflow
flow
low
ow
w

*Main> 

Chỉnh sửa: cho phép một dòng trống ở đầu / cuối


4

Bash, 109 - 10 = 99 byte

Tôi thấy rằng trong thời gian tôi phải viết giải pháp của mình, tôi đã bị đánh bại một cách rõ ràng. Tuy nhiên, tôi đã dành quá nhiều thời gian để viết nó để không đăng nó ...

Bên cạnh đó, nó có một số tính năng độc đáo, như thời gian giữa các dòng in được người dùng điều chỉnh dựa trên số lượng trong thư mục hiện tại! (Cũng hơi không nhất quán, tùy thuộc vào cảm giác của đĩa của bạn)

l=${#1};s=$1;for j in `seq 1 $2`;do s=" $s";done;for i in `seq 0 $((l+$2))`;do echo "${s:i:$2}";find 1>2;done

Thí dụ:

cd <some directory in which you own everything recursively>
Marquee.sh "Test Case" 4

   T
  Te
 Tes
Test
est 
st C
t Ca
 Cas
Case
ase
se
e

Ungolfed và bình luận:

l=${#1} #Length of the incoming string
s=$1 #Can't reassign to the parameter variables, so give it another name
for j in `seq 1 $2`; do
    s=" $s" # Put on the padding spaces
done

for i in `seq 0 $((l+$2))`; do
    #Cut the string and print it. I wish I could lose "padding" that easily!
    echo "${s:i:$2}" #Format is ${string:index:length}, so always the same
    # length, with the index moving into the string as the loop advances
    find 1>2  #Wait "a bit". From ~/, about 6 minutes per line on my junky 
    # computer with a huge home directory. Probably in the <1 sec range for
    # most people.
    #This actually has the same character count as sleep(X), but is much
    # more fun!
done

Tôi chưa bao giờ thực sự thử điều này trước đây. Đề nghị và ý kiến ​​chào mừng!


4

Bash thuần túy, 61 byte

printf -vs %$2s"$1"
for((;++i<${#1}+$2;)){
echo "${s:i:$2}"
}

Đầu ra:

$ ./marquee.sh testing 4
   t
  te
 tes
test
esti
stin
ting
ing
ng
g
$ 

Tôi đoán tôi không hiểu phân biệt Bash "thuần túy", vì vậy có thể đề xuất này không tốt, nhưng ngủ (1) là 8 ký tự và mang lại cho bạn -10 (và là một GNU Core
Util

3

Perl, 50

$c=$" x$^I;$_="$c$_$c";sleep say$1while(/(?<=(.{$^I}))/g)

57ký tự +3cho -i, -n-l. -10nhân vật cho giấc ngủ.

-iđược sử dụng cho đầu vào số, được lưu trữ trong $^I. Về cơ bản, chúng tôi thêm ikhoảng trắng vào phía trước và cuối của đầu vào, sau đó tìm kiếm mọi iký tự và lặp qua chúng với while. saythuận tiện trả lại 1mà chúng ta có thể nhập vào sleep.

echo "testing" | perl -i4 -nlE'$c=$" x$^I;$_="$c$_$c";sleep say$1while(/(?<=(.{$^I}))/g)'

Tôi biết điều này đã cũ, nhưng nó chỉ nhảy trở lại trang đầu và tôi đã có một chút thu nhỏ điều này xuống một chút : s/^|$/$"x$^I/eg;sleep say$1 while s/.(.{$^I})/$1/. Bạn cũng có thể mất -lcờ, nhưng tôi nghĩ bạn cần tính 5 cho -i -n(vì -ikhông phải là cờ mặc định) nếu bạn chạy qua : echo -n "testing" | perl -i4 -nE'...'. Vẫn nên giảm xuống còn 44!
Dom Hastings

@DomHastings cảm ơn Dom! Làm tốt lắm, tôi sẽ chỉnh sửa câu trả lời của mình sau :)
hmatt1

3

Vỏ POSIX, 94

[ $3 ]||set "`printf "%${2}s"`$1" $2 t
[ "$1" ]&&printf "%-.${2}s" "$1" "
"&&$0 "${1#?}" $2 t

Tôi biết nó trông gần với perl hơn, nhưng đây thực sự là vỏ!

Dòng đầu tiên thêm các không gian hàng đầu cần thiết, chỉ trong lần đầu tiên thông qua vòng lặp. Nó đặt $ 3 để chỉ ra rằng nó đã làm như vậy.

Dòng thứ hai (NB nhúng dòng mới) lặp lại cho đến khi hết đầu vào, in n ký tự đầu tiên của chuỗi, sau đó tự gọi với ký tự đầu tiên được xóa khỏi $ 1.

Đã thử nghiệm với Debian /bin/dash- các kết quả đầu ra mẫu như sau:

./marquee "thử nghiệm" 4

   t
  te
 tes
test
esti
stin
ting
ing
ng
g

./marquee "Một cái gì đó dài hơn một chút" 10

         S
        So
       Som
      Some
     Somet
    Someth
   Somethi
  Somethin
 Something
Something 
omething a
mething a 
ething a b
thing a bi
hing a bit
ing a bit 
ng a bit l
g a bit lo
 a bit lon
a bit long
 bit longe
bit longer
it longer
t longer
 longer
longer
onger
nger
ger
er
r

./marquee "nhỏ" 15

              s
             sm
            sma
           smal
          small
         small
        small
       small
      small
     small
    small
   small
  small
 small
small
mall
all
ll
l

Tôi có thể thêm 9 ký tự để nhận phần thưởng -10! ["$ 1"] && printf "% -. $ {2} s" "$ 1" "" && ngủ 1 && $ 0 "$ {1 #?}" $ 2 t
Toby Speight

3

Python 2, 51 byte / 37 byte

Không có đầu vào được mã hóa cứng (51 byte):

def f(s,n):
 s=" "*n+s
 while s:print s[:n];s=s[1:]

Gọi như thế f("testing", 4).

Với đầu vào được mã hóa cứng (37 byte):

s="testing";n=4

s=" "*n+s
while s:print s[:n];s=s[1:]

Cả hai phiên bản đều xuất ra một dòng không gian ban đầu.


3

Python 2, (54 byte - 10 = 44) 64 62 60 46

(Tôi giả sử dòng cho đầu vào được mã hóa cứng không thêm vào số byte.)

Tôi chưa thấy một chương trình nào thực sự ngủ giữa các dòng in, vì vậy tôi đã tạo ra một chương trình như vậy, vì nó trông giống như một marquee theo cách đó. Chương trình này có thêm 2 byte trong Python 3.

EDIT: Chương trình hiện đang tính toán thay vì ngủ. Tôi đã sử dụng itrong tính toán để chương trình không lưu trữ nó dưới dạng hằng số, nhưng phải tính toán nó mỗi lần.

Hãy dùng thử Python 3 tại đây (thay thế Python 2 là lỗi)

i=0
while s[i-n:]:print((' '*n+s)[i:n+i]);i+=1;i**7**7

Có lẽ thay vì time.sleepcó một số tính toán dài bạn có thể sử dụng? Ngoài ra, nó ngắn hơn một chút để sử dụng whilevòng lặp:i=0\nwhile s[i-n:]:print(' '*n+s)[i:n+i];i+=1
xnor

@xnor Exponentiation một vài lần hoạt động khá tốt cho một tính toán.
mbomb007

@ mbomb007 Tôi không nghĩ bạn cần lưu trữ giá trị của tính toán để khiến python thực sự làm điều đó (để bạn có thể lưu 'q ='). Ngoài ra, x ^ 7 ^ 7 về mặt toán học tương đương với x ^ 49, mặc dù python dường như giải quyết cái sau nhanh hơn một chút đối với tôi. Bạn có thể lưu một vài ký tự theo cách đó.
Sompom

@Sompom Hãy thử nó trong thay thế. Nếu tôi hợp nhất biểu thức thành một số mũ, nó sẽ loại bỏ hoàn toàn độ trễ thời gian. Nhưng tôi sẽ loại bỏ q=. Cảm ơn.
mbomb007

@Sompom Exponentiation là liên kết đúng, vì vậy đây thực sự lài**(7**7)
Sp3000

3

Bình thường, 12 byte

jb.:X*dyQQzQ

Trình diễn, thuyết trình.


Pyth, 17 - 10 = 7 byte

FN.:X*dyQQzQ&.p9N

Phiên bản này sử dụng độ trễ giữa các dòng in. Điều này có thể được nhìn thấy trên trình biên dịch dòng lệnh, mà bạn có thể nhận được ở đây .

Chạy như sau:

pyth -c 'FN.:X*dyQQzQ&.p9N' <<< 'testing
4'

Điều này có độ trễ khoảng 0,3 giây trước mỗi lần in. Nếu bạn thích độ trễ dài hơn, bạn có thể sử dụng:

FN.:X*dyQQzQ&.pTN

Điều này có độ trễ khoảng 4 giây.


3

Java, 133 119 115

int i;void f(String s,int n){for(;++i<n;)s=" "+s+" ";for(;i<=s.length();)System.out.println(s.substring(i-n,i++));}

Phiên bản dài:

int i;
void f(String s, int n) {
    for(; ++i < n;)
        s = " " + s + " ";
    for(; i<=s.length();)
        System.out.println(s.substring(i-n, i++));
}

Đệm được áp dụng cho chuỗi, và sau đó các chuỗi con của chuỗi đệm được in ra bàn điều khiển.

-4 byte nhờ @KevinCruijssen.


Tôi biết đã hơn một năm, nhưng bạn có thể chơi golf vòng lặp thứ hai một chút: for(;i<= s.length();System.out.println(s.substring(i-n,i++)));( -3 byte )
Kevin Cruijssen

1
Không có nghĩa là nó không thể được cải thiện. :) Cảm ơn.
TNT

2

Matlab, 95

Như mọi khi, nó là một thao tác của ma trận. Cốt lõi ở đây là lệnh spdiagscho phép bạn tạo ma trận đường chéo rất dễ dàng.

t=input('');
n=numel(t);
k=input('');
flipud(char(full(spdiags(repmat(t,n+k-1,1),1-n:0,n+k-1,k))))

Với mã hóa 71 byte (chuỗi dự kiến ​​được lưu trữ tvà số trong k)

n=numel(t);flipud(char(full(spdiags(repmat(t,n+k-1,1),1-n:0,n+k-1,k))))

2

APL, 50 - 10 = 40 ký tự

Tôi chắc rằng nó có thể ngắn hơn. 50 là độ dài của chương trình mà không có hai hằng số.

{⍵≡⍬:⍬⋄⎕←↑⍵⋄⎕DL 99⋄∇1↓⍵}⊂[0]⊖s⍴⍨n,¯1+⍴s←'brace yourself',' '⍴⍨n←6

Giải trình:

                               ' '⍴⍨n←6   call the number 'n' and make n spaces
            s←'brace yourself',           append them to the string and call it 's'
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
                             s⍴⍨n,¯1+⍴s   make a len(s)-1 by n matrix by repeating s 
                        ⊂[0]⊖             reflect the matrix and extract the columns
{                      }                  pass the list of columns to this function
 ⍵≡⍬:⍬⋄                                   return if the list is empty
       ⎕←↑⍵⋄                              print the first column (as a row)
            ⎕DL 99⋄                       wait for 99ms
                   ∇1↓⍵                   recurse with the rest of the columns

Phát triển cho ngn APL trên thiết bị đầu cuối.


2

Powershell - 85 83 byte

Đã muộn rồi, nó sẽ không thắng :-) Nhưng tôi nghĩ tôi sẽ ném vào một chiếc Powershell cho hoàn chỉnh:

function m($s,$n){1..$($n+$s.length)|%{-join(" "*$n+$s+" "*$n)[$_-1..$($n+$_-1)]}}


1

Rắn hổ mang - 60

def f(n,s)
    s=' '.repeat(n)+s
    while''<s,print (s=s[1:])[:n]

1

Groovy - 82

n=args[1]as int;t=" "*n+args[0]+" "*n;(0..t.size()-n).each{println t[it..it+n-1]}

1

Lua, 79 byte

r=io.read;t=r()w=r()s=" "t=s:rep(w)..t;for i=1,t:len()do print(t:sub(i,i+w))end

1

C #, 112 byte

s=>n=>{var r=new string(' ',n-1);s=r+s+r;r="";for(int i=0;i<s.Length-n+1;)r+=s.Substring(i++,n)+"\n";return r;};

Chương trình đầy đủ với phương pháp vô căn cứ và các trường hợp thử nghiệm:

using System;

namespace FakeMarqueeText
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<string,Func<int,string>>f= s=>n=>
            {
                var r=new string(' ',n-1);
                s=r+s+r;
                r="";
                for(int i=0;i<s.Length-n+1;)
                    r+=s.Substring(i++,n)+"\n";

                return r;
            };

            // test cases:
            Console.WriteLine(f("testing")(4));
            Console.WriteLine(f("hello")(2));
            Console.WriteLine(f("foobarz")(3));
            Console.WriteLine(f("Something a bit longer")(10));
            Console.WriteLine(f("small")(15));
            Console.WriteLine(f("aaa")(3));
            Console.WriteLine(f("brace yourself")(6));

        }
    }
}


1

PHP4.1, 85-10 = 75 byte

Vâng, đây là một phiên bản rất cũ, nhưng nó có một chức năng tôi cần.
Bạn vẫn có thể chạy nó trong bất kỳ phiên bản PHP gần đây nào, nhưng bạn cần phải tự đặt các biến trước khi chạy mã bên dưới.

Điều đó giúp tôi giảm kích thước mã của tôi rất nhiều!

Nó thực sự cơ bản:

<?for($s=str_repeat(' ',$n).$s;$i++<strlen($s)+$n;sleep(1))echo substr($s,$i,$n),'
';

Tôi đã chạy để nhận tiền thưởng do điều này, trích dẫn OP:

Nếu chương trình của bạn là độc lập (tức là khi chạy thực sự in các dòng) (Đầu vào có thể được mã hóa cứng nhưng dễ thay đổi) và ngủ một chút giữa mỗi dòng đầu ra, bạn nhận được phần thưởng -10.

Như bạn rõ ràng có thể thấy, nó có một giấc ngủ.

Điều này giả định rằng bạn đã register_globalsbật theo mặc định, đó là cài đặt mặc định cho phiên bản này.


Bạn có thể dễ dàng kiểm tra trong trình duyệt của mình, với tối thiểu một vài thay đổi:

//detects if it is running in js or php
//true for js, false for php
if('\0'=="\0")
{
	function strlen($s){
		return $s.length;
	}
	
	function str_repeat($s,$n){
		return Array($n+1).join($s);
	}
	
	function substr($s,$n,$m){
		return $s.substr($n,$m);
	}
	
	function printf($s){
		document.write($s);
	}
	
	function concat($a,$b){
		return $a+$b;
	}
}
else
{
	function concat($a,$b){
		return $a.$b;
	}
}

//sets the variables, not required for PHP if you pass the values by GET or POST
$i=0;
$s='example';
$n=6;



for($s=concat(str_repeat('-',$n),$s);$i++<strlen($s)+$n;)printf(concat(substr($s,$i,$n),'<br>'));
*{font-family:monospace}

Đoạn mã trên là một polyglot và bạn có thể chạy trong trình duyệt của mình hoặc trong trình thông dịch PHP. Tôi có nên nhận giải thưởng cho việc này không? Một cái bánh quy, có lẽ?

Danh sách các thay đổi:

  • Đã xóa sleep(1)trong thử nghiệm này
  • Tạo 2 phiên bản của hàm concat
    Mục tiêu là khắc phục sự khác biệt của PHP và JS trong các chuỗi nối.
  • Thay vì một khoảng trắng, a -được sử dụng để lấp đầy khoảng trống
  • Thay vì echo, printflà sử dụng thay thế (giới hạn PHP)
  • Thay vào đó hoặc một dòng mới 'thực', <br>được sử dụng thay thế


1

APL (Dyalog) , 17 byte

⌽⍉↑(⎕,⍨' '/⍨⊢)¨⍳⎕

Hãy thử trực tuyến!

(chương trình giả định ⎕IO←0là mặc định trên nhiều máy)

Giải trình

⍳⎕               Create a range 0 .. input-1
¨                For each element in this range do:
 ' '/⍨⊢           A space duplicated right argument (which is the element in  the range) times
 ⎕,⍨              Concatenated with the input string to its right
⌽⍉               Transpose and reflect horizontally
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.