ข้อความปะรำปลอม


46

ในความท้าทายนี้ข้อความปะรำปลอมคือข้อความที่แสดงเป็นส่วน ๆ ในลักษณะคล้ายกับการเลื่อน

ตัวอย่างบางส่วน:

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

คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นที่รับสองอินพุตและพิมพ์เอาต์พุตตามที่อธิบายไว้ข้างต้น คุณสามารถหรือไม่ออกช่องว่างต่อท้ายในการส่งออกของคุณ นี่คือโค้ดกอล์ฟที่สั้นที่สุดในหน่วยไบต์

หากโปรแกรมของคุณเป็นแบบสแตนด์อโลน (เช่นเมื่อเรียกใช้งานจริงพิมพ์บรรทัด) (อินพุตสามารถเป็นแบบฮาร์ดโค้ด แต่ง่ายต่อการเปลี่ยนแปลง) และพักสักครู่ระหว่างเอาต์พุตแต่ละบรรทัดคุณจะได้รับ -10 โบนัส


คุณหมายถึงอะไรโดย "รวมผลลัพธ์"
เครื่องมือเพิ่มประสิทธิภาพ

1
นอกจากนี้เราต้องพิมพ์บรรทัดแรกและบรรทัดสุดท้ายซึ่งเป็นช่องว่างหรือไม่?
เครื่องมือเพิ่มประสิทธิภาพ

2
แรงบันดาลใจจากสิ่งนี้ ?
Spikatrix

1
บรรทัดว่างเปล่าที่จุดเริ่มต้นดูเหมือนว่าจะได้รับอนุญาต ในที่สุดบรรทัดที่ว่างเปล่าอีกแล้ว
nimi

2
เนื่องจากคุณกำลังพูดถึง "เอาต์พุตที่มองเห็นได้เท่านั้น" เราสามารถสมมติว่าอินพุตนั้นสามารถพิมพ์ได้เฉพาะ ASCII หรือไม่ (รหัสอักขระ 0x20 ถึง 0x7E)
Martin Ender

คำตอบ:


24

CJam, 12 11 ไบต์

1 ไบต์บันทึกโดย Dennis

,Sf*\f+$zN*

ฉันกำลังใช้ "อินพุตอาจเป็นโค้ดยาก แต่ง่ายต่อการเปลี่ยนแปลง": สิ่งนี้คาดว่าอินพุตจะอยู่ในสแต็กอยู่แล้วดังนั้นคุณจึงสามารถเพิ่ม"testing" 4ไปข้างต้นได้

ทดสอบที่นี่

คำอธิบาย

ขอให้สังเกตว่าการโยกย้ายของเอาต์พุตที่ต้องการนั้นง่ายกว่ามาก:

   testing
  testing
 testing
testing

ดังนั้นเราก็ต้องสร้างnเส้น prepending iช่องว่างสำหรับiจากการลงไปn-1 0นั่นคือสิ่งที่รหัสทำ:

,            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?

ฉันพบ "นอนบิตระหว่างแต่ละบรรทัด" โบนัสบิตคลุมเครือและหลบ แต่ที่นี่เป็นรุ่นที่ 19 [0 1 .. 7]ไบต์ที่เพียงคอกม้าหลังจากแต่ละบรรทัดโดยการคำนวณพีชคณิตทั้งหมดของอาร์เรย์ ในล่ามออนไลน์สิ่งนี้จะนำไปสู่ผลลัพธ์สุดท้ายที่ถูกแสดงในภายหลัง แต่ถ้าคุณใช้ล่าม Java สิ่งนี้จะพิมพ์แต่ละบรรทัดหลังจาก "sleep a bit":

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

ใช้ดีzมาก สมมติว่าใส่เป็น ASCII พิมพ์คุณสามารถแทนที่ด้วยW% $
เดนนิส

@ เดนนิสโอ้ฉันชอบมัน ฉันขอชี้แจงเกี่ยวกับเรื่องนี้จาก OP (ที่กล่าวว่าฉันใช้zตลอดเวลาสำหรับความท้าทายบนตาราง Ascii.)
Martin Ender

15

C, 69 ไบต์

printf magic!

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

เวอร์ชันขยายพร้อมคำอธิบายบางอย่าง:

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);
}

และนี่คือตัวอย่าง:

$ ./marquee stackoverflow 12

           s
          เซนต์
         STA
        stac
       กอง
      Stacko
     stackov
    stackove
   stackover
  stackoverf
 stackoverfl
stackoverflo
tackoverflow
ackoverflow
ckoverflow
koverflow
ล้น
verflow
erflow
rflow
ไหล
ต่ำ
โอ๊ย
W

14

Pyth, 13 ไบต์

jb.:++K*dQzKQ

ลองใช้งานออนไลน์: Pyth Compiler / Executor

คำอธิบาย

                 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

Python 65 63

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

นี่ใช้เพื่อเขียนตัวอย่างจริง ๆ โซลูชันพื้นฐาน

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

  f
 fo
foo
oob
oba
bar
arz
rz
z

2
ฉันยังไม่ได้ทดสอบ แต่คุณควรจะลบวงเล็บเหลี่ยมออกได้join
undergroundmonorail

@undergroundmonorail right
Caridorc

6

Javascript ( ฉบับร่าง ES7 ), 61 ไบต์

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>

Javascript ( ES6 ) Hardcoded Input, 47 ไบต์

สมมติว่าอินพุตที่เข้ารหัสแบบตายตัวในตัวแปรs(สตริง) และl(ความยาว) สามารถลดการพิมพ์ที่47ไบต์ด้วยการแจ้งเตือนสำหรับแต่ละบรรทัด:

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

5

K, 19 ไบต์

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

แทคxช่องว่าง ( x#" ") yไปยังจุดเริ่มต้นของสตริง จากนั้นใช้รูปแบบ "การสแกนจุดคงที่" ของโอเปอเรเตอร์\เพื่อสร้างชุดของสตริงที่หมุน จุดคงที่ใน K จะหยุดการวนซ้ำหากผลลัพธ์ของการใช้ฟังก์ชั่นส่งกลับผลลัพธ์ซ้ำหรือถ้ามีการเริ่มต้นอินพุตใหม่ ตั้งแต่![1]จะหมุนสตริงหนึ่งขั้นในเวลา![1]\เป็นสำนวนที่ดีสำหรับการเปลี่ยนลำดับวงจร x#'จากนั้นเราก็ตัดผลกับ

ตัวอย่างการเรียกใช้:

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

5

J (22)

สิ่งนี้จบลงนานกว่าที่ฉันคาดไว้ แต่ฉันคิดว่ามันไม่เลวร้ายนัก

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

สนุกจริง: ไม่ใช่[และ]ตรงกับความเป็นจริงหรือมีอะไรเกี่ยวข้องกัน


หลังจากการเปลี่ยนแปลงเล็กน้อย 3 ครั้ง: [{."1]]\.@,~' '#~[(18 ไบต์)
randomra

5

Julia, 75 ไบต์

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

สิ่งนี้จะสร้างฟังก์ชั่นที่ไม่มีชื่อที่ยอมรับสตริงและจำนวนเต็มเป็นอินพุตและพิมพ์เอาต์พุต f=(s,n)->(...)เรียกว่าให้มันชื่อเช่น

คำอธิบาย Ungolfed +:

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

ตัวอย่าง:

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     

โปรดทราบว่าการแก้ปัญหานี้คือ 66 ไบต์ถ้าsและnจะถือว่ามีอยู่แล้วในโปรแกรม


5

QBasic, 56 - 10 = 46

นี่คือสนามกอล์ฟ QBasic - ตัวจัดรูปแบบอัตโนมัติจะขยาย?เข้าไปPRINTและเพิ่มช่องว่างบางส่วน ทดสอบกับQB64แม้ว่าจะไม่มีอะไรในนี้ที่จะไม่ทำงานกับ DOS QBasic

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

QBasic โดยทั่วไปจะไม่ดีกับการดำเนินงานสตริง แต่มีอย่างสะดวกเป็นฟังก์ชั่นที่ให้ผลตอบแทนจำนวนที่กำหนดของช่องว่าง!

เสรีภาพบางอย่างกับ "การป้อนข้อมูลอาจจะยากรหัส" รหัสนี้คาดว่าตัวแปรsที่จะเป็นDIM'd AS STRINGในการสั่งซื้อเพื่อหลีกเลี่ยงการ$ต่อท้ายประเภทเช่นเดียวกับสตริงที่ถูกมอบหมายให้และจำนวนที่จะsn

ตัวอย่างคำนำ:

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

เอาท์พุท:

   s
  เซนต์
 STR
stri
Trin
แหวน
ไอเอ็นจี
งะ
ก.

แถวว่างด้านบนอาจถูกกำจัดได้โดยเริ่มการFORวนซ้ำที่ 2 แทน 1

โบนัส: การเพิ่มที่CLSถูกต้องก่อนNEXTสำหรับบิตเล็ก ๆ น้อย ๆ สี่ไบต์ทำให้สิ่งนี้กลายเป็น ... กระโจมจริง !

ปะรำ

ฉันPRINT CHR$(3)QBasic : D ^


ฉันควรลอง QBasic อีกครั้ง ... มันเป็นสิ่งที่ฉันได้เรียนรู้ครั้งแรก
Canadian Luke ติดตั้ง MONICA ใหม่

5

Ruby, 68 , 55 ไบต์

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

หลังจากอัปเดตจาก @blutorange:

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

เอาท์พุท:

         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

การส่งครั้งแรกเพื่อขอคำวิจารณ์


1
ดูดีสำหรับฉันแล้วโดยใช้ทางลัดทับทิม ช่องว่างสุดท้ายดูเหมือนจะไม่จำเป็น แต่ ("เฉพาะสิ่งที่เห็นได้เท่านั้น") และคุณสามารถบันทึกไบต์ได้ด้วยการใช้ตัวแปรชั่วคราว:a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}
blutorange

@ blutorange ขอบคุณสำหรับข้อเสนอแนะ!
DickieBoy

ไม่เป็นไร อย่าลังเลที่จะแก้ไขคำตอบหากคุณต้องการ;)
blutorange

4

Haskell, 61 59 54 ไบต์

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

ตัวอย่างการใช้งาน:

*Main> putStr $ m 6 "stackoverflow"

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

*Main> 

แก้ไข: อนุญาตให้มีบรรทัดว่างที่จุดเริ่มต้น / สิ้นสุด


4

Bash, 109 - 10 = 99 ไบต์

ฉันเห็นว่าในเวลาที่ฉันต้องเขียนวิธีการแก้ปัญหาของฉันฉันถูกทุบตีอย่างสมบูรณ์ อย่างไรก็ตามฉันใช้เวลาเขียนนานเกินไปที่จะไม่โพสต์มัน ...

นอกจากนี้ยังมีคุณสมบัติที่เป็นเอกลักษณ์เช่นเวลาระหว่างการพิมพ์บรรทัดที่ผู้ใช้สามารถปรับได้ตามปริมาณในไดเรกทอรีปัจจุบัน! (ยังค่อนข้างไม่สอดคล้องกันขึ้นอยู่กับความรู้สึกของดิสก์)

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

ตัวอย่าง:

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 และแสดงความคิดเห็น:

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

ฉันไม่เคยลองมาก่อน ข้อเสนอแนะและความคิดเห็นยินดีต้อนรับ!


4

Pure Bash, 61 ไบต์

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

เอาท์พุท:

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

ฉันเดาว่าฉันไม่เข้าใจความแตกต่างที่ "บริสุทธิ์" Bash ดังนั้นบางทีคำแนะนำนี้อาจไม่ดีนัก แต่การนอนหลับ (1) คือ 8 ตัวอักษรและให้คุณ -10 (และเป็น GNU Core Util)
Sompom

3

Perl, 50

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

57ตัวอักษร+3สำหรับ-i, และ-n ตัวละครสำหรับการนอนหลับ-l-10

-i$^Iจะใช้สำหรับการป้อนข้อมูลที่เป็นตัวเลขซึ่งถูกเก็บไว้ใน โดยทั่วไปเราจะเพิ่มiช่องว่างด้านหน้าและด้านท้ายของการป้อนข้อมูลและค้นหาแล้วสำหรับทุกตัวอักษรและห่วงผ่านพวกเขาด้วยi ผลตอบแทนที่สิ่งอำนวยความสะดวกที่เราสามารถป้อนข้อมูลไปยังwhilesay1sleep

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

ฉันรู้ว่ามันเก่า แต่ก็เพิ่งกระโดดกลับไปที่หน้าแรกและฉันก็มีอาการหดตัวลงบ้าง: s/^|$/$"x$^I/eg;sleep say$1 while s/.(.{$^I})/$1/. นอกจากนี้คุณยังสามารถสูญเสีย-lธง แต่ผมคิดว่าคุณต้องนับ 5 -i -n(ตั้งแต่-iไม่ได้เป็นธงเริ่มต้น) echo -n "testing" | perl -i4 -nE'...'ถ้าคุณทำงานผ่าน: ควรจะลดลงถึง 44 แม้ว่า!
Dom Hastings

@ DomHastings ขอบคุณ Dom! เยี่ยมมากฉันจะแก้ไขคำตอบของฉันในภายหลัง :)
hmatt1

3

POSIX เชลล์, 94

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

ฉันรู้ว่ามันดูใกล้เคียงกับ perl แต่นี่คือกระสุนจริงๆ!

บรรทัดแรกเพิ่มช่องว่างนำที่จำเป็นเฉพาะในครั้งแรกที่ผ่านการวนซ้ำ มันตั้งค่า $ 3 เพื่อระบุว่าได้ทำไปแล้ว

บรรทัดที่สอง (NB ฝังตัวขึ้นบรรทัดใหม่) recurses จนกว่าการป้อนข้อมูลจะหมดพิมพ์ครั้งแรกnตัวอักษรของสตริงแล้วอัญเชิญตัวเองด้วยตัวอักษรตัวแรกถูกลบออกจาก $ 1

ทดสอบกับเดเบียน/bin/dash- เอาท์พุตตัวอย่างมีดังนี้:

./marquee "การทดสอบ" 4

   t
  te
 tes
test
esti
stin
ting
ing
ng
g

./marquee "บางอย่างนานกว่านี้" 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 "เล็ก" 15

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

ฉันสามารถเพิ่ม 9 ตัวอักษรเพื่อรับโบนัส -10! ["$ 1"] && printf "% -. $ {2} s" "$ 1" "" && sleep 1 && $ 0 "$ {1 #?}" $ 2 t
Toby Speight

3

Python 2, 51 ไบต์ / 37 ไบต์

ไม่มีอินพุตฮาร์ดโค้ด (51 ไบต์):

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

f("testing", 4)โทรเช่น

ด้วยอินพุตฮาร์ดโค้ด (37 ไบต์):

s="testing";n=4

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

ทั้งสองเวอร์ชันแสดงบรรทัดว่างเริ่มต้น


3

Python 2 (54 ไบต์ - 10 = 44) 64 62 60 46

(ฉันสมมติว่าบรรทัดสำหรับอินพุตที่มีการให้รหัสตายตัวนั้นไม่ได้เพิ่มลงในจำนวนไบต์)

ฉันยังไม่เห็นโปรแกรมที่นอนระหว่างเส้นการพิมพ์ดังนั้นฉันจึงเลือกทำเพราะมันดูเหมือนกระโจมในแบบนั้น โปรแกรมนี้มีขนาด 2 ไบต์ใน Python 3

แก้ไข: โปรแกรมตอนนี้ทำการคำนวณแทนการนอนหลับ ฉันใช้iในการคำนวณเพื่อที่ว่าโปรแกรมจะไม่เก็บเป็นค่าคงที่ แต่ต้องคำนวณทุกครั้ง

ลอง Python 3 ที่นี่ (Python 2 repl คือ buggy)

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

บางทีแทนที่จะtime.sleepมีการคำนวณระยะยาวที่คุณสามารถใช้ได้? นอกจากนี้มันเป็นบิตสั้นเพื่อใช้whileห่วง:i=0\nwhile s[i-n:]:print(' '*n+s)[i:n+i];i+=1
XNOR

@ xnor การยกกำลังสองสามครั้งทำงานได้ดีสำหรับการคำนวณ
mbomb007

@ mbomb007 ฉันไม่คิดว่าคุณจะต้องเก็บค่าของการคำนวณเพื่อให้ไพ ธ อนทำจริง (เพื่อให้คุณสามารถบันทึก 'q =') นอกจากนี้ x ^ 7 ^ 7 ยังเทียบเท่ากับคณิตศาสตร์เท่ากับ x ^ 49 ถึงแม้ว่างูใหญ่ดูเหมือนว่าฉันจะแก้ปัญหาได้เร็วขึ้นเล็กน้อยสำหรับฉัน คุณสามารถบันทึกอักขระสองสามตัวด้วยวิธีนี้
Sompom

@Sompom ลองในแบบจำลอง ถ้าฉันรวมนิพจน์ในการยกกำลังเดี่ยวมันจะลบการหน่วงเวลาทั้งหมด q=แต่ฉันจะลบ ขอบคุณ
mbomb007

@Sompom การยกกำลังนั้นเชื่อมโยงกันได้ดังนั้นนี่จึงเป็นจริงi**(7**7)
Sp3000

3

Pyth, 12 ไบต์

jb.:X*dyQQzQ

สาธิต.


Pyth, 17 - 10 = 7 ไบต์

FN.:X*dyQQzQ&.p9N

รุ่นนี้มีการหน่วงเวลาระหว่างการพิมพ์บรรทัด นี้สามารถเห็นได้ในบรรทัดคำสั่งคอมไพเลอร์ซึ่งคุณจะได้รับที่นี่

รันสิ่งต่อไปนี้:

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

สิ่งนี้มีความล่าช้าประมาณ 0.3 วินาทีก่อนการพิมพ์แต่ละครั้ง หากคุณต้องการความล่าช้าอีกต่อไปคุณสามารถใช้:

FN.:X*dyQQzQ&.pTN

สิ่งนี้มีความล่าช้าประมาณ 4 วินาที


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++));}

รุ่นยาว:

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++));
}

การเติมเต็มจะใช้กับสตริงจากนั้นสตริงย่อยของสตริงจะถูกพิมพ์ไปที่คอนโซล

-4 ไบต์ขอบคุณ @KevinCruijssen


ฉันรู้ว่ามันใช้เวลานานกว่าหนึ่งปี แต่คุณสามารถตีกอล์ฟวงที่สองได้: for(;i<= s.length();System.out.println(s.substring(i-n,i++)));( -3 ไบต์ )
Kevin Cruijssen

1
ไม่ได้หมายความว่าไม่สามารถปรับปรุงได้ :) ขอบคุณ
ทีเอ็นที

2

Matlab, 95

เช่นเคยมันเป็นการจัดการเมทริกซ์ แกนกลางนี่คือคำสั่งspdiagsที่ให้คุณสร้างเมทริกซ์แนวทแยงได้อย่างง่ายดาย

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

ด้วย hardcoding 71 ไบต์ (คาดว่าจะเก็บสตริงtและจำนวน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 ตัวอักษร

ฉันแน่ใจว่ามันจะสั้นกว่านี้ 50 คือความยาวของโปรแกรมโดยไม่มีค่าคงที่สองค่า

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

คำอธิบาย:

                               ' '⍴⍨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

พัฒนาสำหรับngn APLบนเทอร์มินัล


2

Powershell - 85 83 ไบต์

มันสายไปแล้วมันจะไม่ชนะ :-) แต่ฉันคิดว่าฉันจะใช้ Powershell หนึ่งอันเพื่อความสมบูรณ์:

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





1

C #, 112 ไบต์

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

โปรแกรมเต็มรูปแบบด้วยวิธีการที่ไม่ดีและกรณีทดสอบ:

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 ไบต์

ใช่มันเป็นเวอร์ชั่นที่เก่ามากแต่มันมีฟังก์ชั่นที่ฉันต้องการ
คุณยังสามารถเรียกใช้งานได้ใน PHP เวอร์ชันล่าสุด แต่คุณต้องตั้งค่าตัวแปรด้วยตัวเองก่อนที่จะรันโค้ดด้านล่าง

มันช่วยให้ฉันลดขนาดรหัสได้มาก!

มันเป็นพื้นฐานจริงๆ:

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

ฉันวิ่งไปหาโบนัสเนื่องจากสิ่งนี้โดยอ้างข้อความ OP:

หากโปรแกรมของคุณเป็นแบบสแตนด์อโลน (เช่นเมื่อเรียกใช้งานจริงพิมพ์บรรทัด) (อินพุตสามารถเป็นแบบฮาร์ดโค้ด แต่ง่ายต่อการเปลี่ยนแปลง) และพักสักครู่ระหว่างเอาต์พุตแต่ละบรรทัดคุณจะได้รับ -10 โบนัส

เห็นได้ชัดว่าคุณนอนหลับ

นี่ถือว่าคุณregister_globalsเปิดใช้งานโดยค่าเริ่มต้นซึ่งเป็นการตั้งค่าเริ่มต้นสำหรับรุ่นนี้


คุณสามารถทดสอบในเบราว์เซอร์ของคุณได้อย่างง่ายดายด้วย ต่ำสุด การเปลี่ยนแปลงบางอย่าง:

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

รหัสด้านบนเป็นรูปหลายเหลี่ยมและคุณสามารถเรียกใช้ในเบราว์เซอร์ของคุณหรือในล่าม PHP ฉันไม่ควรได้รับรางวัลสำหรับสิ่งนี้? คุกกี้อาจจะ?

รายการการเปลี่ยนแปลง:

  • ลบออกsleep(1)ในการทดสอบนี้
  • สร้างฟังก์ชัน 2 เวอร์ชันconcat
    เป้าหมายคือเอาชนะความแตกต่างของ PHP และ JS ในการต่อสตริงเข้าด้วยกัน
  • แทนที่จะใช้ช่องว่าง a -ใช้เพื่อเติมช่องว่าง
  • แทนที่จะecho, printfคือใช้แทน (PHP ข้อ จำกัด )
  • หรือขึ้นบรรทัดใหม่ 'ของจริง' <br>จะใช้แทน


1

APL (Dyalog)ขนาด 17 ไบต์

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

ลองออนไลน์!

(โปรแกรมถือว่า⎕IO←0เป็นค่าเริ่มต้นในหลาย ๆ เครื่อง)

คำอธิบาย

⍳⎕               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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.