Jesteś zapewniając wsparcie techniczne dla tej Bruce Dickenson jak on wytwarza sesję nagraniową Blue Oyster Cult. Gdy poprosi o więcej dzwonków , możesz mu je dać.
Twoje zadanie
Napisz program lub funkcję, która pobiera ciąg (lub odpowiednik w Twoim języku) jako dane wejściowe i wyświetla powiązany ciąg zawierający jeszcze jeden dzwonek.
Ile dzwonków zawiera sznurek?
Liczba dzwonków zawiera ciąg znaków równa się maksymalnej liczbie wyraźnych kopii „dzwonka”, którą można uzyskać przez permutację znaków ciągu. Na przykład, "bbbccceeellllllooowwwwwwwww"
zawiera 3 cowbells, a "bbccceeellllllooowwwwwwwww"
, a "bbbccceeelllllooowwwwwwwww"
każdy z nich zawiera 2 cowbells i "cowbel"
zawiera 0 cowbells.
W jaki sposób dane wyjściowe powinny być powiązane z danymi wejściowymi?
Dane wyjściowe powinny składać się z konkatenacji, w tej kolejności, łańcucha wejściowego i najkrótszego prefiksu łańcucha wejściowego potrzebnego do zwiększenia liczby dzwonków krowich.
Na przykład "bbbccceeelllllooowwwwwwwww"
potrzebuje tylko jednego dodatkowego, "l"
aby zawierał 3 dzwonki krowy zamiast 2; najkrótszy prefiks, który zawiera który "l"
jest "bbbccceeel"
. Dlatego jeśli wejście jest "bbbccceeelllllooowwwwwwwww"
, to wyjście powinno być "bbbccceeelllllooowwwwwwwwwbbbccceeel"
.
Techniczne
- Możesz założyć, że dane wejściowe zawierają tylko drukowalne znaki ASCII. Jeśli jeden lub dwa znaki są irytujące w przetwarzaniu napisów w Twoim języku (np. Znaki nowej linii lub
\
), możesz założyć, że dane wejściowe ich nie zawierają - wystarczy wspomnieć o tym ograniczeniu. - Możesz ponadto założyć, że wszystkie znaki alfabetu na wejściu są małe lub wszystkie wielkie. Jeśli zdecydujesz się nie zakładać jednego z nich, policz dzwonki bez rozróżniania wielkości liter.
- Możesz dodatkowo założyć, że sygnał wejściowy zawiera co najmniej jedną kopię każdego z bohaterów
b
,c
,e
,l
,o
, iw
. Jest to równoważne z założeniem, że jakiś prefiks łańcucha może zostać z nim połączony w celu wytworzenia łańcucha, który zawiera więcej dzwonków krowich. (Pamiętaj, że sam łańcuch wejściowy nie musi zawierać dzwonka). - Jeśli twój język ma wbudowane rozwiązanie, które rozwiązuje ten problem ... to używaj go całkowicie, naprawdę, jakie to niesamowite.
Pozłacane pieluchy
Ponieważ czas studia nagrań jest kosztowny, Twój kod musi być jak najkrótszy. Wpis z najmniejszą liczbą bajtów jest zwycięzcą!
Przypadki testowe
( link do wklejania dla łatwiejszego kopiowania / wklejania)
Wejście testowe nr 1: "christopher walken begs for more cowbell!"
Wyjście testowe nr 1: "christopher walken begs for more cowbell!christopher wal"
Wejście testowe nr 2: "the quick brown fox jumps over the lazy dog"
Wyjście testowe nr 2: "the quick brown fox jumps over the lazy dogthe quick brown fox jumps over the l"
Wejście testowe nr 3: "cowbell"
Wyjście testowe nr 3: "cowbellcowbell"
Wejście testowe nr 4: "cowbell cowbell cowbell"
Wyjście testowe # 4: "cowbell cowbell cowbellcowbell"
Wejście testowe nr 5: "cowbell cowbell cowbel"
Wyjście testowe nr 5: "cowbell cowbell cowbelcowbel"
Wejście testowe nr 6: "bcelow"
Wyjście testowe # 6: "bcelowbcel"
Wejście testowe nr 7: "abcdefghijklmnopqrstuvwxyz"
Wyjście testowe # 7: "abcdefghijklmnopqrstuvwxyzabcdefghijkl"
Wejście testowe nr 8: "cccowwwwbbeeeeelllll"
Wyjście testowe # 8: "cccowwwwbbeeeeelllllccco"
Wejście testowe nr 9: "be well, programming puzzles & code golf"
Wyjście testowe # 9: "be well, programming puzzles & code golfbe well, programming puzzles & c"
Wejście testowe nr 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!"
Wyjście testowe nr 10: "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. wow!lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab"
Wejście testowe nr 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
"
Wyjście testowe # 11:
"c-c-b-c
i have a cow, i have a bell.
uh! bell-cow!
i have a cow, i have a cowbell.
uh! cowbell-cow!
bell-cow, cowbell-cow.
uh! cow-cowbell-bell-cow.
cow-cowbell-bell-cow!
c-c-b-c
i have a cow, i have a bell"
test case -> result
jednego dużego, wstępnie sformatowanego bloku kodu. Jest o wiele ładniejszy pod względem estetycznym i łatwiejszy do skopiowania.L
w słowie są dwa , nie jest to wyzwanie.Odpowiedzi:
Pip ,
504238 bajtówPrzekaż ciąg jako argument wiersza polecenia, w razie potrzeby cytowany. Wypróbuj online!
Wyjaśnienie
Wyjaśnię to w dwóch częściach: funkcja dzwonka i pełny program. Po pierwsze, oto funkcja, która oblicza ilość dzwonka w ciągu:
{...}
definiuje funkcję. Wielu operatorów Pip po zastosowaniu do funkcji zwraca inną funkcję; na przykład-{a+1}
jest taki sam jak{-(a+1)}
. Więc powyższe jest równoważne zktóry działa w następujący sposób:
Teraz, kiedy to mamy, oto pełny program:
źródło
cowbell cowbell cowbee
i wynik był,cowbellcowbelcowbel
ale być może źle używam IDE (nowy w PIP)cowbell cowbell cowbeecowbell
( spróbuj online ). Czy używasz TIO lub kopii lokalnej?C
511488474470463454Wypróbuj online
Czytelny format + objaśnienie:
Niektóre zastosowane sztuczki:
• Podczas sprawdzania znaków
'w'
wpisuję znak, który ma 3 bajty, ale dla znaków'c'
i'b'
mogę wpisać ich wartości ASCII odpowiednio 99 i 98, aby za każdym razem zapisać bajt. (Edycja: Dzięki @Titus wiem, że robię to ze wszystkimi literami COWBELL, używając tylko wielkich liter, które są dwubajtowymi numerycznymi wartościami ascii)•
r=~-l/2
jestr=(l-1)/2
za pomocą bitshifts•
a[++i]
Otrzymuję znak w indeksie (i) i iteruję indeks w tym samym czasie. Po prostu zaczynami
odi=-1
zamiasti=0
(robię to samo zz
i uruchamiam,z=i
aby zapisać kolejny bajt)źródło
c
) jest zawsze ustawiony na 1 [...]”. Cieszymy się z twojego oświadczenia, dlaczego tak myślisz, ponieważ niektórym z nas wydaje się to dziwne.c,o,w,b,e
zainicjowaniu tej samej wartości zamiast 1? Ponieważ twoja wskazówka nr 2 wydaje się nieprawdziwa, nie dla CI przynajmniej wiem. Możesz wyjaśnić? Pytanie SOPython 2,
125113112 bajtówn
liczy liczbę dzwonków krowich-12 bajtów dzięki @Rod
-1 bajtów dzięki @Titus
źródło
[]
zrozumienie listy, gdy jest to jedyny parametr, można też upuścićenumerate
:min(s.count(c)/-~(c=='l')for c in"cowbel")
gdzie-~(n=='l')
jest krótszy sposób pisania1+(n=='l')
>>
będzie krótszy niż/-~
?return
byłoby wtedy w pętli while?Perl 6 , 91 bajtów
Zakłada wprowadzanie małych liter.
Jak to działa
Wewnątrz lambda inna lambda do zliczania liczby dzwonków w łańcuchu jest zdefiniowana jako taka:
Reszta kodu używa tej wewnętrznej lambdy
&c
do znalezienia wyniku, jak poniżej:źródło
MATL ,
3837 bajtów1 bajt off dzięki pomysłowi @ DLosc na użycie ciągu szablonu
lcowbe
zamiastcowbel
Wszystkie znaki wejściowe są pisane małymi literami. Jeśli dane wejściowe zawierają znaki nowej linii, znak nowej linii należy wprowadzić, ponieważ jego kod ASCII jest połączony ze zwykłymi znakami (patrz ostatnie wejście w łączu ze wszystkimi przypadkami testowymi).
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
źródło
JavaScript (ES6), 106
107 113 126 141Przeniesienie do javascript odpowiedzi Pip przez @DLosc. Potrzebowałem trochę czasu, aby to w pełni zrozumieć, a to genialne.
Edytuj -15 bajtów zgodnie ze wskazówkami @Titus, bezpośrednio dodając znaki do łańcucha wejściowego
a
i unikając wczesnego powrotu (więc niefor/if
)Edycja 2, wyliczając wartość 6 dla funkcji Min, zapisuje pozostałe 13 bajtów
Edytuj 3 ponownie zmieniłem funkcję c. Myślałem, że gadatliwy
length
isplit
będzie zbyt długi. Myliłem się.Zakładając małe litery
Mniej golfa
Test
źródło
k[x]++
by się nie udało z powoduundefined
. Ale jestem pewien, że tofor(i=0;c(a)==c(a+=a[i++]);),a
działa.>>!i
oszczędza 3 bajty. Dlaczego nie używaszc(a+=z)
?c(a+=z)
. Nie w wersji mniej golfowej , ponieważ jest mniej golfa. Korzystanie>>!i
zapisuje 1 bajt (w wersji golfowej).Narzędzia Bash + Unix, 184 bajty
Wypróbuj online!
Dzięki @AlbertRenshaw za grę w golfa o 2 bajty.
źródło
!=
JavaScript (ES6),
124114 bajtówDzięki Neil za zaoszczędzenie kilku bajtów
Ponieważ różni się to od już istniejącej odpowiedzi JavaScript i poświęciłem temu sporo czasu, postanowiłem sam stworzyć odpowiedź.
Stosowanie
Wynik
źródło
.sort()[0]
to wspaniały pomysł.eval
jest zły. : DMath.min()
, ale to kosztowało wiele postaci i pomyślałem, że będzie krótszy sposób. I tak,eval
jest naprawdę fajny do gry w golfa..sort()[0]
działał, kosztowałby tylko 10 bajtów, ale tak nie jest i.sort((a,b)=>a-b)[0]
kosztuje 20 bajtów, aleMath.min(...)
kosztuje tylko 13.Oktawa,
808797 bajtówWypróbuj online!
źródło
l
s, aby ukończyć dodatkowy dzwonek. Na przykład podczas wprowadzaniacowbell
niepoprawnie zwraca,cowbellcowbel
a niecowbellcowbell
. (Mam nadzieję, że możesz to naprawić - podoba mi się nietypowy algorytm!)CJam, 37 lat
Wypróbuj online
Jeśli mogę wykluczyć znaki
"
i\
, to…35 bajtów
Wypróbuj online
Wyjaśnienie
Kod sukcesywnie dołącza każdy znak łańcucha do łańcucha początkowego (od oryginalnego do podwojonego), określa liczbę dzwonków krowich dla każdego łańcucha (licząc liczbę wystąpień każdego znaku w „cowbel” i dzieląc jeden dla „l” o 2, a następnie przyjmując minimum), znajduje pozycję pierwszego ciągu, w którym liczba dzwonków krowy wzrasta o 1, a następnie pobiera odpowiedni prefiks wejścia i umieszcza go po ciągu wejściowym.
Aby uwzględnić również oryginalny ciąg (bez dołączanego znaku), kod wstawia znak neutralny do łańcucha, który jest iterowany. Pierwsza wersja poprzedza spację, a druga wersja wykorzystuje ciąg znaków, czyli ciąg między podwójnymi cudzysłowami.
źródło
PHP, 133 bajty
port PHP @ JavaScript portu @ edc65 odpowiedzi Pip DLosc.
pobiera małe litery z argumentu wiersza poleceń. Uruchom z
-nr
.awaria
źródło