나는 우주선을 깎았 다!


39

소개:

에서 영감 의이 댓글 @MagicOctopusUrn@Emigna 의 05AB1E 응답 내에 " 그냥 버그이었다 도전" :

8F9ÝÀNð×ý}».∊나는 우주선을 깎았 다! 그리고 12 바이트 편집을 제안하는 것에 모두 흥분했습니다. – 매직 문어 Urn Jul 17 '17 at 20:10

이는입니다 05AB1E 이 결과 (레거시) 프로그램 :

1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890

온라인으로 사용해보십시오.

도전:

입력 : 비어 있지 않은 문자열

출력 : 바깥 쪽에서 안쪽으로, 위의 출력에서와 같이 각 문자 사이에 공백을 하나 더 추가하십시오 length - 1. 따라서 입력의 1234567890경우 실제로 출력은 다음과 같습니다.

1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0
1         2         3         4         5         6         7         8         9         0
1        2        3        4        5        6        7        8        9        0 
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890

왜? 의 길이는 1234567890입니다 10. 그래서 우리는 10 줄을 출력하는 것으로 시작합니다 : 공백이없는 첫 번째 줄; 하나의 공백 구분자가있는 두 번째; 둘 셋째; 그런 다음 ( length - 1공백이 중복 된 중간 줄이 없으면 ) 아래로 내려 가면서 초기 입력으로 돌아갑니다.

도전 규칙 :

  • 입력은 비어 있지 않아야합니다 (length >= 1). (단일 문자 입력의 경우 단순히 해당 문자를 출력합니다.)
  • 출력 자체 (화면의 어느 곳이든)가 올바른 한, 모든 후행 / 앞 공백 / 줄 바꾸기가 허용됩니다. (출력 라인 사이의 빈 라인도 허용되지 않습니다.)
  • 입력은 공백을 제외한 인쇄 가능한 ASCII 문자 만 포함합니다 (코드 포인트 범위 [33, 126]).
  • I / O는 유연합니다. 입력은 STDIN, 인수 또는 함수 매개 변수로 취할 수 있습니다. 문자열 대신 문자 목록 / 배열 / 문자 스트림 일 수 있습니다. 출력은 문자열 대신 문자 목록 / 배열 / 문자 스트림 일 수도 있습니다. STDOUT에 인쇄 될 수 있습니다. 개행으로 구분 된 문자열로 반환됩니다. 기타

일반적인 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하지 마십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 리턴 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다.
  • 가능하면 코드 테스트 링크를 추가하십시오.
  • 또한 답변에 대한 설명을 추가하는 것이 좋습니다.

테스트 사례 :

Input: @
Output:
@

Input: test
Output:
test
t e s t
t  e  s  t
t   e   s   t
t  e  s  t
t e s t
test

Input: ?!
Output:
?!
? !
?!

Input: Spaceship
Output:
Spaceship
S p a c e s h i p
S  p  a  c  e  s  h  i  p
S   p   a   c   e   s   h   i   p
S    p    a    c    e    s    h    i    p
S     p     a     c     e     s     h     i     p
S      p      a      c      e      s      h      i      p
S       p       a       c       e       s       h       i       p
S        p        a        c        e        s        h        i        p
S       p       a       c       e       s       h       i       p
S      p      a      c      e      s      h      i      p
S     p     a     c     e     s     h     i     p
S    p    a    c    e    s    h    i    p
S   p   a   c   e   s   h   i   p
S  p  a  c  e  s  h  i  p
S p a c e s h i p
Spaceship

Input: 05AB1E
Output:
05AB1E
0 5 A B 1 E
0  5  A  B  1  E
0   5   A   B   1   E
0    5    A    B    1    E
0     5     A     B     1     E
0    5    A    B    1    E
0   5   A   B   1   E
0  5  A  B  1  E
0 5 A B 1 E
05AB1E

Input: )}/\
Output:
)}/\
) } / \
)  }  /  \
)   }   /   \
)  }  /  \
) } / \
)}/\

1
모든 것을 불안하게 만듭니다 !!! SPACESHIP !!!
WallyWest

1
나는 그 출력을 인식했다. 나는이 아이디어가 여전히 진행되고있는 것을 좋아한다.
Carcigenicate

2
TFW는 질문에서 패턴을 모호하게 인식 한 ಠ_ಠ후 1 년 전에 실수로 패턴을 만들었 기 때문임을 인식합니다 ಠ⌣ಠ.
Magic Octopus Urn

1
@MagicOctopusUrn 영감을 주셔서 감사합니다. ; D
Kevin Cruijssen

3
@KevinCruijssen 감사합니다.
Magic Octopus Urn

답변:


11

Japt , 8 6 바이트

입력을 문자 배열로 취하고 문자열 배열을 출력합니다.

£qYçÃê

시도 해봐


설명

£          :Map each element at (0-based) index Y
 q         :  Join input with
  Yç       :   Space repeated Y times
    Ã      :End Map
     ê     :Palindromise

원본, 8 바이트

I / O는 문자열입니다. -R플래그를 사용합니다 . 각 줄에 후행 공백을 포함합니다.

¬£múYÄÃê

시도 해봐

설명

             :Implicit input of string U
¬            :Split
 £           :Map each character at 0-based index Y
  m          :  Map original U
   ú         :    Right pad with spaces to length ...
    YÄ       :     Y+1
      Ã      :End map
       ê     :Palindromise
             :Implicitly join with newlines

S.ç()FTW 다시 한번 :-)
ETHproductions

1
심각한 질문 : 이와 같은 퍼즐에 대해 1-6 바이트 길이의 솔루션을 반복적으로 검색하는 것이 가능합니까?
filip

2
@filip 아니요 : 256 ** 6 = 281474976710656 (적어도 순진한) 이상의 조합이 있습니다. 비밀번호를 추측하는 것과 같습니다.
Kirill Bulygin

3
@KirillBulygin에는 Japt에서 사용 가능한 문자를 1-6 문자 길이의 문자열로 결합하는 37 (37,764,717,485,592) 이상의 가능한 방법이 있습니다. 문자열 리터럴 또는 압축 문자열에 사용할 수있는 다른 1 바이트 문자를 모두 포함하면 해당 숫자가 276 조 (276,024,445,697,280) 이상으로 증가합니다 . 따라서, 모든 사람들을 생성하기 위해 봇을 작성하고 유효한 Japt 프로그램을 필터링 한 다음 당면한 과제에 적합한 프로그램을 찾으십시오 (아마도 가능하지 않음). 봇이 당신을 위해 골프를 할 수있게하는 것 외에 재미는 어디에 있습니까?!
얽히고 설킨

6
@Shaggy : "봇이 당신을 위해 골프를하게하는 재미는 어디에 있습니까?" 봇을 정말 짧게 만들면 어떻게 될까요?
Oddthinking

11

R , 105 99 85 84 79 바이트

@Kevin Cruissen과 @Giuseppe 덕분에 -6

-14 정규식 기반 방법으로 변경

@Giuseppe 덕분에 -1

@digEmALl 덕분에 -5

function(w,n=nchar(w)-1)write(trimws(Map(gsub,"",strrep(" ",n-abs(n:-n)),w)),1)

온라인으로 사용해보십시오!


에서 공백을 제거하여 1 바이트를 골프 수 있습니다 in(r<-.
Kevin Cruijssen

1
s한 번만 사용 하므로 write직접 인수로 사용할 수 있습니다. 99 바이트
Giuseppe

1
그건해야 1보다는을 ""write? 나는 당신의 사용을 파고 있어요 Map!
주세페


1
나는 내가이 collapse주장을 이길 수 있다고 확신 paste했지만 그 일이 일어나지 않는다 ...
JDL


6

, 10 바이트

Eθ⪫θ× κ‖O↓

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

Eθ          Map over characters of input string
  ⪫θ        Join characters of input string using
    ×       a literal space repeated 
      κ     current index number of times
            Implicitly print each result on its own line
       ‖O↓  Reflect vertically with overlap

숯은 같은 것들을 반영하지 않습니다 [에를 ]- 또는 다른 별도의 명령이다?
Magic Octopus Urn

@MagicOctopusUrn 리플렉션을 변환하려면 별도의 명령이 있습니다. 보다예를 들어 codegolf.stackexchange.com/a/127164 를 .
Neil

나는 그것이 이전에 반영되는 것을 보았지만 확실하지 않았습니다. 산뜻한!
Magic Octopus Urn

6

캔버스 , 8 바이트

┐² ×*]──

여기 사용해보십시오!

이 도전 에는 7 바이트 버전이 너무 좋았습니다.


나는 당신의 7 바이트 버전을 좋아합니다. 어떻게 작동하는지 설명해 주시겠습니까? 다음 중 두 연산자를 겹치는 연산자 /X무엇입니까?
카야

3
@ 카야 그것은 마지막 문자입니다 -수직 palindromize. Canvas의 palindromization 은 멋진 작업을 수행 합니다. 겹치는 부분 에도 고유 한 특성이 있습니다.
dzaima

6

파이썬 2 , 72 70 68 66 65 바이트

Kevin Cruijssen 덕분에 -2 바이트
덕분에 -3 바이트

w=input();c=s=-1
while c:print(' '*~c).join(w);s*=w[:c]>'';c+=s|1

온라인으로 사용해보십시오!


c==len(w)-1을 사용하여 1 바이트로 골프를 칠 수 있습니다 c+2>len(w). 편집 : 새로운 70 바이트 버전에서 0<c가능합니다 c.
Kevin Cruijssen

6

05AB1E , 10 9 바이트

덕분에 1 바이트 절약 Adnan

εINð×ý}û»

온라인으로 사용해보십시오!

설명

ε            # apply to each in input
 I           # push the input
  Nð×        # push <index> spaces
     ý       # merge the input on the spaces
      }      # end loop
       û     # palendromize
        »    # join on newlines

을 (를) 삭제할 수 있습니다 S. 입력이 유연하므로 목록으로 입력 할 수 있습니다.
Kevin Cruijssen

1
@ KevinCruijssen : 첫 번째 버전은 레거시에서 9 바이트입니다. » 생략 할 수 있습니다.
Emigna

1
»루프 v를 제거 하고 맵으로 변경하면 실제로 9 바이트의 레거시에서도 작동합니다 ε.
케빈 크루이 센

1
답변을 게시했습니다 . 그리고 현재 Japt은 6 바이트로 우리를 때리고 있습니다. 아니면 05AB1E (Elixir rewrite)와 05AB1E (Python legacy)에서 가장 짧습니까? :)
Kevin Cruijssen

2
않습니다 εINð×ý}û»도 작동?
아드 난


4

apt , 9 8 바이트

@Shaggy에서 -1 바이트

ÊƬqXîÃê

ÊƬqXîÃê        Full program, implicity input U
ÊÆ              Rage from 0 to U length and map
  ¬             split U at ""
   qXîà     join U using " " times range current value
        ê       horizontal mirror

온라인으로 사용해보십시오!


댕; 당신이 나를 다시 닌자처럼 보인다! Lemme는 내 삭제를 원하는지 알고 있습니다.
얽히고 설킨

1
@Shaggy 아니오, 답을 지키십시오. 문자열을 사용하는 동안 배열을 입력으로 사용하므로 서로 다른 xD입니다.
Luis felipe De jesus Munoz

1
SpX-> 1 바이트 절약
얽히고 설킨

4

PowerShell , 66 54 바이트

mazzy 덕분에 -12 바이트

0..($x=($a=$args).count-1)+$x..0|gu|%{$a-join(' '*$_)}

온라인으로 사용해보십시오!

TIO에서 각 문자에 대해 별도의 명령 줄 인수로 나타나는 스플래 팅을 통해 입력을받습니다.

먼저 $a=$args입력 인수로 설정 했습니다. 그런 다음 해당 배열 $x과 동일하게 설정 합니다. 그런 다음 우주선을 구성하기 위해 문자를 반복해야합니다. 그것은에서 까지 범위를 구성한 다음 다시로 범위를 정한 다음 적절한 범위 만 꺼내기 위해 사용 됩니다..count-10$x$x0Get-Unique

반복 할 때마다 입력 인수와 -join해당하는 공백 수와 함께 인수를 가져 옵니다. 이러한 각 문자열은 파이프 라인에 남아 Write-Output있으며 프로그램이 완료되면 암시 적으로 줄 바꿈을 제공합니다.


이것을보십시오 :0..($x=($a=$args).count-1)+$x..0|gu|%{$a-join(' '*$_)}
mazzy

1
@mazzy 무엇 ... Get-Unique범위에서 어떻게 작동합니까? 그건 미친 짓이야! 감사!
AdmBorkBork

4

05AB1E (레거시) , 9 바이트

εINúíJ}û»

문자 목록으로 입력하십시오.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

ε     }    # Map each character in the input to:
 I         #  Take the input
  Nú       #  Prepend each with the 0-indexed amount of spaces
           #   i.e. ["t","e","s","t"] & 3 → ["   t","   e","   s","   t"]
    í      #  Reverse each item
           #   i.e. ["   t","   e","   s","   t"] → ["t   ","e   ","s   ","t   "]
     J     #  Join them together to a single string
           #   i.e. ["t   ","e   ","s   ","t   "] → "t   e   s   t   "
       û»  # Palindromize the list, and join by newlines
           #  i.e. ["test","t e s t ","t  e  s  t  ","t   e   s   t   "]
           #   → "test\nt e s t \nt  e  s  t  \nt   e   s   t   \nt  e  s  t  \nt e s t \ntest"

1
Oooooo, 또한 미러가 [, ](, 와 동일하게 미러링 될 때 /의 방향을 \로 변경하기 때문에 유효하지 않습니다 ). 이러한 경우를 추가하여 숯을 잡을 수도 있습니다. (이는 원래 내가 언급 한 답변 이었기 때문에 다른 의견을 Emigna의 답변으로 옮겼습니다)
Magic Octopus Urn

@MagicOctopusUrn 알려 주셔서 감사합니다. û»대신 에 사용하여 수정했습니다 .∊.
Kevin Cruijssen

4

하스켈 , 60 59 바이트

(init<>reverse).(scanl(?)<*>tail)
a?_=do u<-a;u:[' '|' '<u]

온라인으로 사용해보십시오!

설명

문자열 (예 :)의 "abc"경우 먼저 적용

scanl (?) <*> tail

이것은 같은

\str -> scanl (?) str (tail str)

이것은 반복 적용 (?)(범위의 각 문자에 공간을 추가 [.. 33] 받는) str로서 많은 문자열이 없을 때까지 str문자가 :["abc","a b c ", "a b c "]

이제 우리는 결과를 (마지막 요소를 뺀) 반대 부분으로 연결하면됩니다.

init<>reverse

4

MATL , 25 22 13 바이트

zZv"Gtz@he!1e

온라인으로 사용해보십시오!

덕분에 Luis Mendo5 바이트 골프를 제안 해 에게 말씀을 전하며 4 바이트를 더 줄였습니다.

입력 예와 함께 설명 'abc':

         # Implicit input, 'abc'
z        # find number of nonzero elements (length of string)
         # stack: [3]
Zv       # symmetric range
         # stack: [[1 2 3 2 1]]
"        # begin for loop, iterating over [1 2 3 2 1] as the loop indices
G        # push input
         # stack: ['abc']
tz       # dup and push length
         # stack: ['abc', 3]
@        # push loop index, i (for example, 2)
         # stack: ['abc', 3, 2]
h        # horizontally concatenate
         # stack: ['abc', [3, 2]]
e!       # reshape to matrix of 3 rows and i columns, padding with spaces, and transpose
         # stack: [['abc';'   ';'   ']]
1e       # reshape to matrix of 1 row, leaving last value on stack
         # stack: ['a  b  c  ']
         # implicit end of for loop
         # implicit end of program, display stack contents

3

젤리 , 9 바이트

jⱮLḶ⁶ẋƲŒḄ

온라인으로 사용해보십시오!

행 목록을 리턴합니다. 출력은 TIO를 통해 미리 결정됩니다.


다소 다른 9 : ,€⁶$LСŒḄ. 기타, 더 유사, 9의가 : J’⁶ẋŒḄɓjⱮJ’⁶ẋŒḄjⱮ@(나는 기쁨 아직 짧은 찾고 없지만 WAS)
조나단 앨런

@JonathanAllan 이것이 최적이라고 확신합니다 . LḶ⁶ẋ또는 더 짧은 작성 방법이 없다고 생각 ŒḄ합니다. 그러나 저장을 찾으면 핑을하십시오. :-)
Outgolfer Erik

그것에 대해 생각하면 ,€⁶$LСŒḄ미친 중첩이 있기 때문에 유효하지 않을 수 있으므로 Y전체 프로그램 이 필요할 수 있습니다 .
Jonathan Allan

@JonathanAllan 네, 물론 아닙니다. ['I', 'f', [[' '], 't', 'h', [['i']], 's'], ' ', 'i', ['s', ' '], 'a', [[' ', 's', 't'], 'r', ['i', 'n', 'g'], ' '], 'w', ['e', ' ', 'a', 'r', 'e'], ' ', 'd', 'o', ['o'], 'm', [[[[['e']]]]], [[[['d']]]], '!']적어도 나는 05AB1E를 능가했다.
Outgolfer Erik

나는 05AB1E를 능가한다고 말했다. 더 이상은 아니야 : /
Outgolfer Erik


3

Stax , 10 바이트

Ç·9ƒù▌╘Ä┘e

실행 및 디버깅

각 줄에 후행 공백이있는 출력.

설명:

%R|pmx{]n(m Full program, unpacked, implicit input
%           Length of input
 R          1-based range
  |p        Palindromize
    m       Map:
     x{   m   Map over characters of input:
       ]        Character -> string
        n(      Right-pad to length given by outer map value
              Implicit flatten and output

3

Java (JDK 10) , 115 바이트

s->{for(int l=s.length(),i=-l;++i<l;)System.out.printf(s.replaceAll(".","%-"+(i<0?l+i:l-i)+"s")+"%n",s.split(""));}

온라인으로 사용해보십시오!


1
l-Math.abs(i)i<0?l+i:l-i-2 바이트 로 골프를 칠 수 있습니다 .
Kevin Cruijssen

@KevinCruijssen 감사합니다! :)
Olivier Grégoire

그럴 수 l-i<0?-i:i있습니까?
Quintec

@ thecoder16 괄호가 필요합니다 : l-(i<0?-i:i)(12 바이트).
Jonathan Frech

3

K (oK) , 25 24 바이트

해결책:

,/'(1+a,1_|a:!#x)$\:+,x:

온라인으로 사용해보십시오!

설명:

K4 솔루션의 포트 :

,/'(1+a,1_|a:!#x)$\:+,x: / the solution
                      x: / save input as x
                     ,   / enlist
                    +    / flip
                 $\:     / pad ($) right by each-left (\:)
   (            )        / do this together
              #x         / count length of input,           e.g. 3
             !           / range 0..length,                 e.g. 0 1 2
           a:            / save as a
          |              / reverse it,                      e.g. 2 1 0
        1_               / drop first,                      e.g. 1 0
      a,                 / join to a,                       e.g. 0 1 2 1 0
    1+                   / add 1,                           e.g. 1 2 3 2 1
,/'                      / flatten (,/) each (')

노트:

  • ngn 덕분에 -1 바이트

1
,:'-> +,
ngn


2

PHP, 88 89 바이트

for(;++$i<2*$e=count($a=str_split($argn));)echo join(str_pad("",~-$e-abs($i-$e)),$a),"\n";

에 PHP 5 이상이 필요합니다 str_split. 파이프로 실행 -nR하거나 온라인으로 사용해보십시오 .


온라인 시도 링크는 내가 두려워하는 잘못된 출력을 제공합니다. 출력에서 모든 줄에는 문자 사이 (또는 선택적으로 후행) 대신 선행 공백이 있습니다. 첫 번째 문자는 모두 출력에서 ​​동일한 열에 있어야합니다.
Kevin Cruijssen

1
@KevinCruijssen 출력을 충분히 가까이에서 보지 못했습니다. 결정된. (이전에는 내 이전 출력이 로켓처럼 보였지만) ;-)
Titus

그것은 나에게 화살 머리처럼 보였다. : D 그러나 이제 고정되었습니다 +1.
Kevin Cruijssen

\ n 대신 실제 줄 바꿈을 배치하면 바이트를 저장합니다. :)
Martijn

@Martijn 실제로 1 바이트 만 계산했습니다 ... 코드를 붙여 넣을 때 교체하는 것을 잊었습니다.
Titus

2

K4 , 23 바이트

해결책:

,/'(1+a,1_|a:!#x)$\:$x:

예:

q)k),/'(1+a,1_|a:!#x)$\:$x:"Spaceship"
"Spaceship"
"S p a c e s h i p "
"S  p  a  c  e  s  h  i  p  "
"S   p   a   c   e   s   h   i   p   "
"S    p    a    c    e    s    h    i    p    "
"S     p     a     c     e     s     h     i     p     "
"S      p      a      c      e      s      h      i      p      "
"S       p       a       c       e       s       h       i       p       "
"S        p        a        c        e        s        h        i        p        "
"S       p       a       c       e       s       h       i       p       "
"S      p      a      c      e      s      h      i      p      "
"S     p     a     c     e     s     h     i     p     "
"S    p    a    c    e    s    h    i    p    "
"S   p   a   c   e   s   h   i   p   "
"S  p  a  c  e  s  h  i  p  "
"S p a c e s h i p "
"Spaceship"

설명:

각 줄에 공백이 있습니다.

,/'(1+a,1_|a:!#x)$\:$x: / the solution
                     x: / save input as x,                 e.g. "abc"
                    $   / string,                          e.g. (,"a";,"b";,"c")
                 $\:    / pad ($) right by each-left (\:)
   (            )       / do this together
              #x        / count length of input,           e.g. 3
             !          / range 0..length,                 e.g. 0 1 2
           a:           / save as a
          |             / reverse it,                      e.g. 2 1 0
        1_              / drop first,                      e.g. 1 0
      a,                / join to a,                       e.g. 0 1 2 1 0
    1+                  / add 1,                           e.g. 1 2 3 2 1
,/'                     / flatten each

2

C 번호, 113 (105) 98 바이트

s=>{for(int l=s.Length,i=-l;++i<l;)WriteLine(Join("",s.Select(c=>$"{c}".PadRight(i<0?l+i:l-i))));}

온라인으로 사용해보십시오!


안녕. 현재 귀하의 답변은 기능 또는 전체 프로그램 대신 스 니펫입니다. 람다 함수로 만들기 위해 s=>{전후 에 추가하여 저렴하게 해결할 수 있습니다 }. 또한 골프를 치기위한 한 가지는 for- 루프 주변의 브래킷을 제거하는 것입니다. 온라인으로 사용해보십시오.
Kevin Cruijssen

@KevinCruijssen 감사합니다! 게시하기 전에 그 문제를 해결하는 것을 잊었다 ...
RobIII

2

스칼라 , 82 바이트

for(i<-(0 to a.size)union(-a.size to 0))println(a.map(_+" "*Math.abs(i)).mkString)

온라인으로 사용해보십시오

스칼라는 여기에 나를 돕는 많은 지름길을 가지고 있으며 그것은 꽤 읽을 수 있습니다! 스칼라 시도


안녕하세요, PPCG에 오신 것을 환영합니다! 좋은 대답이지만 두 가지가 약간 잘못되어 있습니다. 공백이 가장 많은 행은 가운데가 두 번이 아니라 한 번만 출력되어야합니다. 그리고 현재 당신은에서 인쇄 0하는 length대신에, 공간의 양 0length-1공간의 양. 스칼라를 잘 모르지만 다음과 같이 +4 바이트 (총 86 바이트)로 두 가지 문제를 해결할 수있는 것처럼 보입니다. for(i<-(0 to a.size-1)union(-a.size+2 to 0))println(a.map(_+" "*Math.abs(i)).mkString)다시 환영합니다. 숙박을 즐기십시오! :)
Kevin Cruijssen

2

Oracle SQL, 115 바이트

골프 언어는 아니지만 ...

SELECT TRIM(REGEXP_REPLACE(v,'(.)',LPAD('\1',1+LENGTH(v)-ABS(LEVEL-LENGTH(v)))))FROM t CONNECT BY LEVEL<2*LENGTH(v)

값이 v테이블의 열에 있다고 가정 합니다 t.

SQL 바이올린

Oracle 11g R2 스키마 설정 :

CREATE TABLE t ( v ) AS
  SELECT 'test' FROM DUAL;

쿼리 1 :

SELECT TRIM(REGEXP_REPLACE(v,'(.)',LPAD('\1',1+LENGTH(v)-ABS(LEVEL-LENGTH(v)))))
FROM   t
CONNECT BY LEVEL<2*LENGTH(v)

결과 :

(SQLFiddle은 어떤 이유로 열에 오른쪽 정렬 된 값을 인쇄합니다. 선행 공백은 없습니다)

| TRIM(REGEXP_REPLACE(V,'(.)',LPAD('\1',1+LENGTH(V)-ABS(LEVEL-LENGTH(V))))) |
|---------------------------------------------------------------------------|
|                                                                      test |
|                                                                   t e s t |
|                                                                t  e  s  t |
|                                                             t   e   s   t |
|                                                                t  e  s  t |
|                                                                   t e s t |
|                                                                      test |

SQL Fiddle 결과에는 문자 사이에 공백이 하나만있는 것 같습니다. 이 스크린 샷을보십시오 . 나는 이것이 SQL Fiddle 때문이라고 가정하고 로컬에서 작동합니까? Btw, SQL이 표준 정규식 규칙을 사용하는지 확실하지 않지만 Java와 같이 대신 사용하여 (.)골프를 칠 수 있습니까? 편집 : 전혀 마음,입니다 하지 .. ( 무슨 의미가 자바의 예 ). .\0\1$0\0
Kevin Cruijssen

1
@KevinCruijssen "Run SQL"버튼 옆의 아래쪽 화살표를 클릭하고 출력을 "Plaintext Output"또는 "Markdown Output"으로 변경하면 공백이 표시됩니다.
MT0

감사. 이 경우 실제로 좋아 보입니다!
Kevin Cruijssen

2

8086 기계 코드, 56 53 바이트

00000000  bf 35 01 57 ba 01 00 52  be 82 00 b3 ff ac 59 51  |.5.W...R......YQ|
00000010  aa 3c 0d 74 07 b0 20 e2  f7 43 eb f1 b0 0a aa 59  |.<.t.. ..C.....Y|
00000020  00 d1 e3 08 38 cb d6 08  c2 51 eb dc c6 05 24 5a  |....8....Q....$Z|
00000030  b4 09 cd 21 c3                                    |...!.|
00000035

다음에서 조립 :

org 0x100
use16
        mov di, buffer
        push di
        mov dx, 1
        push dx
nextl:  mov si, 0x82
        mov bl, -1
nextc:  lodsb
        pop cx
        push cx
stor:   stosb
        cmp al, 0x0d
        je cr
        mov al, ' '
        loop stor
        inc bx
        jmp nextc
cr:     mov al, 0x0a
        stosb
        pop cx
        add cl, dl
        jcxz done
        cmp bl, cl
        salc
        or dl, al
        push cx
        jmp nextl
done:   mov [di], byte '$'
        pop dx
        mov ah, 0x09
        int 0x21
        ret
buffer:

테스트 사례 :

스크린 샷


안녕. 온라인으로 8086 기계 코드로 컴파일 된 것이 없지만 테스트 사례 중 하나에 대한 출력 스크린 샷을 추가 할 수 있습니까? 그런 다음 모든 것이 올바른지 확인할 수 있습니다. :)
Kevin Cruijssen

끝난. 또한 한 바이트 더 면도 :)
user5434231 17:02에

스크린 샷 주셔서 감사합니다! 불행히도 출력에 작은 실수가 있습니다. 가운데 줄 length에 공백이 있고 총 9 줄이 있지만 가운데 줄 length-1에 공백이 있어야하며 대신 총 7 줄이 있어야합니다 (4 글자 단어 'test'`). : : (나는 그것을 고치기 위해 바이트면에서 비싸지 않기를 바란다?
Kevin Cruijssen

1
오 알 겠어요 이제 수정되었으므로 1 바이트 더 줄였습니다.
user5434231

2

하스켈, 64 60 59 바이트

(""#)
a#s|l<-(:a)=<<s,w<-' ':a=l:[x|w<(' '<$s),x<-w#s++[l]]

온라인으로 사용해보십시오!

a#s                         -- take a string of spaces 'a' and the input string 's'
 |l<-(:a)=<<s               -- let 'l' be the current line, i.e. the spaces in 'a'
                            -- appended to each char in 's'
  w<-' ':a                  -- let 'w' be 'a' with an additional space   
 =l                         -- return that 'l'
   :[   |w<(' '<$s)   ]     -- and, if 'w' is shorter than 's',
     x  ,x<-w#s++[l]        -- followed by a recursive call with 'w' 
                            -- and by another copy of 'l'

(""#)                       -- start with an empty 'a'

2

배쉬 , 115 , 109 , 105 , 100 , 97 , 96 , 92 , 91 , 90 바이트

Kevin Cruissen 덕분에 -5 & -3

read s;for((c=f=1;f;c-=2*(f>=${#s}),f+=c))
{ printf '%-'${f}'.c' `grep -o .<<<"$s"`
echo
}

온라인으로 사용해보십시오!


(가)부터주의 \쉘 이스케이프 문자이며, 테스트 케이스를 )}/\추가로 입력해야 \다음과 같습니다 : )}/\\.


안녕. 테스트 케이스와 함께 TIO 링크 를 추가 할 수 있습니까? 또한, 후 공백을 제거하는 나는 아주 잘 배쉬를 모르겠지만이 가능 in하고 printf파이썬처럼?
Kevin Cruijssen

1
@KevinCruijssen, 감사합니다. 수정 된 답변을 참조하십시오. 그러나 TIO-link를 처음 사용 했지만이 bash코드 문자열 ( 한 줄) 만 입력 하기 때문에 여러 테스트 사례를 사용하는 방법을 잘 모르겠습니다 . 그러나 테스트 케이스는 모두 작동하지만 다음 )}/\ 과 같이 작은 따옴표로 묶어야합니다 <<< ')}/\' read s; ...etc. . 공간이 후 in하고 printf필요하다.
agc

감사. 그리고 TIO에 대한 단일 테스트 사례가 좋습니다. 모든 것이 예상대로 작동하는지 확인하는 것이 주로 그렇습니다. 나에게서 +1 :)
Kevin Cruijssen

1
당신이 골프 5 바이트 이상 할 수있는 새로운 버전의 이 같은를 . 이후 공백 fordo제거 할 수 있습니다. f=1로 변경할 수 있습니다 c=f=1. 그리고 f=f+c될 수 있습니다 f+=c.
Kevin Cruijssen

1
아, 하나 더 작은 골프. Bash에서 가능한지 확실하지 않지만 분명히 (TIO 링크가 편리한 또 다른 이유입니다) 는 for 루프에서 변경하는 f!=0f입니다. JavaScript 및 Python에서와 마찬가지로 0거짓이며 다른 모든 양수 / 음수는 Bash에서 진실합니다.
Kevin Cruijssen

2

펄 6 , 43 바이트

{(0....comb-1...0)>>.&{join ' 'x$^a,.comb}}

온라인으로 사용해보십시오!

줄 목록을 반환합니다.

설명:

 {                                         }  # Anonymous code block
  (0....comb-1...0) # A list from
   0                  # 0
    ...               # to
       .comb-1        # the length of the input string -1
              ...     # back to
                 0    # 0
                   >>.&{                  }  # Map each number to
                        join        ,.comb   # Join the list of characters
                             ' 'x$^a         # With the number of spaces

2

C (GCC) , 131 (129) 111 바이트

i;x;f(k,j)char*k,*j;{x=strlen(k)-1;for(i=0;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

온라인으로 사용해보십시오!

ceilingcat 덕분에 -20 바이트 !

#import<string.h>
i;x;f(k,j)char*k,*j;{x=strlen(k)-1;for(i=0;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

온라인으로 사용해보십시오!

또는 길이를 매개 변수로 승인 할 수있는 경우 :

C (gcc), 105 바이트

ceilingcat 덕분에 -1 바이트!

i;x;f(k,x,j)char*k,*j;{for(i=!x--;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

온라인으로 사용해보십시오!


@ceilingcat 허!
Conor O'Brien

1
102 바이트 길이의 골프에서는 전 세계 x가 음영 처리되어 중복 선언되어 있다고 생각합니다 .
Jonathan Frech

2

PHP, 148 146 143 141 바이트

function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))."
";}

다음과 같이 테스트 할 수 있습니다.

<?php
error_reporting(0);

$s = 1234567890;
function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))."
";}

산출

1234567890
1 2 3 4 5 6 7 8 9 0 
1  2  3  4  5  6  7  8  9  0  
1   2   3   4   5   6   7   8   9   0   
1    2    3    4    5    6    7    8    9    0    
1     2     3     4     5     6     7     8     9     0     
1      2      3      4      5      6      7      8      9      0      
1       2       3       4       5       6       7       8       9       0       
1        2        3        4        5        6        7        8        9        0        
1         2         3         4         5         6         7         8         9         0         
1        2        3        4        5        6        7        8        9        0        
1       2       3       4       5       6       7       8       9       0       
1      2      3      4      5      6      7      8      9      0      
1     2     3     4     5     6     7     8     9     0     
1    2    3    4    5    6    7    8    9    0    
1   2   3   4   5   6   7   8   9   0   
1  2  3  4  5  6  7  8  9  0  
1 2 3 4 5 6 7 8 9 0 
1234567890

모래 상자

확장 버전

 function s($s){
    //loop upwards 0-10
    for(;$i<strlen($s);++$i) f($i,$s);
     //decrement so it's odd, from 9 loop downwards to 0
    for(--$i;--$i>=0;)f($i,$s);
 }
 //2nd function to save space
 function f($i,$s){
     //chunk it, split 1 char, insert $i number of spaces
     echo chunk_split($s,1,str_repeat(' ',$i))."
";}

시도 2, 92 바이트

@Titus의 답변을 본 후 나는 이것을 내 것으로 줄였습니다.

for(;++$i<2*$e=strlen($s=$argn);)echo chunk_split($s,1,str_repeat(' ',~-$e-abs($i-$e)))."
";

나는 2 대신에 1 루프를 사용하는 방법을 생각하고 있었다. 믿거 나 말거나, 나는 for"실제"코드에서 루프를 거의 사용하지 않는다 . 그것은이었다 ~내가 없어진 것을, 아니 비트 ...

조금 아파서 92너무 나쁘지 않습니다. 그러나 나는 어쨌든 그것을 두 번째 시도로 넣을 것이다.

$argn 명령 행의 입력

-nR을 사용하여 파이프로 실행하거나 온라인으로 시도하십시오.

모래 상자


당신이 명명 된 기능을 사용하는 경우 첫 번째 버전은 4 바이트 단축 될 것이라고 나에게 것 f대신에 익명의 하나를 할당하는 $f- function f(이상 2 바이트를 저장 $f=function(다른 바이트 저장 전화 할 때마다, 당신 f(...)대신을 $f(...). 또는을 캡처하여 $s2 바이트를 절약 할 수 있습니다. ($i)use($s)보다 4 바이트 더 길지만 ($i,$s)각 호출에 대해 3 바이트를 $f($i)대신 저장합니다 $f($s,$i). JS와 같은 자동 캡처 기능이있는 언어에서는 use문장 의 페널티를 지불하지 않기 때문에 실행 가능한 절약이 더 흔합니다 .
IMSoP

나는 도움을 주셔서 감사합니다, 나는 골프를 코딩하는 데 익숙하지 않고 실제로 그렇게 많이하지 않습니다.하지만 일반 SO 페이지에서 지루해합니다. 나는 사용에 대해 생각 use했지만 더 오래 느낍니다. 그 의미 $i를 동적으로하려면 참조로 전달해야합니다. 그래서이어야 use(&$i)하고는 $i참조로 전달하기 전에 정의되어야한다 $f. 이것은 부모 함수에서 또는 다른 것보다 먼저 설정하는 것을 의미합니다. 함수에 대한 때문일 수 function s($s,$i)및 그냥 호출해야합니다 알고 s($s,0) 있지만, 추한 것, 그리고 그 주위에11 bytes, use(&$i),$i
ArtisticPhoenix

$s그래도 사용할 수 \n있고를 실제 줄로 바꿀 수 있습니다 . 그것은 143 줄 끝에서 2와 사용에서 1을 얻습니다
ArtisticPhoenix

그렇습니다. $ s가 "자연적인"포획을 느꼈기 때문에 $ i를 사용하는 것도 고려하지 않았지만, 항상 순 절감액을 계산할 가치가 있습니다. 그러나 f클로저 대신 명명 된 함수 를 선언하여 2 바이트를 절약 할 수 있습니다 . function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))." ";}이와 같은 추가 함수는이 메타 포스트에 따라 허용됩니다. codegolf.meta.stackexchange.com/questions/7614/…
IMSoP

업데이트, 부부 저장
ArtisticPhoenix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.