(Примечание: это более легкое выделение из моего предыдущего задания « Найди слова бесконечности!» , Которое является ответвлением от моего другого предыдущего задания « Найти закрученные слова!» :))
Определение волнистого слова :
- Если вы соедините кривыми все символы Волнистого Слова в алфавите (AZ), вы получите путь волны, непрерывно идущей вправо или влево и никогда не меняющей направления, как на рисунках ниже.
- Волнистые Слово может быть:
- Повышение, если каждый последующий символ находится справа (по алфавиту) от предыдущего.
- Уменьшение, если каждый последующий символ находится слева (на алфавите) от предыдущего.
- Все четные соединения должны быть отключены, все нечетные соединения должны быть отключены.
- Вы можете игнорировать верхний / нижний регистр или рассматривать / конвертировать все в верхний регистр или все в нижний регистр.
- Вводимые слова - это только символы в диапазоне алфавита AZ, без пробелов, знаков пунктуации или символов.
- Если слово содержит двойные символы, такие как «SPOON», вы должны свернуть двойные символы до одного символа: «SPOON»> «SPON» (потому что при переходе от O к O это нулевое расстояние).
- В Слова Волнистые будет содержать , по крайней мере , 3 различных символов (даже после того, как двойники коллапса).
Вот несколько примеров:
Задача:
Напишите полную программу или функцию, которая будет принимать слово из стандартного ввода и выводить, если оно является волнистым или нет, и в положительном случае выводить, если оно увеличивается или уменьшается . Выход может быть True/False/Null
, 2/1/0
, 1/Null/0
, -1/0/1
, NO/WR/WD
и т.д., вы решаете , как представить его.
Тестовые случаи:
WAVY WORDS:
ADEPT, BEGIN, BILL, BOSS, BOOST, CHIMP,
KNOW, SPONGE, SPOON, TROLL, WOLF
ADEPT > YES > RAISING
BEGIN > YES > RAISING
BILL > YES > RAISING
BOSS > YES > RAISING
BOOST > YES > RAISING
CHIMP > YES > RAISING
KNOW > YES > RAISING
SPONGE > YES > DECREASING
SPOON > YES > DECREASING
TROLL > YES > DECREASING
WOLF > YES > DECREASING
NOT WAVY WORDS:
WATCH, EARTH, NINON, FOO, BAR, WAVE, SELECTION,
YES, NO, DEFINITION, WATER, WINE, CODE, AAAHHHH, I, MM, ABCA
Правила:
- Самый короткий код выигрывает.
Необязательная задача:
Найдите в списке как можно больше волнистых слов в английском словаре, а также самое длинное. Вы можете взять, например, в качестве ссылки полный список английских слов здесь .
NO
иFOO
не являются действительными входными данными по вашим правилам.NOT WAVY WORDS
разделе, хотя, это правильно ..Ответы:
05AB1E ,
119 байт (спасибо Аднану )Попробуйте онлайн!
Волнистые чехлы:
0 - Уменьшение волнистости
1 - Увеличение волнистости
Не волнистые случаи:
[0,1] - Не волнистая, изначально уменьшающаяся, но затем имеет увеличение / равенство, которое нарушает шаблон.
[1,0] - Не волнистый, изначально растущий, но затем имеет уменьшение / равенство, которое нарушает модель
Input String - Невозможно быть волнистым в первую очередь из-за длины.
Объяснение:
источник
The input words will contain at least 3 distinct characters
что мне не нужно обрабатывать менее 3 символов. Работа над изменениями может занять некоторое время; это мой первый ответ, который я смог сделать в 05AB1E.ü‹
же, какü-0‹
:)Желе , 10 байт
TryItOnline! или запустите все тесты
Возвращает:
[1]
для волнистого увеличения[-1]
для волнистого уменьшающегосячто - то другого в противном случае (
[]
,[0]
,[-1,1]
или[1,-1]
)(Заявлен как ненужное: для одного значения для каждого
OIṠḟ0µL’aQS
(11 байт) будет возвращать1
,-1
и0
соответственно.)Как?
источник
Python 2, 54 байта
Вводит в виде списка символов. Выходы:
Проверяет, равна ли отсортированная входная строка ее оригиналу или наоборот. Делает это путем нарезки с шагом 1 и -1. В то же время мы проверяем, имеет ли слово хотя бы 2 разные буквы.
Если «выход с ошибкой» может быть использован для вывода ни в одном из случаев, мы можем уменьшить значение до 51 байта:
источник
Python 3,
7775 байтПредполагается, что все буквы одного и того же случая.
Возвращает:
0
если не волнистый1
если вперед волнистые2
если назад волнистыеУдалил ненужные пробелы благодаря @ETHproductions
источник
or
.R
96 96байтВозвращает:
1
для волнистых и поднятия2
для волнистых и убывающих3
для не волнистыхРазъяснения
d=diff(rle(utf8ToInt(x))$v)
: Генерирует переменнуюd
, сначала преобразовывая строку в ееASCII
значения, используяutf8ToInt
которые удобно возвращает вектор. Затем выполните кодирование длины серии, используяrle
.rle(...)$v
возвращает неповторяющиеся значения последовательности (т. е. сворачивание всех прогонов). Наконец-то возьми разницу.if(any(d>0)&any(d<0)|sum(1|d)<2)3
: Если хотя бы одно из различий положительное и хотя бы одно отрицательное или если последовательность различий имеет меньше2
элементов (эквивалентно исходному слову, содержащему менее 3 символов), слово не является волнистым и возвращает3
else``if``(all(d<1),2,1)
Иначе, если все различия отрицательны, возврат2
к волнистости и уменьшению, иначе возврат1
к волнистости и повышению.Попробуйте все тестовые случаи в R-fiddle (обратите внимание, что он назван так, что он может быть векторизован для тестовых случаев).
источник
JavaScript (ES6),
8481 байтПредполагается, что ввод все в том же случае. Возвращает
1
для повышения волнистости,-1
для уменьшения волнистости,0
или-0
(оба ложные) для не волнистости. Изменить: Сохранено 3 байта благодаря @RobertHickman.источник
new
?new
.t=[...s]
и используя t вместо [... s] в тех двух местах, которые у вас есть.Javascript (ES6),
848078 байтТам, где волнистое увеличение равно 0, уменьшение равно 1, а -1 не является волнистым.
Спасибо @Neil за помощь в экономии 2 байтов.
источник
new Set(s=[...i])
экономит 2 байта (Он работает путем итерацииi
, превращения его в массив, итерации массива и превращения его в набор. Свернутый, но вы не беспокоитесь о подобных вещах, когда играете в гольф.)Pyth, 12 байт
Попробуйте онлайн. Тестирование.
источник
Python 2,
535250 байтОжидается ввод в кавычках, например
"watch"
Как неназванная лямбда:
Суммирует знак различия между буквами и делит их на целое число
len-1
. Если бы все были1
(увеличивались), то сумма, которуюlen-1
она отображает1
, аналогична для уменьшения-1
и для смешанного1
,-1
сумма меньше, чемlen-1
она отображает0
.-1 байт для перехода
cmp,s[1:],s[:-1])
наcmp,s[1:],s)+1
источник
1
за"NO"
LMNOP
так что O после N, что означает увеличение, что означает 1len
проблему, но повторяющиеся символы по-прежнему остаются проблемойРубин, 54 байта
Возвращает,
0
если слово не волнистое,1
если назад волнистое, и2
если вперед волнистое.источник
Groovy - 56 байт
Выходы
[1,0]
для увеличения волнистости,[0,1]
для уменьшения волнистости,[0,0]
для односимвольного ввода или[1,1]
для не волнистых.ПРИМЕЧАНИЕ. Предполагается, что вводом является либо строка, либо символ [], и все буквы имеют одинаковый регистр.
источник
PHP, 96 байт
или 98 байт
0 не волнистый 1 повышение -1 уменьшение
источник
-
вместо2*
(-1 для уменьшения: -1 байт).*(!!...)
не нуждается в скобках. (-2)$s*$s>1
вместоabs($s)>1
(-2)PHP, 100 байт
Возвращает:
-1
для волнистых, уменьшается.0
для не волнистых.1
для волнистых, поднимая.источник
!!array_unique($s)[2]
вместоcount(array_unique($l))>2
C 164 байта
Возвращает 0, если не wawy, 1, если wawy и повышение, 2, если уменьшается.
источник
Ракетка 321 байт
Ungolfed:
Тестирование:
Выход:
источник
Java 7,
254240 байтВыводится,
0
если входная строка не волнистая,1
если это восходящая волна и2
если это убывающая волна.Ungolfed & тестовый код:
Попробуй это здесь.
Выход:
источник
int c(char[]s){int t=s[0],f=s.length,a=1,b=1,i;for(i=1;i<f;){if(s[i]-s[i-1]>=0)++a;if(s[i]-s[i++-1]<1)++b;}return a==f?1:b==f?-1:0;}
(132 байта)