Instruções
Dada uma cadeia de entrada desconhecido i
com um valor de ambos cabeças ou caudas , retornar 1
para as cabeças ou -1
para caudas com o código mais curto.
Exemplo de código não golfado (55b):
if(i == "heads"){
print(1);
}else{
print(-1);
}
Exemplo de código de golfe (16b):
print("t">i||-1)
Javascript foi usado para o exemplo, mas é não um requisito . Desculpe, se é muito simples para a maioria dos usuários, ele pode ser melhorado.
Respostas:
CJam, 4 bytes
Assume que a variável
I
retém a entrada, poisi
não é um identificador válido no CJam.Experimente online.
Isso é equivalente ao código JavaScript
I.indexOf('e')
.fonte
p
isso? É padrão no CJam não?p
não é necessário.C, 18 bytes
Muito fácil, mas vamos fazê-lo apenas por diversão ...
Dada a sequência
char *i
, imprime 1 paraheads
e -1 paratails
, com nova linha à direita.Explicação
Em C,
"-1" + 1
aponta para 1 caractere à frente, portanto é o mesmo que"1"
. Vamos dar uma olhada nos primeiros caracteres:Se contarmos os bits do ponto mais à direita começando em zero, o bit 3 será 1 in
heads
e 0 intails
: somará para obter"-1"
a string correta. Se parece com isso:Agora, substitua
i[0]
por*i
e a troca certa pela divisão de potência de dois para economizar alguns bytes. Remova também parênteses inúteis:Agora,
& 1
pode ser substituído por% 2
. A contagem de caracteres é a mesma, mas o módulo tem maior prioridade, permitindo descartar os parênteses. Remova o espaço em branco:Bônus
Eu acho que a maneira mais curta de obter um número inteiro 1 ou -1 (não uma string) em C é:
Explicação:
fonte
Ruby, 8 (6 sem saída)
Operador de foguete!
fonte
PHP - 11 bytes
Isso funciona porque
'tails' ^ 'F'
→'2'
e'heads' ^ 'F'
→'.'
, que quando digitados como um número inteiro, são0
.Você pode testar esta solução (ou qualquer uma das opções abaixo) da seguinte maneira:
Ideone Link
Alternativas
15 :
<?=1-md5($i)%3;
16 :
<?=md5($i)[5]-5;
16 :
<?=-crc32($i)%5;
fonte
TI-BASIC, 9-10 bytes
Direto. "t" está na posição 1 de "caudas", mas "t" não está na string "heads", portanto inString (retorna 1 para caudas e 0 para cabeças.
Se a sua calculadora estiver no modo radiano (como qualquer matemático), são necessários apenas nove bytes:
Observe que as calculadoras de TI não possuem cadeias nomeadas, portanto a entrada está na variável de resposta da calculadora. Observe também que as letras minúsculas têm dois bytes cada, portanto, esta solução realmente requer menos memória que a palavra "cabeças".
fonte
t
einString(
são cada dois bytes.Fissão ,
2621 BytesMartin (e sua excelente resposta aqui ) me convenceu a aprender um novo idioma, e que lugar melhor do que um golfe rápido? Isso quase certamente não é o ideal, mas, ei, foi divertido! Quando me sentir bem, posso fornecer alguma forma de explicação, se for solicitada.
fonte
Python 2, 16 bytes
fonte
Pitão - 4 bytes
Corra com cara ou coroa . Como
i
éint
em Pyth, esta usosz
como o nome da variável, que contém qualquer entrada de utilizador. É equivalente ao Pythonprint(z.find("e"))
, então usa o método de @ Dennis.fonte
VBA (Excel), 12 bytes
Não é um jogo fantástico de golfe, mas é divertido tentar com o VBA chegar perto de uma linguagem de programação adequada ...
i é a string e apenas explora o valor ASCII do primeiro caractere, dividido por 6 e subtraído de 13 para fornecer 1 ou -1. Muito simples.
Exemplo de execução na janela imediata (10 bytes extras para definir a variável de entrada):
fonte
C, 22 bytes
Os créditos vão para @TheE por me falar sobre isso !
Explicação:
Se o primeiro caractere da sequência for maior que
'h'
, a sequência"-1"
será impressa. Caso contrário, a sequência"1"
será impressa. Observe que essa abordagem vem com um caractere de nova linha à direita.Versão antiga (25 bytes):
Explicação:
Se o primeiro caractere da sequência for maior que
'h'
, -1 será impresso. Caso contrário, 1 é impresso.fonte
h
e 7 parat
.puts(*i>'h'?"-1":"1");
não seria melhor? (22 bytes)Tr:
1713 caracteres(Ou
1410 se você contar apenas os argumentos…)Exemplo de execução:
Breve explicação:
tr
significa transliterado, ou seja, substitui cada caractere da entrada encontrada no primeiro argumento por caractere na mesma posição no segundo argumento:Se o primeiro argumento for mais longo, os caracteres sem correspondência posicional no segundo argumento serão substituídos pelo último caractere do segundo argumento:
Quando a opção
-s
(--squeeze-repeats
) é usada, caracteres sucessivos que seriam substituídos pelo mesmo caractere são substituídos de uma só vez:Portanto, se enumerarmos todos os caracteres em "caudas", obtemos o que precisamos:
O mesmo para “cabeças”, mas precisamos manter o “t” na frente para consumir o sinal de menos (caracteres classificados em ordem alfabética por fluidez):
Mesclar todos os caracteres únicos de "caudas" e "cabeças" em um único primeiro argumento, mantendo "t" na frente leva à solução final:
Para evitar enumerar os caracteres, um intervalo de - para o formato pode ser usado.
fonte
tr
. POSIXly:tr -s ta-s '-[1*]'
Montagem 8088, IBM PC DOS, 17 bytes
Desmontado:
Explicação:
Use o sinalizador de paridade da CPU para determinar se o primeiro caractere é um
'h'
(número par de binários1
) ou um't'
(número ímpar de binários1
). Isso economiza um byte em comparação ao caractere em ASCII.Entrada da linha de comando, saída para o console.
Entrada / Saída:
fonte
Japonês , 2 bytes
Experimente online
fonte
shell (portátil / POSIX), 16 bytes
expr $i : he - 1
Experimente Online!
Obrigado a @ StéphaneChazelas em unix.stackexchange.com
Outras soluções tentadas:
echo $[30#$i%7-1] # 17 bytes but only in bash, zsh.
Experimente Online!echo $((30#$i%7-1)) # 19 bytes but only bash,ksh,zsh.
Experimente Online!he=2;echo $[${i%a*}-1] # 22 bytes But only in bash,zsh .
Experimente Online!a=${i%h*};echo ${a:+-}1 # 23 .
portátil. Experimente Online!he=2;echo $((${i%a*}-1)) # 24 bytes .
portátil. Experimente Online!IFS=h;set $i;echo ${1:+-}1 # 26 (change IFS) .
portátil. Experimente Online!(IFS=h;set $i;echo ${1:+-}1) # 28 (subshell) .
portátil. Experimente Online!(IFS=h;set $i;echo $(($#*2-3))) # 31 bytes .
portátil. Experimente Online!Nota: Utilizando
dash
como um símile razoável de um testador de shell portátil.expr $i : he - 1
funciona através da contagem de quantos caracteres coincidirhe
com$i : he
. Umaheads
correspondência2
e umatails
correspondência 0 (nenhuma). Em seguida, subtrair1
com- 1
.$[30#$i%7-1]
funciona convertendo a string em um número inteiro. A base 30 e o mod por 7 foram selecionados para obter uma diferença de 2 entreheads
etails
. Subtrair 1 converte os números em1
e-1
.Observe que a
$[...]
é uma forma arcaica de expressão aritmética$((...))
válida apenas em algumas conchas.he=2;echo $[${i%a*}-1]
funciona criando uma variável com algum valor e, em seguida, usando a Expansão aritmética para expandir essa variável (a partir do valor do texto). O${i%a*}
converteheads
parahe
etails
parat
(que, como variável, tem um valor de 0).IFS=h;set $i;echo ${1:+-}1
funciona em duas etapas. Definir IFS parah
pausas a não cotadas$i
emset $i
em partes divididas pelo personagemh
,heads
é dividido para''
e'eads'
, estabelecendo assim$1
como nulo.tail
não é dividido porh
, tornando-o$1
igual atails
. Em seguida,${1:+-}
gera a-
se o valor de$1
for não nulo (como emtails
) ou nada (como em um nulo$1
). Esse sinal (ou nada) é concatenado com1
.(IFS=h;set $i;echo $(($#*2-3)))
funciona de maneira semelhante, mas use o número de partes ($#
) nas quais a string$i
foi quebrada.fonte
Python 2, 17 bytes
'heads'
é menor que't'
, então ele avaliaTrue == 1
e imprime a sequência após o primeiro caractere.'tails'
é maior que't'
, portanto, é avaliadoFalse == 0
e a sequência inteira é impressa.Se fizermos isso na linha de comando, com impressão implícita, isso se tornará:
... por 12 bytes, mas adiciona aspas simples à saída.
fonte
QBasic, 11 bytes
Esse deve ser o menor pedaço de QBasic que eu já escrevi.
Explicação:
O acima é alguns QBasic bastante fortemente golfed. Quando o autoformatter terminar com isso, ficará assim:
A primeira linha compara a sequência
i
com"t"
. Sei
for"heads"
,i > "t"
é falso ec = 0
. Sei
for"tails"
,i > "t"
é verdade ec = -1
. Sim,-1
é o valor padrão para boolean true em QBasic!A segunda linha é mapeada
-1
de-1
e0
para1
um truque de matemática:(-1)^(-1) == 1/(-1) == -1
e0^0
, embora tecnicamente matematicamente indefinida, retorne1
.Este código requer que
i
seja declarado explicitamente como uma variável de cadeia; caso contrário, teria que seri$
. Programa de teste completo (testado em QB64 ):fonte
Gaia ,
54 bytesSemelhante à resposta CJam de Dennis , localiza o índice
e
na string de entradaSalvei um byte, pois não percebi que a entrada era usada automaticamente como argumento se não houvesse valores de pilha suficientes
Como funciona
Experimente Online!
fonte
Bash , 22
Pega a 2ª letra (
e
oua
) e a interpreta como um dígito hexadecimal (14 ou 10), depois divida por 2 e subtraia 6 para obter as respostas corretas.Experimente online!
fonte
echo $[30#$i%7-1]
apenas 17 bytes. :-)ed ,
272521 bytesed
me deu dor de cabeça. Finalmente descobri com ajuda do@ed1conf
twitter e algumas espreitadelasunix.se
. Você não pode apenas combinar as coisas coms/re/newtext/
, você tem que prefixar com pacotes deg
outraed
forma tristes. É como um programa unix rabugento de 50 anos dizendo "saia do meu gramado".Experimente online!
-2 bytes
/
eliminando os s-4 bytes
sed
finais, graças a @manatwork (e cuja resposta plagiei )Versão antiga:
g/t/s//- g/\w\+/s//1 wq .
fonte
q
, ele irá parar por si só quando não houver mais nada a fazer. E você só precisa de uma nova linha após eles, o "." (Ou "roblogic" ...) é desnecessário. Experimente online!Python, 20 bytes
Isso retorna
False
se não estiver eTrue
se estiver. Em pythonFalse
e0
são iguaisTrue
e também1
são.Tão:
fonte
golflua
252018Provavelmente poderia jogar mais um pouco usando alguns truques nos quais não estou pensando no momento.(veja o histórico da versão antiga) Salva 5 caracteres movendo a entrada parawrite
e ignorando aif
instrução lá. Mais dois caracteres foram salvos ignorando o parêntese opcionalfind
. Não verifica se há condições com falha (ou seja, entrada que não seja cara ou coroa ).Um equivalente Lua seria
fonte
Haskell, 18 bytes
Cada sequência iniciada com a letra
h
é mapeada para1
, e todas as outras para-1
.fonte
Sed: 16 caracteres
Exemplo de execução:
fonte
ed
solução, mas ele ainda levou 23 bytes, porqueed
é antigo e mal-humorado!\w
e\+
são extensões GNU.Stax , 3 bytes
Execute e depure
fonte
Stax , 4 bytes
Execute e depure
É o ponto de código do primeiro caractere mod 7 menos 5.
fonte
PowerShell , 15 bytes
Experimente online!
Recebe entrada através de splatting. Usa o
e
vsa
para fazer matemática ASCIIfonte
dc , 8 bytes
dc não pode fazer nada significativo com strings a não ser lê-las e tentar avaliá-las. Fazendo isso, "heads" emite alguns avisos sobre comandos não implementados e pilha vazia, que ignoramos, mas o mais importante é que a pilha permanece vazia. "tails" faz quase o mesmo com a importante exceção de que o "ls" final carrega um valor do registro s para a pilha.
Em seguida, usamos "z" para obter o tamanho da pilha e aritmeticamente mexer para obter as respostas corretas.
Experimente online!
fonte
Triangular , 10 bytes
Experimente online!
Divide o valor ASCII de uma entrada de caracteres por 7. Subtrai o quociente de 15. A execução pára quando o IP fica sem espaço no programa. Isso funciona porque o Triangular pode gerenciar apenas a divisão inteira. Convenientemente, "h" tem um valor de 104, que é 14 quando inteiro dividido por 7; "t" é 116, que é 16 quando inteiro dividido por 7.
Ungolfed / Explicação:
Versão anterior (14 bytes):
Leia um caractere da entrada; se o valor ASCII desse caractere dividido por 8 tiver um restante, imprima -1, caso contrário, imprima 1.
fonte
Barril ,
8128 bytesExperimente online!
Explicação (sintaticamente inválida)
fonte
^
.Vitsy , 13 bytes
Então, estou atrasado para a festa. ¯ \ _ (ツ) _ / ¯
fonte