캐릭터 크로스


31

PCG의 첫 번째 퍼즐처럼 더 복잡한 것을 게시 할 것으로 기대했지만 Stack Overflow에 대한 특정 숙제 문제는 이것을 게시하도록 영감을주었습니다. 그들은 :

홀수 개의 문자 를 포함하는 주어진 단어에 대해 다음 패턴을 인쇄하십시오 .

P           M
  R       A   
    O   R    
      G       
    O   R      
  R       A   
P           M 


글자는 기사가 인쇄해야하는 패턴에서 분리 된 것입니다. 따라서 다른 모든 열은 비어 있습니다. -( Xnor 에게 이것을 지적 해 주셔서 감사 합니다.)

규칙

  1. C ++ 사용은 금지되어 있습니다. 이 질문을 거기에 연결할 수 있습니다.
  2. 을 사용 stdout하거나 문자열을 빠르게 출력하는 수단 (예 : alert()JavaScript)을 사용할 수 있습니다.
  3. 항상 그렇듯이 가장 짧은 코드가 승리합니다.

2
이것은 스택 오버플로 관련 게시물에 있습니다 : stackoverflow.com/q/5508110
Level River St

2
@flawr 나는 짝수가 아닌 홀수를 의미한다고 생각합니다.
NinjaBearMonkey

31
신 나는 바보이다, 나는 그것이 모호한 컴퓨터 과학자 약어라고 생각했다. =)
flawr

2
@jpjacobs : 질문에서 명시 적으로 다르게 언급하지 않는 한 바이트.
Dennis

2
전체 프로그램입니까 아니면 기능입니까? (실제로 스마트하게 대답하고 나중에이 질문
Rodolfo Dias

답변:


13

피 이스 , 22

Vzjdm?@zd}N,dt-lzd\ Uz

테스트:

$ pyth -c 'Vzjdm?@zd}N,dt-lzd\ Uz' <<< "CODE-GOLF"
C               F
  O           L  
    D       O    
      E   G      
        -        
      E   G      
    D       O    
  O           L  
C               F

설명:

(Implicit)                  z = input()
(Implicit)                  d = ' '
Vz                          for N in range(len(z)):
  jd                            print(d.join(
    m                               map(lambda d:
     ?@zd                                        z[d] if
         }N                                      N in
           ,dt-lzd                                    (d,len(z)-d-1) else
      \                                          " ",
     Uz                                          range(len(z)))))

Pyth에 비트 보완이 없습니까?
xnor

@ xnor 아니요, 도움이되지 않습니다. ~Pyth에 비트 단위가 아니라고 가정합니다 . 그럼 우리가 바꿀 수 t-lzd+lz~d아직 5 자 -.
isaacg

Vz깔끔한 트릭입니다 : 나는 그 사실을 몰랐 U<string>습니다 range(len(<string>)).
FryAmTheEggman

네, 좋은 기능입니다. 목록에서도 그렇게 작동하지만 반드시 튜플은 아닙니다. 편집 : 죄송합니다. 설명서에서 누락되었습니다. 추가하겠습니다. 죄송합니다.
isaacg

20

APL ( 37 35 34 27)

↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞

키보드에서 다음과 같이 입력합니다.

      ↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞
CODE-GOLF
C               F 
  O           L   
    D       O     
      E   G       
        -         
      E   G       
    D       O     
  O           L   
C               F 

7
나의 모든 투표는 APL에 속합니다.
Nit

13

파이썬 2-94 90 89 88

s=input()
L=len(s)
R=range(L)
for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)

입력:

"CODE-GOLF"

산출:

C               F
  O           L  
    D       O    
      E   G      
        -        
      E   G      
    D       O    
  O           L  
C               F

나는 단지 같은 것을 쓰고 있었다. 내 하나의 개선은 i in[j,L+~j]입니다.
xnor

@ xnor : 더 짧은 조건을 찾았습니다. ;)
Falko

영리한. 그래도 여전히 할 수 있습니다 L+~j.
xnor

@ xnor : 아, 맞아. 나는 항상 +~트릭을 잊어 버린다 ...
Falko

for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)숯을 구하기 위해 할 수 있습니까 ? (지금은 테스트 할 Python 2에 액세스 할 수 없습니다.)
xnor

11

파이썬 3 : 75 자

s=input()
i=n=len(s)
while i:i-=1;a=[" "]*n;a[i]=s[i];a[~i]=s[~i];print(*a)

line i의 경우 공백 목록으로 시작 i하고 앞뒤 항목 을 입력 문자열의 문자와 동일하게 설정합니다. 그런 다음 결과를 인쇄합니다.

파이썬 문자열은 변경할 수 없으므로 a대신 문자 목록이어야합니다. a루프 내에서 목록 을 초기화해야합니다. 그렇지 않으면 루프간에 수정 사항이 적용됩니다. 우리는 사용 print(*a)공간이 분리, 파이썬 3 요구하는 목록의 각 문자를 인쇄 할 수 있습니다.

출력 라인은 대칭이므로 iwhile 루프를 사용하지 않고 카운트 다운 할 수 있습니다 .

>>> CODE-GOLF
C               F
  O           L  
    D       O    
      E   G      
        -        
      E   G      
    D       O    
  O           L  
C               F

또한 짝수의 문자에 대해서도 작동합니다.

>>> CODEGOLF
C             F
  O         L  
    D     O    
      E G      
      E G      
    D     O    
  O         L  
C             F

이것을 Pyth로 변환하면 VlzJ*]dlz=@JN@zN=@Jt_N@_zNjdJ29 바이트가됩니다 ... APL을 이길 수있는 다른 것을 시도해야한다고 생각합니다. 또한 파이썬 3가 파이썬 2를
능가

@fry Python 3은 일반적으로 내 경험에서 2 골프입니다. 다른 곳에서 아무것도 바뀌지 않더라도 대부분의 과제는 하나의 입력을 제공하고 하나의 출력을 기대 len("raw_input()") + len("print ") > len("input()") + len("print()")합니다.
undergroundmonorail

@undergroundmonorail 글쎄, 그것의 문제 input() 는 파이썬 2에서도 유효하다는 것입니다 (그냥 약간 다르게 행동합니다). 챌린지 입력이 매우 엄격하지 않으면 파이썬 2가 일반적으로 승리합니다.
FryAmTheEggman

와우, 파이썬 2에서도 print" ".join(a)코드가 내 것보다 짧습니다 (82).
Falko

@FryAmTheEggman 내 답변보기-다른 파이썬 답변에 대한 적응이며 APL보다 훨씬 짧습니다. Pyth는 불행히도 인덱스에 할당하는 것을 좋아하지 않습니다.
isaacg

8

CJam, 27 25 바이트

l_,S*:Sf{W):W2$tW~@tS}zN*

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

예제 실행

$ cjam <(echo 'l_,S*:Sf{W):W2$tW~@tS}zN*') <<< CROSS; echo
C       S 
  R   S   
    O     
  R   S   
C       S 

답의 예와 같이 각 줄에는 공백이 있습니다.

작동 원리

                             " N := '\n'; R := []; S = ' '; W := -1 ";
l                            " Q := input()                         ";
 _,S*:S                      " S := len(Q) * S                      ";
       f{            }       " for each C in Q:                     ";
                             "   T := S                             ";
         W):W                "   W += 1                             ";
             2$t             "   T[W] := C                          ";
                W~@t         "   T[~W] := C                         ";
                             "   R += [T]                           ";
                    S        "   R += [S]                           ";
                      z      " R := zip(R)                          ";
                       N*    " R := N.join(R)                       ";
                             " print R                              ";

1
기본적으로 '대답'입니다. 코멘트는,하지만 난 그냥, 결코 말을했다 지금까지 , 열로 대신 행으로 상자를 구축하는 나에게 발생하지 않은 것입니다.
FryAmTheEggman

4

자바-168

간단한 중첩 루프입니다. 여기에는 특별한 것이 없습니다.

class C{public static void main(String[]a){int b=-1,c=a[0].length()-1,d;for(;b++<c;)for(d=-1;d++<c;)System.out.print((b==d|b==c-d?a[0].charAt(d):" ")+(c==d?"\n":""));}}

줄 바꿈으로 :

class C{
    public static void main(String[]a){
        int b=-1,c=a[0].length()-1,d;
        for(;b++<c;)
            for(d=-1;d++<c;)
                System.out.print(
                    (b==d|b==c-d?a[0].charAt(d):" ")+
                    (c==d?"\n":""));
    }
}

4

순수한 배쉬, 94 바이트

l=${#1}
for((;t<l*l;t++));{
((x=t%l))||echo
((x-t/l&&x+t/l+1-l))&&printf \ ||printf ${1:x:1}
}

1
t%l계산이 너무 많습니다 . 변수 ((x=t%l))를 처음 사용할 때 저장 한 다음 변수 를 사용하여 94 자로 줄이십시오.
manatwork

아 그래, 나는이 일을했다 x=t%l그리고 y=t/l그것은 사용은 X 단지에 내 마음이 교차하지 않았다 ... 이상이었다
디지털 외상

4

루비, 64

f=->w{x=w.size
x.times{|i|y=" "*x
y[i],y[~i]=w[i],w[~i]
puts y}}

설명

  • 입력은 람다에 대한 인수로 간주됩니다. 기대합니다 String.
  • 단어의 모든 문자를 통과하는 루프 n에서 (총) :
    • n공백 으로 구성된 문자열을 만듭니다 .
    • 바꾸기 i번째 및 n-i제 ( ~i와, 감사 XNOR) 공간 i번째 및 n-i입력 번째의 문자.
    • 라인을 인쇄

7
25,000 번째 답변을 축하드립니다. :) (실제로, 이것은 캐싱으로 인한 것이 100 % 확실하지는 않습니다. 그러나 사이트 통계에서 "25,000 답변"을 처음 보았을 때 가장 최근의 답변이었습니다.)
Martin Ender

2
당신은 -i-1비트 보완으로 할 수 있습니다 ~i.
xnor

매우 영리합니다. 감사합니다!
britishtea

2
이 접근 방식을 통해 실제로 대신 람다의 stdin을 사용하는 것이 도움이 될 것으로 보인다 gets.size.times{|x|u=?\s*~/$/;u[x]=$_[x];u[~x]=$_[~x];puts u}(가정 입력이 개행으로 종료되지 않으며, 예를 들면 echo -n CODE-GOLF). 그러면 .chars다른 캐릭터를 구하기 위해 추가로 사용할 수 있습니다 .x=0;gets.chars{|r|u=?\s*~/$/;u[x]=r;u[~x]=$_[-x+=1];puts u}
Ventero

4

자바 스크립트 (E6) 101 95129136

잘못된 문자 간격을 편집하십시오 . 결정된. 클래식 for 루프를 사용하여 더 간단하고 짧게
편집
기능으로 팝업을 통해 출력합니다.

F=a=>{
  for(l=a.length+1,i=s=o='';++i<l;s='\n')
    for(j=0;++j<l;)
      o+=s+((s=' ')+a)[j==i|i+j==l&&j]
  alert(o)
}

.map을 사용하는 이전 버전

F=a=>alert([...a].map((c,p)=>
  --q<p
  ?B(q)+a[q]+B(p-q-1)+c 
  :B(p)+c+(p-q?B(q-p-1)+a[q]:'')
,B=n=>' '.repeat(n),q=a.length).join('\n'))

FireFox / FireBug 콘솔에서 테스트

F('Java-Script')

산출

J                   t
  a               p  
    v           i    
      a       r      
        -   c        
          S          
        -   c        
      a       r      
    v           i    
  a               p  
J                   t

2
가로 간격이 충분하지 않습니다. 각 열 사이에 문자가있는 모든 공백 열이 있어야합니다.
isaacg

4

베 펀지 -93, 68 71

:~:84*-!#@#v_\:2*\4+p1+
::+\4+g:!| >$1+0:>p1-::
00+4\*2:\<>0p#:- ^#2g

여기서 테스트 할 수 있습니다 . 각 패스 스루마다 입력 대화 상자가 나타납니다 ~. 공백으로 끝나는 단어를 한 번에 한 문자 씩 입력하십시오 (입력은 'klunky'라고 말합니다).

콘솔에 인쇄되지 않습니다. 결국 이것은 자기 수정의 힌트가 없으면 Befunge가 아닙니다! 대신 자체 그리드를 수정하여 메시지를 표시합니다. 완료되면 그리드는 다음과 같이 보입니다.

 ~:84*-!#@#v_\:2*\4+p1+
::+\4+g:!| >$1+0:>p1-::
00+4\*2:\<>0p#:- ^#2g

c               f      
  o           l        
    d       o          
      e   g            
        -              
      e   g            
    d       o          
  o           l        
c               f

(우리가 데이터를 저장하기 위해 포인터가 더 이상 거기에 가지 않는다는 것을 알고 난 후에 (0,0)에서 셀의 고귀한 희생에 주목하십시오.)

또한 짝수 길이의 입력에서도 작동합니다. Befunge-93은 80x25 그리드로 제한되므로 Befunge-93 인터프리터에서 실행하면 입력 크기가 21 자로 제한됩니다. Befunge-98로 실행하면이 제한이 제거됩니다.

편집 -이제 3 자 길이의 비용으로 의도 된 출력의 행을 따라 더 많이 작동합니다.


문자는 빈 열로 구분됩니다. 글자는 상대적으로 L 자 모양입니다.
sampathsris

드래프트! 오히려 복잡한 일이 상당히 심각합니다. 나는 이것을 구할 수 있다고 생각하지만 결말 크기에 추가 될 것입니다 ... 오 잘.
카스 란

4

자바 스크립트 102 84 85

편집 : 간격을 수정해야했습니다. 더 이상 작지 않습니다.

function p(s){for(i in s){o='';for(n in s)o+=(n==i?s[n]:n==s.length-1-i?s[n]:' ')+' ';console.log(o)}}

p('Thanks-Dennis')

T                       s
  h                   i
    a               n
      n           n
        k       e
          s   D
            -
          s   D
        k       e
      n           n
    a               n
  h                   i
T                       s

가로 간격이 충분하지 않습니다.
Dennis

1
와우,보다 짧은 광산 , 심지어 ES6를 사용하지. +1
Scimonster

더 좋지만 간격이 여전히 잘못되었습니다 (X를보십시오). 또한 질문에서 달리 언급하지 않는 한 프로그램이나 함수를 작성해야합니다. 하드 코딩 된 변수가있는 스 니펫은 일반적으로 눈살을 찌푸립니다.
Dennis

1
그리고 function(s)당신은 재귀하지 않기 때문에 그것을 만들 수 없습니까?
Zacharý

3

CJam, 38 36 35 34 32 바이트

l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}

여기에서 테스트하십시오. STDIN에서 입력 단어를 읽습니다. 짝수의 문자에 대해서도 작동합니다. 이것은 공백으로 된 열을 인쇄하지만 그에 대한 규칙에는 아무것도 보이지 않습니다.

설명

l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}
l:I                              "Read input and store it in I.";
   ,                             "Get string length.";
    ,_                           "Turn into range and duplicate.";
      f{                       } "Map block onto first range, with second range on the stack.";
        f{                   }   "Map block onto second range, with first iterator in stack.
                                  Each invocation of this block will start with grid coordinates
                                  y and x on the stack (x on top).";
          _2$=                   "Duplicate x, duplicate y, check for equality.";
              @2$+               "Pull up y, duplucate x, add,";
                  I,(=           "Check if that's one less than the string length.";
                      |          "Bitwise or between conditions.";
                       \         "Swap condition and x.";
                        I=       "Take x'th character from the string.";
                          S?     "Push a space and select character depending on condition.";
                            S    "Push another space.";
                              N  "Push a line feed.";

스택의 내용은 프로그램 종료시 자동으로 인쇄됩니다.


친애하는 CJam, 당신은 APL에 맞았습니다. ^ _ ^
vaxquis

@ vaxquis 나는 처음에 두 번 이길 수 있다는 사실에 놀랐습니다. 이 문제는 스택 기반 언어보다 APL 및 co에 훨씬 적합합니다.
Martin Ender

2
물론, 적어도 그것을 쓰기에 쉽게 l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}보다 냅킨에 ↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞... 웃음이
vaxquis

글쎄, 다른 사람이 CJam을 사용하여 나를 이길 수 있었고, 프로그램을 더 짧게 만들 수 없으므로 CJam이 결국 나를 이겼습니다. (그러나 Pyth는 왕관을 가져옵니다.) (즉 말했다 @vaxquis, APL 당신이 60 개 정도 문자를 알고, 확실히하면, 여기에 사용되는 다른 언어의 대부분을보다 읽기가 훨씬 쉽다 확실히 Pyth 또는 CJam 또는 비교했을 때 심지어 J.)
marinus

3

C, 105

약간 다른 두 가지 방법이 있습니다.

c,i,j;main(int l,char**v){for(l=strlen(v[1]);j-l;)putchar((c=v[1][i++])?i-1-j&&l-i-j?32:c:(i=0,j++,10));}

i,j;main(int l,char**v){for(l=strlen(v[1]);j-l;i++)putchar((l-i)?i-j&&l-i-j-1?32:v[1][i]:(i=-1,j++,10));}

당신이 여분의 공간을 추가 할 경우, 대체 putchar(printf(" %c",추가 5 자합니다.


3

J- 36 30 바이트 :

편집 : 6 자 짧고 크레딧은 @algorithmshark 로 이동 하십시오 .

(1j1#"1' '&,({~](*>.*&|.)=)#\)

예 :

   (1j1#"1' '&,({~](*>.*&|.)=)#\) 'Code-Golf'
C               f
  o           l  
    d       o    
      e   G      
        -        
      e   G      
    d       o    
  o           l  
C               f

보너스 : 짝수 길이의 문자열에서도 작동합니다.

   (1j1#"1' '&,({~](*>.*&|.)=)#\) 'CodeGolf'
C             f
  o         l  
    d     o    
      e G      
      e G      
    d     o    
  o         l  
C             f

3

프롤로그-240 바이트

:-initialization m.
+[]. +[H|T]:-(H=' ';!),+T.
+[H|T]+I+X:-0=:=I,X=H;+T+(I-1)+X.
+L+I+C+S:-L=:=I;S=[D|E],+C+I+B,+C+(L-I-1)+B,+B+2*I+D,+L+(I+1)+C+E,+B,writef('%s\n',[B]).
-X:-get_char(C),(C='\n',X=[];X=[C|Y],-Y).
m:- -X,length(X,L),+L+0+_+X.

기도:

$ echo "Code-Golf" | swipl -qf c.pl
C               f
  o           l
    d       o
      e   G
        -
      e   G
    d       o
  o           l
C               f

읽을 수있는 :

:- initialization(main).

vars_to_spaces([]).
vars_to_spaces([' '|T]) :- vars_to_spaces(T).
vars_to_spaces([_|T]) :- vars_to_spaces(T).

get_index([Head|_], Index, Result) :-
    0 =:= Index,
    Result = Head.
get_index([_|Tail], Index, Result) :-
    get_index(Tail, Index-1, Result).

print_loop(Length, Index, Board, String) :-
    Length =:= Index;
    String = [FirstChar|RestString],
    get_index(Board, Index, Line),
    get_index(Board, Length-Index-1, Line),
    get_index(Line, 2*Index, FirstChar),
    print_loop(Length, Index+1, Board, RestString),
    vars_to_spaces(Line),
    writef('%s\n', [Line]).

get_line(Line) :-
    get_char(C),
    (   C = '\n', Line = [];
        Line = [C|More], get_line(More)).

main :-
    get_line(String),
    length(String, Length),
    print_loop(Length, 0, _, String).


3

R , 99 98 93 89 바이트

m=ifelse(diag(l<-length(w<-el(strsplit(scan(,''),'')))),w,' ')
write(pmax(m,m[,l:1]),1,l)

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

1 행은 입력 문자열을 읽고, 문자로 나누고, 길이를 저장하고, 주요 대각선에 단어가있는 행렬을 만듭니다. 단어의 문자는 항등 행렬에 겹쳐지고 (길이와 일치하도록 기본적으로 반복되며) 일치하는 문자 만 1은 유지되고 다른 것은 공백으로 대체됩니다.

2 행은 대각 행렬 또는 수평 미러 버전 중 더 큰 요소로 구성된 행렬을 인쇄합니다.

JayCe 덕분에 −2 + 1 = −1 바이트

주세페 덕분에 −4 바이트


1
단! 그리고 좋은 설명. 당신은 2 바이트를 절약
JayCe

1
그는 다른 답변과 질문을보고-매트릭스가 더 커야하는 것처럼 보입니다 (추가 공간)-출력은 정사각형 매트릭스가 아니어야합니다.
JayCe

@JayCe 2 바이트 감사합니다! 그리고 형식에 대한 의견에 감사드립니다. 규칙이 더 명확 할 수는 있지만 아마도 옳습니다. 다행스럽게도 인쇄하는 동안 세퍼레이터에 공간을두기 만하면됩니다.
Robert Hacken

pmax더 많은 할당을 사용 하고 인라인하는 89 바이트 .
주세페

@ 주세페 감사합니다! 슬프게도, 여전히 충분하지 이길 J.Doe솔루션
로버트 하켄

2

C # ( 214212 )

골프 버전 :

using System;class A{static void Main(){char[]a,w=Console.ReadLine().ToCharArray();int l=w.Length,i=0;for(;i<l;i++){a=new string(' ',2*l-1).ToCharArray();a[2*i]=w[i];a[2*l-2*i-2]=w[l-i-1];Console.WriteLine(a);}}}

언 골프 버전 :

using System;

class A
{
  static void Main()
  {
    char[] a, w = Console.ReadLine().ToCharArray();
    int l = w.Length, i = 0;
    for (; i < l; i++)
    {
      a = new string(' ', 2 * l - 1).ToCharArray();
      a[2 * i] = w[i];
      a[2 * l - 2 * i - 2] = w[l - i - 1];
      Console.WriteLine(a);
    }
  }
}

이것이 CodeGolf에서 처음 시도한 것이므로 힌트, 팁, 요령 또는 발언은 매우 환영합니다. 내 C # 바이트 길이가 최고의 솔루션의 두 배에 가깝지 않다는 것을 알고 있지만 시도해보고 싶었습니다.)

그리고 당신은 어떻게 바이트를 계산합니까? 방금 위의 내용을 Quick Watch 창에 게시하고 수행했습니다 .Length. 바이트 수를 계산하는 작은 프로그램을 작성할 수는 있지만 아직 알지 못하는 더 쉬운 방법이 있습니다.


에서 공백을 제거하여 2 바이트를 절약 할 수 있습니다 for(;i < l;i++).
Beta Decay

또한 바이트 계산에 이것을 사용 합니다 .
Beta Decay

@BetaDecay 아 좋아요, 나는 그것들을 간과해야합니다. 그리고 링크 주셔서 감사합니다!
InvisiblePanda

2

자바 스크립트 (ES6) - 185 177 175 170 바이트

f=n=>{return s='  ',r='repeat',n=[...n],l=n.length,j=l/2-.5,[...h=n.slice(0,j).map((c,i)=>s[r](i)+c+s[r](l-2-(i*2))+' '+n[l-i-1]),s[r](j)+n[j],...h.reverse()].join('\n')}

이것을 Firefox 콘솔에 넣고 다음과 같이 실행하십시오 f('PROGRAM').

P           M
  R       A
    O   R
      G
    O   R
  R       A
P           M

f("CODE-GOLF"):

C               F
  O           L
    D       O
      E   G
        -
      E   G
    D       O
  O           L
C               F


저도 봤어요
Scimonster

2

Mathematica, 149 바이트

FromCharacterCode@Flatten[Append[Riffle[#,32],10]&/@MapThread[Max,{#,Reverse@#,ConstantArray[32,Dimensions@#]},2]&@DiagonalMatrix@ToCharacterCode@#]&

함수에 매개 변수로 전달 된 입력. 함수는 출력 문자열을 반환합니다. 출력 끝에 줄 바꿈이 있습니다.

설명 : 문자열을 사용하여 대각선 행렬을 만든 다음 Reverse@#행을 뒤집기 위해 수직으로 뒤집힌 복사본을 만듭니다 . 그런 다음 32 (아스키 공간) 만 포함하는 동일한 차원의 세 번째 행렬이 있습니다. 우리 MapThread는이 3 가지 행렬의 요소 별 최대 값을 취합니다. 마지막으로, 우리는 Riffle각 행, 마지막 Append줄 바꿈 및 Flatten결과에 공백을 둡니다 .


2

C , 119

i,j;main(int l,char**v){l=strlen(v[1]);for(i=0;i<l;i++){for(j=0;j<l;j++)putchar((i-j)*(j-l+i+1)?32:v[1][j]);puts("");}}

이것은 C ++로 컴파일되지 않을 수도 있으므로 규칙을 위반하지 않기를 바랍니다.)


1. 출력이 현재 잘못되었습니다. 글자 사이에 공백이 있어야합니다. 2. i=0와는 j=0전역 변수가 0으로 초기화되기 때문에, 필요하지 않습니다. 3. main(l,v)char**v;대신에 사용할 수 있습니다 main(int l,char**v). 업데이트하는 경우 4. i같은 i+=puts(""), 당신은 외부 루프의 중괄호를 제거 얻을 수 있습니다.
Dennis

2

펄-90

이 중 더 많은 문자를 쥐어 짜는 것이 가능할 수 있습니다.

($j=$i++%8)==7?++$k&&print"\n":print$j+1==$k||7-$j==$k?"$_ ":"  "for split//,($_ x y///c)

89+ 1에 대한 -n.

로 실행 :

echo "program" | perl -nE'($j=$i++%8)==7?++$k&&print"\n":print$j+1==$k||7-$j==$k?"$_ ":"  "for split//,($_ x y///c)'

산출:

p           m
  r       a
    o   r
      g
    o   r
  r       a
p           m

2

T-SQL : 180

변수 @i에서 입력 받기

DECLARE @s VARCHAR(MAX)=REPLICATE('  ',LEN(@i)),@ INT=1a:PRINT STUFF(STUFF(@s,@*2-1,1,SUBSTRING(@i,@,1)),LEN(@i)*2-(@*2)+1,1,SUBSTRING(@i,LEN(@i)-@+1,1))SET @+=1IF @<=LEN(@i)GOTO A

이것은 시작부터 끝까지 한 줄의 문자를 일련의 공백으로 채 웁니다.

시험 결과

DECLARE @i VARCHAR(MAX)='Super Large'
DECLARE @s VARCHAR(MAX)=REPLICATE('  ',LEN(@i)),@ INT=1a:PRINT STUFF(STUFF(@s,@*2-1,1,SUBSTRING(@i,@,1)),LEN(@i)*2-(@*2)+1,1,SUBSTRING(@i,LEN(@i)-@+1,1))SET @+=1IF @<=LEN(@i)GOTO A
S                   e 
  u               g   
    p           r     
      e       a       
        r   L         

        r   L         
      e       a       
    p           r     
  u               g   
S                   e 

2

PowerShell을 118 102 97

($x=[char[]]"$args")|%{$i++;$y=[char[]]" "*$x.Count;$y[$i-1]=$x[$i-1];$y[-$i]=$x[-$i];$y-join' '}

출력 :

PS C:\PowerShell> .\cross.ps1 SWORD
S       D
  W   R
    O
  W   R
S       D


2

자바 스크립트 (Node.js) , 81 바이트

f=s=>[...s].map((_,i,a)=>a.map((c,j)=>j==i|j==s.length+~i?c:' ').join` `).join`
`

편집 : -1 감사합니다 King King. TIO가 CG에 미리 포맷 된 직접 붙여 넣기를 제공하는 것을 보지 못했습니다.

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


btw, TIO에서 코드를 실행하기위한 초과 코드는 프로그램 바닥 글에 들어갈 수 있습니다. 이를 통해 올바른 바이트 수를 결정하고 자동 PPCG 응답 형식을보다 매끄럽게 사용할 수 있습니다. 예 : 온라인으로 사용해보십시오!
조 왕

-i-1수 있습니다+~i
조 왕

1

C # 208

static void Main()
{
string s=Console.ReadLine(),t="";
int n=s.Length;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)t+=s[i];
else if(i==n-j-1)t+=s[n-i-1];
t+=" ";
}
t+="\n";
}
Console.WriteLine(t);
}

로 11 개의 소중한 캐릭터를 저장하십시오 t+=i==j?s[i]:i==n-j-1?s[n-i-1]:"";.
sampathsris

줄 바꿈을 제거 할 수 있습니까?
Zacharý


1

아무리 오래 걸리더라도 항상 대답이 있어야합니다 ...

자바 - 289 234 바이트

public static void main(String[]a){int l=a.length-1,i=0,j;for(;i<=l;i++){for(j=0;j<=l;j++){if(j==i)System.out.print(a[i]);else if(i==l-j)System.out.print(a[j]);else System.out.print(" ");System.out.print(" ");}System.out.println();}}}

언 골프 드 :

    class A {

    public static void main(String[] a) {
        int l = a.length - 1, i = 0, j;
        for (; i <= l; i++) {
            for (j=0; j <= l;j++) {
                if (j == i)
                    System.out.print(a[i]);
                else if (i == l-j)
                    System.out.print(a[j]);
                else
                    System.out.print(" ");
                System.out.print(" ");
                }            
            System.out.println();
        }
    }
}

크게 완료된 출력은 다음과 같습니다.

P           M 
  R       A   
    O   R     
      G       
    O   R     
  R       A   
P           M 

import java.util.Scanner가져 오기가 바이트 수를 계산하는지 기억하지 못하기 때문에 코드 내부를 추가했습니다 ... 젠장, 정말 빨랐습니다.


2
수입은 중요합니다. 이 부분적 때문에 파이썬의 수입 및 별명 구문입니다 from math import floor as f비트 cheaty입니다

System.out.print두 개의 삼항 연산자를 사용하여 모든 통화를 하나로 결합하여 많은 문자를 저장할 수 있어야합니다 .
DLosc

@DLosc 몇 가지 예를 들어 주시겠습니까?
Rodolfo Dias 2014 년

1
예, 실제로 Geobits의 답변 은 완벽한 예 System.out.print입니다. 마지막 통화 내용을 참조하십시오 .
DLosc

1
@RodolfoDias 그렇게 느끼지 마십시오. Java에서 처음 몇 개의 골프는 끔찍 했고, 만약 내가 열심히
보이면

1

C # (192/170)

using System;class P{static void Main(){var s=Console.ReadLine();int x,y,l=s.Length;for(x=0;x<l;x++){for(y=0;y<l;y++)Console.Write(x==y||l-x==y+1?s.Substring(x,1):" ");Console.Write("\n");};}}

또는 "Main () 만"으로 :

static void Main(){var s=Console.ReadLine();int x,y,l=s.Length;for(x=0;x<l;x++){for(y=0;y<l;y++)Console.Write(x==y||l-x==y+1?s.Substring(x,1):" ");Console.Write("\n");};}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.