Не спрашивайте меня, как и почему, но во время написания кода для проекта я заметил, что символы пары слов имеют определенный шаблон, относящийся к алфавиту, я связал каждый символ слова карандашом на алфавите и получил два затем я заметил, что первая спираль была по часовой стрелке, а другая - против часовой стрелки, и другие характеристики ... поэтому я назвал их закрученными словами !
Вихревой Слово может быть:
- по часовой стрелке или против часовой стрелки
- центростремительный или центробежный
Вот несколько примеров закрученных слов :
Задание 1:
Напишите полную программу или функцию, которая будет брать слово из стандартного ввода и выводить, если это закрученное слово и его характеристики, в читаемом формате, расширенный текст, 3 символа, флаги и т. Д.
Тестовые случаи и примеры выходных данных для разных слов (но вы можете решить, как представлять результаты):
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
Правила:
- Связь между первыми двумя символами должны быть вверх (как в графике), все еще соединение должно быть вниз , все нечетные соединения должны быть вверх .
- Вы можете игнорировать верхний / нижний регистр или рассматривать / конвертировать все в верхний регистр или все в нижний регистр.
- Вводимые слова - это только символы в диапазоне алфавита AZ, без пробелов, без знаков препинания и т. Д.
- Если слово содержит двойные символы, такие как «GROOVE», вы должны свернуть двойные символы до одного символа: «GROOVE»> «GROVE».
- Входные слова будут содержать не менее 3 различных символов. Такие слова, как «мама», «папа», «LOL» не являются допустимыми словами.
- Можно передать несколько раз в одном и том же символе, например, "IRIS".
- Самый короткий код выигрывает.
Задача 2:
Чтобы получить больше репутации, найдите самые длинные закрученные слова и их характеристики, которые вы можете найти в словаре английского языка, следуя приведенным выше правилам. Вы можете взять, например, в качестве ссылки полный список английских слов здесь .
Удачного кодирования!
Ответы:
MATL ,
333130 байтВвод прописными буквами (или строчными буквами, но не смешанный).
Выход:
1
/-1
обозначает центробежный / центростремительный.1
/ `-1 'указывает по часовой стрелке / против часовой стрелки.Попробуйте онлайн! Или проверьте все контрольные примеры (код изменен, чтобы принять все входные данные и вывести два выходных числа в одной строке)
объяснение
Давайте возьмем входные данные
'OPERAA'
в качестве примера.Первая часть кода удаляет двойные буквы:
Теперь мы проверяем, не уменьшаются ли расстояния между буквами (необходимое условие для закручивания слова):
Затем мы проверяем, идут ли буквы туда-сюда (это другое условие для закручивания слова):
Наконец, мы проверяем, выполняются ли два условия, и в этом случае выводим результат:
источник
Mathematica,
117111 байтСпасибо JHM за сохранение 6 байтов и без учета регистра при загрузке!
Безымянная функция, которая принимает строку и возвращает вложенный список логических значений в форме
{{B1,B2},B3,B4}
. B4 записывает, закручивается ли слово (а если нет, то остальная часть вывода является мусором). Если слово вращается, то B1 записывает, является ли слово центробежным, B2 записывает, является ли слово центростремительным, а B3 записывает, является ли слово по часовой стрелке (True) или против часовой стрелки (False).Вот более длинная версия , что пост-процессы (первая линия) выше функции (разнесены на протяжении 2 - го-пятые линии) , чтобы сделать его идентичным OP:
NO
если слово не крутятся, и соответствующий выбор{SW,CF,CW}
,{SW,CF,CC}
,{SW,CP,CW}
или{SW,CP,CC}
если слово крутитсяОбъяснение такое же, как и в ответе CJam Мартина Эндера, с одним дополнительным примечанием: список последовательных различий должен чередоваться в знаке для закручивания слова, и это можно обнаружить, убедившись, что все произведения пар последовательных разностей отрицательны (вот что
Max[Most[d]Rest@d]<0
делает).Запустив функцию для всех 40 000 слов Mathematica
WordList[]
, мы находим следующие 8-буквенные закрученные слова, которые являются самыми длинными из соответствующих типов закрученных:(Брауни указывает на
positive
отсутствие двойных букв и меньше повторяющихся букв, чемstowaway
.)Но абсолютный чемпион - 9-буквенное центростремительное слово, вращающееся против часовой стрелки
vassalage
!источник
LetterNumber
вместо,ToCharacterCode
и еще 3 байта, используяMost[d]
вместоDrop[d,-1]
.Скала, 110 байт
Возвращает кортеж
(a,b)
сa == 1
если s центростремительныйa == 0
если s центробежныйa == -1
если с не кружитсяа также
b == true
если s по часовой стрелкеb == false
если s против часовой стрелкиОбъяснение:
источник
Желе , 30 байт
TryItOnline
Или посмотрите тестовые случаи (с небольшим изменением, так как самый последний
Ñ
будет указывать на новую главную ссылку)(Мой недостаток навыка цепочки, вероятно, стоит здесь несколько байтов)
Все верхнее или все нижнее.
Возвращает список флагов [D, F, S]:
S: вращающийся = 1 / не вращающийся = 0
F: центробежный = 1 (круговой = 0) центростремительный = -1
D: по часовой стрелке = 1 / против часовой стрелки = -1
- если S = 0 другие флаги все еще оцениваются, даже если они не содержат никакой полезной информации.
Как?
источник
0
что это также работает и для них!circular(0)
объяснение, может быть, пришло время удалить его.min([])=0
jelly.tryitonline.net/#code=W13huYI&input= - Обратите внимание, что круговые слова теперь никогда Ожидаемый вклад, нет проблем в организации питания для них.min([])==0
, но я подумала, что это все еще игра в гольф.CJam , 39 байт
Попробуйте онлайн!
Ввод может быть прописным или строчным, но не смешанным.
Программа непреднамеренно указывает слова, которые не обязательно являются центробежными или центростремительными, но в остальном отвечают требованиям спиральности. Они описаны как "круговые" в таблице ниже.
Чтобы интерпретировать выходные данные, используйте эту диаграмму:
Объяснение:
Программа на самом деле оценивает, начинается ли последовательность ненулевых различий между символами положительно или отрицательно, меняется ли она по знаку, начинаются ли увеличивающиеся или уменьшающиеся величины, и продолжает ли она это делать. Если величины не увеличиваются или уменьшаются, программа прерывается, работая с пустым массивом. Основные шаги показаны ниже (этот код также покажет прогресс стека):
источник
PHP, 322 байта
для более симпатичного вывода
echo["n","+P","-P","+F","-F"][$s];
Расширенная версия
Второе значение задачи 2 без правила коротких пар
Визуализируйте слово
во фрагменте это результат SVG, который я создал
источник
'.(.8*$radius).'
вместо'.($radius).'
и , если заменить($radius).' 0 0 0
с($radius).' 0 0 '.(($w[$i-1]<$w[$i]?1:0)^(($i-1)%2)).'
программой не имеет направление починкиHaskell, 148 байт
Попробуйте это на Ideone.
Ввод должен быть либо в нижнем, либо в верхнем регистре.
Выход список из пяти булевых:
[SW?, CF?, CP?, CW?, CC?]
.f "positive" -> [True,True,False,False,True]
Это оказалось дольше, чем ожидалось, особенно передача свернутых символов занимает около 40 байт.
Сначала я сравнивал только первые два символа, чтобы получить
CW
илиCC
прежде, чем заметил, что тестовые случаи тоже похожиbba
илиbbc
являются действительными, и проиграл этот подход.источник
Python, 152 байта:
Анонимная лямбда-функция. Звоните как
print(<Function Name>('<String>'))
.Принимает ввод как все строчные или прописные, но не смешанный регистр.
Выводит массив, не содержащий ничего (
[]
), если слово не является swirly, или массив в следующем формате в противном случае:True/False
дляCentrifugal/Centripetal
.True/False
дляClockwise/Counterclockwise
.Попробуйте онлайн! (Ideone)
источник