라푼젤, 라푼젤, 머리를 내밀어!


20

기술

나는 라푼젤과 왕자의 동화를 모두가 알고 있다고 생각합니다. 그렇지 않은 사람들을 위해 : 여기를 읽으십시오. 그러나 라푼젤은 방금 머리를 자르고 있었기 때문에 그녀의 왕자가 올라갈 정도로 길지 않을 수 있습니다! 그녀는 매우 슬퍼 질 수 있습니다 ..

도전

당신의 임무는 왕자가 그녀의 머리카락을 내릴 것을 요구할 때 라푼젤이 무엇을 말할지 평가하는 함수를 작성하는 것입니다. veeeery의 행복과는 말한다 Aaaah!의 수와 a같은 인들 length of her hair - height of the tower. 그렇지 않으면, 그녀의 머리는 충분한 길이를 가지고 있지 않으며, 그녀는 울기 시작합니다 Booho!의 경우 o전과의 h동등한 삼분 height of the tower - length of her hair하고 o시간 이후의 나머지되고. 수 o애프터들 B당신이 얻을 경우 그래서, 반올림해야 2.6, 3 개있을 것 o들, 그리고 다른 사람은 이후 여야합니다 h.

I / O

가장 편리한 순서대로 양의 정수 (널 (null 포함) 포함)를 인수, 목록 또는 두 개의 단일 숫자로 제공하지만 순서를 정해 놓아야합니다. 출력으로 라푼젤의 말을 인쇄하십시오.

테스트 사례

테스트 사례에서 첫 번째 숫자는 머리카락 길이입니다.

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, 양의 정수 (null 포함) == _ 음이 아닌 정수 :)
Stewie Griffin

2
첫 번째 게시물 에서이 작업을 수행하려고했지만 Sandbox 에 대해 이야기하고 싶습니다.이 게시물을 게시하기 전에 피드백을 얻기 위해 문제를 게시 할 수 있습니다. 이것은 매우 흥미로운 도전처럼 보이지만 사람들은 도망 갈 수 있습니다.
caird coinheringaahing

4
그녀의 머리카락 길이가 0너무 길다고 가정하면 @StewieGriffin Yep . 그럼에도 불구하고, 그녀는 창문 밖으로 나와야하며 안전에 대한 제한도 여기에 적용됩니다! 목이 부러져서 결혼 할 수있는 방법이 없습니다.
racer290

답변:


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€œs3div를 0 오류 로 사용하는 아이디어로 시작한 다음 위의 훨씬 긴 코드로 발견 한 후에도 동일한 길이의 사례를 특수하게 처리해야했습니다. 오늘 다른 방법으로 구현하려고 노력했지만 이미 수행 한 것처럼 보입니다.
Jonathan Allan

... 25-30 바이트를 생각하고 있다는 것을 상기시켜주십시오.
Jonathan Allan


4

05AB1E , 38 35 32 바이트

입력 순서 : length of hair,height 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에 표시된 것을 잊어 버린 것 같습니다 .
Outgolfer Erik

@EriktheOutgolfer : 알려 주셔서 감사합니다. 코드에 맞게 설명을 수정했습니다 :)
Emigna

아, 설명에 간격 문제가 있습니다.
Outgolfer Erik

@EriktheOutgolfer : 나는 그것을 보지 못한다. 2 개의 대각선에 있다는 것을 의미한다면, 사용 된 수평 공간을 줄이기 위해 if-else를 의도적으로 분리 한 것입니다. 다른 것이 있으면 장님이되어야합니다.
Emigna

아, 나는 그것의 이질적인 공백과 혼동되었다 ...
Outgolfer Erik

4

자바 스크립트, 105 97 바이트

7 바이트 절약에 도움을 주신 Oki에게 감사드립니다!

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

익명 카레 기능을 정의합니다. 처럼 사용f(length)(height)

온라인으로 사용해보십시오!


에서 작동하지 않는 것 같습니다 f(1)(4). 로 교체 p(o+d)하면 p(-o-d)이 문제를 해결할 수 있습니다. 또한 o=-d*2/3+.5|07 바이트를 절약 할 수 있습니다 .
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 Hair, height of Tower.


오타 : Hower의
heigth

0

젤리 , 84 76 바이트

정말 길지만 게시하지 않기 위해 너무 많은 시간을 보냈습니다. 두 개의 정수 인수를 사용합니다.

  1. 머리카락 길이
  2. 탑의 길이

골프에 관한 모든 팁을 주시면 감사하겠습니다.

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

온라인으로 사용해보십시오!


글쎄, 이미 훨씬 짧은 젤리 답변이 있습니다
Cœur

0

R, 117 바이트

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

약간 길고 꽤 골프를 칠 수 있습니다. 순서대로 STDIN에서 입력을받습니다 Tower, Hair.


어 오; 이것은 실제로 입력으로는 작동하지 않습니다1 4
Giuseppe


0

파이썬 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,로 시작하는 문자열의 반올림 차이의 3 분의 2가 oa뒤 따르는 단일 문자열 h, 나머지 ao반복 된 양 , 마지막으로으로 시작 하는 문자열 을 작성합니다 h!!. 그러면 반환 값은 슬라이스 표기법으로 시작 B하거나 A슬라이스 표기법을 통해 매 두 번째 문자 [h>t::2]입니다.


0

펄, 107 바이트

머리카락 길이를 먼저, 타워 길이를 2 초로 설정합니다.

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 칸 더 멋지게 보이게 만들 수 있습니다.
Roman Gräf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.