Mã ngắn nhất để tạo một trò chơi quá thấp - Quá cao


20

Bạn phải tạo một trò chơi Quá thấp --- Quá cao (TLTH) bằng mã ngắn nhất (tính bằng byte)

Luật chơi:

  1. Máy tính sẽ chọn một số ngẫu nhiên trong phạm vi số nguyên (-32768..32767).
  2. Bây giờ bạn sẽ nghĩ về một số và nhập nó.
  3. Máy tính sẽ cho biết số của bạn thấp hơn ( TOO LOW) hay cao hơn (TOO HIGH ) so với số đã chọn.
  4. Khi bạn đoán số, máy tính sẽ hiển thị Congrats! You found the number!.

Quy tắc mã:

  1. Không sử dụng các nhân vật T, O, L, W, H, IG(không phải chữ thường hay chữ hoa) trong chuỗi hoặc ký tự chữ.
    Ví dụ:

    tolower(T);  // Acceptable  
    cout<<"T";   // Unacceptable
    char ch='T'; // Unacceptable
    
  2. Xóa 300 byte nếu mã của bạn có thể hiển thị các quy tắc trò chơi trước khi bắt đầu trò chơi.

  3. Xóa 50 byte nếu mã của bạn có thể đếm số lượt và hiển thị số lượt được thực hiện vào cuối trò chơi như thế này:

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

    Trong đó n là số lượt được thực hiện, thay vì

    "Congrats! You found the number!"  
    
  4. Xóa 25 byte khỏi điểm số của bạn nếu mã của bạn có thể cho người dùng biết rằng số bạn nhập nằm ngoài phạm vi số nguyên.
    Ví dụ:

    Enter the number: 40000  
    Sorry! This number is out of range
    Please Enter the number again:  
    
  5. Xóa 25 byte Nếu mã của bạn lấy số ngẫu nhiên không từ bất kỳ hàm ngẫu nhiên tích hợp nào.

  6. Xóa 10 byte Nếu mã của bạn hiển thị "chúc mừng" màu (chọn bất kỳ màu nào ngoại trừ màu trắng mặc định).

Quy tắc nộp:

  1. Thêm một tiêu đề với tên ngôn ngữ của bạn và điểm số với tất cả các tính toán tiền thưởng và giải thích của nó.

  2. Gửi mã golfed và vô danh của bạn.

Người chiến thắng

  1. Câu trả lời có ít byte nhất sẽ thắng.
  2. Nếu có hòa, câu trả lời có nhiều phiếu hơn sẽ thắng.
  3. Người chiến thắng sẽ được chọn sau 5 ngày.

EDIT : Vui lòng hiển thị đầu ra mã của bạn.
EDIT-2 : Bạn có thể bỏ qua Quy tắc-1 cho Quy tắc-2,3 & 4 trong Quy tắc mã

May mắn nhất :]


2
Đây có phải là một lời giải thích hợp lệ của các quy tắc trò chơi? WhileURong(USayNumbr;ISayBigrOrSmalr)
John Dvorak

1
Dựa trên mô tả của bạn về điểm số, bạn không có môn đánh gôn hay thi đấu nổi tiếng. Đây là một thách thức mã (với một bẻ khóa phổ biến). Kiểm tra các wiki thẻ. Tôi đã đề xuất một chỉnh sửa để gắn thẻ thử thách một cách thích hợp. ps - Jinx! @mniip
Jonathan Van Matre

1
@JonathanVanMatre đối với tôi những từ ngữ nghe giống như code-golf , mặc dù bộ ngắt kết nối.
mniip

21
Ngoài ra, tôi không đặc biệt thích quy tắc chống lại việc hỗ trợ người chơi khác cải thiện câu trả lời của họ. Theo lời bất hủ của Andre the Giant trong Cô dâu công chúa, "Điều đó không giống thể thao lắm".
Jonathan Van Matre

1
Câu hỏi này là như vậy. . . David H. Ahl
Michael Stern

Câu trả lời:


2

JavaScript (-210 điểm ( 190byte - 300 (đối với quy tắc) - 50 (đối với số lần đoán) - 25 (không sử dụng bất kỳ nguồn số ngẫu nhiên tích hợp nào) - 25 (để cho bạn biết nếu đầu vào nằm ngoài phạm vi của một ký 16số nguyên -bit) ):

Chơi gôn

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

Mã đầy đủ (được định dạng độc đáo):

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

Đầu ra:

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 Xin lỗi, tôi đã làm sai. Tôi đã cập nhật câu trả lời của mình.
Bàn chải đánh răng

Cảm ơn, bây giờ nó chạy ... nhưng nó dường như bị hỏng nếu tôi đoán 0. :-( Ngoài ra, không nên có một khoảng trống trong TOO LOW/ TOO HIGH?
Ilmari Karonen

19

Perl 5.10+: 159 144 byte - 350 = −206 điểm

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

Chỉnh sửa 2: Với sự thay đổi quy tắc gần đây cho phép tôi sử dụng bất kỳ chuỗi ký tự nào cho thông báo "chúc mừng", tôi có thể lưu 15 byte từ giải pháp 159 byte ban đầu của mình. Không có gì đặc biệt hoặc thú vị về mã mới ở trên so với mã cũ (tôi vừa thoát khỏi pchức năng và gọi saytrực tiếp thay thế), vì vậy phần còn lại của bài đăng này sẽ mô tả mã gốc, được hiển thị bên dưới:

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

Vâng, tôi đang lạm dụng địa ngục ngoài quy tắc 1. Ai cần dây, khi bạn có thể có barewords ? ;-)

Chạy với perl -M5.010để bật saytính năng Perl 5.10+ (hoặc thay thế phần thân của phàm với print join$",@_,$/chi phí thêm 5 byte).

Điểm thưởng:

  • −300 điểm: "hiển thị các quy tắc trò chơi trước khi bắt đầu trò chơi"
  • 50 điểm: "hiển thị số lượt được thực hiện khi kết thúc trò chơi"

không chứa chuỗi ký tự theo nghĩa nghiêm ngặt, vì vậy tôi nói rằng quy tắc 1 về mặt kỹ thuật không bị vi phạm. Bí quyết là, trong Perl, không có use strictbất kỳ định danh nào không tương ứng với một từ khóa hoặc chương trình con ngôn ngữ đã biết sẽ đơn giản đánh giá tên của chính nó. Chức năngp sau đó chỉ cần lấy một danh sách các từ và in chúng ra, cách nhau bởi khoảng trắng.

Ví dụ phát qua:

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!

Chỉnh sửa: Ồ, đúng rồi, các quy tắc nói rằng tôi cũng cần đăng một phiên bản chưa được mã hóa của mã, vì vậy nó sẽ đi. Về mặt kỹ thuật, đó là "không chơi gôn", vì tôi thường soạn các chương trình golf mã của mình ở dạng golf ít nhiều đầy đủ ngay từ đầu, và đôi khi có thể khó để loại bỏ tất cả các tối ưu hóa "golf" mà không thay đổi căn bản một số phần của chương trình làm việc. Tuy nhiên, ít nhất tôi đã cố gắng thêm khoảng trắng, nhận xét và tên hàm / biến có ý nghĩa hơn:

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

Thi thiên Thay vào đó, nếu chỉ sử dụng barewords thay vì chuỗi cảm thấy quá gian lận đối với bạn, thì đây là một giải pháp 182 byte không sử dụng các chữ cái TOLWHIG ngay cả trong barewords (nhưng sử dụng chúng trong toán tử chuyển ngữ). Nó vẫn nhận được cùng số tiền thưởng, với tổng số điểm là 182 - 350 = −168 điểm :

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

Đầu ra trông giống hệt như trên. Theo các quy tắc (bản gốc), tôi sử dụng các chữ cái tiin các quy tắc, vì nó được cho phép; loại bỏ ngay cả những sử dụng sẽ chỉ tốn hai byte thêm. Ngược lại, làm cho tất cả chữ hoa đầu ra (mà dựa trên các nhận xét ở trên dường như được cho phép) sẽ cho phép tôi lưu ba byte.


Đó là một câu trả lời tốt đẹp và thông minh! +1 từ tôi
Mukul Kumar

Bây giờ tôi thấy điều này, tôi tự hỏi liệu nó có thể bị đánh bại với Ruby 1.8 không nếu bạn chịu phạt def method_missing *args;args.join' ';end.
Kaya

Tôi đánh bại bạn với JavaScript cũ tốt!
Bàn chải đánh răng

14

Python 2: -80 điểm (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

Điểm là 270 ký tự, trừ 300 để hiển thị các hướng dẫn, trừ 50 cho hiển thị số lần đoán trong "chúc mừng!" chuỗi, cho tổng số 80 điểm âm.

Phiên bản lặp lại của vòng lặp, với các chuỗi không thoát:

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

Hàm tích hợp cmptrả về 0 nếu các giá trị bằng nhau, -1 nếu đầu tiên nhỏ hơn và 1 nếu đầu tiên lớn hơn. Tôi sử dụng giá trị để lập chỉ mục một chuỗi các chuỗi, và sau đó một lần nữa làm điều kiện thoát của vòng lặp. Lập chỉ mục một chuỗi với chỉ số âm (như -1) được tính từ cuối chuỗi, thay vì từ đầu.

Tôi đã rất muốn bỏ qua việc nhập khẩu và chỉ sử dụng 4làm số ngẫu nhiên của mình, theo XKCD 221 (điều đó có đủ điều kiện nhận phần thưởng -25 ký tự không?).

Chạy ví dụ (hoàn thành với một lỗi, trong đó tôi không thể làm toán âm):

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!

Vui lòng hiển thị đầu ra mẫu mã của bạn.
Mukul Kumar

2
Đây không phải là vi phạm quy tắc 1? WhileURong (USayNumbr; ISayBigrOrSmalr) chứa một hoặc nhiều Os, Ls, Ws, Hs, Is và Gs.
Dành cho

@Cruncher: Tôi không chắc ý của bạn là gì, vì chương trình chấm dứt. Sau khi bạn nhận được giá trị đúng glà 0 và whilevòng lặp kết thúc.
Blckknght

@Blckknght oops, đọc nhanh
Cruncher

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

13

JavaScript 293, -300 (quy tắc) - 50 (hiển thị lần lượt) - 25 (cảnh báo phạm vi) - 25 (không có chức năng ngẫu nhiên) = -107 (điểm mới)

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

Tôi đã tuyên bố rằng theo quy ước RGB rằng màu đen là một màu, nhưng đó sẽ là một sự gian lận ...

Ồ, và tôi có thể thêm, không vi phạm quy tắc số 1 nào!

Xuất ra một loạt các cảnh báo và lời nhắc

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!

Mã bị đánh cắp:

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

Bạn đọc kỹ quy tắc? tốt, bạn phải đăng mã không mã hóa với một đầu ra
Mukul Kumar

@MukulKumar đã sắp xếp ...
WallyWest

Bạn có thể lưu 4 bằng cách thêm tiền tố vào câu trả lời A=alert;và thay thế tất cả alertbằng A. Và một lần nữa nếu bạn di chuyển cảnh báo A(0>(x...sau dấu chấm phẩy prompt())!=r;)n++1.
DocMax

bạn có thể thay đổi feedback if too high/lowsử dụng 84 ký tự hiện tại thành i give feedback(chỉ yêu cầu \151 \147\151ve feedbackhoặc 24 ký tự để lưu 60 ký tự .
corsiKa

1
Tôi có thể sai, nhưng tôi nghĩ bạn có thể chuyển n++từ vòng lặp for sang x=prompt(n++)để tiết kiệm phải làm + ++n+trong cảnh báo cuối cùng. Nó sẽ tiết kiệm được 3.
DocMax

7

Javascript, 324 byte, điểm -76

[Cập nhật do thay đổi quy tắc]

  • 324 byte
  • -300 để hiển thị các quy tắc
  • -50 để hiển thị lượt khi người dùng thắng
  • -25 để báo cho người dùng khi anh ta nhập một số ngoài phạm vi
  • -25 khi không sử dụng ngẫu nhiên tích hợp (cập nhật)

Tổng số điểm: -76

Chơi gôn

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

Hãy để ungolf lộn xộn này.

Đầu tiên, được xác định đúng (nhưng điều này vẫn không được tốt lắm với mã bị che khuất):

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

Thứ hai, đổi tên định danh:

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

Vì vậy, hàm unencrypt nhận được tất cả các ký tự giữa ASCII 33 ( !) và ASCII 58 ( :) và thêm 32, chuyển đổi chúng thành các ký tự trong phạm vi A-Z.

Cho phép mã hóa nhiều hơn bằng cách giải mã tất cả các chuỗi:

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

Và cuối cùng cho phép di chuyển một số hướng dẫn đến những nơi khác, thay thế chuỗi ternary dài bằng if và elses, nối các chuỗi nối và đơn giản hóa toán học, để tăng khả năng đọc:

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

Mẫu vật:

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
Tôi thực sự thích nó :)
Wolle Vanillebär Lutz

Vui lòng hiển thị đầu ra mẫu mã của bạn.
Mukul Kumar

@MukulKumar. Xong, đầu ra được thêm vào
Victor Stafusa

7

C - 272 ký tự - 300 - 50 - 25 = -103

  • -300 để hiển thị các quy tắc;
  • -50 để cho người chơi biết số lượt;
  • -25 vì không sử dụng thư viện RNG tiêu chuẩn.

Mã đánh gôn:

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

Ung dung:

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

Đầu ra:

Đầu ra


Sản lượng ở đâu?
Mukul Kumar

@IlmariKaronen, EDIT2. Ngoài ra, tôi không chỉ lấy kỷ nguyên.
Oberon

@Oberon xin vui lòng gửi đầu ra cũng được
Mukul Kumar

@MukulKumar, đã đăng.
Oberon

5

C: 237 - 300 - 50 - 25 - 25 - 10: -173 điểm

-300 cho các quy tắc, -50 để hiển thị số lần đoán, -25 khi không sử dụng bất kỳ trình tạo số ngẫu nhiên tích hợp nào, -25 cho thông báo ngoài phạm vi và -10 để tô màu cho thông báo chúc mừng.

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

Ung dung:

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

Chạy ví dụ:

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!

Dòng cuối cùng hiện lên màu đỏ.


Bravo! Bạn trúng tất cả tiền thưởng !!!
Mukul Kumar

4

bash, -137

Ghi bàn

273 (byte) - 300 (quy tắc) - 50 (số lần thử) - 25 (cảnh báo OOF) - 25 (PRNG tùy chỉnh) - 10 (màu)

Phiên bản chơi gôn

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.

Lưu ý rằng dòng cuối cùng là một nhận xét, vì vậy nó không chứa chuỗi ký tự hoặc ký tự.

Phiên bản ung dung

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

Sản lượng mẫu

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

Dòng cuối cùng được in màu xanh lá cây.


3

C #: -30 điểm

  • 345 byte
  • -300 để hiển thị các quy tắc
  • -50 để hiển thị lượt khi người dùng thắng
  • -25 để báo cho người dùng khi anh ta nhập một số ngoài phạm vi

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

Để chạy nó, đặt nó trong một tệp (code.cs) và chạy với scriptcs trên dòng lệnh : scriptcs code.cs.

Ungolfed : Mở rộng tên biến thành một cái gì đó dễ hiểu hơn và thay đổi các chữ cái hex thành chữ cái thật.

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

Sản lượng mẫu có sẵn ở đây .


3
Xin lỗi vì nói điều này, nhưng sự cai trị quốc gia rằng " Không sử dụng các nhân vật T, O, L, W, H, IG(không phải chữ thường hay chữ hoa) trong chuỗi hoặc ký tự chữ. "
Victor Stafusa

Vì vậy, chỉ cần thay thế T, O, L... với \x54, \x4F, \x4C... và bạn đang sử dụng tốt.
lười

Cảm ơn. Tôi chỉ cần đặt mã hóa hex cho các ký tự áp dụng theo chuỗi ký tự trong phiên bản golf và sửa đổi cách tính điểm cho phù hợp.
Yaakov Ellis

Vui lòng hiển thị đầu ra mẫu mã của bạn.
Mukul Kumar

@MukulKumar xem ở đây để đầu ra. Tôi cũng chỉ thực hiện một vài thay đổi nhỏ cho logic, khắc phục một sự cố.
Yaakov Ellis

2

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

-300: Hướng dẫn
-50: Hiển thị số lượt
-25: Không sử dụng chức năng ngẫu nhiên
-25: cảnh báo người dùng về đầu vào ngoài phạm vi

GOLFED

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

NÂNG CẤP

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

ĐẦU RA


Cá nhân tôi không thể dừng bản thân mình .. :)
Mukul Kumar

2

C, 183-300-25 = -142

183 byte -300 cho các quy tắc -25 khi không sử dụng thư viện ngẫu nhiên

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

phiên bản không có bản quyền:

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

chạy mẫu:

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"cả hai đều chứa các ký tự bất hợp pháp TOLWHIGtolwhig.
Oberon

Cũng như "Chúc mừng! Bạn đã tìm thấy số!" và "WhileURong (USayNumbr; ISayBigrOrSmalr)".
For

@Fors nhưng những thứ đó được cho phép (xem EDIT2 ).
Oberon

Thật sự họ là! Bởi một số lý do tôi đã bỏ lỡ chỉnh sửa đó.
Dành cho

@Oberon Vậy EDIT 2 có được TOO LOWphép không?
Bàn chải đánh răng

2

J - 190 char -300 -50 = -160 điểm

'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

Giải thích (nhớ lại rằng J được đọc từ phải sang trái):

  • 'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2 - In các quy tắc.
  • 32767-?2^16[- Bỏ giá trị trả về, sau đó tạo một số ngẫu nhiên trong khoảng từ 0 đến 2 ^ 16-1. Sau đó, điều chỉnh nó đến phạm vi -32768..32767 bằng cách trừ nó từ 32767.
  • 1>:@]^:(...)^:_~- x u^:v^:_ yMô hình giống như một vòng lặp while. xkhông đổi, vày bị đột biến với mỗi lần thực hiện u. Điều này tiếp tục cho đến khi x v ytrả về 0 hoặc x u ykết quả không thay đổi y. Các ~giao dịch hoán đổi hai đối số, do đó xsẽ là số ngẫu nhiên và ysẽ bắt đầu lúc 1. chúng tôi u>:@], có nghĩa là tăng 1 này và trả về nó, vì vậy nó hoạt động như một bộ đếm và các x u yđiều kiện chấm dứt không bao giờ có thể xảy ra.
  • [:".1!:1@1:- Lấy bộ đếm và bỏ qua giá trị của nó, sử dụng số 1 thay thế ( 1:). Đọc trong một dòng đầu vào ( 1!:1) từ bàn phím (xử lý tệp 1) và thực hiện nó ( ".). Điều này cho phép J, có dấu âm là bình thường _, lấy số ở dạng -n(đánh giá là phủ định được áp dụng cho số n).
  • ]`(...)@.*@-- Lấy sự khác biệt của số ngẫu nhiên từ trước và đoán ( -). Bây giờ, chúng tôi chọn hành động tiếp theo tùy thuộc vào sự khác biệt này bằng không ( @.*). Nếu có, trả về ( ]`) là 0 làm kết quả cho x v y, để việc thực thi kết thúc và toàn bộ vòng lặp while trả về bộ đếm. Khác ...
  • 71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>- Trả về mảng 5 8 16nếu số âm và 1 2 0 1nếu là số dương. Sau đó, chuẩn bị 13 8 8 _39và thêm 71 vào mọi thứ, vì vậy chúng tôi có 84 79 79 32 76 79 87hoặc 84 79 79 32 72 73 71 72.
  • 1[2:1!:2~a.{~- Biến các số này thành các ký tự ASCII bằng cách lập chỉ mục bảng chữ cái a.với chúng. Sau đó in chúng ra 1!:2(sử dụng tệp xử lý 2) và trả về 1 là kết quả của x v y.
  • 'Congrats, you found the number in ',' turns!',~":- Khi vòng lặp kết thúc, nó trả về bộ đếm. Chuyển đổi nó thành một chuỗi với": và đặt nó ở giữa các chuỗi 'Congrats, you found the number in '' turns!'.

Đầu ra mẫu:

   '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 (quy tắc) - 50 (lượt đếm) - 25 (ngoài phạm vi)

Tôi sẽ không giành chiến thắng nhưng một cách thú vị để có được những lá thư tôi nghĩ.

Chơi gôn

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

Ung dung

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

Sản lượng mẫu

(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)

(Có, những số này được tính là byte, bộ ký tự APL vừa với một byte.)

Tôi đã tuyên bố "hiển thị các quy tắc trò chơi" và "đếm số lượt".

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

Chạy ví dụ:

      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!

Ung dung:

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

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

Nếu số là 10:

Con số?

5

Thấp

số 8

Thấp

12

Cao

10

Đúng 4 lượt


Số lượng ký tự được dựa trên mã với tất cả khoảng trắng được loại bỏ.

Lưu ý rằng Pogo không phải là ngôn ngữ giả mạo. Tôi đã tạo nó và viết một trình biên dịch và IDE cho nó ở đây: https://github.com/nrubin29/Pogo


Đọc EDITEDIT của tôi - 2
Mukul Kumar

Cập nhật theo các chỉnh sửa.
nrubin29
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.