Тісно-в'язані слова


22

Вступ

Відповідно до публікації Ренда Аль'Тхора в загадковому СЕ, близьким словом є будь-яке слово, яке містить три букви в алфавітному порядку (у будь-якому порядку).

Такі слова, як освіта , foghorn та cabaret , вважаються близькими словами, тоді як слова, як навчання , klaxon та виконувати , не є близькими словами.

Виклик

Завдання полягає в тому, щоб кодувати гольф програмою, здатною взяти одне слово як вхідне (передбачається нижній регістр для всіх намірів і цілей) та повернути вихід, який (за наявності) перераховує всі послідовні набори букв (також у нижньому регістрі), якщо це - це слово зв'язане, і порожній вихід, якщо воно не є близьким словом.

Приклади

Input: education
Output: cde

Input: foghorn
Output: fgh

Input: cabaret
Output: abc

Input: hijacking
Output: ghi, hij, ijk

Input: pneumonia
Output: mno, nop

Input: klaxon
Output: <<no output>>

Input: perform
Output: <<no output>>

Input: learning
Output: <<no output>>

Правила

  1. Оскільки вхідним слід вважати одне маленьке слово, а вихід повинен мати малі регістри, характер виводу буде змінюватися залежно від вибору вашої мови кодування. Виберіть форму виводу, яка найкраще відповідатиме характеру завдання, будь то STDOUT, вихід файлів, масив тощо.
  2. Оскільки це код-гольф, очевидним переможцем буде найменша кількість байтів.
  3. Ніяких дурних бійниць .
  4. Я не прийматиму відповідей, які мають послідовні букви в не алфавітному порядку ... Тому cabне вважатимуться придатним результатом cabaret, наприклад.
  5. Особлива примітка, хоча "трійки" не обов'язково повинні бути в алфавітному порядку, але символи в трійках повинні бути ... так що, наприклад, у випадку слова "продуктивність", наприклад, результат mno,nopбуде прийнятий, як буде nop,mno. У разі слова «викрадення», є шість способів , що трійки ghi, hijі ijkможуть бути організовані у вигляді списку, а всі шість перестановок є прийнятними в якості вихідного сигналу.

Окрім цього, на своїх марках встановіть, гольф!


Чи може висновок бути двовимірним масивом знаків із кожним набором трьох послідовних букв у стовпці ?
Луїс Мендо

@LuisMendo Чи можете ви надати мені приклад, щоб я міг його візуалізувати?
WallyWest

Спробуйте мій код без остаточного !І з іншим словом, оскільки поточний дає такий же результат :-)
Луїс Мендо

@LuisMendo - основний стовпець MATL чи щось таке?
Мальтісен

1
Чи добре виведення у форматі масиву кортежів, тобто вихід для pneumoniaможе бути [('m','n','o'),('n','o','p')])?
Р. Кап

Відповіді:


8

05AB1E , 7 6 5 байт

Код:

3ãAŒÃ

Пояснення:

3ã      # Cartesian product × 3 with input
  AŒ    # All substrings of the alphabet
    Ã   # Setwise intersection

Використовує кодування CP-1252 . Спробуйте в Інтернеті!


Це просто геній ... Мені доведеться спробувати створити виклик, який штовхає цю мову до межі ...;)
WallyWest,

10

Python 3,5, 68 байт

w=input()
a=0
while 1:s='%c'*3%(a,a+1,a+2);a+=1;{*s}-{*w}or print(s)

Друкує вихідні рядки та закінчується помилкою, коли значення символу стає занадто великим.

Створює всі рядки з трьох послідовних і друкує ті, що є підмножиною вхідного слова.


8

Pyth - 11 10 8 7 байт

Метод супер грубої сили.

@^z3.:G

Тестовий сюїт .

@            Setwise intersection, finds common strings between the two lists
 ^           Cartesian product
  z          Input
  3          Of length 3
 .:          Substrings. Without second input finds all substrings which is ok
  G          Lowercase aphabet

7

Желе , 7 байт

ØaẆfṗ3$

Це монадичне посилання. Спробуйте в Інтернеті!

Як це працює

ØaẆfṗ3$  Monadic link. Argument: s (string)

Øa       Yield the lowercase alphabet, i.e., a := "abcdefghijklmnopqrstuvwxyz".
  Ẇ      Window; yields all substrings of a.
      $  Combine the two links to the left into a monadic chain.
    ṗ3   Take the third Cartesian power of s, yielding all combinations of three
         characters that can be formed from the letters in s.
   f     Filter; keep only those substrings of a that appear in the Cart. power.

7

JavaScript (ES6), 95 90 байт

f=
s=>[...s].map(c=>a[parseInt(c,36)]=c,a=[])&&a.map((c,i)=>c+a[i+1]+a[i+2]).filter(c=>!c[3])
;
<input oninput="o.textContent=f(this.value).join`, `"><div id=o>

Пропущені значення об'єднуються як " undefined," Отриманий рядок містить більше 3 символів. Я запозичив !c[3]трюк у @ETHproductions, щоб зберегти 5 байт.


2
Досить збігається undefinedсловосполучення;)
WallyWest,

Чому parseInt(c,36)замість c.charCodeAt()?
Тит

@Titus Я думаю, це не має ніякого значення, я просто звик використовувати parseIntв коді гольф.
Ніл


4

PHP, 100 байт

for($a="abc",$i=98;$i<123;$a=substr($a,1).chr(++$i))if(strstr(count_chars($argv[1],3),$a))echo"$a,";

приймає введення як аргумент командного рядка; виводить коду в кінці. бігати з -r.


1
for($s=join(range(Z,z));$a=substr($s,++$i,3);)- коротший спосіб створення $ a. Він, звичайно, перевіряє купу розділових знаків, а також деякі 2-символьні серії, але оскільки вхід є лише малими літерами, і потрібно, щоб він знайшов 3 символи, що добре.
користувач59178,

for($a="ab ", $ i = 98; $ i <123;)! strstr (count_chars ($ argv [1], 3), $ a = substr ($ a, 1) .chr (++ $ i))?" print "$ a", `зберігає 2 байти. Дуже приємно, я спробував інші способи в PHP, але не можу дістатись до байтів вашого коду. Я не впевнений, чи потрібен вам пробіл після коми
Йорг Гюльсерманн,

4

C, 175 174 байт

main(_,a,m,n)char**a;{char*s=a[1],*t=s;while(*++s)while(s>t&&(n=s[-1])>=*s){m=(*s^n)?*s:0;*s=n;*--s=m;!*t&&++t;}for(;t[1]&t[2];++t)*t==t[1]-1&&*t==t[2]-2&&printf("%.3s ",t);}

з відступом:

main(_,a,m,n)char**a;
{
  char*s=a[1],*t=s;
  while(*++s)
    while(s>t&&(n=s[-1])>=*s){
      m=(*s^n)?*s:0;
      *s=n;
      *--s=m;
      !*t&&++t;
    }
  for(;t[1]&t[2];++t)
    *t==t[1]-1&&*t==t[2]-2&&printf("%.3s ",t);
}

Виконуючи сортування, він замінює дублікати значень на 0, ці 0-ти сортуються до початку слова. Шукати послідовних значень тоді тривіально.


1
Ласкаво просимо на сайт!
DJMcMayhem

1
Так, ласкаво просимо до PPCG! Чудова робота над вашою відповіддю: C - не один із найпростіших для гольфу!
WallyWest

3

MATL , 13 байт

2Y23YCtjmAZ)!

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

2Y2    % Push string of lowercase alphabet
3YC    % 2D char array with sliding blocks of size 3, each on a column
t      % Duplicate
j      % Take input
m      % Member function: true for elements of the 2D array that are in the input
A      % All: true for columns that consist of all true values
Z)     % Use as logical index into the columns of the 2D char array
!      % Transpose. Implicitly display

3

Haskell, 48 байт

f w=filter(all(`elem`w))[take 3[c..]|c<-['a'..]]

Створює всі трійки з трьох послідовних символів, приймає ті, які використовують лише букви у введенні.


53 байти:

f w=filter(all(`elem`w))[[pred$pred c..c]|c<-['c'..]]

У списку ['c'..]містяться всі символи unicode 'c'зсередини. Зрозуміння списку [[pred$pred c..c]|c<-['c'..]]перетворює їх у всі рядки з 3-х послідовних символів "abc". Ми робимо крок назад, [pred$pred c..c]а не вперед, [c..succ$succ c]щоб уникнути помилки при прийнятті наступника найвищого символу Unicode.

Ці трійки фільтруються для тих, хто використовує лише букви у введенні.


3

Perl, 36 байт

Включає +1 для -n

Введіть дані про STDIN:

perl -nE 'join("",a..z)=~/[$_]{3}(?{say$&})^/' <<< "hijacking"

Просто код:

join("",a..z)=~/[$_]{3}(?{say$&})^/

3

T-SQL, 153 байти

Довелося відреагувати на коментар WallyWest, про те, що це було давно з часу останньої відповіді TSQL. Відповідь частково надихнула відповідь Брайана Дж

Гольф:

USE MASTER
DECLARE @ varchar(max)='hijacking'

;WITH C as(SELECT distinct ascii(substring(@,number,1))z FROM spt_values)SELECT CHAR(C.z)+CHAR(D.z)+CHAR(E.z)FROM C,C D,C E WHERE c.z+1=d.z and d.z=e.z-1

Скрипка

Безголівки:

USE MASTER -- can be left out if the master database is already being used
DECLARE @ varchar(max)='hijacking'

;WITH C as
(
  SELECT distinct ascii(substring(@,number,1))z
  FROM spt_values
)
SELECT CHAR(C.z)+CHAR(D.z)+CHAR(E.z)
FROM C,C D,C E
WHERE c.z+1=d.z and d.z=e.z-1

1
Це розумно! Навіть не знав про цей стіл. Добре, що немає слів довше 2048 букв!
Брайан J

2

Haskell, 63 60 52 байти

f w=[x|x<-take 3<$>scanr(:)"_"['a'..],all(`elem`w)x]

Приклад використання: f "hijacking"-> ["ghi","hij","ijk"].

scanr(:)"_"['a'..]будує список з хвостами списку всіх символів unicode, починаючи з 'a'і дозволяє закінчуватися а '_', тобто ["abcde...\1114111_", "bcde...\1114111_", "cde...\1114111_", ..., "\1114109\1114110\1114111_", "\1114110\1114111_", "\1114111_", "_"]. Потім беремо до трьох символів кожної струни і прив’язуємо до неї x. Зберігайте все, xде кожна літера є вхідним параметром w.

Редагувати: @xnor збережено 3 7 байт. Спасибі!


a:b:c:_Хтось знає, чи можу я зафіксувати перші три елементи списку за допомогою @ -pattern?
німі

Я не знаю про @ -pattern, але ви можете видалити 'z'верхню межу і просто дозволити спробувати всі символи.
xnor

Захоплення цих перших трьох елементів справді дратує. Найкраще, що я бачу, - це просто використовувати takeта видалити порожній рядок:f w=[x|x<-init$take 3<$>scanr(:)""['a'..],all(`elem`w)x]
xnor

@xnor: приємно. ми можемо почати scanrз "". замість ""і опустіть init$.
німі

2

T-SQL (SQL Server 2014), 217 байт

Гольф

declare @ table(a char)declare @i int=1while @i<=len(@a)begin insert into @ values(SUBSTRING(@a,@i,1))set @i+=1 end select distinct t.a+u.a+v.a from @ t,@ u,@ v where ASCII(t.a)+1=ASCII(u.a)and ASCII(u.a)+1=ASCII(v.a)

Використання

Спочатку оголосити змінну @a якоюсь символом та призначити вхід таким чином

declare @a varchar(max) = 'pneumoultramicroscopicsilicovolcanoconiosis'

Я не вважав декларацію частиною свого коду, але не знайшов стандарт sql для введення, тому я готовий змінити свій підрахунок

Висновком буде або один рядок для кожної трійки, або відсутні рядки, якщо слово не є в'язаним

Безумовно

declare @temp table ( letter char(1) ) -- table to hold each letter of the word

declare @i int = 1

while @i <= len(@input) -- split each letter, and each row in @temp will have one letter
begin
    insert into @temp values (SUBSTRING(@input, @i, 1))
    set @i = @i + 1
end

-- join the letters table to itself to get three letter triples, where the three are in adjacent increasing order
-- use distinct because there might be duplicates in the word
select distinct t1.letter + t2.letter + t3.letter
from @temp t1
cross apply @temp t2
cross apply @temp t3
where ASCII(t1.letter) + 1 = ASCII(t2.letter)
and ASCII(t2.letter) + 1 = ASCII(t3.letter)

декларація не зараховується, оскільки ми маємо справу з кодом, який потрібен для виконання необхідної функціональної функції після декларування в цьому випадку. Чудова робота, якась пора була, оскільки я бачив рішення SQL для вирішення проблеми. Чудова робота!
WallyWest

Я переграв ваш сценарій до 185 символів, ось версія без вогків. Ви можете перевірити свою відповідь , а також
t-clausen.dk

2

R, 220 байт

Моє рішення досить просте. Він проходить цикл через можливі три комбінації літер, проходить цикл та перевіряє символи введеного рядка проти трьох літер підряд та додає їх до рядка. Потім рядок друкується лише тоді, коли знайдено три літери (c == 4).

f<-function(w){if(nchar(w)>2){for(i in 1:24){
c<-1
t<-""
for(k in 1:3){for(j in 1:nchar(w)){if(substr(w,j,j)==intToUtf8(95+k+i)&c<4){
t<-paste(t,substr(w,j,j),sep="")
c<-c+1
break
}}}
if(c==4){print(paste(t))}}}}

введення-виведення

> f("education")
> [1] "cde"
> > f("foghorn")
> [1] "fgh"
> > f("cabaret")
> [1] "abc"
> > f("hijacking")
> [1] "ghi"
> [1] "hij"
> [1] "ijk"
> > f("pneumonia")
> [1] "mno"
> [1] "nop"
> > f("klaxon")
> > f("perform")
> > f("learning")
> > 

2

Python 3.5, 114 111 88 80 79 bytes:

lambda X,W=[*map(chr,range(65,91))]:[i*({*X}>={*i})for i in zip(W,W[1:],W[2:])]

Анонімна лямбда-функція. Приймає введення як великі рядки та виводить масив кортежів, заповнений трьома великими символами, що представляють усі набори 3послідовних літер, що з’являються у вводі. Наприклад,

[(), (), (), (), (), (), ('G', 'H', 'I'), ('H', 'I', 'J'), ('I', 'J', 'K'), (), (), (), (), (), (), (), (), (), (), (), (), (), ()]

буде вихідним для введення HIJACKING. Цей вихідний формат був підтверджений нормальним в ОП. Так є єдиний верхній формат введення. Тим НЕ менше, якщо ви хочете ввести в тільки в нижньому регістрі, просто замінити range(65,91)з range(97,123), додавши ще один байт.

Repl.it з усіма тестовими справами!

Пояснення:

В основному, що тут відбувається:

  1. Список, Wстворюється за допомогою W=[*map(chr,range(65,91))], який містить всі великі літери англійського алфавіту. Через це завжди потрібно вводити великі літери .

  2. Кожен кортеж iу списку, який ми будемо називати U, містить усі три послідовні кортежі літер, тобто:

    U=[('A','B','C'),('B','C','D'),('C','D','E'),...]
    

    створено zip(W,W[1:],W[2:]), кожен iповністю додаються в список виведення, поки всі елементи в наборі версії i( {*i}) в заданій версії введення X( {*X}), тобто {*X}>={*i}, тобто Xє надбудовою з i. Інакше до списку додається порожня версія i( ()).

  3. Після того, як всі кортежі були пройдені з повністю доданими відповідниками, список повертається як кінцевий результат.


2

Скала, 59 байт

(s:Set[Char])=>'a'to'z'sliding 3 filter{_.toSet subsetOf s}

Безголівки:

(s:Set[Char]) => ('a' to 'z').sliding(3).filter{threeChars => threeChars.toSet.subsetOf(s)}

Пояснення:

(s:Set[Char])=>             //define a function with a Set of Chars called s as an argument
'a' to 'z'                  //create a Range of characters 'a' to 'z'
sliding 3                   //create an Iterator(Seq(a, b, c), Seq(b, c, d), Seq(c, d, e), ... , Seq(x, y, z))
filter{_.toSet subSetOf s}  //keep only the triplets which are a subset of s

2

Власне, 13 байт

Пропозиції з гольфу вітаються. Спробуйте в Інтернеті!

S3@╧`εj`M3úV∩

Ungolfing

                Implicit input string s.
S               sorted(s).
 3@╧            Push all length-3 combinations of s.
    `εj`M       Join all of those combinations into single strings.
         3úV    Push all slices of the lowercase alphabet of length 1 <= n <= b
            ∩   Push the intersection of the combinations and slices.
                Implicit return.

1

Java 7, 230 байт

String c(char[]q){java.util.Arrays.sort(q);char a[]=new String(q).replaceAll("(.)\\1","$1").toCharArray(),c=97,i=2;String r="",z="",s;for(;c<'z';z+=c++);while(i<a.length)if(z.contains(s=""+a[i-2]+a[i-1]+a[i++]))r+=s+" ";return r;}

Це, швидше за все, може бути гольф, але ця проблема була набагато жорсткішою, ніж я спочатку думав на Яві.

Невикористані та тестові справи:

Спробуйте тут.

class M{
  static String c(char[] q){
    java.util.Arrays.sort(q);
    char a[] = new String(q).replaceAll("(.)\\1", "$1").toCharArray(),
         c = 97,
         i = 2;
    String r = "",
           z = "",
           s;
    for(; c < 'z'; z += c++);
    while(i < a.length){
      if(z.contains(s = "" + a[i-2] + a[i-1] + a[i++])){
        r += s+" ";
      }
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(c("education".toCharArray()));
    System.out.println(c("foghorn".toCharArray()));
    System.out.println(c("cabaret".toCharArray()));
    System.out.println(c("hijacking".toCharArray()));
    System.out.println(c("pneumonia".toCharArray()));
    System.out.println(c("klaxon".toCharArray()));
    System.out.println(c("perform".toCharArray()));
    System.out.println(c("learning".toCharArray()));
    System.out.println(c("dblacghmeifjk".toCharArray()));
  }
}

Вихід:

cde 
fgh 
abc 
ghi hij ijk 
mno nop 



abc bcd cde def efg fgh ghi hij ijk jkl klm 

Просто треба запитати, чому Java? Це не найголовніша з мов ...? +1 за зусилля, звичайно ...
WallyWest

1
@WallyWest Ну, я розробник Java у повсякденному житті. І я знаю, що ніколи не виграю жодних викликів щодо того, наскільки багатослівна Java, але все-таки весело кодегольф у Java imho. :)
Кевін Круїйсен

1
здогадуйтесь, що вам доведеться найближчим часом придумати декілька креативних викликів коду, щоб ви могли брати участь :) хороша робота все-таки!
WallyWest

1

PowerShell v2 +, 93 байти

param($n)97..120|%{-join[char[]]($_,++$_,++$_)}|?{(-join([char[]]$n|sort|select -u))-match$_}

Відчувається набагато довше, ніж потрібно, але я не можу більше гольфувати це.

Бере введення $n. Петлі від 97до 120, побудови суміжних трилітерний рядків - тобто, до |?, ми будемо мати abc, bcd, cdeі т.д. на трубопроводі. Тоді це передається через Where-Object(the |?), щоб витягнути лише ті пункти, де ця пропозиція відповідає дійсності. Тут пунктом є 1) рядок введення $n, charпереданий як -array, sorted та select -unique'd, а потім -joinназад у рядок, 2)-match ed проти рядків (тобто збігу регулярних виразів). Якщо це збіг, то трисловна рядок є у слові, і тому вона фільтрується через |?. Результати залишаються на конвеєрі і вихід неявний.

Приклади

(Зверніть увагу, що тут висновок відокремлений пробілом, оскільки ми послідовно виводимо результат конкатенацією)

PS C:\Tools\Scripts\golfing> 'education','foghorn','cabaret','hijacking','pneumonia','klaxon','perform','learning'|%{"$_ -> "+(.\close-knit-words.ps1 $_)}
education -> cde
foghorn -> fgh
cabaret -> abc
hijacking -> ghi hij ijk
pneumonia -> mno nop
klaxon -> 
perform -> 
learning -> 

Чудове пояснення. Я дав би вам два голоси, якщо можливо.
WallyWest

1

Сітківка, 106 56 байт

D`.
O`.
^
abc¶
{`^(.*)¶.*\1.*
$0¶$1
}T`_l`l;`^.*
2`.*¶?

Подвійний дублікат, сортування. Додайте abc. Знайдіть, чи знайдено підряд, і додайте, якщо так. Перевести до наступної підрядки. Повторіть. Потім видаліть перші два рядки.

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


Наївне рішення:

D`.
O`.
!&`abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz

Знову дублювати, сортувати, а потім виводити збіги, що перекриваються 3 послідовними літерами.

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


Наївне рішення виглядає досить просто ... хоча мені подобається ваше рішення для гольфу краще ... молодець!
WallyWest

1

JavaScript (Firefox 48), 93 байти

x=>[for(c of a=[...new Set(x,i=0)].sort())if(parseInt(d=c+a[++i]+a[i+1],36)%1333==38&!d[3])d]

Це піддається 96-байтній версії ES6 :

x=>[...new Set(x)].sort().map((c,i,a)=>c+a[i+1]+a[i+2]).filter(x=>!x[3]&parseInt(x,36)%1333==38)

Як це працює

Перший головний фрагмент функції:

[...new Set(x)].sort()

new Set(string)створює об'єкт Set, який містить один з кожного унікального символу в рядку. Наприклад, new Set("foghorn")повернеться Set ["f", "o", "g", "h", "r", "n"]. Ми можемо перетворити це у масив із [... ], а потім сортувати його за допомогою вбудованого .sort(). Це перетворюється "foghorn"на ["f", "g", "h", "n", "o", "r"].

Наступний крок:

.map((c,i,a)=>c+a[i+1]+a[i+2])

Це відображає кожен cхарактер у aрядку з символом, об'єднаним з двома елементами після нього. Наприклад, ["f", "g", "h", "n", "o", "r"] => ["fgh", "ghn", "hno", "nor", "orundefined", "rundefinedundefined"]. (Вискакує undefineds, коли ви намагаєтеся отримати доступ до неіснуючого члена масиву.

Останній крок - фільтрація:

.filter(x=>!c[3]&parseInt(x,36)%1333==38)

По-перше, !c[3]&це виключити будь-які рядки, які містять undefined. Це необхідно, тому що помилка призводить до врахування наступного алгоритму, наприклад, gmundefinedяк послідовний триплет.

Усі три послідовні рядки-символи, коли їх інтерпретують як базові числа 36, мають 38 модулів 1333. Я з'ясував це за допомогою наступного обчислення:

  • 012 (основа 36) = 38
  • 123 (основа 36) = 1371
  • 1371 - 38 = 1333
  • 1371 мод 1333 ≡ 38 мод 1333 ≡ 38

Тому, якщо три-знакова рядок становить 38 мод 1333 в базовій-36, три символи є послідовними в алфавіті.

Фрагмент тесту


Це не вдається для таких слів, як gemі mage.
Ніл

Отже, ви говорите, що всі послідовні трійні листи при перетворенні назад із шестинадцятирічної (основа 36) мають 38, коли mod'd проти 1333 ... це страшно!
WallyWest

@Neil Виправлено ціною в шість байтів.
ETHproductions

Я присвоїв твою !c[3]хитрість, яка збила мою відповідь ES6 на тривалість вашої попередньої відповіді ES6, тому зараз я навіть перевершив вашу відповідь Firefox 30+. Вибач за це.
Ніл

@Neil Я не заперечую :)
ETHproductions

1

Ракетка 237 байт

(define(f s)(let((lr(λ(l i)(list-ref l i)))(l(sort(map char->integer(string->list s))<)))(for((i(-(length l)2)))
(when(=(-(lr l(+ i 2))(lr l(+ i 1)))1(-(lr l(+ i 1))(lr l i)))(for((j 3))(display(string(integer->char(lr l(+ i j))))))))))

Тестування:

(f "education")

Вихід:

cde

Детальна версія:

(define(f2 s)
  (let ((lr (λ(l i)(list-ref l i)))
        (l (sort (map char->integer (string->list s)) <)))
  (for ((i (-(length l)2)))
    (when (=  (- (lr l (+ i 2)) (lr l (+ i 1)))
              1
              (- (lr l (+ i 1)) (lr l i)))
      (for((j 3))
        (display (string(integer->char (lr l (+ i j))))))))))

1

Рубін , 50 байт

each_cons(3)отримує всі послідовні підлістики довжиною 3 з алфавіту ?a..?z, а потім використовуйте e&s.chars==eдля вибору лише тих, які містять усі символи в цільовому рядку, використовуючи встановлений перетин. Повертає список списків.

->s{(?a..?z).each_cons(3).select{|e|e&s.chars==e}}

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


1

[R], 110 байт

 f=function(b){a=combn(sort(utf8ToInt(b)),3);apply(unique(t(a[,which(apply(diff(a),2,prod)==1)])),1,intToUtf8)}

Я впевнений, що це все ще гольфа


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