簡単に入力可能な単語


30

この競争は終わりました。

勝者は22文字のCJamで、TwiNightの回答を1文字で破ります。おめでとうデニス

尊敬すべき言及はFalkoにありFalkoは無料の輸入に夢中になりました。


少し前、ノキア3310を使って現代のスマートフォンを打ち抜く方法を知りたかったのですが、いくつかの答えは本当に良かったのですが、それでも我慢できませんでした!たぶん、私は別のアプローチを取り、入力するのが面倒な言葉を書かないでください。

標準レイアウトを前提として、電話キーボードの同じボタンに2つの連続した文字がない場合、簡単に入力可能なテキストを呼び出します。

電話キーボード


あなたのタスク

あなたのタスクはs、stdin /から文字列をパラメーターとして受け取り、s簡単に入力できる場合は真理値を返し、そうでない場合は偽の値を返すプログラム/関数を作成することです。入力は小文字とスペースのみで構成され、空でないことが保証されます!

得点

これはcodegolfなので、文字数が最も少なくなります。

import文はあなたが使用したいと思っていたそうすれば、あなたの最終的なスコアにカウントされませんstd::set_symmetric_differenceliftM4またはitertools.combinationsあなたのコードでは、今の時間です!

-3は、文字0以外のすべてがボタン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

ハッピーゴルフ!


2つの連続したスペースは悪いですか?
マーティンエンダー14

@MartinBüttnerはい!おそらくそのためのテストケースを追加する必要があります。
フランク14

9
私は二回スペースを押すと、私は番号0を取得、ノキアdumbphoneを持っている
overactor

1
関連する質問:最も頻繁に出現する単語をどれだけ簡単に入力できるかに基づいて、スコアを最大化する電話キーボードレイアウトを考案します。
justinpc 14

1
ここで言及した2つのような@jpcooper ?私は8penを使用しましたが、電話のガラスは(CPUの動作からではなく、接触から)熱くなり、摩擦係数により長い入力に使用するのが難しくなります。注3でSペンを使用する方がはるかに簡単です:)
Eben 14

回答:


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

バックグラウンド

コードの中核は、同じキー上のシンボルの画像が一致するように、入力文字列の各文字CにマップFを適用することです。以下を観察して、適切なマップを見つけました。

マップ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]

キーのため06、それが分裂するのに十分であろうT(C)をすることによって3、我々はで文字に補正のいくつかの並べ替えを適用する必要がSTVY及び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]

これは、他に影響を与えることなく、stvy、および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)を行います–最初に、1(プリイメージを持たない変数Xのデフォルト値とXOR F(C)を行い、すべての結果を乗算します。

因子の1つがゼロの場合、つまり2つの連続する文字がFで同じ画像を持っている場合にのみ、積は偽になります。


これのバイト(文字ではない)カウントは54

私が思う@Optimizer コードゴルフタグのwikiはバイト語る

この回答には、非ASCII文字が含まれなくなりました。
デニス14

@professorfishタグwikiは単なるデフォルトです。チャレンジで文字が指定されている場合、それは文字です。
マーティンエンダー14

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())])))

についてのアイデアをMarkuzに感謝し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]))

ここでやめます。しかし、あなたはゴルフに使用して、このバージョンでさらに可能性がありsyspprintそして他のライブラリを...


ライブラリなしの代替(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代わりに、ブールの?
マーティンエンダー14

@MartinBüttner:ええ、時々PythonがRubyを打ち負かすことができます。残念ながら、lambda式の中で変数を簡単に割り当てることはできません。[(o-1-o/112-o/119)/3for o in map(ord,s)]私は再び80バイトで終わります。
ファルコ14

ああ、なるほど。しかし、病気の新しい改善!:D
マーティンエンダー14

非常に印象的。そしてfrom sys import argv as ss[1]代わりにinput()
。Markuz14年

inputからのインポート__builtin__も実際にはさらに優れています:Dさらに1バイトを節約します。
マルクス14

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つの連続した文字が含まれていない場合にのみ一致を検出します。


{2}22バイト節約して、それを交互に外に出すことはできませんか?
ニートザダークアブソル14

1
@NiettheDarkAbsolは残念ながらそうではありません。2回の繰り返しに対して異なる選択肢を選択できるためです。
マーティンエンダー14

ああ、もちろん。XDの理由があることはわかっていました
ニートザダークアブソル14

読みやすく、理解しやすいゴルフソリューションの称賛!
GreenAsJade

12

Bash + coreutils、49

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

TRUEの場合は1、FALSEの場合は0の終了コードを返します。

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

非常に素晴らしい!これはPerlでは46文字perl -pE'y/a-z/aaadddgggjjjmmmpppptttwwww/;$_=!/(.)\1/' <(echo "x")です。trueの場合は1、falseの場合は何も出力されません。
hmatt1 14

@chilemagicさあ、perlの答えを投稿してください:)。-gコマンドラインパラメーターを使用するためにスコアに1を追加することを忘れないでください(コードゴルフ規則に従って)。
デジタル外傷14

短縮する方法を見つけることができると思いaaadddgggjjjmmmpppptttwwwwましたが、あきらめました。
ベンジャクソン14

2
@BenJackson方法を見つけました。実際には、任意の異なる文字列を使用できます- 11122233344455566667778888実行します。この数値の最初の19桁をエンコードするベース36により、1文字節約できます!
デジタル外傷14

9

APL(Dyalog)、24 23

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

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

説明

:画面から文字列の入力を受け取り
⎕AV:これはbasciallyコース(インデックス18〜43)と空間(インデックス5)すべての小文字文字を含むのAPLが認識すべての文字の文字列である原子ベクトルである
IndexOf機能。1つまたは2つのスカラー引数を取るAPLの多くの関数では、スカラーの代わりに配列を渡すことができます-APLはループを行います。したがって、インデックスの数値配列を返します。 .21-.31×:0.31倍し、0.21から減算します。これは、同じキー(特にPQRS)の文字を同じ番号(整数に切り捨てた場合)にマッピングする小さなトリックです。Zは、独自のグループにマッピングされます
¯13⌈max-13 これにより、ZがWXYでグループに戻り
ます
2≠/。整数に切り捨てます:ペアワイズ。連続するペアごとにブール配列を返します。
∧/:そして、結果の配列のすべてのエントリをまとめます。


私はこのようなものを投稿するつもりでしたが、あなたは私にそれを打ちました。くそーZキー!あなたはまだ言って1つの文字をオフに剃ることができます∧/2≠/(すべての連続したペアが異なるキーで入力されている)の代わりに、~∨/2=/(何の連続したペアは同じキーで入力されていない。)APL FTW !!!
トビア14

はい、tkx。「OMGGGGできない理由をここで1文字減らすことができるはずだ」と考えていました。しかし、クラスに行くようになったので、自分の持っているものを投稿するだけです。そして、はい、ダムZキー。私は後になるまでそれを編集することはできませんので、残念ながら、私は自分の携帯電話の午前
TwiNight

そして、私はド・モルガンの法則を意識考えを作り、まだそれを把握することはできません...どのようにダム
TwiNight

1
お友達にこれをテキストメッセージで送信してください。;)
Thane Brimhall 14

これは非常に興味深いようです。Dyalog APLインタープリターを購入せずにこのコードを試す方法はありますか?私は通常使用オンラインインタプリタは ...方言を理解していないようだ
デニス・

7

Perl-44

これは基本的に、@ DigitalTraumaの回答を Perlに適応させたもので、彼の許可を得て投稿しています。@KyleStrandのおかげで2文字が削られました。

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

-pフラグの場合は43文字+ 1 。y///はと同じtr///です。1trueの場合は出力し、falseの場合は出力しません。リクエストがあれば詳細な説明を投稿できます。

実行例:

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

-nフラグに+1 。数バイトを削るjoin正規表現(Martinのものと同じもの)を作成するために使用することで機能します。

実行例:

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

音訳せずにaそのzままにしておくことで、Perlソリューションの2文字を削除できませんでしたか?y/b-y/aadddgggjjjmmmpppptttzzz/;$_=!/(.)\1/また、これはスペースを処理しませんか?
カイルストランド14

...ああ、そうです、行の2つのスペースは、すでに2つの同じ文字です。私の悪い。
カイルストランド14

@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を返します。

キーワードを取り除くことができた場合のみ。


少なくとも、いくつかの空白とifを取り除くことができます:) 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}
オプティマイザー14

あなたは私が前に見たことがないあなたの答えに多くの興味深いものを使用します。私は通常C ++で記述しますが、オンラインでテストする方が速いのでJSを試してみると思いました。
Lozzaaa 14

今日この場所を見つけただけで、試してみたいと思いました。私の次の試みは優れています:D
Lozzaaa 14

!=forループをで置き換えることで、コードを文字より短くすることができます<
ProgramFOX 14

はい、それはオプティマイザーの最適化にありました:)私の答えで人々の提案を使用するエチケットは何ですか?これで、これらの変更を受け入れることで勝てる別の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の場合はゼロ以外の終了ステータスを、FALSEの場合は0を返します。

$ 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バイト、最初のを演算子に変更して別のバイトwhileを保存できます。for(;c=~getchar();d=c/3)if?:
Allbeert

@Allbeert-ありがとう。c=getchar()ただし、括弧~よりも優先順位が高いため、必要です=。それでも、私は他の2バイトを取ります:)
デジタル外傷14

最後exit(d!=c/3);に、if(d==c/3)exit(0);仕事の代わりに何かがありますか?

私はしたくないこれは、無条件のその時点で終了になるだろう@professorfish
デジタルトラウマ

r * = d ^ c / 3で1文字を保存できます
アルキミスト14

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?

ここに別の投稿があります。残念なことに、それは正規表現に勝っています。:(

これは、コマンドライン引数を介して文字列を受け取り、ブール値を出力します。

アルゴリズムに関しては、文字をp1つ後zと2つ後にシフトダウンし、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)

内側のループは、各文字のグループを見つけます。概念的には「削減」ですが、「マップ」は短くなります。外側のループは、連続する文字のグループを比較し、等しい場合はfalseで終了します。

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 someevery互換性があり、条件をいじっています。しかし、ここでは単純に置くsome代わりにevery動作しません、試してみてください。
edc65 14

うーん、あなたは正しい。最初にあなたの論理を理解する必要があります。
オプティマイザー14

[...s].everyゴルフでこのトリックを使い始めても気にしないでください:)
オプティマイザー

2

Perl、83バイト

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

Perlで$ _を酷使する。


1
ご覧のとおり、コマンドラインパラメータをインタプリタに渡すことができます。追加のパラメータをカウントするだけです。(-ePerlでは、コードにアクセスするために最低限必要なものは無料です。)コマンドラインパラメーターを使用した71文字の代替:perl -nlaF -e 'map{$_=ord;$_=($_-$_/112-$_/119-1)/3;die 0 if$l==$_;$l=$_}@F;die 1'
マナトワーク14

@manatworkは必要ありませんが、よさそう-lです!
hmatt1 14

@chilemagic、元のコードと同等のコードを再現しようとしたため-l、の代わりに追加しましたchop。しかし、もちろん、あなたは正しいです。
マナトワーク14

@manatworkのおかげで、Perlのコマンドラインオプションを利用することすら考えていませんでした。
mcreenan 14

2

Pythonでは、2つのタスクがトリッキーです。チェーンを検出し、グループを割り当てます。両方とも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文字の標準入力

ここでは、という事実を悪用している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文字

右側の文字列をとる関数。

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

最初に、アルファベット(u:97+i.26)を0から25までの数字にマッピングします。他のすべての文字(スペースを含む)は26(i.)になります。次に{~、最初の3つの要素を最初のキーに、次の3つを次のキーに、というように電話パッドのキーを使用してマップします(最後にスペース/句読点を別のキーにマップするようにします) 。(4 3 4 1,~5#3に等しい3 3 3 3 3 4 3 4 1I.ターンことを最初の三つ等、1キーである27項目の配列に)その後、我々は、(ペアワイズ不等式をチェックする2~:/\(一緒に)とANDすべての結果*/)。

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

Ungolfed(組み合わせ正規表現):

(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の入力の欠如を利用してマルチタイプの配列を作成し、スペースをサポートするために-1を返すindexOfを利用します。

使用法:

m("string here")

小文字のアルファベット文字とスペースのみを想定しています。trueの場合は1、falseの場合は0を返します。

ES6を知っていれば、2番目のチャレンジを試すことができるかもしれません...


「if only ...」-あなたは私の答えを見ましたか?:P
オプティマイザ

はい、しました。残念ながら、ES6は(まだ)知りません。しかし、これは興味深いものでした。
DankMemes 14

面白いアプローチを使用したソリューション。
オプティマイザー14

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のWebコンソールで実行します。

使用法:

N("testing if this works")

関数はtrueまたはfalseを返します。

編集[...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

Python 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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.