突然テニスをしたいのですが、残念ながらコートはありません!
驚き!ここがあなたの出番です。
私のためにテニスコートを印刷する必要がありますが、秘密の理由により、できる限り少ないバイト数で印刷する必要があります。
テニスコート
---------
| |
---------
| | |
xxxxxxxxx
| | |
---------
| |
---------
突然テニスをしたいのですが、残念ながらコートはありません!
驚き!ここがあなたの出番です。
私のためにテニスコートを印刷する必要がありますが、秘密の理由により、できる限り少ないバイト数で印刷する必要があります。
---------
| |
---------
| | |
xxxxxxxxx
| | |
---------
| |
---------
回答:
s='-','|'+' '*7,'-','| ','x'
for i in s+s[3::-1]:print(i*9)[:9]
Flp.Tkcはバイトを保存しました。
'|'+' '*7
2番目の文字列に使用してs
、バイトを節約できます!
'-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を破ることはできません
d=b,a,c='| |','-'*9,'| | |'
print(a,*d,'x'*9,c,a,b,a,sep='\n')
Python 3.6-75バイト
x=f"{'-'*9}\n|{' '*7}|\n{'-'*9}\n| | |\n"
print(x,'x'*9,x[::-1],sep='')
クレジットはflp-tkcになります。ありがとうございました :)
/f/---//e/ //a/fff
|ee |
fff
//d/|e|e|
/adxxxxxxxxx
da
別の56バイトソリューション:
/f/---//e/| //a/fff
e |
fff
//d/ee|
/adxxxxxxxxx
da
9é-ÄÙÒ r|$.4äGMãlr|jj.kÒX
これは23バイトでなければなりません:
9é-ÄÙÒ r|$.4äMÒXãkr|jj.
しかし、作成中にいくつかのバグに遭遇しました。:(
“¡⁵÷ḞȯḤɼ’b4ị“- x|”s5ŒBŒḄY
私は、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
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
-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.
dc<<<4o16i3FFFFp20002prp20202p15555pszpszfp|tr 0-3 ' x|-'
目的の出力には、改行以外の4文字のみが表示され、各行を4進数でコーディングできます。これらの番号は、簡潔にするためにスクリプトに16進数で書き込まれます。
Unixの電卓dcは、ベース16からベース4への変換とスタック操作の両方に使用され、適切な場所で行を簡単に繰り返すことができます。
編集:文字のコーディングに使用された2桁の2桁を交換することにより1バイト削り、trコマンドを以前のバージョンより1バイト短くすることができました。
ニールのおかげで2バイト節約
a=`---------
`;a+=`| |
`+a;b=`| | |
`;console.log(a+b+`xxxxxxxxx
`+b+a)
console.log('01232101242421512424210123210'.replace(/./g,n=>`-
| x`[n].repeat('911739'[n])))
ニールの提案:
console.log(`-${s=`
|
-
|
`}x${s}-`.replace(/.*/g,s=>s.repeat(9).slice(-9)))
再帰的アプローチ:
console.log((f=(n,c=`xxxx
| | |
---------
| |
`[n]||'-')=>~n--?c+f(n)+c:'x')(43))
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
明らかに改行に置き換えてください)。
console.log('-\n |\n-\n |\nx\n |\n-\n |\n-'.replace(/.*/g,s=>s.repeat(9).slice(-9)))
。
|
が、コメントに表示される単一のスペースの代わりに、必要に応じてそれぞれの前に7つまたは3つのスペースがあるはずです。
-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日です。昨日何かを立てるべきだと思いました。私はこれを自分の言語のテストとして行ったのですが、投稿することはできませんでした。これもゴルフに適していると確信しています。
a = `--------- | | --------- `; b =` | | | `; console.log(a +` `+ b +` xxxxxxxxx `+ b + a)
ここでテスト:
a=`---------
| |
---------`;b=`| | |
`;console.log(a+`
`+b+`xxxxxxxxx
`+b+a)
b
ますが、後に改行を削除することができ、この手段として、xxxxxxxxx
あなたが間を追加することを1 a
とb
。最初に設定してa
から---------
2番目の行とそれ自体を連結することにより、さらに3バイトを節約できます。
これが元の答えです(66バイト):
<?=$a="---------
| |
---------
| | |
xxxx",x,strrev($a);
未知の定数のために通知を生成しx
ます。通知を設定することにより抑制することが可能error_reporting=0
でphp.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
)が含まれており、アンラップできません。
-d error_reporting=0
、ただ使用してください-n
。
<?=$a=($b="---------\n|")."...
。あなたは65でそれらを作ることができます。
-n
よりもずっと短いです-d error_reporting=0
。実際、答えには66個の有用な文字しかありません。を使用ls -l
してそれらをカウントしvi
、ファイルが新しい行で終了するように構成されていることを忘れました。あなたの改善を改善し、さらに3バイトを圧縮しました。ありがとうございました。
\|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(^)
'-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
9i-^[Y3pO||^[7i ^[YGPkP4lr|YpO^[9ix^[
これにより、テニスコートがvimバッファーに出力されます。^M
Enterキー(0x0d)を表し、^[
エスケープキー(0x1b)です。これらのキーストローク/コードを実行するには、ファイルに保存して実行します
vim -s <filename> -u NONE
代わりにstdoutに出力する必要がある場合は、バッファをファイルに保存し(「a」vim
を使用bash
)cat
、テニスコートを印刷するために、使用するように設定されたシェル(使用)とプログラムを使用できます。標準出力(51バイト):
9i-^[Y3pO||^[7i ^[YGPkP4lr|YpO^[9ix^[:w!a|sil !cat %^M:q^M
以前のバージョンと同じですが:w!a|sil !cat %^M:q^M
、最後に追加されています
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.
($a='-'*9)
($b="| |")
$a
($c="| "*2+"|")
'x'*9
$c
$a
$b
$a
いくつかの文字列の乗算、変数の設定、および変数を括弧でカプセル化して、パイプラインにコピーを配置します。Write-Output
プログラムの完了時のデフォルトでは、改行が無料で提供されます。
明らかなバイトを保存してくれた@ConnorLSWに感謝します。
$(' '*7)
実際には8文字ですが| |
、スペースとして行うには短くなります。
ToLower()
私の他の答えに保存のためにあなたに返済するだけ;)
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
RET:reverse-region
コマンドを実行
この質問には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
| | |
---------
| |
---------
今残っているのは、"
キャラクターが行う印刷のみです。
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