ラプンツェル、ラプンツェル、あなたの髪を失望させます!


20

説明

誰もがラプンツェルと王子のおとぎ話を知っていると思います。そうでない人のために:ここでそれを読んでください。しかし、ラプンツェルは髪を切ったばかりだったので、王子を登らせるのに十分な長さではなかったかもしれません!彼女はとても悲しくなります。

チャレンジ

あなたの仕事は、王子が彼女の髪を落とすように彼女を求めるときにラプンツェルが言っていることを評価する関数を書くことです。s Aaaah!の数がa同じであることでveeeery幸せと言いlength of her hair - height of the towerます。それ以外の場合は、彼女の髪は、十分な長さを持っていない、と彼女は泣いて開始しますBooho!。ここで、osの前hの平等な三分の二height of the tower - length of her hair、及びoS hは休息された後。oの後のs の数はB丸める必要があるため、を取得2.6する場合は3 oがあり、その他はの後になければなりませんh

I / O

正の整数(nullを含む)は、引数として、リストとして、または2つの単一の数字として、最も便利な順序で与えられますが、それらの順序を指定する必要があります。出力として、ラプンツェルが言っていることを印刷します。

テストケース

テストケースでは、最初の数字は髪の長さです。

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

これはなので、バイト単位の最短回答が勝ちです!


5
それで、塔の高さが下がったら彼女は降りられません0か?ところで、正の整数(nullを含む) == _非負の整数:)
Stewie Griffin

2
最初の投稿でこれを行うつもりでしたが、メインに投稿する前に課題を投稿してフィードバックを得ることができるSandboxについてお話ししたいと思います。これは非常に興味深い挑戦のように思えますが、人々は夢中になります。
ケアニアン共犯

4
@StewieGriffinうん、彼女の髪の長さ0も仮定しています。それでも、彼女は窓から出なければならず、安全性に関する制限もここに適用されます!彼女が首を骨折した場合、彼と結婚する方法はありません。
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€œs3ゼロのdiv を使用するというアイデアから始めて、それから上記のはるかに長いコードでそれを解決した後、同じ長さのケースを特別なケースにする必要がありました。今日は別の方法を試して実装しようと思ったが、すでにやったようだ。
ジョナサンアラン

...私は25-30バイトを考えていたことを思い出してください:)
ジョナサン・アラン


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に表示されるa を忘れたようです。
エリックアウトゴルファー

@EriktheOutgolfer:お知らせいただきありがとうございます。コードに準拠するように説明を修正しました:)
Emigna

ああ、あなたはあなたの説明に間隔の問題があります。
エリックアウトゴルファー

@EriktheOutgolfer:わかりません。それらが2本の対角線にあるという事実を意味する場合、それはif-elseの意図的な分離であり、使用される水平スペースを減らします。他に何かがある場合、私は盲目でなければなりません。
エミグナ

ああ、私はその中の無関係な空白と混同していた...
エリックアウトゴルファー

4

Javascript、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|0、7バイトの節約にも使用できます。

@Okiは、そのエラーを指摘し、より短い丸めを見せてくれてありがとう!
DanTheMan

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


2

ゼリー、32バイト

_‘”aẋŒt;⁾h!ɓ_÷1.,3+.”oẋ“Bh!”żð>?

オンラインでお試しください!

-1 ジョナサン・アランに感謝します。

完全なプログラムとしてのみ機能します。

引数は順番です:髪、塔


置き換えることにより、バイトを保存ær0して+.
ジョナサン・アラン

@JonathanAllan Oohそれは確かに動作します。(いまいましい2バイトの組み込み)
エリックアウトゴルファー

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ます。



0

ゼリー84 76バイト

かなり長いですが、投稿しないようにこれに時間をかけすぎました。2つの整数引数を取ります。

  1. 髪の長さ
  2. 塔の長さ

これをゴルフするためのヒントをいただければ幸いです。

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

オンラインでお試しください!


さて

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
ジュゼッペ


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繰り返し文字列の丸められた差の3分の2が続き、その後に1つh、残りのao繰り返し、最後にが続きh!!ます。戻り値は、BまたはAスライス表記法で始まる2文字ごとになります[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スペースで意図的に見やすくすることができます。
RomanGräf17年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.