それはリポグラムですか?


52

リポグラムは、特定の記号を省略した単語のブロックです。現在、私は一般的に現れる26の5番目のシンボルを避けています。私が何を省略しているのか、今では知っているはずです。そうでない場合は、「リポグラム」を調べてください。

あなたのタスク

入力にchar、空白、およびそれに続く文字列(これに空白が表示される場合があります。ASCII32-126文字のみ)を使用すると、この文字が入力文字列に含まれる場合は出力が偽になります。探す必要のあるこの文字は、常に「A」から「Z」または「a」から「z」の2つの範囲に収まります(ASCII 65-90、97-122)。大文字と非大文字を区別しないでください。また、空白や句読記号について心配する必要はありません。プログラムと関数の両方が満足します。また、プログラムまたは関数の入力文字と文字列を2つの引数に分割できます。最初の引数としての文字列は問題ありません。

イラスト

真実の

e This is a lipogram.
a You need to consider other letters too.
E Capitals also count.

偽物

e This sentence is not a lipogram (for e).
t This particular letter is surprisingly hard.
A You don't need to care about any non-alphabetic symbols.

非リポグラム版

リポグラムは、文字を省略した一連の単語です。上記の「e」という文字は省略しました。

あなたの仕事は、入力としてスペースと改行で区切られた文字と文字列(スペースを含む可能性があります)を受け取り、文字が文字列に含まれている場合は虚偽、それ以外の場合は真実です。文字列は、印刷可能なASCII文字(文字コード32-126)のみで構成されていると想定できます。文字は常に英語のアルファベットになり、小文字と大文字の違いはありません。文字はスペースや記号にはなりません。プログラムまたは関数を作成できます。どちらの場合も、文字と文字列を別々の引数として使用でき、文字列が最初に来る場合があります。


完全なプログラムの場合、入力を個別の行として取得できますか
ブルー

@muddyfish:はい。
エレンディアスターマン

...そして最初の引数としての文字列は大丈夫です。
edc65

@ edc65:ああ、私はそれが好きです。
エレンディアスターマン

1
あなたは試してみてください「とのように、文字列、あなたの最初の引数は大丈夫です。」または同様の構成。
mbomb007

回答:



25

Javascript ES6 34 26 23バイト

x=>!/^(.).*\1/i.test(x)

@MartinBüttnerに感謝8バイトを剃った


9
うわー、私はそれが/i影響を受けることを知りませんでした\1
ニール

18

05AB1E7 6 4 3バイト

コード:

l`-

説明:

l     # Convert both elements to lowercase
 `    # Flatten the array
  -   # Loop over the second line of text and substract each char from the first character
        For example: "abcde""ba"- would result in "cde"

オンラインでお試しください!

Truthyは、現在の文字が出力されるときです。偽は、何も出力されない場合です。


だから、-効果的に行い補数演算を?
-2012rcampion

@ 2012rcampionはい、それは正しいです。ただし、両方の値が整数でない場合のみ。
アドナン

14

TeaScript、5 3バイト

AµN

あぁ\ o /!暗黙の入力を忘れました!TeaScriptは自動的にx.(入力)を挿入します。次に、(変数内のµ)他の入力があるかどうか、したがってNOT(N)があるかどうかを確認できます。ここでのTeaScriptの最大の利点は、暗黙的な入力だと思います

オンラインで試す

説明

  A µ  N
x.A(y).N  // At compile time

x.A // input, has...
(y) // second input
N   // Logical NOT

ワオ。多くの組み込み。それは私に思い出させる、Japtはこれと同じビルトインを持っています...別の2バイトをカットします:)
ETHproductions

12

Bash、16 11バイト

grep -iv $1

-i大文字と小文字を区別しないフラグで、-v反転します(不一致をチェックします)。

文字はコマンドライン引数として指定し、テスト文字列はSTDINで指定する必要があります。

@ DigitalTraumaの助けを借りて5バイト削減!

サンプルの実行:

llama@llama:~$ echo 'This is a lipogram' | ./lipogram.sh e
This is a lipogram.
llama@llama:~$ echo 'This sentence is not a lipogram (for e).' | ./lipogram.sh e

STDINの文章を読んでみませんか?grep -iv $1。私は前にそれをやっ- -おそらく...私が見逃しているメタ先例がある私は、入力方法としてSTDINとコマンドライン引数を混合しながら何も間違って表示されない
デジタルトラウマ

@DigitalTrauma私はそれを考えましたが、それは少し大ざっぱだと思いました。おそらくメタで議論されるトピック。
ドアノブ


@Dennisを見つけてください!
デジタル外傷

1
^Dこの回答にコメントするユーザーを増やすことはできますか?@Downgoat-あなたはそこにいますか?;-)
デジタル外傷

12

Japt、12 6 4バイト

!VoU

オンラインでテストしてください!

@DowngoatのTeaScriptの答えは、Japtがまったく同じ組み込み機能を持ち、最後の2バイトを切り捨てることを思い出させてくれました。

使い方

       // Implicit: U = input char, V = input string
VoU    // Keep only the chars in V that are equal to U, ignoring case.
!      // Take logical NOT. Returns true if no matches were found, false otherwise.

@CᴏɴᴏʀO'Bʀɪᴇɴ忘れていたビルトインのおかげで、さらに短くなりました:)
ETHproductions

6
ちょっと待ってください
コナーオブライエン


9

JavaScript(ES6)、29バイト

(c,s)=>!RegExp(c,'i').test(s)

4
答えをカリーc=>s=>!RegExp(c,"i").test(s)化して、バイトを節約できます。
コナーオブライエン

c=>s=>!s.match(c,'i')21)です。:)
ETHproductions

@ETHproductions matchは1つの引数のみを取ります。2番目の引数は、Firefox 39以降でコンソール警告を記録し、Firefox 47ではまったく機能しません。
ニール

@Neil私はFirefox 44を使用していますが、完璧に機能しているようです。
ETHproductions

@ETHproductions確かに、他のブラウザーで動作することを信じる理由はありません。また、Firefoxでもすぐに動作しなくなるでしょう。
ニール

7

Python 3、36

大文字小文字を無視しなければならないことは驚くほど高価です。

lambda a,b:a.lower()not in b.lower()

引数を(char、string)として取ります



6

O、8バイト

{_.@_-=}

文字と文字列を受け取る匿名関数。

オンラインでお試しください。

説明

{_.@_-=}

{      }
 _        Lowercase string
  .       Duplicate
   @      Rotate stack
    _     Lowercase character
     -    Remove all instances of the character
      =   Compare to original

なぜこれが関数である必要があるのですか?なぜそれをプログラムにしないのですか?
フェーズ

@phaseどのcharが分割されているのかわかりませんでした。とにかく、関数としてはもっと短いと確信しています。
spaghetto

6

Perl、11 + 1 = 12バイト

$_=lc!~lc<>

-pスイッチを必要とし、入力を受け取ります$string\n$letter

$ perl -pe'$_=lc!~lc<>' <<< $'this is a lipogram\ne'
1

使い方:

            # -p auto reads input into $_ and auto prints at the end
   lc       # lowercase $_
     !~     # Check against regex
       lc<> # Read next line and lowercase it. '=~' will expect the rValue to be
            # a regex and therefore the result from 'lc<>' will be treated as such
$_=         # Assign result ('1' or '') to $_ which will be printed

シェルを指定する必要があります。私の場合、Ubuntuでbashを実行すると、入力に関係なく、指定したテンプレートに従って1が出力されます。(理由はわかりませんが、その後、私は慣れてい<<<ません<<<) 。)
msh210

@ msh210 printf "this is a lipogram\ne\n" | perl -pe'$_=lc!~lc<>'代わりに使用できます。<<< bash構文です。
andlrc

@ msh210 <<<は、stdinを渡す別の方法です。
-andlrc

5

Java、63バイト。

boolean f(String s,char c){return!s.matches("(?i:.*"+c+".*)");}

また、ラムダ式書くことができます(s,c)->!s.matches("(?i:.*"+c+".*)")短い
RAnders00

1
、あなたが配置する必要がありますけれども、それは適切な方法ではないでしょうStringし、charどこかに。
shooqie


5

真剣に、6バイト

,ù,ùíu

オンラインでお試しください!

入力を受け取ります 'string'\n'char'

説明:

,ù,ùíu
,ù      get string (lowercase)
  ,ù    get char (lowercase)
    íu  1-based index (0 if not found)

,ù,ùìuY仕事のようなものではないでしょうか?(それはindexOfを行うIであるはずですが、どちらがそれを行うかを覚えていません)
-quintopia

5

ジュリア0.3、22の、20バイト

c%s=c&95∉[s...]&95

uppercaseある長い単語。

使い方

c%s=c&95∉[s...]&95

c%s=                Redefine the binary operator % so it takes a character c and
                    a string s and...
     c&95                Compute lo bitwise AND of c and 95.
                         This casts the character c to uppercase.
          [s...]         Yield the list of the characters of the string s.
                &95      Compute lo bitwise AND of each chararacter and 95.
                         This casts the characters of s to uppercase.
         ∉               Return a Boolean, signaling non-membership.




4

ゼリー、8バイト

ḢO^O&95P

オンラインでお試しください!

使い方

ḢO^O&95P  Main link. Input: S (string)

Ḣ         Pop the first character of S.
 O        Ordinal; compute its code point.
  ^O      XOR it with the code points of the remaining characters.
    &95   AND each result with 95.
       P  Take the product of the results.

待って、ゼリーが勝っていないの?さらにゴルフをする方法がなければなりません!
一般ユーザー

ない文字列が...関係しているとき
デニス・

これを修正する必要があります。
電卓



4

Python、34バイト

lambda c,s:c not in s+s.swapcase()

c文字列にある文字をチェックします。s大文字と小文字を入れ替えたstoのコピーを追加することで、大文字と小文字を無視しsます。否定はで行われますがnot、長く見えますが、よく見えません。これは同じ長さです:

lambda c,s:(c in s+s.swapcase())<1

括弧を省略することはできません。省略しないと、Pythonは、式の連鎖3値不等式として式を挿入し_ in _ < _ます。

Python 3.5では、セット変換を介して33バイトを許可する必要がありますが、今はテストできません。

lambda c,s:{*c}-{*s+s.swapcase()}

4

パイク、7バイト

Dl3+R{!

説明:

D       -     eval_or_not(input()).lower()
 l3     -    ^.swapcase()
   +    -   ^+^
    R   -  rotate 2
     {  -  ^ in ^
      ! - not ^

3

JavaScriptのES6、41の、40バイト

x=>!~x.slice(2).search(RegExp(x[0],"i"))

文字列全体を引数として受け取ります。2つの異なる引数を受け入れることでバイトを節約することはできません。なぜなら、私の答えが他のES6の答えに溶け込んでしまうからです:(


今回はES6で優勝しました。;)あなたの匿名関数の構文はmyに一致しませんnot in
モーガンスラップ

@MorganThrapp Gahh、また失敗しました!
コナーオブライエン

それは大丈夫です、私はこれを得たあなたは@MorganThrappを移動し、。
ショーンH

3

R、26バイト

 function(x,y)!grepl(y,x,T)

xは文字列、yは文字、greplの呼び出しのTは大文字と小文字を区別しません。



2

ルビー、17バイト

->c,s{/#{c}/i!~s}
->c,s{  # lambda with two arguments
/#{c}/  # turn the input character into a regexp w/ interpolation
i       # case insensitive
!~      # does not match
s       # input string
}

2

バッチ、53バイト

@set s=%2
@call set t=%%s:%1=%%
@if %s%==%t% echo 1

2つのコマンドライン引数として入力を受け入れます。(必要に応じて2番目の引数を引用します。)成功した​​場合は1を出力し、2番目の引数が(無意識に)見つかった場合は何も出力しません。


2

Mathematica、33 32バイト

StringFreeQ[##,IgnoreCase->1>0]&

##を使用できる場合に気に入っています。入力は文字列、次に文字です。

または、大文字と小文字を区別するバージョン:(11バイト:)

StringFreeQ

うん、ビルトインだけ。

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