¡En este desafío de código de golf, verificará los hashtags!
#What_your_code_should_do
La entrada es una cadena. Genere un valor verdadero si es un hashtag válido, y un valor falso de lo contrario.
Definimos una cadena como un Hashtag válido si ...
- Comienza con un hash (
#
). - No tiene un número justo después del hashtag (por ejemplo,
#2016USElection
no es un hashtag válido). - No tiene ningún "carácter especial" (es decir, ningún carácter que no sea un alfabeto, un guión bajo (
_
) o un número).
Puede suponer que la entrada solo contiene caracteres ASCII. (Sería injusto si también hiciéramos Unicode).
#Reglas
Se aplican reglas básicas de código de golf .
#Ejemplos
Verdad:
#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016
Falsy
Hello, World!
#12thBday
#not-valid
#alsoNotValid!
#!not_a_hash
code-golf
string
decision-problem
Laikoni
fuente
fuente
#
realmente un hashtag válido?#öäü
valido?#
no es un hashtag válido por ningún sistema, Facebook o Twitter, también rompe las reglas establecidas, no estoy seguro de que #_ABC sea válido nuevamente en ellos, pero no estoy seguro de eso.an alphabet
significa ascii mayúscula o minúscula? es decirabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
?Respuestas:
Retina , 12 bytes
Imprime
1
para hashtags y0
otros.Pruébalo en línea! (La primera línea habilita un conjunto de pruebas separado por salto de línea).
No hay mucho que explicar aquí, esta es una implementación bastante literal de la definición:
^
y$
son solo anclas que aseguran que la coincidencia cubra toda la cadena,#
verifica que la cadena comience con un#
,(?!\d)
asegura que el siguiente carácter no sea un dígito (sin avanzar la posición del motor regex),\w*
verifica que podamos llegar al final de la cadena con cero o más letras, dígitos o guiones bajos.De forma predeterminada, Retina cuenta el número de coincidencias de la expresión regular dada, razón por la cual esto proporciona
1
etiquetas hash válidas y de0
otro modo.fuente
(?!\d)
es(?=\D)
... pero no sé cómo has escrito Retina. ¿Es posible que pueda usar(?\D)
sin=
guardar un byte? (Si no, ¿vale la pena editar el idioma para que sea factible?)(?!\d)
es diferente de(?=\D)
que este último requiere algún carácter después de la posición actual, mientras que el primero está satisfecho con el final de la cadena. Independientemente de eso, actualmente no es posible ajustar el sabor de expresiones regulares (ya que solo estoy entregando la expresión regular al motor de expresiones regulares de .NET), pero hacer tales cambios está en la hoja de ruta en algún lugar (muy lejos) en el futuro.=
opcional. La(?...)
sintaxis completa se eligió para la extensibilidad, ya que el carácter después del?
nunca es opcional y determina qué tipo de grupo es este, y no creo que quiera renunciar a esa extensibilidad.(?{
y(??
y(?<
(tanto para capturar grupos como para mirar hacia atrás)(?-
y(?1
y, por supuesto, lo básico(?:
. Y tal vez algunos que he echado de menos.Perl, 22 bytes
21 bytes código +1 para
-p
Imprime 1 si es un hashtag válido, de lo contrario, se vacía la cadena.
Uso
Ahorró 2 bytes gracias por Martin Ender (y otros 4 usando su método de búsqueda )
Perl, 18 bytes
Código de 17 bytes +1 para
-p
¡Usar el lookaround de Martin puede ser mucho más corto!
fuente
JavaScript (ES6), 25 bytes
fuente
C, 80 bytes
La función
f()
toma la cadena como argumento y la modificaint *b
a 1 o 0 para indicar verdadero / falso.Si la cadena siempre tiene al menos un carácter (es decir, nunca una cadena vacía), se puede eliminar un byte de 79 bytes:
fuente
Python 3, 41 bytes
fuente
None
falsey, creo que dejarlosbool()
está bien.re.compile('#(?!\d)\w*$').match
? Es aceptable dejar caerf=
, por cierto.Brachylog , 55 bytes
Esto no usa expresiones regulares.
Explicación
fuente
Python 3,
10393 bytesAl
#
serTrue
asesinado aquí, tuve que enumerar la cadena para evitar un error de índice en la entrada de un solo carácter.fuente
isalpha()
método en mi respuesta py3: D "#" siendo cierto, también me destruyó.PowerShell v2 +, 25 bytes
Usando la expresión regular de Martin , acaba de terminar en el
-match
operador de PowerShell junto con la entrada$args
. Para valores de verdad / falsey, esto devolverá la cadena en sí misma en una coincidencia (un valor de verdad) o nada en una no coincidencia (un valor de falsey). Esto se debe a que cuando un operador de comparación se aplica contra una matriz, devuelve cualquier cosa que satisfaga a ese operador.Un par de ejemplos (envueltos en un
[bool]
molde para aclarar la salida):fuente
Mathematica,
524643 bytesGuardado
69 bytes debido a @MartinEnder .Función. Toma una cadena como entrada y devuelve
True
oFalse
como salida. Bastante simple, solo coincide con la expresión regular/#(?!\d)\w*/
.fuente
hello#world
ya que no tiene los anclajes de cadena de inicio y final. Sin embargo, no conozco Mathematica, así que no estoy seguro.Dyalog APL ,
2220 bytesSin RegEx:
-2 gracias a ngn
fuente
Python 2, 79 bytes
Primer intento de golf. Versión sin golf:
fuente
Octava,
37565443 bytes¡Gracias a @LuisMendo por eliminar 8 bytes!
No muy golfístico, pero muy empotrado.
Editar: el código original acepta cadenas sin un '#' inicial. Supongo que debería haberme quedado con regex.
Conjunto de pruebas en ideone .
fuente
Python3 -
156128 bytesUna solución que no usa expresiones regulares. 0 es falsey y cualquier otro valor es verdadero.
¡Gracias a @LeakyNun por guardar bytes!
fuente
+0
aftern[1:]
, pero lamentablemente, aún no funcionó: / Di falso a "#d".+0
pero falla en "#d". Sin embargo, lo probé en Python3. No estoy seguro de si funcionará en Python2IndexOutOfRange
para "#" yFalse
para "#d".lambda n:n=="#"or(n[0]=="#")*all(any([47<ord(c)<58,64<ord(c)<91,ord(c)==95,96<ord(c)<123])for c in n[1:]+"0")*~(47<ord(n[1])<58)
por 128 bytes. Prueba de que funcionaLua,
595554 bytesCódigo
Cómo funciona:
#
.Toma información de la línea de comando. Imprime
true
si la cadena es un hashtag válido, de lo contrario, imprimenil
.fuente
Hojas de cálculo de Google, 30 bytes
Una función de hoja de trabajo anónima que toma la entrada de la celda
A1
la compara con la expresión RE2 y envía el resultado a la celda que llama.fuente
05AB1E , 18 bytes
Código:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Sed 19 + 2 = 21 bytes
Esto filtra todos los no hashtags y genera hashtags válidos.
Corre como
sed -rn "/^#$|^#[a-z]\w*$/Ip"
. Salga con Ctrl+ D(enviar EOF).fuente
GNU grep, 15 + 2 = 17 bytes
Prueba:
Salida:
fuente
Python 3, 97 bytes
70 bytes 56 bytes(Código cambiado)
Lectura humanafuente
lambda x:all(True==[x[0]=="#",x[1].isalpha(),x[2:].isalpha()])
isalpha
?Pyke, 19 bytes
Pruébalo aquí!
Solución rápida para esta noche
fuente
#123
devuelve todavía nada, no debería devolver 0?Ruby, 16 +
31 (n
bandera) =1917 bytesUsos
0
como verdadero ynil
falso.Ejecútalo como
ruby -ne 'p~/^#(?!\d)\w*$/'
. Gracias a @manatwork por corregir el error bash al ejecutar el programa.fuente
!
, vea Designadores de eventos en man bash.)Ml estándar ,
121118107 bytesPruébalo en línea! Solución funcional sin usar regex. Declara una función anónima que está vinculada al identificador de resultado implícito
it
.fuente
isAlphaNum$orelse
eso es bastante amenazante ...orelse
yandalso
.AlphaNum
,orelse
!! (orelse what?
)o explode
al final también es bastante amenazante ...Excel VBA, 54 bytes
Función de ventana inmediata anónima de VBE que toma la entrada de la celda
[A1]
, verifica si el valor de la celda coincide con elLike
patrón, yBoolean
muestra la ventana inmediata de VBEfuente
Haskell , 79 bytes
Pruébalo en línea!
fuente
C #, 92 bytes
C # lambda (
Predicate
) donde input es astring
y output es abool
.Pruébalo en línea!
fuente
Lua, 39 bytes
Copia simple de la descripción del partido. Salidas falsas
nil
si no es un hashtag, de lo contrario, devuelve un hashtag verdadero.Se puede acortar un byte más
find
si se genera una lista de dos valores (lo cual es cierto) que no infringe las reglas.fuente
#
solo.#
es un hashtag en Twitter o Facebook es irrelevante para este desafío. La especificación es muy clara sobre el hecho de que#
debe considerarse un hashtag a los efectos de este desafío. Y aunque no lo he comprobado todas las respuestas, todo lo que hice cheque no acepto#
como un hashtag, así que no estoy seguro de qué respuestas arriba que usted se refiere.Clojure,
130135132 bytes+5 bytes para lidiar con un NPE que sucedió cuando la cadena constaba solo de un hashtag.
-2 bytes usando
Character/isLetterOrDigit
.Sin golf:
fuente
Java 8,
575428 bytesLa respuesta Retina del puerto de Martin Ender para guardar algunos bytes y hacer coincidir los casos de prueba agregados.
No
String#matches
siempre coincide con la cadena completa, por lo que no es necesario^...$
.Pruébalo aquí.
fuente