Instructions
Étant donné une chaîne d'entrée inconnue i
avec une valeur de têtes ou de queues , retournez 1
pour les têtes ou -1
pour les queues avec le code le plus court.
Exemple de code non golfé (55b):
if(i == "heads"){
print(1);
}else{
print(-1);
}
Exemple de code golfé (16b):
print("t">i||-1)
Javascript a été utilisé pour l'exemple mais ce n'est pas une exigence . Désolé si c'est trop simple pour la plupart des utilisateurs, cela peut être amélioré.
Réponses:
CJam, 4 octets
Suppose que la variable
I
contient l'entrée, cari
n'est pas un identifiant valide dans CJam.Essayez-le en ligne.
C'est équivalent au code JavaScript
I.indexOf('e')
.la source
p
dans ceci? Est-ce standard dans CJam de ne pas le faire?p
n'est pas nécessaire.C, 18 octets
Assez facile, mais faisons-le juste pour le plaisir ...
Étant donné la chaîne,
char *i
il affiche 1 pourheads
et -1 pourtails
, avec une nouvelle ligne de fin.Explication
En C,
"-1" + 1
pointe vers 1 caractère vers l'avant, c'est donc la même chose que"1"
. Jetons un coup d'œil aux premiers personnages:Si nous comptons les bits du plus à droite commençant à zéro, le bit 3 est 1 in
heads
et 0 intails
: en le sommant pour"-1"
donner la bonne chaîne. Cela ressemble à ceci:Maintenant, remplacez
i[0]
par*i
et le décalage à droite par la division de la puissance de deux pour économiser quelques octets. Supprimez également les parenthèses inutiles:Maintenant,
& 1
peut être remplacé par% 2
. Le nombre de caractères est le même, mais le module a une priorité plus élevée, ce qui permet de supprimer les parenthèses. Supprimez l'espace blanc:Prime
Je pense que le moyen le plus court pour obtenir un entier 1 ou -1 (pas une chaîne) en C est:
Explication:
la source
Ruby, 8 (6 sans sortie)
Opérateur de fusée!
la source
PHP - 11 octets
Cela fonctionne parce que
'tails' ^ 'F'
→'2'
et'heads' ^ 'F'
→'.'
, qui, lorsqu'ils sont saisis comme un entier, le sont0
.Vous pouvez tester cette solution (ou l'une des solutions ci-dessous) de la manière suivante:
Lien Ideone
Alternatives
15 :
<?=1-md5($i)%3;
16 :
<?=md5($i)[5]-5;
16 :
<?=-crc32($i)%5;
la source
TI-BASIC, 9-10 octets
Simple. "t" est en position 1 de "queues", mais "t" n'est pas dans la chaîne "têtes", donc inString (renvoie 1 pour les queues et 0 pour les têtes.
Si votre calculatrice est en mode radian (comme tout mathématicien devrait l'être), cela ne prend que neuf octets:
Notez que les calculatrices TI n'ont pas de chaînes nommées, donc l'entrée est dans la variable de réponse de la calculatrice. Notez également que les lettres minuscules sont de deux octets chacune, donc cette solution prend en fait moins de mémoire que le mot "têtes".
la source
t
etinString(
sont chacun deux octets.Fission ,
2621 octetsMartin (et son excellente réponse ici ) m'a convaincu d'apprendre une nouvelle langue, et quel meilleur endroit qu'un golf rapide? Ce n'est certainement pas optimal, mais bon, c'était amusant! Une fois que je me sens bien à ce sujet, je peux fournir une certaine forme d'explication si elle est demandée.
la source
Python 2, 16 octets
la source
Pyth - 4 octets
Courez avec des têtes ou des queues . Comme
i
estint
en Pyth, celui - ci utilisez
comme nom de variable, qui contient des entrées d'utilisateur. Il est équivalent au Pythonprint(z.find("e"))
, utilise donc la méthode de @ Dennis.la source
VBA (Excel), 12 octets
Pas un peu fantastique de golf, mais c'est amusant d'essayer avec VBA pour se rapprocher d'un langage de programmation approprié ...
i est la chaîne, et elle exploite simplement la valeur ASCII du premier caractère, divisée par 6 et soustraite de 13 pour donner 1 ou -1. Très simple.
Exemple exécuté dans une fenêtre immédiate (10 octets supplémentaires pour définir la variable d'entrée):
la source
C, 22 octets
Les crédits vont à @TheE pour m'en parler !
Explication:
Si le premier caractère de la chaîne est supérieur à
'h'
, la chaîne"-1"
est imprimée. Sinon, la chaîne"1"
est imprimée. Notez que cette approche est accompagnée d'un caractère de fin de ligne.Ancienne version (25 octets):
Explication:
Si le premier caractère de la chaîne est supérieur à
'h'
, -1 est imprimé. Sinon, 1 est imprimé.la source
h
et 7 pourt
.puts(*i>'h'?"-1":"1");
? (22 octets)Tr:
1713 caractères(Ou
1410 si vous ne comptez que les arguments…)Exemple d'exécution:
Brève explication:
tr
signifie translittéré, cela signifie, remplace chaque caractère de l'entrée trouvée dans le premier argument par un caractère à la même position dans le deuxième argument:Si le premier argument est plus long, les caractères sans correspondance de position dans le deuxième argument sont remplacés par le dernier caractère du deuxième argument:
Lorsque l' option
-s
(--squeeze-repeats
) est utilisée, les caractères successifs qui seraient remplacés par le même caractère sont remplacés à la fois:Donc, si nous énumérons tous les caractères dans «queues», nous obtenons ce dont nous avons besoin:
Idem pour les «têtes», mais nous devons tout de même garder le «t» devant pour consommer le moins (caractères triés alphabétiquement pour la chair de poule):
La fusion de tous les caractères uniques de "queues" et de "têtes" dans un seul premier argument, en gardant "t" devant conduit à la solution finale:
Pour éviter d'énumérer les caractères, un intervalle au format de - à peut être utilisé à la place.
la source
tr
. POSIXly:tr -s ta-s '-[1*]'
Assemblage 8088, IBM PC DOS, 17 octets
Non assemblé:
Explication:
Utilisez l'indicateur de parité du processeur pour déterminer si le premier caractère est un
'h'
(nombre pair de binaires1
) ou un't'
(nombre impair de binaires1
). Cela économise un octet par rapport à la comparaison du caractère en ASCII.Entrée depuis la ligne de commande, sortie vers la console.
Entrée sortie:
la source
Japt , 2 octets
Essayez-le en ligne
la source
shell (portable / POSIX), 16 octets
expr $i : he - 1
Essayez-le en ligne!
Merci à @ StéphaneChazelas dans unix.stackexchange.com
Autres solutions essayées:
echo $[30#$i%7-1] # 17 bytes but only in bash, zsh.
essayez-le en ligne!echo $((30#$i%7-1)) # 19 bytes but only bash,ksh,zsh.
Essayez-le en ligne!he=2;echo $[${i%a*}-1] # 22 bytes But only in bash,zsh .
Essayez-le en ligne!a=${i%h*};echo ${a:+-}1 # 23 .
portable. Essayez-le en ligne!he=2;echo $((${i%a*}-1)) # 24 bytes .
portable. Essayez-le en ligne!IFS=h;set $i;echo ${1:+-}1 # 26 (change IFS) .
portable. Essayez-le en ligne!(IFS=h;set $i;echo ${1:+-}1) # 28 (subshell) .
portable. Essayez-le en ligne!(IFS=h;set $i;echo $(($#*2-3))) # 31 bytes .
portable. Essayez-le en ligne!Remarque: Utilisation
dash
comme comparaison raisonnable d'un testeur de coque portable.expr $i : he - 1
fonctionne en comptant le nombre de caractères correspondenthe
avec$i : he
. Uneheads
correspondance2
et unetails
correspondance 0 (aucune). Puis soustraire1
avec- 1
.$[30#$i%7-1]
fonctionne en convertissant la chaîne en un entier. La base 30 et le mod par 7 ont été sélectionnés pour obtenir une différence de 2 entreheads
ettails
. Ensuite, soustraire 1 convertit les nombres en1
et-1
.Notez que a
$[...]
est une forme archaïque d'expression arithmétique$((...))
valable uniquement dans certains shells.he=2;echo $[${i%a*}-1]
fonctionne en créant une variable d'une certaine valeur, puis en utilisant l'expansion arithmétique pour développer cette variable (à partir de la valeur de texte). Le${i%a*}
convertitheads
enhe
ettails
verst
(qui, en tant que variable, a une valeur de 0).IFS=h;set $i;echo ${1:+-}1
fonctionne en deux étapes. La définition de IFS pour diviser les partiesh
non$i
entre guillemetsset $i
en parties divisées par le caractèreh
,heads
est divisée en''
et'eads'
, donc définie$1
sur null.tail
n'est pas divisé parh
, ce qui rend$1
égal àtails
. Génère ensuite${1:+-}
un-
si la valeur de$1
est non nulle (comme danstails
) ou rien (comme avec un null$1
). Ce signe (ou rien) est concaténé avec1
.(IFS=h;set $i;echo $(($#*2-3)))
fonctionne de la même manière mais utilise le nombre de parties ($#
) dans lesquelles la chaîne a$i
été divisée.la source
Python 2, 17 octets
'heads'
est inférieur à't'
, donc il évalueTrue == 1
et imprime la chaîne après le premier caractère.'tails'
est supérieur à't'
, il est donc évalué àFalse == 0
et la chaîne entière est imprimée.Si nous faisons cela à partir de la ligne de commande, avec une impression implicite, cela devient simplement:
... pour 12 octets, mais il ajoute des guillemets simples à la sortie.
la source
QBasic, 11 octets
Cela doit être le plus court morceau de QBasic que j'aie jamais écrit.
Explication:
Ce qui précède est un QBasic assez fortement golfé. Une fois que la mise en forme automatique aura terminé, cela ressemblera à ceci:
La première ligne compare la chaîne
i
avec"t"
. Sii
est"heads"
,i > "t"
est faux etc = 0
. Sii
c'est"tails"
,i > "t"
c'est vrai etc = -1
. Oui,-1
la valeur par défaut de booléen est-elle vraie dans QBasic!La deuxième ligne est mappée
-1
vers-1
et0
vers1
via une astuce mathématique:,(-1)^(-1) == 1/(-1) == -1
et0^0
, bien que techniquement non définie mathématiquement, retourne1
.Ce code nécessite d'
i
être déclaré explicitement comme une variable de chaîne; sinon, il faudrait que ce soit le casi$
. Programme de test complet (testé sur QB64 ):la source
Gaia ,
54 octetsSimilaire à la réponse CJam de Dennis , trouve l'index de
e
dans la chaîne d'entréeEnregistrement d'un octet car je ne savais pas que l'entrée était automatiquement utilisée comme argument s'il n'y avait pas assez de valeurs de pile
Comment ça marche
Essayez-le en ligne!
la source
Bash , 22
Prend la 2e lettre (
e
oua
) et l'interprète comme un chiffre hexadécimal (14 ou 10), puis divisez par 2 et soustrayez 6 pour obtenir les bonnes réponses.Essayez-le en ligne!
la source
echo $[30#$i%7-1]
seulement 17 octets. :-)ed ,
272521 octetsed
m'a donné mal à la tête. Enfin compris avec l'aide de@ed1conf
Twitter et quelques coups d'œilunix.se
. Vous ne pouvez pas simplement faire correspondre les choses avecs/re/newtext/
, vous devez le préfixer avecg
sinon voused
emballez un triste. C'est comme un programme Unix grincheux de 50 ans qui dit "descendez de ma pelouse".Essayez-le en ligne!
-2 octets en supprimant les
/
s-4 octets finaux grâce à @manatwork (& dont
sed
j'ai plagié la réponse)Ancienne version:
g/t/s//- g/\w\+/s//1 wq .
la source
q
, il s'arrêtera tout seul quand il ne restera plus rien à faire. Et vous n'avez besoin que d'une nouvelle ligne après eux, le «.» (Ou «roblogic»…) est inutile. Essayez-le en ligne!Python, 20 octets
Cela revient
False
si ce n'est pas leTrue
cas et si c'est le cas. En pythonFalse
et0
sont les mêmes, etTrue
et1
sont aussi.Alors:
la source
golflua
252018On pourrait probablement jouer au golf encore plus en utilisant des trucs auxquels je ne pense pas pour le moment.(voir l' historique pour l'ancienne version). Enregistrement de 5 caractères en déplaçant l'entrée verswrite
et en ignorant l'if
instruction là. Deux autres caractères ont été enregistrés en ignorant la parenthèse optionnelle activéefind
. Il ne vérifie pas les conditions d'échec (c'est-à-dire, une entrée qui n'est ni en tête ni en queue ).Un équivalent Lua serait
la source
Haskell, 18 octets
Chaque chaîne commençant par la lettre
h
est mappée à1
, toutes les autres à-1
.la source
Sed: 16 caractères
Exemple d'exécution:
la source
ed
solution, mais cela a quand même pris 23 octets, car iled
est vieux et grincheux!\w
et\+
sont des extensions GNU cependant.Stax , 3 octets
Exécuter et déboguer
la source
Stax , 4 octets
Exécuter et déboguer
C'est le point de code du premier caractère mod 7 moins 5.
la source
PowerShell , 15 octets
Essayez-le en ligne!
Prend entrée via splatting. Utilise le
e
vs lea
pour faire des maths ASCIIla source
dc , 8 octets
dc ne peut rien faire de significatif avec des chaînes autres que les lire et tenter de les évaluer. Ce faisant, "heads" émet des avertissements concernant les commandes non implémentées et la pile vide, que nous ignorons, mais surtout la pile reste vide. "tails" fait presque la même chose à l'exception importante que le "ls" final charge une valeur du registre s dans la pile.
Nous utilisons ensuite "z" pour obtenir la longueur de la pile et un violon arithmétique pour obtenir les bonnes réponses.
Essayez-le en ligne!
la source
Triangulaire , 10 octets
Essayez-le en ligne!
Divise la valeur ASCII d'une entrée de caractère par 7. Soustrait le quotient de 15. L'exécution s'arrête lorsque l'IP manque de l'espace du programme. Cela fonctionne parce que Triangular ne peut gérer que la division entière. Idéalement, "h" a une valeur de 104, qui est 14 lorsqu'il est divisé par 7; "t" est 116, qui est 16 lorsque l'entier est divisé par 7.
Non golfé / Explication:
Version précédente (14 octets):
Lire un caractère de l'entrée; si la valeur ASCII de ce caractère divisée par 8 a un reste, imprimez -1, sinon imprimez 1.
la source
Keg ,
8128 octetsEssayez-le en ligne!
Explication (syntaxiquement invalide)
la source
^
.Vitsy , 13 octets
Alors quoi, je suis en retard pour la fête. ¯ \ _ (ツ) _ / ¯
la source