キャラクタークロス


31

私はPCGでの最初のパズルとしてもっと複雑なものを投稿することを期待していましたが、特定の、ええと... スタックオーバーフローに関する宿題の質問が私にこの投稿を促しました。彼らはしたい:

奇数の文字を含む任意の単語に対して次のパターンを印刷します。

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 14年

2
@flawr偶数ではなく、奇数を意味すると思います。
NinjaBearMonkey

31
私は愚かだ、私はそれがちょっとあいまいなコンピューター科学者の略語だと思った=)
flawr 14年

2
@jpjacobs:質問で特に明記されていない限り、バイト。
デニス14年

2
プログラム全体または単なる機能ですか?(最初に答えて、後でこの質問をするのは本当に賢いです...)
ロドルフォ・ディアス14年

回答:


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 14年

@xnorいいえ、しかしそれは助けにはなりません。仮定~Pythにビット単位ではなかったです。その後、我々は変更される可能性t-lzd+lz~dまだ5文字- 。
isaacg 14年

Vzはきちんとしたトリックです:それが与えることU<string>を知りませんでしたrange(len(<string>))
FryAmTheEggman

ええ、それは素晴らしい機能です。リストでも同様に機能しますが、必ずしもタプルではありません。編集:おっと、それはドキュメントから欠落しています。追加します。ごめんなさい。
isaacg 14年

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

Python 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

私はただ同じことを書いていました。私の1つの改善点ですi in[j,L+~j]
xnor 14年

@xnor:さらに短い状態が見つかりました。;)
ファルコ14年

賢い。それでもできL+~jます。
xnor 14年

@xnor:ああ、あなたは正しい。私はいつも忘れ+~トリック...
ファルコ

for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)文字を保存することができますか?(テストするためにPython 2にアクセスできません。)
xnor 14年

11

Python 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、入力文字列の文字と等しくなるように前後のエントリを設定します。次に、結果を印刷します。

Python文字列は不変なので、a代わりに文字のリストでなければなりません。リストaはループ内で初期化する必要があります。そうしないと、変更がループ間で引き継がれます。print(*a)リスト内の各文字をスペースで区切って印刷するために使用します。これにはPython 3が必要です。

出力行は対称であるためi、whileループを使用してカウントアップするのではなくカウントダウンすることができます。

>>> 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を打ち負かすには、何か他のものを試す必要があると思います。また、Python 3がPython 2(時には)を
上回る

私の経験では、通常、@ fry Python 3はゴルフ2よりも優れています。他の場所で何も変わらない場合でも、ほとんどの課題は1つの入力を与え、1つの出力を期待しlen("raw_input()") + len("print ") > len("input()") + len("print()")ます。
地下

@undergroundmonorailまあ、それに関する問題input() はpython 2でも有効です(動作が少し異なります)。そのため、チャレンジへの入力が非常に厳密でない限り、通常python 2が勝ちます。
FryAmTheEggman 14年

うわー、Python 2でさえ、print" ".join(a)あなたのコードは私のものより短い(82)。
ファルコ14年

@FryAmTheEggman私の答えを参照してください-それは他のPythonの答えの適応であり、APLよりもはるかに短いです。残念ながら、Pythはインデックスへの割り当てを本当に嫌います。
isaacg 14年

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 14年

4

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

Pure Bash、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文字に減らします。
マナトワーク14年

はいああ、私はこれを行っていた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スペースで構成される文字列を作成します。
    • ithおよびn-ith(~i、thanks xnor)スペースを入力のithおよびn-ith文字に置き換えます。
    • 行を印刷する

7
25,000番目の回答の投稿おめでとうございます!:)(実際、100%確信はありませんが、これはキャッシングによるものです。しかし、サイトの統計で最初に "25,000の回答"を見つけたのは最新の回答でした。)
Martin Ender 14年

2
あなた-i-1はビット補完として行うことができます~i
xnor 14年

とても賢いです、ありがとう!
英国茶14年

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 14年

4

JavaScript(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 14年

4

Befunge-93、68 71

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

ここでテストできます。パススルーごとに入力ダイアログボックスが表示されます~。単語を一度に1文字ずつ入力します(入力は結局「不格好」だと言います)、スペースで終わります。

コンソールには出力されません。結局のところ、これは自己修正のヒントがなければ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 14年

ドラット!それはかなり複雑なことです。私はこれを救うことができると思いますが、それは終了サイズに追加されます...まあまあ。
カズラン14年

4

Javascript 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

これには十分な水平間隔がありません。
デニス14年

1
うわー、よりも短く、ES6を使用していません。+1
Scimonster 14年

良いですが、間隔はまだ間違っています(Xを見てください)。また、質問に特に明記されていない限り、プログラムまたは関数を作成する必要があります。ハードコードされた変数を持つスニペットは、一般的に眉をひそめています。
デニス14年

1
そしてfunction(s)、あなたは再帰しないのでそれを作ることはできませんか?
ザカリー

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にbeatられたばかりです。^ _ ^
vaxquis 14年

@vaxquisそもそも2回も勝てたことに驚きました。この問題は、スタックベースの言語よりもAPLおよびcoにはるかに適しているようです。
マーティンエンダー14年

2
まあ、少なくともそれが書き込みに簡単ですl:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}よりナプキンに↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞... 含み笑い
vaxquis

さて、他の誰かがCJamを使用してなんとか私を打ち負かし、プログラムをこれ以上短くすることはできませんでした。(しかしPythは王冠を取得します。)(それは言った、@vaxquis、APLは、あなたが60かそこらの文字を知っているし、確かに一度、ここで使用される他の言語のほとんどよりも読みはるかに簡単です確かに PythまたはCJamかと比較すると、 J.)
マリヌス14年

3

C、105

わずかに異なる2つの方法。

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

R99 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
甘い!
わかりやすい

1
彼の他の答えと質問を見る-マトリックスはより大きくなければならないようです(余分なスペース)-出力は正方マトリックスであってはなりません
。– JayCe

@JayCe 2バイトありがとう!そして、フォーマットに関するコメントのおかげで、おそらく正しいでしょう(ただし、これについてのルールはより明確になります)幸いなことに、印刷中にセパレータにスペースを入れるだけで十分でした。
ロバートハッケン

pmax割り当てを使用してインライン化する89バイト
ジュゼッペ

@ジュゼッペありがとう!悲しいことに、J.Doe解決策
ロバートハッケン

2

C#(214 212)

(間違いなく)ゴルフバージョン:

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#バイトの長さは最高のソリューションの2倍にも近づかないことを知っていますが;)

そして、どうやってバイトを数えますか?上記をクイックウォッチウィンドウに投稿したところ.Lengthです。バイトを数えるための小さなプログラムを書くこともできますが、私にはまだもっと簡単な方法があります。


のスペースを削除すると、2バイト節約できますfor(;i < l;i++)
ベータ崩壊14年

また、これをバイトカウントに使用します。
ベータ崩壊14年

@BetaDecayあぁ、見落としてしまったに違いない。そしてリンクに感謝します!
InvisiblePanda 14年

2

JavaScriptの(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 14年

2

Mathematica、149バイト

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

関数にパラメーターとして渡される入力。関数は出力文字列を返します。出力の最後に末尾の改行があります。

説明:文字列を使用して対角行列を作成し、それを使用して垂直に反転したコピーを作成します Reverse@#、行のし。次に、32(ASCIIスペース)のみを含む同じ次元の3番目のマトリックスがあります。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グローバル変数がゼロに初期化されているので、必要ありません。3.のmain(l,v)char**v;代わりに使用できますmain(int l,char**v)。4. iとして更新するとi+=puts("")、外側のループの中括弧を取り除くことができます。
デニス14年

2

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

これにより、先頭と末尾から1文字ずつの文字列がスペースの文字列に詰め込まれます。

テスト結果

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

JavaScript(Node.js)、81バイト

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

編集:-1ありがとう、ジョー・キング。TIOがCG用に事前にフォーマットされた直接ペーストを提供するのを見ませんでした。

オンラインでお試しください!


ところで、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

これらの改行を削除できますか?
ザカリー


1

どんなに長くても、常に答えがあります...

Java- 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
輸入はカウントされます。:これは、理由の一つPythonの輸入およびエイリアスの構文であるfrom math import floor as fビットcheatyある

System.out.printいくつかの三項演算子を使用して、すべての呼び出しを1つに結合することで、多くの文字を保存できるはずです。
DLosc 14年

@DLoscいくつか例を挙げていただけますか?
ロドルフォディアス14年

1
はい、実際にGeobitsの答えは完璧な例System.out.printです。最後に電話の内容を見てください。
DLosc 14年

1
@RodolfoDiasそのように感じないでください。Javaでの最初のいくつかのゴルフはひどいものでした。
Geobits 14年

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()only」として:

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.