Fake Marquee Text

46

W tym wyzwaniu fałszywy tekst markizy to tekst wyświetlany po części, w sposób przewijany.

Kilka przykładów:

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

Musisz napisać program lub funkcję, która pobiera dwa dane wejściowe i drukuje dane wyjściowe zgodnie z powyższym opisem. Możesz generować spacje końcowe na wyjściu lub nie. To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach.

Jeśli twój program jest samodzielny (tj. Kiedy faktycznie drukuje wiersze) (dane wejściowe mogą być zakodowane na stałe, ale łatwo je zmienić) i śpi trochę między każdą linią wyjścia, otrzymujesz premię -10.

Caridorc
źródło
Co rozumiesz przez „obejmuje wyjście”?
Optymalizator
1
Czy musimy również wydrukować pierwszy i ostatni wiersz, które są po prostu spacjami?
Optymalizator
2
Zainspirowany tym ?
Spikatrix
1
Pojedyncza pusta linia na początku wydaje się być dozwolona. A może kolejna pusta linia na końcu?
nimi
2
Skoro mówisz o „tylko widocznych wynikach”, czy możemy założyć, że dane wejściowe będą tylko do wydruku ASCII? (kody znaków od 0x20 do 0x7E)
Martin Ender

Odpowiedzi:

24

CJam, 12 11 bajtów

1 bajt zapisany przez Dennisa.

,Sf*\f+$zN*

Korzystam z „Dane wejściowe można zakodować na stałe, ale łatwo je zmienić”: oczekuje się, że dane wejściowe będą już na stosie, więc możesz "testing" 4na przykład przejść do powyższego.

Sprawdź to tutaj.

Wyjaśnienie

Zauważ, że transpozycja pożądanego wyniku jest znacznie prostsza:

   testing
  testing
 testing
testing

Musimy tylko utworzyć nlinie, poprzedzając ispacje iod n-1do do 0. To właśnie robi kod:

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

Uważam, że bonus „śpi trochę między każdą linią” jest nieco niejasny i niejasny, ale tutaj jest 19-bajtowa wersja, która po prostu zatrzymuje się po każdej linii, obliczając wszystkie kombinacje tablicy [0 1 .. 7]. W tłumaczu online prowadzi to po prostu do ostatecznego wyświetlenia wyniku nieco później, ale jeśli użyjesz interpretera Java, w rzeczywistości wydrukuje on każdą linię po „przespaniu się”:

,Sf*\f+$z{oNo8e!;}/
Martin Ender
źródło
Niezłe wykorzystanie z. Zakładając, że wejście jest do druku ASCII, można zastąpić W%z $.
Dennis
@Dennis Oh, podoba mi się to. Poprosiłem o wyjaśnienia w tej sprawie z PO. (To powiedziawszy, używam zcały czas do wyzwań opartych na siatce ascii.)
Martin Ender
15

C, 69 bajtów

printf magia!

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

Wersja rozszerzona z wyjaśnieniem:

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

A oto przykład:

$ ./marquee stackoverflow 12

           s
          św
         sta
        stac
       stos
      stacko
     Stackov
    stackove
   nakładanie
  stackoverf
 stackoverfl
stackoverflo
tackoverflow
ackoverflow
ckoverflow
koverflow
przelewowy
verflow
erflow
rflow
pływ
Niska
ow
w
CL-
źródło
14

Pyth, 13 bajtów

jb.:++K*dQzKQ

Wypróbuj online: Pyth Compiler / Executor

Wyjaśnienie

                 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
Jakube
źródło
6

Python 65 63

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

Zostało to faktycznie wykorzystane do napisania przykładów. Rozwiązanie podstawowe.

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

  f
 fo
foo
oob
oba
bar
arz
rz
z
Caridorc
źródło
2
nie testowałem tego, ale powinieneś być w stanie usunąć nawiasy kwadratowe wewnątrzjoin
podziemny
@undergroundmonorail right
Caridorc
6

JavaScript ( wersja robocza ES7 ), 61 bajtów

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 Inputs, 47 bajtów

Zakładając zakodowane dane wejściowe w zmiennych s(ciąg) i l(długość), można zmniejszyć do 47 bajtów drukowania z alarmem dla każdej linii:

for(i in x=' '.repeat(l)+s)alert(x.substr(i,l))
nderscore
źródło
5

K, 19 bajtów

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

Tack xspacje ( x#" ") na początku ciągu y. Następnie użyj postaci „skanowania w ustalonym punkcie” operatora, \aby utworzyć zestaw obróconych łańcuchów. Punkt stały w K przestaje iterować, jeśli wynik zastosowania funkcji zwraca powtarzający się wynik lub jeśli dane wejściowe są ponownie odwiedzane. Ponieważ ![1]obraca strunę krok po kroku, ![1]\jest to miły idiom dla cyklicznych permutacji. Następnie po prostu przycinamy wyniki x#'.

Przykładowy przebieg:

  {x#'![1]\(x#" "),y}[4;"some text"]
("    "
 "   s"
 "  so"
 " som"
 "some"
 "ome "
 "me t"
 "e te"
 " tex"
 "text"
 "ext "
 "xt  "
 "t   ")
JohnE
źródło
5

J (22)

Skończyło się to dłużej, niż się spodziewałem, ale myślę, że nie jest tak źle.

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

Ciekawostka: nie są [i ]są właściwie dopasowane lub mają ze sobą coś wspólnego.

.ıʇǝɥʇuʎs
źródło
Po 3 małych zmianach: [{."1]]\.@,~' '#~[(18 bajtów).
randomra
5

Julia, 75 bajtów

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

Tworzy to nienazwaną funkcję, która przyjmuje ciąg i liczbę całkowitą jako dane wejściowe i drukuje dane wyjściowe. Aby to nazwać, nadaj mu nazwę, np f=(s,n)->(...).

Niegolfowane + wyjaśnienie:

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

Przykłady:

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     

Zauważ, że to rozwiązanie ma 66 bajtów, jeśli si nzakłada się, że już istnieje w programie.

Alex A.
źródło
5

QBasic, 56-10 = 46

To jest gra w golfa QBasic - autoformatter rozszerzy ?się PRINTi doda trochę spacji. Testowane z QB64 , chociaż nie powinno tu być niczego, co nie działałoby z DOS QBasic.

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

QBasic generalnie nie jest dobry w operacjach na łańcuchach, ale bardzo wygodnie jest funkcja, która zwraca określoną liczbę spacji!

Biorąc pod uwagę niektóre swobody z „dane wejściowe mogą być zakodowane na stałe”, ten kod oczekuje, że zmienna sma wartość DIM„d” AS STRING, aby uniknąć $sufiksu typu, jak również przypisanego łańcucha si liczby n.

Przykładowa preambuła:

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

Wynik:

   s
  św
 str
stri
trin
pierścień
ing
ng
sol

Górny pusty wiersz można wyeliminować, rozpoczynając FORpętlę od 2 zamiast 1.

Bonus: Dodanie CLStuż NEXTza marne cztery bajty zamienia to w ... prawdziwą markizę !

Duży namiot

I PRINT CHR$(3)QBasic. : ^ D

DLosc
źródło
Powinienem ponownie spróbować QBasic ... Właśnie tego się nauczyłem
Kanadyjczyk Luke REINSTATE MONICA
5

Rubinowy, 68 , 55 bajtów

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

Po aktualizacji z @blutorange:

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

Wynik:

         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

Pierwsze zgłoszenie z prośbą o krytykę.

DickieBoy
źródło
1
Wygląda na dobrze zrobione, używając rubinowych skrótów. Ostateczne miejsce nie wydaje się być konieczne („ a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}
liczy się
@blutorange Dziękujemy za opinię!
DickieBoy
Nie ma za co. Edytuj odpowiedź, jeśli chcesz;)
blutorange
4

Haskell, 61 59 54 bajtów

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

Przykład użycia:

*Main> putStr $ m 6 "stackoverflow"

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

*Main> 

Edycja: pusta linia na początku / końcu jest dozwolona

nimi
źródło
4

Bash, 109-10 = 99 bajtów

Widzę, że w czasie, gdy napisanie mojego rozwiązania zajęło mi dużo czasu, zostałem mocno pobity. Niemniej jednak spędziłem zbyt długo na pisaniu go, aby go nie opublikować ...

Poza tym ma kilka unikalnych cech, takich jak czas między drukowaniem linii, który można regulować w zależności od tego, ile jest w bieżącym katalogu! (Również nieco niespójne, w zależności od tego, jak dysk się czuje)

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

Przykład:

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

Nie golfił i skomentował:

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

Nigdy tak naprawdę tego nie próbowałem. Sugestie i komentarze mile widziane!

Sompom
źródło
4

Pure Bash, 61 bajtów

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

Wynik:

$ ./marquee.sh testing 4
   t
  te
 tes
test
esti
stin
ting
ing
ng
g
$ 
Cyfrowa trauma
źródło
Wydaje mi się, że nie rozumiem rozróżnienia „czysty” Bash, więc może ta sugestia nie jest dobra, ale sleep (1) ma 8 znaków i daje ci -10 (i jest GNU Core Util)
Sompom
3

Perl, 50

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

57znaków +3dla -i, -ni -l. -10postacie na sen.

-isłuży do wprowadzania numerycznego, które jest przechowywane w $^I. Zasadniczo dodajemy ispacje na początku i na końcu danych wejściowych, a następnie wyszukujemy wszystkie iznaki i przeglądamy je za pomocą while. saywygodnie zwraca, 1które możemy wprowadzić sleep.

echo "testing" | perl -i4 -nlE'$c=$" x$^I;$_="$c$_$c";sleep say$1while(/(?<=(.{$^I}))/g)'
hmatt1
źródło
Wiem, że to jest stary, ale to jest po prostu wskoczył z powrotem na pierwszej stronie, a ja miałem go na kurczenie się to w dół nieco: s/^|$/$"x$^I/eg;sleep say$1 while s/.(.{$^I})/$1/. Można też stracić -lflagę, ale myślę, że trzeba się liczyć do 5 -i -n(ponieważ -inie jest domyślnym flag) jeśli uruchomić poprzez: echo -n "testing" | perl -i4 -nE'...'. Powinno to być nadal do 44!
Dom Hastings,
@DomHastings dzięki Dom!
Dobra robota,
3

Powłoka POSIX, 94

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

Wiem, że wygląda na Perla, ale to naprawdę jest powłoka!

Pierwszy wiersz dodaje niezbędne spacje wiodące, tylko za pierwszym razem przez pętlę. Ustawia 3 USD, aby wskazać, że to zrobiło.

Druga linia (osadzona nowa linia NB) powtarza się, dopóki dane wejściowe nie zostaną wyczerpane, wypisując pierwsze n znaków ciągu, a następnie wywołując się z pierwszym znakiem usuniętym z 1 $.

Testowane z Debianem /bin/dash- przykładowe wyniki:

./marquee „testowanie” 4

   t
  te
 tes
test
esti
stin
ting
ing
ng
g

./marquee „Coś nieco dłużej” 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 „small” 15

              s
             sm
            sma
           smal
          small
         small
        small
       small
      small
     small
    small
   small
  small
 small
small
mall
all
ll
l
Toby Speight
źródło
Mogę dodać 9 znaków, aby uzyskać bonus -10! [ "$ 1"] && printf "% -. $ {2} s" "$ 1" "„&& snu 1 && $ 0 "$ 1 # {?}" T $ 2
Toby Speight
3

Python 2, 51 bajtów / 37 bajtów

Bez wpisanego na stałe (51 bajtów):

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

Zadzwoń jak f("testing", 4).

Z zakodowanym wejściem (37 bajtów):

s="testing";n=4

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

Obie wersje generują początkowy wiersz spacji.

Sp3000
źródło
3

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

(Zakładałem, że wiersz dla zakodowanych danych wejściowych nie dodaje się do liczby bajtów.)

Nie widziałem jeszcze programu, który faktycznie śpi między wierszami drukowania, więc zrobiłem taki, ponieważ tak wygląda bardziej markiza. Ten program ma jeszcze 2 bajty w Pythonie 3.

EDYCJA: Program wykonuje teraz obliczenia zamiast spania. Użyłem ido obliczeń, aby program nie przechowywał go jako stałej, ale musi go obliczyć za każdym razem.

Wypróbuj tutaj Python 3 (replika Python 2 jest wadliwa)

i=0
while s[i-n:]:print((' '*n+s)[i:n+i]);i+=1;i**7**7
mbomb007
źródło
Może zamiast time.sleepdługich obliczeń, których możesz użyć? Ponadto użycie whilepętli jest nieco krótsze :i=0\nwhile s[i-n:]:print(' '*n+s)[i:n+i];i+=1
xnor
@xnor Potęgowanie kilka razy działa całkiem dobrze w obliczeniach.
mbomb007
@ mbomb007 Nie sądzę, że musisz przechowywać wartość obliczeń, aby Python faktycznie to zrobił (abyś mógł zapisać „q =”). Ponadto x ^ 7 ^ 7 jest matematycznie równoważne x ^ 49, chociaż wydaje mi się, że python rozwiązuje ten ostatni nieco szybciej. W ten sposób możesz zapisać kilka znaków.
Sompom
@Sompom Wypróbuj w replice. Jeśli skonsoliduję wyrażenie w jedno potęgowanie, całkowicie usuwa to opóźnienie czasowe. Ale usunę q=. Dzięki.
mbomb007
@Składnia potęgowania jest prawostronnie powiązana, więc tak jesti**(7**7)
Sp3000
3

Pyth, 12 bajtów

jb.:X*dyQQzQ

Demonstracja.


Pyth, 17–10 = 7 bajtów

FN.:X*dyQQzQ&.p9N

Ta wersja wykorzystuje opóźnienie między wydrukami linii. Można to zobaczyć w kompilatorze wiersza poleceń, który można uzyskać tutaj .

Uruchom następujące czynności:

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

Opóźnienie to wynosi około 0,3 sekundy przed każdym wydrukiem. Jeśli wolisz dłuższe opóźnienie, możesz użyć:

FN.:X*dyQQzQ&.pTN

Ma to około 4 sekundowe opóźnienie.

isaacg
źródło
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++));}

Długa wersja:

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

Wypełnienie jest nakładane na sznurek, a następnie podciągi wyściełanego sznurka są drukowane na konsoli.

-4 bajty dzięki @KevinCruijssen.

TNT
źródło
Wiem, że for(;i<= s.length();System.out.println(s.substring(i-n,i++)));
minął
1
Nie oznacza to, że nie można tego poprawić. :) Dzięki.
TNT
2

Matlab, 95

Jak zawsze jest to manipulacja matrycami. Rdzeniem tutaj jest polecenie, spdiagsktóre pozwala bardzo łatwo tworzyć macierze diagonalne.

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

Z kodowaniem na stałe 71 bajtów (oczekiwany ciąg przechowywany w ti liczba w k)

n=numel(t);flipud(char(full(spdiags(repmat(t,n+k-1,1),1-n:0,n+k-1,k))))
wada
źródło
2

APL, 50-10 = 40 znaków

Jestem pewien, że może być krótszy. 50 to długość programu bez dwóch stałych.

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

Wyjaśnienie:

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

Opracowany dla ngn APL na terminalu.

Tobia
źródło
2

PowerShell - 85 83 bajtów

Jest późno, nie wygra :-) Ale pomyślałem, że wrzucę Powershell dla kompletności:

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

Chris J
źródło
1

Kobra - 60

def f(n,s)
    s=' '.repeat(n)+s
    while''<s,print (s=s[1:])[:n]
Obrzydliwe
źródło
1

Groovy - 82

n=args[1]as int;t=" "*n+args[0]+" "*n;(0..t.size()-n).each{println t[it..it+n-1]}
dbramwell
źródło
1

Lua, 79 bajtów

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
Paplać
źródło
1

C #, 112 bajtów

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

Pełny program z nieprzylepioną metodą i przypadkami testowymi:

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

        }
    }
}
adrianmp
źródło
1

Galaretka , 15 bajtów - 10 = 5 ( niekonkuruje ?)

ḶṚ⁶ẋ;€⁹ZṄœS$€ṛ“

Wypróbuj online!

Śpi przez sekundę między każdą linią. Drukuje znak nowej linii, jeśli jest to dopuszczalne.

yay Jelly bije węgiel drzewny

Erik the Outgolfer
źródło
1

PHP4.1, 85-10 = 75 bajtów

Tak, jest to bardzo stara wersja, ale ma funkcjonalność, której potrzebuję.
Nadal możesz go uruchamiać w nowszych wersjach PHP, ale musisz ustawić zmienne samodzielnie przed uruchomieniem poniższego kodu.

Pomaga mi to znacznie zmniejszyć rozmiar mojego kodu!

To jest naprawdę podstawowe:

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

Z tego powodu pobiegłem po premię, cytując OP:

Jeśli twój program jest samodzielny (tj. Kiedy faktycznie drukuje wiersze) (dane wejściowe mogą być zakodowane na stałe, ale łatwo je zmienić) i śpi trochę między każdą linią wyjścia, otrzymujesz premię -10.

Jak widać, ma sen.

Zakłada się, że masz register_globalswłączone domyślnie, które były domyślnymi ustawieniami dla tej wersji.


Możesz łatwo przetestować w przeglądarce za pomocą minimalny Trochę zmian:

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

Powyższy kod jest poliglotą i można go uruchomić w przeglądarce lub w tłumaczu PHP. Czy nie powinienem dostać za to nagrody? Może ciasteczko?

Lista zmian:

  • Usunięto sleep(1)w tym teście
  • Utworzono 2 wersje funkcji concat
    Celem jest przezwyciężenie różnic między PHP i JS w łańcuchach konkatenacji.
  • Zamiast spacji -stosuje się a, aby wypełnić przestrzeń
  • Zamiast echo, printfzamiast tego używa (ograniczenie PHP)
  • Zamiast tego <br>używa się „prawdziwej” nowej linii
Ismael Miguel
źródło
1

APL (Dyalog) , 17 bajtów

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

Wypróbuj online!

(program zakłada, że ⎕IO←0na wielu komputerach jest to ustawienie domyślne)

Wyjaśnienie

⍳⎕               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
Kritixi Lithos
źródło