爬到美国


11

现在,其他用户已经帮助特朗普修建了隔离墙,现在是您爬墙的时候了。

这是一个ascii艺术挑战,您需要输出带有随机放置的货舱的攀岩墙。

攀登墙由面板组成,每个面板具有3至10个支撑物,高度为5面板。每个面板的高度为4个字符,跨度为10个字符

我们|用来表示墙的侧面(arête),用a -表示面板的边缘。面板的角由表示,+而保持则由表示o

最后,墙必须America!在顶部和Mexico底部。

您的程序应该不输入任何内容,除非需要输入才能运行,并且应该输出类似于以下内容的内容

这是一个示例输出:

  America!
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
   Mexico

这可能会引起混淆,因此下面的结构更加清晰

输入值

Zilcho。您不应该绝对输入。

输出量

一堵由5块木板组成的攀岩墙,每块6线乘12列,America!居中,顶部Mexico居中,底部居中。每个面板都有一个由程序随机生成的相同模式。面板模式由3到10之间的随机分布的保全数量组成。

规则

  • 不允许输入
  • 我会说“没有内置功能”,但是如果您的语言对此具有内置功能,我会自动接受它作为赢家。
  • 这是因此最短的代码(以字节为单位)获胜。
  • 同样,没有保持的输出必须与上述完全相同。
  • 随机是这里定义的随机

5
随机意味着均匀随机,还是每个可能的布局仅需要一个非零的发生机会,或者我仅需要至少两个可能性?
帕维尔

@ Notts90它们应该相同,并随机选择一个数量。帖子中提到了这一点,但随机性未定义。
帕维尔

2
我仍然认为,如果每个小组都必须有所不同,这将是一个更好的挑战。
毛茸茸的

3
这就是我的沙盒问题。我在那里经历了一个多月的挑战,并决定在这里清理我的帖子。因此,我发布此邮件,以为每个问题都已解决,并且发生了!
caird coinheringaahing

1
@WORNGALL假新闻!说谎!随机性非常重要。Trumpscript具有您所见过的最佳随机生成器。(所有您需要做的就是链接到总统的Twitter提要!)
Level River St

Answers:


5

果冻65 57 字节

首次使用新型两码点整数字符串文字⁽¥0= 2049)

⁽¥0ṃ⁾+-W
“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#»

完整程序,无需输入,无需打印墙。

在线尝试!

怎么样?

⁽¥0ṃ⁾+-W - Link 1, panel separator: no arguments
⁽¥0      - literal 2049
    ⁾+-  - literal "+-"
   ṃ     - convert 2049 to base "+-" as if they were [1,0]
       W - wrap in a list   -> ["+----------+"]

“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#» - Main link: no arguments
“K2X)»                                           - "  America!"
      Ṅ                                          - print with line feed
       ø                                         - niladic chain separation
        40                                       - literal 40
          R                                      - range -> [1,2,...,40]
           Ẋ                                     - random shuffle
                 ¤                               - nilad and link(s) as a nilad:
             8X                                  -   random integer between 1 and 8
                3                                -   literal 3
               +                                 -   add
            <                                    - less than? (vectorises)
                   ⁵                             - literal 10
                  s                              - split into chunks of length 10
                     ⁾o <-- a space              - literal "o "
                    ị                            - index into
                           ⁾||                   - literal "||"
                        j@€                      - join with reversed @rguments
                              Y                  - join with line feeds
                                ¢                - call last link (1) as a nilad
                               ṭ                 - tack left to right
                                 µ               - call that p... (monadic chain separation)
                                    5¡           - repeat five times:
                                   €             -   for €ach (separator & panel)
                                  Ṅ              -     print with trailing line feed(separator and panel):
                                      Ṗ          - pop (just the separator now)
                                        ⁷        - literal line feed
                                       ;         - concatenate
                                                 - unused value printed
                                         “Ç€:;#» - "   Mexico"
                                                 - implicit print

4
这是我见过的最长的果冻程序。
帕维尔

歧义已经改变。我决定让3-10允许你留下。
Caird coinheringaahing

为+1 )o <-- a space。真是让我发笑!
caird coinheringaahing

@Phoenix,它已经变短了,但我不禁认为它应该更短。
乔纳森·艾伦

@ Satan'sSon这几乎是一个太空跳跃者!
乔纳森·艾伦

4

PHP,138字节

<?=($p=str_pad)("  America!",349,strtr("
+----------+
|0|
|1|
|2|
|3|",str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10)))."   Mexico";

在线尝试!

展开式

<?=($p=str_pad)("  America!",349, 
#fill the string till a length of 349 with
strtr("
+----------+
|0|
|1|
|2|
|3|",
# before replace the digits with strings in the array
str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10))) 
# make a string with o length 3- 10 fill it with spaces to length 40
# shuffle the resulting string and split it into a array of strings with length 10
."   Mexico"; # add the end

4

的JavaScript(ES6),194个 160字节

(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`

尝试一下

在下面的代码段中,保留模式将每2秒更改一次。

f=
(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`
o.innerText=f()
setInterval("o.innerText=f()",2e3)
<pre id=o>


说明

  • 我们创建一个匿名函数,该函数虽然不接受任何输入,但确实具有两个带有默认值的参数:
    • h的初始值为0; 当我们添加它们时,这将保留面板上的保留数量。
    • g,这是一个递归函数,我们将使用它在面板上创建保持的随机模式。我们稍后再讨论。
  • 在主体函数主体中,我们输出一个以开头的模板文字America!\n
  • 然后,我们创建面板分隔符(+----------+\n)并将其分配给变量t,并将其添加到流程中的输出中。
  • 接下来,我们在面板(| |\n)中创建一行,重复4次并追加t
  • 我们g通过parameter 调用,将上述步骤中的字符串作为参数传递p
  • 现在,进入保持模式。内g
    • 我们检查是否h>2(即,我们是否拥有3个或更多保全)。
    • 如果是这样,我们返回字符串p
    • 如果不是,我们将g再次调用,这一次将的修改副本p作为参数传递。
    • 的修改后的副本p具有使用的replace方法,通过引用字符串的字符索引(0或1),<space>用a <space>或an 替换所有字符。o<space>o
    • 我们通过以下方式确定字符索引
      1. 调用Math.random(),它返回0到1之间的十进制数字(不包括)。
      2. 检查是否大于.8。由于它们在面板中有40个空间,最多只能容纳10个搁置,因此可以改善搁置在整个面板中的分布(.75会更准确,但是希望您可以允许我让步,因为保存一个字节!)。
      3. 该检查的布尔值被分配给variable s
      4. s被强制为整数(0或1)并加到h
      5. 我们检查h现在是否小于11(即,我们当前是否拥有小于10的保留),以及是否s为真。
      6. 该布尔值又被强制为整数,从而为我们提供了字符串中的索引。
  • 回到我们的输出!我们将返回的字符串重复g5次。
  • 然后只需添加Mexico到字符串的末尾即可完成操作。!

另类

而且,仅仅是因为我认为这将对挑战做出很好的补充:仅增加12个字节,我们就可以在每个面板上具有唯一的保留模式,而不是全部相同。

(g=(p=`|          |
`.repeat(4)+t,h=0)=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s]),h))=>`  America!
${t=`+----------+
`}${g()+g()+g()+g()+g()}    Mexico`

尝试一下

同样,保留的模式将每2秒更改一次。


3

Pyth- 58 57个字节,可能是47个字节

Ks(b\+*\-T\+*+++b\|*dT\|4)J<.SxdmdK+3O8+*s.e?/Jk\obK5<K13

尝试一下

旧解决方案的说明(有时间我会更新):

J+++b\+*\-T\+K+J*+++b\|*dT\|4=Y<.SxdmdK+3O8+*s.e?/Yk\obK5J
J+++b\+*\-T\+                                                Create the +----------+, and store as J
             K+J*+++b\|*dT\|4                                Create a full panel (minus bottom border, and without holes), store as K
                                  xdmdK                      Get indices of spaces
                                .S                           Create random permutation of these indices
                               <       +3O8                  Get first several indices (a random number from 3 to 10)
                                             s.e?/Yk\obK     Replace space with 'o' at these indices
                                           +*           5J   Create 5 copies, and add bottom border

我认为我在技术上仍然可以遵循规则的同时获得47分:

JhO2Ks(b\+*\-T\+*+++b\|.S+*\oJ*d-TJ\|4)+*K5<K13

在这里,孔的数量仍然是随机选择的(从{4,8}组中选择),而这些孔的配置是随机选择的(从每行相同的一组配置中选择)

尝试一下


2

Mathematica,201个字节

c=Column;s=RandomSample[Tuples[{" ",o," "," "},10],4];t="+----------+";w=c[{t,c[Row/@Table[AppendTo[s[[i]],"|"];PrependTo[s[[i]],"|"],{i,Length@s}]]}];c[Flatten@{"  America!",Table[w,5],t,"   Mexico"}]

+1使用了我无法测试的语言?
Caird coinheringaahing

@ Satan'sSon,你可以免费运行大多数程序的Mathematica 这里的钨沙箱。(将其粘贴并按shift键。)
不是一棵树

在打印方面,该网站以有趣的方式打印。输出失真,因为它使用特殊
字符

1

Powershell(255字节)

echo "  America!"
for($l=0;$l-lt4;$l++){$a=," "*12;$a[0]="|";$a[11]="|";$i=get-random -Max 10 -Min 6;$j=get-random -Max 5 -Min 1;$a[$i]=$a[$j]="o";$b+=($a-join"")}
for($k=0;$k-lt5;$k++){echo +----------+($b-join"`n")} 
echo +----------+`n"   Mexico" 

1

Python 2中259个 224 221 218字节

from random import*
b=[' ']*40
for x in sample(range(40),randint(3,10)):b[x]='o'
a=["+"+"-"*10+"+"]+['|'+''.join(o)+'|'for o in[b[x*10:x*10+10]for x in 0,1,2,3]] 
print'\n'.join(['  America!']+a*5+[a[0]]+['   Mexico'])

在repl.it上尝试

-35包括@ Satan'sSon的一些提示-谢谢!

-3感谢@Wondercricket


您能通过简单地输出t而不是将其保存到变量来保存字节吗?如果在America!和之后删除空格Mexicoprint" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0
Caird coinheringaahing

谢谢@ Satan'sSon。这是“午休特惠”,可能在我有时间的时候可以再打一点。再次感谢您的提示。
ElPedro '17

您也可以通过将导入更改为功能或从功能中from random import*删除r.功能来节省一些字节
Wondercricket,

谢谢@Wondercricket。不知道我怎么能错过那一个:)
ElPedro '17

撒旦很有帮助!(所有内容的第一次和最后一次> :(
Caird coinheringaahing

0

Python 2,197字节

from random import*
n=randint(3,10)
s=list('o'*n+' '*(40-n))
shuffle(s)
t=10
S='+'+'-'*t+'+'
print'\n'.join(['  America!']+([S]+['|'+''.join(s[x:x+t])+'|'for x in range(0,40,t)])*5+[S,'   Mexico'])
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.