Instrucciones
Dada una cadena de entrada desconocido i
con un valor de cabezas o colas , volver 1
a las cabezas o -1
de las colas con el código más corto.
Ejemplo de código no golfizado (55b):
if(i == "heads"){
print(1);
}else{
print(-1);
}
Ejemplo de código de golf (16b):
print("t">i||-1)
JavaScript se utiliza para el ejemplo pero es no un requisito . Lo sentimos si es demasiado simple para la mayoría de los usuarios, se puede mejorar.
Respuestas:
CJam, 4 bytes
Asume que la variable
I
contiene la entrada, yai
que no es un identificador válido en CJam.Pruébalo en línea.
Esto es equivalente al código JavaScript
I.indexOf('e')
.fuente
p
en esto? ¿Es estándar en CJam no hacerlo?p
no es necesario.C, 18 bytes
Bastante fácil, pero hagámoslo solo por diversión ...
Dada la cadena
char *i
, imprime 1 paraheads
y -1 paratails
, con nueva línea final.Explicación
En C,
"-1" + 1
apunta a 1 carácter hacia adelante, por lo que es lo mismo que"1"
. Echemos un vistazo a los primeros personajes:Si contamos los bits del más a la derecha comenzando en cero, el bit 3 es 1 en
heads
y 0 entails
: sumando a"-1"
da la cadena correcta. Se parece a esto:Ahora, sustituya
i[0]
con*i
y el desplazamiento a la derecha con la división de potencia de dos para guardar algunos bytes. También elimine los paréntesis inútiles:Ahora,
& 1
puede ser sustituido con% 2
. El recuento de caracteres es el mismo, pero el módulo tiene mayor prioridad, lo que permite eliminar los paréntesis. Eliminar el espacio en blanco:Prima
Creo que la forma más corta de obtener un número entero 1 o -1 (no una cadena) en C es:
Explicación:
fuente
Rubí, 8 (6 sin salida)
Operador de cohetes!
fuente
PHP - 11 bytes
Esto funciona porque
'tails' ^ 'F'
→'2'
y'heads' ^ 'F'
→'.'
, que cuando se escribe como un entero es0
.Puede probar esta solución (o cualquiera de las siguientes) de la siguiente manera:
Enlace Ideone
Alternativas
15 :
<?=1-md5($i)%3;
16 :
<?=md5($i)[5]-5;
16 :
<?=-crc32($i)%5;
fuente
TI-BASIC, 9-10 bytes
Sencillo. "t" está en la posición 1 de "colas", pero "t" no está en la cadena "cabezas", por lo que inString (devuelve 1 para colas y 0 para cabezas).
Si su calculadora está en modo radianes (como debería estarlo cualquier matemático), solo toma nueve bytes:
Tenga en cuenta que las calculadoras TI no tienen cadenas con nombre, por lo que la entrada está en la variable de respuesta de la calculadora. También tenga en cuenta que las letras minúsculas son de dos bytes cada una, por lo que esta solución en realidad requiere menos memoria que la palabra "cabezas".
fuente
t
yinString(
son cada dos bytes.Fisión ,
2621 BytesMartin (y su excelente respuesta aquí ) me convenció para aprender un nuevo idioma, y ¿qué mejor lugar que un golf rápido? Es casi seguro que esto no es óptimo, pero bueno, ¡fue divertido! Una vez que me sienta bien al respecto, puedo proporcionar alguna forma de explicación si así lo solicita.
fuente
Python 2, 16 bytes
fuente
Pyth - 4 bytes
Corre con cabezas o colas . Como
i
esint
en Pyth, este usosz
como el nombre de la variable, que contiene cualquier entrada del usuario. Es equivalente a Pythonprint(z.find("e"))
, por lo que utiliza el método de @ Dennis.fuente
VBA (Excel), 12 bytes
No es un juego de golf fantástico, pero es divertido probar con VBA para acercarse a un lenguaje de programación adecuado ...
i es la cadena, y solo explota el valor ASCII del primer carácter, dividido por 6 y restado de 13 para dar 1 o -1. Muy simple.
Ejemplo ejecutado en una ventana inmediata (10 bytes adicionales para establecer la variable de entrada):
fuente
C, 22 bytes
¡Los créditos van a @TheE por contarme sobre esto !
Explicación:
Si el primer carácter de la cadena es mayor que
'h'
, la cadena"-1"
se imprime. De lo contrario, la cadena"1"
se imprime. Tenga en cuenta que este enfoque viene con un carácter de nueva línea final.Versión anterior (25 bytes):
Explicación:
Si el primer carácter de la cadena es mayor que
'h'
, se imprime -1. De lo contrario, se imprime 1.fuente
h
y 7 parat
.puts(*i>'h'?"-1":"1");
no sería mejor (22 bytes)Tr:
1713 caracteres(O
1410 si solo cuenta los argumentos ...)Ejecución de muestra:
Breve explicacion:
tr
significa transliterar, es decir, reemplaza cada carácter de la entrada que se encuentra en el primer argumento con un carácter en la misma posición en el segundo argumento:Si el primer argumento es más largo, los caracteres sin coincidencia posicional en el segundo argumento se reemplazan con el último carácter del segundo argumento:
Cuando se usa la opción
-s
(--squeeze-repeats
), los caracteres sucesivos que se reemplazarían con el mismo carácter se reemplazan a la vez:Entonces, si enumeramos todos los caracteres en “colas”, obtenemos lo que necesitamos:
Lo mismo para "cabezas", pero es necesario mantener la "t" al frente para consumir el signo menos (caracteres ordenados alfabéticamente por escalofriante)
Fusionar todos los caracteres únicos de "colas" y "cabezas" en un solo primer argumento, manteniendo "t" al frente conduce a la solución final:
Para evitar enumerar los caracteres, se puede utilizar un intervalo en formato desde - hasta .
fuente
tr
. POSIXY:tr -s ta-s '-[1*]'
Conjunto 8088, IBM PC DOS, 17 bytes
Desmontado:
Explicación:
Use el indicador de paridad de la CPU para determinar si el primer carácter es un
'h'
(número par de binarios1
) o un't'
(número impar de binarios1
). Esto ahorra un byte al comparar el carácter en ASCII.Entrada desde la línea de comando, salida a la consola.
De entrada y salida:
fuente
Japt , 2 bytes
Pruébalo en línea
fuente
shell (portátil / POSIX), 16 bytes
expr $i : he - 1
¡Pruébelo en línea!
Gracias a @ StéphaneChazelas en unix.stackexchange.com
Otras soluciones probadas: ¡
echo $[30#$i%7-1] # 17 bytes but only in bash, zsh.
Pruébelo en línea!echo $((30#$i%7-1)) # 19 bytes but only bash,ksh,zsh.
¡Pruébelo en línea!he=2;echo $[${i%a*}-1] # 22 bytes But only in bash,zsh .
¡Pruébelo en línea!a=${i%h*};echo ${a:+-}1 # 23 .
portátil . ¡Pruébelo en línea!he=2;echo $((${i%a*}-1)) # 24 bytes .
portátil . ¡Pruébelo en línea!IFS=h;set $i;echo ${1:+-}1 # 26 (change IFS) .
portátil . ¡Pruébelo en línea!(IFS=h;set $i;echo ${1:+-}1) # 28 (subshell) .
portátil . ¡Pruébelo en línea!(IFS=h;set $i;echo $(($#*2-3))) # 31 bytes .
portátil . ¡Pruébelo en línea!Nota: Usar
dash
como un símil razonable de un probador de shell portátil.expr $i : he - 1
funciona mediante recuento de cuántos caracteres coincidenhe
con$i : he
. Unheads
partido2
y untails
partido 0 (ninguno). Luego restando1
con- 1
.$[30#$i%7-1]
funciona convirtiendo la cadena a un entero. La base 30 y el mod por 7 se seleccionaron para obtener una diferencia de 2 entreheads
ytails
. Luego, restando 1 convierte los números a1
y-1
.Tenga en cuenta que a
$[...]
es una forma arcaica de expresión aritmética$((...))
válida solo en algunos shells.he=2;echo $[${i%a*}-1]
funciona haciendo una variable de algún valor y luego usando la expansión aritmética para expandir esa variable (desde el valor del texto). Los${i%a*}
convertidosheads
ahe
ytails
at
(que, como una variable, tiene un valor de 0).IFS=h;set $i;echo ${1:+-}1
Funciona en dos pasos. Establecer IFS para dividir loh
no entrecomillado$i
enset $i
partes divididas por el carácterh
,heads
se divide en''
y'eads'
, por lo tanto, se establece$1
en nulo.tail
No se divide porh
, por lo tanto,$1
igual atails
. Luego,${1:+-}
genera un-
si el valor de$1
es no nulo (como entails
) o nada (como con un nulo$1
). Ese signo (o nada) se concatena con1
.(IFS=h;set $i;echo $(($#*2-3)))
funciona de manera similar, pero usa el número de partes ($#
) en las que$i
se rompió la cadena .fuente
Python 2, 17 bytes
'heads'
es menor que't'
, por lo que se evalúaTrue == 1
e imprime la cadena después del primer carácter.'tails'
es mayor que't'
, por lo que se evalúaFalse == 0
y se imprime toda la cadena.Si hacemos esto desde la línea de comandos, con impresión implícita, simplemente se convierte en:
... para 12 bytes, pero agrega comillas simples a la salida.
fuente
QBasic, 11 bytes
Esta tiene que ser la pieza más breve de QBasic que he escrito.
Explicación:
Lo anterior es un QBasic bastante bastante golfizado. Una vez que el autoformatter lo supere, se verá así:
La primera línea compara la cadena
i
con"t"
. Sii
es"heads"
,i > "t"
es falso yc = 0
. Sii
es"tails"
,i > "t"
es cierto yc = -1
. Sí,-1
es el valor predeterminado para boolean verdadero en QBasic!La segunda línea se asigna
-1
a-1
y0
a1
través de un truco de matemáticas:(-1)^(-1) == 1/(-1) == -1
y0^0
, aunque técnicamente matemáticamente sin definir, devoluciones1
.Este código requiere que
i
se declare explícitamente como una variable de cadena; de lo contrario, tendría que ser asíi$
. Programa de prueba completo (probado en QB64 ):fuente
Gaia ,
54 bytesSimilar a la respuesta de Dennis CJam , encuentra el índice de
e
en la cadena de entradaSe guardó un byte ya que no me di cuenta de que la entrada se usó automáticamente como argumento si no hay suficientes valores de pila
Cómo funciona
Pruébalo en línea!
fuente
Bash , 22
Toma la segunda letra (
e
oa
) y la interpreta como un dígito hexadecimal (14 o 10), luego divide entre 2 y resta 6 para obtener las respuestas correctas.Pruébalo en línea!
fuente
echo $[30#$i%7-1]
solo 17 bytes. :-)ed ,
272521 bytesed
me dio dolor de cabeza Finalmente lo resolví con la ayuda de@ed1conf
Twitter y algunos comentariosunix.se
. No solo puedes unir las cosass/re/newtext/
, tienes que ponerle un prefijo, de log
contrarioed
, es un paquete triste. Es como un gruñón programa de 50 años de Unix que dice "sal de mi jardín".Pruébalo en línea!
-2 bytes al soltar los últimos
/
s-4 bytes gracias a @manatwork (y cuya
sed
respuesta plagué )Versión anterior:
g/t/s//- g/\w\+/s//1 wq .
fuente
q
, se cerrará por sí solo cuando no quede nada por hacer. Y solo necesita una nueva línea después de ellos, el "." (O "roblogic" ...) es innecesario. Pruébalo en línea!Python, 20 bytes
Esto regresa
False
si no lo es, yTrue
si lo es. En pythonFalse
y0
son lo mismo,True
y también lo1
son.Asi que:
fuente
golflua
252018Probablemente podría jugar un poco más usando algunos trucos en los que no estoy pensando en este momento.(vea el historial de la versión anterior) Guarde 5 caracteres moviendo la entradawrite
e ignorando laif
declaración allí. Se guardaron dos caracteres más al ignorar el paréntesis opcional enfind
. No comprueba para condiciones fallidos (es decir, de entrada que no es cabezas o colas ).Un equivalente de Lua sería
fuente
Haskell, 18 bytes
Cada cadena que comienza con la letra
h
está asignada a1
, todas las demás a-1
.fuente
Sed: 16 caracteres
Ejecución de muestra:
fuente
ed
solución, pero aún así tomó 23 bytes, ¡porqueed
es viejo y gruñón!\w
y\+
son extensiones GNU sin embargo.Stax , 3 bytes
Ejecutar y depurarlo
fuente
Stax , 4 bytes
Ejecutar y depurarlo
Es el punto de código del primer personaje mod 7 menos 5.
fuente
PowerShell , 15 bytes
Pruébalo en línea!
Toma entrada a través de salpicaduras. Utiliza el
e
vs ela
para hacer matemáticas ASCIIfuente
dc , 8 bytes
dc no puede hacer nada significativo con cadenas distintas a leerlas e intentar evaluarlas. Al hacer esto, "heads" genera algunas advertencias sobre los comandos no implementados y la pila vacía, que ignoramos, pero lo más importante es que la pila permanece vacía. "colas" hace casi lo mismo con la importante excepción de que la "ls" final carga un valor del registro s en la pila.
Luego usamos "z" para obtener la longitud de la pila y el violín aritmético para obtener las respuestas correctas.
Pruébalo en línea!
fuente
Triangular , 10 bytes.
Pruébalo en línea!
Divide el valor ASCII de una entrada de caracteres entre 7. Resta el cociente de 15. La ejecución se detiene cuando la IP se queda sin espacio del programa. Esto funciona porque Triangular solo puede administrar la división de enteros. Convenientemente, "h" tiene un valor de 104, que es 14 cuando el número entero se divide por 7; "t" es 116, que es 16 cuando entero dividido por 7.
Ungolfed / Explicación:
Versión anterior (14 bytes):
Leer un personaje de entrada; si el valor ASCII de ese carácter dividido entre 8 tiene un resto, imprima -1, de lo contrario imprima 1.
fuente
barril ,
8128 bytesPruébalo en línea!
Explicación (sintácticamente inválida)
fuente
^
.Vitsy , 13 bytes
Y qué, llego tarde a la fiesta. ¯ \ _ (ツ) _ / ¯
fuente