Вдохновленный этой цепочкой комментариев ...
Я хочу
enklact
выйти из этого испытания, но я не могу ...@ETHproductions to enklact (v): реализовать таблицу поиска, используя подраздел, состоящий из уникальных элементов.
Включение - очень полезный способ сжатия таблицы поиска. Например, допустим, у вас был следующий список цветов:
red
green
blue
yellow
purple
orange
Если вы хотите иметь возможность принимать цвет в качестве входных данных и возвращать его индекс в этом списке, очевидно, существует простой способ:
["red", "green", "blue", "yellow", "purple", "orange"].index(input())
Но есть способ, которым мы могли бы сделать это меньше байтов:
"rgbypo".index(input()[0])
Это работает, потому что первый (или 0-й) индекс каждой строки уникален. Этот пример очевиден, но иногда он немного сложнее. Что если мы хотим создать таблицу поиска для этого списка?
Sweet Onion Chicken Teriyaki
Oven Roasted Chicken
Turkey Breast
Italian BMT
Tuna
Black Forest Ham
Meatball Marinara
В этом случае мы не можем сделать это:
"SOTITBM".index(input()[0])
потому что есть два различных ввода, которые начинаются с 'T'
, а именно, "Тунец" и "Турция". Мы должны посмотреть на другой индекс. Если вы посмотрите на 4-й индекс каждой строки, вы заметите, что все они уникальны. Таким образом, мы можем сделать это ...
"enklact".index(input()[3])
В этом случае «строка enklaction» - это «enklact».
Это приводит нас к сегодняшнему вызову ...
Получив список строк, верните любую допустимую строку включения. Или, другими словами, при наличии списка строк возвращать любую новую строку, где каждая буква уникальна, и строка формируется путем соединения i-й буквы каждой строки.
Если нет допустимой строки включения, ваша отправка должна вернуть пустую строку или согласованное ложное значение. Как обычно, разрешены либо функции, либо полные программы, а форматы ввода / вывода допустимы (в пределах разумного).
Каждая строка будет содержать только печатный ASCII, и эта проблема чувствительна к регистру.
Это код-гольф , поэтому постарайтесь написать самую короткую программу на вашем языке!
Контрольные примеры
Input:
Programming
Puzzles
Code
Golf
Output (any one of these):
"ozdl"
"gzef"
Input:
the quick
brown fox
jumped over
lazy dogs
Output:
"tbjl"
"hrua"
"eomz"
" wpy"
"qne "
"if o"
"kxvs"
Note that "u dd" and "coog" are not valid.
Input:
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Output:
""
Input:
AbC
aBc
bbC
Output:
"Aab"
Input:
@#$%^_
Hello_World
How are you?
Output:
"#eo"
"$lw"
"%l "
"^oa"
Input:
a
ab
ac
Output:
""
Ответы:
Python3, 59 байт
Возвращает строку с enklact, в противном случае None
источник
Python 2 ,
686761 байтПопробуйте онлайн!
улучшения
Если вывод не должен быть строкой:
Python 3 , 49 байт
Попробуйте онлайн!
источник
max(`j`[2::5]for j in[""]+zip(*a)if len(set(j))==len(j))
, что работает, чтобы сохранить байт.Retina ,
4332 байтаПопробуйте онлайн! Изменить: Сохранено 11 байтов благодаря @MartinEnder. Объяснение:
Повторите, пока изменяется вход ...
... только если одна строка пуста или две строки начинаются с одного и того же символа ...
... удалить первый символ каждой строки. Следовательно, повторение останавливается, если либо а) все строки начинаются с разных символов, в этом случае условие не выполняется и ввод не изменяется, либо б) по крайней мере одна строка становится пустой, и в этом случае все символы в конечном итоге удаляются, в этот момент вход перестает меняться.
Соберите первый символ каждой строки. (Если решения не было, вышеприведенный цикл удалит все, и собирать будет нечего.)
источник
m
группу, похоже, что условный этап не распространяет параметр).Haskell , 71 байт
Попробуйте онлайн!
BMO сохранил 3 байта с помощью
any null x
→elem""x
.Эрджан Йохансен сохранил байт с помощью
sum[1|b<-y,a==b]<2
→filter(==a)[y]==[a]
.объяснение
Если выдает ошибку (
Prelude.head: empty list
), когда нет решения, все в порядке,|elem""x=""
может быть стерто за 61 байт .источник
filter(==a)y==[a]
Рубин , 38 байт
Попробуйте онлайн!
Спасибо ГБ за указание на ошибку.
источник
Pyth , 6 байт
Тестирование.
Вывод представляет собой одноэлементный список, как это разрешено по умолчанию ; list [] (пустой список, ложь) возвращается, если строка не может быть объявлена .
объяснение
Pyth , 5 байт
Это было бы правильно, если бы сбой считался ложным значением.
Тестирование.
источник
Haskell ,
7674 байтаПопробуйте онлайн! Возвращает последнюю действительную строку поиска или пустую строку, если такой строки не существует.
7169 байтЕсли допускается создание согласованного исключения в качестве ложного значения:
Попробуйте онлайн! Выдает
empty list
исключение, если строка не найдена, в противном случае возвращает первую допустимую строку.-2 байта благодаря Орджану Йохансену
источник
notElem x
можно сократить доall(/=x)
.Желе , 7 байт
Возвращает целое число 0, если строки не могут быть инклацифицированы.
Попробуйте онлайн!
Как это работает
источник
Perl 5 , 61 байт
Попробуйте онлайн!
источник
Stax ,
98 байтЗапустите и отладьте его
Объяснение (без упаковки):
источник
R , 127 байт
Попробуйте онлайн!
sapply
обычно возвращает a,matrix
когда всеlength(FUN(X[[i]]))
равны, кроме когдаlength(FUN(X[[i]]))==1
, и в этом случае он возвращает avector
. Для того, чтобы использовать матричные операции, нам нужно еще наsubstring
один шаг больше, чем нам нужно, чтобы гарантировать amatrix
, поэтому онx
распространяется наmax(nchar(S)+1)
.Затем мы фильтруем строки, в которых нет дубликатов и пустых строк. Поскольку мы можем вернуть только одну строку, мы берем первую, за исключением того, что, когда нет строк, соответствующих критериям, мы бы выдавали ошибку, поэтому добавляем дополнительную строку
""
в конец.Затем мы печатаем
enklact
строку ified или пустую строку.источник
R ,
11610795 байтR + pryr
Попробуйте онлайн!
база R
Попробуйте онлайн!
Эти два варианта экономят 9 байтов благодаря Giuseppe .
Объяснение:
Это эффективно усекает все строки в векторе
v
до длины самого короткого и повторяет последующие индексы. Затем проверяет, есть ли какие-либо дубликаты внутри выбранных букв, а если нет, вставляет их вместе и печатает с помощьюcat
. Если все индексы возвращают дублированные результаты, это печатает пустую строку.Все они заключены в анонимную
pryr
функцию,break
чтобы остановить цикл, или базовую функцию R, обнуляющую вектор, чтобы разорвать цикл.источник
R+pryr
или 107 байтов в базовой R.Japt, 9 байт
Принимает ввод как массив символьных массивов, возвращает массив символов или
undefined
Попробуйте это (добавьте новую строку в начале программы с кодом,
qR mq
чтобы принять ввод в виде строки, разделенной новой строкой, чтобы избавить вас от необходимости создавать массивы.)объяснение
источник
z æ_¬eZ¬â
05AB1E , 7 байтов
Попробуйте онлайн!
объяснение
источник
Python 3 , 75 байт
Работает со списками символов вместо строк. Возвращает False, если не существует допустимой строки включения.
Попробуйте онлайн!
источник
f=
включен в число байтов.C (gcc) , 161 байт
Попробуйте онлайн!
Каждая позиция символа проверяется на дублирование и пропускается, если дубликат обнаружен; это продолжается до тех пор, пока не закончится самая короткая строка. К сожалению, это только ASCII: строки DBCS / UTF-8 сильно нарушают эту функцию!
источник
Japt , 12 байт
Возвращает
undefined
для не энклактических строк.Попробуйте онлайн!
Объяснение:
источник
split
.Wolfram Language (Mathematica) , 54 байта
Попробуйте онлайн!
Принимает список символов в качестве входных данных, возвращает список символов. Содержит U + F3C7, соответствующий оператору «Transpose».
Возвращает
#1
и выбрасывает кучу игнорируемых ошибок, когда подходящей строки нет.Объяснение:
Дополните ввод так, чтобы каждая «строка» (список символов) была одинаковой длины. Это добавляет целое число
0
s (не строка"0"
s). Тогда перенести.Выберите строки, в которых нет целых чисел
0
s и которые содержат все уникальные символы.Получи первый.
источник
JavaScript (ES6), 66 байт
Возвращает либо строку, либо,
undefined
если решение не существует.Попробуйте онлайн!
комментарии
источник
Древесный уголь ,
2321 байт-2 байта благодаря @Neil !
Попробуйте онлайн!
источник
q
перестал всегда быть строкой б) StringMap начал работать на не-строки? В любом случае, вашRange
ненужный, экономя 2 байта.Шелуха , 9 байт
Попробуйте онлайн!
объяснение
источник
←ġLT
overḞz:∞ø
должно сохранить байт.Сетчатка ,
8156 байтПопробуйте онлайн!
-25 байт благодаря @Neil
Транспонировать прямоугольный текст в Retina на удивление сложно.
источник
Perl 6 , 27 байт
Попробуйте онлайн!
Увидев, что версия ruby была отклонена, я скопировал подход и использовал списки символов вместо строк. Мне это не нравится
Моя более старая и более правильная подача приведена ниже:
Perl 6 , 38 байт
Сплит, почтовый индекс, проверить уникальность, присоединиться.
Попробуйте онлайн!
источник
C (gcc) ,
121113110 байтПопробуйте онлайн!
Ungolfed
-3 благодаря потолку
Это злоупотребляет возможностью просто добавить 1 к строковому указателю в C, чтобы получить «хвост» строки. Основными хранителями байтов являются:
d+=x[y[i++]=*(*_)++]++
который добавляет первый символ первой строки_
кy
, продвигает первую строку,_
чтобы удалить свой первый символ, добавляетx
запись с этим символомd
и увеличивает этуx
записьq=d?*x:puts(y)
который печатает,y
еслиd
не равен нулю при установкеq
на ненулевое значение, или устанавливаетсяq
на ненулевое значение, если первый элементx
ненулевой (если бы мы были в конце одной из строк, то указанный элемент был бы ненулевым нуль)Редактировать: побрить байты, переключаясь из цикла while в рекурсивный вызов хвоста и удаляя скобки из цикла for.
источник
for(d=i=0;*_;)
вместоfor(d=0,i=0;*_;++_)
и*(*_++)++]++;d=d?!*x*f(s)
вместо*(*_)++]++;d=d?*x?0:f(s)
Pyth, 13 байт
Попробуй здесь
источник
Красный , 139 байт
Попробуйте онлайн!
Объяснение:
Принимает ввод как блок (список) строк. Возвращает строку включения или
none
иным образом.источник
Röda ,
8077 байтПопробуйте онлайн!
-1 байт благодаря шарлатану коров
Объяснение:
try
Используется ключевое слово , чтобы отклонить ошибки , которые возникают , еслиi
больше , чем длина самой маленькой строки вa
, или нет ответа иhead
вызывает ошибку.источник
seq
чтобы сохранить байтJava 10, 106 байт
Выдает ошибку вместо возврата пустой строки, если решение не может быть найдено. Ввод - это символьная матрица.
Попробуйте онлайн.
Объяснение:
источник
Clojure, 59 байт
Возвращает список списков персонажей.
источник
APL + WIN,
3533 байта2 байта сохранены благодаря Адаму
Запрашивает строки текста в виде символьной матрицы:
Попробуйте онлайн! Предоставлено Dyalog Classic
Объяснение:
источник
⊂[1]
→,⌿