Kode terpendek untuk membuat game Terlalu Rendah - Terlalu Tinggi

20

Anda harus membuat game Terlalu rendah --- Terlalu tinggi (TLTH) dalam kode terpendek (dalam byte)

Aturan gim:

  1. Komputer akan memilih nomor acak di luar rentang integer (-32768..32767).
  2. Sekarang Anda akan memikirkan angka dan memasukkannya.
  3. Komputer akan memberi tahu apakah nomor Anda lebih rendah ( TOO LOW) atau lebih tinggi (TOO HIGH ) daripada nomor yang dipilih.
  4. Ketika Anda menebak nomornya, komputer akan ditampilkan Congrats! You found the number!.

Aturan Kode:

  1. Jangan gunakan karakter T, O, L, W, H, Idan G(tidak huruf kecil atau huruf besar) dalam string atau karakter literal.
    Contohnya:

    tolower(T);  // Acceptable  
    cout<<"T";   // Unacceptable
    char ch='T'; // Unacceptable
    
  2. Hapus 300 byte jika kode Anda dapat menampilkan aturan permainan sebelum memulai permainan.

  3. Hapus 50 byte jika kode Anda dapat menghitung jumlah putaran dan menampilkan jumlah putaran yang terjadi di akhir permainan seperti ini:

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

    di mana n adalah jumlah putaran yang dilakukan, bukan

    "Congrats! You found the number!"  
    
  4. Hapus 25 byte dari skor Anda jika kode Anda dapat memberi tahu pengguna bahwa angka yang Anda masukkan di luar kisaran integer.
    Sebagai contoh:

    Enter the number: 40000  
    Sorry! This number is out of range
    Please Enter the number again:  
    
  5. Hapus 25 byte Jika kode Anda mengambil nomor acak bukan dari fungsi acak bawaan.

  6. Hapus 10 byte Jika kode Anda menampilkan "selamat" berwarna (pilih warna apa pun kecuali putih standar).

Aturan Pengiriman:

  1. Tambahkan judul dengan nama bahasa Anda dan skor dengan semua perhitungan hadiah dan penjelasannya.

  2. Poskan kode golf dan tidak serigala Anda.

Pemenang

  1. Jawaban dengan paling tidak byte menang.
  2. Jika ada dasi, jawabannya dengan lebih banyak suara akan menang.
  3. Pemenang akan dipilih setelah 5 hari.

EDIT : Tolong tunjukkan output kode Anda.
EDIT-2 : Anda dapat mengabaikan Aturan-1 untuk Aturan-2,3 & 4 dalam Aturan Kode

Semoga berhasil :]

Mukul Kumar
sumber
2
apakah ini penjelasan yang valid dari aturan main? WhileURong(USayNumbr;ISayBigrOrSmalr)
John Dvorak
1
Berdasarkan deskripsi skor Anda, Anda tidak memiliki kode golf atau kontes popularitas. Ini adalah tantangan kode (dengan tiebreak popularitas). Lihat tag wiki. Saya mengusulkan edit untuk menandai tantangan dengan tepat. ps - Jinx! @mniip
Jonathan Van Matre
1
@JonathanVanMatre bagiku kata-katanya terdengar seperti kode-golf , terlepas dari tie-breaker.
mniip
21
Juga, saya tidak terlalu suka aturan melawan membantu pemain lain dalam meningkatkan jawaban mereka. Dalam kata-kata abadi Andre the Giant in The Princess Bride, "Itu tidak terlalu sportif".
Jonathan Van Matre
1
Pertanyaan ini begitu. . . David H. Ahl
Michael Stern

Jawaban:

2

JavaScript (-210 poin ( 190byte - 300 (untuk aturan) - 50 (untuk jumlah tebakan) -25 (untuk tidak menggunakan sumber nomor acak bawaan) - 25 (untuk memberi tahu Anda jika input di luar kisaran yang ditandatangani 16-bit integer) ):

Golf:

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

Kode lengkap (diformat dengan baik):

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;
    }
}

Keluaran:

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)
Sikat gigi
sumber
@IlmariKaronen Maaf, saya membuat kesalahan. Saya telah memperbarui jawaban saya.
Sikat gigi
Terima kasih, sekarang ini berjalan ... tetapi tampaknya rusak jika saya kira 0. :-( Juga, bukankah seharusnya ada ruang di TOO LOW/ TOO HIGH?
Ilmari Karonen
19

Perl 5.10+: 159 144 byte - 350 = −206 poin

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

Sunting 2: Dengan perubahan aturan terbaru yang memungkinkan saya untuk menggunakan string literal apa pun untuk pesan "congrats", saya dapat menyimpan 15 byte dari solusi 159-byte asli saya. Tidak ada yang khusus atau menarik tentang kode baru di atas dibandingkan dengan kode lama (saya baru saja menghilangkan pfungsi, dan saylangsung menelepon saja), jadi sisa tulisan ini akan menjelaskan kode asli, yang ditunjukkan di bawah ini:

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

Ya, saya menyalahgunakan aturan 1. Siapa yang butuh string, ketika Anda dapat memiliki kata kunci ? ;-)

Jalankan dengan perl -M5.010untuk mengaktifkan fitur Perl 5.10+ say(atau ganti badan pfungsi dengan dengan print join$",@_,$/biaya tambahan 5 byte).

Skor bonus:

  • −300 poin: "tampilkan aturan permainan sebelum memulai permainan"
  • −50 poin: "tampilkan jumlah putaran yang dilakukan di akhir pertandingan"

Kode tidak mengandung string literal dalam arti yang ketat, jadi saya akan mengatakan bahwa aturan 1 secara teknis tidak dilanggar. Kuncinya adalah, di Perl, tanpa use strict, pengenal apa pun yang tidak sesuai dengan kata kunci atau subrutin bahasa yang dikenal akan dengan mudah mengevaluasi ke namanya sendiri. Fungsinyap kemudian hanya mengambil daftar kata dan mencetaknya, dipisahkan oleh spasi.

Contoh play-through:

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!

Sunting: Oh, benar, aturannya mengatakan saya perlu memposting versi yang tidak golf juga, jadi begini saja. Secara teknis, ini "de-golfed", karena saya biasanya menyusun program golf kode saya dalam bentuk golf yang kurang lebih sepenuhnya dari awal, dan kadang-kadang bisa sulit untuk menghapus semua optimasi "golfy" tanpa secara mendasar mengubah cara beberapa bagian dari pekerjaan program. Namun, saya setidaknya sudah mencoba menambahkan spasi putih, komentar, dan nama fungsi / variabel yang lebih bermakna:

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."!";

Ps. Sebagai alternatif, jika hanya menggunakan kata kunci bukan string terasa terlalu curang untuk Anda, inilah solusi 182-byte yang tidak menggunakan huruf-huruf TOLWHIG bahkan dalam kata kunci (tetapi menggunakannya dalam operator transliterasi). Masih mendapat bonus yang sama, dengan skor total 182 - 350 = −168 poin :

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

Outputnya terlihat persis sama seperti di atas. Sesuai aturan (asli), saya menggunakan surat tdan imencetak aturan, karena diizinkan; menghilangkan bahkan penggunaan itu hanya membutuhkan dua byte tambahan. Sebaliknya, membuat semua huruf besar keluaran (yang, berdasarkan komentar di atas, tampaknya diizinkan) akan membuat saya menghemat tiga byte.

Ilmari Karonen
sumber
Itu jawaban yang bagus dan cerdas! +1 dari saya
Mukul Kumar
Sekarang saya melihat ini saya bertanya-tanya apakah itu bisa dikalahkan dengan Ruby 1.8 jika Anda mengambil penalti def method_missing *args;args.join' ';end.
Kaya
Saya mengalahkan Anda dengan JavaScript lama yang bagus!
Sikat gigi
14

Python 2: -80 poin (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

Skor adalah 270 karakter, minus 300 untuk menunjukkan instruksi, minus 50 untuk menunjukkan jumlah tebakan di "selamat!" string, untuk total 80 poin negatif.

Versi loop yang tidak digabungkan, dengan string yang tidak terhapuskan:

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

Built-in cmp fungsi kembali 0 jika nilai-nilai yang sama, -1 jika yang pertama adalah lebih kecil dan 1 jika yang pertama adalah lebih besar. Saya menggunakan nilai untuk mengindeks tupel string, dan sekali lagi sebagai kondisi keluar dari loop. Pengindeksan urutan dengan indeks negatif (seperti -1) dihitung dari akhir urutan, bukan dari awal.

Saya sangat tergoda untuk melewatkan impor dan hanya menggunakan 4sebagai nomor acak saya, sesuai XKCD 221 (akankah itu memenuhi syarat untuk bonus karakter -25?).

Contoh dijalankan (lengkap dengan kesalahan, di mana saya tidak dapat melakukan matematika negatif):

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!
Blckknght
sumber
Tolong tunjukkan hasil sampel kode Anda.
Mukul Kumar
2
Bukankah ini melanggar aturan kode 1? WhileURong (USayNumbr; ISayBigrOrSmalr) berisi satu atau lebih Os, Ls, Ws, Hs, Is, dan Gs.
Fors
@Cruncher: Saya tidak yakin apa yang Anda maksud, karena program ini berakhir. Setelah Anda mendapatkan nilai yang benar gadalah nol dan whileloop berakhir.
Blckknght
@Blckknght oops, baca cepat
Cruncher
@ForsYou can ignore Rule-1 for Rules-2,3 & 4 in Code Rules
Cruncher
13

JavaScript 293, -300 (aturan) - 50 (tampilan belok) - 25 (peringatan rentang) - 25 (tidak ada fungsi acak) = -107 (skor baru)

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

Saya akan mengklaim bahwa dengan konvensi RGB bahwa hitam adalah warna, tapi itu akan menjadi agak curang ...

Oh, dan mungkin saya tambahkan, jangan melanggar aturan # 1, baik!

Keluaran dalam serangkaian peringatan dan konfirmasi

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!

Kode tidak dikunci:

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
WallyWest
sumber
Anda membaca peraturan dengan cermat? baik Anda harus memposting kode unungolfed dengan satu output
Mukul Kumar
@MukulKumar diurutkan ...
WallyWest
Anda dapat menyimpan 4 dengan mengawali jawaban Anda dengan A=alert;dan mengganti semua alertdengan A. Dan satu lagi jika Anda memindahkan lansiran A(0>(x...setelah tanda titik koma masuk prompt())!=r;)n++1.
DocMax
Anda dapat mengubah feedback if too high/lowyang menggunakan 84 karakter saat ini ke i give feedback(yang hanya membutuhkan \151 \147\151ve feedbackatau 24 karakter untuk menyimpan 60 karakter .
corsiKa
1
Saya mungkin salah, tapi saya pikir Anda bisa memindahkan n++dari for loop ke dalam x=prompt(n++)untuk menyimpan harus dilakukan + ++n+dalam peringatan terakhir. Ini akan menghemat 3.
DocMax
7

Javascript, 324 byte, skor -76

[Diperbarui karena perubahan aturan]

  • 324 byte
  • -300 untuk menunjukkan aturan
  • -50 untuk menunjukkan belokan saat pengguna menang
  • -25 untuk memberi tahu pengguna saat dia memasukkan angka di luar rentang
  • -25 untuk tidak menggunakan built-in random (diperbarui)

Total skor: -76

Golf:

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

Mari kita ungolf kekacauan ini.

Pertama, diidentifikasi dengan benar (tapi ini masih kurang bagus dengan kode yang dikaburkan):

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

Kedua, mengganti nama pengidentifikasi:

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

Jadi fungsi unencrypt mendapatkan semua karakter antara ASCII 33 ( !) dan ASCII 58 ( :) dan menambahkan 32, mengonversinya dalam karakter dalam rentang A-Z.

Mari ungolf kode lebih banyak dengan mencabut semua string:

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

Dan akhirnya mari kita pindahkan beberapa instruksi ke tempat lain, ganti rantai terner panjang dengan ifs dan elses, gabung string senar, dan sederhanakan matematika, untuk meningkatkan keterbacaan:

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!");
  }
}

Mencicipi:

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!"
Victor Stafusa
sumber
1
Saya sangat suka :)
Wolle Vanillebär Lutz
Tolong tunjukkan hasil sampel kode Anda.
Mukul Kumar
@MukulKumar. Selesai, output ditambahkan
Victor Stafusa
7

C - 272 karakter - 300 - 50 - 25 = -103

  • -300 untuk menampilkan aturan;
  • -50 untuk memberi tahu pemain jumlah belokan;
  • -25 untuk tidak menggunakan perpustakaan RNG standar.

Kode golf:

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

Tidak Terkumpul:

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

Keluaran:

Keluaran

Oberon
sumber
Di mana output?
Mukul Kumar
@IlmariKaronen, EDIT2. Juga, saya tidak hanya mengambil zaman.
Oberon
@Oberon silakan memposting keluaran juga
Mukul Kumar
@MukulKumar, diposkan.
Oberon
5

C: 237 - 300 - 50 - 25 - 25 - 10: -173 poin

-300 untuk aturan, -50 untuk menunjukkan jumlah tebakan, -25 untuk tidak menggunakan generator nomor acak bawaan, -25 untuk pesan di luar jangkauan dan -10 untuk mewarnai pesan ucapan selamat.

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

Tidak Terkumpul:

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

Contoh dijalankan:

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!

Baris terakhir muncul sebagai merah.

Untuk S
sumber
Bravo! Anda Memukul semua karunia !!!
Mukul Kumar
4

bash, -137

Skor

273 (byte) - 300 (aturan) - 50 (mencoba hitungan) - 25 (peringatan OOF) - 25 (custom PRNG) - 10 (warna)

Versi golf

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.

Perhatikan bahwa baris terakhir adalah komentar, sehingga tidak mengandung string atau karakter literal.

Versi tidak disatukan

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

Output sampel

$ ./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!

Baris terakhir dicetak dengan warna hijau.

Dennis
sumber
3

C #: -30 poin

  • 345 byte
  • -300 untuk menunjukkan aturan
  • -50 untuk menunjukkan belokan saat pengguna menang
  • -25 untuk memberi tahu pengguna saat dia memasukkan angka di luar rentang

Golf :

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

Untuk menjalankannya, memasukkannya ke dalam sebuah file (code.cs) dan dijalankan dengan scriptcs pada baris perintah: scriptcs code.cs.

Tidak Digabungkan : Memperluas nama variabel menjadi sesuatu yang lebih mudah dipahami, dan mengubah huruf heks menjadi huruf asli.

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

Contoh output tersedia di sini .

Yaakov Ellis
sumber
3
Maaf untuk mengatakan ini, tapi aturan menyatakan bahwa " Jangan gunakan karakter T, O, L, W, H, Idan G(tidak huruf kecil atau huruf besar) dalam string atau karakter literal. "
Victor Stafusa
Jadi hanya mengganti T, O, L... dengan \x54, \x4F, \x4C... dan Anda sedang baik-baik saja.
sloth
Terima kasih. Saya baru saja memasukkan pengkodean hex untuk karakter yang berlaku dalam string literal dalam versi golf, dan memodifikasi skor sesuai.
Yaakov Ellis
Tolong tunjukkan hasil sampel kode Anda.
Mukul Kumar
@MukulKumar lihat di sini untuk keluaran. Saya juga baru saja membuat beberapa perubahan kecil pada logika, memperbaiki masalah.
Yaakov Ellis
2

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

-300: Petunjuk
-50: Menampilkan jumlah putaran
-25: Tidak menggunakan fungsi acak
-25: memperingatkan pengguna tentang input di luar jangkauan

TERLENGKAP

#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;}  

UNGOLFED

#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;
}  

KELUARAN

Mukul Kumar
sumber
Secara pribadi, saya tidak bisa menahan diri .. :)
Mukul Kumar
2

C, 183-300-25 = -142

183 byte -300 untuk aturan -25 karena tidak menggunakan perpustakaan acak

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!");}

versi tanpa ungolfed:

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!");
}

contoh dijalankan:

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!
izabera
sumber
"TOO HIGH"dan "TOO LOW"keduanya mengandung karakter ilegal TOLWHIGtolwhig.
Oberon
Seperti halnya "Selamat! Anda menemukan nomornya!" dan "WhileURong (USayNumbr; ISayBigrOrSmalr)".
Fors
@Untuk tetapi itu diizinkan (lihat EDIT2 ).
Oberon
Memang benar! Karena suatu alasan saya ketinggalan suntingan itu.
Fors
@Oberon Jadi TOO LOWdiizinkan oleh EDIT 2 juga?
Sikat gigi
2

J - 190 char -300 -50 = -160 poin

'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

Penjelasan (ingat bahwa J dibaca dari kanan ke kiri):

  • 'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2 - Cetak aturannya.
  • 32767-?2^16[- Letakkan nilai kembali, lalu buat angka acak antara 0 dan 2 ^ 16-1 inklusif. Kemudian, sesuaikan ke kisaran -32768..32767 dengan mengurangi dari 32767.
  • 1>:@]^:(...)^:_~- x u^:v^:_ yPolanya agak seperti loop sementara. xtetap konstan, dan ydimutasi dengan setiap eksekusi u. Ini berlanjut sampai x v ymengembalikan 0 atau x u ymenghasilkan tidak ada perubahan pada y. The ~swap dua argumen, sehingga xakan menjadi nomor acak dan yakan dimulai pada 1. kami uadalah >:@], yang increment ini 1 dan kembali itu, sehingga bertindak sebagai counter danx u y kondisi penghentian tidak pernah bisa terjadi.
  • [:".1!:1@1:- Ambil penghitung, dan abaikan nilainya, gunakan angka 1 sebagai gantinya ( 1:). Baca dalam barisan input ( 1!:1) dari keyboard (pegangan file 1) dan jalankan ( ".). Ini memungkinkan J, yang tanda negatifnya biasanya _, untuk mengambil angka dalam formulir -n(dievaluasi sebagai negasi yang diterapkan pada nomor tersebut n).
  • ]`(...)@.*@-- Ambil selisih angka acak dari sebelumnya dan tebak ( -). Sekarang, kami memilih tindakan berikutnya tergantung pada apakah perbedaan ini nol ( @.*). Jika ya, return ( ]`) yang 0 sebagai hasilnya x v y, sehingga eksekusi berakhir, dan keseluruhan loop sementara mengembalikan penghitung. Lain...
  • 71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>- Kembalikan array 5 8 16jika angkanya negatif, dan 1 2 0 1jika positif. Kemudian tambahkan 13 8 8 _39dan tambahkan 71 ke semuanya, jadi kita punya salah satu 84 79 79 32 76 79 87atau 84 79 79 32 72 73 71 72.
  • 1[2:1!:2~a.{~- Ubah angka-angka ini ke karakter ASCII dengan mengindeks alfabet a.dengan mereka. Kemudian cetak dengan 1!:2(menggunakan pegangan file 2) dan kembalikan 1 sebagai hasil x v y.
  • 'Congrats, you found the number in ',' turns!',~":- Ketika loop selesai, ia mengembalikan counter. Konversikan ke string dengan ":dan letakkan di antara string 'Congrats, you found the number in 'dan ' turns!'.

Output sampel:

   '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!
algoritme hiu
sumber
2

JavaScript -40

335 - 300 (aturan) - 50 (hitungan putaran) - 25 (di luar jangkauan)

Tidak akan menang tetapi cara yang menyenangkan untuk mendapatkan surat-surat yang saya pikir.

Golf

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

Tidak disatukan

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

Output sampel

(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!
enoshixi
sumber
1

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

(Ya, ini dihitung sebagai byte, rangkaian karakter APL cocok dalam satu byte.)

Saya telah mengklaim "tampilkan aturan permainan" dan "hitung jumlah putaran".

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!'

Contoh dijalankan:

      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!

Tidak Terkumpul:

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!'
marinus
sumber
1

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

Jika angkanya 10:

Jumlah?

5

Rendah

8

Rendah

12

Tinggi

10

Yay 4 ternyata


Hitungan karakter didasarkan pada kode dengan semua spasi kosong dihapus.

Perhatikan bahwa Pogo bukan bahasa palsu. Saya membuatnya dan menulis kompiler dan IDE untuk itu di sini: https://github.com/nrubin29/Pogo

nrubin29
sumber
Baca saya EDIT dan EDIT saya - 2
Mukul Kumar
Diperbarui sesuai hasil edit.
nrubin29