テニスをしましょう


45

突然テニスをしたいのですが、残念ながらコートはありません!

驚き!ここがあなたの出番です。

私のためにテニスコートを印刷する必要がありますが、秘密の理由により、できる限り少ないバイト数で印刷する必要があります。

テニスコート

---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

これはなので、バイト単位の最短コードが勝ちです!


1
末尾の改行は許可されますか?
エリックアウトゴルファー16

1
行2と8の大きなギャップはタブを使用して実行できますか?
FlipTack 16

3
@ Flp.Tkc、私はそうは思わない。すでに投稿された6つの回答の誰もそれを知っていなかったので、それは不公平だと思います。
ダニエル

2
これは、このような短い出力文字列にとっては驚くほどトリッキーな挑戦です!私はそれが好きです。:)
リン

7
誰もがとにかく勝つ誰が知っているので、あなただけの...「デニス裁判所」この挑戦を呼び出すことができます:)
RudolfJelin

回答:



13

Python 2、65バイト

s='-','|'+' '*7,'-','|   ','x'
for i in s+s[3::-1]:print(i*9)[:9]

Flp.Tkcはバイトを保存しました。


それはいくつかのクレイジーなスライスです。いいね!
グルパッドママダプール16

'|'+' '*72番目の文字列に使用してs、バイトを節約できます!
FlipTack 16

12

05AB1E29 27 26バイト

'-9ש'|ð4׫Dûs®s¨¨ûû'x5×»û

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

'-9ש                      Push "---------" and store it as temporary value
     '|ð4׫Dûs             Push palindromized("|    ") = "|       |"
                           and push "|    "
              ®            Push "---------" again
               s¨¨û        Strip the last 2 characters from "|    " and push palindromized("|  ") = "|   |"
                   û       Palindromize last item -> "|   |   |"
                    'x5×   Push "xxxxx"
                        »  Join everything with newlines
                         û Palindromize the result and implicitly display it

9'-×D'|4ð׫©ûs®¨'|«û5'x×»û少しリファクタリングしようとした、26を破ることはできません
マジックタコ壺





6

ゼリー、25 バイト

“¡⁵÷ḞȯḤɼ’b4ị“- x|”s5ŒBŒḄY

TryItOnline!

私は、1,3,1クォーターコートの繰り返しを使用することを望んでいましたが、それを小さくすることはできません(生のバージョンは28:です“ßṂuB’b4s3x“¢¤¢‘ị“- x|”ŒBŒḄY)。

どうやって?

“¡⁵÷ḞȯḤɼ’b4ị“- x|”s5ŒBŒḄY - Main link: no arguments
“¡⁵÷ḞȯḤɼ’                 - base 250 number: 375116358919167
         b4               - convert to base 4:
                                [1,1,1,1,1,0,2,2,2,2,1,1,1,1,1,0,2,2,2,0,3,3,3,3,3]
           ị“- x|”        - index into character list "- x|" (1-based):
                                "-----|    -----|   |xxxxx"
                  s5      - split into chunks of length 5:
                               ["-----","|    ","-----","|   |","xxxxx"]
                    ŒB    - bounce (vectorises):
                               ["---------","|        |","---------","|   |   |","xxxxxxxxx"]
                      ŒḄ  - bounce (non-vectorising version):
                               ["---------","|        |","---------","|   |   |","xxxxxxxxx","|   |   |","---------","|        |","---------"]
                        Y - join with line feeds:
                          - implicit print

5

J、70 54 51 50バイト

Zgarbのおかげで1バイト節約できました!

9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050

圧縮されたRLEを使用する標準的な圧縮手法。

   9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050
---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

並べ替えとバイトの保存:9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050
Zgarb

@Zgarbああ、いいね!
コナーオブライエン

4

ルビー、60バイト

-4.upto(4){|i|puts''.rjust(9,%w{x |%3s - |%7s -}[i.abs]%'')}

非ゴルフ

-4.upto(4){|i|                    #iterate -4 to 4.
   puts''.rjust(9,                #Print the null string right justified to length 9 padded by repititions of
   %w{x |%3s - |%7s -}[i.abs]%'') #the string from the %w{} array modified like sprintf by the % operator
}                                 #so that %Ns is replaced by N spaces.

4

bash / Unixツール、58 57バイト

dc<<<4o16i3FFFFp20002prp20202p15555pszpszfp|tr 0-3 ' x|-'

目的の出力には、改行以外の4文字のみが表示され、各行を4進数でコーディングできます。これらの番号は、簡潔にするためにスクリプトに16進数で書き込まれます。

Unixの電卓dcは、ベース16からベース4への変換とスタック操作の両方に使用され、適切な場所で行を簡単に繰り返すことができます。

編集:文字のコーディングに使用された2桁の2桁を交換することにより1バイト削り、trコマンドを以前のバージョンより1バイト短くすることができました。


4

JavaScript、85バイト

console.log('---|  ---| |xxx| |---|  ---'.replace(/(.)((.).)/g,'$1$3$3$2$3$3$3$1\n'))

4

JavaScript(ES6)、86 84 83 81バイト

ニールのおかげで2バイト節約

a=`---------
`;a+=`|       |
`+a;b=`|   |   |
`;console.log(a+b+`xxxxxxxxx
`+b+a)

代替方法#1、93バイト

console.log('01232101242421512424210123210'.replace(/./g,n=>`-
|  x`[n].repeat('911739'[n])))

別の方法#2、86バイト

ニールの提案:

console.log(`-${s=`
       |
-
   |
`}x${s}-`.replace(/.*/g,s=>s.repeat(9).slice(-9)))

別の方法#3、91バイト

再帰的アプローチ:

console.log((f=(n,c=`xxxx
|   |   |
---------
|       |
`[n]||'-')=>~n--?c+f(n)+c:'x')(43))

これを関数にして、数バイトを節約できます。
コナーオブライエン

@ ConorO'Brienここで出力を返すことが許可されているかどうかわかりません。テニスコートを印刷する必要があります
Arnauld

単純なランレングスエンコーディングは、代替方法よりも1バイト短いですconsole.log('-9\n| 7|\n-9\n| 3| 3|\nx9\n| 3| 3|\n-9\n| 7|\n-9'.replace(/.\d/g,s=>s[0].repeat(s[1])))\n明らかに改行に置き換えてください)。
ニール

別の92バイトの定式化:console.log('-\n |\n-\n |\nx\n |\n-\n |\n-'.replace(/.*/g,s=>s.repeat(9).slice(-9)))
ニール

申し訳ありません|が、コメントに表示される単一のスペースの代わりに、必要に応じてそれぞれの前に7つまたは3つのスペースがあるはずです。
ニール

4

SOGL 0.524 23 20 バイト(非競合)

 -9*"D√⅜‘⁴"Hοr‘¹q x9*o±

説明:

"'|⁶.f,‘9n_h¹q x9*o±
"'|⁶.f,‘              pushes "------------------|       ||   |   |"
        9n            splits into chunks of 9
                       stack: [["---------","---------","|       |","|   |   |"]]
          _           puts all the contents of the array into the stack
                       stack: ["---------","|       |","---------","|   |   |"]
           h          swaps the 2nd from top with 3rd from top
            ¹         turns back into array
                       stack: [["---------","|       |","---------","|   |   |"]]
             q        outputs the array without popping it from stack
               x      push "x"
                       stack: [["---------","|       |","---------","|   |   |"], "x"]
                9*    repeat it 9 times
                       stack: [["---------","|       |","---------","|   |   |"], "xxxxxxxxx"]
                  o   output that
                   ±  reverse the array
implicitly output the reversed array

では、圧縮された文字列はどのように機能しますか?

base250からバイナリに変換された文字列は 1000000100111110010100001110100000001100010001

そしておよそそれがすること:

100 boxstring (a custom dictionary string with chars " -/\|_\n")
000010 choose only the "-"s
01111 with length of 15+(different chars used)+2 = 18 chars
there is only 1 char type, so results in "------------------"
100 another boxsting
101000 choosing " " and "|"
01110 with length of 14+(different chars used)+2 = 18 chars
100000001100010001 the data; 0 = " " and 1 = "|"
has "------------------" and "|       ||   |   |" and just joins them together

言語が課題を後回しにしているため、競合しない。そして、この挑戦​​はわずか1日です。昨日何かを立てるべきだと思いました。私はこれを自分の言語のテストとして行ったのですが、投稿することはできませんでした。これもゴルフに適していると確信しています。



3

Javascript(ES6)、86バイト:

a = `---------
| |
--------- `; b =` | | |
`; console.log(a +`
`+ b +` xxxxxxxxx
`+ b + a)

ここでテスト:

a=`---------
|       |
---------`;b=`|   |   |
`;console.log(a+`
`+b+`xxxxxxxxx
`+b+a)


あなたは開始時に改行を追加して4つのバイトを保存することができbますが、後に改行を削除することができ、この手段として、xxxxxxxxxあなたが間を追加することを1 ab。最初に設定してaから---------2番目の行とそれ自体を連結することにより、さらに3バイトを節約できます。
ニール


3

PHP、66 62バイト

これが元の答えです(66バイト):

<?=$a="---------
|       |
---------
|   |   |
xxxx",x,strrev($a);

未知の定数のために通知を生成しxます。通知を設定することにより抑制することが可能error_reporting=0php.ini、またはコマンドラインで:

$ php -d error_reporting=0 tennis.php

出力の最後の行は改行文字で終わりません。


更新された回答(62バイト)。@ Titusによって提案された改善を改善します。

<?=$a=($b="---------
|   ")."    |
$b|   |
xxxx",x,strrev($a);

構成ファイルなしで実行します(デフォルトでerror_reporting=0この方法で実行されます):

$ php -n tennis.php

コードの両方のバージョンには、文字列に埋め込まれたリテラルの改行(1バイトより短い\n)が含まれており、アンラップできません。


1
デフォルト設定では通知はオフになっています。必要はありません-d error_reporting=0、ただ使用してください-n
タイタス

私は66を数えます<?=$a=($b="---------\n|")."...。あなたは65でそれらを作ることができます。
タイタス

@Titus私はあなたの提案が好きです。:-) -nよりもずっと短いです-d error_reporting=0。実際、答えには66個の有用な文字しかありません。を使用ls -lしてそれらをカウントしvi、ファイルが新しい行で終了するように構成されていることを忘れました。あなたの改善を改善し、さらに3バイトを圧縮しました。ありがとうございました。
axiac 16

2

PHP、72バイト

<?=$a="---------
",$b="|       |
$a",$c="|   |   |
","xxxxxxxxx
$c$a$b";

少し計算するよりもこのように短いときはほとんど嫌いです。


2

ルビー、52バイト

puts [b=[a=?-*9,"|%8s"%?|,a],c="|   |   |",?x*9,c,b]

ダブルシンメトリを使用すると、行は次のよう0-1-0 / 2-3-2 / 0-1-0になります。ループは簡単に展開でき、ネストされたリストは出力でフラット化されます。


2

パイク、28 26 25バイト

\|ddsssd7*.X--||"R\x5*nJs

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

       d7*                -    " " * 7
          .X--||"         -   grid(^, corners="-", sides="-", left="|", right="|")
\|dds                     -     "|  "
     s                    -    palindromise(^)
      s                   -   palindromise(^)
                  \x5*    -   "x" * 5
                      nJ  -  "\n".join(^)
                        s - palindromise(^)

2

05AB1E、25バイト

'-9ש'|ð4׫û®…|  ûû'x5×»û

CP-1252エンコードを使用します。オンラインでお試しください!

説明:

'-9×                       # Push "---------"
    ©                      # Store in register_c
     '|ð4׫                # Push "|    "
           û               # Palindromize, giving "|       |"
            ®              # Retrieve from register_c
             …|            # Push "|  "
                 ûû        # Palindromize twice, giving "|   |   |"
                   'x5×    # Push "xxxxx"
                       »   # Join by newlines
                        û  # Palindromize
                           # Implicit print

2

Vim、32バイト

9i-^[Y3pO||^[7i ^[YGPkP4lr|YpO^[9ix^[

これにより、テニスコートがvimバッファーに出力されます。^MEnterキー(0x0d)を表し、^[エスケープキー(0x1b)です。これらのキーストローク/コードを実行するには、ファイルに保存して実行します

vim -s <filename> -u NONE

標準出力への印刷

代わりにstdoutに出力する必要がある場合は、バッファをファイルに保存し(「a」vimを使用bashcat、テニスコートを印刷するために、使用するように設定されたシェル(使用)とプログラムを使用できます。標準出力(51バイト):

9i-^[Y3pO||^[7i ^[YGPkP4lr|YpO^[9ix^[:w!a|sil !cat %^M:q^M

以前のバージョンと同じですが:w!a|sil !cat %^M:q^M、最後に追加されています


2

J、36バイト

9$'-'([,(' '4}]),[,],'x',:])9$'|   '

これはREPLで機能します。これはJを使用する標準的な方法です。

   9$'-'([,(' '4}]),[,],'x',:])9$'|   '
---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

では41バイト、私はSTDOUTに結果を印刷することができます。

echo 9$'-'([,(' '4}]),[,],'x',:])9$'|   '

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

説明

私はテニスコートを一度に1列ずつ建設します。

9$'-'([,(' '4}]),[,],'x',:])9$'|   '
                            9$'|   '  The string repeated to length 9: y = '|   |   |'
  '-'(                     )          Apply this verb to x = '-' and y:
                     'x',:]            y with a row of 'x'-chars above it.
                                       This is a 2x9 matrix, and "," now works by
                                       prepending new rows to it.
                   ],                  Prepend another y.
                 [,                    Prepend x, which is repeated to a row of length 9.
        (' '4}]),                      Prepend y with 4th character replaced by a space.
      [,                               Prepend x again.
                                      Now we have this 6x9 matrix:
                                       ---------
                                       |       |
                                       ---------
                                       |   |   |
                                       xxxxxxxxx
                                       |   |   | 
9$                                    Repeat it to have 9 rows.

2

PowerShell67 66バイト

($a='-'*9)
($b="|       |")
$a
($c="|   "*2+"|")
'x'*9
$c
$a
$b
$a

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

いくつかの文字列の乗算、変数の設定、および変数を括弧でカプセル化して、パイプラインにコピーを配置します。Write-Outputプログラムの完了時のデフォルトでは、改行が無料で提供されます。

明らかなバイトを保存してくれた@ConnorLSWに感謝します。


$(' '*7)実際には8文字ですが| |、スペースとして行うには短くなります。
colsw

@ConnorLSWああ、ハハ。明らかなゴルフをありがとう!:D
AdmBorkBork

ToLower()私の他の答えに保存のためにあなたに返済するだけ;)
colsw

1

Python 2、75バイト

a,b,c='-'*9,'|       |','|   |   |'
for e in[a,b,a,c,'x'*9,c,a,b,a]:print e

@GurupadMamadapurから借用した変数を使用します

75の代替品

a,b,c='-'*9,'|       |','|   |   |'
print'\n'.join([a,b,a,c,'x'*9,c,a,b,a])

1

Emacs、43 35キーストローク

M-9 x RET:9つのx、リターン
C-SPC:セットマーク
| M-3 SPC | M-3 SPC | RET:パイプ、3つのスペース、パイプ、3つのスペース、パイプ、リターン
M-9 - RET:9つのハイフン、リターン
| M-7 SPC | RET:パイプ、7つのスペース、パイプ、リターン
M-9 - RET:9つのハイフン、リターン
C-x C-x:ポイントとマークの交換、リージョンの選択
M-w:コピー領域
C-p:前の行
C-y:コピーされたテキストをヤンク
M-x rev-r RETreverse-regionコマンドを実行


1

Lua、82バイト。

y=[[---------
|       |
---------
]]z="|   |   |\n"io.write(y,z,"xxxxxxxxx\n",z,y)

私は多くの方法を試しましたが、この方法が勝者であることを証明しました。


1

Pushy、33バイト

この質問には33の賛成票があり、33の回答があったので、33バイトのソリューションを投稿するだけでした...

9:45;T`|    `wT`|   |`4dT5:120;w"

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


説明

コードを理解しやすくするために、いくつかの部分に分割できます。最初の部分は次のように機能します。

9:45;    \ Push the char '-' 9 times
T        \ Push 10, which is a linefeed
`|    `  \ Push these charcodes

スタックは次のとおりです。

---------
|

ミラー演算子、はw、スタック全体をミラーリングし、以下を生成します:

---------
|       |
---------

次に:

T        \ Push a linefeed
`|   |`  \ Push these chars
4d       \ Copy the last 4 characters
T        \ Push a linefeed
5:120;   \ Push the char 'x', 5 times

スタックはテニスコートのように見え始めています。

---------
|       |
---------
|   |   |
xxxxx

終了するには、wもう一度ミラー演算子を使用します。これは、この文字列を反映してテニスコート全体を生成します。

---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

今残っているのは、"キャラクターが行う印刷のみです。


1

Unix Shell; dcおよびtrを使用。55バイト: (Mitchell Spectorソリューションの最適化)

dc<<<4o16i3FFFFp20002prp20202p15555psrfrp|tr 0-3 ' x|-'

その他のソリューション:sedを使用。81バイト。

echo "---|  ---| |xxx| |---|  ---"|sed "s/\(.\)\(.\)\(.\)/\1\2\2\2\3\2\2\2\1\n/g"

関数でのdcの使用:88バイト

b(){ dc<<<2o16i1${1}p|tr '01' ' '$2;};(b FF -;b 01 \|;b FF -;b 11 \|)>f;cat f;b FF X;tac f

または

b(){ echo "obase=2;$1"|bc|tr '01' ' '$2;};(b 511 -;b 257 \|;b 511 -;b 273 \|)>f;cat f;b 511 X;tac f 

関数でbcを使用:99バイト

b(){ echo "obase=2;$1"|bc|tr '01' ' '$2;};(b 511 -;b 257 \|;b 511 -;b 273 \|)>f;cat f;b 511 X;tac f 

1

Powershell、56バイト

(('-'*9),'|       |'+'-'*9+'|   |   |'+'x'*9)[0..4+3..0]

説明:簡単なハーフコート

代替、68バイト

('-----','|    '+'-'*5+'|   |'+'x'*5)[($r=0..4+3..0)]|%{-join$_[$r]}

説明:裁判所は、行と列の両方の表示に同じインデックスを使用しています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.