Tôi đã mất rất nhiều thời gian để làm điều này, xin vui lòng. (Nhận xét YouTube # 1)


84

Giữ lên ..... đây không phải là trolling.


Lý lịch

Những ngày này trên YouTube, các phần bình luận tràn ngập các mẫu như vậy:

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

nơi chỉ Stringlà một giữ chỗ và đề cập đến bất kỳ sự kết hợp của các nhân vật. Những mẫu này thường đi kèm với một It took me a lot of time to make this, pls likehoặc một cái gì đó, và thường OP thành công trong việc tích lũy một số lượt thích.


Nhiệm vụ

Mặc dù bạn đã có một tài năng tích lũy tuyệt vời trên PPCG với kỹ năng chơi gôn quyến rũ của mình, bạn chắc chắn không phải là lựa chọn hàng đầu để đưa ra những nhận xét dí dỏm hoặc tham khảo các meme trong các phần bình luận trên YouTube. Do đó, các nhận xét mang tính xây dựng của bạn được thực hiện với suy nghĩ có chủ ý sẽ tích lũy một vài lượt không 'thích' trên YouTube. Bạn muốn điều này thay đổi. Vì vậy, bạn dùng đến việc tạo ra các mẫu sáo rỗng đã nói ở trên để đạt được tham vọng cuối cùng của mình, nhưng không lãng phí bất kỳ thời gian nào để cố gắng tự viết chúng.

Nói một cách đơn giản, nhiệm vụ của bạn là lấy một chuỗi, nói svà các 2*s.length - 1chuỗi con đầu ra của s, được phân định bởi một dòng mới, để tuân thủ mẫu sau:

(cho s= "Xin chào")

H
He
Hel
Hell
Hello
Hell
Hel
He
H

Đầu vào

Một chuỗi đơn s. Mặc định đầu vào của cộng đồng áp dụng. Bạn có thể giả sử rằng chuỗi đầu vào sẽ chỉ chứa các ký tự ASCII có thể in được.


Đầu ra

Một số dòng được phân tách bằng một dòng mới, tạo thành một mẫu thích hợp như được giải thích ở trên. Mặc định đầu ra của cộng đồng áp dụng. Hàng đầu và dấu trống (không chứa ký tự hoặc ký tự không thể nhìn thấy, như khoảng trắng) trong đầu ra được cho phép.


Trường hợp thử nghiệm

Một trường hợp kiểm tra nhiều từ:

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

Lưu ý rằng có các biến dạng rõ ràng trong hình dạng đầu ra của trường hợp thử nghiệm ở trên (ví dụ: dòng hai và dòng ba của đầu ra xuất hiện giống nhau). Đó là bởi vì chúng ta không thể nhìn thấy các khoảng trắng ở cuối. Chương trình của bạn KHÔNG cần cố gắng khắc phục những biến dạng này.


Tiêu chí chiến thắng

Đây là , vì vậy mã ngắn nhất tính theo byte trong mỗi ngôn ngữ sẽ thắng!


19
Tôi đang lên kế hoạch thực hiện thêm một số nhận xét về các thách thức liên quan đến YouTube trong tương lai; do đó YouTube Comments #1trong tiêu đề.
Arjun

1
Là trả lại một loạt các dòng cho phép?
ai đó

2
Chúng ta có thể lấy đầu vào là một mảng các ký tự và trả về một mảng các ký tự không?
Shaggy


3
Đầu vào có được ""không? Một nhân vật duy nhất như thế "H"nào? Nếu vậy, đầu ra cho cả hai trường hợp đó là gì?
admBorkBork

Câu trả lời:


103

Brainfuck , 32 byte

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

Hãy thử trực tuyến!

Vòng lặp giống nhau được sử dụng cho cả hai nửa của mẫu.

Giải trình:

,             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
Điều đó thật tuyệt vời. Tôi đã cố gắng làm một cái gì đó trong brainfuck nhưng nó đã xuất hiện khoảng 10 lần trong thời gian dài và vẫn không hoạt động đúng.
ElPedro

34
Không bao giờ nghĩ rằng tôi thấy một thách thức trong đó câu trả lời Brainfuck thực sự ghi điểm cạnh tranh, công việc tuyệt vời!
Dấu hỏi

54

JavaScript (ES6), 36 byte

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

Hãy thử trực tuyến!

Đã bình luận

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
câu trả lời rất hay: D
lois6b

10
@MartinBarker Trên Windows, tôi đang sử dụng Notepad ++ với Kết thúc dòng mặc định được chuyển sang Unix (LF). Vấn đề được giải quyết một lần và mãi mãi. :)
Arnauld

3
Tuyệt vời! Bạn có thể viết một lời giải thích cho điều này cho những người hoàn toàn mới làm quen với JS không?
Akhoy

3
@Akhoy Tôi đã thêm một phiên bản nhận xét.
Arnauld

3
Cảm ơn bạn. Bây giờ rõ ràng hơn nhiều.
Akhoy

47

05AB1E (di sản) ,  4  3 byte

Bỏ qua &nbsp;4&nbsp;không còn 4 :)

η.∊

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

η     # 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)

Trong phiên bản mới của 05AB1E, và rõ ràng »là bắt buộc sau η, đó là lý do tại sao tôi sử dụng phiên bản kế thừa của 05AB1E ở đây để lưu một byte.


7
Hmm, có vẻ như 6 byte trong UTF8:\xce\xb7\x2e\xe2\x88\x8a
rubenvb

10
@rubenvb Trong UTF-8 thực sự nhiều hơn thế. 05AB1E sử dụng, giống như một số ngôn ngữ lập trình được sử dụng trong các câu trả lời khác (ví dụ: Jelly; Japt; Char than), đó là mã nguồn riêng (là CP-1252 trong trường hợp 05AB1E), trong đó mỗi 256 ký tự mà nó biết là byte đơn.
Kevin Cruijssen

Được rồi, đủ công bằng :).
rubenvb

@KevinCruijssen PHP dường như nghĩ rằng các ký tự này không hợp lệ đối với CP-1252, nhưng có thể chỉ là một lỗi PHP: 3v4l.org/UC1QE
hanshenrik

7
@hanshenrik Câu hỏi hay. Nó thực sự không phải là CP-1252, nhưng thực tế là mã hóa 05AB1E , đây là mã hóa tùy chỉnh mà nó sử dụng. Các byte của mã này là hex 08 2e 17, mà bạn có thể chạy và xác minh bằng --osabiecờ: tio.run/ Kẻ
Adnan

21

IBM PC DOS, lắp ráp 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

Chưa được lắp ráp:

    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,'$'

Giải trình

Vòng lặp 2 * input length - 1cho mỗi hàng. Hàm hiển thị chuỗi của API DOS ( INT 21H,9) ghi một $chuỗi kết thúc vào màn hình, do đó, mỗi lần qua vòng lặp, ký tự sau lần hiển thị cuối cùng sẽ được hoán đổi với dấu kết thúc chuỗi cuối.

Bộ đếm vòng lặp được so sánh với độ dài chuỗi và nếu nó lớn hơn (có nghĩa là phần tăng dần của đầu ra) thì vị trí chuỗi / hoán đổi được tăng lên, nếu không, nó giảm dần (thực tế nó -1-1+1có ít byte hơn cấu trúc phân nhánh if / khác).

Chương trình thực thi độc lập, lấy chuỗi đầu vào từ dòng lệnh.

Đầu ra

nhập mô tả hình ảnh ở đây

Tải xuống YT2.COM (43 byte)


1
Hầu hết các hương vị DOS có SI = 100h khi tải tệp COM. Điều này có thể giúp bạn tiết kiệm một byte bằng cách thay thế hướng dẫn đầu tiên bằng SHR SI, 1.
dạ dày

@gastropner rất thông minh! Hóa ra ban đầu sẽ không chạy trên DOS 1.0 vì nó tính CH là 0 (sẽ tốn +2 byte để khởi tạo, điều này không đáng giá chỉ với DOS 1). Cập nhật với phiên bản mới!
640KB

Bạn có phải nhập ngày mỗi khi bạn mở thiết bị đầu cuối không?
dùng14492

1
@ user14492 ha, không! Tôi chỉ quên cắt phần đó ra khỏi ảnh chụp màn hình DOS!
640KB

19

Python 2 , 60 52 byte

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

Hãy thử trực tuyến!

Python 3.8 (tiền phát hành) , 50 byte

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

Hãy thử trực tuyến!


2
Điều này phụ thuộc vào một tính năng sắp tới của 3,8? Tính năng nào?
alexis

7
@alexis Đây là sử dụng biểu thức gán : x:=s[:n].
Arnauld

1
À, tôi thấy nó bây giờ cảm ơn :-) Tôi đã đọc về tính năng này trước đây, mong chờ nó. Vẫn nhớ nó từ những ngày C của tôi ...
alexis

1
Chúng không in đầu ra mặc dù. Họ chỉ làm cho mảng, phải không?
Jaden Tra Mand ngày

@JadenTra Mand Python tự động nhân đôi kết quả biểu thức cuối cùng nếu chạy tương tác thông qua bảng điều khiển
Xeverous

18

MATL , 8 byte

nZv"G@:)

Hãy thử trực tuyến!

Xin vui lòng thích bài đăng này cho các mặt cười :)trong mã mà tôi đã mất rất nhiều thời gian để thực hiện.

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 byte

Chức năng tiền tố ẩn danh. Trả về một ma trận ký tự đệm không gian.

[:(}:,|.)]\

Hãy thử trực tuyến!

]\ danh sách các tiền tố

[:(... ) áp dụng các chức năng sau đây vào danh sách đó

|. danh sách ngược

, chuẩn bị với

}: danh sách rút gọn (không có mục cuối)


18
[:(}:,|trông thật buồn khi
Adám

Nhưng đó là (}: một người hạnh phúc với bộ ria mép lạ mắt
DonFusili

13

Perl 6 , 31 byte

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

Hãy thử trực tuyến!

Khối mã ẩn danh nhận một chuỗi và trả về một danh sách các dòng.

Giải trình:

{                      }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
Thật buồn cười là những ngày này, ngay cả golf Perl cũng là một trong những thí sinh dễ đọc nhất.
đã ngừng quay ngược chiều

7
@ceasetoturncountclockwis Vâng, đây là Perl 6. Câu trả lời Perl 5 vẫn không thể đọc được
Jo King

12

Japt -R , 4 byte

å+ ê

Tích lũy giảm trên một chuỗi.

-1 byte nhờ @Shaggy

Hãy thử trực tuyến!


Nghi ngờ về "-R" phải được bao gồm trong chuỗi (không có nó thì đầu ra không hoạt động)
Flying Thunder

3
@FellingThunder Hãy là một người hoài nghi không còn nữa :) xem tại đây
Quintec

@Quintec, tôi đã liên kết các cờ trong tiêu đề giải pháp của mình với bài đăng meta đó để cố gắng tránh các loại bình luận này.
Xù xì

1
Quy ước khá chắc chắn là <ngôn ngữ> + -flaghoặc <ngôn ngữ> -flag. Ngoài ra ,: | Tôi đã quên giảm tích lũy là một điều, tôi thề tôi đã bỏ qua nó mỗi khi tôi nhìn thấy nó
ASCII chỉ có

Chỉ có ASCII, tôi chỉ nhớ nó bởi vì tôi đang nghĩ làm thế nào tôi sẽ giải quyết vấn đề này trong APL và nói "Tôi tự hỏi liệu Japt có tích hợp này không". Ngoài ra, tôi đã không sử dụng <ngôn ngữ> -flag?
Quintec

11

Japt -R , 9 7 byte

-2 byte nhờ Shaggy

Êõ@¯XÃê

Hãy thử trực tuyến!



1
@Shaggy oh chờ đã ... Ãlà một điều
ASCII chỉ có

300 đại diện khác đang trên đường ngay khi câu hỏi này đủ điều kiện nhận tiền thưởng.
Xù xì


1
@Quintec, quá trình giảm tích lũy cũng hoạt động trên các chuỗi, vì vậy bạn không cần phải phân tách khi bắt đầu. Tôi cũng muốn nói rằng đủ khác nhau để đảm bảo đăng nó cho mình.
Shaggy


10

Haskell, 52 50 44 byte

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

Hãy thử trực tuyến!


Chào mừng đến với trang web. initsyêu cầu nhập khẩu để được sử dụng, do đó bạn sẽ cần thêm import Data.Listhoặc một cái gì đó tương tự.
Thuật sĩ lúa mì

@ SriotchilismO'Z cổ Không chắc có cần đếm hay không. Đã thêm, cảm ơn!
Joseph Sible

4
Ngoài ra tôi nên đề cập đến việc chúng tôi có một phòng trò chuyện để nói chuyện chơi golf Haskell. Nếu bạn có bất kỳ suy nghĩ hoặc câu hỏi đó là một nơi tuyệt vời.
Thuật sĩ lúa mì

1
Tôi không thể tin rằng bạn đã đưa ra chính xác những gì tôi sẽ đăng:import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
Axman6

9

R , 79 65 62 58 byte

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

Hãy thử trực tuyến!

-14 bởi kiến ​​thức chức năng vượt trội của Giuseppe

-3 với chỉ mục sạch hơn

-4 cảm ơn Nick Kennedy và Giuseppe đã chuyển đến scanwrite

Tránh các vòng lặp (và substr) là tốt đẹp.


2
các vòng lặp hoàn toàn không cần thiết, như vậy sapply- substringsẽ làm những gì bạn muốn (với một dòng trống bổ sung) và cho 65 byte ! Tôi chắc chắn sẽ không nghĩ đến substringnếu tôi không thấy việc sử dụng tốt đẹp của bạn substrở đây.
Giuseppe

1
Haha, bắt tốt! Tôi nghĩ rằng tôi đã học được nhiều hơn về các chức năng thay thế cho cùng một công việc từ các chỉnh sửa của bạn hơn bất kỳ nơi nào khác vào thời điểm này.
CriminallyVulgar

2
Haha, R có một số từ đồng nghĩa ngu ngốc với sự khác biệt tinh tế. Mỗi lần tôi cảm thấy mình biết công cụ tốt nhất cho công việc, tôi lại tìm thấy thứ gì đó tốt hơn một chút trong trường hợp kỳ lạ ...
Giuseppe

3
Làm thế nào về thử trực tuyến! sử dụng scanwrite? Chỉ 59 byte!
Nick Kennedy

1
@NickKennedy 58 byte nếu bạn thay thế ""bằng 1.
Giuseppe

7

Thạch , 5 4 byte

-1 byte nhờ @Jonathan ALLan !

¹ƤŒḄ

Hãy thử trực tuyến! Tôi nghĩ rằng đây là câu trả lời Jelly thứ hai của tôi? Tôi không biết nếu điều này là tối ưu. Tôi tin chắc hơn về nó là tối ưu. Trả về một mảng các dòng.

Giải trình

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

Một cách tiếp cận khác, được đề xuất bởi @Jonathan ALLan, là ;\ŒḄ, làm giảm tích lũy ( \) concatenation ( ;), đó là một cách khác để tạo tiền tố.


Chúng tôi được phép tạo ra một loạt các dòng, vì vậy bạn có thể Ythoát ra khỏi mã (Tôi sẽ tạo chân trang ÇYhoặc ÇŒṘđể tránh bản in bị vỡ hoàn toàn của chương trình). Bên cạnh đó, điều này cũng được triển khai tương tự như ;\ŒḄvới cùng một số byte (bạn cũng có thể chuyển đối số "blah"như Jelly diễn giải đây là danh sách các ký tự - thực sự bạn là một danh sách các danh sách các ký tự, như bạn sẽ thấy nếu bạn làm chân trang ÇŒṘ)
Jonathan Allan

@Jonathan Allan cảm ơn! rất thú vị :)
Conor O'Brien

7

Python 3.8 (tiền phát hành) , 48 byte

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

Hãy thử trực tuyến!

Sử dụng các biểu thức gán với :=để tích lũy một danh sách các tiền tố và sau đó một lần nữa để lưu kết quả để nối ngược lại (không có char đầu tiên).

Python 2 , 51 byte

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

Hãy thử trực tuyến!

Chúng tôi gần như có giải pháp 45 byte tuyệt vời sau đây, nhưng nó có chuỗi gốc hai lần và tôi không thấy một cách ngắn để khắc phục điều này.

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

Hãy thử trực tuyến!


Bạn có cần thêm một số dòng mới và in để có được đầu ra mong muốn không?
Jaden Tra Mand ngày

Một cái gì đó như thế print('\n'.join(f(s))) nào?
Jaden Tra Mand ngày

@JadenTra Mand Các cộng đồng mặc định (mà thách thức này tuân theo) cho phép các chức năng ngoài các chương trình. Và tác giả thách thức đã nói trong các bình luận rằng họ ổn với danh sách các chuỗi trong khi tham gia như được cho phép theo mặc định , mặc dù bản thân tôi không thích điều này như một mặc định và đã hạ cấp nó. Xem thêm tóm tắt quy tắc Python .
xnor

Huh. Ok, cảm ơn đã chỉ ra rằng. Tôi mới ¯_ (ツ) _ /. Nếu đó là trường hợp, đây là một giải pháp 45 byte cạnh tranh:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Tra Mand

@JadenTra Mand Không có vấn đề gì, các quy tắc không may bị phân tán khắp nơi. Ví dụ của bạn là một đoạn không được phép. Nó cần phải làm đầu vào và đầu ra như thế nào s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]. Xem các ví dụ ở trên cùng ở đây .
xnor

6

Than , 5 byte

G^Lθθ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải thích: vẽ một đa giác được lấp đầy, ^chỉ định rằng các cạnh nằm xuống bên phải và xuống bên trái (đa giác sau đó tự động đóng lại), Lθchỉ định độ dài của các cạnh đó là độ dài của đầu vào ban đầu và cuối cùng θchỉ định chuỗi điền.




5

Brachylog (v2), 6 byte

a₀ᶠ⊆.↔

Hãy thử trực tuyến!

Chức năng trình, trả về một loạt các dòng. Dựa vào câu trả lời của @ Fatalize .

Giải trình

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

Thứ tự tiebreak ở đây được thiết lập bởi , khi được sử dụng với mẫu luồng này, ưu tiên đầu ra ngắn nhất có thể, liên kết bằng cách đặt các phần tử đã cho càng sớm càng tốt . Đầu ra ngắn nhất có thể là những gì chúng ta muốn ở đây (do không thể có bất kỳ tiền tố trùng lặp nào) và đặt các phần tử đã cho (tức là các tiền tố) càng sớm càng tốt sẽ đặt chúng vào nửa đầu (làm tròn lên) đầu ra. Vì chúng tôi cũng yêu cầu chúng được đặt theo cùng một thứ tự, chúng tôi tình cờ có được chính xác mẫu mà chúng tôi cần mặc dù mô tả chúng tôi đã đưa ra cho Brachylog rất chung chung; các tiebreak xảy ra chính xác, khiến Brachylog chọn đầu ra mà chúng ta muốn thay vì một số đầu ra khác tuân theo mô tả.


5

PowerShell, 89 87 66 byte

-2 byte nhờ @AdmBorkBork

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

Hãy thử trực tuyến!

Nó thực sự không hoạt động như được chỉ định trước đó, xin lỗi về điều đó! Tôi đã chỉnh sửa nó và cũng đã quản lý để tắt một số byte.


Bạn có thể --$dthay vì ($d-1)để cứu một cặp vợ chồng ở cuối.
admBorkBork

@AdmBorkBork Cảm ơn.
Gabriel Mills

Điều này không hoạt động cho đầu vào một ký tự, đáng buồn.
admBorkBork


4

APL (Dyalog Unicode) , 9 byte SBCS

Chức năng tiền tố ẩn danh. Trả về danh sách các chuỗi.

(⊢,1↓⌽),\

Hãy thử trực tuyến!

,\ danh sách các tiền tố (lit, phép nối tích lũy)

(... ) áp dụng các chức năng sau đây vào danh sách đó:

 danh sách đảo ngược

1↓ thả mục đầu tiên

, trả trước

 danh sách chưa sửa đổi




4

SNOBOL4 (CSNOBOL4) , 118 byte

	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

Hãy thử trực tuyến!

Dường như có một lỗi trong việc triển khai SNOBOL này; cố gắng thay thế nhãn Dbằng nhãn 2gây ra lỗi, mặc dù hướng dẫn sử dụng cho Vanilla SNOBOL chỉ ra rằng (nhấn mạnh thêm)

Nếu một nhãn có mặt, nó phải bắt đầu bằng ký tự đầu tiên của dòng. Các nhãn cung cấp tên cho câu lệnh và đóng vai trò là mục tiêu để chuyển quyền kiểm soát từ trường GOTO của bất kỳ câu lệnh nào. Các nhãn phải bắt đầu bằng một chữ cái hoặc chữ số, tùy ý theo sau là một chuỗi ký tự tùy ý. Trường nhãn được kết thúc bằng ô trống ký tự, tab hoặc dấu chấm phẩy. Nếu ký tự đầu tiên của một dòng trống hoặc tab, trường nhãn không có.

Giả sử của tôi là trình thông dịch CSNOBOL chỉ hỗ trợ một nhãn duy nhất bắt đầu bằng một số nguyên.


4

APL + THẮNG, 31 byte

Lời nhắc cho đầu vào của chuỗi:

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

Giải trình:

(¯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 byte

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

Hãy thử trực tuyến!

Đầu vào là một stringvà đầu ra là mộtseq<string>

Một giải pháp khác có thể là let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]80ish byte ... Tôi không chắc rằng nó đáng để xem xét.


4

sed , 31 35 byte

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

Hãy thử trực tuyến!

Giải trình

Ở đầu mỗi lần lặp của vòng lặp, không gian mẫu là một số "khối trung tâm" của đầu ra mong muốn và mỗi vòng lặp thêm một bản sao rút gọn vào đầu và cuối.

: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
Đẹp một, nhưng đường giữa (đầu vào ban đầu đầy đủ) dường như là đầu ra 3 lần. Ít nhất là với GNU sed. Tương tự trên TIO. sedViệc sử dụng nào bạn sử dụng và làm thế nào bạn vượt qua nó đầu vào? (BTW, thay đổi sự thay thế để s/.\n.*\|.$//sửa nó.)
manatwork

2
À, bạn nói đúng. Đó không phải là vấn đề với sedviệc triển khai của tôi (sử dụng GNU phiên bản 4.2.1), tôi chỉ không nhận thấy lỗi. Tôi đã chơi xung quanh với một số bản sửa lỗi khác và không thể tìm thấy bất cứ thứ gì thêm ít hơn bốn byte vì vậy tôi đang áp dụng bản sửa lỗi của bạn, cảm ơn bạn.
Sophia Lechner

4

Con trăn 2 , 131 100 84 byte

Câu trả lời đầu tiên của tôi về Code Golf!

-47 byte tổng thể nhờ @ SriotchilismO'Z cổ

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

Hãy thử trực tuyến!


1
Chào mừng bạn đến với PCG! Hãy chắc chắn để đọc các tour du lịch và quy tắc ứng xử . Giải pháp tốt!
akozi

2
Đối với python, bạn có thể sử dụng ;s thay vì dòng mới để tránh thụt lề. Cũng không cần khoảng trống giữa print''
Wheat Wizard

Cảm ơn những lời khuyên @ SriotchilismO'Z cổ, thực sự đã giúp giảm số byte của tôi!
Yoni Matz

2
Và một điều cuối cùng, nếu bạn tạo amột chuỗi chứ không phải là một danh sách, bạn không còn cầnjoin đến tất cả và bạn có thể chỉ cần print a.
Thuật sĩ lúa mì

4
Không hợp lệ, nó cần phải là một chương trình hoặc chức năng đầy đủ, trong khi bạn cho rằng đầu vào là trong x.
ASCII - chỉ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.