Kolayca Yazılabilir Kelimeler


30

Bu yarışma bitti.

Kazanan 22 karakterle CJam oldu ve TwiNight'ın cevabını bir karakter attı . Tebrikler Dennis !

Onurlu bir söz , ücretsiz ithalatla tamamen çıldırmış olan Falko'ya gider .

.


Bir süre önce Nokia 3310'umla modern akıllı telefonları nasıl anlayabileceğimi bilmek istedim ve bazı cevaplar gerçekten iyi olsa da, hala devam edemiyorum! Belki de farklı bir yaklaşım benimsem ve yazması zor olan kelimeleri yazmamalıyım.

Standart düzende verilen, telefon klavyesinde aynı tuş üzerinde arka arkaya iki harf yoksa, yazılabilir bir metni kolayca arayacağız:

Telefon Klavyesi


Senin görevin

Göreviniz s, stdin / parametresinden bir dizgiyi kabul eden ve skolayca yazılabilir ve aksi takdirde sahte bir değer varsa , bir gerçeği döndüren bir program / işlev yazmaktır. Girdi yalnızca küçük harflerden ve boşluklardan oluşacak ve boş olmadığı garantilidir!

puanlama

Bu codegolf, yani en düşük karakter sayısı kazanıyor.

İthalat ifadeleri Hiç kullanım istemişimdir eğer öyleyse, final puanınızı sayılmayacaktır std::set_symmetric_difference, liftM4veya itertools.combinationskodunuzu şimdi tam zamanı!

-3 kaynak kodu değil bir mektup Sonuçta düğmeye 0. üzerinde olan her şeyi varsayarak kolayca tipleme ise, ben iletiye bazı arkadaşlara kodunuzu isteyebilirsiniz!

testcases

Kodunuzun istendiği gibi çalışıp çalışmadığını kontrol etmek için birkaç test çantası verilmiştir:

"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

Mutlu golf!


İki ardışık boşluk kötü mü?
Martin Ender

@ MartinBüttner evet! Muhtemelen bunun için bir test çantası eklemelisiniz.
Flonk

9
Bir nokia dumbphone'um var, eğer iki kez boşluk
basarsam,

1
İlgili soru: en sık meydana gelen kelimelerin ne kadar kolay yazılabilir olduğuna bağlı olarak bazı skorları maksimize eden bir telefon klavye düzeni tasarlayın.
justinpc

1
Burada belirtilen iki gibi jpcooper ? 8pen'i kullandım ve gerçekten sevdim, ancak telefonumun camı ısındığında (kontağından, CPU aktivitesinden değil) ve sürtünme katsayısının uzun girdiler için kullanımını zorlaştırması dışında. Not 3'teki s-pen'i kullanmak çok daha kolay :)
Eben

Yanıtlar:


6

CJam, 34 31 27 22 karakter

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

Çevrimiçi deneyin.

Örnek çalışma

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

Nasıl çalışır

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)                                          ";

Arka fon

Kodun çekirdeği , giriş dizgisinin her bir C karakterine bir F haritasının uygulanmasından oluşur, böylece aynı tuştaki sembollerin görüntüleri eşleşir. Aşağıdakileri gözlemleyerek uygun haritayı buldum:

T: C ↦ (C - 'h') + 13 haritası S: = "abcdefghijklmnopqrstuvxyz" dizesini aşağıdaki gibi dönüştürür:

[-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]

Şifreler için 0için 6, bölmek yeterli olacaktır T (° C) ile 3 ama karakterlere düzeltme çeşit uygulamak zorunda s , t , v , y ve z .

D: C ↦ (C - 'h') / 9 haritası , S dizesini aşağıdaki diziye dönüştürür:

[ -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]

Bu, s , t , v , y ve z bölümlerini diğerlerini etkilemeden düzeltir .

Son olarak, F: C ↦ (T (C) - D (C)) / 3 haritası S dizesini aşağıdaki gibi dönüştürür :

[-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]

Tek kalan ardışık karakterleri bir şekilde karşılaştırmak. Bu amaçla, önceki karakterin görüntüsüyle XOR F (C) - ilk olarak, XOR F (C) ile 1 (varsayılan X değişkeninin değeri ), ön üretmeyen - ve tüm sonuçları çarpıyoruz.

Ürün, yalnızca ve eğer faktörlerden biri sıfırsa, yani, sadece iki ardışık karakter F ile aynı görüntüye sahipse, sahte olacaktır .


Sanırım bunun için bayt (karakter değil) sayısı 54

@Optimizer Wiki kod-golf etiketi bayt diyor

Bu cevap artık ASCII olmayan karakterler içermiyor.
Dennis,

@professorfish wiki etiketi yalnızca varsayılandır. Eğer zorluk karakterleri belirtiyorsa, karakterleri belirtir.
Martin Ender

27

Python 2 - 80, 68, 64, 61, 58, 50, 48, 45, 44 42

Şimdi biraz saçma olsa da, __builtin__kütüphane bile dahil olmak üzere ücretsiz kütüphane ithalatı kullanmaya devam edeceğim :

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

Bu nedenle, yalnızca aşağıdaki kısa satır kod uzunluğuna göre sayılır:

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

Fikirler için Markuz'a teşekkür ederiz input()! Bu ücretsiz ithalat zorlukları sizi daima daha az bilinen kütüphanelere getirir. ;)


Sadece operatorkütüphaneyi kullanarak alternatif ( 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]))

Burada duracağım. Ama golf Bu kullanarak sürümünü ilerletmek olabilir sys, pprintve diğer kütüphaneleri ...


Kütüphanesiz alternatif (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)])

Bir kez daha, Ruby ve Python'da aynı çözümü bağımsız olarak gönderiyoruz. Görünüşe göre bu sefer kazanıyorsun. ;) ... Can değil de 4 bayt tasarruf, atayarak ord(c)bir değişkene (diyelim için oçıkarılarak sonra) ve c/112ve c/119yerine boole?
Martin Ender

@ MartinBüttner: Evet, arada sırada Python Ruby'yi yenebilir. Ne yazık ki, bu lambdaifadeleri kolayca değişkenlere atayamıyorum . Yine [(o-1-o/112-o/119)/3for o in map(ord,s)]80 byte ile bitirdim.
Falko

Ah, anlıyorum. Yine de hasta yeni gelişme! : D
Martin Ender

Çok etkileyici. Ve hala yerine 3 bayttan tasarruf edebilirsiniz from sys import argv as s, s[1]bunun yerineinput()
Markuz

ithal inputgelen __builtin__yanı aslında daha iyidir: D henüz başka Byte tasarrufu.
Markuz

20

Ruby Regex (en popüler lezzetler), 106 83 bayt

Çünkü regex

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

Aracıyı (Ruby) kestim ve bunu saf bir regex çözümü yaptım. Çok çeşitli tatlarda çalışır ve yalnızca, dize aynı düğmede iki ardışık karakter içermiyorsa bir eşleşme bulur.


Bunu {2}22 bayt tasarruf ederek değişimin dışına koyamaz mısın?
Karanlık Mutlak Niet 11:14

1
@NiettheDarkAbsol ne yazık ki hayır, çünkü o zaman iki tekrar için farklı alternatifler seçebilir.
Martin Ender

Aah, elbette. Bir neden olduğunu biliyordum XD
Niet the Dark Absol

Okunabilir, anlaşılabilir, golflü bir çözüm için Kudos!
GreenAsJade,

12

Bash + coreutils, 49

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

TRUE için 1, FALSE için 0 çıkış kodunu döndürür:

$ 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
$ 

Çok hoş! Perl'de bu 46 karakter olacaktır: perl -pE'y/a-z/aaadddgggjjjmmmpppptttwwww/;$_=!/(.)\1/' <(echo "x")1 için doğruyu, yanlış için hiçbir şeyi yazdırmaz.
hmatt1

@chilemagic Devam edin ve perl cevabını gönderin :). -P komut satırı parametresini kullanmak için skora bir tane eklemeyi unutmayın (kod-golf kuralları uyarınca).
Dijital Travma

Kısaltmanın bir yolunu bulabileceğimi düşündüm aaadddgggjjjmmmpppptttwwwwama pes ettim.
Ben Jackson

2
@BenJackson Bir yolunu buldum. Aslında, farklı karakterlerden oluşan bir dize kullanabiliriz - 11122233344455566667778888yapacağız. Bu sayının ilk 19 hanesini kodlayan baz 36 ile 1 karakter tasarruf edebiliriz!
Dijital Travma

9

APL (Dyalog), 24 23

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

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

açıklama

: Ekrandan dizge girişi alır
⎕AV: Bu, temelde tüm küçük harfleri (dizin 18 ~ 43) ve boşluk (dizin 5)
: IndexOfişlevini içeren tüm APL karakterlerinin bir dizesi olan atomik vektördür . APL'deki bir veya iki skaler argüman alan birçok işlev için, onu skalar yerine bir dizi olarak besleyebilirsiniz - APL sizin için döngü yapacaktır. Böylece sayısal bir indeks dizisi döndürür. .21-.31×: Kez 0.31 ve daha sonra 0.21'den çıkar. Bu, kendi grubuna eşlenen Z hariç, aynı tuştaki (özellikle PQRS) aynı sayıdaki harfleri (tam sayılara yuvarlandığında) aynı numaraya eşleyen küçük bir numaradır
¯13⌈: max-13 ile. Bu WXY ile gruba Z geri getirir
: tamsayılar için Yuvarlak aşağı
2≠/: Pairwise-. Her ardışık çift için bir boolean dizisi döndürür.
∧/: VE birlikte ortaya çıkan dizinin tüm girişlerini birlikte.


Böyle bir şey gönderecektim ama sen beni yendin. Kahretsin, Z tuşu! Yine de ∧/2≠/(tüm ardışık çiftler farklı tuşlara yazılmıştır) diyerek ( ~∨/2=/aynı tuşa ardışık bir çift yazılmaz.) APL FTW !!!
Tobia

Evet tkx. "1 char'ı tıraş edebilmeliyim, neden OMGGGG !!!? Ama sınıfa gitmeliyim ki elimde olanı yayınlarım. Ve evet, DAMN Z KEY. Maalesef telefonumdayım, daha
sonraya

Ve De Morgan Kanunları hakkında bilinçli bir düşünce yaptım ve hala
çözemiyorum

1
Arkadaşlarına mesaj atıp iyi şanslar. ;)
Thane Brimhall 10:14

Bu çok ilginç görünüyor. Bir Dyalog APL tercümanı almadan bu kodu denemenin bir yolu var mı? Genelde kullandığım çevrimiçi tercüman lehçeyi anlamıyor gibi görünüyor ...
Dennis

7

Perl - 44

Bu temelde @ DigitalTrauma'nın izniyle verdiği cevabın Perl uyarlamasıdır . @KyleStrand sayesinde 2 karakter tıraş edildi.

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

-pBayrak için 43 karakter + 1 . y///aynıdır tr///. 1Doğru ve yanlış olmayan hiçbir şey için yazdırır . İstenirse ayrıntılı bir açıklama gönderebilirim.

Örnek çalışma:

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

-nBayrak için +1 . Bir kaç baytın tıraş ettiği regex'i ( Martin ilejoin aynı) oluşturmak için kullanılır .

Örnek çalışma:

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 çözümünden iki karakterin traşlanmasına izin vererek ave değiştirilmemiş olarak tıraş olamaz mısın z? y/b-y/aadddgggjjjmmmpppptttzzz/;$_=!/(.)\1/Ayrıca, bu boşlukları işlemez, değil mi?
Kyle Strand

... oh, sağ, bir satırdaki iki boşluk zaten bir satırdaki iki özdeş karakter. Benim hatam.
Kyle Strand

@KyleStrand izin vererek güzel çağrı ave zaynı kalır. Cevap güncellendi!
hmatt1

4

JavaScript - 159 156 bayt

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;}

Gerçeklik için 1, yanlışlık için 0 döndürür.

Keşke anahtar kelimelerden kurtulabilseydim.


En azından bazı boşluklardan kurtulabilirsin ve eğer :) :):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}
Doktor

Cevabınızda daha önce görmediğim birçok ilginç şey kullanıyorsunuz. Genelde C ++ 'da yazıyorum ama JS'i çevrimiçi test etmek için daha hızlı olduğu için bir şans vereceğimi düşündüm.
Lozzaaa

Bugün sadece burayı buldum ve bir şans vereceğimi düşündüm. Bir sonraki denemem üstün olacak: D
Lozzaaa 10:14

!=For döngüsünü a ile değiştirerek kodunuzu daha kısa bir karakter yapabilirsiniz <.
ProgramFOX

Evet, bu Optimizer’in optimizasyonundaydı :) cevabımda insanların önerilerini kullanma konusundaki görgü kuralları nedir? Şimdi bu değişiklikleri kabul ederek yenebileceğim bir JavaScript girişi daha var.
Lozzaaa

4

c, 74 bayt

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

TRUE ve FALSE için 0 olmayan bir çıkış durumu döndürür:

$ 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 senin değiştirerek bayt kaydedebilirsiniz whileTo for(;c=~getchar();d=c/3)ilk değiştirerek ve başka byte ifa ?:operatörü.
Allbeert

@ Allbeert - Teşekkürler. Bununla birlikte parantez c=getchar()gerekli, çünkü ~öncekinden daha yüksek önceliğe sahip =. Yine de, diğer iki byte'i alacağım :)
Digital Trauma

Son parça için, iş exit(d!=c/3);yerine bir şey yapar if(d==c/3)exit(0);mı?

@professorfish Bu noktada çıkış istemem koşulsuz, ki istemiyorum
Digital Trauma 19

Bir karakteri r * = d ^ c / 3
Alchymist

3

Ruby 1.8, 89 83 81 78 bayt

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

İşte başka bir sunum. Utancım için, regex atıyor. :(

Bu, dizeyi komut satırı argümanı ile alır ve bir boole basar.

Algoritmaya gelince, harfleri pbirer birer ve sonra zikişer birer birer ötelemeye alıyorum ve sonra tamsayı bölme işleminden sonra 3'lük bir çarpışma olmadığını kontrol ediyorum.

Not: İlk defa Ruby 1.8 kullanmanın kodu kısalttığı (karakter kodlarını almanın en kısa yolu nedeniyle).


3

Kobra - 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)

İç döngü, her karakter için grubu bulur. Kavramsal olarak 'azaltmak', ancak 'harita' daha kısadır. Dış döngü ardışık karakter grubunu karşılaştırır ve eşit olması durumunda false ile çıkar.

Firefox / Firebug konsolunda test edin

;["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)))

Çıktı

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

Her .someyerine yapabilirsin . Çünkü bir kez başarısız olsa bile, cevap yanlıştır.
Doktor

@ Optimize Edici someve şartlara uygun every, değiştirilebilir. Ama burada basitçe işe yaramazsa someyerine koy every, dene.
edc65

Hmm haklısın. İlk önce mantığını anlamalıyım.
Doktor

Bu [...s].everynumarayı golf sahalarımda kullanmaya başlarsam lütfen sakıncası yok :)
Doktor 10

2

Perl, 83 bayt

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

Perl’de _ $ 'lık şiddetli kötüye kullanma.


1
Görebildiğiniz gibi, komut satırı parametrelerini tercümana geçmesine izin verilir, sadece ekstra parametreleri saymanız gerekir. (Koda erişmek için gereken minimum -ePerl, serbesttir.) Komut satırı parametreleri ile 71 karakter alternatif: perl -nlaF -e 'map{$_=ord;$_=($_-$_/112-$_/119-1)/3;die 0 if$l==$_;$l=$_}@F;die 1'.
Manatwork

@ yönetim işi gerek yok -l, ama iyi görünüyor!
hmatt1

@ chilemagic, sadece orijinal kodun eşdeğerini yeniden oluşturmaya çalıştım, bu yüzden -lyerine geçtim chop. Ama elbette haklısın.
Manat çalışması

Thanks @manatwork, Perl için komut satırı seçeneklerini kullanmayı düşünmedim bile.
mcreenan

2

Python'da iki görev yanıltıcıdır; zincirleri tespit etmek ve grupları atamak. Her ikisi de numpy kullanılarak desteklenebilir, ancak standart kütüphanede değildir.

Python 2 (sadece standart kütüphane) - 59 karakter işlevi

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 (yalnızca standart kütüphane) - değerden çıkmak için 53 karakter

İşte gerçeği kötüye issubclass(bool,int)yüzden değişen all()için any()kapalı, bana tıraş geçerli bir çıkış değerini alır not()dönüş değerinden. İşlev yükünün kaldırılması, regex sürümlerinin boyutunun gerisinde kalmasına neden oldu.

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 karakter

İşlev sağa dize alarak.

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

İlk önce alfabeyi ( u:97+i.26) 0 ile 25 arasındaki sayılarla eşleştiririz, diğer tüm karakterler (boşluklar dahil) 26 ( i.) olur. Daha sonra {~, ilk üç elementi ilk tuşla, sonraki üçle sonraki tuşa eşler ve böylece telefon pedinin tuşları ile eşleriz, böylece boşluk / diğer noktalama işaretlerini sonunda ayrı bir tuşla eşleştirirsiniz. . ( 4 3 4 1,~5#3eşittir 3 3 3 3 3 4 3 4 1ve I.ilk üçün 1, vb. olduğu 27 maddelik bir diziye dönüşür.) Ardından çift olarak eşitsizliği ( 2~:/\) ve AND sonuçlarını birlikte ( */) kontrol ederiz .

   */@(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

Raket, 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))))

Ungolfed (kombinasyonlu regexing):

(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

Kazanan değil ama bir şans verdim. Beats @Lozzaaa 4 bytes tarafından ilan süresi olarak :)

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};

Tüm testleri geçiyor.
Çok tipli bir dizi yapmak için JS'nin yazma eksikliğinden ve alan desteği için -1 döndüren indexOf'un avantajlarından yararlanır.

Kullanımı:

m("string here")

Yalnızca küçük harfli alfabetik karakterler ve boşluklar varsayar. True için 1, false için 0 döndürür.

Belki ES6'yı bilseydim ikinci mücadeleyi deneyebilirdim ...


"eğer sadece ..." - Cevabımı gördün mü? : P
Doktor

Evet yaptım. Ne yazık ki ES6'yı tanımıyorum. Ancak, bunu yapmak ilginçti.
DankMemes

Evet, çözümünüzü ilginç bir yaklaşım kullanarak.
Doktor

1

ES6, JavaScript 89 70 karakter

Kazanan olmadığını biliyorum çünkü ASCII karakterinin değerini almak gibi kullanışlı işlemlere gelince, JS çok fazla şişkinlik veriyor ( .charCodeAt()).

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

En son Firefox’un Web Konsolunda çalıştırın.

Kullanımı:

N("testing if this works")

İşlev doğru veya yanlış olarak döner.

EDIT : [...x].every@ edc65 'den öğrenilen hileyi kullanarak çok golf oynadım (Teşekkürler!)

Daha çok golf oynamaya çalışacağım :)


0

GML (Oyun Yapıcı Dil), 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

Python 3 - 152 karakter

Gidebileceğim en kısa süre değil, ama şimdilik

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.