Jump to content

Guess the number/With feedback (player): Difference between revisions

m
syntax highlighting fixup automation
(Added Arturo implementation)
m (syntax highlighting fixup automation)
Line 16:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">V (target_min, target_max) = (1, 10)
V (mn, mx) = (target_min, target_max)
 
Line 44:
L.break
 
print("\nThanks for keeping score.")</langsyntaxhighlight>
 
{{out}}
Line 62:
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">PROC Main()
BYTE n,min=[1],max=[100]
CHAR c
Line 86:
FI
OD
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Guess_the_number_with_feedback_(player).png Screenshot from Atari 8-bit computer]
Line 108:
=={{header|Ada}}==
 
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO;
procedure Guess_Number_Player is
procedure Guess_Number (Lower_Limit : Integer; Upper_Limit : Integer) is
Line 143:
end loop;
Guess_Number (Lower_Limit, Upper_Limit);
end Guess_Number_Player;</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
{{works with|ALGOL 68G|Any - tested with release 2.8.3.win32}}
<langsyntaxhighlight lang="algol68">BEGIN
INT lower := 1;
INT upper := 100;
Line 172:
FI
DO SKIP OD
END</langsyntaxhighlight>
 
=={{header|AppleScript}}==
 
<langsyntaxhighlight AppleScriptlang="applescript">-- defining the range of the number to be guessed
property minLimit : 1
property maxLimit : 100
Line 206:
end if
end repeat
end run</langsyntaxhighlight>
 
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">print {:
Think of a number between 1 and 10 and wait for me to guess it.
On every guess of mine you should state whether the guess was
Line 245:
]
print ""
]</langsyntaxhighlight>
 
{{out}}
Line 278:
The instructions print in order only because the ends of the lines are aligned. If they were not, they might print in a different order. The "Impossible" error message indicates that their are no remaining logical guesses. The range of 1 to 127 was chosen because it's easy to binary-search. All numbers are floating-point integers in AsciiDots, so rounding would be needed to use a range like 1 to 100.
 
<syntaxhighlight lang="asciidots">
<lang AsciiDots>
/.
*$"Think of a number from 1 to 127"
Line 291:
|#a_$01#\ /2#\ | @ \*--{=}-/\-/ |
\-------*{/}@*-*---*-----------------------------------/
</syntaxhighlight>
</lang>
 
=={{header|AutoHotkey}}==
Line 297:
Works with the AutoHotkey entry at: [[Guess the number/With feedback]]
 
<langsyntaxhighlight AutoHotkeylang="autohotkey">MaxGuesses = 50
 
GetParams(LowerBound,UpperBound)
Line 350:
Else
Return, "Too High"
}</langsyntaxhighlight>
 
=={{header|Batch File}}==
<langsyntaxhighlight lang="dos">
@echo off
 
Line 384:
echo Guesses: %attempts%
pause>nul
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 399:
 
=={{header|BASIC}}==
<langsyntaxhighlight lang="basic">10 DEFINT A-Z
20 INPUT "Lower limit? ",L
30 INPUT "Upper limit? ",H
Line 410:
90 L=(H-L)\2+L: GOTO 40
100 H=(H-L)\2+L: GOTO 40
110 PRINT "It took";T;"tries."</langsyntaxhighlight>
{{out}}
<pre>Lower limit? 1
Line 429:
 
=={{header|BBC BASIC}}==
<langsyntaxhighlight lang="bbcbasic"> min% = 1
max% = 100
PRINT "Think of a number between "; min% " and " ;max%
Line 445:
UNTIL FALSE
PRINT "Goodbye."
END</langsyntaxhighlight>
 
=={{header|BCPL}}==
<langsyntaxhighlight lang="bcpl">get "libhdr"
 
let reads(s) = valof
Line 497:
writes("Upper bound? ") ; max := readn()
writef("It took %N attempts.*N", guess(min, max, 1))
$)</langsyntaxhighlight>
{{out}}
<pre>Lower bound? 1
Line 510:
 
=={{header|C}}==
<langsyntaxhighlight Clang="c">#include <stdio.h>
 
int main(){
Line 539:
 
return 0;
}</langsyntaxhighlight>
 
Demonstration (number is 57):
Line 556:
The following is a hacky solution using <tt>bsearch()</tt> and pointers to represent integers. Although the pointers do not point to valid things, <tt>bsearch()</tt> doesn't actually dereference the pointers or care what they point to; it just passes them to the comparator and searches the space of pointers. We can use that to search any space of integers.
{{trans|Java}}
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
Line 607:
printf("Your number is %d.\n", (int)(result - ZERO));
return 0;
}</langsyntaxhighlight>
 
=={{header|C sharp}}==
<langsyntaxhighlight lang="csharp">using System;
using System.Collections.Generic;
using System.Linq;
Line 742:
}
}
</syntaxhighlight>
</lang>
 
=={{header|C++}}==
A clever solution that takes advantage of C++'s built-in binary search function <code>lower_bound()</code>. Instead of searching a slice of a container, we search a range of numbers by implementing a specially-designed custom iterator.
{{trans|Go}}
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <algorithm>
#include <string>
Line 797:
std::cout << "Your number is " << answer << ".\n";
return 0;
}</langsyntaxhighlight>
 
=={{header|Ceylon}}==
<langsyntaxhighlight lang="ceylon">shared void run() {
while(true) {
variable value low = 1;
Line 838:
}
}
}</langsyntaxhighlight>
 
=={{header|Clojure}}==
 
<langsyntaxhighlight Clojurelang="clojure">(require '[clojure.string :as str])
 
(defn guess-game [low high]
Line 855:
\c (println "Huzzah!")
(do (println "Invalid input.")
(recur guess step)))))</langsyntaxhighlight>
Output
<pre>user=> (guess-game 1 100)
Line 875:
=={{header|Common Lisp}}==
An imperative solution using LOOP:
<syntaxhighlight lang="lisp">
<lang Lisp>
(defun guess-the-number (&optional (max 1000) (min 0))
(flet ((get-feedback (guess)
Line 892:
else do (setf max guess)
finally (write-line "I got it!"))))
</syntaxhighlight>
</lang>
 
A recursive solution (we use LABELS instead of FLET for the local function definitions in this version so that GUESS-LOOP will be able to call itself recursively):
<syntaxhighlight lang="lisp">
<lang Lisp>
(defun guess-the-number (&optional (max 1000) (min 0))
(labels ((guess-loop (min max)
Line 909:
(format t "Think of a number between ~a and ~a.~%" min max)
(guess-loop min max)))
</syntaxhighlight>
</lang>
 
=={{header|D}}==
{{trans|Python}}
<langsyntaxhighlight lang="d">import std.stdio, std.string;
 
void main() {
Line 954:
}
writeln("\nThanks for keeping score.");
}</langsyntaxhighlight>
{{out}}
<pre>Think of a number between 1 and 10 and wait for me to guess it.
Line 970:
{{libheader| system.console}}
Thanks JensBorrisholt for System.Console [https://github.com/JensBorrisholt/DelphiConsole/tree/master/Console].
<syntaxhighlight lang="delphi">
<lang Delphi>
program Guess_the_number;
 
Line 1,131:
 
readln;
end.</langsyntaxhighlight>
=={{header|Elixir}}==
{{works with|Elixir|1.2}}
<langsyntaxhighlight Elixirlang="elixir">defmodule Game do
def guess(a..b) do
x = Enum.random(a..b)
Line 1,153:
end
end
Game.guess(1..100)</langsyntaxhighlight>
 
{{out|sample}}
Line 1,166:
 
=={{header|Erlang}}==
<langsyntaxhighlight lang="erlang">% Implemented by Arjun Sunel
-module(guess_game).
-export([main/0]).
Line 1,194:
guess(K,U,N)
end
end.</langsyntaxhighlight>
{{out}}
<pre>Player 1 : Guess my number between 1 and and 100 until you get it right.
Line 1,211:
=={{header|Euphoria}}==
{{trans|PureBasic}}
<langsyntaxhighlight lang="euphoria">include get.e
include wildcard.e
 
Line 1,241:
puts(1,"I do not understand that...\n")
end if
end while</langsyntaxhighlight>
 
=={{header|Factor}}==
This solution uses the <code>search</code> combinator. It performs a binary search on a sequence by placing the "guess" on top of the data stack and expecting an ordering specifier in return.
<langsyntaxhighlight lang="factor">USING: binary-search formatting io kernel math.ranges words ;
 
: instruct ( -- )
Line 1,260:
"I did it. Your number was %d!\n" printf ;
 
instruct play-game gloat</langsyntaxhighlight>
{{out}}
<pre>
Line 1,278:
=={{header|Fantom}}==
 
<langsyntaxhighlight lang="fantom">
class Main
{
Line 1,315:
}
}
</syntaxhighlight>
</lang>
 
Example:
Line 1,350:
 
=={{header|FOCAL}}==
<langsyntaxhighlight lang="focal">01.10 A "LOWER LIMIT",L
01.15 A "UPPER LIMIT",H
01.20 S T=0
Line 1,365:
01.70 S H=G;G 1.3
01.75 T "ATTEMPTS",T,!
01.80 Q</langsyntaxhighlight>
{{out}}
<pre>LOWER LIMIT:1
Line 1,385:
=={{header|Fortran}}==
{{works with|Fortran|95 and later}}
<langsyntaxhighlight lang="fortran">program Guess_a_number_Player
implicit none
Line 1,422:
end select
end do
end program</langsyntaxhighlight>
Output
<pre>Think of a number between 1 and 100 and I will try to guess it.
Line 1,438:
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
Dim hle As String
Line 1,469:
guess = (lowest + highest)\2
Loop
End</langsyntaxhighlight>
 
Sample input/output
Line 1,489:
=={{header|Go}}==
Go's binary search function (<code>sort.Search()</code>) is general enough to be able to do this type of task, as mentioned in the documentation for the function itself.[http://golang.org/pkg/sort/#Search]
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,510:
})
fmt.Printf("Your number is %d.\n", lower+answer)
}</langsyntaxhighlight>
 
Manual solution:
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,550:
}
}
}</langsyntaxhighlight>
 
=={{header|Haskell}}==
 
Explicit version with arbitrary range:
<syntaxhighlight lang="haskell">
<lang Haskell>
main :: IO ()
main = do
Line 1,579:
"h" -> loop guess to
(_) -> putStrLn "Invalid answer." >> loop from to
</syntaxhighlight>
</lang>
 
Short version with set limits:
<syntaxhighlight lang="haskell">
<lang Haskell>
main = f 0 100
where f x y = let g = div (x + y) 2 in
Line 1,590:
"h" -> f g y
"c" -> putStrLn "Yay!"
</syntaxhighlight>
</lang>
 
=={{header|Icon}} and {{header|Unicon}}==
{{trans|Fantom}}
 
<syntaxhighlight lang="icon">
<lang Icon>
procedure main ()
lower_limit := 1
Line 1,625:
}
end
</syntaxhighlight>
</lang>
 
=={{header|IS-BASIC}}==
<langsyntaxhighlight ISlang="is-BASICbasic">100 PROGRAM "GuessIt.bas"
110 LET N=100
120 TEXT 80
Line 1,653:
330 LOOP UNTIL K$>="0" AND K$<="3"
340 LET QUESTION=VAL(K$)
350 END DEF</langsyntaxhighlight>
 
=={{header|J}}==
 
<langsyntaxhighlight lang="j">require 'misc'
guess=:3 :0
'lo hi'=.y
Line 1,671:
end.
end.
)</langsyntaxhighlight>
 
Example session:
 
<syntaxhighlight lang="text"> guess 1 100
guessing a number between 1 and 100
is it 86? hi
Line 1,694:
guessing a number between 49 and 50
is it 49? lo
50</langsyntaxhighlight>
 
This could be made more efficient by replacing <code>guess=.lo+?hi-lo</code> with <code>guess=.<.-:lo+hi</code>. (The above example would have finished on the first guess, but the range 1..100 would never take more than 6 guesses -- the remaining answers would be determined after six guesses.)
Line 1,701:
A clever solution that uses the built-in binary search functions with a virtual list.
{{trans|Go}}
<langsyntaxhighlight lang="java5">import java.util.AbstractList;
import java.util.Collections;
import java.util.Scanner;
Line 1,736:
System.out.printf("Your number is %d.\n", result);
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
Line 1,745:
Well, it does use recursion for the guessing function, but that's OK because the depth is bounded by LOG<sub>2</sub> of the range. That's not true if the user changes his number, but then he gets what he deserves.
 
<langsyntaxhighlight lang="javascript">#!/usr/bin/env js
 
var DONE = RIGHT = 0, HIGH = 1, LOW = -1;
Line 1,798:
 
main();
</syntaxhighlight>
</lang>
 
An example session:
Line 1,830:
This version uses the expression <math>\left\lceil-\log\left(\frac{1}{\mathrm{upper} - \mathrm{lower}}\right) / \log(2)\right\rceil</math> to calculate the maximum number of guesses it will need.
 
<langsyntaxhighlight Julialang="julia">print("Enter an upper bound: ")
lower = 0
input = readline()
Line 1,877:
end
 
println("\nI win after ", attempts, attempts == 1 ? " attempt." : " attempts.")</langsyntaxhighlight>
 
=={{header|Kotlin}}==
{{trans|FreeBASIC}}
<langsyntaxhighlight lang="scala">// version 1.0.5-2
 
fun main(args: Array<String>) {
Line 1,915:
guess = (lowest + highest) / 2
}
}</langsyntaxhighlight>
Sample input/output:
{{out}}
Line 1,934:
 
=={{header|Lasso}}==
<langsyntaxhighlight Lassolang="lasso">#!/usr/bin/lasso9
 
local(
Line 1,983:
}
}
}</langsyntaxhighlight>
 
Examples:
Line 2,018:
 
=={{header|Liberty BASIC}}==
<langsyntaxhighlight lang="lb">mini=0
maxi=100
 
Line 2,047:
end select
wend
print "Thanks for playing." </langsyntaxhighlight>
 
=={{header|Lua}}==
<syntaxhighlight lang="text">function wait(waittime)--wait function is used so that app will not quit immediately
local timer = os.time()
repeat until os.time() == timer + waittime
Line 2,085:
end
end
</syntaxhighlight>
</lang>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<syntaxhighlight lang="text">guessnumber[min0_, max0_] :=
DynamicModule[{min = min0, max = max0, guess, correct = False},
guess[] := Round@Mean@{min, max};
Line 2,096:
Button["too low", min = guess[]],
Button["correct", correct = True]}}]];
guessnumber[1, 100]</langsyntaxhighlight>
 
=={{header|MATLAB}}==
<langsyntaxhighlight MATLABlang="matlab">function GuessNumberFeedbackPlayer
lowVal = input('Lower limit: ');
Line 2,128:
end
end
end</langsyntaxhighlight>
{{out}}
<pre>Lower limit: 0
Line 2,151:
 
=={{header|MAXScript}}==
<langsyntaxhighlight MAXScriptlang="maxscript">inclusiveRange = [1,100]
lowRange = inclusiveRange.x
maxRange = inclusiveRange.y
Line 2,176:
default: (format "\nI don't understand your input.")
)
)</langsyntaxhighlight>
{{out}}
<syntaxhighlight lang="maxscript">
<lang MAXScript>
OK
Think of a number between 1 and 100 and I will try to guess it.
Line 2,200:
Yay. I guessed your number after 6 tries.
OK
</syntaxhighlight>
</lang>
 
=={{header|Modula-2}}==
<langsyntaxhighlight lang="modula2">MODULE raden;
 
IMPORT InOut;
Line 2,238:
InOut.WriteString ("Thanks for letting me play with you.");
InOut.WriteLn
END raden.</langsyntaxhighlight>Example:<pre>raden
Choose a number between 0 and 1000.
 
Line 2,255:
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">import strutils
 
let oRange = 1..10
Line 2,283:
break
 
echo "Thanks for keeping score."</langsyntaxhighlight>
Output:
<pre>Think of a number between 1 and 10 and wait for me to guess it.
Line 2,296:
 
=={{header|NS-HUBASIC}}==
<langsyntaxhighlight NSlang="ns-HUBASIChubasic">10 PRINT "THINK OF A NUMBER BETWEEN 1 AND";" 9, AND I'LL TRY TO GUESS IT."
20 ISVALID=0
30 GUESS=5
Line 2,305:
80 IF ANSWER$="EQUAL TO" THEN PRINT "OH YES! I GUESSED CORRECTLY!":END
90 IF ISVALID=0 THEN PRINT "SORRY";", BUT THAT ANSWER IS INVALID."
100 GOTO 40</langsyntaxhighlight>
 
=={{header|Objective-C}}==
A clever solution that uses the built-in binary search functions with a virtual list.
{{trans|Java}}
<langsyntaxhighlight lang="objc">#import <Foundation/Foundation.h>
 
@interface GuessNumberFakeArray : NSArray {
Line 2,366:
}
return 0;
}</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
 
<langsyntaxhighlight lang="parigp">
guessnumber2(b)={
my(c=0,d=b,a=0);
Line 2,393:
);
}
</syntaxhighlight>
</lang>
 
=={{header|Pascal}}==
<langsyntaxhighlight lang="pascal">Program GuessIt(input, output);
 
var
Line 2,427:
writeln ('So the number is: ', guess:4);
writeln ('It was nice to play with you.');
end.</langsyntaxhighlight>
Output:
<pre>:> ./GuessTheNumberPlayerFeedback
Line 2,446:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">#!/usr/bin/perl
my $min = 1;
Line 2,481:
 
} while(1);
}</langsyntaxhighlight>
<pre>=>> Think of a number between 1 and 99 and I'll guess it!
 
Line 2,504:
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #000080;font-style:italic;">--
-- demo\rosetta\Guess_the_number2.exw
Line 2,566:
<span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
<!--</langsyntaxhighlight>-->
 
=={{header|PicoLisp}}==
{{trans|PureBasic}}
<langsyntaxhighlight PicoLisplang="picolisp">(de guessTheNumber (Min Max)
(prinl "Think of a number between " Min " and " Max ".")
(prinl "On every guess of mine you should state whether my guess was")
Line 2,588:
("L" (setq Min Guess))
("=" (nil (prinl "I did it!")))
(T (prinl "I do not understand that...")) ) ) ) ) )</langsyntaxhighlight>
Output:
<pre>: (guessTheNumber 1 99)
Line 2,602:
 
=={{header|Prolog}}==
<langsyntaxhighlight lang="prolog">min(1). max(10).
 
pick_number(Min, Max) :-
Line 2,623:
play :-
pick_number(Min, Max),
guess_number(Min, Max).</langsyntaxhighlight>
 
Example:
 
<langsyntaxhighlight lang="prolog">?- play.
Pick a number between 1 and 10, and I will guess it...
Ready? (Enter anything when ready):y.
Line 2,637:
Am I correct (c), too low (l), or too high (h)? c.
I'm correct!
true</langsyntaxhighlight>
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">min=0
max=100
 
Line 2,663:
EndIf
ForEver
EndIf</langsyntaxhighlight>
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">inclusive_range = mn, mx = (1, 10)
 
print('''\
Line 2,694:
break
print("\nThanks for keeping score.")</langsyntaxhighlight>
 
'''Sample Game-play'''
Line 2,713:
Hacky solution using a fake list class and the <code>bisect</code> module from the standard library to do the binary search.
{{trans|Go}}
<langsyntaxhighlight lang="python">import bisect
try: input = raw_input
except: pass
Line 2,731:
""" % (LOWER, UPPER))
result = bisect.bisect_left(GuessNumberFakeList(), 0, LOWER, UPPER)
print("Your number is %d." % result)</langsyntaxhighlight>
 
;Sample output:
Line 2,755:
=={{header|Quackery}}==
 
<syntaxhighlight lang="quackery">
<lang Quackery>
[ [ $ "lower higher equal" nest$ ]
constant ] is responses ( --> $ )
Line 2,786:
cr false ] ]
do until ]
2drop temp release ] is play ( --> )</langsyntaxhighlight>
 
{{out}}
Line 2,829:
=={{header|R}}==
Can be fooled if you lie to it. For example, always reporting "h" for guessANumberPlayer(1, 5) will have it guess 0.
<langsyntaxhighlight lang="rsplus">guessANumberPlayer <- function(low, high)
{
boundryErrorCheck(low, high)
Line 2,853:
}
 
guessResult <- function(guess) readline(paste0("My guess is ", guess, ". If it is too low, submit l. If it is too high, h. Otherwise, c. "))</langsyntaxhighlight>
 
=={{header|Racket}}==
<langsyntaxhighlight Racketlang="racket">#lang racket
 
(define (guess low high)
Line 2,877:
(printf "Think of a number between ~a and ~a.
Use (h)igh, (l)ow and (c)orrect to guide me.\n" low high)
(guess-loop low high))</langsyntaxhighlight>
 
Another way with loops and mutation
<langsyntaxhighlight Racketlang="racket">#lang racket
(define (guess minimum maximum)
(printf "Think of a number from ~a to ~a, use (h)igh, (l)ow and (c)orrect." minimum maximum)
Line 2,895:
(begin (display "OK...")
(set! minimum (add1 guess)))))
(displayln "I was RIGHT!"))</langsyntaxhighlight>
 
=={{header|Raku}}==
(formerly Perl 6)
 
<syntaxhighlight lang="raku" perl6line>multi sub MAIN() { MAIN(0, 100) }
multi sub MAIN($min is copy where ($min >= 0), $max is copy where ($max > $min)) {
say "Think of a number between $min and $max and I'll guess it!";
Line 2,913:
}
say "How can your number be both higher and lower than $max?!?!?";
}</langsyntaxhighlight>
 
You may execute this program with '<tt>raku program</tt>' or with '<tt>raku program min max</tt>'. Raku creates a usage for us if we don't give the right parameters. It also parses the parameters for us and provides them via <tt>$min</tt> and <tt>$max</tt>. We use multi-subs to provide two MAIN subroutines so the user is able to choose between min and max parameters and no parameters at all, in which case min is set to 0 and max to 100.
 
=={{header|Red}}==
<langsyntaxhighlight lang="rebol">Red[]
 
lower: 1
Line 2,935:
]
 
print ["I did it! Your number was" guess]</langsyntaxhighlight>
{{out}}
<pre>
Line 2,956:
===with positive integers===
This version only handles positive integers up to the nine decimal digits, &nbsp; but the default HIGH is one thousand.
<langsyntaxhighlight lang="rexx">/*REXX program plays guess─the─number (with itself) with positive integers. */
parse arg low high seed . /*obtain optional arguments from the CL*/
if low=='' | low=="," then low= 1 /*Not specified? Then use the default.*/
Line 2,979:
end /*try*/
say /*stick a fork in it, we're all done. */
say 'Congratulations! You guessed the secret number in' # "tries."</langsyntaxhighlight>
'''output''' shown is from playing several games:
<pre style="height:70ex">
Line 3,116:
=== with positive numbers ===
This version handles decimal fractions, &nbsp; the method used can generate numbers from zero to five fractional digits.
<langsyntaxhighlight lang="rexx">/*REXX program plays guess─the─number (with itself) with positive rational numbers. */
parse arg low high frac seed . /*obtain optional arguments from the CL*/
if low=='' | low=="," then low= 1 /*Not specified? Then use the default.*/
Line 3,141:
end /*try*/
say /*stick a fork in it, we're all done. */
say 'Congratulations! You guessed the secret number in' # "tries.""</langsyntaxhighlight>
'''output''' will generally be about ten times longer (that is, has ten times the guesses) as the previous REXX version.
<pre style="height:35ex">
Line 3,292:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
min = 1
max = 100
Line 3,310:
end
see "goodbye." + nl
</syntaxhighlight>
</lang>
Output:
<pre>
Line 3,332:
=={{header|Ruby}}==
Computer plays versus itself
<langsyntaxhighlight lang="ruby">def play(low, high, turns=1)
num = (low + high) / 2
print "guessing #{num}\t"
Line 3,355:
 
puts "guess a number between #{low} and #{high}"
play(low, high)</langsyntaxhighlight>
 
Example
Line 3,368:
 
Since Ruby 2.0 it can be done actually using a built-in binary search (output as above):
<langsyntaxhighlight lang="ruby">r = (1..100)
secret = rand(r)
turns = 0
Line 3,380:
low_high
end
</syntaxhighlight>
</lang>
 
=={{header|Rust}}==
{{works with|rustc|1.0.0-nightly}}
<langsyntaxhighlight lang="rust">use std::io::stdin;
 
const MIN: isize = 1;
Line 3,424:
}
}
}</langsyntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight Scalalang="scala">object GuessNumber extends App {
val n = 1 + scala.util.Random.nextInt(20)
 
Line 3,439:
})
 
}</langsyntaxhighlight>
 
=={{header|Scheme}}==
{{works with|Guile}}
<langsyntaxhighlight lang="scheme">(define minimum 1) (define maximum 100)
 
(display "Enter a number from ")(display minimum)
Line 3,459:
(if (string= input "l") (begin (display "OK...")
(set! minimum (+ guess 1)))))
(display "I was RIGHT!\n")</langsyntaxhighlight>
 
=={{header|Seed7}}==
Line 3,469:
and the command is not c.
 
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
$ include "keybd.s7i";
 
Line 3,507:
end if;
writeln("It was nice to play with you.");
end func;</langsyntaxhighlight>
 
Example
Line 3,527:
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">var min = 1
var max = 99
var tries = 0
Line 3,568:
 
guess = ((min+max) // 2)
}</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
Line 3,576:
Create a class like this:
 
<langsyntaxhighlight lang="smalltalk">Object subclass: #NumberGuesser
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Rosettacode'
</syntaxhighlight>
</lang>
Enter these methods into it:
 
<langsyntaxhighlight lang="smalltalk">playBetween: low and: high
Transcript clear.
number := (low to: high) atRandom.
Line 3,610:
showNumberFoundAtTurnNr: turn
Transcript show: (' ==> found the number in {1} turn(s).' format: {turn asString}); cr.
</syntaxhighlight>
</lang>
 
If you'd rather not use <code>caseOf:</code> you can write <code>playBetween:and:atTurn:</code> like this:
 
<langsyntaxhighlight lang="smalltalk">
playBetween: low and: high atTurn: turn
| guess |
Line 3,625:
ifTrue: [self showNumberBeing: #low. self playBetween: guess and: high atTurn: turn+1 ]
ifFalse: [self showNumberBeing: #high. self playBetween: low and: guess atTurn: turn+1]].
</syntaxhighlight>
</lang>
 
And evaluate this in a Workspace:
 
<langsyntaxhighlight lang="smalltalk">g := NumberGuesser new.
g playBetween: 1 and: 100.
</syntaxhighlight>
</lang>
 
Sample output:
Line 3,648:
{{works with|SML/NJ}}
{{trans|Go}}
<langsyntaxhighlight lang="sml">structure GuessNumberHelper : MONO_ARRAY = struct
type elem = order
type array = int * int
Line 3,705:
case GuessNumberBSearch.bsearch (fn (_, x) => x) ((), (lower, upper)) of
NONE => print "That is impossible.\n"
| SOME (result, _) => print ("Your number is " ^ Int.toString result ^ ".\n")</langsyntaxhighlight>
 
=={{header|Swift}}==
<syntaxhighlight lang="text">import Cocoa
 
var found = false
Line 3,755:
high = lastGuess
}
}</langsyntaxhighlight>
{{out}}
<pre>
Line 3,782:
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">set from 1
set to 10
fconfigure stdout -buffering none
Line 3,803:
break
}
}</langsyntaxhighlight>
Sample run:
<pre>
Line 3,814:
=={{header|UNIX Shell}}==
{{works with|bash}}
<langsyntaxhighlight lang="bash">read -p "Lower bound: " lower
read -p "Upper bound: " upper
moves=0
Line 3,831:
((lower>upper)) && echo "you must be cheating!"
done
echo "I guessed it in $moves guesses"</langsyntaxhighlight>
 
=={{header|VBA}}==
 
<langsyntaxhighlight lang="vba">
Sub GuessNumberPlayer()
Dim iGuess As Integer, iLow As Integer, iHigh As Integer, iCount As Integer
Line 3,864:
MsgBox "Not possible. Were you cheating?!", vbCritical + vbOKOnly, "Rosetta Code | Guess the Number Player | ERROR!"
End Sub
</syntaxhighlight>
</lang>
 
=={{header|Wren}}==
{{trans|Kotlin}}
{{libheader|Wren-str}}
<langsyntaxhighlight lang="ecmascript">import "io" for Stdin, Stdout
import "/str" for Char
 
Line 3,903:
}
guess = ((lowest + highest)/2).floor
}</langsyntaxhighlight>
 
{{out}}
Line 3,920:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">include c:\cxpl\codes; \intrinsic 'code' declarations
int Hi, Lo, Guess;
[Text(0, "Think of a number between 1 and 100 then press a key.");
Line 3,935:
];
Text(0, "^M^JYippee!");
]</langsyntaxhighlight>
 
Example output:
Line 3,951:
=={{header|zkl}}==
Your basic binary search.
<langsyntaxhighlight lang="zkl">println("Pick a number between 0 and 100 and remember it.");
low,high,g := 0,100, 20;
while(True){
Line 3,960:
if(low>high){ println("I'm confused!"); break; }
g=(low + high)/2;
}</langsyntaxhighlight>
{{out}}
<pre>
Line 3,975:
=={{header|ZX Spectrum Basic}}==
{{trans|BBC_BASIC}}
<langsyntaxhighlight lang="zxbasic">10 LET min=1: LET max=100
20 PRINT "Think of a number between ";min;" and ";max
30 PRINT "I will try to guess your number."
Line 3,985:
80 IF a$="H" OR a$="h" THEN LET max=guess-1: GO TO 40
90 IF a$="E" OR a$="e" THEN PRINT "Goodbye.": STOP
100 PRINT "Sorry, I didn't understand your answer.": GO TO 60</langsyntaxhighlight>
 
{{omit from|GUISS}}
10,333

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.