No me pregunten cómo ni por qué, pero mientras codificaba un proyecto noté que los caracteres de un par de palabras tenían un patrón particular referido al alfabeto, conecté cada carácter de las palabras con el lápiz en el alfabeto y obtuve dos espirales, luego me di cuenta de que la primera espiral era en sentido horario y la otra era en sentido antihorario, y otras características ... ¡así que las llamé palabras remolino !
Una palabra arremolinada puede ser:
- en sentido horario o antihorario
- centrípeto o centrífugo
Aquí hay algunos ejemplos de palabras en remolino :
Tarea 1:
Escriba un programa o función completa que tomará una palabra de la entrada estándar y dará salida si es una Palabra Remolina y sus características, en un formato legible, texto extendido, 3 caracteres, banderas, etc.
Casos de prueba y ejemplos de resultados para diferentes palabras (pero puede decidir cómo representar los resultados):
EARTH, GROUP > NO // NOT A SWIRLING WORD
OPERA, STAY, IRIS > SW,CF,CW // SWIRLING WORD, CENTRIFUGAL, CLOCKWISE
MINER, TAX, PLUG, META > SW,CF,CC // SWIRLING WORD, CENTRIFUGAL, COUNTERCLOCKWISE
AXIOM, AXIS, COOK > SW,CP,CW // SWIRLING WORD, CENTRIPETAL, CLOCKWISE
WATCH, YETI, PILL > SW,CP,CC // SWIRLING WORD, CENTRIPETAL, COUNTERCLOCKWISE
MORE EXAMPLES OF FALSE TEST CASES (NOT SWIRLING WORDS):
EARTH, GROUP, OUTPUT, WORD, CONNECTION, ODD, MOM, DAD,
CHARACTER, EXAMPLE, QUESTION, NEWSLETTER, OTHER
Reglas:
- La conexión entre los dos primeros caracteres debe estar activa (como en los gráficos), toda la conexión par debe estar desactivada , todas las conexiones impares deben estar activadas .
- Puede ignorar mayúsculas / minúsculas o considerar / convertir todo a mayúsculas o todo a minúsculas.
- Las palabras de entrada son solo caracteres en el rango alfabético de AZ, sin espacios, sin signos de puntuación, etc.
- Si una palabra tiene caracteres dobles, como "GROOVE", debe contraer los dobles a un carácter: "GROOVE"> "GROVE".
- Las palabras de entrada contendrán al menos 3 caracteres distintos. Palabras como "MOM", "DAD", "LOL" no son palabras válidas.
- Es posible pasar varias veces en el mismo personaje, como "IRIS".
- El código más corto gana.
Tarea 2:
Para obtener más reputación, encuentre las palabras de remolino más largas , y sus características, que puede encontrar en el diccionario de inglés, siguiendo las reglas anteriores. Puede tomar como referencia la lista completa de las palabras en inglés aquí .
¡Feliz codificación!
Respuestas:
MATL ,
333130 bytesLa entrada está en letras mayúsculas (o en letras minúsculas, pero no mezcladas).
Salida es:
1
/-1
indica centrífugo / centrípeto.1
/ '-1' indica en sentido horario / antihorario.Pruébalo en línea! O verifique todos los casos de prueba (código modificado para tomar todas las entradas y producir los dos números de salida en la misma línea)
Explicación
Tomemos la entrada
'OPERAA'
como un ejemplo.La primera parte del código elimina letras dobles:
Ahora verificamos si las distancias entre las letras no disminuyen (condición necesaria para que la palabra se arremoline):
Luego verificamos si las letras van y vienen (esta es la otra condición para que la palabra se arremoline):
Por último, verificamos si se cumplen las dos condiciones y, en ese caso, producimos la salida:
fuente
Mathematica,
117111bytes¡Gracias a JHM por guardar 6 bytes y hacer que no sea sensible a mayúsculas y minúsculas para arrancar!
Función sin nombre que toma una cadena y devuelve una lista anidada de booleanos en el formulario
{{B1,B2},B3,B4}
. B4 registra si la palabra está girando (y si no es así, el resto de la salida es basura). Si la palabra gira, entonces B1 registra si la palabra es centrífuga, B2 registra si la palabra es centrípeta y B3 registra si la palabra es en sentido horario (Verdadero) o en sentido antihorario (Falso).Aquí hay una versión más larga que el post-procesos (primera línea) la función anterior (espaciados sobre las líneas 2 al 5) para que sea idéntica a la OP:
NO
Si la palabra no está girando, y la elección apropiada de{SW,CF,CW}
,{SW,CF,CC}
,{SW,CP,CW}
, o{SW,CP,CC}
si la palabra se arremolina:La explicación es la misma que en la respuesta CJam de Martin Ender, con una nota adicional: la lista de diferencias consecutivas debe alternar en el signo de que la palabra se arremolina, y eso se puede detectar asegurándose de que todos los productos de pares de diferencias consecutivas sean negativos (eso es lo que
Max[Most[d]Rest@d]<0
hace).Al ejecutar la función en todas las más de 40,000 palabras de Mathematica
WordList[]
, encontramos las siguientes palabras de remolino de 8 letras, que son las más largas de sus respectivos tipos de remolino:(Brownie señala que
positive
no tiene letras dobles y menos letras repetidas questowaway
).¡Pero el campeón absoluto es la palabra centrípeta de 9 letras que gira en sentido antihorario
vassalage
!fuente
LetterNumber
lugar deToCharacterCode
y otros 3 bytes usando enMost[d]
lugar deDrop[d,-1]
.Scala, 110 bytes
Devuelve una tupla
(a,b)
cona == 1
si s es centrípetoa == 0
si s es centrífugoa == -1
si s no está girandoy
b == true
si s es en sentido horariob == false
si s es en sentido antihorarioExplicación:
fuente
Jalea , 30 bytes
TryItOnline
O vea los casos de prueba (con un ligero cambio ya que el último
Ñ
apuntaría al nuevo enlace principal)(Mi falta de habilidad para encadenar probablemente esté costando unos pocos bytes aquí)
Todos los superiores o todos los inferiores.
Devuelve una lista de banderas [D, F, S]:
S: girando = 1 / no girando = 0
F: centrífuga = 1 (circular = 0) centrípeta = -1
D: en sentido horario = 1 / en sentido antihorario = -1
- si S = 0 las otras banderas aún se evalúan a pesar de que no contienen información útil.
¿Cómo?
fuente
0
que esto también funciona para ellos.circular(0)
dentro de tu explicación, tal vez es hora de eliminarla también.min([])=0
jelly.tryitonline.net/#code=W13huYI&input= - Tenga en cuenta que dado que las palabras circulares ahora nunca son entrada esperada, no hay problema en atenderlos.min([])==0
querías decir , pero pensé que esto todavía es golfable.CJam , 39 bytes
Pruébalo en línea!
La entrada puede ser mayúscula o minúscula, pero no mixta.
El programa señala inadvertidamente palabras que no son necesariamente centrífugas o centrípetas, pero que cumplen con los requisitos de ser espirales. Estos se describen como "circulares" en el cuadro a continuación.
Para interpretar el resultado, use este gráfico:
Explicación:
El programa realmente evalúa si la secuencia de diferencias distintas de cero entre caracteres comienza positiva o negativa, si alterna en signo, si las magnitudes comienzan aumentando o disminuyendo, y si continúa haciéndolo. Si las magnitudes no aumentan o disminuyen, el programa se interrumpe al operar en una matriz vacía. Los pasos principales se muestran a continuación (este código también mostrará el progreso de la pila):
fuente
PHP, 322 bytes
para una salida más bonita
echo["n","+P","-P","+F","-F"][$s];
Versión ampliada
Tarea 2 segundo valor sin regla de dobles cortos
Visualiza una palabra
en el fragmento es el resultado del SVG que he creado
fuente
'.(.8*$radius).'
lugar de'.($radius).'
y si lo reemplaza($radius).' 0 0 0
con($radius).' 0 0 '.(($w[$i-1]<$w[$i]?1:0)^(($i-1)%2)).'
el programa no tiene una dirección fijaHaskell, 148 bytes
Pruébalo en Ideone.
La entrada debe ser mayúscula o minúscula.
La salida es una lista de cinco booleanos:
[SW?, CF?, CP?, CW?, CC?]
.f "positive" -> [True,True,False,False,True]
Esto resultó más de lo esperado, especialmente la entrega del colapso de caracteres repetidos toma alrededor de 40 bytes.
Al principio comparé solo los dos primeros caracteres para producir
CW
oCC
antes de notar que los casos de pruebabba
obbc
son válidas también y derrotar a este enfoque.fuente
Python, 152 bytes:
Una función lambda anónima. Llamar como
print(<Function Name>('<String>'))
.Toma la entrada en minúsculas o mayúsculas, pero no en minúsculas.
Emite una matriz que no contiene nada (
[]
) si la palabra no es swirly, o una matriz en el siguiente formato de lo contrario:True/False
paraCentrifugal/Centripetal
.True/False
paraClockwise/Counterclockwise
.¡Pruébelo en línea! (Ideona)
fuente