Rapunzel, Rapunzel, buông tóc xuống!


20

Sự miêu tả

Tôi đoán mọi người đều biết câu chuyện cổ tích của Rapunzel và hoàng tử. Đối với những người không: đọc nó ở đây. Tuy nhiên, Rapunzel vừa mới cắt tóc, nên có thể không đủ lâu để hoàng tử của cô trèo lên! Cô ấy có thể rất buồn ..

Thử thách

Nhiệm vụ của bạn là viết một chức năng đánh giá Rapunzel sẽ nói gì khi hoàng tử kêu gọi cô ấy buông tóc xuống: Khi tóc cô ấy dài hơn hoặc bằng tháp cao cộng thêm một mét (hướng dẫn an toàn), cô ấy trở thành Veeeery hạnh phúc và nói Aaaah!, với số lượng agiống như length of her hair - height of the tower. Mặt khác, tóc của cô ấy không có đủ độ dài và cô ấy bắt đầu khóc : Booho!, trong đó os trước hhai phần ba bằng nhau height of the tower - length of her hairos sau h là phần còn lại. Số os sau số Bphải được làm tròn, vì vậy nếu bạn nhận được 2.6, sẽ có 3 os và số khác phải sau h.

Tôi / O

Bạn được cung cấp các số nguyên dương (bao gồm null) dưới dạng đối số, dưới dạng danh sách hoặc hai số đơn, theo thứ tự bạn thấy thuận tiện nhất, nhưng bạn phải nêu rõ thứ tự bạn thực hiện theo thứ tự nào. Là đầu ra, in những gì Rapunzel sẽ nói.

Các trường hợp thử nghiệm

Trong các trường hợp thử nghiệm, số đầu tiên sẽ là chiều dài tóc.

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

Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng!


5
Vì vậy, cô không thể xuống nếu chiều cao của tháp là 0? BTW, số nguyên dương (bao gồm null) == _non số nguyên âm :)
Stewie Griffin

2
Tôi định làm điều này trên bài đăng đầu tiên của bạn, nhưng tôi muốn nói với bạn về Sandbox , nơi bạn có thể đăng các thử thách để nhận phản hồi trước khi đăng chúng lên chính. Đây dường như là một thử thách khá thú vị nhưng mọi người có thể bị mang đi.
caird coinheringaahing

4
@StewieGriffin Yep, giả sử rằng mái tóc của cô ấy cũng 0vậy. Tuy nhiên, cô phải ra khỏi cửa sổ, và những hạn chế về an toàn cũng được áp dụng ở đây! Không có cách nào cô ấy có thể kết hôn với anh ta nếu cô ấy bị gãy cổ.
racer290

Câu trả lời:


5

Thạch ,  43 41 40 38 34 33 32  31 byte

Có lẽ có rất nhiều Có một cách ngắn hơn mặc dù ! ? ... Đây là một số golf!

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

Một chương trình đầy đủ in kết quả *.

Hãy thử trực tuyến!

Làm sao?

‘: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

* Là một liên kết đơn, nó trả về một danh sách các ký tự và danh sách các ký tự ['B', [['o', 'o', 'h'], ['o']], '!'], ví dụ như là một chương trình đầy đủ, bản in ngầm sẽ phá vỡ điều này, vdBooho!



Vâng, tôi đã bắt đầu với ý tưởng sử dụng AL€œs3và tìm thấy div bằng 0 lỗi và sau đó tôi đã giải quyết rằng với mã dài hơn nhiều ở trên, tôi vẫn cần trường hợp đặc biệt là trường hợp có độ dài bằng nhau. Tôi nghĩ rằng tôi đã thử và thực hiện một cách khác ngày hôm nay, nhưng có vẻ như bạn đã làm.
Jonathan Allan

... nhớ bạn tôi đã suy nghĩ 25-30 byte :)
Jonathan Allan

4

Python 3 , 87 byte

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

Hãy thử trực tuyến!

Các đối số cho hàm được thực hiện theo thứ tự length of hair, height of tower.


4

05AB1E , 38 35 32 byte

Để Input: length of hair,height of tower

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

Hãy thử trực tuyến!

Giải trình

‹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 "!"

Bạn dường như đã quên một 3cái được hiển thị trên TIO.
Erik the Outgolfer 16/07/17

@EriktheOutgolfer: Cảm ơn bạn đã thông báo. Tôi đã sửa lời giải thích để tuân thủ mã :)
Emigna

Oh, và bạn có vấn đề khoảng cách với lời giải thích của bạn.
Erik the Outgolfer 16/07/17

@EriktheOutgolfer: Tôi không thấy nó. Nếu bạn muốn nói rằng chúng nằm trong 2 đường chéo, thì đó là sự phân tách có chủ ý của if-other để giảm không gian ngang được sử dụng. Nếu có điều gì khác tôi phải bị mù.
Emigna

Ôi tôi đã bối rối với khoảng trắng ngoại lai trong đó ...
Erik the Outgolfer 16/07/17

4

Javascript, 105 97 byte

Cảm ơn Oki vì đã giúp tiết kiệm 7 byte!

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))+"!"

Xác định một chức năng currying ẩn danh. Sử dụng nhưf(length)(height)

Hãy thử trực tuyến!


Dường như không làm việc cho f(1)(4). Thay thế p(o+d)bằng p(-o-d)có thể khắc phục điều này. Ngoài ra, bạn có thể sử dụng o=-d*2/3+.5|0để lưu 7 byte.
Oki

@Oki cảm ơn vì đã chỉ ra lỗi đó và chỉ cho tôi cách làm tròn ngắn hơn!
DanTheMan

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



0

Julia, 101 byte

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))

Các đối số cho hàm được thực hiện theo thứ tự length of Hair, height of Tower.


Typo: bá đạo của Hower
racer290

0

Thạch , 84 76 byte

Nó thực sự khá dài, nhưng tôi đã dành quá nhiều thời gian cho việc này để không đăng nó. Có hai đối số nguyên:

  1. chiều dài của tóc
  2. chiều dài tháp

Bất kỳ lời khuyên về việc chơi golf này sẽ được đánh giá cao.

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

Hãy thử trực tuyến!


tốt, đã có một câu trả lời Jelly ngắn hơn nhiều
Cur

0

R, 117 byte

x=diff(scan());cat(`if`(x>0,paste0("A",rep("a",x),"h!"),paste0("B",rep("o",F<-round(-2*x/3)),"h",rep("o",-x-F),"!")))

Một chút dài, khá chắc chắn rằng điều này có thể được đánh golf xuống. Lấy đầu vào từ STDIN theo thứ tự Tower, Hair.


uh-oh; Điều này không thực sự hoạt động cho đầu vào1 4
Giuseppe


0

Python 2 , 77 byte

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

Một hàm không tên lấy chiều dài tóc hvà chiều cao tháp tvà trả về một chuỗi.

Hãy thử trực tuyến!

Xây dựng một chuỗi bắt đầu bằng BA, theo sau là hai phần ba chênh lệch được làm tròn của chuỗi được oalặp lại, theo sau là một chuỗih , sau đó là số lượng còn lại được aolặp lại và cuối cùng h!!. Giá trị trả về sau đó là mỗi ký tự thứ hai bắt đầu bằng Bhoặc Athông qua ký hiệu lát [h>t::2].


0

Perl, 107 byte

Mất chiều dài tóc thứ nhất, chiều dài tháp thứ hai.

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))}).'!'}

Bạn có thể loại bỏ `` `và dự định mã của mình theo 4 khoảng trắng để làm cho nó trông đẹp hơn ..
Roman Gräf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.