Легко введені слова


30

Цей конкурс закінчився.

Переможець - CJam з 22 символами, обігравши відповідь TwiNight одним персонажем. Вітаємо Деннісе !

Почесна згадка йде про Фалько , який абсолютно без розуму пішов від безкоштовного імпорту.

.


Нещодавно я хотів дізнатися, як я можу набрати сучасні смартфони з моєю Nokia 3310, і хоча деякі відповіді були справді хорошими, я все ще не можу йти в ногу! Можливо, я повинен використовувати інший підхід і просто не писати жодних слів, які незручно набирати.

Ми будемо називати фрагмент тексту, який легко вводиться, якщо на одній кнопці на клавіатурі телефону немає двох літер поспіль, які мають стандартний макет:

Клавіатура телефону


Ваше завдання

Ваше завдання полягає в тому, щоб написати програму / функцію, яка приймає рядок sвід stdin / як параметр і повертає значення truthy, якщо sйого легко набрати, а в іншому випадку помилкове значення. Вхід буде складатися лише з малих літер та пробілів і гарантовано буде не порожнім!

Оцінка балів

Це кодогольф, тому виграє найменший кількість символів.

Заяви на імпорт не будуть зараховані ваш остаточний рахунок, так що якщо ви коли - небудь хотіли використовувати std::set_symmetric_difference, liftM4або itertools.combinationsв вашому коді, зараз саме час!

-3 якщо ваш вихідний код легко набрати, якщо припустити, що все, що не є літерою, є на кнопці 0. Зрештою, я можу захотіти надіслати ваш код деяким друзям!

Тестові шафи

Ось кілька тестів, щоб перевірити, чи працює ваш код за призначенням:

"x" -> True
"aardvark" -> False
"ardvark" -> True
"flonk" -> False

"im codegolfing all day long" -> False
"i indulge in minimizing bytecount" -> True

"havent heard from you in a long time" -> False
"your silence was of undue permanence" -> True

"how are  you" -> False
"how are you" -> True

Щасливого гольфу!


Чи є два проміжки поспіль поганими?
Мартін Ендер

@ MartinBüttner так! Мабуть, мабуть, додамо для цього тестовий зразок.
Флонк

9
У мене є нікемофон Nokia, якщо два рази натискаю пробіл, я отримую число 0.
сперектор

1
Питання, пов’язані з цим: розробіть розкладку клавіатури телефону, яка максимально оцінює, залежно від того, наскільки легко набирати слова, які найчастіше зустрічаються.
Justinpc

1
@jpcooper, як два згадані тут ? Я використовував 8pen, і це дуже подобається, за винятком того, що моє скло телефону нагрівається за допомогою нього (від контакту, а не від процесорної активності), а коефіцієнт тертя ускладнює його використання для тривалих входів. Користуватися s-ручкою на Note 3 так набагато простіше :)
Eben

Відповіді:


6

CJam, 34 31 27 22 символів

1l{'h-_9/-D+3/X\:X^*}/

Спробуйте в Інтернеті.

Приклад виконання

$ cjam <(echo "1l{'h-_9/-D+3/X\:X^*}/") <<< 'aardvark'; echo
0
$ cjam <(echo "1l{'h-_9/-D+3/X\:X^*}/") <<< 'ardvark'; echo
66000

Як це працює

1l                         " Push a R := 1 and read a line L from STDIN.                  ";
                           " Initialize X := 1. (implicit)                                ";
  {                  }/    " For each character C of L, do the following:                 ";
    'h-                    "     C -= 'h'                                                 ";
       _9/-D+3/            "     Y := (C - C / 9 + 13) / 3                                ";
               X\  ^*      "     R *= X ^ Y                                               ";
                 :X        "     X := Y                                                   ";
                           " Print R. (implicit)                                          ";

Фон

Ядро коду полягає у застосуванні карти F до кожного символу C вхідного рядка, щоб зображення символів на одному ключі збігалися. Я знайшов відповідну карту, спостерігаючи наступне:

Карта T: C ↦ (C - 'h') + 13 перетворює рядок S: = "abcdefghijklmnopqrstuvxyz" таким чином:

[-59   6  7  8   9 10 11  12 13 14  15 16 17  18 19 20  21 22 23 24  25 26 27  28 29 30 31]

Для ключів 0до 6достатньо буде розділити T (C) на 3 , але ми повинні застосувати якусь корекцію до символів у s , t , v , y і z .

Карта D: C ↦ (C - 'h') / 9 перетворює рядок S у такий масив:

[ -8   0  0  0   0  0  0   0  0  0   0  0  0   0  0  0   0  1  1  1   1  1  1   1  1  1  2]

Це виправляє коефіцієнти s , t , v , y і z , не впливаючи на інші.

Нарешті, карта F: C ↦ (T (C) - D (C)) / 3 перетворює рядок S таким чином:

[-17   2  2  2   3  3  3   4  4  4   5  5  5   6  6  6   7  7  7  7   8  8  8   9  9  9  9]

Все, що впирається, - це якось порівняти послідовних персонажів. Для цього ми XOR F (C) із зображенням попереднього символу - для першого ми XOR F (C) з 1 (значення за замовчуванням змінної X ), яке не має попереднього зображення, і множимо всі результати.

Продукт буде falsy тоді і тільки тоді , коли один з факторів дорівнює нулю, тобто, якщо і тільки якщо два послідовних символу мають один і той же образ на F .


Я думаю, що кількість байтів (не символів) для цього - 54

@Optimizer Я думаю, що код тегу -гольфу wiki говорить bytes

Ця відповідь більше не містить символів, що не належать до ASCII.
Денніс

@professorfish Тег wiki - це лише типовий. Якщо виклик визначає символів, це символи.
Мартін Ендер

27

Пітон 2 - 80, 68, 64, 61, 58, 50, 48, 45, 44 42

Хоча зараз це стає трохи смішно, я продовжую використовувати безкоштовний імпорт бібліотеки, навіть __builtin__бібліотеку:

from numpy import diff as D
from pprint import pprint as P
from __builtin__ import all as A
from __builtin__ import raw_input as I
from __builtin__ import bytearray as B

Тому до довжини коду зараховується лише такий короткий рядок:

P(A(D([(o-o/112-o/59)/3for o in B(I())])))

Подяка Маркузу за ідеї щодо input()! Ці проблеми із безкоштовним імпортом завжди знайомить вас із деякими менш відомими бібліотеками. ;)


Альтернативно, використовуючи лише operatorбібліотеку ( 98, 83 79):

from operator import ne as n
K=[(ord(c)-1-(c>'p')-(c>'w'))/3for c in input()]
print all(map(n,K[1:],K[:-1]))

Я зупинюсь тут. Але ви могли б у подальшому в гольф цю версію , використовуючи sys, pprintі інші бібліотеки ...


Альтернатива без бібліотек (105):

s=input()
n=lambda c:(ord(c)-1-(c>'p')-(c>'w'))/3
print all([n(s[i])!=n(s[i+1])for i in range(len(s)-1)])

І ще раз ми незалежно розміщуємо те саме рішення в Ruby і Python. Схоже, цього разу ви перемагаєте. ;) ... Чи не можна також зберегти 4 байти, призначивши ord(c)змінну (скажімо o), а потім віднявши c/112і c/119замість булей?
Мартін Ендер

@ MartinBüttner: Так, раз у раз Python може перемогти Рубі. На жаль, я не можу легко призначити змінні в lambdaвиразах. З [(o-1-o/112-o/119)/3for o in map(ord,s)]я в кінцевому підсумку з 80 знову байт.
Фалько

А, бачу. Хворі нові покращення, хоча! : D
Мартін Ендер

Дуже вражає. І ви ще можете зберегти 3 байти за from sys import argv as sдопомогою, s[1]замістьinput()
Markuz

імпортування inputз __builtin__, а також насправді ще краще: D збереження ще одного байта.
Маркуз

20

Ruby Regex (найпопулярніші аромати), 106 83 байт

Тому що регулярний вираз

^(?!.*(  |[abc]{2}|[def]{2}|[ghi]{2}|[jkl]{2}|[mno]{2}|[p-s]{2}|[tuv]{2}|[w-z]{2}))

Я щойно вирізав посередника (Ruby) і зробив це чисто-регулярним рішенням. Працює з великою кількістю ароматів і знаходить відповідність лише у тому випадку, якщо рядок не містить двох послідовних символів на одній кнопці.


Не можете ви поставити це {2}за межі чергування, заощадивши 22 байти?
Niet the Dark Absol

1
@NiettheDarkAbsol, на жаль, ні, тому що тоді можна вибрати різні варіанти для двох повторень.
Мартін Ендер

Ааа, звичайно. Я знав, що є причина XD
Niet the Dark Absol,

Kudos для читаного, зрозумілого, гольф-рішення!
GreenAsJade

12

Bash + coreutils, 49

tr a-z $[36#8g7e9m4ddqd6]7778888|grep -Pq '(.)\1'

Повертає вихідний код 1 для TRUE і 0 для FALSE:

$ for s in "x" "aardvark" "ardvark" "flonk" "im codegolfing all day long" "i indulge in minimizing bytecount" "havent heard from you in a long time" "your silence was of undue permanence" "how are  you" "how are you"; do echo "./3310.sh <<< \"$s\" returns $(./3310.sh <<< "$s"; echo $?)"; done
./3310.sh <<< "x" returns 1
./3310.sh <<< "aardvark" returns 0
./3310.sh <<< "ardvark" returns 1
./3310.sh <<< "flonk" returns 0
./3310.sh <<< "im codegolfing all day long" returns 0
./3310.sh <<< "i indulge in minimizing bytecount" returns 1
./3310.sh <<< "havent heard from you in a long time" returns 0
./3310.sh <<< "your silence was of undue permanence" returns 1
./3310.sh <<< "how are  you" returns 0
./3310.sh <<< "how are you" returns 1
$ 

Дуже хороша! Це буде 46 символів у Perl: perl -pE'y/a-z/aaadddgggjjjmmmpppptttwwww/;$_=!/(.)\1/' <(echo "x")він друкує 1 для істинного і нічого для неправдивого.
hmatt1

@chilemagic Вперед та опублікуй відповідь perl :). Не забудьте додати його до оцінки за використання параметра -p командного рядка (згідно з умовами коду-гольфу).
Цифрова травма

Я думав, що зможу знайти спосіб скоротити, aaadddgggjjjmmmpppptttwwwwале я відмовився.
Бен Джексон

2
@BenJackson я придумав спосіб. Насправді ми можемо використовувати рядок будь-яких чітко виражених символів 11122233344455566667778888. На базі 36, що кодує перші 19 цифр цього числа, ми можемо зберегти 1 знак!
Цифрова травма

9

APL (Діалог), 24 23

~∨/2=/⌊¯13⌈.21-.31×⎕AV⍳⍞

∧/2≠/⌊¯13⌈.21-.31×⎕AV⍳⍞

Пояснення

: Знімає рядок з екрана
⎕AV: Це атомний вектор, який в основному є рядком усіх символів, який розпізнає APL, що, звичайно, включає всі малі літери (індекс 18 ~ 43) та пробіл (індекс 5)
: IndexOfфункція. Для багатьох функцій в APL, які беруть один або два скалярні аргументи, ви можете подати масив замість скаляра - APL зробить циклічне використання для вас. Так повертає числовий масив індексів. .21-.31×: Рази 0,31, а потім відніміть 0,21. Це невелика хитрість, яка відображає букву на одному ключі (особливо PQRS) до того ж числа (при округленні до цілих чисел), за винятком Z, які відображаються у власній групі
¯13⌈: maxз -13. Це повертає Z до групи з WXY: Округніть
до цілих чисел
2≠/:. Повертає булевий масив для кожної пари підряд.
∧/: І разом усі записи отриманого масиву.


Я збирався опублікувати щось подібне, але ви побили мене до цього. Чорт Z ключ! Ви все одно можете поголити 1 шар, сказавши ∧/2≠/(всі послідовні пари набираються на різних клавішах) замість ~∨/2=/(жодна поспіль пара не набирається на одній клавіші.) APL FTW !!!
Тобія

Так tkx. Я думав, "я повинен бути в змозі поголити 1 чар тут, чому я не можу це зробити OMGGGG !!!" Але я повинен піти на заняття, тому я просто розміщую те, що маю. І так, DAMN Z KEY. На жаль, я перебуваю на своєму телефоні, тому не можу редагувати його пізніше
TwiNight

І я усвідомлено подумав про Закони Де Моргана і досі не можу це зрозуміти ... Як німий
TwiNight

1
Удачі, повідомте про це своїм друзям. ;)
Thane Brimhall

Це виглядає дуже цікаво. Чи є можливість спробувати цей код, не купуючи перекладача Dyalog APL? Інтернет-перекладач, яким я зазвичай користуюся , здається, не розуміє наріччя ...
Денніс,

7

Perl - 44

Це в основному адаптація Perl з @ DigitalTrauma в відповідь відправив з його дозволу. Поголив 2 символи завдяки @KyleStrand.

y/b-y/aadddgggjjjmmmpppptttzzz/;$_=!/(.)\1/

43 символи + 1 для -pпрапора. y///те саме, що tr///. Він друкує 1для справжнього і нічого неправдивого. Я можу розмістити детальне пояснення за запитом.

Приклад виконання:

perl -pE'y/b-y/aadddgggjjjmmmpppptttzzz/;$_=!/(.)\1/' <(echo "x")

Perl - 81

$s=join"]{2}|[",qw(abc def ghi jkl mno p-s tuv w-z);say/^(?!.*(  |[$s]{2}))/?1:0

+1 для -nпрапора. Він працює, використовуючи joinдля створення регулярного вираження (такого самого, як у Мартіна ), який голить кілька байтів.

Приклад виконання:

perl -nE'$s=join"]{2}|[",qw(abc def ghi jkl mno p-s tuv w-z);say/^(?!.*(  |[$s]{2}))/?1:0' <(echo "your silence was of undue permanence")

Чи не могли б ви збрити два символу з вирішення Perl, дозволяючи aі zзалишатися untransliterated? y/b-y/aadddgggjjjmmmpppptttzzz/;$_=!/(.)\1/Крім того, це не буде обробляти пробіли, чи не так?
Кайл Странд

... о, правильно, два пробіли поспіль - це вже два однакові символи поспіль. Моє ліжко.
Кайл Странд

@KyleStrand приємно зателефонувавши на дозвіл aта zзалишившись тим самим. Оновлена ​​відповідь!
hmatt1

4

JavaScript - 159 156 байт

function g(s){p=n=-1;for(i=0;i!=s.length;i++){p=n;n=s.charCodeAt(i);n-=97;if(n>17)n--;if(n>23)n--;if(p==-1)continue;if(~~(p/3)==~~(n/3))return 0;}return 1;}

Повертається 1 для трибуни та 0 для помилки.

Якби тільки я міг позбутися ключових слів.


Принаймні, ви можете позбутися деяких пробілів і якщо є :) 141:function g(s){p=n=-1;for(i=0;i<s.length;i++){p=n;n=s.charCodeAt(i)-97;n>17&&n--;n>23&&n--;if(~p)continue;if(~(p/3)==~(n/3))return 0}return 1}
Оптимізатор

Ви використовуєте у своєму відповіді багато цікавого, чого я раніше не бачив. Зазвичай я пишу на C ++, але я думав, що я дам JS зняти, оскільки це швидше перевірити в Інтернеті.
Lozzaaa

Я лише сьогодні знайшов це місце і подумав, що сфотографую його. Наступна моя спроба буде вищою: D
Lozzaaa

Ви можете зробити свій код символом коротшим, замінивши !=цикл for для на <.
ProgramFOX

Так, це було в оптимізаціях оптимізатора :) Який етикет використання пропозицій людей у ​​моїй відповіді? Тепер, коли є ще один запис JavaScript, який я можу перемогти, прийнявши ці зміни.
Lozzaaa

4

c, 74 байти

main(c,d,r){for(;~(c=getchar());r*=d!=c/3,d=c/3)c-=--c/'p'*(c-'k')/7;c=r;}

Повертає ненульовий статус виходу для TRUE та 0 для FALSE:

$ for s in "x" "aardvark" "ardvark" "flonk" "im codegolfing all day long" "i indulge in minimizing bytecount" "havent heard from you in a long time" "your silence was of undue permanence" "how are  you" "how are you"; do echo "./3310 <<< \"$s\" returns $(./3310 <<< "$s"; echo $?)"; done
./3310 <<< "x" returns 40
./3310 <<< "aardvark" returns 0
./3310 <<< "ardvark" returns 216
./3310 <<< "flonk" returns 0
./3310 <<< "im codegolfing all day long" returns 0
./3310 <<< "i indulge in minimizing bytecount" returns 72
./3310 <<< "havent heard from you in a long time" returns 0
./3310 <<< "your silence was of undue permanence" returns 232
./3310 <<< "how are  you" returns 0
./3310 <<< "how are you" returns 8
$ 

Ви можете зберегти 3 байта, змінивши whileTo for(;c=~getchar();d=c/3)і інший байт, змінюючи ваш перший ifдо ?:оператору.
Allbeert

@Allbeert - Дякую Дужки навколо c=getchar()потрібні, тому що ~мають більшу перевагу ніж =. Все-таки я візьму два інші байти :)
Digital Trauma

Останній шматочок, чи щось на кшталт exit(d!=c/3);замість if(d==c/3)exit(0);роботи?

@professorfish Це зробить вихід у той момент безумовним, чого я не хочу
Digital Trauma

Ви можете зберегти один символ за допомогою r * = d ^ c / 3
Алхімік

3

Рубін 1,8, 89 83 81 78 байт

p$*[0].chars.map{|c|c=c[0];(c-c/?p-c/?w-1)/3}.each_cons(2).map{|a,b|a!=b}.all?

Ось ще одне подання. На мій сором, це б'є регекс. :(

Це забирає рядок через аргумент командного рядка і друкує булева.

Що стосується алгоритму, я пересуваю літери після pна одну і після zна дві, а потім перевіряю, чи немає зіткнень після цілого поділу на 3.

PS: Це перший раз, коли використання Ruby 1.8 скоротило код (за рахунок коротшого способу отримання кодів символів).


3

Кобра - 80

def f(s)
    for c in s
        for x in 9,if' adgjmptw'[x]>c,break
        t,f=x,t<>x
    print f

3

JavaScript (ES6) 66 74

F=s=>[...s].every(c=>[...' adgjmptw'].map(x=>s+=c<x,w=s,s=0)|s!=w)

У внутрішньому циклі знаходять групу для кожного символу. Концептуально це "зменшити", але "карта" коротше. Зовнішня петля порівнює групу послідовних знаків і виходів з помилковою, якщо вони рівні.

Тест у консолі Firefox / Firebug

;["x","aardvark","ardvark","flonk","im codegolfing all day long",
"i indulge in minimizing bytecount","havent heard from you in a long time",
"your silence was of undue permanence","how are  you","how are you"]
.forEach(x=>console.log(x + ' -> ' + F(x)))

Вихідні дані

x -> true
aardvark -> false
ardvark -> true
flonk -> false
im codegolfing all day long -> false
i indulge in minimizing bytecount -> true
havent heard from you in a long time -> false
your silence was of undue permanence -> true
how are  you -> false
how are you -> true

Можна робити .someзамість кожного. Тому що навіть якщо це не вдасться один раз, відповідь є помилковим.
Оптимізатор

@Optimizer someі everyвзаємозамінні, відповідаючи умовам. Але тут просто поставити someзамість everyне вийде, спробуйте.
edc65

Хм, ти маєш рацію. Мені потрібно спершу зрозуміти вашу логіку.
Оптимізатор

Будь ласка, не заперечуйте, якщо я почну використовувати цей [...s].everyтрюк у своїх гольфах :)
Оптимізатор

2

Perl, 83 байти

$_=<>;chop;map{$_=ord;$_=($_-$_/112-$_/119-1)/3;die 0 if$l==$_;$l=$_}split//;die 1

Здійснення важких зловживань $ _ в Perl.


1
Як ви можете помітити, дозволено передавати параметри командного рядка інтерпретатору, просто потрібно порахувати додаткові параметри. (Голий мінімум , необхідний для доступу до коду, -eв Perl, безкоштовно.) 71 символів Альтернативи з параметрами командного рядка: perl -nlaF -e 'map{$_=ord;$_=($_-$_/112-$_/119-1)/3;die 0 if$l==$_;$l=$_}@F;die 1'.
манатство

@manatwork вам не потрібен -l, але це виглядає добре!
hmatt1

@chilemagic, я просто намагався відтворити еквівалент оригінального коду, тому додав -lяк заміну chop. Але, звичайно, ти маєш рацію.
манатурка

Спасибі @manatwork, я навіть не думав використовувати параметри командного рядка для Perl.
mcreenan

2

Дві завдання складні в Python; виявлення ланцюгів і розподіл груп. Обидві можна допомогти за допомогою numpy, але це не в стандартній бібліотеці.

Python 2 (лише стандартна бібліотека) - функція 59 символів

from itertools import imap as M
from __builtin__ import bytearray as A, all as E
from operator import ne as D, not_ as N
from re import S, sub as X, search as F

# 68
#def f(s):
# g=[(n-n/115-n/61)/3for n in A(s)]
# return E(M(D,g,g[1:]))

# 67 with regex via regex
#f=lambda s:N(F(X('(\S)(.)',r'|[\1-\2]{2}','  acdfgijlmopstvwz'),s))

# 59 slightly optimized ordinal classifier and regex sequence detector
f=lambda s:N(F(r'(.)\1',A((n-n/23-n/30)/3for n in A(s)),S))

# 69 using itertools.groupby
#from itertools import groupby as G
#from __builtin__ import sum as S, len as L
#f=lambda s:N(S(L(A(g))-1for _,g in G((n-n/115-n/61)/3for n in A(s))))

Python 2 (лише стандартна бібліотека) - 53 значень stdin для виходу із значення

Тут я зловживаю тим фактом, що issubclass(bool,int), змінюючи так, all()що any()отримує мені дійсне значення виходу, гоління not()від поверненого значення. Видалення накладних функцій призвело до того, що версії регулярних виразів відстають за розмірами.

from itertools import groupby as G, imap as M
from __builtin__ import bytearray as A, any as E
from __builtin__ import raw_input as I
from sys import exit as Q
from operator import eq as S

g=[(n-n/23-n/30)/3for n in A(I())]
Q(E(M(S,g,g[1:])))

2

J - 42 char

Функція приймає рядок праворуч.

*/@(2~:/\(I.4 3 4 1,~5#3){~(u:97+i.26)&i.)

Спочатку ми відображаємо алфавіт ( u:97+i.26) на числа від 0 до 25, всі інші символи (включаючи пробіли), що йдуть до 26 ( i.). Потім ми мапируем ( {~) перші три елементи відображаємо на першу клавішу, наступні три - на наступну клавішу і так далі через клавіші телефонної панелі, переконуючись, що пробіл / інші розділові знаки відображаються в окрему клавішу в кінці . ( 4 3 4 1,~5#3дорівнює 3 3 3 3 3 4 3 4 1і I.перетворює його в масив з 27 пунктів, де перші три є ключем 1 тощо). Потім ми перевіряємо наявність парної нерівності ( 2~:/\) та всі результати разом ( */).

   */@(2~:/\(I.4 3 4 1,~5#3){~(u:97+i.26)&i.) 'i indulge in minimizing bytecount'
1
   f =: */@(2~:/\(I.4 3 4 1,~5#3){~(u:97+i.26)&i.)
   f 'im codegolfing all day long'
0
   f '*/@(2~:/\(I.4 3 4 1,~5#3){~(u:97+i.26)&i.)'  NB. no -3 bonus :(
0

2

Ракетка, 119

(define(f t)(for*/and([s(map ~a'(abc def ghi jkl mno pqrs tuv wxyz))][i s][j s])(not(regexp-match(format"~a~a"i j)t))))

Негольдований (комбінаторне повторне вирівнювання):

(define(f t)
  (for*/and([s (map ~a '(abc def ghi jkl mno pqrs tuv wxyz))]
            [i s]
            [j s])
    (not (regexp-match (format "~a~a" i j) t))))

1

JavaScript - 152

Не переможець, але я пострілив. Удари @Lozzaaa на 4 байти на час публікації :)

function m(a){c="abc-def-ghi-jkl-mno-pqrstuv-wxyz";j=a.split("");for(z in j)if(j[z]=Math.floor(c.indexOf(j[z])/4),0!=z&&j[z-1]==j[z])return 0;return 1};

Проходить усі тести.
Скористається відсутністю JS введення тексту для створення багатотипового масиву, і він використовує перевагу indexOf return -1 для підтримки простору.

Використання:

m("string here")

Передбачає лише алфавітні літери та пробіли. Повертає 1 для істинного, 0 для помилкового.

Можливо, якби я знав ES6, я міг би спробувати другий виклик ...


"якби ..." - Ви бачили мою відповідь? : P
Оптимізатор

Так. Я не знаю ES6 (поки), на жаль. Однак це було цікаво зробити.
DankMemes

Так, ваше рішення з використанням цікавого підходу.
Оптимізатор

1

ES6, JavaScript 89 70 символів

Я знаю, що це не переможець, тому що, приходячи до зручних операцій, таких як отримання ASCII значення символу, JS надсилає багато розриву ( .charCodeAt()).

N=s=>[...s].every(c=>l-(l=(c.charCodeAt()-(c>"r")-(c>"y")-1)/3|0),l=1)

Запустіть його у веб-консолі останнього Firefox.

Використання:

N("testing if this works")

Функція повертає або істинну, або хибну.

EDIT : Golfed багато використовуючи [...x].everyтрюк дізнався від @ edc65 (Спасибі!)

Я спробую більше пограти в гольф :)


0

GML (Мова виробника ігор), 149

s=argument0p=n=-1for(i=0;i<string_length(s);i++){p=n;n=string_char_at(s,i)-97;x=n>17&&n--;x=n>23&&n--‌​;if(!p)x=1if(!(p/3)=!(n/3))x=0}show_message(x)

0

Пітон 3 - 152 символів

Не найкоротший я міг поїхати, але це зроблять зараз

k=['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz',' ']
x=input()
l=2>1
for i in range(len(x)-1):
 for j in k:
  if x[i+1] in j and x[i] in j:l=1>2
print(l)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.