가짜 선택 윤곽 텍스트


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 보너스를받습니다.


"출력 포함"은 무슨 뜻입니까?
Optimizer

1
또한 단순히 공백 인 첫 번째와 마지막 줄을 인쇄해야합니까?
Optimizer

2
이것에 의해 영감을 ?
Spikatrix

1
처음에 하나의 빈 줄이 허용되는 것 같습니다. 마지막에 또 다른 빈 줄은 어떻습니까?
nimi

2
"눈에 보이는 출력 만"에 대해 이야기하고 있기 때문에 입력이 인쇄 가능한 ASCII 일 뿐이라고 가정 할 수 있습니까? (문자 코드 0x20 ~ 0x7E)
마틴 엔더

답변:


24

CJam, 12 11 바이트

Dennis가 1 바이트를 절약했습니다.

,Sf*\f+$zN*

"입력을 하드 코딩 할 수는 있지만 쉽게 변경할 수 있습니다"를 사용하고 있습니다. 이렇게하면 입력이 이미 스택에있을 것으로 예상되므로 "testing" 4예를 들어 위의 앞에 추가 할 수 있습니다 .

여기에서 테스트하십시오.

설명

원하는 출력의 조옮김이 훨씬 간단합니다.

   testing
  testing
 testing
testing

따라서 아래 에서 공백을 n추가 하여 선 을 만들어야 합니다 . 그것이 코드가하는 일입니다.iin-10

,            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 인터프리터를 사용하면 실제로 "비트 수면"후에 각 줄을 인쇄합니다.

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

의 좋은 사용 z. 입력을 가정하면 인쇄 가능한 ASCII, 당신은 대체 할 수 있습니다 W%$.
Dennis

@ 데니스 오, 난 그게 좋아. OP에서 이에 대한 설명을 요청했습니다. (저는 z아스키 그리드 기반의 도전에 항상 사용 합니다.)
Martin Ender 2016 년

15

C, 69 바이트

printf 마술!

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

           에스
          성
         sta
        stac
       스택
      스택
     Stackov
    stackove
   스택 오버
  스택 오버
 스택 오버
스택 오버플로
역류
ackoverflow
ckoverflow
Koverflow
과다
verflow
유출
흐름
흐름
낮은
아야
승

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

파이썬 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 오른쪽
Caridorc

6

자바 스크립트 ( 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>

자바 스크립트 ( ES6 ) 하드 코드 된 입력, 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

줄리아, 75 바이트

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

이것은 문자열과 정수를 입력으로 받아 출력을 출력하는 명명되지 않은 함수를 만듭니다. 호출하려면 이름을 지정하십시오 (예 :) f=(s,n)->(...).

언 골프 + 설명 :

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 바이트라고하는 경우 sn이미 프로그램이 존재한다고 가정한다.


5

Q 기본, 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은 일반적으로 문자열 연산 좋은 아니라, 매우 편리가 있다 함수가 반환하는 공간의 주어진 수의!

"입력은 하드 코딩 될 수있다"는 자유를 취하면서이 코드는 타입 접미사와 문자열이 할당되는 것을 피하기 위해 변수 sDIM'd'인 것으로 예상한다AS STRING$s 숫자n .

서문 예 :

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

산출:

   에스
  성
 str
줄무늬
트린
반지
노래
ng
지

FOR루프를 1 대신 2에서 시작하여 맨 위 빈 행을 제거 할 수 있습니다 .

보너스 : 4 바이트의 팰리를 추가 CLS하기 전에 NEXT이것을 추가하면 ... 진짜 큰 천막이됩니다 !

큰 천막

나는 PRINT CHR$(3)QBasic. : ^ D


QBasic을 다시 시도해야합니다 ... 처음 알게 된 내용
Canadian Luke REINSTATE MONICA

5

루비, 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 의견을 보내 주셔서 감사합니다!
DickieBoy

천만에요. ;)
blutorange

4

하스켈, 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

배쉬, 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

순수한 배쉬, 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의 구별을 이해하지 못하는 것 같다. 그래서이 제안은 좋지 않다. 그러나 sleep (1)은 8 자이며 -10 (그리고 GNU Core Util)이다
Sompom

3

펄, 50

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

57문자 +3에 대한 -i, -n그리고 -l. -10수면을위한 캐릭터.

-i에 저장된 숫자 입력에 사용됩니다 $^I. 기본적으로 i입력의 앞과 끝에 공백을 추가 한 다음 모든 i문자 를 검색 하고로 반복합니다 while. say편리하게 1입력 할 수 있는를 반환 합니다 sleep.

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플래그를 잃을 수도 있지만 다음을 통해 실행하는 경우 (기본 플래그가 아니기 -i -n때문에 -i) 5를 계산해야한다고 생각합니다 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

나는 그것이 펄에 더 가깝게 보인다는 것을 안다. 그러나 이것은 정말로 껍질이다!

첫 번째 줄은 루프를 통해 처음에만 필요한 선행 공백을 추가합니다. $ 3로 설정했습니다.

두 번째 줄 (NB 내장 줄 바꿈)은 입력이 끝날 때까지 되풀이 되어 문자열 의 처음 n 자를 인쇄 한 다음 첫 번째 문자가 $ 1에서 제거 된 상태에서 자신을 호출합니다.

데비안으로 테스트 /bin/dash-샘플 출력은 다음과 같습니다.

./marquee "testing"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

-10 보너스를 얻기 위해 9 개의 문자를 추가 할 수 있습니다! [ "$ 1"] && printf "%-. $ {2} s" "$ 1" ""&& sleep 1 && $ 0 "$ {1 #?}"$ 2 t
Toby Speight

3

파이썬 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

파이썬 2, (54 바이트-10 = 44) 64 62 60 46

(하드 코딩 된 입력 줄이 바이트 수에 추가되지 않는다고 가정했습니다.)

나는 실제로 인쇄 라인 사이에서 잠을 자고있는 프로그램을 보지 못했습니다. 그래서 그렇게하는 것이 선택 윤곽처럼 보입니다. 이 프로그램은 파이썬 3에서 2 바이트 더 있습니다.

편집 : 이제 프로그램은 수면 대신 계산을 수행합니다. 내가 사용하는 i프로그램이 상수로 저장하지 않지만, 각 시간을 계산해야한다 있도록 계산에.

여기에서 Python 3을 사용해보십시오 (Python 2 repl은 버그입니다)

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 Exponentiation은 계산에 꽤 잘 작동합니다.
mbomb007

@ mbomb007 파이썬이 실제로 그것을하기 위해 계산 값을 저장할 필요가 없다고 생각합니다 (따라서 'q ='를 저장할 수 있습니다). 또한 x ^ 7 ^ 7은 x ^ 49와 수학적으로 동일하지만 파이썬은 후자를 약간 더 빨리 해결하는 것으로 보입니다. 그런 식으로 몇 문자를 저장할 수 있습니다.
Sompom

@Sompom repl에서 사용해보십시오. 식을 단일 지수로 통합하면 시간 지연이 완전히 제거됩니다. 그러나 나는 제거 할 것이다 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

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

패딩이 문자열에 적용된 다음 채워진 문자열의 하위 문자열이 콘솔에 인쇄됩니다.

@KevinCruijssen 덕분에 -4 바이트.


나는 더 1 년이 지났 알고,하지만 당신은 골프 수있는 초 루프 조금 : for(;i<= s.length();System.out.println(s.substring(i-n,i++)));( -3 바이트 )
케빈 Cruijssen

1
그것이 개선 될 수 없다는 것을 의미하지는 않습니다. :) 감사.
TNT

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

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

파워 쉘- 85 83 바이트

늦었지만, 이길 수는 없습니다 :-) 그러나 나는 완전성을 위해 Powershell을 던질 것이라고 생각했습니다.

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


1

코브라-60

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

1

그루비-82

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

1

루아, 79 바이트

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 바이트

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 방법 및 테스트 사례가 포함 된 전체 프로그램 :

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)이 테스트에서 제거
  • 함수 concat
    의 2 가지 버전 생성 목표는 문자열 연결에서 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.