低すぎるゲームを作るための最短コード-高すぎるゲーム


20

ゲームを低すぎる---高すぎる(TLTH)最短コード(バイト単位)で作成する必要があります

ゲームのルール:

  1. コンピューターは整数範囲(-32768..32767)から乱数を選択します。
  2. ここで、数字を考えて入力します。
  3. コンピューターは、選択した番号よりも小さい(TOO LOW)か大きい(TOO HIGH)かを判断します。
  4. 数字を推測すると、コンピューターにが表示されますCongrats! You found the number!

コード規則:

  1. 文字を使用しないでくださいTOLWHIおよびG文字列または文字リテラルで(小文字でも大文字でもありません)。
    例えば:

    tolower(T);  // Acceptable  
    cout<<"T";   // Unacceptable
    char ch='T'; // Unacceptable
    
  2. ゲームを開始する前にコードでゲームルールを表示できる場合は、300バイトを削除します。

  3. コードで次のようにターン数をカウントし、ゲーム終了時に取得したターン数を表示できる場合は、50バイトを削除します。

    "Congrats! You found the number in n turns!"
    

    ここで、nは

    "Congrats! You found the number!"  
    
  4. 入力した数値が整数範囲外であることをコードがユーザーに通知できる場合は、スコアから25バイト削除します。
    例えば:

    Enter the number: 40000  
    Sorry! This number is out of range
    Please Enter the number again:  
    
  5. コードが組み込みのランダム関数からではなく乱数を取得する場合は、25バイトを削除します。

  6. コードに「おめでとう」の色が表示されている場合は、10バイトを削除します(デフォルトの白以外の色を選択します)。

提出規則:

  1. すべての報奨金計算とその説明とともに、言語名とスコアの見出しを追加します。

  2. あなたのゴルフとゴルフのないコードを投稿してください。

勝者

  1. 最小バイトの答えが勝ちです。
  2. 同点の場合、より多くの票がある答えが勝ちます。
  3. 勝者は5日後に選ばれます。

編集:コードの出力を表示してください。
EDIT-2:コードルールのルール-2、3、4のルール1は無視できます

幸運のベスト:]


2
これはゲームルールの有効な説明ですか?WhileURong(USayNumbr;ISayBigrOrSmalr)
ジョン・ドヴォルザーク

1
得点の説明に基づいて、コードゴルフも人気コンテストもありません。これはコードの挑戦です(人気のタイブレーカーを使用)。タグwikiをご覧ください。課題に適切にタグを付けるための編集を提案しました。ps-ジンクス!@mniip
ジョナサンヴァンマトレ

1
@JonathanVanMatre私には、タイブレーカーにもかかわらず、言葉遣いはcode-golfのように聞こえます
mniip 14年

21
また、他のプレイヤーが回答を改善するのを支援することに対するルールが特に好きではありません。プリンセス・ブライドのアンドレ・ザ・ジャイアントの不滅の言葉で、「それはあまりスポーツマンらしくない」。
ジョナサンヴァンマトレ14年

1
この質問はそうです。。。デビッドH.アール
マイケルスターン14年

回答:


2

JavaScript(-210ポイント(190バイト- 300 (ルールの場合) - 50 (推測の数の場合) - 25 (組み込みの乱数ソースを使用しない場合) - 25 (入力が符号付きの範囲外かどうかを知らせるため16-ビット整数)):

ゴルフ:

alert('Guess number',n=(m=2<<15)/2-new Date%m);for(z=0;a=+prompt(++z);)alert(a>m|a<1-m?m+'-'+-~-m:a==n?'Great! You found the number in '+z+' turns':atob('VE9P\x47E'+(a>n?'hJR0g=':'xPVw==')))

完全なコード(適切にフォーマットされた):

var max = 2 << 15;
var random = max/2 - new Date%max;
var counter = 0;

while (1) {
    var guess = +prompt();

    ++counter;

    if (guess > max | guess < -~-max) {
        alert(-~-max + '-' + max); // Shows that the range is between -32767 and 32768
    } else if (guess > random) {
        alert('TOO HIGH');
    } else if (guess < random) {
        alert('TOO LOW');
    } else if (guess == random) {
        alert('Congrats! You found the number in ' + counter + ' turns');
        break;
    }
}

出力:

ALERT:  Guess number
PROMPT: 5
ALERT:  TOO LOW
PROMPT: 20000
ALERT:  TOO LOW
PROMPT: 30000
ALERT:  TOO HIGH
PROMPT: 25000
ALERT:  TOO HIGH
PROMPT: 22500
ALERT:  TOO HIGH
PROMPT: 21000
ALERT:  TOO HIGH
PROMPT: 20500
ALERT:  TOO HIGH
PROMPT: 20200
ALERT:  TOO LOW
PROMPT: 20400
ALERT:  TOO LOW
PROMPT: 20450
ALERT:  TOO LOW
PROMPT: 20475
ALERT:  TOO HIGH
PROMPT: 20460
ALERT:  TOO LOW
PROMPT: 20468
ALERT:  TOO HIGH
PROMPT: 20464
ALERT:  TOO LOW
PROMPT: 20466
ALERT:  TOO LOW
PROMPT: 34000
ALERT:  -32767-32768
PROMPT: 20467
ALERT:  Great! You found the number in 17 turns!
PROMPT: (nothing)

@IlmariKaronen申し訳ありませんが、間違えました。回答を更新しました。
歯ブラシ14年

おかげで、今では動作します...しかし、私が推測する場合は壊れているようです0。:-(また、TOO LOW/にスペースがあってはいけませんTOO HIGHか?
イルマリカロネン

19

Perl 5.10以降:159 144バイト-350 = -206ポイント

say"Guess 16 bit signed number";$==32767-rand 65536;say(TOO.$",$_<0?LOW:HIGH)while++$i,$_=<>-$=;say"Congrats! You found the number in $i turns!"

編集2:最近のルールの変更により、「おめでとう」メッセージに任意の文字列リテラルを使用できるようになり、元の159バイトのソリューションから15バイトを節約できます。古いコードと比較して、上記の新しいコードについて特に目新しいものや興味深いものはありません(p関数を削除し、say代わりに直接呼び出します)。この投稿の残りの部分では、以下に示す元のコードについて説明します。

sub p{say join$",@_}p Guess,16,bit,signed,number;$==32767-rand 65536;p(TOO,$_<0?LOW:HIGH)while++$i,$_=<>-$=;p Congrats."!",You,found,the,number,in,$i,turns."!"

うん、私は文字列を必要とするルール1の地獄を乱用しています、ときに持つことができます裸の単語?;-)

with perl -M5.010を実行して、Perl 5.10+ say機能を有効にします(または5バイトの追加コストでp関数の本体を置き換えprint join$",@_,$/ます)。

ボーナススコア:

  • −300ポイント:「ゲームを開始する前にゲームのルールを表示する」
  • −50ポイント:「ゲーム終了時に取られたターン数を表示する」

コードには厳密な意味で文字列リテラルが含まれていないため、厳密にはルール1は違反されていないと言えます。トリックは、Perlでは、なしuse strictで、既知の言語キーワードまたはサブルーチンに対応しない識別子は、それ自身の名前に単純に評価されるということです。関数pは、単語のリストを取得し、スペースで区切って出力します。

プレイスルーの例:

Guess 16 bit signed number
0
TOO HIGH
-10000
TOO LOW
-5000
TOO HIGH
-7500 
TOO LOW
-6250
TOO HIGH
-6875
TOO LOW
-6553
TOO HIGH
-6700
TOO HIGH
-6790
TOO LOW
-6745
TOO HIGH
-6767
TOO LOW
-6756
TOO HIGH
-6761
Congrats! You found the number in 13 turns!

編集:ああ、そうです、ルールは私がコードの非ゴルフバージョンも投稿する必要があると言っているので、ここに行きます。技術的には、「デゴルフ」です。通常、最初からコードゴルフプログラムを多かれ少なかれ完全にゴルフ形式で作成しているため、一部の部分を根本的に変更せずに「ゴルフ」最適化をすべて削除するのは難しい場合がありますプログラム作業。それでも、私は少なくとも空白、コメント、より意味のある関数/変数名を追加しようとしました:

sub output {
    # print all arguments separated by spaces, plus a newline:
    # (in the golfed code, I use the special variable $" instead of " " for a space)
    say join " ", @_;
}

# print the rules:
output Guess, 16, bit, signed, number;

# choose a random number between -32768 and 32767 inclusive:
# (in the golfed version, using the special variable $= allows
# the int() to be left out, since $= can only take integer values)
$number = int( 32767 - rand 65536 );

# loop until the input equals the chosen number, printing "TOO LOW / HIGH":
# (the loop ends when $diff == 0, since 0 is false in Perl)
output (TOO, $diff < 0 ? LOW : HIGH) while ++$count, $diff = (<> - $number);

# print congratulations, including the loop count:
output Congrats."!", You, found, the, number, in, $count, turns."!";

追伸 別の方法として、文字列の代わりにベアワードを使用するだけではカンニングに感じない場合は、ベアワードでTOLWHIG 文字を使用しない(ただし、音訳演算子で使用する)182バイトのソリューションがあります。合計スコアが182 − 350 = −168ポイントの場合、引き続き同じボーナスが得られます。

sub t{pop=~y/kpqvxyz/tolwhig/r}say"Guess 16 bit signed number";$==32767-rand 65536;say uc t"kpp ".($_<0?qpv:xyzx)while++$n,$_=<>-$=;say t"Cpnzraks! Ypu fpund kxe number yn $n kurns!"

出力は上記とまったく同じに見えます。(元の)規則に従って、許可されているので、私は文字tを使用しi、規則を印刷します。ただし、これらの使用を排除しても、余分に2バイトしかかかりません。逆に、すべての出力を大文字にすると(上記のコメントに基づいて許可されているように見える)、3バイト節約できます。


それは素晴らしく賢い答えです!私からの1
Mukulクマール

これを見たので、あなたがペナルティを受けた場合、Ruby 1.8で打ち負かされるのかしらdef method_missing *args;args.join' ';end
カヤ14年

古き良きJavaScriptであなたを打ち負かしました!
歯ブラシ14年

14

Python 2:-80ポイント(270-300-50)

print"WhileURong(USayNumbr;ISayBigrOrSmalr)"
import random
r=random.randint(-32768,32767)
g=i=1
while g:g=cmp(input(),r);print("C\x6fn\x67ra\x74s! Y\x6fu f\x6fund \x74\x68e number \x69n %d \x74urns!"%i,"\x54\x4f\x4f \x48\x49\x47\x48","\x54\x4f\x4f \x4c\x4f\x57")[g];i+=1

スコアは270文字です。指示を示す場合は300文字、「おめでとう!」の推測数を示す場合は50点です。文字列、合計でマイナス80ポイント。

エスケープされていない文字列を含む、ゴルフのないバージョンのループ:

while g:
    g=cmp(input(),r)
    print ("Congrats! You found the number in %d turns!"%i,
           "TOO HIGH",
           "TOO LOW")[g]
    i+=1

組み込みcmp関数は、値が等しい場合は0を返し、最初の値が小さい場合は-1を返し、最初の値が大きい場合は1を返します。値を使用して文字列のタプルのインデックスを作成し、ループの終了条件として使用します。負のインデックス(-1など)を使用してシーケンスにインデックスを付けると、シーケンスの先頭からではなく、シーケンスの末尾からカウントされます。

XKCD 221のように、インポートをスキップ4して乱数として使用したいだけです(-25文字のボーナスの対象になりますか?)。

実行例(エラーが発生し、負の計算ができない場合):

WhileURong(USayNumbr;ISayBigrOrSmalr)
0
TOO HIGH
-16000
TOO LOW
-8000
TOO HIGH
-12000
TOO HIGH
-14000
TOO LOW
-13000
TOO HIGH
-13500
TOO HIGH
-13750
TOO LOW
-13625
TOO HIGH
-13712
TOO LOW
-13660
TOO HIGH
-13640
TOO HIGH
-13685
TOO HIGH
-13700
TOO LOW
-13695
TOO LOW
-13690
TOO LOW
-13687
Congrats! You found the number in 17 turns!

コードのサンプル出力を表示してください。
ムクルクマール14

2
この違反コードは規則1ではありませんか?WhileURong(USayNumbr; ISayBigrOrSmalr)には、1つ以上のOs、Ls、Ws、Hs、Is、およびGsが含まれます。
フォルス

@Cruncher:プログラムが終了するので、あなたが何を言っているのか分かりません。値を正しく取得するgと、ゼロになり、whileループが終了します。
Blckknght 14年

おっと@Blckknght、迅速な読み
たけた

@ForsYou can ignore Rule-1 for Rules-2,3 & 4 in Code Rules
たけ

13

JavaScript 293、-300(ルール)-50(表示を切り替える)-25(範囲警告)-25(ランダム関数なし)= -107(新しいスコア)

r=new Date%65536+~(z=32767);n=x="";for((A=alert)("\107uess my number, \111 \147\151ve feedback");(x=prompt())!=r;A(0>(x-~z^x-z)?"\164\157\157 "+(x>r?"\150\151\147\150":"\154\157\167"):"Ran\147e: "+~z+" - "+z))n++;A("C\157n\147ra\164s! Y\157u f\157und \164\150e number \151n "+ ++n+"\164urns!")

RGBの規則では、黒は色であると主張しますが、それはちょっとごまかします...

ああ、そして私は追加するかもしれません、破るルール#1もありません!

一連のアラートとプロンプトでの出力

ALERT: Guess my number, I give feedback
PROMPT: 0
ALERT: too low
PROMPT: 16000
ALERT: too low
PROMPT: 24000
ALERT: too low
PROMPT: 28000
ALERT: too high
PROMPT: 26000
ALERT: too high
PROMPT: 25000
ALERT: too low
PROMPT: 25500
ALERT: too high
PROMPT: 25250
ALERT: too low
PROMPT: 25375
ALERT: too high
PROMPT: 25310
ALERT: too low
PROMPT: 25342
ALERT: too low
PROMPT: 25358
ALERT: too low
PROMPT: 25366
ALERT: too high
PROMPT: 25362
ALERT: too high
PROMPT: 25360
ALERT: too high
PROMPT: 25359
ALERT: Congrats! You found the number in 16 turns!

未ゴルフコード:

r = (new Date)%65536+~(z=32767); //Generates random number in range based off date's milliseconds... I'd use epoch, but I need to conserve
n=x=""; // Sets count and input to blank, these change as time goes on
// The line below sets up a call for `alert`, provides the initial rules, and subsequent loops compares the prompt with the number, as well as sets up "too", "high",  "low" and "out of range" message strings, and provides the feedback
for((A=alert)("\107uess my number, \111 \147\151ve feedback");(x=prompt())!=r;A(0>(x-~z^x-z)?"\164\157\157 "+(x>r?"\150\151\147\150":"\154\157\167"):"Ran\147e: "+~z+" - "+z))
{
    n++; // adds one to count providing the number isn't guessed yet
}
alert("C\157n\147ra\164s! Y\157u f\157und \164\150e number \151n "+ ++n+" \164urns!") // Congratulates the player, and displays the correct number of turns taken

ルールを注意深く読んでいますか?よく使用すると、1つの出力でungolfedコードを掲示しなければならない
Mukulクマール

@MukulKumarは...ソート
WallyWest

あなたがあなたの答えを付けることによって4を節約することができますA=alert;し、すべてを置き換えるalertA。そしてもう1つは、アラートA(0>(x...をセミコロンの後に移動した場合ですprompt())!=r;)n++1
DocMax 14年

feedback if too high/low現在84文字を使用するように変更できますi give feedback60文字\151 \147\151ve feedbackを保存するために必要なのは24文字のみです。
corsiKa14年

1
私は間違っているかもしれませんがn++、forループから最後のアラートでx=prompt(n++)行う必要のないto ループに移動できると思います+ ++n+。これは、3救う
DocMax

7

Javascript、324バイト、スコア-76

[ルールの変更により更新されました]

  • 324バイト
  • ルールを表示するための-300
  • ユーザーが勝ったときのターンを示すための-50
  • -25は、ユーザーが範囲外の数値を入力したときにユーザーに通知するためのものです。
  • -25組み込みのランダムを使用しない場合(更新)

合計スコア:-76

ゴルフ:

function q(y){return y.replace(/./g,function(x){h=x.charCodeAt(0);return String.fromCharCode(h>32&h<58?h+32:h)})}d=o=32768;alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");for(a=1,n=new Date%(2*o)-o;d-n;a++)d=+prompt(a),alert(d>=o|d<-o?"BAD":d<n?q("4// ,/7"):d>n?q("4// ()'("):"Congrats! You found the number in "+a+" turns!")

これを台無しにしましょう。

まず、適切に識別されます(ただし、これは難読化されたコードではあまり良くありません):

function q(y) {
  return y.replace(/./g, function(x) {
    h = x.charCodeAt(0);
    return String.fromCharCode(h > 32 & h < 58 ? h + 32 : h)
  })
}

d = o = 32768;
alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");

for (a = 1, n = new Date % (2 * o) - o; d - n; a++)
  d = +prompt(), alert(d >= o | d < -o ? "BAD" : d < n ? q("4// ,/7") : d > n ? q("4// ()'(") : "Congrats! You found the number in " + a + " turns!")

次に、識別子の名前を変更します。

function unencrypt(encrypted) {
  return encrypted.replace(/./g, function(character) {
    charCode = character.charCodeAt(0);
    return String.fromCharCode(charCode > 32 & charCode < 58 ? charCode + 32 : charCode)
  })
}

guess = limit = 32768;
alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");

for (tries = 1, randomNumber = new Date % (2 * o) - o; guess - randomNumber; tries++)
  guess = +prompt(),
  alert(guess >= limit | guess < -limit ? "BAD" : guess < randomNumber ? unencrypt("4// ,/7") : guess > randomNumber ? q("4// ()'(") : "Congrats! You found the number in " + tries + " turns!")

したがって、暗号化解除機能は、ASCII 33(!)とASCII 58(:)の間のすべての文字を取得し、32を追加して、範囲内の文字に変換しますA-Z

すべての文字列を暗号化解除することにより、コードをさらに解読できます。

guess = limit = 32768;
alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");

for (tries = 1, randomNumber = new Date % (2 * o) - o; guess - randomNumber; tries++)
  guess = +prompt(),
  alert(guess >= limit | guess < -limit ? "BAD" : guess < randomNumber ? "TOO LOW" : guess > randomNumber ? "TOO HIGH" : "Congrats! You found the number in " + tries + " turns!")

最後に、いくつかの命令を他の場所に移動し、長い3進チェーンをifsとelseに置き換え、連結文字列を結合し、数学を単純化して読みやすくします。

guess = 32768;
alert("WhileURong(USayNumbr;ISayBigrOrSmalr)");

randomNumber = new Date % 65536 - 32768;

for (tries = 1; guess - randomNumber; tries++) {
  guess = +prompt(); // The preceding + is a golfing trick to convert string to number.
  if (guess > 32767 | guess < -32768) {
    alert("BAD");
  } else if (guess < randomNumber) {
    alert("TOO LOW");
  } else if (guess > randomNumber) {
    alert("TOO HIGH");
  } else {
    alert("Congrats! You found the number in " + tries + " turns!");
  }
}

サンプル:

ALERT:  WhileURong(USayNumbr;ISayBigrOrSmalr)
PROMPT: 5
ALERT:  TOO LOW
PROMPT: 20000
ALERT:  TOO LOW
PROMPT: 30000
ALERT:  TOO HIGH
PROMPT: 25000
ALERT:  TOO HIGH
PROMPT: 22500
ALERT:  TOO HIGH
PROMPT: 21000
ALERT:  TOO HIGH
PROMPT: 20500
ALERT:  TOO HIGH
PROMPT: 20200
ALERT:  TOO LOW
PROMPT: 20400
ALERT:  TOO LOW
PROMPT: 20450
ALERT:  TOO LOW
PROMPT: 20475
ALERT:  TOO HIGH
PROMPT: 20460
ALERT:  TOO LOW
PROMPT: 20468
ALERT:  TOO HIGH
PROMPT: 20464
ALERT:  TOO LOW
PROMPT: 20466
ALERT:  TOO LOW
PROMPT: 20467
ALERT:  Congrats! You found the number in 16 turns!"

1
私は本当にそれが好きです:)
ワレヴァニラバールッツ14年

コードのサンプル出力を表示してください。
ムクルクマール14

@MukulKumar。完了、出力の追加
ビクタースタフサ14年

7

C-272文字-300-50-25 = -103

  • -300はルールを表示します。
  • -50プレイヤーにターン数を伝えるため。
  • -25は、標準のRNGライブラリを使用しないことを意味します。

ゴルフコード:

main(i){short a,c=i=0,b=time(0);for(a=b;b--;a=(a*233)+4594);b=a;puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");while(1){i++;scanf("%hi",&a);if(a==b){printf("Congrats! You found the number in %i turns!",i);break;}for(c=0;c^9;c++)putchar(c[a<b?"kff7cfn7!":"kff7_`^_!"]-23);}}

ゴルフをしていない:

int main(int i) {
    short a,
          b = time(0),
          c = i = 0;

    for( a = b ; b-- ; a = (a * 233) + 4594);
    b = a;

    puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");

    while(1) {
        i++;
        scanf("%hi", &a);
        if(a == b) {
            printf("Congrats! You found the number in %i turns!", i);
            break;
        }
        for( c = 0 ; c ^ 9 ; c++ )
            putchar(c[ a < b ? "kff7cfn7!" : "kff7_`^_!" ] - 23);
    }
}

出力:

出力


どこに出力されますか?
ムクルクマール14

@ IlmariKaronen、EDIT2。また、私はエポックを取るだけではありません。
オベロン14年

@Oberonも出力を投稿してください
Mukul Kumar 14年

@MukulKumarが投稿されました。
オベロン14年

5

C:237-300-50-25-25-10:-173ポイント

ルールの場合は-300、推測の数を表示する場合は-50、組み込みの乱数ジェネレーターを使用しない場合は-25、範囲外のメッセージの場合は-25、おめでとうメッセージのカラーリングの場合は-10。

int s[3]={542068564},g,n;main(r){for(r=(short)&r,puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");n++,scanf("%d",&g),s[1]=g<r?5721932:1212631368,g^r;puts(g^(short)g?"OOR":s));printf("\033[31mCongrats! You found the number in %d turns!",n);}

ゴルフをしていない:

int s[3]={542068564},g,n;

main(r){
        for(
                r=(short)&r,
                puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");

                n++,
                scanf("%d",&g),
                s[1]=g<r?5721932:1212631368,
                g^r;

                puts(g^(short)g?"OOR":s)
        );

        printf("\033[31mCongrats! You found the number in %d turns!",n);
}

実行例:

WhileURong(USayNumbr;ISayBigrOrSmalr)
-32769
OOR
32768
OOR
0
TOO HIGH
-16384
TOO HIGH
-24576
TOO HIGH
-28672
TOO LOW
-26624
TOO LOW
-25600
TOO HIGH
-26112
TOO LOW
-25856
TOO LOW
-25728
TOO LOW
-25664
TOO HIGH
-25696
TOO HIGH
-25712
TOO LOW
-25704
Congrats! You found the number in 15 turns!

最後の行は赤で表示されます。


ブラボー!あなたは賞金のすべてを打ちます!
ムクルクマール14

4

bash、-137

スコア

273(バイト)-300(ルール)-50(試行回数)-25(OOF警告)-25(カスタムPRNG)-10(色)

ゴルフバージョン

IFS=# a=(`<$0`)
c=65536
y=$[10#`date +%N`%c]
e(){ echo -e ${a[$1]/z/$z};}
e 7
while read x
do((z++,x+=c/2,i=3+(x>y),x==y))&&break
((x<0||x>c-1))&&i=6
e $i
done
e 5
#TOO LOW#TOO HIGH#\e[32mCongrats! You found the number in z turns!#OOR#Guess my number. I'll say HIGH or LOW.

最後の行はコメントであるため、文字列または文字リテラルが含まれていないことに注意してください。

ゴルフされていないバージョン

MYNUMBER=$[10#$(date +%N) % 65536 - 32768]
echo "Guess my number. I'll say HIGH or LOW."

while true; do
    read YOURGUESS
    GUESSES=$((GUESSES + 1))

    if ((YOURGUESS == MYNUMBER)); then
        break
    elif ((YOURGUESS < -32768 || YOURGUESS > 32767)); then
        echo OOR
    elif ((YOURGUESS < MYNUMBER)); then
        echo "TOO LOW"
    else
        echo "TOO HIGH"
    fi
done

echo -e "\e[32mYou found the number in $GUESSES turns!"

サンプル出力

$ ./tlth
Guess my number. I'll say HIGH or LOW.
-32769
OOR
32768
OOR
0
TOO LOW
16384
TOO HIGH
8192
TOO HIGH
4096
TOO HIGH
2048
TOO HIGH
1024
TOO HIGH
512
TOO HIGH
256
TOO HIGH
128
TOO HIGH
64
TOO HIGH
32
TOO LOW
48
TOO HIGH
40
TOO LOW
44
TOO HIGH
42
Congrats! You found the number in 17 turns!

最後の行は緑色で印刷されます。


3

C#:-30ポイント

  • 345バイト
  • ルールを表示するための-300
  • ユーザーが勝ったときのターンを示すための-50
  • -25は、ユーザーが範囲外の数値を入力したときにユーザーに通知するためのものです。

Golfed

int l=-32768,h=32767,n=new Random().Next(l,h),t=0,g=h+1;Console.Write("WhileURong(USayNumbr;ISayBigrOrSmalr)\n");while(n!=g){g=Convert.ToInt32(Console.ReadLine());Console.WriteLine(g==n?"C\x6fn\x67ra\x74s! Y\x6fu f\x6fund \x74\x68\x65 number in {0} \x74urns!":g<l||g>h?"BAD":g<n?"\x54\x4f\x4f \x4c\x4f\x57":"\x54\x4f\x4f \x48\x49\x47\x48",++t);}

実行するには、ファイル(code.cs)に入れて、コマンドラインでscriptcsを実行しますscriptcs code.cs

Ungolfed:変数名をわかりやすいものに拡張し、16進文字を実際の文字に変更しました。

int low = -32768, 
    high = 32767, 
    number = new Random().Next(low, high), 
    turns = 0, 
    guess = h+1;
Console.Write("WhileURong(USayNumbr;ISayBigrOrSmalr)\n");  // instructions
while (number != guess)
{
    guess = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine(
      guess == number                                     // if you got it right 
        ? "Congrats! You found the number in {0} turns!"  // give the victory speech
        : guess < low || guess > high                     // if out of range
          ? "BAD"                                         // let them know
          : guess < number                                // if guess is low
            ? "TOO LOW"                                   // tell them low
            : "TOO HIGH"                                  // otherwise tell them high
      , ++turns                                           // preincrement turns, add to output
    );
}

サンプル出力はこちらから入手できます


3
申し訳ありませんが状態をこのことを伝えるが、ルールのことを「文字を使用しないでくださいTOLWHIおよびG文字列または文字リテラルで(どちらも小文字でも大文字)。
ビクターStafusa

だから置き換えTOL...と\x54\x4F\x4C...そしてあなただ罰金。
ナマケモノ14年

ありがとう。ゴルフバージョンの文字列リテラルに該当する文字の16進エンコードを入れ、それに応じてスコアリングを変更しました。
Yaakovのエリス

コードのサンプル出力を表示してください。
ムクルクマール14

@MukulKumarの出力についてはこちらご覧ください。また、ロジックにいくつかの小さな変更を加え、問題を修正しました。
Yaakovのエリス

2

C ++ 505 +(-300-50-25-25)= 105

-300:指示
-50:ターン数を表示
-25:ランダム関数を使用していない
-25:範囲外の入力についてユーザーに警告する

ゴルフド

#include<iostream>
#include<stdlib.h>
using namespace std;int main(){short int a,i=0,*r=new short int;int b=0;a=*r;char t[]={84,79,79,' ','\0'},l[]={76,79,87,'\n','\0'},h[]={72,73,71,72,'\n','\0'};cout<<"WhileURong(USayNumbr;ISayBigrOrSmalr)\n";while(a!=b){cin>>b;if(b<-32768||b>32767){cout<<"Sorry! the number is out of range please enter the number again\n";continue;}i++;if(b<a){cout<<'\n'<<t<<l;}if(b>a){cout<<'\n'<<t<<h;}if(a==b){cout<<"Congrats!You found the number in "<<i<<" turns!";}}return 0;}  

無形

#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
    short int a,i=0,*r=new short int;
    int b=0;
    a=*r;
    char t[]={84,79,79,' ','\0'},l[]={76,79,87,'\n','\0'},h[]={72,73,71,72,'\n','\0'};
    cout<<"WhileURong(USayNumbr;ISayBigrOrSmalr)\n";
    while(a!=b)
    {
        cin>>b;
        if(b<-32768||b>32767)
        {
            cout<<"Sorry! the number is out of range please enter the number again\n";
            continue;
        }
        i++;
        if(b<a)
        {
            cout<<'\n'<<t<<l;
        }
        if(b>a)
        {
        cout<<'\n'<<t<<h;
        }
    if( a==b)
    {   

            cout<<"Congrats!You found the number in "<<i<<" turns!";
        }
    }
    return 0;
}  

出力


個人的に、私は自分自身を止めることができませんでした.. :)
ムクルクマール14

2

C、183-300-25 = -142

ランダムライブラリを使用しない場合のルール-25の場合は183バイト-300

main(){short g,n=time(0)*(time(0)&1?1:-1);puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");while(g^n)scanf("%d",&g),puts(g>n?"TOO HIGH":g<n?"TOO LOW":"Congrats! You found the number!");}

改変されていないバージョン:

main(){
    short g,n=time(0)*(time(0)&1?:-1);
    puts("WhileURong(USayNumbr;ISayBigrOrSmalr)");
    while(g^n)
        scanf("%d",&g),
        puts(g>n?"TOO HIGH":g<n?"TOO LOW":"Congrats! You found the number!");
}

サンプル実行:

WhileURong(USayNumbr;ISayBigrOrSmalr)
40
TOO HIGH
20
TOO HIGH
1
TOO HIGH
0
TOO HIGH
-20
TOO HIGH
-200
TOO HIGH
-2000
TOO HIGH
-20000
TOO LOW
-10000
TOO LOW
-5000
TOO LOW
-3000
TOO HIGH
-4000
TOO LOW
-3500
TOO HIGH
-3700
TOO HIGH
-3900
TOO HIGH
-3950
TOO HIGH
-3970
TOO LOW
-3960
Congrats! You found the number!

"TOO HIGH"そして、"TOO LOW"の両方が不正な文字が含まれていますTOLWHIGtolwhig
オベロン14年

「おめでとうございます!番号を見つけました!」および「WhileURong(USayNumbr; ISayBigrOrSmalr)」。
Fors

@Forsが許可されます(EDIT2を参照)。
オベロン14年

確かにそうです!何らかの理由で、私はその編集を見逃しました。
フォルス

@Oberon EDIT 2でもTOO LOW許可されていますか?
歯ブラシ14年

2

J-190文字-300 -50 = -160ポイント

'Congrats, you found the number in ',' turns!',~":1>:@]^:(]`(1[2:1!:2~a.{~71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>)@.*@-[:".1!:1@1:)^:_~32767-?2^16['WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2

説明(Jは右から左に読み取られることを思い出してください):

  • 'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2 -ルールを印刷します。
  • 32767-?2^16[-戻り値を投げて、0から2 ^ 16-1までの乱数を生成します。次に、32767から減算して-32768..32767の範囲に調整します。
  • 1>:@]^:(...)^:_~- x u^:v^:_ yパターンは、whileループのようなものです。xは一定のままyで、の実行ごとに変化しuます。これは、x v y0を返すか、x u y結果がに変化しないまで続きますy~スワップ2つの引数は、そのためには、x乱数となり、y1当社で開始されuている>:@]、それはカウンタとして動作するので、この1と戻り、それをインクリメントし、x u y発生しないことができます終了条件。
  • [:".1!:1@1:-カウンターを取り、その値を無視し、代わりに数字の1を使用します(1:)。1!:1キーボード(ファイルハンドル1)から入力行()を読み取り、実行します(".)。これにより、負符号が通常であるJ _は、形式で数値を取ることができます-n(数値に適用される否定として評価されnます)。
  • ]`(...)@.*@--以前の乱数と推測(-)の差を取ります。ここで、この差がゼロ(@.*)かどうかに応じて、次のアクションを選択します。実行されている場合は、]`の結果として0をx v y返します。その結果、実行が終了し、whileループ全体がカウンターを返します。そうでなければ...
  • 71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>- 5 8 16数値が負の1 2 0 1場合、および正の場合、配列を返します。次に13 8 8 _39、すべてに71を追加して追加します。そうすると、84 79 79 32 76 79 87またはのいずれかになり84 79 79 32 72 73 71 72ます。
  • 1[2:1!:2~a.{~-アルファベットにインデックスを付けて、これらの数字をASCII文字に変換a.します。次に、1!:2(ファイルハンドル2を使用して)それらを出力し、の結果として1を返しx v yます。
  • 'Congrats, you found the number in ',' turns!',~":-ループが終了すると、カウンターを返します。で文字列に変換":し、文字列の間にそれを置く'Congrats, you found the number in '' turns!'

サンプル出力:

   'Congrats, you found the number in ',' turns!',~":1>:@]^:(]`(1[2:1!:2~a.{~71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>)@.*@-[:".1!:1@1:)^:_~32767-?2^16['WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2
WhileURong(USayNumbr;ISayBigrOrSmalr)
0
TOO HIGH
-20000
TOO LOW
-10000
TOO LOW
-5000
TOO HIGH
-7500
TOO HIGH
-8750
TOO HIGH
-9000
TOO HIGH
-9500
TOO LOW
-9250
TOO HIGH
-9375
TOO HIGH
-9450
TOO LOW
-9400
TOO HIGH
-9425
TOO HIGH
-9437
TOO LOW
-9431
TOO LOW
-9428
TOO HIGH
-9430
TOO LOW
-9429
Congrats, you found the number in 18 turns!

2

JavaScript -40

335-300(ルール)-50(カウントターン)-25(範囲外)

勝つつもりはないが、私が思う手紙を手に入れるための楽しい方法だ。

ゴルフ

!function T(O,L,W,H,I,G){a=T.toString();c=L.floor(65536*L.random())+H;O(W+G+" between "+H+" & "+I);k=(f=a[9]+(d=a[11])+d+" ")+(e=a[17])+a[19]+a[21]+e;l=f+a[13]+d+a[15];for(m=1;(n=prompt(W+G))!=c;m++)n<H||n>I?O("Out of range"):n>c?O(l):O(k);O("Congrats! You found the"+G+" in "+m+" turns!")}(alert,Math,"Guess a",-32768,32767," number")

非ゴルフ

!function T(O,L,W,H,I,G){
    fn = T.toString();
    random = L.floor(L.random() * 65536) + H;

    O(W + G + " between " + H + " & " + I);

    tooLow = (too = fn[9] + (o = fn[11]) + o + " ") + (h = fn[17]) + fn[19] + fn[21] + h;
    tooHigh = too + fn[13] + o + fn[15];

    for (n=1; (guess = prompt(W + G)) != random; n++) {
        if (guess < H || guess > I) {
            O("Out of range");  
        } else if (guess > random) {
            O(tooHigh);
        } else {
            O(tooLow);  
        }
    }

    O("Congrats! You found the" + G + " in " + n + " turns!");
}(alert, Math, "Guess a", -32768, 32767, " number")

サンプル出力

(ALERT) Guess a number between -32768 & 32767
(PROMPT) Guess a number
9999999
(ALERT) Out of range
(PROMPT) Guess a number
0
(ALERT) TOO LOW
(PROMPT) Guess a number
8008
(ALERT) Congrats! You found the number in 3 turns!

1

APL(Dyalog)(157-300-50 = -193)

(はい、これらはバイトとしてカウントされ、APL文字セットは1バイトに収まります。)

私は「ゲームのルールを表示する」と「ターン数を数える」と主張しました。

G
n←32768-?65536
t←0
⎕←'Guess 16-bit signed number'
t+←1
→8/⍨n=g←⎕
⎕←⎕AV[(⌽⎕AV)⍳'×↑↑ ','○↑-' '∇⌊∘∇'⊃⍨1+n<g]
→4
⎕←'Congrats! You found the number in't'tries!'

実行例:

      G
Guess 16-bit signed number
⎕:
      0
TOO HIGH
⎕:
      -10000
TOO LOW
⎕:
      -5000
TOO LOW
⎕:
      -2500
TOO LOW
⎕:
      -1250
TOO HIGH
⎕:
      -1750
TOO LOW
⎕:
      -1500
TOO LOW
⎕:
      -1375
TOO LOW
⎕:
      -1300
TOO LOW
⎕:
      -1275
TOO LOW
⎕:
      -1265
TOO HIGH
⎕:
      -1270
TOO HIGH
⎕:
      -1273
 Congrats! You found the number in  13  tries!

ゴルフをしていない:

GuessNumber;num;tries;guess;decode;too;low;high
decode←{⎕AV[(⌽⎕AV)⍳⍵]} ⍝ invert the character code, char 1 becomes char 255 etc.
num←32768-?65536 ⍝ select a random number
tries←0

⍝ strings for low/high
too←decode '×↑↑ '
low←decode '○↑-'
high←decode '∇⌊∘∇'

⎕←'Guess 16-bit signed number'

try:
  tries +← 1
  guess ← ⎕
  →(guess=num)/found
  ⍝ still here: number was wrong
  ⎕←too, (1+num<guess)⊃low high  ⍝ output appropriate word
  →try ⍝ try again
found:
  ⎕←'Congrats! You found the number in' tries 'tries!'

1

ポゴ:-95(255-300-50)

method main:void
    print("Guess the number. You will be told if you are high or low.")
    declare(integer,n,0)
    declare(integer,i,0)
    declare(integer,j,0)
    random() i
    while j != i
        set(n+1) n
        print("Number?")
        getinput() j
        if j > i
            print("High")
        end
        else
            print("Low")
        end
    end
    print("Yay" n "turns")
end main

数が10の場合:

数?

5

低い

8

低い

12

高い

10

イェイ4ターン


文字数は、すべての空白が削除されたコードに基づいています。

Pogoは偽の言語ではないことに注意してください。https://github.com/nrubin29/Pogoで作成し、そのためのコンパイラとIDEを作成しました


EDITEDIT
Mukul Kumar 14年

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