มันเป็น lipogram หรือไม่?


52

lipogram เป็นบล็อกของคำที่ไม่ใช้สัญลักษณ์ใด ๆ ตอนนี้ฉันกำลังหลีกเลี่ยงสัญลักษณ์ที่ห้าของเราที่ 26 ที่ปรากฏโดยทั่วไป คุณควรรู้ในสิ่งที่ฉันไม่สนใจ ถ้าไม่ค้นหา "lipogram" แล้วคุณจะรู้

งานของคุณ

ด้วยอักขระถ่านเปล่าและสตริงต่อไปนี้ (ช่องว่างอาจปรากฏขึ้นในนี้มีเพียง ASCII 32-126 ตัวอักษร) ในการป้อนข้อมูลการส่งออกเท็จถ้าถ่านนี้อยู่ในสายการป้อนข้อมูลความจริงถ้าไม่ ถ่านนี้ที่คุณต้องมองหามักจะมีสองช่วง: "A" ถึง "Z" หรือ "a" ถึง "z" (ASCII 65-90, 97-122) อย่าแยกความแตกต่างระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์ใหญ่ นอกจากนี้ไม่ต้องกังวลเกี่ยวกับช่องว่างหรือสัญลักษณ์เครื่องหมายวรรคตอน ทั้งโปรแกรมและฟังก์ชั่นตอบสนอง นอกจากนี้คุณสามารถแยกอินพุต char และ string ออกเป็นสอง args สำหรับโปรแกรมหรือฟังก์ชั่นและ string ที่ arg แรกไม่เป็นไร

ภาพประกอบ

Truthy

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

Falsy

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.

เวอร์ชันที่ไม่ใช่ lipogrammed

lipogram เป็นชุดของคำที่แยกออกจากตัวอักษร ฉันทิ้งตัวอักษร "e" ไว้ด้านบน

งานของคุณคือการใช้ตัวอักษรและสตริง (ซึ่งอาจรวมถึงช่องว่าง) เป็นอินพุตคั่นด้วยช่องว่างหรือบรรทัดใหม่และผลลัพธ์ที่ผิดถ้าอักขระอยู่ในสตริงและความจริงเป็นอย่างอื่น คุณอาจคิดว่าสตริงนั้นประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เท่านั้น (รหัส char 32-126) ตัวละครจะเป็นตัวอักษรภาษาอังกฤษเสมอและไม่มีความแตกต่างระหว่างตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ตัวละครจะไม่เว้นวรรคหรือเป็นสัญลักษณ์ คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น คุณอาจใช้อักขระและสตริงเป็นอาร์กิวเมนต์แยกกันและสตริงอาจมาก่อน


สำหรับโปรแกรมเต็มรูปแบบฉันสามารถรับอินพุตเป็นบรรทัดแยกกันได้หรือไม่
บลู

@muddyfish: ใช่
El'endia Starman

... และสตริงตามหาเรื่องแรกก็โอเค
edc65

@ edc65: โอ้ฉันชอบที่ดีกว่า
El'endia Starman

1
คุณควรลอง "และสตริงเป็นของคุณหาเรื่องแรกคือโอเค." หรือการกำหนดค่าที่คล้ายกัน
mbomb007

คำตอบ:



25

Javascript ES6 34 26 23 ไบต์

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

ขอบคุณ 8 ไบต์ที่โกนแล้ว @ MartinBüttner


9
ว้าวฉันไม่ทราบว่ามี/iผลกระทบ\1!
Neil

18

05AB1E , 7 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"

ลองออนไลน์!

ความจริงก็คือเมื่อตัวอักษรปัจจุบันจะถูกส่งออก Falsy คือเมื่อไม่มีสิ่งใดแสดงผล


การดำเนินการเสริมจึง-มีประสิทธิภาพหรือไม่
2012rcampion

@ 2012rcampion ใช่ถูกต้อง แต่เมื่อค่าทั้งสองไม่ใช่จำนวนเต็ม
Adnan

14

TeaScript, 5 3 ไบต์

AµN

อ๊ะ! ฉันลืมเกี่ยวกับการป้อนข้อมูลโดยนัย! TeaScript จะแทรกโดยอัตโนมัติx.(อินพุต) ที่จุดเริ่มต้น ฉันสามารถตรวจสอบว่ามันมีอินพุตอื่น ๆ (ในตัวแปรµ) และดังนั้นไม่ ( N) ฉันเดาว่าข้อดีที่ดีที่สุดของ TeaScript ที่นี่คือการป้อนข้อมูลโดยนัย

ลองออนไลน์

คำอธิบาย

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

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

ว้าว. ในตัวมาก ที่ทำให้ฉันนึกถึง Japt มีตัวเดียวกันนี้ ... ลดอีกสองไบท์ :)
ETHproductions

12

Bash, 16 11 ไบต์

grep -iv $1

-iเป็นแฟ-vล็กตัวพิมพ์เล็กและตัวพิมพ์ใหญ่กลับด้าน(ตรวจสอบการไม่ตรงกัน)

ต้องระบุอักขระเป็นอาร์กิวเมนต์บรรทัดคำสั่งและสตริงการทดสอบบน STDIN

ลดลง 5 ไบต์ด้วยความช่วยเหลือของ@ DigitalTrauma !

ตัวอย่างการวิ่ง:

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 และบรรทัดคำสั่งเป็นวิธีป้อนข้อมูล - ฉันเคยทำมาก่อน - แต่บางทีอาจมีเมตาดาต้าที่ฉันพลาดไป ...
Digital Trauma

@ DigitalTrauma ฉันคิดว่า แต่คิดว่ามันจะเป็นร่างสั้น ๆ อาจเป็นหัวข้อที่จะกล่าวถึงในเมตาดาต้า
Doorknob


หาดี @Dennis!
Digital Trauma

1
เราช่วยให้^Dผู้ใช้รายอื่นเพิ่มความคิดเห็นในคำตอบนี้ได้ไหม? @ Downgoat - คุณอยู่ที่นั่น? ;-)
Digital Trauma

12

Japt, 12 6 4 ไบต์

!VoU

ทดสอบออนไลน์!

คำตอบ TeaScript ของ @ Downgoat ทำให้ฉันนึกถึงว่า 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

6
อืมรอไม่สั้นเกินไป
Conor O'Brien


9

JavaScript (ES6), 29 ไบต์

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

4
คุณสามารถตอบคำถามเป็นc=>s=>!RegExp(c,"i").test(s)บันทึกไบต์
Conor O'Brien

c=>s=>!s.match(c,'i')คือ 21. :)
ETHproductions

@ETHproductions รับmatchเพียงหนึ่งอาร์กิวเมนต์ อาร์กิวเมนต์ที่สองบันทึกคำเตือนคอนโซลใน Firefox 39 หรือใหม่กว่าและจะไม่ทำงานใน Firefox 47 เลย
Neil

@ ไม่มีฉันใช้ Firefox 44 และดูเหมือนว่าจะทำงานได้อย่างสมบูรณ์แบบ
ETHproductions

@ETHproductions แน่นอน แต่ฉันไม่มีเหตุผลที่จะเชื่อว่ามันทำงานได้ในเบราว์เซอร์อื่นและมันก็จะหยุดทำงานใน Firefox เร็ว ๆ นี้
Neil

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

เหตุใดจึงต้องมีฟังก์ชัน ทำไมไม่เพียงแค่เป็นโปรแกรม
เฟส

@ เฟสฉันไม่สามารถแยกแยะสิ่งที่ถ่านแตกได้ ผมค่อนข้างมั่นใจว่ามันสั้นลงเมื่อเทียบกับฟังก์ชั่น
สปาเก็ตตี้

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 สิ่งนี้จะพิมพ์ 1 ไม่ว่าอินพุตจะทำตามเทมเพลตที่คุณให้ (ฉันไม่รู้ว่าทำไม แต่หลังจากนั้นฉันไม่คุ้นเคย<<<) (และใช้ STDIN ปกติ (ไม่<<<) ฉันจะได้ 1 ถ้าตัวอักษรเป็นตัวอักษรตัวสุดท้ายในสตริงเพราะคุณไม่ได้ chomp ตัวอักษร .)
msh210

@ msh210 คุณสามารถใช้printf "this is a lipogram\ne\n" | perl -pe'$_=lc!~lc<>'แทน <<< เป็นไวยากรณ์ทุบตี
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 แต่ฉันจำไม่ได้ว่า
อันไหน

5

Julia 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

ฉันไม่แน่ใจว่าสิ่งที่นับว่าเป็นความจริง / เท็จใน Retina นี้จะสะท้อนเส้นถ้ามันเป็น lipogram สำหรับตัวละครที่กำหนดและมันจะกลับสตริงที่ว่างเปล่าถ้ามันไม่ได้

สิ่งนี้จะทำงานสำหรับอินพุตหลายบรรทัด

ลองออนไลน์!


สตริงว่างเปล่าเป็นเท็จดังนั้นจะนับ
El'endia Starman



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

Python ขนาด 34 ไบต์

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

ตรวจสอบหาตัวละครที่cอยู่ในสตริงsไม่สนใจกรณีโดยท้ายสำเนากรณีเปลี่ยนของการs sการคัดค้านทำด้วยnotซึ่งดูยาว แต่ฉันดูไม่ดีขึ้น ความยาวเท่ากัน:

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

คุณไม่สามารถละเว้น parens _ in _ < _หรืออื่นหลามจะตีความการแสดงออกเป็นล่ามโซ่ความไม่เท่าเทียมกันสามค่าของรูปแบบ

Python 3.5 ควรอนุญาตให้ 33 ไบต์ผ่านการแปลงชุด แต่ฉันไม่สามารถทดสอบได้ตอนนี้

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


3

JavaScript ES6, 41 40 ไบต์

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

รับค่าสตริงทั้งหมดเป็นอาร์กิวเมนต์ ฉันไม่สามารถบันทึกไบต์ด้วยการยอมรับข้อโต้แย้งที่แตกต่างกันสองข้อเพราะคำตอบของฉันจะละลายลงในคำตอบ ES6 อื่น ๆ :(


ฉันชนะในครั้งนี้ ES6 ;) not inไวยากรณ์ฟังก์ชั่นที่ไม่ระบุชื่อของคุณคือการจับคู่ไม่มีฉัน
Morgan Thrapp

@ MorganThrapp Gahh สกัดกั้นอีกครั้ง!
Conor O'Brien

ไม่เป็นไรฉันเข้าใจแล้วคุณย้าย @ MorganThrapp
Shaun H

3

R, 26 ไบต์

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

x คือสตริง y คือตัวอักษร T ในการเรียกไปยัง grepl ทำให้ตัวพิมพ์เล็กและตัวพิมพ์เล็ก


3

Jolf, 6 7 ไบต์

ดังนั้น. จำนวนมาก แตก ข้อความ? ดีลองนี่กระนั้น แทนที่ด้วย\x7f

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


2

แบตช์ 53 ไบต์

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

ยอมรับอินพุตเป็นสองอาร์กิวเมนต์บรรทัดคำสั่ง (อ้างถึงอาร์กิวเมนต์ที่สองหากจำเป็น) เอาท์พุท 1 เมื่อประสบความสำเร็จไม่มีสิ่งใดหากพบอาร์กิวเมนต์แรก (อย่างไม่มีนัยสำคัญ) ในวินาที


2

Mathematica, 33 32 ไบต์

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

ฉันชอบเมื่อสามารถใช้ ## อินพุตคือสตริงจากนั้นอักขระ

หรือรุ่นที่เล็กและใหญ่: (11 ไบต์ :)

StringFreeQ

ใช่เพียงแค่ในตัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.