Це ліпограма?


52

Ліпограма - це блок слів, який пропускає певний символ. Зараз я уникаю нашого п'ятого символу з 26, які зазвичай з’являються. Ви вже повинні знати, що я пропускаю. Якщо ні, шукайте "ліпограму", і ви дізнаєтесь.

Ваше завдання

З знаком char, пробілом та наступним рядком (пробіли можуть відображатися в цьому; із введенням лише ASCII 32-126 символів), виводяться помилково, якщо цей char є у вхідному рядку, truthy якщо ні. Ця ознака, яку ви повинні шукати, завжди вміщуватиметься в два проміжки: "A" до "Z" або "a" to "z" (ASCII 65-90, 97-122). Не розрізняйте столиці та не-столиці. Крім того, не турбуйтеся про пробіли чи розділові знаки. І програми, і функції задовольняють. Крім того, ви можете розділити вхідну діаграму та рядок на два аргументи для програм або функцій, а рядок, як перший аргумент, добре.

Ілюстрації

Truthy

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.

Неліпограмована версія

Ліпограма - це низка слів, яка залишає поза буквою. Я випустив букву "е" вище.

Ваше завдання полягає в тому, щоб взяти символ і рядок (яка може включати пробіли) як вхідні дані, розділені пробілом або новою лінією, і вивести помилковий текст, якщо символ знаходиться в рядку, а трикутник - інакше. Ви можете припустити, що рядок складається виключно з друкованих символів 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!
Ніл

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"

Спробуйте в Інтернеті!

Truthy - це коли виводиться поточний лист. Фальси - це коли нічого не виводиться.


Так -ефективно робить операцію на доповнення ?
2012р. Кампіон

@ 2012rcampion Так, це правильно. Але лише тоді, коли обидва значення не є цілими числами.
Аднан

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

Баш, 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 Я вважав це, але подумав, що це буде трохи схематично. Можливо, тема, яку потрібно обговорити на мета.
Дверна ручка


Гарна знахідка @Dennis!
Цифрова травма

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.
Ніл

7

Пітон 3, 36

Доводиться ігнорувати випадок напрочуд дорого.

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

Вважає аргументи як (char, string)



6

О, 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, це друкує 1, незалежно від введення, слідуючи шаблону, який ви надаєте. (Я не знаю, чому, але, знаю, я не знайомий <<<.) (І використовуючи звичайний STDIN (ні <<<), я отримую 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, але я не пам'ятаю, хто з них робить)
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

Сітківка, 11

iA`^(.).*\1

Я не впевнений, що в Retina вважається правдою / хибністю, це буде перегукуватися з рядком, якщо це ліпограма для даного символу, і він поверне порожню рядок, якщо її немає.

Це також буде працювати для багаторядкового введення.

Спробуйте в Інтернеті!


Порожній рядок є хибним, так що рахується.
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.

Зачекайте, желе не виграє? Повинен бути спосіб гольфу далі!
Загальний користувач

Не тоді, коли залучаються рядки ...
Денніс

Це необхідно виправити.
CalculatorFeline



4

Пітон, 34 байти

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

Перевіряє наявність символів , cперебуваючи в рядку s, ігноруючи регістр, приєднуючи до регістру місць копії sз s. Заперечення робиться за допомогою not, що виглядає тривалим, але я не бачу кращого. Це однакова довжина:

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

Ви не можете опустити паронів, інакше Python буде перебивати вираз у вигляді прикутого тризначного нерівності форми _ 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"))

Приймає весь аргумент як аргумент. Я не можу зберегти байти, прийнявши два різні аргументи, тому що тоді моя відповідь перетвориться на іншу відповідь ES6 :(


Я цього разу перемагаю, ES6. ;) Ваш анонімний синтаксис функції не відповідає моєму not in.
Морган Трапп

@MorganThrapp Gahh, знову зірвався!
Conor O'Brien

це добре, я зрозумів це , ти рухаєшся @MorganThrapp.
Шон Н

3

R, 26 байт

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

x - рядок, y - літера, T у заклику до grepl робить її нечутливою.



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

Приймає введення як два аргументи командного рядка. (Цитуйте другий аргумент, якщо необхідно.) Виводить результат 1 про успіх, нічого, якщо перший аргумент (нечутливий) знайдений у другому.


2

Mathematica, 33 32 байти

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

Мені подобається, коли ## можна використовувати. Введіть рядок, потім символ.

Або версія з урахуванням регістру: (11 байт :)

StringFreeQ

Так, просто вбудований.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.