頭、肩、膝とつま先、膝とつま先


31

前書き:

私たちは皆それを知っていると思うし、おそらく「ヘッド、ショルダー、膝、つま先」の子供の歌のように、多くの異なる言語に翻訳されていると思います。

頭、肩、膝とつま先、膝とつま
先頭、肩、膝とつま先、膝とつま先
、目と耳と口と鼻頭
、肩、膝とつま先、膝とつま先
wikipedia


チャレンジ:

入力:正の整数。

出力:入力に基づいて、n番目のインデックスとして次の単語のいずれかを出力します。

head
shoulders
knees
toes
eyes
ears
mouth
nose

ここでは、ボディ部分にインデックスが追加されます。

Head (0), shoulders (1), knees (2) and toes (3), knees (4) and toes  (5)
Head (6), shoulders (7), knees (8) and toes (9), knees (10) and toes (11) 
And eyes (12) and ears (13) and mouth (14) and nose (15)
Head (16), shoulders (17), knees (18) and toes (19), knees (20) and toes (21)

Head (22), shoulders (23), knees (24) and toes (25), knees (26) and toes  (27)
Head (28), shoulders (29), knees (30) and toes (31), knees (32) and toes (33) 
And eyes (34) and ears (35) and mouth (36) and nose (37)
Head (38), shoulders (39), knees (40) and toes (41), knees (42) and toes (43)

etc.

チャレンジルール:

  • もちろん、0インデックスの代わりに1インデックスの入力を使用できます。ただし、回答で使用したものを指定してください。
  • 出力では大文字と小文字が区別されないため、大文字で出力する場合は問題ありません。
  • 少なくとも1,000までの入力をサポートする必要があります。

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、コードゴルフ以外の言語で回答を投稿しないようにしないでください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターを持つ関数/メソッド、完全なプログラムを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンクを追加してください。
  • また、必要に応じて説明を追加してください。

テストケース(0から始まる):

Input:  Output:
0       head
1       shoulders
7       shoulders
13      ears
20      knees
35      ears
37      nose
98      knees
543     nose
1000    knees

3
ほとんどの回答ではおそらく入力が定数配列への循環インデックスとして使用されるため、kolmogorov複雑度タグが追加されました。定数配列の生成はバイトカウントを支配します。
マーティンエンダー

@MartinEnderありがとう。私は間違って、kolmogorov-complexity常に同じ固定出力を持つ回答にのみ使用しましたが、今ではコード内の固定出力文字列についてであり、ゴルフのパターンを見つける(または@Enigmaの05AB1E回答のようにエンコードする)ことがわかりました。追加していただきありがとうございます。このチャレンジに関連するタグがどれであるかはあまりわかりませんでした。これは、Sandboxの(残念ながら未回答の)質問の1つでした。
ケビンCruijssen


1
@KevinCruijssen少なくともあなたの質問には+1が見つかりました:)(楽観的な発言)を使用してサンドボックスを検索できますinquestion:2140 shoulders
エリックアウトゴルファー

3
誰が、この曲は一日中自分の頭の中で立ち往生しましたの...?
ケビンCruijssen

回答:


12

05AB1E36 35 34バイト

“‡ä¾ØsÏ©s¸±s“#2䤫Г—íÖÇ©¢ÄÓ#s)˜è

オンラインでお試しください!またはテストスイートとして

説明

“‡ä¾ØsÏ©s¸±s“                        # dictionary string 'head shoulders knees toes'
             #                       # split on spaces
              2ä                     # split in 2 parts
                ¤                    # get the last part ['knees', 'toes']
                 «                   # concatenate and flatten
                                     # STACK: [['head', 'shoulders'], ['knees', 'toes'], 'knees', 'toes']
                  Ð                  # triplicate
                   “—íÖÇ©¢ÄÓ        # dictionary string 'eyes ears mouth nose'
                             #s      # split on spaces and swap top 2 elements of stack
                               )˜    # wrap stack in a list and flatten
                                 è   # index into list with input

つまり、リスト['head', 'shoulders', 'knees', 'toes', 'knees', 'toes', 'head', 'shoulders', 'knees', 'toes', 'knees', 'toes', 'eyes', 'ears', 'mouth', 'nose', 'head', 'shoulders', 'knees', 'toes', 'knees', 'toes']を作成し、入力(0インデックス)でリスト にインデックスを付けます。


4
@KevinCruijssen:説明は次のようになります:)ゴルフ言語imoにはかなり必須です。
エミグナ

‡ä¾ØsÏ©s¸±s各単語が2文字であることを考えると、奇妙に見えます。それは何か他のものですか?
エリックアウトゴルファー

2
@EriktheGolfer:はい、辞書で単数sshoulder, knee, toeである3つは複数形にするためにあります。eyes, ears辞書ですでに複数形になっているため、文字列が予想される偶数の長さになるため、これは必要ありません。
エミグナ

ああ、彼らは私を混乱させました。ありがとう。
エリックアウトゴルファー

31

JavaScript(ES6)、91 88 87バイト

n=>'knees,toes,head,shoulders,eyes,ears,mouth,nose'.split`,`[(245890>>(n%22&~1))&6|n%2]

使い方

常に一緒に現れる4つの異なる単語のペアがあります。「head」の後には常に「shoulders」、「knees」の後には「toes」などが続きます。

したがって、次のインデックスを使用できます。

00: [ 'knees', 'toes' ]
01: [ 'head', 'shoulders' ]
10: [ 'eyes', 'ears' ]
11: [ 'mouth', 'nose' ]

そして、シーケンス全体を(逆順で)次のバイナリマスクに圧縮します。

00 00 01 11 10 00 00 01 00 00 01

[ 'knees', 'toes' ]最初のペアとして使用して、できるだけ多くの先行ゼロを取得します。

このシーケンスに余分な0ものを追加して、抽出された値に2をあらかじめ乗算します。

0b00000111100000010000010 = 245890

したがって、正しい単語の最終的な式:

(245890 >> (n % 22 & ~1)) & 6 | n % 2

テストケース


10

パイソン2、158の 148 137 128 114 109 104バイト

ルックアップテーブルはより良いようです。また、大きな文字列を短くして、アイテムを並べ替えました。リストとして文字列を使用してくれたRodに感謝します。

c=int('602323'*2+'4517602323'[input()%22])
print"smkteehnhonoyaeooueeerasutesssdelhs"[c::8]+"ders"*(c<1)

初期ソリューション:

n=input()%22
n-=10*(n>15)
if n>=12:n-=8
else:n%=6;n-=2*(n>3)
print"hskteemnehnoyaooaoeeerusduessste ls   h  d       e       r       s"[n::8].strip()

1
非常に独創的な答え!+1。しかし、うーん、完全な文字列を使用するほとんどの答えはこれよりも短いです。それでも、私はあなたが文字列にある種のパターンを見るために取った余裕が好きです!そのためのシャポー。
ケビンCruijssen

:私はあなたが文字列にこれを行うことによって、この肩を作ることができると思いhskteemnehnoyaooaoeeerusduessste ls h dますが、言葉が「肩」であると想定している知っていれば「ERS」を付加した後と:)
カーデ

1
cを使用c=int('602323'*2+'4517602323'[input()%22])してドロップするだけですh
ロッド

1
[i%22]1回目、[input()%22]2回目
ロッド

1
@Rod申し訳ありませんが、コードを十分に長く見ると目が見えなくなります。
カールナップ


4

Python 2、97 90バイト

それを行う数学があるかもしれないので、私は単語リストを作成する必要はありませんが、これは今のところ動作します!

lambda n,k='head shoulders '+'knees toes '*2:(k*2+'eyes ears mouth nose '+k).split()[n%22]

7バイトを保存してくれたFlp.Tkcに感謝します:)


1
私は同様の解決策を得ましたが、split()それを短くするために使用しました:k='head shoulders '+'knees toes '*2 print(k*2+'eyes ears mouth nose'+k).split()[input()%22]
FlipTack

申し訳ありませんが、「鼻」の後にスペースが必要です:)
FlipTack

@ Flp.Tkcええ、私はそのことに気付いたばかりです:)すぐに更新します!
ケード

4

Java 7、155 137 131 123 111 110 110バイト

String c(int i){return"knees,toes,head,shoulders,eyes,ears,mouth,nose".split(",")[(245890>>(i%22&~1))&6|i%2];}

@Neilのおかげで-12バイト。@Arnauldの驚くべき答えの
ポートを恥知らずに作成することにより、-1バイト。

Javaは0でインデックス付けされているため、私はこれを使用しました。

未ゴルフ&テストコード:

ここで試してみてください。

class M{
  static String c(int i){
    return "knees,toes,head,shoulders,eyes,ears,mouth,nose".split(",")
      [(245890>>(i%22&~1))&6|i%2];
  }

  public static void main(String[] a){
    System.out.println(c(0));
    System.out.println(c(1));
    System.out.println(c(7));
    System.out.println(c(13));
    System.out.println(c(20));
    System.out.println(c(35));
    System.out.println(c(37));
    System.out.println(c(98));
    System.out.println(c(543));
    System.out.println(c(1000));
  }
}

出力:

head
shoulders
shoulders
ears
knees
nose
ears
knees
nose
knees

1
String c(int i){return "head,shoulders,knees,toes,knees,toes,eyes,ears,mouth,nose".split(",")[(i+16)%22%16%10];}112バイトのみです。
ニール

コメントからコピーしようとすると、Stack Exchangeのおかげで、不可視のバイトが追加されます。
ニール

@Neil Ok、私はバカです。昨日の夜遅くにいかに120を数えたかわかりません。たぶん手遅れだったかもしれません。スペース)、ありがとうございます!
ケビンCruijssen

3

C、153バイト 141バイト

*b[]={"head","shoulders","knees","toes","eyes","ears","mouth","nose"};i;char*g(a){a%=22;i=(a+4)%10;return b[a<4?a:(a&12)>8?a-8:i<2?i:a%2+2];}

4バイトの@cleblancに感謝します。bをグローバルに宣言すると、intへのキャストに関する大量の警告がスローされますが、私にとっては壊れませんでした。

ゴルフをしていない:

*b[]={"head","shoulders","knees","toes","eyes","ears","mouth","nose"};
i;
char* g(a) {
    a%=22;
    i=(a+4)%10;
    return b[a < 4        ? a
            :(a & 12) > 8 ? a-8
            :i < 2        ? i
            :               a % 2 + 2];
}

それは最小の答えではありませんが、私はテクニックが好きで、いくつかのパターンを見つけるのが楽しかったです。

変更ログ:

  • b回避するためにグローバルに移動char(4バイト)
  • a > 11 && a < 16=> (a & 12) > 8(2バイト)
  • i=(a-6)%10=> i=(a+4)%10そのためi < 2 && i >= 0=> i < 2(6バイト)

1
これをもう少し下にゴルフできます。グローバルスコープにBを[]移動することによって、それはこのように、char *を使用せずに宣言することができ*b[]={"head","shoulders","knees","toes","eyes","ears","mouth","nose"},i'、その後、リターンbを置き換える[...]プットと(B [...])は143バイトにそれを得ることができます
cleblanc

+1そして、@ cleblancの提案に加えて、両方&&をに変更することもできます&
ケビンCruijssen

私は、@ cleblancがbをグローバルに宣言することをどのように提案しているか興味があります。コンパイラーは* int []になると言っており、サイズの違いがコードを壊すと思った。それはそうではなかったので、ありがとう!
nmjcman101

2

JavaScript(ES6)91 89バイト

f=
n=>((d='head:shoulders:'+(b='knees:toes:')+b)+d+'eyes:ears:mouth:nose:'+d).split`:`[n%22]

console.log(f.toString().length)
console.log(f(0) === 'head')
console.log(f(1) === 'shoulders')
console.log(f(7) === 'shoulders')
console.log(f(13) === 'ears')
console.log(f(20) === 'knees')
console.log(f(35) === 'ears')
console.log(f(37) === 'nose')
console.log(f(98) === 'knees')
console.log(f(543) === 'nose')
console.log(f(1000) === 'knees')


1
いいね!+1。あなたの答えをJava 7に移植すると、@ Arnauldのすでに私の答えよりも短い回答と比較して、-7バイトの固体です。;)ありがとう!
ケビンCruijssen

1
以下を使って創造的にすることでバイトを節約しました%n=>`head:shoulders:knees:toes:knees:toes:eyes:ears:mouth:nose`.split`:`[(n+16)%22%16%10]
ニール

2

R、95バイト

c(o<-c("head","shoulders",y<-c("knees","toes"),y),o,"eyes","ears","mouth","nose",o)[scan()%%22]

ルックアップテーブルとして機能する文字ベクトルを作成します。stdin(1-indexed)から入力を受け取り%%22、対応する身体部分を見つけます。

ボーナス:%%ベクトル化されているため、これはベクトル入力でも機能します。

R-fiddleのテストケースR-fiddlescanでは機能しないため、これは名前付き関数であることに注意してください)


2

jq、80文字

(77文字のコード+ 3文字のコマンドラインオプション)

((("head shoulders "+"knees toes "*2)*2+"eyes ears mouth nose ")*2/" ")[.%22]

サンプル実行:

bash-4.3$ jq -r '((("head shoulders "+"knees toes "*2)*2+"eyes ears mouth nose ")*2/" ")[.%22]' <<< 1000
knees

オンラインテスト-rURLの受け渡しはサポートされていません-自分でRaw出力を確認してください。)


2

WinDbgを、207の 157 151バイト

ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41

ボディ部分のオフセット/長さをASCII文字としてエンコードすることにより、-50バイト。

オフセット/長さを検索するときにローカル変数を使用して-6バイト。

入力は、疑似レジスターに設定された値で行われ$t0ます。

使い方:

* Initialization, writes this string at address 0x2000000. The nonsense after the body parts
* are the offsets and lengths of the body parts in the first part of the string, each of
* which is incremented by 0x41 to make it a printable ascii character.
ea 2000000 
        "headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";


* Display the output:
r$t4=(@$t0%16)*2+2000027
da1FFFFBF+by(@$t4) Lby(@$t4+1)-41

* Display output explanation:
r $t4 = (@$t0%16)*2+2000027   * Set $t4 = input, @$t0, mod 22, doubled +0x2000027
by(@$t4)                      * byte_at(@$t4)-0x41 is the {Offset} into the string 
                              * for the start of output. The -0x41 is already subtracted
                              * from 0x2000000 to make 0x1FFFFBF.
Lby(@$t4+1)-41                * byte_at(@$t4+1)-0x41 is the {Length} of the output.
da 1FFFFBF+{Offset} L{Length} * Display {Length} chars from {Offset} of the above string.

サンプル出力:

0:000> r$t0=0
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
02000000  "head"


0:000> r$t0=1
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
02000004  "shoulders"


0:000> r$t0=7
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
02000004  "shoulders"


0:000> r$t0=0n13
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
0200001a  "ears"


0:000> r$t0=0n20
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
0200000d  "knees"


0:000> r$t0=0n35
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
0200001a  "ears"


0:000> r$t0=0n37
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
02000023  "nose"


0:000> r$t0=0n98
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
0200000d  "knees"


0:000> r$t0=0n543
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
02000023  "nose"


0:000> r$t0=0n1000
0:000> ea2000000"headshoulderskneestoeseyesearsmouthnoseAEEJNFSENFSEAEEJNFSENFSEWE[E_FdEAEEJNFSENF";r$t4=(@$t0%16)*2+2000027;da1FFFFBF+by(@$t4) Lby(@$t4+1)-41
0200000d  "knees"

2

PHP、91 102 118 128 129バイト

<?=[head,shoulders,knees,toes,eyes,ears,mouth,nose]['0123230123234567012323'[$argv[1]%22]];

0インデックス付き

str_splitの削除後、91個まで、PHP文字列がchar配列としてアクセス可能であることに気づかなかった(PHP 5以降のもの?)

文字列引用符を削除し、通知を許可するためのinsertusername提案のおかげで、102個まで


-16バイト:すべての削除'のように、周りの単語を'head'となりheadなど
insertusernamehere

これに関するルールは
わかり

1
はい。ただし、これはサイトのルールではまったく問題ありません。通知と警告は無視できます。
insertusernamehere

@ CT14.ITは警告ではありませんが、通知です。「PHP 5.3以降、デフォルト値はE_ALL&〜E_NOTICE&〜E_STRICT&〜E_DEPRECATEDです。この設定はE_NOTICE、E_STRICTとE_DEPRECATEDレベルのエラーが表示されない「 - 。についてPHPのマニュアルをerror_reporting
マナトワーク

1
str_split()は役に立たないようです
Crypto

1

ゼリー、55バイト

“¥ḷne“¥ṇṭḲ»ẋ2ṭ“¢1$“@⁼5⁼»µẋ2;“¥ḳVo“¥ḳ'k“£Qo“£³ạ»;⁸FḊḲ
ị¢

オンラインでお試しください!(1ベースのインデックス)

いい加減にして!本当に?

おまけとして、これは私が一番上の行の代わりに使用することになっていた圧縮文字列です。

“¡¦ṡb[wfe=⁺żɦ4Gƈġhḳ"ẇ⁴ż>oH¹8ṡʠʠḟṀUṿḶ>¬Þ:ĖẇrṗṁɼlDṫỤ¬ȷ⁶Dḥci*⁻³GḲOÞạṖṃ\»

両方ともこの文字列をエンコードします:

head shoulders knees toes knees toes head shoulders knees toes knees toes eyes ears mouth nose head shoulders knees toes knees toes

私は今すぐ運動に行くべきだと思います:P


1

Powershell、91バイト、ゼロインデックス付き

$a='head shoulders '+'knees toes '*2;($a*2+'eyes ears mouth nose '+$a).Split()[$args[0]%22]

非常に単純なアプローチで、スペースでコンパイルし、最後に分割することにより、可能な場合は文字列の乗算を使用して最初の22項目の配列を生成します。(分割は、配列と同等のセットアップよりも2バイト短くなります)、入力のモジュラスを使用してその配列内のポイントを見つけるだけで、厳密に興味のあるものや言語固有のものではありません。

テストケース:

PS C:\++\golf> 0..1000|%{.\hskt $_}
head
shoulders
knees
toes
knees
toes
head
shoulders
knees
toes
knees
toes
eyes
ears
mouth
nose
head
shoulders
knees
toes
knees
toes
head
shoulders
knees
toes
....


1

ルビー、81バイト

ゼロインデックスを使用するラムダ関数。

->n{("head shoulders#{" knees toes "*2}eyes ears mouth nose".split*2)[n%22-6&15]}

説明

次の配列を生成し、そのうちの最初の16要素を使用して、曲の正しい行2,3,4をカバーします。

%w{head shoulders knees toes knees toes
   eyes ears mouth nose
   head shoulders knees toes knees toes

   eyes ears mouth nose}                  #last 4 elements not used

22を法とするnを1つの節に減らし、6を引きます。これで、インデックス6(たとえば)が0に変更され、正しい単語を指します。曲の最初の行を指すインデックス0..5は負になりました。曲の1行目を4行目にマッピングするために(括弧&15と同じです%16が、括弧を使用する必要はありません)を使用します。したがって、インデックス0-> -6->10

テストプログラムで

f=->n{("head shoulders#{" knees toes "*2}eyes ears mouth nose".split*2)[n%22-6&15]}

#call as below to test index 0..43
44.times{|i|p f[i]}

興味深いインデックス式。しかし、それなしでも同じ長さを達成できます->n{(((%w{head shoulders}+%w{knees toes}*2)*2+%w{eyes ears mouth nose})*2)[n%22]}
。-マナトワーク

1

Befunge、 129 119バイト

0インデックス付き

&29+2*%:2/v>00p>%#7_v
+%2\-"/"g2<|<:-1g007<"head*shoulders*knees*toes*eyes*ears*mouth*nose"p00
02202246022>$$:>7#:%#,_@

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

説明

以下のようアルノーは指摘し、言葉はペアで来るので、我々はわずか11値のインデックスを持って、その後、ペアで適切な単語を取得する単語番号%2を追加します。単語は、スペースを節約するためにアスタリスクで区切られた単一の文字列としてスタックにプッシュされます。アスタリスクのみが7の倍数であるため、7を法とするchar値を取得して、単語の区切りをテストします。

&29+2*%               n = getint() % 22             // % 22 to ensure it's in range
:2/2g                 i = index_array[n/2]          // we use n/2 because words are paired
-"/"                  i -= '/'                      // convert from ASCII to 1-based value
\2%+                  i += n%2                      // get the correct word in the pair
00p                   index = i                     // save for later

"head*shoulders*knees*toes*eyes*ears*mouth*nose"    // push all the words onto the stack

700g1-:|              while (index-1 != 0) {        // the 7 is used in the drop loop   
  00p                   index = index-1             
  >%#7_                 do while (pop() % 7)        // drop up to the next '*' (%7==0)
                      }                    

$$                    pop();pop()                   // get rid of index and extra 7

: 7 % _               while ((c = pop()) % 7)       // output up to the next '*' (%7==0)
 > : ,                  putchar(c)

1

SQL 2005 747バイト

ゴルフ:

GO
CREATE PROCEDURE H @n INT AS BEGIN IF NOT EXISTS(SELECT*FROM R)BEGIN INSERT INTO R VALUES('head')INSERT INTO R VALUES('shoulders')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('head')INSERT INTO R VALUES('shoulders')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('eyes')INSERT INTO R VALUES('ears')INSERT INTO R VALUES('mouth')INSERT INTO R VALUES('nose')INSERT INTO R VALUES('head')INSERT INTO R VALUES('shoulders')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')END SELECT W FROM R WHERE I=@n%22 END

ゴルフをしていない:

GO
CREATE PROCEDURE H
@n INT 
AS 
BEGIN IF NOT EXISTS(SELECT*FROM R)
BEGIN 
INSERT INTO R VALUES('head')INSERT INTO R VALUES('shoulders')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('head')INSERT INTO R VALUES('shoulders')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('eyes')INSERT INTO R VALUES('ears')INSERT INTO R VALUES('mouth')INSERT INTO R VALUES('nose')INSERT INTO R VALUES('head')INSERT INTO R VALUES('shoulders')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')INSERT INTO R VALUES('knees')INSERT INTO R VALUES('toes')
END 
SELECT W FROM R WHERE I=@n%22 END

最初の列が自動インクリメントされる次のようなテーブルが必要です。

ここに画像の説明を入力してください

これは、インデックスが1つの回答です。テーブルは、ストアドプロシージャが初めて作成されたときに作成されます- INSERT残念ながら、この機能はでのみ使用できます>=SQL 2008。この後%22、他の回答のトリックを使用します。テーブルにデータが入力されると、最後の部分のみが使用されます。

SELECT W FROM R WHERE I=@n%22

Input:  Output:
R 1       head
R 2       shoulders
R 8       shoulders
R 14      ears
R 21      knees
R 36      ears
R 38      nose
R 99      knees
R 54      nose
R 1001    knees

すべてのINSERTを1つのステートメントで実行できない」理由 2008年以降、SQLでこのようなことが可能になるはずはありませんか?
ケビンCruijssen

@KevinCruijssen私はSQL Server 2008 R2を使用しているので奇妙です...私はもう少しグーグルをしましたが、明らかにそれはデータベースの「互換性レベル」と関係があるようです。変更するには-2005に設定され、これが最大値であるため、この機能はありません。回答でSQLバージョンを指定するか、適切に短縮できない場合は回答を削除する必要がありますか?その...私のテキストの多くを救うなど全焼
ピート・アーデン

どちらでもいいので、あなたの電話です。私は通常、指定したJava 7でゴルフをします。ほとんどの場合、Java 8では短い回答が利用できるためです。2005年も同じように指定できます。
ケビンCruijssen

@KevinCruijssenええ、私はJavaとPythonのためにそれをしている人々を見てきました。本当に歓声:)、私は2005を指定しますので、いずれかのコードをテストできずに変更をしたいと思い
ピート・アーデン

1

bash(with ed)、83文字

1インデックス付き

ed<<<"a
head
shoulders
knees
toes
eyes
ears
mouth
nose
.
3,4t4
1,6y
6x
$(($1%22))"

サンプル呼び出し:

 $ bash test.sh 1001
 knees

1

dc、135バイト

6[head]6[:add6-r;ar:adA+r;ar:a]dshx7[shoulders]7lhx8[knees]8lhxA 2;aAlhx9[toes]9lhxB 3;aBlhx[eyes]C:a[ears]D:a[mouth]E:a[nose]F:a22%;ap

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

配列はdc一度に要素を構築する必要があり、これはこの演習の矢面に立ちます。以来、私たちのアレイでは、私たちはそれらをポップ一度の目'、「耳」、「口」、および「鼻が」のみ表示されます。しかし、他の人のために、我々は次のようにスタック上にそれらを置くことによって、いくつかのバイトを保存するx[head]x場合は、X 3つの値の中間である場合、マクロを実行[:add6-r;ar:adA+r;ar:a]dshxして配列に入れ、引き戻し、6より小さい同じ値に入れ、引き戻し、最後にもう一度元の値に入れますプラス10。dc10進モードでも16進数を使用でき、減算Aは加算より1バイト少ないため、中間値を使用します16-中間値がすべて15未満であるため、これも機能します。ひざとつま先を2回行う必要があり、それを整理するために十分にスマートにすることは、マクロを2回実行するよりも高価です。ただし、ここで文字列のコピーを再度書き込むのではなく、以前に保存したコピーを読み込むことで、ここでバイトを節約します(B 3;aBB[toes]B-これで合計3バイト節約できると思います)。

配列を構築したら22%、あと;apは配列からプルして印刷するだけです。


0

C#6、138バイト

string F(int i)=>(i+10)%22<4?"eyes,ears,mouth,nose".Split(',')[(i+10)%22%4]:"head,shoulders,knees,toes,knees,toes".Split(',')[(i+6)%22%6];

repl.itデモ

Ungolfed +コメント:

string F(int i)=>
    // Is it eyes/ears/mouth/nose?
    (i+10)%22<4
        // If yes, then set index to 4-word line and take modular 4
        // String array constructed by splitting comma-delimited words
        ? "eyes,ears,mouth,nose".Split(',')
            [(i+10)%22%4]
        // Else set index to last 6-word line and take modular 6
        : "head,shoulders,knees,toes,knees,toes".Split(',')
            [(i+6)%22%6];

あなたは、文字列を結合し、単一を使用することができますSplit(と三元としてあなたと同じチェックを持っている?:(と角括弧内)+4のように、第二部のため): string F(int i)=>"eyes,ears,mouth,nose,head,shoulders,knees,toes,knees,toes".Split(',')[(i+10)%22<4?(i+10)%22%4:(i+6)%22%6+4];126バイト
ケビンCruijssen

0

Excel、146バイト

=MID("Head     ShouldersKnees    Toes     Eyes     Ears     Mouth    Nose",CHOOSE(MOD(MOD(MOD(B1+16,22),16),10)+1,1,10,19,28,19,28,37,46,55,64),9)

@Neilを使用MOD(MOD(MOD(B1+16,22),16),10)して15バイトを節約します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.