Có phải là một lipogram?


52

Một lipogram là một khối các từ bỏ qua một biểu tượng cụ thể. Ngay bây giờ, tôi đang tránh biểu tượng thứ năm 26 của chúng tôi thường xuất hiện. Bây giờ bạn nên biết những gì tôi đang bỏ qua. Nếu không, hãy tra cứu "lipogram" và bạn sẽ biết.

Nhiệm vụ của bạn

Với một char, một khoảng trống và một chuỗi sau (khoảng trống có thể hiển thị trong này; chỉ có ký tự ASCII 32-126) trong đầu vào, đầu ra sai lệch nếu char này nằm trong chuỗi đầu vào, nếu không. Char này mà bạn phải tìm sẽ luôn khớp trong hai nhịp: "A" đến "Z" hoặc "a" đến "z" (ASCII 65-90, 97-122). Không phân biệt thủ đô và không thủ đô. Ngoài ra, đừng lo lắng về khoảng trống hoặc ký hiệu dấu chấm câu. Cả hai chương trình và chức năng đáp ứng. Ngoài ra, bạn có thể chia char và chuỗi đầu vào thành hai đối số cho các chương trình hoặc hàm và chuỗi như đối số đầu tiên là ổn.

Minh họa

Sự thật

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

Giả

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.

Phiên bản không lipogram

Một lipogram là một loạt các từ để lại một chữ cái. Tôi để lại chữ "e" ở trên.

Nhiệm vụ của bạn là lấy một ký tự và một chuỗi (có thể bao gồm khoảng trắng) làm đầu vào, được phân tách bằng dấu cách hoặc dòng mới và đầu ra sai lệch nếu ký tự nằm trong chuỗi và ngược lại. Bạn có thể giả sử chuỗi chỉ bao gồm các ký tự ASCII có thể in được (mã char 32-126). Ký tự sẽ luôn nằm trong bảng chữ cái tiếng Anh, và không có sự khác biệt giữa chữ thường và chữ hoa. Các nhân vật sẽ không phải là một không gian hoặc biểu tượng. Bạn có thể viết một chương trình hoặc một chức năng. Đối với một trong hai, bạn có thể lấy ký tự và chuỗi làm đối số riêng biệt và chuỗi có thể đến trước.


Đối với các chương trình đầy đủ, tôi có thể lấy đầu vào là các dòng riêng biệt?
Màu xanh

@muddyfish: Vâng.
El'endia Starman

... và chuỗi như arg đầu tiên là ok.
edc65

@ edc65: Ồ, tôi thích điều đó hơn.
El'endia Starman

1
Bạn nên thử "và một chuỗi như đối số đầu tiên của bạn là ổn." hoặc một cấu hình tương tự.
mbomb007

Câu trả lời:



25

Javascript ES6 34 26 23 byte

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

cạo 8 byte nhờ @ MartinBüttner


9
Ồ, tôi không biết rằng đã /ibị ảnh hưởng \1!
Neil

18

05AB1E , 7 6 4 3 byte

Mã số:

l`-

Giải trình:

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"

Hãy thử trực tuyến!

Sự thật là khi bức thư hiện tại được xuất ra. Falsy là khi không có gì được xuất ra.


Vì vậy, -một hoạt động bổ sung có hiệu quả ?
2012rcampion 23/2/2016

@ 2012rcampion Vâng, đúng vậy. Nhưng chỉ khi cả hai giá trị không phải là số nguyên.
Ad Nam

14

TeaScript, 5 3 byte

AµN

Aha \ o /! Tôi quên về đầu vào ngầm! TeaScript sẽ tự động chèn x.(đầu vào) vào đầu. Sau đó tôi có thể kiểm tra xem nó có đầu vào khác không (trong biến µ) và vì vậy KHÔNG ( N). Tôi đoán lợi thế tốt nhất của TeaScript ở đây là đầu vào ngầm của nó

Dùng thử trực tuyến

Giải trình

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

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

Ồ Tích hợp nhiều. Điều đó nhắc nhở tôi, Japt có cùng một tích hợp này ... cắt giảm hai byte khác :)
ETHproductions 23/2/2016

12

Bash, 16 11 byte

grep -iv $1

-ilà cờ không phân biệt chữ hoa chữ thường, -vđảo ngược (kiểm tra không khớp).

Ký tự phải được cung cấp dưới dạng đối số dòng lệnh và chuỗi kiểm tra trên STDIN.

Giảm 5 byte với sự giúp đỡ của @ DigitalTrauma !

Chạy mẫu:

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

Tại sao không đọc câu từ STDIN? grep -iv $1. Tôi không thấy có gì sai khi trộn STDIN và đối số dòng lệnh làm phương thức nhập - tôi đã làm điều đó trước đây - nhưng có lẽ có một tiền lệ meta mà tôi đã bỏ lỡ ...
Chấn thương kỹ thuật số

@DigitalTrauma Tôi đã xem xét điều đó, nhưng hình dung nó sẽ hơi sơ sài. Có lẽ một chủ đề sẽ được thảo luận về meta.
Doorknob


Tìm tốt @Dennis!
Chấn thương kỹ thuật số

1
Chúng tôi có thể nhận thêm ^Dngười dùng nào để nhận xét về câu trả lời này không? @Downgoat - bạn có ở đó không? ;-)
Chấn thương kỹ thuật số

12

Japt, 12 6 4 byte

!VoU

Kiểm tra nó trực tuyến!

Câu trả lời TeaScript của @ Downgoat nhắc nhở tôi rằng Japt có chính xác cùng một tích hợp, cắt bỏ hai byte cuối cùng.

Làm thế nào nó hoạt động

       // 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ʀɪᴇɴ Nhờ tích hợp sẵn mà tôi đã quên, giờ nó thậm chí còn ngắn hơn :)
Sản phẩm ETH

6
ừ, đừng chờ quá ngắn
Conor O'Brien

10

CJam, 6 byte

lel(&!

Hãy thử trực tuyến! lel

Giải trình

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 byte

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

4
Bạn có thể curry câu trả lời như c=>s=>!RegExp(c,"i").test(s), lưu một byte.
Conor O'Brien

c=>s=>!s.match(c,'i')là 21. :)
Sản phẩm điện tử

@ETHproductions matchchỉ mất một đối số. Đối số thứ hai ghi lại cảnh báo giao diện điều khiển trong Firefox 39 trở lên và hoàn toàn không hoạt động trong Firefox 47.
Neil

@Neil Tôi đang sử dụng Firefox 44 và có vẻ như nó hoạt động rất tốt.
Sản xuất ETH

@ETHproductions Chắc chắn, nhưng tôi không có lý do gì để tin rằng nó hoạt động trong các trình duyệt khác và nó cũng sẽ ngừng hoạt động trong Firefox sớm.
Neil

7

Trăn 3, 36

Phải bỏ qua trường hợp là đáng ngạc nhiên đắt tiền.

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

Đưa các đối số là (char, chuỗi)



6

O, 8 byte

{_.@_-=}

Một hàm ẩn danh có một ký tự và một chuỗi.

Hãy thử trực tuyến.

Giải trình

{_.@_-=}

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

Tại sao điều này cần phải là một chức năng? Tại sao không chỉ là một chương trình?
giai đoạn

@phase Tôi không thể tìm ra char đã được chia. Ở mức độ nào, tôi khá chắc chắn rằng nó ngắn hơn như là một chức năng.
một spaghetto

6

Perl, 11 + 1 = 12 byte

$_=lc!~lc<>

Yêu cầu -pchuyển đổi và nhận đầu vào là$string\n$letter

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

Làm thế nào nó hoạt động:

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

Bạn nên chỉ định vỏ của bạn. Đối với tôi, bash trên Ubuntu, điều này in 1 bất kể đầu vào, theo mẫu bạn đưa ra. (Tôi không biết tại sao, nhưng, sau đó, tôi không quen <<<.) (Và sử dụng STDIN bình thường (không <<<), tôi nhận được 1 trừ khi chữ cái là ký tự cuối cùng trong chuỗi, vì bạn không nhai chữ cái .)
msh210

@ msh210 Bạn có thể sử dụng printf "this is a lipogram\ne\n" | perl -pe'$_=lc!~lc<>'thay thế. <<< là cú pháp bash.
andlrc

@ msh210 <<<chỉ là một cách khác để vượt qua stdin.
andlrc

5

Java, 63 byte.

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

Bạn cũng có thể viết một biểu thức lambda (s,c)->!s.matches("(?i:.*"+c+".*)")ngắn hơn
RAnders00

1
Nó sẽ không phải là một phương pháp thích hợp mặc dù, bạn phải đặt Stringcharở đâu đó.
shooqie


5

Nghiêm túc, 6 byte

,ù,ùíu

Hãy thử trực tuyến!

Đưa đầu vào là 'string'\n'char'

Giải trình:

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

Sẽ không giống như ,ù,ùìuYcông việc? (Điều đó được coi là cái tôi làm indexOf nhưng tôi không nhớ cái nào làm được điều đó)
quintopia 23/2/2016

5

Julia 0,3, 22 20 byte

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

uppercaselà một từ dài .

Làm thế nào nó hoạt động

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

Võng mạc, 11

iA`^(.).*\1

Tôi không chắc những gì được tính là trung thực / giả dối trong Retina, điều này sẽ lặp lại dòng nếu đó là một biểu đồ cho ký tự đã cho và nó sẽ trả về chuỗi trống nếu không.

Điều này cũng sẽ làm việc cho đầu vào đa dòng.

Hãy thử trực tuyến!


Một chuỗi rỗng là giả, vì vậy mà tính.
El'endia Starman



4

Thạch, 8 byte

ḢO^O&95P

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Ḣ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.

Đợi đã, thạch không chiến thắng? Phải có một cách để chơi golf xuống hơn nữa!
Người dùng chung

Không phải khi các chuỗi có liên quan ...
Dennis

Điều này phải được khắc phục.
Máy

4

CJam, 10 byte

{el\ele=!}

Hàm ẩn danh (khối) nhận một ký tự (không phải chuỗi!) Và chuỗi.

Hãy thử trực tuyến.

Giải trình

{el\ele=!}

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


4

Python, 34 byte

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

Kiểm tra ký tự ccó trong chuỗi s, bỏ qua trường hợp bằng cách nối thêm một bản sao hoán đổi trường hợp svào s. Việc phủ định được thực hiện với not, trông có vẻ dài nhưng tôi không thấy rõ hơn. Đây là cùng một chiều dài:

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

Bạn không thể bỏ qua các parens nếu không Python sẽ xen vào biểu thức dưới dạng bất đẳng thức ba giá trị của chuỗi _ in _ < _.

Python 3.5 sẽ cho phép 33 byte thông qua các chuyển đổi được thiết lập, mặc dù tôi không thể kiểm tra nó ngay bây giờ.

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

4

Pyke, 7 byte

Dl3+R{!

Giải trình:

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

3

JavaScript ES6, 41 40 byte

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

Lấy toàn bộ chuỗi làm đối số. Tôi không thể lưu byte bằng cách chấp nhận hai đối số khác nhau vì sau đó câu trả lời của tôi sẽ chuyển sang câu trả lời ES6 khác :(


Tôi thắng lần này, ES6. ;) Cú pháp hàm ẩn danh của bạn không phù hợp với tôi not in.
Morgan Thrapp

@MorganThrapp Gahh, lại thất bại!
Conor O'Brien

Không sao, tôi hiểu rồi , Bạn di chuyển @MorganThrapp.
Shaun H

3

R, 26 byte

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

x là chuỗi, y là chữ cái, chữ T trong lệnh gọi grepl làm cho nó không phân biệt chữ hoa chữ thường.


3

Jolf, 6 7 byte

Vì thế. Nhiều. Sáu mươi. TIN NHẮN? Vâng, hãy thử nó ở đây dù sao. Thay thế bằng \x7f.

⌂ MiI'i
⌂_M      match with flags
   i     the input
    I    with another input
     'i  using i as a flag

2

Ruby, 17 byte

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

Mẻ, 53 byte

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

Chấp nhận đầu vào dưới dạng hai đối số dòng lệnh. (Trích dẫn đối số thứ hai nếu cần thiết.) Kết quả 1 về thành công, không có gì nếu đối số thứ nhất là (không nhạy cảm) được tìm thấy trong lần thứ hai.


2

Toán học, 33 32 byte

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

Tôi thích nó khi ## có thể được sử dụng. Đầu vào là chuỗi, sau đó char.

Hoặc, một phiên bản phân biệt chữ hoa chữ thường: (11 byte :)

StringFreeQ

Đúng, chỉ là một nội dung.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.