我突然真的很想打网球,可惜我没有球场!
惊喜!这是您进来的地方。
您必须为我打印一个网球场,但是由于机密原因,您必须以最少的字节数进行打印。
网球场
---------
| |
---------
| | |
xxxxxxxxx
| | |
---------
| |
---------
我突然真的很想打网球,可惜我没有球场!
惊喜!这是您进来的地方。
您必须为我打印一个网球场,但是由于机密原因,您必须以最少的字节数进行打印。
---------
| |
---------
| | |
xxxxxxxxx
| | |
---------
| |
---------
Answers:
s='-','|'+' '*7,'-','| ','x'
for i in s+s[3::-1]:print(i*9)[:9]
Flp.Tkc保存了一个字节。
'|'+' '*7
将第二个字符串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。谢谢 :)
“¡⁵÷ḞȯḤɼ’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,节省了一个字节!
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.
由于尼尔,节省了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
非竞争性的,因为语言是挑战的后期。而这一挑战只有一天之久。我知道我昨天应该放点东西。我这样做是为了测试我的语言,但最终结果太好了,无法发布。可以肯定的是,它也可以打高尔夫球。
a =`--------- | | ---------`; b =`| | | `; console.log(a +` `+ b +`xxxxxxxxx `+ b + a)
在这里测试:
a=`---------
| |
---------`;b=`| | |
`;console.log(a+`
`+b+`xxxxxxxxx
`+b+a)
b
,因为这意味着你可以删除之后的换行符xxxxxxxxx
和你之间添加一个a
和b
。通过设置a
为---------
first,然后将第二行和a串联起来,可以进一步节省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|")."...
。
-n
比-d error_reporting=0
:-) 短得多,实际上答案中只有66个有用的字符。我使用它们来计数ls -l
,但忘记了vi
配置,以确保文件以新行结尾。我改进了您的改进,并压缩了3个字节。谢谢。
'-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),^[
是Escape键(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$'| '
我一次建造网球场。
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()
节省了我其他答案的费用;)
这个问题有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