Você precisa criar um jogo Muito baixo --- Muito alto (TLTH) no código mais curto (em bytes)
Regras do jogo:
- O computador escolherá um número aleatório fora do intervalo inteiro (-32768..32767).
- Agora você vai pensar em um número e inseri-lo.
- O computador dirá se o seu número é menor (
TOO LOW
) ou superior (TOO HIGH
) ao número escolhido. - Quando você adivinha o número, o computador deve ser exibido
Congrats! You found the number!
.
Regras de código:
Não use os personagens
T
,O
,L
,W
,H
,I
eG
(nem minúsculas nem maiúsculas) em cordas ou caracteres literais.
Por exemplo:tolower(T); // Acceptable cout<<"T"; // Unacceptable char ch='T'; // Unacceptable
Remova 300 bytes se o seu código puder exibir as regras do jogo antes de iniciar o jogo.
Remova 50 bytes se o seu código puder contar o número de turnos e exibir o número de turnos realizados no final do jogo, da seguinte maneira:
"Congrats! You found the number in n turns!"
onde n é o número de voltas realizadas, em vez de
"Congrats! You found the number!"
Remova 25 bytes da sua pontuação se o seu código puder informar ao usuário que o número digitado está fora do intervalo inteiro.
Por exemplo:Enter the number: 40000 Sorry! This number is out of range Please Enter the number again:
Remova 25 bytes Se o seu código não utiliza o número aleatório de nenhuma função aleatória interna.
Remova 10 bytes Se o seu código exibir "parabéns" em cores (escolha qualquer cor, exceto o branco padrão).
Regras de envio:
Adicione um cabeçalho com o nome do seu idioma e pontue com todo o cálculo de recompensa e sua explicação.
Poste seu código com e sem golf.
Vencedora
- A resposta com menos bytes vence.
- Se houver empate, a resposta com mais votos vence.
- O vencedor será escolhido após 5 dias.
EDIT : Por favor, mostre a saída do seu código.
EDIT-2 : você pode ignorar a regra 1 para as regras 2,3 e 4 nas regras de código
Best Of Luck:]
WhileURong(USayNumbr;ISayBigrOrSmalr)
Respostas:
JavaScript (-210 pontos (
190
bytes -300
(para as regras) -50
(para o número de suposições)) -25
(por não usar nenhuma fonte de números aleatórios) -25
(para informar se a entrada está fora do intervalo de um sinal)16
inteiro de bits) ):Golfe:
Código completo (bem formatado):
Saída:
fonte
0
. :-( Além disso, não deveria haver um espaço emTOO LOW
/TOO HIGH
?Perl 5.10+:
159144 bytes - 350 = −206 pontosEdit 2: Com a recente mudança de regras que me permite usar qualquer string literal para a mensagem "parabéns", posso salvar 15 bytes da minha solução original de 159 bytes. Não há nada particularmente novo ou interessante sobre o novo código acima em comparação com o código antigo (acabei de me livrar da
p
função e chamosay
diretamente), portanto, o restante deste post descreverá o código original, mostrado abaixo:Sim, estou abusando da regra 1. Quem precisa de cordas, quando você pode ter palavras de baralho ? ;-)
Execute com
perl -M5.010
para ativar osay
recurso Perl 5.10+ (ou substitua o corpo dap
funçãoprint join$",@_,$/
por um custo extra de 5 bytes).Pontuações bônus:
O código não contém literais de string em sentido estrito; portanto, diria que a regra 1 não é tecnicamente violada. O truque é que, no Perl, sem
use strict
, qualquer identificador que não corresponda a uma palavra-chave ou sub-rotina de idioma conhecido será avaliado com base em seu próprio nome. A funçãop
simplesmente pega uma lista de palavras e as imprime, separadas por espaços.Exemplo de reprodução:
Edit: Ah, certo, as regras dizem que eu preciso postar uma versão un-golfed do código também, então aqui vai. Tecnicamente, é "descolado", já que normalmente componho meus programas de código de golfe de forma mais ou menos completa desde o início, e às vezes pode ser complicado remover todas as otimizações de "golfe" sem alterar fundamentalmente como algumas partes do programa de trabalho. Ainda assim, pelo menos tentei adicionar espaços em branco, comentários e nomes de funções / variáveis mais significativos:
Ps. Como alternativa, se apenas o uso de palavras de barra em vez de strings parecer muito barato para você, aqui está uma solução de 182 bytes que não usa as letras
TOLWHIG
nem em palavras de barra (mas as usa em um operador de transliteração). Ele ainda recebe os mesmos bônus, para uma pontuação total de 182 - 350 = −168 pontos :A saída parece exatamente igual à acima. Pelas regras (originais), eu uso as letras
t
ei
imprimo as regras, uma vez que é permitido; eliminar esses usos custaria apenas dois bytes extras. Por outro lado, colocar toda a saída em maiúscula (que, com base nos comentários acima, parece ser permitida) me permitiria salvar três bytes.fonte
def method_missing *args;args.join' ';end
.Python 2: -80 pontos (270-300-50)
A pontuação é de 270 caracteres, menos 300 por mostrar as instruções, menos 50 por mostrar o número de suposições nos "parabéns!" string, para um total de 80 pontos negativos.
Versão ungolfed do loop, com seqüências de caracteres sem escape:
A
cmp
função interna retorna 0 se os valores forem iguais, -1 se o primeiro for menor e 1 se o primeiro for maior. Eu uso o valor para indexar uma tupla de seqüências de caracteres e, novamente, como a condição de saída do loop. A indexação de uma sequência com um índice negativo (como -1) conta a partir do final da sequência, e não desde o início.Fiquei extremamente tentado a ignorar as importações e usar apenas
4
como meu número aleatório, conforme o XKCD 221 (isso se qualificaria para o bônus de -25 caracteres?).Exemplo de execução (completo com um erro, onde não posso fazer contas negativas):
fonte
g
é zero e owhile
loop termina.You can ignore Rule-1 for Rules-2,3 & 4 in Code Rules
JavaScript 293, -300 (regras) - 50 (exibição de voltas) - 25 (aviso de alcance) - 25 (sem função aleatória) = -107 (nova pontuação)
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!")
Eu diria que, por convenções RGB, o preto é uma cor, mas isso seria meio trapaceiro ...
Ah, e devo acrescentar, também não há quebra de regra 1!
Saída em uma série de alertas e prompts
Código não destruído:
fonte
A=alert;
e substituindo toda aalert
comA
. E mais um, se você mover o alertaA(0>(x...
após o ponto e vírgulaprompt())!=r;)n++1
.feedback if too high/low
que usa 84 caracteres atualmente parai give feedback
(que só exigiria\151 \147\151ve feedback
ou 24 caracteres para salvar 60 caracteres .n++
loop for para ox=prompt(n++)
para economizar o que fazer+ ++n+
no alerta final. Isso pouparia 3.Javascript, 324 bytes, pontuação -76
[Atualizado devido a alterações nas regras]
Pontuação total: -76
Golfe:
Deixa a bagunça para o ungolf.
Primeiro, devidamente identificado (mas isso ainda não é muito bom com o código ofuscado):
Segundo, renomeando identificadores:
Portanto, a função descriptografar obtém todos os caracteres entre ASCII 33 (
!
) e ASCII 58 (:
) e adiciona 32, convertendo-os em caracteres no intervaloA-Z
.Permite desgolfizar o código descriptografando todas as strings:
E, finalmente, vamos mover algumas instruções para outros lugares, substituir a longa cadeia ternária por ifs e elses, juntar cordas de concatenação e simplificar a matemática, para aumentar a legibilidade:
Amostra:
fonte
C - 272 caracteres - 300 - 50 - 25 = -103
Código de golfe:
Ungolfed:
Saída:
fonte
C: 237 - 300 - 50 - 25 - 25 - 10: -173 pontos
-300 para as regras, -50 para mostrar o número de tentativas, -25 para não usar nenhum gerador de números aleatórios interno, -25 para a mensagem fora do intervalo e -10 para colorir a mensagem de parabéns.
Ungolfed:
Exemplo de execução:
A última linha aparece em vermelho.
fonte
bash, -137
Ponto
273 (bytes) - 300 (regras) - 50 (contagem de tentativas) - 25 (aviso OOF) - 25 (PRNG personalizado) - 10 (cor)
Versão Golfed
Observe que a última linha é um comentário, portanto, não contém literais de sequência ou de caracteres.
Versão ungolfed
Saída de amostra
A última linha é impressa em verde.
fonte
C #: -30 pontos
Golfe :
Para executá-lo, colocá-lo em um arquivo (code.cs) e correr com scriptcs na linha de comando:
scriptcs code.cs
.Ungolfed : nomes de variáveis expandidos para algo mais fácil de entender e alterou letras hexadecimais em letras reais.
Exemplo de saída disponível aqui .
fonte
T
,O
,L
,W
,H
,I
eG
(nem minúsculas nem maiúsculas) em cordas ou caracteres literais. "T
,O
,L
... com\x54
,\x4F
,\x4C
... e você está bem.C ++ 505 + (-300-50-25-25) = 105
-300: Instruções
-50: Mostrando o número de voltas
-25: Não usando a função aleatória
-25: avisando o usuário sobre entrada fora da faixa
GOLFE
UNGOLFED
SAÍDA
fonte
C, 183-300-25 = -142
183 bytes -300 para as regras -25 por não usar uma biblioteca aleatória
versão não destruída:
amostra de execução:
fonte
"TOO HIGH"
e"TOO LOW"
ambos contêm caracteres ilegaisTOLWHIGtolwhig
.TOO LOW
, o EDIT 2 também é permitido ?J - 190 char -300 -50 = -160 pts
Explicação (lembre-se de que J é lido da direita para a esquerda):
'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2
- Imprima as regras.32767-?2^16[
- Lance o valor de retorno e gere um número aleatório entre 0 e 2 ^ 16-1 inclusive. Em seguida, ajuste-o no intervalo -32768..32767, subtraindo-o de 32767.1>:@]^:(...)^:_~
- Ox u^:v^:_ y
padrão é como um loop while.x
permanece constante ey
sofre mutação a cada execução deu
. Isso continua até quex v y
retorne 0 oux u y
resulte em nenhuma alteração paray
. Os~
dois argumentos são trocados, de modo que estex
será o número aleatório ey
começará em 1. Ouru
is>:@]
, que incrementa esse 1 e o retorna, de modo que ele atua como um contador e ax u y
condição de terminação nunca pode ocorrer.[:".1!:1@1:
- Pegue o contador e ignore seu valor, usando o número 1 (1:
). Leia uma linha de entrada (1!:1
) do teclado (identificador de arquivo 1) e execute-a (".
). Isso permite que J, cujo sinal negativo é normalmente_
, receba números no formulário-n
(é avaliado como negação aplicada ao númeron
).]`(...)@.*@-
- Tire a diferença do número aleatório de antes e adivinhe (-
). Agora, selecionamos a próxima ação, dependendo se essa diferença é zero (@.*
). Se for, retorne (]`
) esse 0 como resultadox v y
, para que a execução termine e o loop while inteiro retorne o contador. Outro...71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>
- Retorne a matriz5 8 16
se o número for negativo e1 2 0 1
se for positivo. Em seguida,13 8 8 _39
acrescente e adicione 71 a tudo, para que tenhamos um84 79 79 32 76 79 87
ou84 79 79 32 72 73 71 72
.1[2:1!:2~a.{~
- Transforme esses números em caracteres ASCII indexando o alfabetoa.
com eles. Em seguida, imprima-os com1!:2
(usando o identificador de arquivo 2) e retorne 1 como resultado dex v y
.'Congrats, you found the number in ',' turns!',~":
- Quando o loop termina, ele retorna o contador. Converta-o em uma string com":
e coloque-o entre as strings'Congrats, you found the number in '
e' turns!'
.Saída de amostra:
fonte
JavaScript -40
335 - 300 (regras) - 50 (contagem de turnos) - 25 (fora do intervalo)
Não vou ganhar, mas uma maneira divertida de receber as cartas, eu acho.
Golfe
Ungolfed
Saída de amostra
fonte
APL (Dyalog) (157 - 300 - 50 = -193)
(Sim, eles contam como bytes, o conjunto de caracteres APL cabe em um byte.)
Eu reivindiquei "exibir as regras do jogo" e "contar o número de turnos".
Exemplo de execução:
Ungolfed:
fonte
Pogo: -95 (255 - 300 - 50)
Se o número for 10:
A contagem de caracteres é baseada no código com todo o espaço em branco removido.
Observe que o Pogo não é um idioma falso. Eu criei e escrevi um compilador e um IDE para ele aqui: https://github.com/nrubin29/Pogo
fonte