それは単なる入力バグでした


17

私の続きはバグの挑戦でした

入力:

空白や改行を含まない印刷可能なASCII文字で構成される文字列。

出力:

まず、入力を元に戻し、入力をそれ自身の前に追加することにより、入力を回文に変換します。中間文字を除きます(つまり、入力の1234567890場合、になります0987654321234567890)。

そして、このテキストを出力します:

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

(中央から両方向に外側に向かって、各文字は前の行よりも1つ多くのスペースで区切られます。)

チャレンジルール:

  • 入力の長さの2倍から3行を引いて印刷する必要があります。したがって、入力の1234567890場合、上に表示される出力は17行(長さ10 * 2-3)です。
  • 入力には印刷可能なASCIIのみが含まれます(スペース、タブ、改行を除く)。
  • 末尾のスペースはオプションです。
  • 単一の末尾の改行はオプションです。
  • (追加)先行スペースまたは先行改行は許可されません。
  • 入力は常に少なくとも4文字の長さであると想定できます。
  • のバグとは異なり、入力と出力の両方のフォーマットは柔軟性に富んでいます。したがって、結果を文字列配列、文字列リストなどとして出力できます。

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、コードゴルフ以外の言語で回答を投稿しないようにしないでください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 回答には標準的な規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを備えた関数/メソッドを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンクを追加してください。
  • また、必要に応じて説明を追加してください。

テストケース:

Input: 1234567890
Output:
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                                        0987654321234567890
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0

Input: ABCD
Output:
D  C  B  A  B  C  D 
   D C B A B C D
      DCBABCD
   D C B A B C D
D  C  B  A  B  C  D

Input: =>)}]
Output:
]   }   )   >   =   >   )   }   ]
    ]  }  )  >  =  >  )  }  ]
        ] } ) > = > ) } ]
            ]})>=>)}]
        ] } ) > = > ) } ]
    ]  }  )  >  =  >  )  }  ]
]   }   )   >   =   >   )   }   ]

Input: XXxxXX
Output:
X    X    x    x    X    X    X    x    x    X    X
     X   X   x   x   X   X   X   x   x   X   X
          X  X  x  x  X  X  X  x  x  X  X
               X X x x X X X x x X X
                    XXxxXXXxxXX
               X X x x X X X x x X X
          X  X  x  x  X  X  X  x  x  X  X
     X   X   x   x   X   X   X   x   x   X   X
X    X    x    x    X    X    X    x    x    X   X

各行の先頭のスペースの量は同じですか?
アダム

@Adám申し訳ありませんが、ありません。末尾のスペースはいくつでも構いませんが、先頭のスペースは違います。このルールをチャレンジで指定します。
ケビンCruijssen

2
「入力から3行を引いた長さを印刷する必要があります。」次に「(長さ10 * 2-3)」。最初の文は「no double」と表示され、2番目の文は「double」と表示されます。それでどちらですか?
オリビエグレゴワール

@OlivierGrégoireおっと、最初の行は2倍の長さを含んでいたはずマイナス3が固定
ケビンCruijssen

回答:


5

、14バイト

E⁻Lθ¹⪫θ× ι‖O←↑

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

AST:

Program
├Print
│└E: Map
│ ├⁻: Difference
│ │├L: Length
│ ││└θ: Identifier θ
│ │└1: Number 1
│ └⪫: Join
│  ├θ: Identifier θ
│  └×: Product
│   ├' ': String ' '
│   └ι: Identifier ι
└‖O: Reflect overlap
 └Multidirectional
  ├←: Left
  └↑: Up

16コードポイントの可能性がありますが、UTF-8 Python 3では41バイトであると報告されています。どの文字セットを使用して16バイトにしますか?
ヤヌストロエルセン

@JanusTroelsenこれはカスタム文字セットです。
エリックアウトゴルファー

ええ、⪫は文字列で動作しますか?次回のために覚えておく必要があります
ニール

@Neilええ、それは理にかなっていますよね?
エリックアウトゴルファー

技術的には、関連するコミットがチャレンジよりも後になるため、編集は競合しません。
ニール

7

Japt22 21バイト

¬Å£¬qYîÃy w ê y w ê ·

オンラインでテストしてください!

説明

最初の8バイトは、パターンの右下の象限を生成します。

 ¬ Å  £    ¬ qYîÃ
Uq s1 mXY{Uq qYî} 

Uq                 : Split the input into characters.
   s1              : Slice off the first.
      mXY{      }  : Map each item X and index Y to
          Uq       :   the input split into chars,
             q     :   joined with
              Yî   :     Y spaces.

この時点で、例えばの配列があり["ABCD", "A B C D", "A B C D"]ます。残念ながら、これを2乗するには13バイトかかります。

y w ê y w ê ·
y w ê y w ê qR
y                : Pad each line to the same length with spaces and transpose.
  w              : Reverse the array, and
    ê            : palindromize. Now we have the bottom half of the output transposed.
      y          : Transpose back.
        w ê      : Reverse and palindromize again, giving the full output.
            qR   : Join with newlines.
                 : Implicit: output result of last expression

私は転置を使用することを考えていた-うまくやった:)
シャギー

答えを知るのが怖い質問をすることはできますか?あなたとここの残りの人は、実際に縮小版でこれをコーディングしていますか?
gdbj

あえて おそらくない。
電卓

1
@gdbj私は通常、...それは悪い兆候ですか?:P
ETHproductions

@ETHproductionsは、これが本物のゴルフに似ていることを仲間に伝えただけでした。学習するのがいらいらし、不思議なことに中毒性があり、そのスキルを示すことは敬意を表します。
gdbj


5

JavaScriptの(ES6) 159の 136 129 127バイト

f=(i,x=1-(l=i.length-1),y=x<0?-x:x,[,...b]=i)=>l>x?''.padEnd(l*(l+~y))+[...b.reverse(),...i].join(''.padEnd(y))+`
`+f(i,x+1):''

オンラインでお試しください!以下の説明

// This is a recursive function
// First, inputs and various variable initializations
// by using defaults
let func = (
  // Text input, will not be modified through recursion
  input,

  // Current line, for the first function call we start from -lines to +lines
  // It's roughly equivalent to lines*2 but this helps us computing the spacing
  // Also computing the total amount of lines
  currentLine = 1 - (totalLines = input.length - 1),

  // Getting the absolute value of the current line (like Math.floor)
  absCurrentLine = currentLine < 0 ? -currentLine : currentLine,

  // Getting the input without it's first letter, useful for the palidrome of the input
  [,...slicedInput] = input

// Base case, stopping the recursion if the current line
// is still below the total amount of lines
) => totalLines > currentLine

  // Leading spacing
  ? ''.padEnd(totalLines * (totalLines + ~absCurrentLine)) + 

  // Putting together the palindrome version and adding spaces between the chars
    [...slicedInput.reverse(), ...input].join(''.padEnd(absCurrentLine)) + `

  // Line return + recursion call
` + f(input, currentLine + 1)
  : ''

codegolfの最初のエントリーで、明らかな間違いをおaびします。

23バイトを節約してくれたJustin Marinerに感謝します!11バイトの保存とバグ報告をしてくれたCraig Ayreに感謝します。


素敵な最初の答え、私からの+ 1、PPCGへようこそ。私はJsにあまり精通していませんがx、-1ではなく-2 から始めてに変更x<=l++x<=lて、を削除しx++てバイトを保存できますか?
ケビンCruijssen

試しましたがlines、間隔にも絡まっていたため、どうにかしませんでした。しかし、コードを整理し、提案を追加するより良い方法があることはかなり確信しています。
サミング

1
PPCGへようこそ、素敵な最初の投稿と説明!ここで133バイトまでゴルフしまし。変更内容の説明が含まれています。
ジャスティンマリナー

残念ながら、出力は期待される出力と完全には一致していないようです。こちらをご覧ください
クレイグエアー

1
これは素晴らしいですが、私はあなたの新しい機能を追加したと説明更新
Saming

4

SOGL V0.1222の 18 バイト

ā,⁄H{,čFH@*∑Κ}▓±╬-

ここで試してみてください!

説明:

ā                   push an empty array - canvas
 ,⁄H{        }      input length-1 times do
     ,                push the input
      č               chop it into chars
       FH@*           get the current iteration-1 amount of spaces
           ∑          join the chopped input with the spaces
            Κ         prepend it to the array
              ▓     space to a square
               ±    reverse each string in that list
                ╬-  quad-palindromize with 1 X and 1 Y overlap and without swapping characters

╬-、四方palindromizeコマンドは?Japtがそのようなことを望んでいたので、私はちょうどここにいました...:P
ETHproductions

@ETHproductions FWIWは、ある多くのもの
dzaima

私は知っているので、なぜ私は指定しました╬-。しかし、おかげで、何らかの理由でそのページを見つけることができませんでした
-ETHproductions

@ETHproductionsああ。インタプリタのSOGLOnlineコピーにのみ存在します:/ある時点で、2つを結合する必要があります:|
-dzaima

うーん... 必要な場合は自動Fで実装する必要があります。
エリックアウトゴルファー

4

Python 3 149の141 95バイト

def f(s):l=len(s)-1;[print((' '*abs(i)).join(s[:0:-1]+s).center(2*l*l+1))for i in range(1-l,l)]

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

いくつかのバイトを保存してくれた@KevinCruijssenと@ETHproductionsに感謝

46バイトを節約してくれた@notjaganに感謝します!


1
関連するすべての値(つまり-> ; -> ;など)に変更してl=len(s);から変更するl=len(s)-1;と、8バイト短くなります。ここで試してみてください。ll-1l-l+2-l+1
ケビンCruijssen

1
-l+2-> 2-l:)
ETHproductions

ありがとう、@ KevinCruijssen、残念ながら今は編集できません。編集してもらえますか?
ミスターXcoder

@KevinCruijssenありがとうございます!
ミスターXcoder

3
ループの代わりに使用して95バイトまで!centerfor
-notjagan

4

PHP、 145 131バイト

その追加バイトをゴルフにかけるには、いくつかの考えが必要でした。しかし、それは価値がありました。

while($y<=2*$e=strlen($a=$argn)-1)echo($p=str_pad)("
",$e*($e-$d=abs($y++-$e))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$d));

主要な改行を印刷します。-nRまたはでパイプとして実行、オンラインで試してください

壊す

while($y<=2*$e=strlen($a=$argn)-1)  # $e=length-1, loop through rows
                                        # 1. print linebreak and left padding
    echo($p=str_pad)("\n",$e*($e-$d=abs($y++-$e))+1),
        chunk_split(
            $a.substr(strrev($a),1)     # 2. palindromize input
            ,1,$p("",$d));              # 3. insert $e..0..$e spaces between characters

代替ソリューション、同じ長さ:

for($d=-$e=strlen($a=$argn)-1;$d<$e;)echo($p=str_pad)("
",$e*($e-$b=abs($d++))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$b));


3

APL(Dyalog)、37バイト

⎕IO←0多くのシステムでデフォルトである必要があります。

{⍉m(2-d)↓⍉(m←⊖⍪1↓⊢)↑∊¨(1↓⍳d←≢⍵)↑¨¨⊂⍵}

{... } 引数が表され匿名関数

(... )↑¨¨⊂⍵ それぞれ(のために¨、次の番号の)(とり)各(から多くの文字という¨)全体の()の引数、必要に応じてスペースをパディング:

  ≢w 引数の文字数

  d←dに  保存する

   多くのɩndices(0… d − 1)

  1↓ ドロップ1(ゼロ)

∊¨ϵ nlist(平坦化)それぞれ

 ランクを上げる(リストのリストを行列に変換する)

(m←) 次の暗黙関数を適用します mを

   逆さまの引数

   の上に

  1 1 [行]

   から落ちた

   引数

 転置

()↓  ドロップ:

  2-d = −(d − 2)、すなわちd、下から − 2行

m 適用する mを

 転置

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


3

Java(OpenJDK 8)201 196バイト

s->{for(int l=s.length()-1,i=-l,x=0;++i<l;x+=i<0?l:-l)System.out.printf("%1$"+(x<1?"":x)+"s"+s.join("%1$"+(i<0?-i:i>0?i:"")+"s",(new StringBuffer(s.substring(1)).reverse()+s).split(""))+"%n","");}

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

前のチャレンジ使用したものと同じ考え方ですが、ジェネレーターストリングが少し長くなり、ケースの処理が難しくなりました。

%1$Ns0%1$Ns9%1$Ns8%1$Ns7%1$Ns6%1$Ns5%1$Ns4%1$Ns3%1$Ns2%1$Ns1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n

3

Pythonの3134の 124バイト

f=lambda s:'\n'.join([' '*(len(s)-1)*abs(len(s)-abs(i)-2)+(' '*abs(i)).join(s[::-1]+s[1:]) for i in range(2-len(s),len(s)-1)])

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

しばらく潜んでから最初にPPCGに投稿します。提案/アドバイスを探しています!


@LyricLyと@ŁukaszRogalskiの改善に感謝します!


1
関数内で出力を印刷する必要はありません。出力は戻り値で指定できます。また、f=バイトカウントでカウントする必要はありません。単に匿名関数を提供するだけで十分です。
LyricLy

1
また、-len(s)+22-len(s)、1バイト少なくなっています。
ルカシュRogalski

@ŁukaszRogalskiと@LyricLyに感謝します。あなたは私を10バイト節約しました!
チェイスヴォーゲリ

3

Haskell、177 163バイト

import Data.List
k n=[1..n]>>" "
f s=let n=length s in map(\x->(k(((n-1)*(n-(abs x)))))++(intercalate (k(abs x))$map(\z->[z])$((++)=<<reverse.tail) s))[n,n-1.. -n]

この関数fはチャレンジ関数であり、文字列のリスト([String])を返します。unlinesこれを使用すると、テストケースと同じ視覚的出力を提供する必要があります(main = putStr $ unlines $ f "test string"ますコンパイルするため)。

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

@nimiのおかげで-14バイト


1
kas k n=[1..n]>>" "およびpasとして定義できますp=(++)=<<reverse.tail(この定義をインライン化することもできます)。
-nimi

2

Mathematica、141バイト

Column[Join[Reverse@(s=Row/@Table[Riffle[Reverse@Rest@b~Join~b,""<>Table[" ",i]],{i,0,Length[b=Characters@#]-1}]),Rest@s],Alignment->Center]&
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.