长发公主,长发公主,放下你的头发!


20

描述

我想每个人都知道长发公主和王子的童话。对于那些不喜欢的人:在这里阅读。但是,长发公主刚刚剪了头发,所以它可能还不够长,无法让她的王子爬上去!她可能会很难过。

挑战

您的任务是编写一个函数,该函数可以评估王子要求她放头发时长发公主会说些什么:当头发的长度大于或等于塔高时,再加上一米(安全准则),她将成为veeeery高兴地说Aaaah!,与的数目a相同length of her hair - height of the tower。否则,她的头发没有足够的长度,并且她开始哭泣:Booho!,其中os在h相等的三分之二之前height of the tower - length of her hair,而os在h之后的其余部分。os后面的s 数B必须四舍五入,因此,如果得到2.6,将为3 os,其他的必须在s后面h

输入输出

给您提供正整数(包括空值)作为参数,列表或两个单个数字,顺序是最方便的顺序,但是必须说明采用它们的顺序。作为输出,打印长发公主将说的话。

测试用例

在测试用例中,第一个数字将是头发的长度。

0, 0 -> 'Bh!' (probably a dry sob..)
2, 1 -> 'Aah!'
1, 2 -> 'Boh!'
1, 4 -> 'Booho!'
4, 1 -> 'Aaaah!'
2, 4 -> 'Boho!'

这是,因此最短答案以字节为单位!


5
因此,如果塔的高度为,她就不能下楼0?BTW,正整数(包括空值) == _非负整数:)
Stewie Griffin

2
我本打算在您的第一篇文章中进行此操作,但我想向您介绍有关“ 沙箱”的信息,您可以在其中发布挑战以获取反馈,然后再将其发布到main。这似乎是一个有趣的挑战,但人们会被带走。
caird coinheringaahing

4
@StewieGriffin是的,假设她的头发0也一样。尽管如此,她还是必须走出窗户,并且安全方面的限制也适用于这里!如果脖子骨折了,她不可能和他结婚。
racer290

Answers:


5

果冻 43 41 40 38 34 33 32  31 字节

可能还有很多?...这真是打高尔夫球!

‘:3;ạ¥⁸4ẋ+;€⁹¦7Ṛṭ;8ị“øŻPLC»
ạç>

完整程序打印结果*。

在线尝试!

怎么样?

‘:3;ạ¥⁸4ẋ+;€⁹¦7Ṛṭ;8ị“øŻPLC» - Link 1: number, abs(hair-tower); number, (hair > tower)?
‘                           - increment -> abs(hair-tower)+1
 :3                         - integer divide by 3 -> (abs(hair-tower)+1)//3
                            -   ...the remainder amount after removing 2/3 rounded
      ⁸                     - chain's left argument, abs(hair-tower)
     ¥                      - last two links as a dyad:
    _                       -   subtract (yields the 2/3 rounded amount)
   ;                        - concatenate
       4ẋ                   - repeat 4 (vectorises) (i.e. [[4,4,...],[4,...]])
         +                  - add (hair > tower)? (vectorises) (i.e. 4s->5s if so)
             ¦              - sparse application:
          ;€  7             - of:  concatenate €ach with a 7
            ⁹               - to indexes: chain's right argument, (hair-tower)?
               Ṛ            - reverse the list
                ṭ           - tack (hair-tower)?
                 ;8         - concatenate an 8
                    “øŻPLC» - compression of the word "Abroach" & the string "!B"
                   ị        - index into "Abroach!B" (1-indexed & modular, so 0->B)
                            - implicit (smashed) print

ạç> - Main link: number, hair; number, tower
ạ   - absolute difference -> abs(hair-tower)
  > - greater than? -> (hair > tower)? (1 if so, else 0)
 ç  - call the last link (1) as a dyad

*作为单子链接,它返回字符列表和字符列表,例如['B', [['o', 'o', 'h'], ['o']], '!'],作为完整程序,隐式打印将其粉碎,例如Booho!



是的,我首先想到了使用AL€œs3并通过零错误找到div 的想法,然后在解决了上面发现的更长的代码后,仍然需要对等长情况进行特殊处理。我以为我今天会尝试以不同的方式实施,但看起来您已经这样做了。
乔纳森·艾伦

...记住你我在想25-30字节:)
Jonathan Allan

4

Python 3,87字节

lambda l,h:["B"+"o"*round((h-l)*2/3)+"h"+"o"*round((h-l)/3),"A"+"a"*(l-h)+"h"][l>h]+"!"

在线尝试!

函数的自变量都采取了订单length of hairheight of tower


4

05AB1E38 35 32字节

输入顺序:length of hairheight of tower

‹i¹α'a×"Aÿh!"ë¹-x‚>3÷R'o×'hý…Bÿ!

在线尝试!

说明

‹i                                  # if h < l
  ¹α                                # push absolute difference of h and l
    'a×                             # repeat "a" that many times
       "Aÿh!"                       # interpolate between "A" and "h!"
 ë                                  # else 
  ¹-                                # push h-l
    x‚                              # pair with its double
      >3÷                           # increment and integer divide by 3
         R                          # reverse the list
          'o×                       # for each, repeat "o" that many times
             'hý                    # merge the o's on "h"
                …Bÿ!                # interpolate between "B" and "!"

您似乎忘记了3TIO上显示的。
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer:感谢您的通知。我已经修正了与代码一致的解释:)
Emigna

哦,您的解释中存在空格问题。
大公埃里克(Erik the Outgolfer)'17年

@EriktheOutgolfer:我没看到。如果您是说它们在2条对角线上,那么这是故意分隔if-else来减少使用的水平空间。如果还有其他事情,我一定是瞎子。
Emigna

噢,我对其中的多余空白感到困惑……
Outgolfer的Erik

4

Javascript,105 97字节

感谢Oki帮助节省了7个字节!

p=(t,s)=>(s||"o").repeat(t)
l=>h=>(d=l-h,o=d/3-.5|0,l>h?`A${p(d,"a")}h`:`B${p(o-d)}h`+p(-o))+"!"

定义匿名的currying函数。使用方式f(length)(height)

在线尝试!


似乎不适合f(1)(4)。替换p(o+d)p(-o-d)可以解决此问题。您也可以o=-d*2/3+.5|0用来保存7个字节。
Oki

@Oki感谢您指出该错误并向我展示了较短的舍入!
DanTheMan

p=(t,s='o')=>s.repeat(t)
tsh



0

朱莉娅101字节

g(h,t)=h>t?string("A","a"^(h-t),"h!"):string("B","o"^round(Int,(t-h)*2/3),"h","o"^round(Int,(t-h)/3))

函数的自变量都采取了订单length of Hairheight of Tower


错字:豪尔的高度
racer290 '17

0

果冻84 76字节

这确实很长,但是我花了太多时间在此上不张贴。接受两个整数参数:

  1. 头发的长度
  2. 塔长

任何打高尔夫球的技巧,将不胜感激。

³>⁴×111ð;ø³>⁴¬×97
97ðxø³ạ⁴
111ðxø¢L÷3×⁸ær0:1
2Çṭ2£“h”ṭµ1ÇṭµFḟ1£
>¬+65¥;¢;33Ọ

在线尝试!


好了,已经有一个更短的果冻答案
心教堂


0

Python 2,77个字节

lambda h,t:("BA"+(abs(h-t)*2+1)/3*"oa"+"h"+(abs(h-t)+1)/3*"ao"+"h!!")[h>t::2]

一个未命名的函数,其头发长度为,h塔高度为t,并返回一个字符串。

在线尝试!

构建一个以开头BA的字符串oa,然后是重复的字符串的四舍五入的差值的三分之二,然后是单个h,然后ao重复其余的数量,最后是h!!。然后,返回值是每隔两个字符以BA通过切片符号开头[h>t::2]


0

Perl,107个字节

首先取头发长度,其次为塔长。

sub b{(($c=$_[0]-$_[1])>0?'A'.'a'x--$c.'h':do{$o=int(2/3*($c*=-1)+.5);'B'.('o'x$o).'h'.('o'x($c-$o))}).'!'}

您可以通过4个空格摆脱了```,并打算你的代码,使它看起来更好..
罗马格拉夫
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.