펄 5.10+ : 159 144 바이트 - 350 = -206 점
say"Guess 16 bit signed number";$==32767-rand 65536;say(TOO.$",$_<0?LOW:HIGH)while++$i,$_=<>-$=;say"Congrats! You found the number in $i turns!"
편집 2 : "축하합니다"메시지에 문자열 리터럴을 사용할 수있는 최근 규칙 변경으로 원래의 159 바이트 솔루션에서 15 바이트를 절약 할 수 있습니다. 이전 코드와 비교할 때 위의 새 코드에 대해 특히 새롭거나 흥미로운 것은 없습니다 (방금 p함수를 제거 하고 say대신 직접 호출 ).이 게시물의 나머지 부분은 아래에 표시된 원래 코드를 설명합니다.
sub p{say join$",@_}p Guess,16,bit,signed,number;$==32767-rand 65536;p(TOO,$_<0?LOW:HIGH)while++$i,$_=<>-$=;p Congrats."!",You,found,the,number,in,$i,turns."!"
그래, 난 문자열을 필요로 규칙 1의 지옥을 남용하고있어, 때 당신은 할 수 있습니다 barewords ? ;-)
과 함께 실행 perl -M5.010하여 Perl 5.10+ say기능 을 활성화하십시오 (또는 추가 비용으로 5 바이트로 p기능 본문을 교체하십시오 print join$",@_,$/).
보너스 점수 :
- −300 점 : "게임을 시작하기 전에 게임 규칙 표시"
- −50 점 : "게임 종료시 표시되는 턴 수"
코드에는 엄격한 의미로 문자열 리터럴이 포함되어 있지 않으므로 기술적으로 규칙 1이 위반되지 않는다고 말하고 싶습니다. 요령은 Perl에서 use strict로 알려진 언어 키워드 또는 서브 루틴에 해당하지 않는 식별자는 자체 이름으로 간단하게 평가한다는 것입니다. p그런 다음 이 함수 는 단순히 단어 목록을 가져 와서 공백으로 구분하여 인쇄합니다.
플레이 스루 예 :
Guess 16 bit signed number
0
TOO HIGH
-10000
TOO LOW
-5000
TOO HIGH
-7500
TOO LOW
-6250
TOO HIGH
-6875
TOO LOW
-6553
TOO HIGH
-6700
TOO HIGH
-6790
TOO LOW
-6745
TOO HIGH
-6767
TOO LOW
-6756
TOO HIGH
-6761
Congrats! You found the number in 13 turns!
편집 : 아, 맞습니다. 규칙에 따라 골프화되지 않은 코드도 게시해야하므로 여기에갑니다. 기술적으로, 처음부터 코드 골프 프로그램을 다소 완전히 골프화 된 형태로 작성하기 때문에 "골프 제거"방식이며, 일부의 부분을 근본적으로 변경하지 않고 모든 "골프"최적화를 제거하기가 까다로울 수 있습니다. 프로그램 작업. 아직도, 나는 공백, 주석 및 더 의미있는 기능 / 변수 이름을 추가하려고 노력했습니다.
sub output {
# print all arguments separated by spaces, plus a newline:
# (in the golfed code, I use the special variable $" instead of " " for a space)
say join " ", @_;
}
# print the rules:
output Guess, 16, bit, signed, number;
# choose a random number between -32768 and 32767 inclusive:
# (in the golfed version, using the special variable $= allows
# the int() to be left out, since $= can only take integer values)
$number = int( 32767 - rand 65536 );
# loop until the input equals the chosen number, printing "TOO LOW / HIGH":
# (the loop ends when $diff == 0, since 0 is false in Perl)
output (TOO, $diff < 0 ? LOW : HIGH) while ++$count, $diff = (<> - $number);
# print congratulations, including the loop count:
output Congrats."!", You, found, the, number, in, $count, turns."!";
추신. 대안으로, 문자열 대신 베어 워드를 사용하는 것이 너무 기분이 좋지 않은 경우, 베어 워드 TOLWHIG 에서도 문자를 사용하지 않는 음소거 연산자에서 문자를 사용하지 않는 182 바이트 솔루션 이 있습니다. 총 점수는 182-350 = -168 점입니다 .
sub t{pop=~y/kpqvxyz/tolwhig/r}say"Guess 16 bit signed number";$==32767-rand 65536;say uc t"kpp ".($_<0?qpv:xyzx)while++$n,$_=<>-$=;say t"Cpnzraks! Ypu fpund kxe number yn $n kurns!"
출력은 위와 정확히 동일하게 보입니다. 제 (원본) 규칙에 따라, 나는 문자를 사용 할 t하고 i그것을 허용 이후, 규칙을 인쇄에; 그럼에도 불구하고 그러한 사용을 제거하면 추가 바이트가 2 개 밖에 들지 않습니다. 반대로 모든 출력을 대문자로 만들면 위의 주석을 기반으로 허용되는 것처럼 보이므로 3 바이트를 절약 할 수 있습니다.
WhileURong(USayNumbr;ISayBigrOrSmalr)