Sahte Kayan Yazı


46

Bu meydan okumada sahte kayan yazı metni, kaydırmaya benzer bir biçimde, kısmen bölümlere gösterilen metindir.

Bazı örnekler:

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

İki girişi alan ve çıktıyı yukarıda açıklandığı şekilde basan bir program veya işlev yazmanız gerekir. Çıktınızda sondaki boşlukları çıkarabilirsiniz veya vermeyebilirsiniz. Bu kod-golf yani bayt cinsinden en kısa kod kazanır.

Programınız bağımsız ise (yani çalıştırma gerçekten satırları yazdırdığında) (Giriş zor kodlanmış olabilir ancak değiştirilmesi kolaydır) ve her çıktı satırı arasında biraz uyuduğunuzda -10 bonus kazanırsınız.


"Çıktıyı" içerir derken ne demek istiyorsunuz?
Doktor

1
Ayrıca, sadece boşluk olan ilk ve son satırları yazdırmak zorunda mıyız?
Doktor

2
Esinlenen bu ?
Spikatrix

1
Baştaki tek bir boş satıra izin veriliyor gibi görünüyor. Sonunda boş bir satır daha var mı?
nimi

2
“Yalnızca görünen çıktı” hakkında konuştuğunuz için, girişin yalnızca yazdırılabilir ASCII olacağını varsayabilir miyiz? (karakter kodları 0x20 - 0x7E)
Martin Ender 23

Yanıtlar:


24

CJam, 12 11 bayt

Dennis tarafından 1 bayt kurtarıldı.

,Sf*\f+$zN*

"Girdi kodlanmış olabilir ancak değiştirmesi kolay olabilir" ifadesini kullanıyorum: bu girdi girişin zaten yığında olmasını beklemektedir, bu nedenle "testing" 4yukarıdakilere hazırlayabilirsiniz.

Burada test et.

açıklama

İstenilen çıktının aktarılmasının çok daha basit olduğuna dikkat edin:

   testing
  testing
 testing
testing

Biz sadece oluşturmanız gerekir Yani nprepending, çizgiler iiçin boşluk igelen n-1aşağı için 0. Kod böyle yapar:

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

"Her satır arasında biraz uyuyor" bonusunu biraz belirsiz ve çok tehlikeli buluyorum, ancak burada dizinin tüm permütasyonlarını hesaplayarak her satırdan sonra durduran 19 baytlık bir sürüm [0 1 .. 7]. Çevrimiçi tercümanda bu, sonuçta biraz sonra gösterilmeye neden olur, ancak Java tercümanı kullanıyorsanız bu aslında "biraz uyumadan" sonra her satırı yazdırır:

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

Güzel kullanımı z. Girişini varsayarsak yazdırılabilir ASCII, sen yerini alabilir olduğu W%ile $.
Dennis,

@Dennis Oh, hoşuma gitti. OP’den bu konuda açıklama talep ettim. (Dediğim gibi, zher zaman ascii ızgara tabanlı zorluklar için kullanıyorum.)
Martin Ender

15

C, 69 bayt

printf sihir!

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

Bazı açıklamalarla genişletilmiş versiyon:

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

Ve işte bir örnek:

$ ./marquee stackoverflow 12

           s
          st
         sta
        stac
       yığın
      Stacko
     stackov
    stackove
   stackover
  stackoverf
 stackoverfl
stackoverflo
tackoverflow
ackoverflow
ckoverflow
koverflow
taşma
verflow
erflow
rflow
akış
düşük
ow
w

14

Pyth, 13 bayt

jb.:++K*dQzKQ

Çevrimiçi deneyin: Pyth Compiler / Executor

açıklama

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

Bu aslında örnekleri yazmak için kullanıldı. Temel çözüm.

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

  f
 fo
foo
oob
oba
bar
arz
rz
z

2
test etmedim ancak içindeki köşeli parantezleri çıkarmanız gerekirjoin
undergroundmonorail

@undergroundmonorail sağ
Caridorc

6

Javascript ( ES7 Taslağı ), 61 bayt

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 ) Sabit Kodlanmış Girişler, 47 bayt

Değişkenlerdeki s(string) ve l(uzunluk) kodlanmış girişleri varsayarsak , her satır için bir uyarı ile yazdırılan 47 bayta düşürülebilir :

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

5

K, 19 bayt

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

Boşluğa x( x#" ") dizgenin başına yapıştırın y. Ardından \, döndürülmüş dizeler kümesi oluşturmak için operatörün "sabit noktalı tarama" formunu kullanın. K'deki sabit bir nokta, işlevin uygulanmasının sonucu tekrarlanan bir sonuç verirse veya ilk giriş tekrar ziyaret edilirse, yinelenmeyi durdurur. Her ![1]seferinde bir adım bir dize döndürmek yana , ![1]\döngüsel permütasyonlar için güzel bir deyimdir. Sonra sadece sonuçları ile kesiyoruz x#'.

Bir örnek çalışması:

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

5

J (22)

Bu beklediğimden daha uzun sürdü, ama sanırım çok da kötü değil.

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

Eğlenceli bir gerçek: olmayan [ve ]aslında eşleşti veya birbiriyle ilgisi vardır.


3 küçük değişiklikten sonra: [{."1]]\.@,~' '#~[(18 bayt).
randomra

5

Julia, 75 bayt

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

Bu, bir dizge ve tamsayıyı girdi olarak kabul eden ve çıktıyı basan adsız bir işlev oluşturur. Aramak için bir isim verin, örneğin f=(s,n)->(...).

Ungolfed + açıklama:

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

Örnekler:

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     

Not Bu çözüm 66 bayt ise olduğuna sve nzaten programda var olduğu varsayılır.


5

QBasic, 56 - 10 = 46

Autoformatter genişleyecektir - Bu QBasic golfed edilir ?içine PRINTve bazı boşluklar ekleyin. QB64 ile test edilmiştir , ancak burada DOS QBasic ile çalışmayan hiçbir şey olmamalıdır.

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

QBasic genellikle dize operasyonları ile iyi değil, ama çok elverişli orada olan bir işlev döndürdüğü alanlarda belirli bir sayıda!

Bazı özgürlükleri alma "kodlanmış olabilir giriş," bu kod değişken beklediği solmak DIMd' AS STRINGkaçınmak için, $tahsis edilir tipi eki, hem de dize sve sayısı n.

Örnek giriş:

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

Çıktı:

   s
  st
 str
stri
trin
halka
ing
ng
g

Üstteki boş satır FOR, 1 yerine 2'de döngü başlatılarak elimine edilebilir .

Bonus:CLS Hemen önce NEXTbir solukluk için dört bayt eklemek , bunu ... gerçek bir seçim çerçevesi haline getirir !

büyük çadır

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



5

Ruby, 68 , 55 bayt

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

@Blutorange tarafından yapılan bir güncellemeden sonra:

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

Çıktı:

         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

İlk gönderim, eleştiriyi istiyor.


1
Bana biraz yakut kısayol kullanarak iyi görünüyor. Nihai alan olsa da gerekli gibi görünmüyor ("sadece görünen çıktılar önemli") ve geçici bir değişken kullanarak bazı baytları kaydedebilirsiniz:a=" "*(z=$*[1].to_i)+$*[0];a.size.times{|b|puts a[b,z]}
blutorange

@blutorange Geri bildiriminiz için teşekkür ederiz!
DickieBoy

Rica ederim. İsterseniz cevabı düzenlemek için çekinmeyin;)
blutorange

4

Haskell, 61 59 54 bayt

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

Kullanım örneği:

*Main> putStr $ m 6 "stackoverflow"

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

*Main> 

Düzenleme: başında / sonunda boş bir satıra izin verilir


4

Bash, 109 - 10 = 99 bayt

Anladığım kadarıyla çözümümü yazmam zaman aldı, selâmetle dövüldüm. Yine de, göndermemek için çok uzun zaman harcadım ...

Bunun yanında, mevcut dizinde ne kadar olduğuna bağlı olarak, baskı satırları arasındaki sürenin kullanıcı tarafından ayarlanabilmesi gibi zaman gibi benzersiz özelliklere de sahiptir! (Ayrıca, diskinizin nasıl hissettiğine bağlı olarak biraz tutarsız)

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

Örnek:

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 ve yorumladı:

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

Bunu daha önce hiç denemedim. Öneri ve yorumlarınızı bekliyoruz!


4

Saf Bash, 61 bayt

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

Çıktı:

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

Sanırım "saf" Bash ayrımını anlamıyorum, belki de bu öneri iyi değil, ama uyku (1) 8 karakter ve size -10 (ve GNU Core Util)
veriyor

3

Perl, 50

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

57karakterler +3için -i, -nve -l. -10uyku için karakterler.

-iiçinde kayıtlı olan sayısal giriş için kullanılır $^I. Temel olarak, igirişin önüne ve sonuna boşluk ekleriz ve sonra her ikarakteri ararız ve bunlarla birlikte döneriz while. sayrahatlıkla 1girebileceğimizi döndürür sleep.

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

Bu eski olduğunu biliyoruz, ama sadece ön sayfaya geri atladı ve ben biraz bu aşağı küçülen de gitmek yaşadım: s/^|$/$"x$^I/eg;sleep say$1 while s/.(.{$^I})/$1/. -lBayrağı da kaybedebilirsiniz , ancak: üzerinden geçerseniz 5 sayı -i -n( -ivarsayılan bayrak olmadığından) saymanız gerektiğini düşünüyorum echo -n "testing" | perl -i4 -nE'...'. Yine de hala 44 olmalı!
Dom Hastings

@DomHastings Dom teşekkürler! Güzel iş, cevabımı daha sonra düzenleyeceğim :)
hmatt1

3

POSIX kabuğu, 94

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

Perl'e daha yakın göründüğünü biliyorum, ama bu gerçekten kabuk!

İlk satır, gerekli ilk boşlukları, yalnızca ilk kez döngüden ekler. Bunu yaptığını belirtmek için 3 $ ayarlar.

İkinci satır (NB katıştırılmış yeni satır) giriş bitinceye kadar tekrar eder , dizenin ilk n karakterini yazdırır ve sonra ilk karakter $ 1'den kaldırılmış olarak kendisini çağırır .

Debian ile test edildi /bin/dash- örnek çıktılar şöyle:

./marquee "test" 4

   t
  te
 tes
test
esti
stin
ting
ing
ng
g

./marquee "Biraz daha uzun bir şey" 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 "küçük" 15

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

-10 bonus kazanmak için 9 karakter ekleyebilirim! ["$ 1"] && printf "% -. $ {2} s" "$ 1" "" && uyku 1 && $ 0 "$ {1 #?}" $ 2 t
Toby Speight

3

Python 2, 51 bayt / 37 bayt

Kodlanmış giriş olmadan (51 bayt):

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

Gibi ara f("testing", 4).

Kodlanmış giriş ile (37 bayt):

s="testing";n=4

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

Her iki sürümde de ilk satır satırı çıkar.


3

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

(Sabit kodlanmış giriş satırının bayt sayısına eklenmeyeceğini varsaydım.)

Henüz baskı çizgileri arasında uyuyan bir program görmedim, bu yüzden bunu yaptım, çünkü bu şekilde bir seçim çerçevesi gibi görünüyor. Bu program Python 3'te 2 bayttır.

EDIT: Program şimdi uyumak yerine bir hesaplama yapar. iHesaplamada kullandım , böylece program onu ​​sabit olarak saklamaz, fakat her seferinde hesaplamalıdır.

Burada Python 3'ü deneyin (Python 2 repl buggy)

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

Belki time.sleepkullanabileceğiniz uzun bir hesaplama yerine ? Ayrıca, bir whiledöngü kullanmak için biraz daha kısadır :i=0\nwhile s[i-n:]:print(' '*n+s)[i:n+i];i+=1
xnor

@xnor Açıklama Birkaç kez bir hesaplama için oldukça iyi çalışıyor.
mbomb007

@ mbomb007 Gerçekten yapmak için python almak için hesaplamanın değerini kaydetmeniz gerektiğini sanmıyorum ('q =' değerinden tasarruf edebilirsiniz). Ayrıca, x ^ 7 ^ 7 matematiksel olarak x ^ 49'a eşittir, ancak python ikincisini benim için biraz daha hızlı çözüyor gibi görünmektedir. Bu şekilde birkaç karakter kaydedebilirsiniz.
Sompom

@Sompom Repl içinde deneyin. İfadeyi tek bir üsümde birleştirirsem, zaman gecikmesini tamamen kaldırır. Ama ben kaldıracağım q=. Teşekkürler.
mbomb007

@Sompom Exponentiation doğru bir ilişkiseldir, bu yüzden bu aslındai**(7**7)
Sp3000

3

Pyth, 12 bayt

jb.:X*dyQQzQ

Gösteri.


Pyth, 17 - 10 = 7 bayt

FN.:X*dyQQzQ&.p9N

Bu sürüm, satır baskıları arasında gecikme kullanıyor. Bu alabilirsiniz komut satırı derleyicisi, görülebilir burada .

Aşağıdakileri çalıştırın:

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

Her baskıdan önce yaklaşık 0,3 saniye gecikme olur. Daha uzun bir gecikmeyi tercih ediyorsanız, şunları kullanabilirsiniz:

FN.:X*dyQQzQ&.pTN

Bu yaklaşık 4 saniyelik bir gecikmeye sahiptir.


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

Uzun versiyon:

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

Dolgu dizeye uygulanır ve sonra dolgulu dizenin alt dizeleri konsola yazdırılır.

@KevinCruijssen sayesinde -4 bayt.


Bir yıldan fazla geçtiğini biliyorum, ancak ikinci döngü için ikinci bir golf oynayabilirsiniz: for(;i<= s.length();System.out.println(s.substring(i-n,i++)));( -3 bayt )
Kevin Cruijssen

1
Geliştirilemeyeceği anlamına gelmez. :) Teşekkürler.
TNT

2

Matlab, 95

Her zaman olduğu gibi, matrislerin manipülasyonudur. Buradaki temel, spdiagsçapraz matrisleri kolayca oluşturmanızı sağlayan komuttur .

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

Kodlama ile 71 bayt (beklenen dize içinde saklanır tve sayı 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 karakter

Eminim daha kısa olabilirdi. Şekil 50, programın iki sabitsiz uzunluğudır.

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

Açıklama:

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

Terminalde ngn APL için geliştirilmiştir .


2

Powershell - 85 83 bayt

Geç oldu, kazanmayacak :-) Ama tamamlanmak için Powershell'e attığımı düşündüm:

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


1

Kobra - 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 bayt

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 bayt

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

Ungolfed yöntem ve test vakaları ile tam program:

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 bayt

Evet, bu çok eski bir sürüm, ancak ihtiyacım olan bir işlevselliğe sahip.
PHP'nin daha yeni sürümlerinde hala çalıştırabilirsiniz, ancak aşağıdaki kodu çalıştırmadan önce değişkenleri kendiniz ayarlamanız gerekir.

Bu, kodumun boyutunu azaltmamda bana yardımcı oluyor!

Gerçekten çok basit:

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

Bu yüzden bonus için koştum, OP alıntı yaparak:

Programınız bağımsız ise (yani çalıştırma gerçekten satırları yazdırdığında) (Giriş zor kodlanmış olabilir ancak değiştirilmesi kolaydır) ve her çıktı satırı arasında biraz uyuduğunuzda -10 bonus kazanırsınız.

Belli ki görebildiğin gibi, uyuyor.

Bu register_globals, bu sürüm için varsayılan ayarlar olan varsayılan olarak etkinleştirdiğinizi varsayar .


Tarayıcınızda kolayca test edebilirsiniz. en az bazı değişiklikler:

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

Yukarıdaki kod bir çok dillidir ve tarayıcınızda veya bir PHP tercümanında çalıştırılabilir. Bunun için bir ödül almamalı mıyım? Belki bir kurabiye?

Değişikliklerin listesi:

  • sleep(1)Bu testten kaldırıldı
  • İşlevin 2 sürümü oluşturuldu concat
    Amaç birleştirilen dizelerdeki PHP ve JS farklarının üstesinden gelmektir.
  • Bir boşluk yerine, bir boşluk -doldurmak için kullanılır.
  • Yerine echo, printfyerine kullanımları ise (PHP sınırlama)
  • Bunun yerine veya 'gerçek' bir newline <br>yerine


1

APL (Dyalog) , 17 bayt

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

Çevrimiçi deneyin!

(program ⎕IO←0birçok makinede varsayılan olduğunu varsayar )

açıklama

⍳⎕               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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.