Wprowadzenie
Według postu Rand Al'Thor w Puzzling SE, zwarte słowo to każde słowo, które zawiera trzy kolejne litery alfabetu (w dowolnej kolejności).
Słowa takie jak edukacja , mgła i kabaret są uważane za ściśle powiązane, podczas gdy słowa takie jak nauka , klaxon i występ nie są ściśle powiązane.
Wyzwanie
Wyzwanie polega na kodowaniu w golfa programu, który może przyjmować pojedyncze słowo jako dane wejściowe (zakładane małe litery, dla wszystkich celów i celów) i zwracać dane wyjściowe, które (jeśli są dostępne) zawierają listę wszystkich kolejnych zestawów liter (także małych), jeśli jest słowem zwartym i pustym, jeśli nie jest słowem ścisłym.
Przykłady
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>>
Zasady
- Podczas gdy dane wejściowe należy przyjmować jako pojedyncze małe litery, a dane wyjściowe muszą być pisane małymi literami, charakter danych wyjściowych będzie się różnić w zależności od wybranego języka kodowania. Wybierz formę wyjściową, która najlepiej pasuje do charakteru wyzwania, czy będzie to STDOUT, plik wyjściowy, tablica itp.
- Ponieważ jest to gra w golfa kodowego, będzie to przypadek najmniejszej liczby bajtów, która będzie wyraźnym zwycięzcą.
- Żadnych głupich luk .
- Nie przyjmuję odpowiedzi, które mają kolejne litery w kolejności niealfabetycznej ... Tak więc , na przykład,
cab
nie będę uważany za odpowiedni wynikcabaret
. - Uwaga specjalna, podczas gdy „trojaczki” niekoniecznie muszą być w kolejności alfabetycznej, ale znaki w trojaczkach muszą być… więc w przypadku słowa „wydajność”, na przykład, wynik
mno,nop
zostanie zaakceptowany, jak będzienop,mno
. W przypadku słowa „porwania”, istnieje sześć sposobów, że trypletachghi
,hij
iijk
może być umieszczony na liście, a wszystkie sześć permutacje są dopuszczalne jako wyjście.
Poza tym, na swoje oceny, ustaw się, golf!
!
I innym słowem, ponieważ obecny daje ten sam wynik :-)pneumonia
może być[('m','n','o'),('n','o','p')])
?Odpowiedzi:
05AB1E ,
765 bajtówKod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
Python 3.5, 68 bajtów
Wyświetla ciągi wyjściowe i kończy się błędem, gdy wartość znaku staje się zbyt duża.
Generuje wszystkie ciągi trzech kolejnych i drukuje te, które są podzbiorem słowa wejściowego.
źródło
Pyth -
111087 bajtówMetoda super brutalnej siły.
Pakiet testowy .
źródło
Galaretka , 7 bajtów
To jest link monadyczny. Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6),
9590 bajtówBrakujące wartości łączą się jako
undefined
, więc wynikowy ciąg zawiera więcej niż 3 znaki. Pożyczyłem ten!c[3]
trik z @ETHproductions zaoszczędzić 5 bajtów.źródło
undefined
parseInt(c,36)
zamiastc.charCodeAt()
?parseInt
w golfie kodu.Python 3.5, 78 bajtów
źródło
PHP, 100 bajtów
przyjmuje dane wejściowe jako argument wiersza poleceń; drukuje przecinek końcowy. biegać z
-r
.źródło
for($s=join(range(Z,z));$a=substr($s,++$i,3);)
jest krótszym sposobem tworzenia $ a. Wprawdzie sprawdza kilka znaków interpunkcyjnych, a także niektóre serie 2 znaków, ale ponieważ wprowadzane są tylko małe litery i wymaga znalezienia 3 znaków, które są w porządku.for($a="
ab ", $ i = 98; $ i <123;)! strstr (count_chars ($ argv [1], 3), $ a = substr ($ a, 1) .chr (++ $ i)) ?: print "$ a"; `zapisuje 2 bajty. Bardzo fajny sposób, próbowałem innych sposobów w PHP, ale nie mogę dotrzeć do bajtów twojego kodu. Nie jestem pewien, czy potrzebujesz spacji po przecinkuC,
175174 bajtówzębaty:
Podczas sortowania zastępuje zduplikowane wartości zerami, te zera są sortowane na początek słowa. Szukanie kolejnych wartości jest wtedy banalne.
źródło
MATL , 13 bajtów
Wypróbuj online!
źródło
Haskell, 48 bajtów
Generuje wszystkie trzykrotnie trzy kolejne znaki, pobiera te, które używają tylko liter na wejściu.
53 bajty:
Lista
['c'..]
zawiera wszystkie znaki Unicode od początku'c'
. Zrozumienie listy[[pred$pred c..c]|c<-['c'..]]
zamienia je odtąd we wszystkie ciągi 3 kolejnych znaków"abc"
. Cofamy się do tyłu[pred$pred c..c]
zamiast do przodu z,[c..succ$succ c]
aby uniknąć błędu przy przyjmowaniu następcy najwyższego znaku Unicode.Te tróje są filtrowane dla tych, które używają tylko liter na wejściu.
źródło
Perl, 36 bajtów
Obejmuje +1 dla
-n
Podaj dane na STDIN:
Tylko kod:
źródło
T-SQL, 153 bajty
Musiałem zareagować na komentarz WallyWest, że minęło sporo czasu od ostatniej odpowiedzi TSQL. Odpowiedź była częściowo zainspirowana odpowiedzią Briana J.
Gra w golfa:
Skrzypce
Nie golfowany:
źródło
Haskell,
636052 bajtówPrzykład użycia:
f "hijacking"
->["ghi","hij","ijk"]
.scanr(:)"_"['a'..]
buduje listę z ogonami listy wszystkich znaków Unicode zaczynających się od'a'
i pozwala kończyć na a'_'
, tj["abcde...\1114111_", "bcde...\1114111_", "cde...\1114111_", ..., "\1114109\1114110\1114111_", "\1114110\1114111_", "\1114111_", "_"]
. Następnie bierzemy do trzech znaków każdego łańcucha i wiążemy gox
. Zachowaj wszystkox
tam, gdzie każda jego litera znajduje się w parametrze wejściowymw
.Edycja: @xnor zapisał
37 bajtów. Dzięki!źródło
a:b:c:_
za pomocą @ -pattern?'z'
górną granicę i pozwolić wypróbować wszystkie znaki.take
i usunąć pusty ciąg:f w=[x|x<-init$take 3<$>scanr(:)""['a'..],all(`elem`w)x]
scanr
„.” zamiast""
i pomińinit$
.T-SQL (SQL Server 2014), 217 bajtów
Grał w golfa
Stosowanie
Najpierw zadeklaruj zmienną @a jako jakiś rodzaj znaku i tak przypisz dane wejściowe
Nie liczyłem deklaracji jako części mojego kodu, ale nie znalazłem standardu SQL dla danych wejściowych, więc jestem gotów zmienić moje liczenie
Wyjście będzie albo jeden wiersz na każdy potrójny, albo brak wierszy, jeśli słowo nie będzie ścisłe
Nie golfił
źródło
R, 220 bajtów
Moje rozwiązanie jest dość proste. Pętla przechodzi przez trzy możliwe kombinacje liter, zapętla i sprawdza znaki wprowadzonego ciągu względem trzech kolejnych liter i dodaje je do ciągu. Łańcuch jest następnie drukowany tylko wtedy, gdy zostaną znalezione trzy litery (c == 4).
wejście wyjście
źródło
Python 3.5,
114111888079 bajtów:Anonimowa funkcja lambda. Pobiera dane wejściowe jako ciąg wielkich liter i wypisuje tablicę krotek, przy czym te wypełnione są trzema wielkimi literami reprezentującymi wszystkie zestawy
3
kolejnych liter pojawiających się na wejściu. Na przykład,byłoby wyjściem dla danych wejściowych
HIJACKING
. Ten format wyjściowy został potwierdzony przez OP. Ma więc jedyny format wprowadzania wielkich liter. Jednakże, jeśli chcesz wprowadzić w tylko małymi literami, po prostu wymienićrange(65,91)
sięrange(97,123)
, dodając jeszcze jeden bajt.Zamień na wszystkie przypadki testowe!
Wyjaśnienie:
Zasadniczo dzieje się tutaj:
Za
W
pomocąW=[*map(chr,range(65,91))]
, tworzona jest lista, która zawiera wszystkie wielkie litery alfabetu angielskiego. Z tego powodu zawsze wymagane jest wprowadzenie wielkich liter .Dla każdej krotki,
i
na liście, którą nazwiemyU
, zawierającej wszystkie trzy kolejne krotki literowe, tj .:stworzony przez
zip(W,W[1:],W[2:])
każdyi
jest w pełni dodany do listy wyjściowej tak długo, jak wszystkie elementy w zestawie wersjii
({*i}
) są w zbiorze wersją wejściaX
({*X}
), czyli{*X}>={*i}
, czyliX
jest rozszerzeniem oi
. W przeciwnym razie pusta wersjai
(()
) zostanie dodana do listy.Po przejściu wszystkich krotek z całkowicie dodanymi dopasowaniami lista jest zwracana jako wynik końcowy.
źródło
Scala, 59 bajtów
Nie golfowany:
Wyjaśnienie:
źródło
Właściwie 13 bajtów
Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
Java 7, 230 bajtów
Najprawdopodobniej można grać w golfa, ale wyzwanie było znacznie trudniejsze, niż początkowo myślałem w Javie ..
Przypadki bez golfa i testy:
Wypróbuj tutaj.
Wydajność:
źródło
PowerShell v2 +, 93 bajty
Czuje się znacznie dłużej niż jest to wymagane, ale nie wydaje mi się, że mogę grać w golfa.
Pobiera dane wejściowe
$n
. Pętle od97
celu120
, budowy sąsiadujących strun trzyliterowe - czyli aż do|?
, będziemy mieliabc
,bcd
,cde
, itd. Na rurociągu. To jest przekazywane przezWhere-Object
(the|?
), aby wyciągnąć tylko te elementy, w których klauzula jest prawdziwa. Tutaj klauzula to 1) ciąg wejściowy$n
, rzutowany jakochar
-array,sort
ed iselect -u
nique'd, a następnie-join
ed z powrotem na ciąg, 2)-match
ed przeciwko ciągom trzyliterowym (tj. Dopasowanie wyrażenia regularnego). Jeśli pasuje, to trzyliterowy ciąg znajduje się w słowie, więc filtruje przez|?
. Wyniki są pozostawione w potoku, a wyniki są niejawne.Przykłady
(Zauważ, że w tym przypadku dane wyjściowe są rozdzielone spacjami, ponieważ dzielimy dane wyjściowe na konkatenację).
źródło
Siatkówka,
10656 bajtówDeduplikuj, Sortuj. Dodaj
abc
. Sprawdź, czy podciąg został znaleziony i dołącz, jeśli tak. Przetłumacz na następny podciąg. Powtarzać. Następnie usuń pierwsze dwie linie.Wypróbuj online
Naiwne rozwiązanie:
Deduplikuj, posortuj, a następnie wyprowadź nakładające się dopasowania 3 kolejnych liter.
Wypróbuj online
źródło
JavaScript (Firefox 48), 93 bajty
Daje to 96-bajtową wersję ES6 :
Jak to działa
Pierwszą dużą częścią tej funkcji jest:
new Set(string)
tworzy obiekt Set, który zawiera jeden z każdego unikalnego znaku w ciągu. Na przykładnew Set("foghorn")
wróciSet ["f", "o", "g", "h", "r", "n"]
. Możemy przekonwertować to na tablicę za pomocą[... ]
, a następnie posortować za pomocą wbudowanego.sort()
. To zamienia się"foghorn"
w["f", "g", "h", "n", "o", "r"]
.Kolejny krok to:
To mapuje każdy znak
c
wa
szyku na postać połączoną z dwoma przedmiotami po nim. Na przykład["f", "g", "h", "n", "o", "r"] => ["fgh", "ghn", "hno", "nor", "orundefined", "rundefinedundefined"]
. (undefined
Wyskakujące okienko przy próbie uzyskania dostępu do nieistniejącego elementu tablicy.Ostatnim krokiem jest filtrowanie:
Po pierwsze,
!c[3]&
należy wykluczyć wszelkie ciągi zawierająceundefined
. Jest to konieczne, ponieważ błąd powoduje, że następujący algorytm liczy się np.gmundefined
Jako kolejny triplet.Wszystkie trzy kolejne ciągi znaków, interpretowane jako liczby podstawowe 36, mają wartość 38 modulo 1333. Zrozumiałem to na podstawie następującego obliczenia:
Dlatego jeśli ciąg znaków składający się z trzech znaków ma wartość 38 mod 1333 w bazie 36, trzy znaki są następujące po sobie w alfabecie.
Testowy fragment kodu
Pokaż fragment kodu
źródło
gem
image
.!c[3]
trik, który przyniósł mi po ES6 odpowiedź na długości poprzedniego ES6 odpowiedź, więc teraz ja nawet outgolfing swój Firefox 30+ odpowiedź. Przepraszam za to.Rakieta 237 bajtów
Testowanie:
Wydajność:
Wersja szczegółowa:
źródło
Rubinowy , 50 bajtów
each_cons(3)
pobiera z alfabetu wszystkie kolejne listy podrzędne o długości 3?a..?z
, a następnie służye&s.chars==e
do wybierania tylko tych, które mają wszystkie znaki w ciągu docelowym, za pomocą przecięcia zgodnie z sekwencją. Zwraca listę list.Wypróbuj online!
źródło
[R], 110 bajtów
Jestem pewien, że nadal można grać w golfa
źródło
Japt ,
109 bajtówWypróbuj lub uruchom wszystkie przypadki testowe
źródło