Poczekaj ..... to nie trolling.
tło
Te dni w YouTube sekcje komentarzy są zaśmiecone takimi wzorami:
S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S
gdzie String
jest zwykłym symbolem zastępczym i odnosi się do dowolnej kombinacji znaków. Tym wzorcom zwykle towarzyszy It took me a lot of time to make this, pls like
coś lub coś, i często OP udaje się zgromadzić wiele polubień.
Zadanie
Chociaż masz wielki talent do gromadzenia głosów pozytywnych na PPCG dzięki swoim uroczym umiejętnościom golfowym, zdecydowanie nie jesteś najlepszym wyborem do robienia dowcipnych uwag lub odwoływania się do memów w sekcjach komentarzy na YouTube. Tak więc Twoje konstruktywne komentarze z przemyślaną myślą zgromadziły kilka lub nie „polubiły” na YouTube. Chcesz to zmienić. Dlatego uciekaj się do robienia wyżej wymienionych stereotypów, aby osiągnąć ostateczne ambicje, ale nie marnuj czasu, próbując je ręcznie napisać.
Mówiąc najprościej, Twoim zadaniem jest pobranie ciągu, powiedzmy s
i wyprowadzenie 2*s.length - 1
podłańcuchów s
rozdzielonych znakiem nowej linii, aby zachować zgodność z następującym wzorcem:
(dla s
= „Witaj”)
H
He
Hel
Hell
Hello
Hell
Hel
He
H
Wejście
Pojedynczy ciąg s
. Obowiązują domyślne wartości wejściowe dla społeczności. Możesz założyć, że ciąg wejściowy będzie zawierał tylko drukowalne znaki ASCII.
Wynik
Kilka linii oddzielonych znakiem nowej linii, stanowiących odpowiedni wzór, jak wyjaśniono powyżej. Obowiązują domyślne wartości wyjściowe społeczności. Dopuszczalne są wiodące i końcowe spacje (nie zawierające żadnych znaków lub znaków, których nie można zobaczyć, jak spacja) w wynikach.
Przypadek testowy
Przypadek testowy zawierający wiele słów:
Input => "Oh yeah yeah"
Output =>
O
Oh
Oh
Oh y
Oh ye
Oh yea
Oh yeah
Oh yeah
Oh yeah y
Oh yeah ye
Oh yeah yea
Oh yeah yeah
Oh yeah yea
Oh yeah ye
Oh yeah y
Oh yeah
Oh yeah
Oh yea
Oh ye
Oh y
Oh
Oh
O
Zauważ, że istnieją widoczne zniekształcenia w kształcie wyjściowym powyższego przypadku testowego (na przykład linia druga i linia trzecia wyniku wyglądają tak samo). To dlatego, że nie widzimy końcowych białych znaków. Twój program NIE musi próbować naprawiać tych zakłóceń.
Zwycięskie kryterium
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach w każdym języku!
YouTube Comments #1
w tytule.""
? A co z pojedynczą postacią"H"
? Jeśli tak, jakie powinny być wyniki dla obu tych przypadków?Odpowiedzi:
pieprzenie mózgu , 32 bajty
Wypróbuj online!
Ta sama pętla jest używana dla obu połówek wzoru.
Wyjaśnienie:
źródło
JavaScript (ES6), 36 bajtów
Wypróbuj online!
Skomentował
źródło
Unix (LF)
. Problem rozwiązany raz na zawsze. :)05AB1E (starsza wersja) ,
43 bajtyPrzekreślone
4
to już nie 4 :)Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
W nowej wersji 05AB1E po jawnym
»
jest wymagane jawneη
, dlatego używam starszej wersji 05AB1E tutaj, aby zapisać bajt.źródło
\xce\xb7\x2e\xe2\x88\x8a
08 2e 17
, które można uruchomić i zweryfikować za pomocą--osabie
flagi: tio.run/…IBM PC DOS, zestaw 8088,
4443Niezmontowane:
Wyjaśnienie
Pętla
2 * input length - 1
dla każdego rzędu. Funkcja wyświetlania łańcucha DOS API (INT 21H,9
) zapisuje$
na ekranie ciąg terminowany, więc za każdym razem przez pętlę znak po ostatnim, który ma zostać wyświetlony, jest zamieniany terminatorem końca łańcucha.Licznik pętli jest porównywany z długością łańcucha, a jeśli jest większy (tzn. Rosnąca część wyniku), pozycja łańcucha / zamiany jest zwiększana, w przeciwnym razie jest zmniejszana (w rzeczywistości jest
-1-1+1
to mniej bajtów niż struktura rozgałęziająca if / else).Autonomiczny program wykonywalny, pobiera ciąg wejściowy z wiersza poleceń.
Wynik
Pobierz YT2.COM (43 bajty)
źródło
SHR SI, 1
.Python 2 ,
6052 bajtówWypróbuj online!
Python 3.8 (wersja wstępna) , 50 bajtów
Wypróbuj online!
źródło
x:=s[:n]
.MATL , 8 bajtów
Wypróbuj online!
Podoba mi się ten post dla buźki
:)
w kodzie, który zajęło mi dużo czasu.źródło
J , 11 bajtów
Anonimowa ukryta funkcja prefiksu. Zwraca matrycę znaków wypełnioną spacją.
Wypróbuj online!
]\
lista prefiksów[:(
…)
Zastosuj następującą funkcję do tej listy|.
odwrotna lista,
z dodatkiem}:
ograniczona lista (bez ostatniego elementu)źródło
[:(
i}:,|
wyglądają tak smutno…Perl 6 , 31 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera ciąg znaków i zwraca listę wierszy.
Wyjaśnienie:
źródło
Japt -R , 4 bajty
Skumulowane zmniejszenie ciągu.
-1 bajt dzięki @Shaggy
Wypróbuj online!
źródło
-flag
lub <język>-flag
. Ponadto: | Zapomniałem, że skumulowana redukcja była rzeczą, przysięgam, że pomijałem ją za każdym razem, gdy ją widziałem-flag
?Japt
-R
,97 bajtów-2 bajty dzięki Shaggy
Wypróbuj online!
źródło
Ã
to cośPerl 5 (
-p
), 26 bajtówTIO
źródło
Haskell,
525044 bajtyinstance Semigroup b => Semigroup (a -> b)
Wypróbuj online!
źródło
inits
wymaga użycia importu, więc musisz dodaćimport Data.List
lub coś podobnego.import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
R ,
79656258 bajtówWypróbuj online!
-14 dzięki wiedzy Giuseppe o wyższej funkcji
-3 z czystszym indeksowaniem
-4 dzięki przeprowadzeniu Nicka Kennedy'ego i Giuseppe do
scan
iwrite
Unikanie pętli (i
substr
) jest miłe.źródło
sapply
-substring
zrobią to, co chcesz (z dodatkową końcową pustą linią) i dla 65 bajtów ! Na pewno nie pomyślałbym,substring
gdybym nie widział twojego miłego wykorzystaniasubstr
tutaj.scan
iwrite
? Tylko 59 bajtów!""
się1
.Galaretka ,
54 bajtów-1 bajt dzięki @JonathanAllan !
Wypróbuj online! Myślę, że to moja druga odpowiedź na żelki?
Nie wiem czy to jest optymalne.Jestem bardziej przekonany, że jest optymalny. Zwraca tablicę wierszy.Wyjaśnienie
Innym podejściem zaproponowanym przez @JonathanAllan jest
;\ŒḄ
łączne ograniczenie (\
) konkatenacji (;
), co jest kolejnym sposobem generowania prefiksów.źródło
Y
z kodu (zrobiłbym stopkę alboÇY
czyÇŒṘ
aby uniknąć niejawny rozbijając wydrukować pełnym wymiarze programu). Na marginesie jest to również równoważnie zaimplementowane jak;\ŒḄ
dla tej samej liczby bajtów (możesz również przekazać argument,"blah"
ponieważ Jelly interpretuje to jako listę znaków - twoja jest w rzeczywistości listą znaków, jak zobaczysz jeśli zrobisz stopkęÇŒṘ
)Python 3.8 (wersja wstępna) , 48 bajtów
Wypróbuj online!
Używa wyrażeń przypisania z
:=
aby zgromadzić listę prefiksów , a następnie ponownie, aby zapisać wynik do złączyć swój rewers (bez pierwszego char).Python 2 , 51 bajtów
Wypróbuj online!
Prawie mamy następujące ładne 45-bajtowe rozwiązanie, ale ma on dwa razy oryginalny ciąg i nie widzę krótkiego sposobu, aby to naprawić.
Wypróbuj online!
źródło
print('\n'.join(f(s)))
?x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]
. Zobacz przykłady u góry tutaj .Węgiel drzewny , 5 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie:
G
rysuje wypełniony wielokąt,^
określa, że boki są skierowane w dół w prawo i w dół w lewo (wielokąt następnie automatycznie się zamyka),Lθ
określa długość tych boków jako długość oryginalnego wejścia, a końcowyθ
określa ciąg wypełnienia.źródło
C # (interaktywny kompilator Visual C #) ,
123109948474 bajtyZakłada się, że możemy zwrócić tablicę znaków char (wierzę, że możemy, ponieważ tablica znaków jest prawidłową reprezentacją ciągu znaków, a tablica znaków jest prawidłową reprezentacją wielu wierszy)
Wypróbuj online!
źródło
Attache , 15 bajtów
Wypróbuj online!
Dość proste.
Bounce
s (dołącza do tyłu bez środka)Prefixes
wejścia.Alternatywnie, 21 bajtów:,
Bounce@{_[0..0:~-#_]}
ponowne wdrożenie prefiksu.źródło
Brachylog (v2), 6 bajtów
Wypróbuj online!
Podanie funkcji, zwrócenie tablicy wierszy. Luźno oparty na odpowiedzi @ Fatalize .
Wyjaśnienie
Tutaj porządek podziału jest ustalany przez
⊆
, który, w przypadku użycia z tym wzorcem przepływu, preferuje możliwie najkrótszą wydajność, przerywaną przez umieszczenie danych elementów tak wcześnie, jak to możliwe . Najkrótszy możliwy wynik jest tym, czego chcemy tutaj (ponieważ nie jest możliwe, aby mieć zduplikowane prefiksy), a umieszczenie podanych elementów (tj. Prefiksów) tak wcześnie, jak to możliwe, umieści je w pierwszej połowie (zaokrąglonej w górę) wynik. Biorąc pod uwagę, że wymagamy od nich umieszczenia ich w tej samej kolejności, zdarza się, że otrzymujemy dokładnie taki wzór, jakiego potrzebujemy, mimo że opis, który podaliśmy Brachylog jest bardzo ogólny; przypadki rozstrzygania problemów działają dokładnie tak, że Brachylog wybiera dane wyjściowe, które chcemy, a nie inne dane wyjściowe zgodne z opisem.źródło
PowerShell,
898766 bajtów-2 bajty dzięki @AdmBorkBork
Wypróbuj online!
Przykro mi z tego powodu! Zredagowałem go, a także udało mi się zgolić kilka bajtów.
źródło
--$d
zamiast($d-1)
ocalić parę na końcu.PowerShell , 46 bajtów
Wypróbuj online!
PowerShell , 42 bajty (specjalny YouTube, brudny)
Wiadomo, że maksymalna długość komentarza na youtube wynosi 10 000 znaków. Ok, użyj tego jako górnej granicy.
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 9 bajtów SBCS
Anonimowa ukryta funkcja prefiksu. Zwraca listę ciągów.
Wypróbuj online!
,\
lista prefiksów (świeci, kumulatywna konkatenacja)(
…)
Zastosuj następującą funkcję do tej listy:⌽
odwrócona lista1↓
upuść pierwszy przedmiot,
prepend⊢
niezmodyfikowana listaźródło
Ruby ,
514240 bajtówWypróbuj online!
Dzięki Doorknob za -2 bajty.
źródło
...
z,
JavaScript (Node.js) , 90 bajtów
Prawdopodobnie można to jeszcze bardziej pograć w golfa, Arnauld ma już o wiele krótszą grę, ale przynajmniej dobrze się bawiłem!
Wypróbuj online!
źródło
SNOBOL4 (CSNOBOL4) , 118 bajtów
Wypróbuj online!
Wygląda na to, że jest błąd w tej implementacji SNOBOL; próba zastąpienia etykiety
D
etykietą2
powoduje błąd, chociaż wskazuje to w instrukcji Vanilla SNOBOL (wyróżnienie dodane)Przypuszczam, że interpreter CSNOBOL obsługuje tylko jedną etykietę rozpoczynającą się od liczby całkowitej.
źródło
APL + WIN, 31 bajtów
Monity o wprowadzenie ciągu:
Wyjaśnienie:
źródło
F # (.NET Core) ,
6761 bajtówWypróbuj online!
Wejście to
string
a wyjście toseq<string>
Innym rozwiązaniem może być
let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]
80 bajtów ... Nie jestem pewien, czy warto się temu przyjrzeć.źródło
sed ,
3135 bajtówWypróbuj online!
Wyjaśnienie
Na początku każdej iteracji pętli przestrzeń wzorów stanowi „centralną porcję” pożądanego wyjścia, a każda pętla dodaje skróconą kopię na górze i na dole.
źródło
sed
. To samo w TIO. Jakiejsed
implementacji używasz i jak przekazujesz jej dane wejściowe? (BTW, zmiana podstawienia, abys/.\n.*\|.$//
tosed
implementacją (używając GNU w wersji 4.2.1), po prostu nie zauważyłem błędu. Grałem z kilkoma innymi poprawkami i nie mogę znaleźć niczego, co dodaje mniej niż cztery bajty, więc przyjmuję twoją poprawkę, dziękuję.Python 2 ,
13110084 bajtówMoja pierwsza odpowiedź na Code Golf!
-47 bajtów ogółem dzięki @ SriotchilismO'Zaic
Wypróbuj online!
źródło
;
s zamiast nowego wiersza, aby uniknąć wcięcia. Również nie ma potrzeby odstępów międzyprint
i''
a
ciąg zamiast listy, nie potrzebujesz jużjoin
wcale i możesz po prostuprint a
.x
.J , 12 bajtów
Wypróbuj online!
Jeszcze 1 bajt dłużej niż Adama
K (oK) ,
1211 bajtów-1 bajt dzięki ngn
Wypróbuj online!
źródło
{x,1_|x}@,\