Это липограмма?


52

Липограмма - это блок слов, в котором отсутствует определенный символ. Прямо сейчас я избегаю нашего пятого символа 26, который обычно появляется. Вы должны знать, что я опускаю. Если нет, посмотрите «липограмму» и узнаете.

Твое задание

С символом, пробелом и следующей строкой (пробелы могут отображаться в этом; только с ASCII 32-126 символами) на входе, выведите ложь, если этот символ находится во входной строке, правда, если нет. Этот символ, который вы должны искать, всегда будет соответствовать двум диапазонам: от «A» до «Z» или от «a» до «z» (ASCII 65-90, 97-122). Не различайте столицы и некапиталы. Кроме того, не беспокойтесь о пробелах или знаках препинания. Обе программы и функции удовлетворяют. Кроме того, вы можете разделить входной символ и строку на два аргумента для программ или функций, и строка в качестве первого аргумента - это нормально.

иллюстрации

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.

Версия без липограммы

Липограмма - это серия слов, в которой буква отсутствует. Я пропустил букву «е» выше.

Ваша задача - взять символ и строку (которые могут включать пробелы) в качестве входных данных, разделенных пробелом или символом новой строки, и вывести ложное значение, если символ находится в строке, и истинно в противном случае. Вы можете предположить, что строка состоит только из печатных символов ASCII (коды символов 32-126). Символ всегда будет в английском алфавите, и нет разницы между строчными и прописными буквами. Символ не будет пробелом или символом. Вы можете написать программу или функцию. Для любого из них вы можете принять символ и строку в качестве отдельных аргументов, и строка может идти первой.


Для полных программ я могу взять ввод в виде отдельных строк?
Blue

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

Попробуйте онлайн!

Правда это когда текущее письмо выводится. Ложь - это когда ничего не выводится.


Так -эффективно ли операция дополнения ?
2012rcampion

@ 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 - ты там? ;-)
Цифровая травма

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
эм, подождите, нет, это слишком коротко
Конор О'Брайен


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

@ETHproductions matchпринимает только один аргумент. Второй аргумент регистрирует предупреждение консоли в Firefox 39 или более поздней версии и не будет работать в Firefox 47 вообще.
Нил

@Neil Я использую Firefox 44, и он, кажется, работает отлично.
ETHproductions

@ETHproductions Конечно, но у меня нет оснований полагать, что это работает в других браузерах, и скоро оно также перестанет работать в Firefox.
Нил

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

Почему это должно быть функцией? Почему бы просто не быть программой?
Фаза

@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

Вы должны указать свою оболочку. Для меня, bash на 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

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, игнорируя регистр, добавляя замененную регистром копию 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 Гах, снова сорвал!
Конор О'Брайен

все в порядке, я получил это , вы двигаетесь @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.