它是唇形图吗?


52

笔形图是一组省略特定符号的单词。现在,我避免了通常显示的第五个符号26。您现在应该知道我正在忽略的内容。如果没有,请查找“嘴唇图”,您就会知道。

你的任务

输入中包含一个字符,一个空格和一个后续字符串(可能会出现空白;仅ASCII 32-126个字符),如果此字符位于输入字符串中,则输出falsy,否则返回true。您必须查找的该字符始终适合两个范围:“ A”至“ Z”或“ a”至“ z”(ASCII 65-90、97-122)。不要区分大写和非大写。另外,也不必担心空格或标点符号。程序和功能都满足。另外,您可以将输入的char和string分成两个用于程序或函数的args,并且将string作为第一个arg可以。

插图

特鲁西

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”。

您的任务是将一个字符和一个字符串(可能包含空格)作为输入,并用空格或换行符分隔,如果字符在字符串中,则输出falsy,否则为true。您可以假定该字符串仅由可打印的ASCII字符(字符代码32-126)组成。字符将始终使用英文字母,并且小写和大写之间没有区别。字符将不是空格或符号。您可以编写程序或函数。对于这两种情况,您都可以将字符和字符串作为单独的参数,并且字符串可以排在最前面。


对于完整程序,我可以将输入作为单独的行吗?
2016年

@muddyfish:是的。
El'endia Starman

...并且字符串作为第一个arg可以。
edc65 '16

@ edc65:哦,我比较喜欢。
El'endia Starman

1
您应该尝试“然后输入一个字符串,因为您的第一个参数还可以。” 或类似的配置。
mbomb007 '16

Answers:


36

C,42个字节

#define f(c,s)!strchr(s,c)&!strchr(s,c^32)

8
C语言中的代码going,Ubercodegolfing。
脑盖德

25

Javascript ES6 34 26 23字节

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

剃光了8个字节,谢谢@MartinBüttner


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"

在线尝试!

真是当输出当前字母时。虚假是什么都不输出。


因此,-有效地做了补充操作?
2012rcampion '16

@ 2012rcampion是的,这是正确的。但仅当两个值都不是整数时。
阿德南

14

TeaScript,5个 3字节

AµN

啊哈!我忘记了隐式输入!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具有相同的内置功能...削减了另外两个字节:)
ETHproductions 2016年

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和命令行args混合作为输入方法有什么问题-我之前做过-但也许我错过了一个元先例……
Digital Trauma

@DigitalTrauma我考虑过,但是觉得有点粗略。也许是一个关于meta的话题。
Doorknob


好发现@丹尼斯!
Digital Trauma

1
我们可以让更多^D用户对此答案发表评论吗?@Downgoat-你在吗?;-)
Digital Trauma

12

Japt,12 6 4字节

!VoU

在线测试!

@Downgoat的TeaScript回答使我想起Japt具有完全相同的内置函数,截断了最后两个字节。

这个怎么运作

       // 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 2016年

6
嗯,等待,不要太短
Conor O'Brien

10

CJam,6个字节

lel(&!

在线尝试!el

说明

l  e# Read a line of input.
el e# Convert to lower case.
(  e# Pull off the first character.
&  e# Set intersection with the rest of the input.
!  e# Logical NOT.

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 2016年

@ETHproductions match仅接受一个参数。第二个参数在Firefox 39或更高版本中记录控制台警告,而在Firefox 47中根本不起作用。
尼尔

@Neil我正在使用Firefox 44,它似乎工作得很好。
ETHproductions 2016年

@ETHproductions可以,但是我没有理由相信它可以在其他浏览器中使用,并且也将很快在Firefox中停止工作。
尼尔

7

Python 3、36

必须忽略大小写是令人惊讶的昂贵。

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

将参数作为(字符,字符串)



6

O,8个字节

{_.@_-=}

带有字符和字符串的匿名函数。

在线尝试。

说明

{_.@_-=}

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

为什么这需要成为一个功能?为什么不只是一个程序呢?
阶段

@phase我不知道是什么字符被拆分。无论如何,我很确定它无论如何都是较短的。
意大利面条

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。(我不知道为什么,但是,然后,我不熟悉<<<。)(并且使用普通的STDIN(no <<<),除非字母是字符串中的最后一个字符,否则我将得到1,因为您不将字母切掉。)
msh210 '16

@ msh210您可以printf "this is a lipogram\ne\n" | perl -pe'$_=lc!~lc<>'改用。<<< 是bash语法。
andlrc

@ msh210 <<<只是传递标准输入的另一种方法。
andlrc

5

Java,63个字节。

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

您也可以编写一个(s,c)->!s.matches("(?i:.*"+c+".*)")较短的lambda表达式
RAnders00 '16

1
它不会是一个正确的方法,但是,你必须把Stringchar某个地方。
shooqie '16

5

MATL,5个字节

kikm~

在线尝试!

k        % take first input (letter) implicitly. Convert to lowercase
ik       % take second input (text). Convert to lowercase
m        % ismember function
~        % negate

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 '16

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

视网膜11

iA`^(.).*\1

我不确定在视网膜中什么算是真实/虚假,如果它是给定字符的笔形图,这将回显该行,否则返回空字符串。

这也适用于多行输入。

在线尝试!


空字符串是虚假的,因此很重要。
El'endia Starman


4

Rust,75个字节

|c:char,s:&str|!s.to_lowercase().contains(c.to_lowercase().next().unwrap())

最高分意味着我赢了,对吧?> _ <

在这里尝试。


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.

等等,果冻没有赢?必须有一种进一步打高尔夫球的方法!
通用用户

不涉及字符串...
Dennis

这必须纠正。
CalculatorFeline

4

CJam,10个字节

{el\ele=!}

一个带字符(不是字符串!)和字符串的匿名函数(块)。

在线尝试。

说明

{el\ele=!}

{        }
 el\el      lowercase both args
      e=    count occurrences of the character
        !   logical not


4

Python,34个字节

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

检查字符c的字符串是s,通过附加的情况下交换的拷贝不区分大小写ss。否定是用完成的not,看起来很冗长,但我看不到更好。这是相同的长度:

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

您不能省略括号,否则Python会将表达式作为形式的链式三值不等式交织在一起_ in _ < _

Python 3.5应该通过set转换允许33个字节,尽管我现在无法对其进行测试。

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

4

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

将整个字符串作为参数。我不能通过接受两个不同的参数来保存字节,因为那样我的答案就会融合到另一个ES6答案中:(


我这次赢了,ES6。;)您的匿名函数语法与my不匹配not in
Morgan Thrapp '16

@MorganThrapp Gahh,再次挫败!
科纳·奥布莱恩

好的,我知道了,您移动@MorganThrapp。
Shaun H

3

R,26个字节

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

x是字符串,y是字母,对grepl的调用中的T使其不区分大小写。



2

Ruby,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

接受输入作为两个命令行参数。(如有必要,请引用第二个参数。)成功时输出1,如果在第二个参数中(不敏感地)找到第一个参数,则不输出任何内容。


2

Mathematica,33 32字节

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

当可以使用##时,我喜欢它。输入是字符串,然后是char。

或者,区分大小写的版本:(11个字节:)

StringFreeQ

是的,只是内置的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.