Đoán số


10

Sự miêu tả

Tạo một trò chơi "Đoán số" hoạt động đầy đủ. Trò chơi được chơi bởi hai người chơi như sau:

  1. Người chơi chọn một số (A) trong khoảng từ 1 đến N
  2. người chơi hai cố gắng đoán A chọn một số (B) trong cùng phạm vi
  3. người chơi đầu tiên trả lời "cao hơn" if A > B , "thấp hơn" if A < B hoặc "chính xác" if A = B .
  4. bước 2-3 được lặp lại tôi lần hoặc cho đến khi "chính xác" được trả lời.
  5. Nếu "đúng" được nghe, người chơi hai thắng nếu không anh ta thua.

Thông số kỹ thuật

Thông số tối thiểu cho một mục hợp lệ:

  • người dùng có thể chơi như người chơi một hoặc người chơi hai.
  • máy tính đóng vai trò khác.
  • máy tính phải thực sự cố gắng đoán số trong khi chơi như người chơi hai (vì vậy, đoán theo dữ liệu đã cho hoặc bỏ qua dữ liệu đã cho là gian lận)
  • N = 100 hoặc đầu vào của người dùng (sự lựa chọn của bạn)
  • I = 5 hoặc đầu vào của người dùng (sự lựa chọn của bạn)
  • chương trình phải thông báo sau đó người chiến thắng cuối cùng.
  • hướng dẫn đầy đủ có thể đọc được của con người về những việc cần làm trong mỗi bước (ví dụ: "Chơi với tư cách là người chơi một hoặc người chơi hai?" , "Nhập một dự đoán khác:" , v.v.) - đừng tham gia vào bước này; chỉ cần giữ nó đơn giản

Điều kiện chiến thắng

Theo thứ tự đó:

  1. Bài viết được bình chọn cao nhất sẽ thắng nếu ít nhất 3 phiếu trước bài bình chọn cao thứ hai.
  2. Chiến thắng ngắn nhất.

Tôi đã không đọc rõ ràng chúng ta cần một AI trên đó. Bạn có thể xác nhận cả hai người chơi là con người?
JB

@JB: xin lỗi về điều đó: / Bạn làm cần một AI. Tôi đang cập nhật câu hỏi ngay bây giờ ...
Mười

2
Tôi nghĩ rằng các văn bản hướng dẫn cho từng bước nên được đưa ra, nếu không thật khó để so sánh các câu trả lời.
Joey

@Joey Chắc chắn
Let_Me_Be

Là xác nhận đầu vào của người dùng quan trọng?
zzzzBov

Câu trả lời:


3

Windows PowerShell, 289

nal ^ Read-Host
filter p{"Player $_ wins.";exit}
$p=1-(^ Player 1 or 2)
$n=($x=1)..($y=99)|random
if($p){$n=^ Enter number}1..5|%{if($p){'{0:"higher";"lower";"correct";2|p}'-f($n-(^ Guess))|iex}else{"Guessing, "+($g=$x..$y|random);@{104='$x=$g+1';108='$y=$g-1';99='2|p'}[+(^)[0]]|iex}}
1|p

Lịch sử:

  • 2011 / 02-21 18:44 (620) Ung dung.
  • 2011 / 02-21 19:15 (365) Vòng golf đầu tiên.
  • 2011 / 02-21 19:31 (359) Một số nội tuyến.
  • 2011 / 02-21 19:38 (340) Một số chuỗi được rút ngắn.
  • 2011 / 02-21 19:44 (339) whilefor
  • 2011 / 02-21 19:53 (331) Một số chuỗi trùng lặp được kéo vào các biến.
  • 2011 / 02-21 19:53 (330) Một biến khác được nội tuyến.
  • 2011 / 02-21 19:53 (328) Điều kiện vòng lặp được tối ưu hóa. Không thể sử dụng một đường ống, mặc dù.
  • 2011 / 02-22 01:57 (326) else{if...}elseif- lưu niềng răng.
  • 2011 / 02-22 12:42 (325) Đã di chuyển nhiều thứ xung quanh, sử dụng hàm băm thay vì switchđể tránh đặt tên vòng lặp. Bây giờ tôi có thể sử dụng chỉ breakvà một đường ống, quá. Thông báo người chiến thắng đã chuyển vào một bộ lọc sử dụng exitđể không cần phải nghỉ.
  • 2011 / 02-23 01:23 (308) Thay vì một elseifchuỗi để kiểm tra dự đoán, tôi chỉ sử dụng một chuỗi định dạng với các giá trị khác nhau cho các giá trị âm, dương và bằng không. Tiết kiệm rất nhiều.
  • 2011 / 02-23 02:16 (306) Sử dụng phép trừ thay vì bằng.
  • 2011/03/12 02:27 (289) Giảm đến mức tương tác người dùng thô sơ như giải pháp Ruby. Tất nhiên là nó ngắn hơn rồi.

9

TRS-80 BASIC, 249 ký tự

Tôi nghĩ rằng đây có thể là lần đầu tiên tôi gửi câu trả lời cho trang web này mà tôi đã viết trước khi trang web tồn tại.

0 CLS:RANDOM:A=1:B=1E3:Q=RND(1E3):FORX=1TO8E9:PRINTA"-"B:INPUT"
 Guess";C:IFC<AORC>B,X=X-1:NEXTELSEIFC<QPRINT"Too low":A=C+1:NEXTELSEIFC>QPRINT"Too high":B=C-1:NEXTELSEPRINTC"is right!!
 It took you"X"tries.
":X=9E9:NEXT:FORX=0TO0:X=INKEY$="":NEXT:RUN

Trong thực tế, tôi đã viết nó trước khi web trên toàn thế giới tồn tại. Trở lại những năm 1980, giống như những chiếc TRS-80 đang trở nên không liên quan.

Đây là một ví dụ về "một lớp lót" - một nỗ lực để phù hợp với chương trình thú vị nhất bạn có thể vào một dòng BASIC duy nhất. Đó là lớp lót đầu tiên của tôi, và không ấn tượng lắm. (Có một số lớp lót tuyệt vời trôi nổi ngoài kia.)

Một dòng TRS-80 BASIC được giới hạn ở 255 ký tự, trừ đi một vài chi phí. Mặc dù đôi khi bạn có thể vượt quá mức này, vì giới hạn thực là 255 byte sau khi mã hóa - nhưng trình soạn thảo cũng sẽ cắt bớt một dòng có hơn 255 ký tự trước khi mã hóa và bạn cần sử dụng các thủ thuật trong trình chỉnh sửa dòng để chèn các ký tự điều khiển bằng chữ như dòng mới vào chuỗi của bạn.

Và vâng, để làm rõ, những ngắt dòng trong danh sách là các ký tự dòng mới. (Để có được chúng trong mã của bạn, bạn cần sử dụng Clệnh hange trong khi EDITnhập dòng. Một nỗi đau hoàn toàn, nhưng đáng để thay thế tám hoặc nhiều ký tự cho +CHR$(13)một.)

Chết tiệt, tôi đã chơi golf trong một thời gian dài.


6

C 397 Nhân vật

N,H=99,L=0,c=0,w=1;main(){char s[9];puts("Play as player 1 or 2: ");scanf("%d",&N);if(N-1){getchar();do{N=rand()%(H-L)+L+1;printf("My guess: %d\n",N);gets(s);if(*s=='c'){w=2;break;}if(*s-'l')H=N-1;else L=N-1;c++;}while(c<5);}else{N=rand()%99+1;while(c<5){puts("Enter guess: ");scanf("%d",&H);if(H==N){puts("correct");break;}else puts(H>N?"higher":"lower");c++;}if(c==5)w=2;}printf("Winner %d",w);}

Trong một hình thức dễ đọc hơn.

main()
{
        int i,N,H=100,L=0,c=0,w=1;
        char s[10];
        puts("Play as player 1 or 2: ");
        scanf("%d",&i);
        if(i-1)
        {
                getchar();
                do{
                        N=rand()%(H-L)+L+1;
                        printf("My guess: %d\n",N);
                        gets(s);
                        if(s[0]=='c')break;
                        else if(s[0]=='h')H=N-1;
                        else L=N-1;
                        c++;
                }while (c<5);
                if(c<5)w=2;
        }
        else
        {
                N=rand()%99+1;
                while (c<5)
                {
                        puts("Enter another guess: ");
                        scanf("%d",&H);
                        if(H==N){printf("correct\n");break;}
                        else if(H>N)printf("higher\n");
                        else printf("lower\n");
                        c++;
                }
                if(c==5)w=2;
        }
        printf("Winner %d",w);
}

@Joey đã sửa ngay.
fR0DDY

tốt, tôi không biết đầy đủ C. Nhưng bạn có thể giải thích làm thế nào một chương trình với các biến không có trình xác định kiểu biên dịch không?
MAKZ

Bất kỳ biến nào không có loại được chỉ định là một số nguyên
Ethiraric

4

C #:

Số lượng ký tự: Với khoảng trắng: 575 Không có khoảng trắng: 464

    static void Main()
    {
        Action<object> w = s => Console.WriteLine(s);
        Func<object, byte> r = t => { w(t); var s = Console.ReadLine(); return Convert.ToByte(s); };
        var p = r("Player (1/2):");
        int N = 100, g, i = 0, c, d;
        var q = new List<int>(Enumerable.Range(0, N));
        Func<Guid> x = Guid.NewGuid;
        c = p == 1 ? r("Number:") : q.OrderBy(j => x()).First();
        m: i++;
        g = p == 2 ? r("Guess:") : q.OrderBy(j => x()).First();
        d = g < c ? -1 : (g > c ? 1 : 0);
        w(d == -1 ? "Higher" : (d == 1 ? "Lower" : "correct"));
        q = q.Where(n => d == -1 ? n > g : n < g).ToList();
        if(c != g && i < 5) goto m;
        r(g);
    }

Chỉnh sửa làm trong khi bây giờ là "Goto" ( rùng mình )


3

Đồng bằng cũ tốt

#include <stdio.h>
#define x(s) puts(s)
main(){int c,i,l,h,g;srand(time(NULL));p:x("You want to guess (1) or should I (2)?");scanf("%d",&c);i=5;if(c==2){x("Think a number 1..100");h=100;l=1;goto t;}if(c==1){x("Guess a number 1..100");h=rand()%100+1;goto g;}return 0;t:if(!i--)goto u;printf("%d (1)higher (2)lower (3)correct",g=rand()%(h-l)+l);scanf("%d",&c);if(c==1)l=g;if(c==2)h=g;if(c==3)goto c;goto t;g:if (!i--)goto c;scanf("%d",&g);if(g>h)x("lower");if(g<h)x("higher");if(g==h){x("correct");goto u;}goto g;u:x("You win");goto p;c:x("I win");goto p;}
  • 23/11/2011 16:44:00 883 đẹp và ấm cúng
  • 24/11/2011 09:38:00 616 cố định và rút ngắn
  • 24/11/2011 11:52:00 555 rút ngắn

1
Bạn đã viết điều này trong tương lai? thật là thông minh !!
mikera

3

JavaScript

Phiên bản rút gọn mới ( cuộc gọi bị giảm varvà giảm alert:

268 ký tự

function g(m){n=u(confirm('Player pick?'));function u(p){if (p){do{n=parseInt(prompt('Number'))}while(isNaN(n)||!n||n>m)}else{n=parseInt(Math.random()*m)+1}return n}while(g!==n){do{g=parseInt(prompt('Guess'))}while(isNaN(g));alert(g<n?'higher':g>n?'lower':'correct')}}

Để chạy cuộc gọi g(100);, tự thực hiện không được tính, vì nó thêm một số lượng ký tự khác nhau (275 ký tự cho g(100);).

nguyên bản (đâu đó khoảng 600 ký tự bao gồm cả khoảng trắng):

function guessTheNumber(m)
{
  var n = getNum(confirm('Player pick the number?')), g;

  function getNum(p)
  {
    var n;
    if (p)
    {
      do
      {
        n = parseInt(prompt('What number?'));
      } while(isNaN(n) || !n || n > m);
    }
    else
    {
      n = parseInt(Math.random() * m) + 1;
    }
    return n;
  }

  while(g!==n)
  {
    do
    {
      g = parseInt(prompt('Take a guess!'));
    } while(isNaN(g));
    if (g < n)
    {
      alert('higher');
    }
    else if (g > n)
    {
      alert('lower');
    }
    else
    {
      alert('correct!');
    }
  }
}

Giảm thiểu (312) :

function g(m){var g,n=u(confirm('Player pick?'));function u(p){var n;if (p){do{n=parseInt(prompt('Number'))}while(isNaN(n)||!n||n>m)}else{n=parseInt(Math.random()*m)+1}return n}while(g!==n){do{g=parseInt(prompt('Guess'))}while(isNaN(g));if(g<n) alert('higher');else if(g>n) alert('lower');else alert('correct')}}

xin lỗi, tôi đã không thông báo Tốt hơn nên đặt mã mới nhất của bạn lên hàng đầu. (Ngoài ra, tôi không thể làm cho nó chạy đúng cách: - /)
Eelvex

@Eelvex: Trong khi bạn đang cố gắng để chạy nó, giải pháp của tôi ngắn hơn so với hiện tại được chấp nhận. Và bạn thực sự nên xác định các chuỗi chính xác sẽ được sử dụng khi tương tác với người dùng. Về cơ bản mọi thứ Magnus đã làm là sử dụng tương tác ngắn gọn hơn, tất nhiên là ngắn hơn.
Joey

Tôi có thấy đúng không và chương trình này không xử lý đúng trường hợp con người là người chơi 1 đúng không? Ít nhất tôi không thấy mã cho AI để đoán số và người chơi nhập »cao hơn«, »thấp hơn« hoặc »đúng« ở bất cứ đâu ...
Joey

@Joey, tôi có ấn tượng rằng nếu một người chơi đi trước, họ sẽ chỉ phải chọn một số. Tôi đoán tôi hơi mù mờ về lý do tại sao một người chơi con người sẽ chọn cao hơn, thấp hơn và chính xác
zzzzBov

Chỉ cần làm theo hướng dẫn cho người chơi 1 và 2. Một trong số họ là người, người còn lại là máy tính. Không có sự khác biệt trong giao thức, mặc dù. Ngoài ra câu »máy tính phải thực sự cố gắng đoán số trong khi chơi như người chơi hai« rất nhiều ngụ ý rằng máy tính phải đoán một số.
Joey

3

Python 2.7 334 335 327 314 300 Ký tự (Lần đầu tiên tôi chơi gôn)

(335) Quên thoát khỏi dòng mới.

(327) Đã xóa 100 dự phòng cho randint. So sánh ký tự đầu tiên của phản ứng, thay vì toàn bộ chuỗi.

(314) Cập nhật in ai thắng.

(300) Thay đổi khi người chơi là người chơi 1: thay đổi cách đoán số là máy tính

from random import*
i=input
s="Enter number:"
p=i("Player 1/2:")-1
h=100
N=(i(s),randint(1,h))[p]
b=l=0
for _ in[0]*5:
 exec("g=(h+l)/2;r=raw_input('Guessing '+`g`+':')[0];exec('h=g','l=g')[r=='l'];b=r=='c'","g=i(s);b=g==N;print(('higher','lower')[N<g],'correct')[b]")[p]
 if b:break
print 1+b,"won"

2

CƠ BẢN, 184

100 INPUT "P1 NUMBER? ";
200 FOR I%=1 TO 5
300 INPUT "P2 GUESS? ";G%
400 INPUT "P1 SENTENCE? ";S$
500 IF S$="CORRECT" THEN 800
600 NEXT I%
700 PRINT "WINNER 1":END
800 PRINT "WINNER 2"

Đây là phiên bản không có AI.


Tôi nhận ra đây là một câu trả lời cũ, nhưng sau đó tôi không biết điều này và tôi chỉ vấp phải điều này - bạn có thể sử dụng các số dòng ngắn hơn như 1, 2, 3, v.v., hoặc chỉ giả sử một cái gì đó như QBASIC / FreeBASIC và bỏ qua chúng hoàn toàn
nyuszika7h

@ nyuszika7h Đây là một cuộc thi phổ biến hơn là môn đánh gôn, tôi muốn tham gia vào các số hàng trăm điển hình hơn.
JB

Nó là? Vâng, nó được gắn thẻ code-golf.
nyuszika7h

Với các điều kiện chiến thắng cụ thể và rõ ràng (và tệ hại, IMHO).
JB

Oh phải, tôi đã nhìn thấy nhưng quên nó.
nyuszika7h

2

Lua 360 Chars

i=io.read p=print I=5 N=100 math.randomseed(os.time())r=math.random p"Play as player one or two?"o=i"*n">1 _=o and p("Input number between 1 and",N)n=o and i"*n"or r(I,N)l,u=1,N for k=1,I do p"Guess!"g=o and r(l,u)or i"*n"p("Guessed",g)if n==g then p"Correct"break elseif n>g then p"Higher"l=g else p"Lower"u=g end end p(o and"I"or"You",n==g and"Won"or"Loose")

Phiên bản không chơi gôn:

i=io.read
p=print
I=5
N=100
math.randomseed(os.time())      -- Make things less predictable
r=math.random                   
p"Play as player one or two?"
o=i"*n">1
_=o and p("Input number between 1 and",N) -- if one, ask for number
n=o and i"*n"or r(I,N)          -- get number from user or random
l,u=1,N                         -- boundaries for doing "smart" guessing
for k=1,I do
    p"Guess!"
    g=o and r(l,u)or i"*n"      -- get guess (random or input)
    p("Guessed",g)
    if n==g then p"Correct!"break -- break loop if guessed correctly
    elseif n>g then             -- if guess to low
    p"Higher"l=g else           -- print + update boundaries
    p"Lower"u=g end
end
p(o and"I"or"You",n==g and"Won"or"Loose") -- Determine outcome!

2

Javascript

Đây là khoảng 800 ký tự và bao gồm lựa chọn nhị phân cơ bản 'AI' cho một nửa trình phát máy tính. Tôi có thể có thể lưu một vài ký tự nếu tôi thoát khỏi tất cả các ký tự của mình varnhưng tôi không thích rò rỉ các biến ngay cả khi đang chơi golf. Tôi cũng đã thực hiện hai bước "Điều này có đúng không?" / "Cái này có cao hơn không?" điều này với xác nhận cửa sổ bật lên thay vì bật lên nhanh chóng và kiểm tra "chính xác" / "cao hơn" / "thấp hơn" mặc dù điều đó cũng có thể lưu một số ký tự, tôi thực sự không kiểm tra.

Ngoài ra, tôi chỉ thử nghiệm nó trên Firefox 4, vì vậy tôi không biết liệu một số điều tôi đang làm có ổn định hay không, đặc biệt là kết hợp một đầu vào không hợp lệ, được phân tích thành NaN, thành một giá trị mặc định trong wphàm của tôi .

function game(N, I) {
    var wa=function(a){window.alert(a)};
    var wc=function(s){return window.confirm(s)};
    var wp=function(s){return window.prompt(s)};
    var ri=function(s,d){return parseInt(wp(s),10)||d};
    var m=function(l,h){return Math.round((h+l)/2)};
    N = N || pd("Highest possible number?",100);
    I = I || pd("How many guesses?",5);
    var p = wc("Be player 2?");
    var s = [1,N];
    var a = p?Math.ceil(Math.random()*N):Math.min(N,Math.max(1,ri("Pick a number from 1 to " + N,1)));
    var w = 0;
    var g = 0;
    if(p) while(I--){while(!(g = ri("Guess:",0)));if(g==a){wa("correct");w=p+1;break;}else{wa(g<a?"higher":"lower")}}
    else while(I--){g = m(s[0],s[1]);if(wc("Is "+g+" correct?")) { w=p+1;break;} else if (wc("Is "+g+" higher?")){s=[s[0],g];}else{s=[g,s[1]];}}
    if(!w)w=!p+1;
    wa("Player " + w + " wins!");
}
game(100,5);

2

Java, 1886 ký tự

import java.io.*;import java.util.*;import java.util.regex.*;public class GuessGame {int L=1;int H=100;int G=5;int N;String HS="higher";String LS="lower";String CS="correct";public static void main(String[] args){if (args.length==2)new GuessGame(Integer.parseInt(args[0]),Integer.parseInt(args[1])).play();else if(args.length==0)new GuessGame(100,5).play();else System.out.println("usage GuessGame HighInteger NumberGuess");}GuessGame(int H,int G){this.H = H;this.G = G;}void play(){int pNum=getInt("Play As Player 1 or Player 2?","1|2");if(pNum==1)playP2();else playP1();System.out.println("The number was "+N);}int getInt(String pmpt,String val){BufferedReader cin=new BufferedReader(new InputStreamReader(System.in));int i=0;Pattern p=Pattern.compile(val);boolean fnd=false;String ln="";try{while(!fnd){System.out.println(pmpt);ln=cin.readLine();Matcher m=p.matcher(ln);fnd=m.find();}i=Integer.parseInt(ln);} catch (Exception ex) {}return i;}String processGuess(int g){if(N>g)return HS;else if(N<g)return LS;else return CS;}void playP1(){N=new Random().nextInt(H);for(;G>0;G--){String rslt=processGuess(getInt("Player 2, enter your guess:","\\d?"));System.out.println(rslt);if(rslt.equals(CS)){System.out.println("Player 2 wins!");break;}}}void playP2() {N=getInt("Player 1, enter your number:", "\\d+");int max=H;int min=L;int nextGuess=min+(max-min)/2;for (;G>0;G--){System.out.println("Player 2, enter your guess:" + nextGuess);String rslt=processGuess(nextGuess);System.out.println(rslt);if(rslt.equals(HS)){min=nextGuess+1;nextGuess=fuzzify(nextGuess+(max-nextGuess)/2,min,max);}if (rslt.equals(LS)){max=nextGuess-1;nextGuess=fuzzify(nextGuess-(nextGuess-min)/2,min,max);}if(rslt.equals(CS)){System.out.println("Player 2 wins!");break;}}}int fuzzify(int i,int mn,int mx){int fz=new Random().nextInt(3);if(fz==1)return Math.max(mn,--i);if(fz==2)return Math.min(mx,++i);return i;}}

Phiên bản không chơi gôn:

import java.io.*;
import java.util.*;
import java.util.regex.*;
public class GuessGame {
    int L = 1;
    int H = 100;
    int G = 5;
    int N;
    String HS = "higher";
    String LS = "lower";
    String CS = "correct";
    public static void main(String[] args) {
        if (args.length == 2)
            new GuessGame(Integer.parseInt(args[0]), Integer.parseInt(args[1])).play();
        else if (args.length == 0)
            new GuessGame(100, 5).play();
        else
            System.out.println("usage GuessGame HighInteger NumberGuess");
    }
    GuessGame(int H, int G) {
        this.H = H;
        this.G = G;
    }
    void play() {
        int pNum = getInt("Play As Player 1 or Player 2?","1|2");
        if (pNum == 1)
            playP2();
        else
            playP1();
        System.out.println("The number was " + N);
    }
    int getInt(String pmpt, String val) {
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        int i = 0;
        Pattern p = Pattern.compile(val);
        boolean fnd = false;
        String ln = "";
        try {
            while (!fnd) {
                System.out.println(pmpt);
                ln = cin.readLine();
                Matcher m = p.matcher(ln);
                fnd = m.find();
            }
            i = Integer.parseInt(ln);
        } catch (Exception ex) {}
        return i;
    }
    String processGuess(int g) {
        if (N > g)
            return HS;
        else if (N < g)
            return LS;
        else
            return CS;
    }
    void playP1() {
        N = new Random().nextInt(H);
        for (; G > 0; G--) {
            String rslt = processGuess(getInt("Player 2, enter your guess:", "\\d?"));
            System.out.println(rslt);
            if (rslt.equals(CS)) {
                System.out.println("Player 2 wins!");
                break;
            }
        }
    }
    void playP2() {
        N = getInt("Player 1, enter your number:", "\\d+");
        int max = H;
        int min = L;
        int nextGuess = min + (max - min) / 2;
        for (; G > 0; G--) {
            System.out.println("Player 2, enter your guess:" + nextGuess);
            String rslt = processGuess(nextGuess);
            System.out.println(rslt);
            if (rslt.equals(HS)) {
                min = nextGuess + 1;
                nextGuess = fuzzify(nextGuess + (max - nextGuess) / 2, min, max);
            }
            if (rslt.equals(LS)) {
                max = nextGuess - 1;
                nextGuess = fuzzify(nextGuess - (nextGuess - min) / 2, min, max);
            }
            if (rslt.equals(CS)) {
                System.out.println("Player 2 wins!");
                break;
            }
        }
    }
    int fuzzify(int i, int mn, int mx) {
        int fz = new Random().nextInt(3);
        if (fz == 1)
            return Math.max(mn, --i);
        if (fz == 2)
            return Math.min(mx, ++i);
        return i;
    }
}

Trước hết: Điều đó thậm chí không biên dịch, vì Java không có chuỗi nhiều dòng. Bạn không thể mong đợi ngắt dòng ở giữa một chuỗi và nó hoạt động.
Joey

Ok, tôi đã ngừng cố gắng để làm cho nó trông đẹp hơn trên màn hình và chỉ dán một dòng duy nhất.
Joe Zitzelberger

1
Hơn nữa (tiết kiệm trong ngoặc đơn): Lớp có thể được đặt tên bằng một chữ cái duy nhất (40). Có rất nhiều khoảng trắng không cần thiết trong đó (80). Bạn có thể thu gọn khai báo của nhiều biến cùng loại, ví dụ int a=5,b=10(34). Bạn có thể đặt tên cho các đối số trong hàm tạo khác với các trường cần tránh this.(10). Bạn có thể loại bỏ Lhoàn toàn vì nó luôn duy trì ở 1(4). Bạn có thể bỏ qua việc khởi tạo HGđược thiết lập trong hàm tạo (6). Bạn có thể sử dụng tên một chữ cái cho tất cả các biến và phương thức (235).
Joey

Đúng, nhưng điều đó sẽ hoàn toàn không thể đọc được. Đây là điểm mà tôi thấy code-golf thực sự trở thành mã-bowling. Nhưng nếu tôi tìm thấy một chút thời gian, tôi sẽ đánh bóng nó tối nay.
Joe Zitzelberger

1
Sửa lỗi cho hình trước: (272). Bạn có thể viết lại fuzzifybằng toán tử điều kiện (20). Bạn có thể nội tuyến BufferedReadertrong getInt(19). Bạn có thể sử dụng String#matchesđể tránh PatternMatchertrong getInt(48). Bạn cũng có thể sử dụng toán tử có điều kiện processGuess(30). Bây giờ tôi xuống còn 1360 thay vì năm 1953 ban đầu của bạn
Joey

2

Đài phát thanh đồng hồ báo thức, 5756 bit (2159 byte)

Sắp có đồng hồ báo thức gần bạn! Dòng mới chỉ dành cho khả năng đọc. Các giá trị ASCII đôi khi được sử dụng thay cho màn hình số bằng chữ trên màn hình. Thông số kỹ thuật phù hợp. Sử dụng mặc định cho AI. Ở đầu vào đầu tiên, sử dụng NULL để làm người đoán, nếu không bạn sẽ đặt số. PADSIZE PHẢI LÀ 4! BÁN PHẢI LÀ 7-BIT VÀ WRAP! Turing-hoàn thành! Kết quả đầu ra higher, lower, correct, you won, và you lost.

}+>,[,>>+++++++[>>>>>>>+++++++>+++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++]>>>>>>>++++++.>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++>+>>>>>>>]>+++.+++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>+++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++.[+]+][++++[+++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++>,[+[+++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++>++>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++.++++++++.[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>.+++++++++++++.[+
]+][++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++>+>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++.+++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++>+>>>>>>>]>+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.>>>>>>>[+]>>>>>>>+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++]]][>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++>+>>>>>>>]>+++.++[+++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+
+>>>>>>>]>.+++.++++.+.>>>>>>>[+]+][+++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++>+>>>>>>>]>+++.++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++[+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.]

1

Ruby 1.9 (298)

b=->f{puts "> "+f;gets}
a=->f{b[f].to_i}
q=a["Player 1 or 2?"]
i,j,g=100,1
n=q<2?a["Enter number:"]:rand(i)+j
5.times{q<2?(g=j+(i-j)/2
c=b["Guessing, #{g}"]
c[0]==?c?break: c[0]==?h?j=g :i=g):(
g=a["Guess:"]
puts g==n ?"correct":g<n ?"higher":"lower"
g==n&&break)}
puts "Player #{g==n ?2:1} won!"

Không hướng dẫn rất thân thiện mặc dù.


Rất đẹp! Giá như bạn có một chút ngẫu nhiên khi AI là người chơi 2 ...
Eelvex

@Eelvex, bị đánh bởi 30 ký tự.
zzzzBov

1

Tôi cảm thấy cần phải làm Java một số công lý. :)

Java - 486 437 421 414

Chơi gôn

import java.util.*;class GuessANumber{static<T>void p(T p){System.out.println(p);}static int i(){return new Scanner(System.in).nextInt();}public static void main(String[]a){int c,g,f=101,i=0;p("Pick (1) or guess (2)?");c=i();if(c==1)p("Pick a number (1-100)");g=c==1?i():new Random().nextInt(100);while(f!=g&&i++<5){p("Guess:");f=c==2?i():f>g?f/2:f+f/2;if(c==1)p(f);p(f>g?"lower":"higher");}if(f==g)p("correct");}}

Hơi bất ngờ

import java.util.*;

class a{

    static<T>void p(T p){
        System.out.println(p);
    }

    static int i(){
        return new Scanner(System.in).nextInt();
    }

    public static void main(String[]a){
        int c,g,f=101,i=0;
        p("Pick (1) or guess (2)?");
        c=i();
        if(c==1)p("Pick a number (1-100)");
        g=c==1?i():new Random().nextInt(100);
        while(f!=g&&i++<5){
            p("Guess:");
            f=c==2?i():f>g?f/2:f+f/2;
            if(c==1)p(f);
            p(f>g?"lower":"higher");
        }
        if(f==g)p("correct");
    }
}
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.