너무 낮게 만들기위한 가장 짧은 코드 — 너무 높음


20

가장 짧은 코드 (바이트)로 게임을 너무 낮게 --- 너무 높음 (TLTH)으로 만들어야합니다.

게임 규칙 :

  1. 컴퓨터는 정수 범위를 벗어난 난수를 선택합니다 (-32768..32767).
  2. 이제 숫자를 생각하고 입력합니다.
  3. 컴퓨터는 사용자의 번호가 선택한 번호보다 낮 TOO LOW거나 ( TOO HIGH) 높은지 ( ) 알려줍니다 .
  4. 숫자를 추측하면 컴퓨터에가 표시되어야합니다 Congrats! You found the number!.

코드 규칙 :

  1. 문자를 사용하지 마십시오 T, O, L, W, H, IG문자열이나 문자 리터럴에 (소문자 나 대문자 어느 쪽).
    예를 들어 :

    tolower(T);  // Acceptable  
    cout<<"T";   // Unacceptable
    char ch='T'; // Unacceptable
    
  2. 게임을 시작하기 전에 코드에서 게임 규칙을 표시 할 수 있으면 300 바이트를 제거하십시오 .

  3. 코드가 다음과 같이 게임 종료시 취한 턴 수와 턴 수를 계산할 수있는 경우 50 바이트를 제거하십시오 .

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

    여기서 n은 걸리는 회전 수입니다.

    "Congrats! You found the number!"  
    
  4. 입력 한 숫자가 정수 범위를 벗어났다고 사용자에게 알려주는 경우 점수에서 25 바이트제거하십시오 .
    예를 들면 다음과 같습니다.

    Enter the number: 40000  
    Sorry! This number is out of range
    Please Enter the number again:  
    
  5. 코드가 내장 임의 함수에서가 아닌 임의의 숫자를 가져 오는 경우 25 바이트를 제거하십시오 .

  6. 코드에서 색상이 "축하합니다"인 경우 10 바이트 제거 (기본 흰색을 제외한 모든 색상 선택)

제출 규칙 :

  1. 언어 이름으로 제목을 추가하고 현상금 계산 및 설명과 함께 점수를 매기십시오.

  2. 골프를 치고 골을 넣지 않은 코드를 게시하십시오.

우승자

  1. 최소 바이트를 가진 답이 이깁니다.
  2. 동점이 있다면, 더 많은 표를 얻은 답이 이깁니다.
  3. 우승자는 5 일 후에 선발됩니다.

편집 : 코드 출력을 보여주십시오.
편집 -2 : 코드 규칙에서 규칙 2, 3 및 4에 대한 규칙 1을 무시할 수 있습니다.

행운을 빌어 요 :]


2
이것이 게임 규칙에 대한 유효한 설명입니까? WhileURong(USayNumbr;ISayBigrOrSmalr)
John Dvorak

1
점수에 대한 설명을 바탕으로 코드 골프 나 인기 대회가 없습니다. 그것은 인기있는 순위 결정자가 있는 코드 도전 입니다. 태그 위키를 확인하십시오. 챌린지를 적절하게 태그하기 위해 편집을 제안했습니다. PS-Jinx! @mniip
Jonathan Van Matre

1
@JonathanVanMatre 는 타이 브레이커에도 불구하고 코드 골프 처럼 들립니다 .
mniip

21
또한, 나는 다른 플레이어들이 그들의 답변을 향상시키는 것을 돕는 것에 대한 규칙을 특히 좋아하지 않습니다. 공주 신부 안드레 자이언트의 불멸의 말에서, "그건 스포츠맨과는 다릅니다."
Jonathan Van Matre

1
이 질문은 그렇습니다. . . David H. Ahl
Michael Stern

답변:


2

JavaScript (-210 포인트 ( 190바이트- 300 (규칙의 경우)) - 50 (추측 횟수의 경우) - 25 (내장 난수 소스를 사용하지 않는 25 경우 16) - (입력이 부호의 범위를 벗어 났는지 여부를 알려줍니다 ) 비트 정수)) ) :

골프 :

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

전체 코드 (잘 포맷 된) :

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

산출:

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 죄송합니다. 실수했습니다. 내 답변을 업데이트했습니다.
칫솔

고마워, 이제는 실행되지만 ... 추측하면 깨지는 것 같습니다 0. :-( 또한 TOO LOW/ TOO HIGH?에 공백이 없어야합니다 .
Ilmari Karonen

19

펄 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 바이트를 절약 할 수 있습니다.


그것은 훌륭하고 영리한 답변입니다! +1
Mukul Kumar

이제 이것을 보았으므로에 대해 벌을받는다면 루비 1.8로 이길 수 있을지 궁금합니다 def method_missing *args;args.join' ';end.
Kaya

좋은 오래된 JavaScript로 당신을 이겼습니다!
칫솔

14

파이썬 2 : -80 점 (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

점수는 270 자이며 지침을 표시하려면 300을 빼고 "축하합니다!"에 추측 수를 표시하려면 빼기 50입니다. 문자열, 총 음수 80 점.

이스케이프 처리되지 않은 문자열이있는 루프되지 않은 버전의 루프 :

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

내장 cmp함수는 값이 같은 경우 0을, 첫 번째가 작은 경우 -1을, 첫 번째가 큰 경우 1을 리턴합니다. 값을 사용하여 문자열의 튜플을 인덱싱 한 다음 루프의 종료 조건으로 다시 사용합니다. 음수 인덱스 (예 : -1)로 시퀀스를 인덱싱하면 시작이 아니라 시퀀스의 끝부터 카운트됩니다.

나는 XKCD 221에 따라 수입품을 건너 뛰고 4내 임의의 숫자로 사용하기 를 간절히 원했습니다 (-25 문자 보너스를받을 수 있습니까?).

예제 실행 (부정적 수학을 수행 할 수없는 오류로 완료) :

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!

코드의 샘플 출력을 보여주십시오.
Mukul Kumar

2
이 주요 코드 규칙 1이 아닙니까? 동안 URong (USayNumbr; ISayBigrOrSmalr)은 하나 이상의 Os, Ls, Ws, Hs, Is 및 Gs를 포함한다.
Fors

@Cruncher : 프로그램이 종료됨에 따라 무슨 뜻인지 잘 모르겠습니다. 올바른 값을 얻은 후 g0은 while루프가 끝납니다.
Blckknght

@Blckknght oops, 빠른 읽기
Cruncher

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

13

JavaScript 293, -300 (규칙)-50 (회전 표시)-25 (범위 경고)-25 (임의 함수 없음) = -107 (새로운 점수)

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

나는 RGB 규칙에 따라 검은 색이라고 주장하지만 다소 부정 행위 일 것입니다 ...

아, 그리고 위반 규칙 # 1도 추가하지 않겠습니까!

일련의 경고 및 프롬프트 출력

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!

Ungolfed 코드 :

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

규칙을 잘 읽어? 물론 당신은 하나의 출력으로 Ungolfed 코드를 게시해야합니다
Mukul Kumar

@MukulKumar 정렬 ...
WallyWest

당신은 당신의 대답을 접두사로 4을 절약 할 수 있습니다 A=alert;및 모든 교체 alert와 함께 A. A(0>(x...에서 세미콜론 다음에 경고를 이동하면 하나 더 prompt())!=r;)n++1.
DocMax

당신은 변경할 수 feedback if too high/low를 현재 84 개 문자를 사용하는 i give feedback경우에만 필요로하는 ( \151 \147\151ve feedback저장하거나 24 자 60 자 .
corsiKa

1
나는 틀릴 수도 있지만, 당신은 당신 n++이 for 루프 에서를 최종 경보에서 x=prompt(n++)해야 할 것을 저장하기 위해 for 루프에서 이동할 수 있다고 생각합니다 + ++n+. 3을 절약 할 수 있습니다.
DocMax

7

자바 스크립트, 324 바이트, 점수 -76

[규칙 변경으로 인해 업데이트 됨]

  • 324 바이트
  • 규칙을 보여주기위한 -300
  • 사용자가 이길 때 턴을 보여주기위한 -50
  • 사용자가 범위 밖의 숫자를 입력 할 때 알려주는 -25
  • 내장 랜덤을 사용하지 않는 경우 -25 (업데이트 됨)

총점 : -76

골프 :

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

이 혼란을 풀 수 있습니다.

먼저 올바르게 식별되었습니다 (하지만 난독 화 된 코드로는 여전히 좋지 않습니다).

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

둘째, 식별자 이름 바꾸기 :

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

따라서 암호화 해제 기능은 ASCII 33 ( !)과 ASCII 58 ( :) 사이의 모든 문자를 가져 와서 32를 더해 범위 내의 문자로 변환합니다 A-Z.

모든 문자열의 암호를 해독하여 코드를 더 많이 풀 수 있습니다.

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

마지막으로 일부 명령어를 다른 위치로 옮기고 긴 삼항 체인을 if 및 기타로 바꾸고, 연결 문자열을 결합하고, 수학을 단순화하여 가독성을 높이십시오.

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

견본:

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
난 정말 좋아 :)
Wolle Vanillebär Lutz

코드의 샘플 출력을 보여주십시오.
Mukul Kumar

@MukulKumar. 완료, 출력 추가
Victor Stafusa

7

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

  • 규칙을 표시하기위한 -300;
  • 플레이어에게 턴 수를 알려주는 -50;
  • 표준 RNG 라이브러리를 사용하지 않는 경우 -25

골프 코드 :

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

언 골프 드 :

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

산출:

산출


출력은 어디에 있습니까?
Mukul Kumar

@IlmariKaronen, EDIT2. 또한, 나는 시대를 취하는 것이 아닙니다.
Oberon

@Oberon 또한 출력을 게시하십시오
Mukul Kumar

@MukulKumar가 게시했습니다.
Oberon

5

C : 237-300-50-25-25-25-10 : -173 포인트

규칙의 경우 -300, 추측 수 표시의 경우 -50, 내장 난수 생성기를 사용하지 않는 경우 -25, 범위를 벗어난 메시지의 경우 -25, 축하 메시지의 색상 표시의 경우 -10

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

언 골프 드 :

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

예제 실행 :

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!

마지막 줄은 빨간색으로 표시됩니다.


브라보! 당신은 모든 바운티를 쳤다!
Mukul Kumar

4

강타, -137

점수

273 (바이트)-300 (규칙)-50 (횟수 시도)-25 (OOF 경고)-25 (사용자 정의 PRNG)-10 (컬러)

골프 버전

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.

마지막 줄은 주석이므로 문자열이나 문자 리터럴이 포함되어 있지 않습니다.

언 골프 버전

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

샘플 출력

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

마지막 줄은 녹색으로 인쇄됩니다.


3

C # : -30 포인트

  • 345 바이트
  • 규칙을 보여주기위한 -300
  • 사용자가 이길 때 턴을 보여주기위한 -50
  • 사용자가 범위 밖의 숫자를 입력 할 때 알려주는 -25

골프 :

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

실행하려면 파일 (code.cs) 에 넣고 명령 줄에서 scriptcs 를 사용하여 실행하십시오 scriptcs code.cs.

Ungolfed : 변수 이름을 이해하기 쉬운 것으로 확장하고 16 진 문자를 실제 문자로 변경했습니다.

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

샘플 출력은 여기에 있습니다 .


3
죄송 상태를 이런 얘기를하지만, 규칙 것을 " 문자를 사용하지 마십시오 T, O, L, W, H, IG문자열이나 문자 리터럴에서 (도 소문자 나 대문자). "
빅터 Stafusa

그러니 그냥 교체 T, O, L...와 \x54, \x4F, \x4C... 그리고 네 괜찮.
나무 늘보

감사. 골프 버전의 문자열 리터럴로 해당 문자에 대한 16 진수 인코딩을 넣고 그에 따라 점수를 수정했습니다.
Yaakov Ellis

코드의 샘플 출력을 보여주십시오.
Mukul Kumar

@MukulKumar 출력 은 여기참조하십시오 . 또한 로직을 약간 변경하여 문제를 해결했습니다.
Yaakov Ellis

2

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

-300 : 명령
-50 : 회전 수 표시
-25 : 임의의 기능을 사용하지 않음
-25 : 범위를 벗어난 입력에 대한 경고

골프

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

언 골프

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

산출


개인적으로, 나는 스스로를 멈출 수 없었다 .. :)
Mukul Kumar

2

C, 183-300-25 = -142

임의 라이브러리를 사용하지 않는 경우 규칙 -25의 경우 183 바이트 -300

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

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

샘플 실행 :

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"모두 불법 문자를 포함 TOLWHIGtolwhig.
Oberon

"축하합니다! 당신은 숫자를 찾았습니다!" 및 "WhileURong (USayNumbr; ISayBigrOrSmalr)".
Fors

@Fors이지만 허용됩니다 ( EDIT2 참조 ).
Oberon

실제로 그들은 있습니다! 어떤 이유로 나는 그 편집을 놓쳤다.
Fors

@Oberon EDIT 2 에서도 TOO LOW허용 됩니까?
칫솔

2

J-190 자 -300-50 = -160 점

'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

설명 (J는 오른쪽에서 왼쪽으로 읽습니다) :

  • 'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2 -규칙을 인쇄하십시오.
  • 32767-?2^16[-반환 값을 던지고 0에서 2 ^ 16-1 사이의 난수를 생성합니다. 그런 다음 32767에서 빼서 -32768..32767 범위로 조정하십시오.
  • 1>:@]^:(...)^:_~- x u^:v^:_ y패턴은 while 루프와 비슷합니다. x일정하게 유지되고의 y모든 실행시 변경 u됩니다. x v y0을 반환하거나로 x u y변경되지 않을 때까지 계속 됩니다 y. ~스왑 두 개의 인수, 그래서 그 x난수 될 것이며 y1. 당사에서 시작됩니다 u입니다 >:@]그것은 카운터와 역할을하므로,이 한 반환을 증가, x u y발생하지 않을 수 있습니다 종료 조건.
  • [:".1!:1@1:-카운터 (1)를 대신 사용하여 카운터를 가져 와서 값을 무시하십시오 ( 1:). 1!:1키보드 (파일 핸들 1)에서 입력 줄 ( )을 읽고 실행합니다 ( ".). 이렇게하면 음수 부호가 보통 인 J _가 형식의 숫자를 사용할 수 있습니다 (숫자에 -n적용된 부정으로 평가 n).
  • ]`(...)@.*@--이전과 임의의 숫자의 차이와 추측 ( -)을 취하십시오 . 이제이 차이가 0인지 여부에 따라 다음 동작을 선택합니다 @.*. 그렇다면 ]`의 결과로 0을 x v y반환하여 실행이 종료되도록하고 전체 while 루프는 카운터를 반환합니다. 그밖에...
  • 71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>- 5 8 16숫자가 음수이고 양수이면 배열을 반환합니다 1 2 0 1. 그런 다음 13 8 8 _39모든 것을 앞에 추가 하고 71을 추가하여 84 79 79 32 76 79 87또는 중 하나를 갖습니다 84 79 79 32 72 73 71 72.
  • 1[2:1!:2~a.{~-알파벳 a.을 색인화하여이 숫자를 ASCII 문자로 바꿉니다 . 그런 다음 1!:2(파일 핸들 2 사용)로 인쇄하고 의 결과로 1을 반환하십시오 x v y.
  • 'Congrats, you found the number in ',' turns!',~":-루프가 끝나면 카운터를 반환합니다. 와 문자열로 변환 ":하고이 문자열 사이에 넣어 'Congrats, you found the number in '' turns!'.

샘플 출력 :

   '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

자바 스크립트 -40

335-300 (규칙)-50 (카운트 회전)-25 (범위를 벗어남)

이길 수는 없지만 재미있는 글자를 얻을 수있는 재미있는 방법입니다.

골프

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

언 골프

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

샘플 출력

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

(예, 이들은 바이트로 계산되며 APL 문자 세트는 바이트에 맞습니다.)

나는 "게임 규칙 표시"와 "턴 수 계산"이라고 주장했다.

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

예제 실행 :

      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!

언 골프 드 :

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

포고 : -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

숫자가 10 인 경우 :

번호?

5

낮은

8

낮은

12

높은

10

예이 4 턴


문자 수는 모든 공백이 제거 된 코드를 기반으로합니다.

포고는 가짜 언어가 아닙니다. 나는 그것을 만들고 여기에 컴파일러와 IDE를 썼습니다 : https://github.com/nrubin29/Pogo


편집편집
Mukul Kumar

편집 내용에 따라 업데이트되었습니다.
nrubin29
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.