Zajęło mi to dużo czasu, proszę. (Komentarze w YouTube nr 1)


84

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 Stringjest 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 likecoś 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 si wyprowadzenie 2*s.length - 1podłańcuchów srozdzielonych 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 , więc wygrywa najkrótszy kod w bajtach w każdym języku!


19
Planuję w przyszłości tworzyć kolejne wyzwania związane z komentarzami na YouTube; stąd YouTube Comments #1w tytule.
Arjun

1
Czy dozwolone jest zwracanie tablicy wierszy?
ktoś

2
Czy możemy brać dane wejściowe jako tablicę znaków i zwracać tablicę tablic znaków?
Kudłaty


3
Czy dane wejściowe mogą być ""? A co z pojedynczą postacią "H"? Jeśli tak, jakie powinny być wyniki dla obu tych przypadków?
AdmBorkBork

Odpowiedzi:


103

pieprzenie mózgu , 32 bajty

,[[<]>[.>]++++++++++.,[>>]<[-]<]

Wypróbuj online!

Ta sama pętla jest używana dla obu połówek wzoru.

Wyjaśnienie:

,             Take first input character as initial line
[             Until line to output is empty:
  [<]>        Move to beginning of line
  [.>]        Output all characters in line
  ++++++++++. Output newline
  ,           Input next character
  [>>]        Move two cells right if input character nonzero
  <[-]        Otherwise remove last character in line
  <           Move to new last character in line
]

2
To po prostu niesamowite. Próbowałem coś zrobić w pieprzeniu mózgu, ale wyszło to około 10 razy tak długo i nadal nie działało poprawnie.
ElPedro

34
Nigdy nie myślałem, że zobaczę wyzwanie, w którym ta pieprzona mózg naprawdę zdobywa konkurencyjną, niesamowitą pracę!
Znaki zapytania

54

JavaScript (ES6), 36 bajtów

f=([c,...r],s=`
`)=>c?s+f(r,s+c)+s:s

Wypróbuj online!

Skomentował

f = (             // f is a recursive function taking:
                  //   the input string split into:
  [c,             //     c   = next character (may be undefined if we've reached the end)
      ...r],      //     r[] = array of remaining characters
  s = `\n`        //   the output string s, initialized to a linefeed
) =>              // 
  c ?             // if c is defined:
    s +           //   append s (top of the ASCII art)
    f(r, s + c) + //   append the result of a recursive call to f, using r[] and s + c
    s             //   append s again (bottom of the ASCII art)
  :               // else:
    s             //   append s just once (this is the final middle row) and stop recursion

3
bardzo ładna odpowiedź: D
lois6b

10
@MartinBarker W systemie Windows używam Notepad ++ z domyślnym zakończeniem linii ustawionym na Unix (LF). Problem rozwiązany raz na zawsze. :)
Arnauld

3
Niesamowite! Czy możesz napisać wyjaśnienie dla tych, którzy są nowicjuszami w JS?
Akhoy

3
@Akhoy Dodałem skomentowaną wersję.
Arnauld

3
Dziękuję Ci. Teraz o wiele wyraźniej.
Akhoy

47

05AB1E (starsza wersja) ,  4  3 bajty

Przekreślone &nbsp;4&nbsp;to już nie 4 :)

η.∊

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

η     # Get the prefixes of the (implicit) input-string
 .∊   # Vertically mirror everything with the last line overlapping
      # (which implicitly joins by newlines in the legacy version of 05AB1E)
      # (and output the result implicitly)

W nowej wersji 05AB1E po jawnym »jest wymagane jawne η, dlatego używam starszej wersji 05AB1E tutaj, aby zapisać bajt.


7
Hmm, wydaje się to 6 bajtów w UTF8:\xce\xb7\x2e\xe2\x88\x8a
rubenvb

10
@rubenvb W UTF-8 to naprawdę więcej. 05AB1E używa, podobnie jak niektóre języki programowania używane w innych odpowiedziach (np. Jelly; Japt; Charcoal), własnego kodu źródłowego (który jest CP-1252 w przypadku 05AB1E), gdzie każdy z 256 znaków, które zna, jest pojedynczy bajt.
Kevin Cruijssen

W porządku, wystarczy :).
rubenvb

@KevinCruijssen PHP wydaje się myśleć, że te znaki są nieprawidłowe dla CP-1252, ale może to być po prostu błąd PHP: 3v4l.org/UC1QE
hanshenrik

7
@hanshenrik Dobre pytanie. Rzeczywiście nie jest to CP-1252, ale w rzeczywistości kodowanie 05AB1E , które wykorzystuje niestandardowe kodowanie. Bajty tego kodu w kodzie szesnastkowym to 08 2e 17, które można uruchomić i zweryfikować za pomocą --osabieflagi: tio.run/…
Adnan

21

IBM PC DOS, zestaw 8088,  44  43

d1ee ad8b d6b4 0948 8af8 8ac8 d0e1 49b3 243a cf7d 024e
4e46 861c cd21 861c 52ba 2901 cd21 5ae2 eac3 0d0a 24

Niezmontowane:

    SHR  SI, 1              ; point SI to DOS PSP at 80H (SI intialized at 100H)
    LODSW                   ; load arg length into AL, advance SI to 82H
    MOV  DX, SI             ; save start of string pointer
    MOV  AH, 9              ; DOS API display string function
    DEC  AX                 ; remove leading space from string length
    MOV  BH, AL             ; save string len in BH (AL gets mangled by INT 21H,9)
    MOV  CL, AL             ; set up loop counter in CL
    SHL  CL, 1              ; number of lines = 2 * string length - 1
    DEC  CX
    MOV  BL, '$'            ; end of string marker
LINE_LOOP:
    CMP  CL, BH             ; if CL >= string length, ascend
    JGE  ASCEND
    DEC  SI                 ; descend by backing up two places (always increments)
    DEC  SI                 ; (this is fewer bytes than 'SUB SI, 2' or two branches)
ASCEND:
    INC  SI                 ; increment current string position
    XCHG BL, [SI]           ; swap current string byte with end of string delimiter
    INT  21H                ; write substring to console
    XCHG BL, [SI]           ; restore string byte
    PUSH DX                 ; save output string pointer
    MOV  DX, OFFSET CRLF    ; load CRLF string
    INT  21H                ; write to console
    POP  DX                 ; restore output string pointer
    LOOP LINE_LOOP          ; move to next line
    RET
CRLF DB 0DH,0AH,'$'

Wyjaśnienie

Pętla 2 * input length - 1dla 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+1to mniej bajtów niż struktura rozgałęziająca if / else).

Autonomiczny program wykonywalny, pobiera ciąg wejściowy z wiersza poleceń.

Wynik

wprowadź opis zdjęcia tutaj

Pobierz YT2.COM (43 bajty)


1
Większość smaków DOS ma SI = 100h po załadowaniu pliku COM. To może zaoszczędzić bajt, zastępując pierwszą instrukcję SHR SI, 1.
gastropner

@gastropner bardzo sprytny! Okazuje się, że oryginał i tak nie działa na DOS 1.0, ponieważ liczy się, że CH będzie wynosił 0 (zainicjowanie kosztuje +2 bajty, co nie jest tego warte tylko dla DOS 1). Zaktualizowany o nową wersję!
640 KB

Czy musisz podawać datę za każdym razem, gdy otwierasz terminal?
user14492

1
@ user14492 ha, nie! Właśnie zapomniałem wykadrować tę część zrzutu ekranu DOS!
640 KB

19

Python 2 , 60 52 bajtów

f=lambda s,n=1:s[n:]and[s[:n]]+f(s,n+1)+[s[:n]]or[s]

Wypróbuj online!

Python 3.8 (wersja wstępna) , 50 bajtów

f=lambda s,n=1:s>(x:=s[:n])and[x,*f(s,n+1),x]or[s]

Wypróbuj online!


2
Czy zależy to od przyszłej funkcji 3.8? Która funkcja?
Alexis

7
@alexis tej wykorzystuje się Przypisanie : x:=s[:n].
Arnauld

1
Ach, widzę to teraz dzięki :-) Czytałem wcześniej o tej funkcji, nie mogę się doczekać. Nadal tęsknię za moimi dniami C ...
Alexis

1
Nie drukują one jednak danych wyjściowych. Po prostu tworzą tablicę, prawda?
Jaden Travnik

@JadenTravnik Python automatycznie duplikuje wynik ostatniego wyrażenia, jeśli działa interaktywnie przez konsolę
Xeverous

18

MATL , 8 bajtów

nZv"G@:)

Wypróbuj online!

Podoba mi się ten post dla buźki :)w kodzie, który zajęło mi dużo czasu.

n  % Length of the input string
Zv % Symmetric range ([1 2 ... n ... 1])
"  % For each k in above range
G  % Push input
@: % Push [1 2 ... k]
)  % Index

17

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)


18
[:(i }:,|wyglądają tak smutno…
Adám

Ale to (}: szczęśliwa osoba z fantazyjnymi wąsami
DonFusili

13

Perl 6 , 31 bajtów

{[\~](@_)[0...@_-1...0]}o*.comb

Wypróbuj online!

Anonimowy blok kodu, który pobiera ciąg znaków i zwraca listę wierszy.

Wyjaśnienie:

{                      }o*.comb   # Pass the list of characters into the codeblock
 [\~](@_)                 # Triangular reduce by concatenation
                          # e.g. The list [1,2,3,4] turns into [1,12,123,1234]
         [0...@_-1        # Return the elements from 0 to length of string minus 1
                  ...0]   # And back down to 0

5
To zabawne, że w dzisiejszych czasach nawet golfista Perl jest jednym z najbardziej czytelnych zawodników.
przestał obracać przeciwnie do zegara

7
@ceasedtoturncounterclockwis Cóż, to jest Perl 6. Odpowiedź na Perl 5 jest nadal nieczytelna
Jo King

12

Japt -R , 4 bajty

å+ ê

Skumulowane zmniejszenie ciągu.

-1 bajt dzięki @Shaggy

Wypróbuj online!


Sceptycznie nastawiony do „-R”, który musi być zawarty w ciągu (bez niego wyjście nie działa)
Flying Thunder

3
@FlyingThunder Nie bądź sceptykiem :) zobacz tutaj
Quintec

@Quintec, postanowiłem połączyć flagi w nagłówkach rozwiązania z tym postem, aby zapobiec tym komentarzom.
Kudłaty

1
Dość pewna konwencja to <język> + -flaglub <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
tylko ASCII

@ Tylko ASCII To samo, zapamiętałem to tylko dlatego, że myślałem, jak to rozwiązać w APL i powiedziałem „Zastanawiam się, czy Japt ma to wbudowane”. Ponadto, czy nie użyłem <język> -flag?
Quintec

11

Japt -R , 9 7 bajtów

-2 bajty dzięki Shaggy

Êõ@¯XÃê

Wypróbuj online!



1
@ Shaggy oh czekaj ... Ãto coś
tylko ASCII

Kolejne 300 powtórzeń w drodze, gdy tylko to pytanie kwalifikuje się do nagrody.
Kudłaty


1
@Quintec, łączne zmniejszanie działa również na ciągi, więc nie musisz dzielić na początku. Powiedziałbym również, że jest wystarczająco inny, aby uzasadnić opublikowanie go samemu.
Kudłaty


10

Haskell, 52 50 44 bajty

f x=unlines$init<>reverse$scanr(\_->init)x x

Wypróbuj online!


Witamy na stronie. initswymaga użycia importu, więc musisz dodać import Data.Listlub coś podobnego.
Sriotchilism O'Zaic

@ SriotchilismO'Zaic Nie byłem pewien, czy było to konieczne, aby liczyć, czy nie. Dodano, dziękuję!
Joseph Sible

4
Powinienem także wspomnieć, że mamy czat do rozmowy na temat gry w golfa w Haskell. Jeśli masz jakieś przemyślenia lub pytania, to świetne miejsce.
Sriotchilism O'Zaic

1
Nie mogę uwierzyć, że wymyśliłeś dokładnie to, co zamierzałem zamieścić:import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
Axman6

9

R , 79 65 62 58 bajtów

write(substring(s<-scan(,""),1,c(1:(r=nchar(s)),r-1:r)),1)

Wypró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 scaniwrite

Unikanie pętli (i substr) jest miłe.


2
pętle są całkowicie niepotrzebne, ponieważ są sapply- substringzrobią to, co chcesz (z dodatkową końcową pustą linią) i dla 65 bajtów ! Na pewno nie pomyślałbym, substringgdybym nie widział twojego miłego wykorzystania substrtutaj.
Giuseppe

1
Haha, dobry chwyt! Myślę, że nauczyłem się więcej o funkcjach alternatywnych dla tego samego zadania z twoich edycji niż gdziekolwiek indziej w tym momencie.
CriminallyVulgar

2
Haha, R ma głupią liczbę synonimów z subtelnymi różnicami. Za każdym razem, gdy czuję, że znam najlepsze narzędzie do pracy, znajduję coś innego, co jest nieco lepsze w dziwnym przypadku na krawędzi ...
Giuseppe

3
A może wypróbuj online! za pomocą scani write? Tylko 59 bajtów!
Nick Kennedy

1
@NickKennedy 58 bajtów, jeśli zastąpi ""się 1.
Giuseppe

7

Galaretka , 5 4 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

¹ƤŒḄ     input: "Hi!"
¹Ƥ       prefixes of the input: [["H"], ["H", "i"], ["H", "i", "!"]]
  ŒḄ     bounce, using each array: [["H"], ["H", "i"], ["H", "i", "!"], ["H", "i"], ["H"]]

Innym podejściem zaproponowanym przez @JonathanAllan jest ;\ŒḄłączne ograniczenie ( \) konkatenacji ( ;), co jest kolejnym sposobem generowania prefiksów.


Wolno nam otrzymując tablicę wierszy, więc można zderzyć się Yz kodu (zrobiłbym stopkę albo ÇYczy ÇŒṘ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ę ÇŒṘ)
Jonathan Allan

@JonathanAllan dzięki! bardzo ciekawe :)
Conor O'Brien

7

Python 3.8 (wersja wstępna) , 48 bajtów

lambda s,r='':(l:=[r:=r+c for c in s])+l[-2::-1]

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

f=lambda s,l=[]:s and f(s[:-1],[s]+l)or l+l[-2::-1]

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ć.

f=lambda s,l=[]:s and f(s[:-1],[s]+l+[s])or l

Wypróbuj online!


Czy nie musisz dodawać nowej linii i drukować, aby uzyskać pożądany wynik?
Jaden Travnik

Coś takiego print('\n'.join(f(s))) ?
Jaden Travnik

@JadenTravnik Domyślne ustawienia społeczności (po których następuje to wyzwanie) zezwalają na funkcje oprócz programów. I autor wyzwania powiedział w komentarzach, że są w porządku z listą ciągów w łączeniu, co jest domyślnie dozwolone , chociaż ja sam nie lubię tego jako domyślnego i oceniłem to. Zobacz także podsumowanie reguł Python .
xnor

Huh Ok, dzięki za zwrócenie na to uwagi. Im nowy ¯_ (ツ) _ / ¯. Jeśli tak jest, oto konkurencyjne 45-bajtowe rozwiązanie:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Travnik

@JadenTravnik Nie ma problemu, zasady są niestety rozrzucone po tym miejscu. Twój przykład jest jednak fragmentem, który jest niedozwolony. Musi robić wejścia i wyjścia jak s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]. Zobacz przykłady u góry tutaj .
xnor

6

Węgiel drzewny , 5 bajtów

G^Lθθ

Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie: 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.


6

C # (interaktywny kompilator Visual C #) , 123 109 94 84 74 bajty

Zakł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)

a=>new int[a.Length*2-1].Select((b,i)=>a.SkipLast(Math.Abs(a.Length-i-1)))

Wypróbuj online!



5

Brachylog (v2), 6 bajtów

a₀ᶠ⊆.↔

Wypróbuj online!

Podanie funkcji, zwrócenie tablicy wierszy. Luźno oparty na odpowiedzi @ Fatalize .

Wyjaśnienie

a₀ᶠ⊆.↔
    .↔  Find a palindrome
   ⊆      that contains, in order,
  ᶠ       all
a₀        prefixes of {the input}

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.


5

PowerShell, 89 87 66 bajtów

-2 bajty dzięki @AdmBorkBork

param($a)0..($d=$a.Length-1)|%{$b+=,-join$a[0..$_]};$b+$b[--$d..0]

Wypróbuj online!

Przykro mi z tego powodu! Zredagowałem go, a także udało mi się zgolić kilka bajtów.


Możesz --$dzamiast ($d-1)ocalić parę na końcu.
AdmBorkBork

@AdmBorkBork Dzięki.
Gabriel Mills

Niestety nie działa to przy wprowadzaniu pojedynczych znaków.
AdmBorkBork


4

APL (Dyalog Unicode) , 9 bajtów SBCS

Anonimowa ukryta funkcja prefiksu. Zwraca listę ciągów.

(⊢,1↓⌽),\

Wypróbuj online!

,\ lista prefiksów (świeci, kumulatywna konkatenacja)

() Zastosuj następującą funkcję do tej listy:

 odwrócona lista

1↓ upuść pierwszy przedmiot

, prepend

 niezmodyfikowana lista




4

SNOBOL4 (CSNOBOL4) , 118 bajtów

	N =INPUT
	L =1
1	X =LT(X,SIZE(N)) X + 1	:F(D)
O	N ARB . OUTPUT POS(X)	:($L)
D	X =GT(X) X - 1	:F(END)
	L ='D'	:(O)
END

Wypróbuj online!

Wygląda na to, że jest błąd w tej implementacji SNOBOL; próba zastąpienia etykiety Detykietą 2powoduje błąd, chociaż wskazuje to w instrukcji Vanilla SNOBOL (wyróżnienie dodane)

Jeśli etykieta jest obecna, musi zaczynać się od pierwszego znaku linii. Etykiety podają nazwę instrukcji i służą jako cel do przeniesienia kontroli z pola GOTO dowolnej instrukcji. Etykiety muszą zaczynać się od litery lub cyfry, po której opcjonalnie może następować dowolny ciąg znaków. Pole etykiety jest zakończone znakiem pustym, tabulatorem lub średnikiem. Jeśli pierwszy znak linii jest pusty lub tabulator, pole etykiety jest nieobecne.

Przypuszczam, że interpreter CSNOBOL obsługuje tylko jedną etykietę rozpoczynającą się od liczby całkowitej.


4

APL + WIN, 31 bajtów

Monity o wprowadzenie ciągu:

 ⊃((⍳n),1↓⌽⍳n)↑¨(¯1+2×n←⍴s)⍴⊂s←⎕

Wyjaśnienie:

(¯1+2×n←⍴s)⍴⊂s create a nested vector of the string of length =1+2x length of string

((⍳n),1↓⌽⍳n)↑¨ progressively select elements from each element of the nested vector 
              following the pattern 1  2 ...to n to n-1 ... 1

⊃ convert nested vector into a 2d array.

4

F # (.NET Core) , 67 61 bajtów

let l=s.Length
[1..l*2-1]|>Seq.map(fun i->s.[..l-abs(i-l)-1])

Wypróbuj online!

Wejście to stringa 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ć.


4

sed , 31 35 bajtów

:x
h
s/.\n.*\|.$//
/^$/{x;q}
H
G
bx

Wypró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.

:x                 
h                  Copy the current chunk to hold space
s/.\n.*\|.$//      Remove the last letter of the first line, and all other lines (if there are any)
/^$/{x;q}          If pattern space is empty we're done; output hold space
H                  Add the shortened line to the end of hold space
G                  and add the new hold space to pattern space.
bx                 

1
Fajny, ale środkowa linia (pełne oryginalne wejście) wydaje się być wyświetlana 3 razy. Przynajmniej z GNU sed. To samo w TIO. Jakiej sedimplementacji używasz i jak przekazujesz jej dane wejściowe? (BTW, zmiana podstawienia, aby s/.\n.*\|.$//to
naprawić

2
Ach, masz rację. To nie jest problem z moją sedimplementacją (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ę.
Sophia Lechner

4

Python 2 , 131 100 84 bajtów

Moja pierwsza odpowiedź na Code Golf!

-47 bajtów ogółem dzięki @ SriotchilismO'Zaic

a,b=[],len(x)
for i in range(2*b-1):
 if i<b:a+=x[i]
 else:a=a[:-1]
 print''.join(a)

Wypróbuj online!


1
Witamy w PCG! Zapoznaj się z przewodnikiem i kodeksem postępowania . Dobre rozwiązanie!
akozi

2
W przypadku Pythona możesz użyć ;s zamiast nowego wiersza, aby uniknąć wcięcia. Również nie ma potrzeby odstępów między printi''
Sriotchilism O'Zaic

Dzięki za wskazówki @ SriotchilismO'Zaic, naprawdę pomogło mi zmniejszyć liczbę bajtów!
Yoni Matz

2
I ostatnia rzecz, jeśli tworzysz aciąg zamiast listy, nie potrzebujesz już joinwcale i możesz po prostu print a.
Sriotchilism O'Zaic

4
Nieprawidłowy, musi to być pełny program lub funkcja, przy założeniu, że wejście jest w x.
Tylko ASCII

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.