Apakah itu lipogram?

52

Lipogram adalah blok kata yang menghilangkan simbol tertentu. Saat ini, aku sedang menghindari simbol kelima kami dari 26 yang biasanya muncul. Anda harus tahu sekarang apa yang saya hilangkan. Jika tidak, cari "lipogram" dan Anda akan tahu.

Tugas Anda

Dengan char, blank, dan string berikut (blank dapat muncul di ini; dengan hanya ASCII 32-126 karakter) dalam input, output falsy jika char ini dalam string input, jujur ​​jika tidak. Karakter yang harus Anda cari ini akan selalu muat dalam dua rentang: "A" ke "Z" atau "a" ke "z" (ASCII 65-90, 97-122). Jangan membedakan modal dan non-kapital. Juga, jangan khawatir tentang simbol kosong atau tanda baca. Baik program maupun fungsinya memuaskan. Anda juga dapat membagi karakter dan string input menjadi dua arg untuk program atau fungsi, dan string sebagai argumen pertama tidak masalah.

Ilustrasi

Sejujurnya

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

Palsu

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.

Versi non-lipogram

Lipogram adalah serangkaian kata yang meninggalkan surat. Saya meninggalkan huruf "e" di atas.

Tugas Anda adalah mengambil karakter dan string (yang mungkin termasuk spasi) sebagai input, dipisahkan oleh spasi atau baris baru, dan menghasilkan falsy jika karakter berada di string, dan sebaliknya benar. Anda dapat mengasumsikan string hanya terdiri dari karakter ASCII yang dapat dicetak (kode char 32-126). Karakter akan selalu dalam alfabet bahasa Inggris, dan tidak ada perbedaan antara huruf kecil dan huruf besar. Karakter tidak akan menjadi spasi atau simbol. Anda dapat menulis program atau fungsi. Untuk salah satu, Anda dapat mengambil karakter dan string sebagai argumen terpisah, dan string dapat didahulukan.

El'endia Starman
sumber
Untuk program lengkap, bolehkah saya mengambil input sebagai jalur terpisah?
Biru
@uddyfish: Ya.
El'endia Starman
... dan string sebagai arg pertama tidak masalah.
edc65
@ edc65: Oh, saya lebih suka itu.
El'endia Starman
1
Anda harus mencoba "dan sebuah string sebagai Anda arg pertama adalah baik-baik saja." atau konfigurasi serupa.
mbomb007

Jawaban:

36

C, 42 byte

#define f(c,s)!strchr(s,c)&!strchr(s,c^32)
Josh
sumber
8
Codegolfing di C, Ubercodegolfing.
Brain Guider
25

Javascript ES6 34 26 23 Bytes

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

dicukur 8 byte, terima kasih @ MartinBüttner

Shaun H
sumber
9
Wow, saya tidak tahu itu /iterpengaruh \1!
Neil
18

05AB1E , 7 6 4 3 byte

Kode:

l`-

Penjelasan:

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"

Cobalah online!

Kebenaran adalah ketika surat saat ini dikeluarkan. Falsy adalah ketika tidak ada output.

Adnan
sumber
Begitu -efektifnya operasi pelengkap ?
Arcampion
@ 2012rcampion Ya, itu benar. Tetapi hanya ketika kedua nilai tersebut bukan bilangan bulat.
Adnan
14

TeaScript, 5 3 byte

AµN

Aha \ o /! Saya lupa tentang input implisit! TeaScript akan secara otomatis memasukkan x.(input) di awal. Saya kemudian dapat memeriksa apakah memiliki input lain (dalam variabel µ) dan jadi TIDAK ( N). Saya kira keuntungan terbaik TeaScript di sini adalah inputnya yang implisit

Cobalah online

Penjelasan

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

x.A // input, has...
(y) // second input
N   // Logical NOT
Downgoat
sumber
Wow. Banyak built-in. Itu mengingatkan saya, Japt memiliki built-in yang sama ini ... memotong dua byte lagi :)
ETHproductions
12

Bash, 16 11 byte

grep -iv $1

-iadalah tanda case-insensitive, -vinverts (memeriksa ketidakcocokan).

Karakter harus disediakan sebagai argumen baris perintah, dan string uji pada STDIN.

Dikurangi 5 byte dengan bantuan @ DigitalTrauma !

Sampel berjalan:

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
Gagang pintu
sumber
Mengapa tidak membaca kalimat dari STDIN? grep -iv $1. Saya tidak melihat ada yang salah dengan mencampurkan STDIN dan baris perintah sebagai metode input - saya pernah melakukannya sebelumnya - tetapi mungkin ada preseden meta yang saya lewatkan ...
Digital Trauma
@DigitalTrauma saya menganggap itu, tetapi saya pikir itu akan sedikit samar. Mungkin topik yang akan dibahas tentang meta.
Gagang Pintu
Temukan @Dennis!
Digital Trauma
1
Bisakah kita mendapatkan lebih banyak ^Dpengguna untuk mengomentari jawaban ini? @Downgoat - apakah Anda di sana? ;-)
Trauma Digital
12

Japt, 12 6 4 byte

!VoU

Uji secara online!

Jawaban TeaScript @ Downgoat mengingatkan saya bahwa Japt memiliki built-in yang persis sama, memotong dua byte terakhir.

Bagaimana itu bekerja

       // 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.
Produksi ETH
sumber
@CᴏɴᴏʀO'Bʀɪᴇɴ Berkat built-in yang saya lupakan, sekarang lebih pendek :)
ETHproduksi
6
um, tunggu sebentar, itu terlalu pendek
Conor O'Brien
10

CJam, 6 byte

lel(&!

Cobalah online! lel

Penjelasan

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.
Martin Ender
sumber
9

JavaScript (ES6), 29 byte

(c,s)=>!RegExp(c,'i').test(s)
Neil
sumber
4
Anda dapat mencari jawabannya sebagai c=>s=>!RegExp(c,"i").test(s), menghemat satu byte.
Conor O'Brien
c=>s=>!s.match(c,'i')adalah 21. :)
ETHproduksi
@ ETHproductions matchhanya membutuhkan satu argumen. Argumen kedua mencatat peringatan konsol di Firefox 39 atau lebih baru, dan tidak akan berfungsi di Firefox 47 sama sekali.
Neil
@Neil Saya menggunakan Firefox 44, dan sepertinya berfungsi dengan baik.
ETHproduksi
@ ETHproductions Tentu, tapi saya tidak punya alasan untuk percaya itu bekerja di browser lain, dan itu juga akan segera berhenti bekerja di Firefox.
Neil
7

Python 3, 36

Mengabaikan case sangat mahal.

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

Mengambil argumen sebagai (char, string)

Morgan Thrapp
sumber
6

Pyth, 8 7 byte

-rz0rw0

Penjelasan

 rw0    -  input().lower()
-       - ^ - V
    rw0 -  input().lower()

Terima kasih @FryAmTheEggman untuk memberitahu saya dapat saya gunakan -bukan!}

Coba di sini

Biru
sumber
6

O, 8 byte

{_.@_-=}

Fungsi anonim yang mengambil karakter dan string.

Cobalah online.

Penjelasan

{_.@_-=}

{      }
 _        Lowercase string
  .       Duplicate
   @      Rotate stack
    _     Lowercase character
     -    Remove all instances of the character
      =   Compare to original
sebuah spaghetto
sumber
Mengapa ini harus berfungsi? Mengapa tidak hanya menjadi program?
fase
@ fase Aku tidak tahu apa yang dipecah char. Bagaimanapun, saya cukup yakin itu lebih pendek sebagai fungsi.
spaghetto
6

Perl, 11 + 1 = 12 byte

$_=lc!~lc<>

Membutuhkan -psakelar dan menerima input sebagai$string\n$letter

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

Bagaimana itu bekerja:

            # -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
andlrc
sumber
Anda harus menentukan shell Anda. Bagi saya, bash di Ubuntu, ini mencetak 1 apa pun inputnya, mengikuti templat yang Anda berikan. (Saya tidak tahu mengapa, tapi, kalau begitu, saya tidak terbiasa <<<.) (Dan menggunakan STDIN normal (tidak <<<), saya mendapatkan 1 kecuali hurufnya adalah karakter terakhir dalam string, karena Anda tidak chomp surat itu .)
msh210
@ msh210 Anda bisa menggunakannya printf "this is a lipogram\ne\n" | perl -pe'$_=lc!~lc<>'. <<< adalah sintaks bash.
andlrc
@ msh210 <<<hanyalah cara lain untuk lulus stdin.
andlrc
5

Java, 63 byte.

boolean f(String s,char c){return!s.matches("(?i:.*"+c+".*)");}
shooqie
sumber
Anda juga bisa menulis ekspresi lambda (s,c)->!s.matches("(?i:.*"+c+".*)")yang lebih pendek
RAnders00
1
Itu tidak akan menjadi metode yang tepat, Anda harus meletakkan Stringdan di charsuatu tempat.
shooqie
5

MATL , 5 byte

kikm~

Cobalah online!

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

Serius, 6 byte

,ù,ùíu

Cobalah online!

Mengambil input sebagai 'string'\n'char'

Penjelasan:

,ù,ùíu
,ù      get string (lowercase)
  ,ù    get char (lowercase)
    íu  1-based index (0 if not found)
Mego
sumber
Bukankah sesuatu seperti ,ù,ùìuYpekerjaan? (Seharusnya saya yang melakukan indexOf tapi saya tidak ingat yang mana yang melakukan itu)
quintopia
5

Julia 0,3, 22 20 byte

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

uppercaseadalah kata yang panjang .

Bagaimana itu bekerja

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.
Dennis
sumber
4

Retina, 11

iA`^(.).*\1

Saya tidak yakin apa yang dianggap sebagai kebenaran / kepalsuan di Retina, ini akan menggemakan garis jika itu adalah lipogram untuk karakter yang diberikan, dan itu akan mengembalikan string kosong jika tidak.

Ini juga akan berfungsi untuk input multiline.

Cobalah online!

FryAmTheEggman
sumber
String kosong adalah falsy, jadi itu penting.
El'endia Starman
4

Minkolang 0,15 , 10 byte

$or7Z0Z,N.

Coba di sini.

Penjelasan

$o            Read in whole input as characters
  r           Reverse stack
   7Z         Lowercase everything
     0Z       Pop top of stack (a) and count how many 'a's are in the stack
       ,      'not' the top of stack
        N.    Output as number and stop.
El'endia Starman
sumber
4

Karat, 75 byte

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

Skor terbesar berarti saya menang, bukan? > _ <

Coba di sini.

Gagang pintu
sumber
4

Jelly, 8 byte

ḢO^O&95P

Cobalah online!

Bagaimana itu bekerja

Ḣ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
sumber
Tunggu, jeli tidak menang? Pasti ada cara untuk bermain golf lebih jauh!
Pengguna Umum
Tidak ketika string terlibat ...
Dennis
Ini harus diperbaiki.
CalculatorFeline
4

CJam, 10 byte

{el\ele=!}

Fungsi anonim (blok) yang mengambil karakter (bukan string!) Dan string.

Cobalah online.

Penjelasan

{el\ele=!}

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

PowerShell, 36 32 30 29 25 byte

param($a,$b)$b-notmatch$a

Menggunakan -notmatchoperator , dan cukup mengeluarkan Trueatau False.

AdmBorkBork
sumber
4

Python, 34 byte

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

Memeriksa karakter cdalam string s, mengabaikan case dengan menambahkan salinan case-swapped ske s. Negasi dilakukan dengan not, yang terlihat panjang tapi saya tidak melihat lebih baik. Panjangnya sama:

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

Anda tidak bisa menghilangkan parens atau Python akan mengintip ekspresi sebagai ketidaksetaraan bentuk tiga nilai berantai _ in _ < _.

Python 3.5 seharusnya mengizinkan 33 byte melalui konversi yang ditetapkan, meskipun saya tidak bisa mengujinya sekarang.

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

Pyke, 7 byte

Dl3+R{!

Penjelasan:

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

JavaScript ES6, 41 40 byte

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

Mengambil seluruh string sebagai argumen. Saya tidak bisa menyimpan byte dengan menerima dua argumen berbeda karena jawaban saya akan melebur ke jawaban ES6 lainnya :(

Conor O'Brien
sumber
Saya menang kali ini, ES6. ;) Sintaks fungsi anonim Anda tidak cocok untuk saya not in.
Morgan Thrapp
@MorganThrapp Gahh, digagalkan lagi!
Conor O'Brien
tidak apa-apa saya mengerti , Anda memindahkan @MorganThrapp.
Shaun H
3

R, 26 byte

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

x adalah string, y adalah hurufnya, T dalam panggilan untuk grepl membuatnya tidak sensitif huruf.

mnel
sumber
3

Jolf, 6 7 byte

Begitu. Banyak. Sixes. SMS? Yah, coba saja di sini . Ganti dengan \x7f.

⌂ MiI'i
⌂_M      match with flags
   i     the input
    I    with another input
     'i  using i as a flag
Conor O'Brien
sumber
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
}
Gagang pintu
sumber
2

Batch, 53 byte

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

Menerima input sebagai dua argumen baris perintah. (Kutip argumen kedua jika perlu). Output 1 pada kesuksesan, tidak ada jika argumen pertama (tidak sensitif) ditemukan pada argumen kedua.

Neil
sumber
2

Mathematica, 33 32 byte

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

Saya suka kalau ## bisa digunakan. Input adalah string, lalu char.

Atau, versi case sensitif: (11 byte :)

StringFreeQ

Ya, hanya builtin.

CalculatorFeline
sumber