84

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

（用于s=“ Hello”）

H
He
Hel
Hell
Hello
Hell
Hel
He
H

# 测试用例

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

19

Arjun

1

2

3

3

AdmBorkBork

Answers:

103

# 操蛋，32字节

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

### 说明：

,             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

ElPedro

34

54

# JavaScript（ES6），36个字节

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

### 已评论

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

lois6b

10
@MartinBarker在Windows上，我使用的是Notepad ++，并且默认的Line Ending设置为Unix (LF)。问题一劳永逸。:)
Arnauld

3

3
@Akhoy我添加了评论版本。
Arnauld

3

47

# 05AB1E（旧版）， 4  3 字节

η.∊

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

7

rubenvb

10
@rubenvb在UTF-8中确实更多。就像其他答案中使用的某些编程语言（例如Jelly; Japt; Charcoal）一样，05AB1E使用自己的源代码（对于05AB1E，它是CP-1252），在其中知道的256个字符中的每个字符都是单字节。

rubenvb

@KevinCruijssen PHP似乎认为这些字符对于CP-1252无效，但可能只是一个PHP错误：3v4l.org/UC1QE
hanshenrik

7
@hanshenrik好问题。实际上，它不是CP-1252，而是05AB1E编码，它是它使用的自定义编码。这个代码在十六进制的字节08 2e 17，它可以运行，并与验证--osabie标志：tio.run/...

21

# IBM PC DOS，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

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

1

gastropner

@gastropner非常聪明！事实证明，原始版本无论如何都不会在DOS 1.0上运行，因为它指望CH为0（初始化需要花费+2字节，这对于DOS 1而言是不值得的）。更新了新版本！
640KB

user14492

1
@ user14492哈，不！我只是忘了从DOS屏幕截图中裁剪掉那部分！
640KB

19

# Python 2中，60 52个字节

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

# Python 3.8（预发布），50字节

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

2

Alexis

7
@alexis这是通过使用一个赋值表达式x:=s[:n]
Arnauld

1

Alexis

1

Jaden Travnik

@JadenTravnik如果通过控制台交互运行，Python会自动将最后一个表达式的结果

18

# MATL，8字节

nZv"G@:)

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个字节

[:(}:,|.)]\

]\ 前缀列表

[:() 将以下功能应用于该列表

|. 反向列表

, 前置

}: 缩减（无最后一项）列表

18
[:(并且}:,|看起来很悲伤...

13

# Perl 6，31个字节

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

### 说明：

{                      }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

7
@ceasedtoturncounterclockwis好吧，这是Perl6。Perl5的答案仍然难以理解
Jo King

12

# Japt -R，4个字节

å+ ê

-1字节感谢@Shaggy

Flying Thunder

3
@FlyingThunder不再怀疑：) 参见此处
Quintec

@Quintec，我已将解决方案标题中的标志链接到该元发布，以尝试抢占这些评论。

1

@ ASCII-only同样，我只记得它是因为我在考虑如何在APL中解决此问题，并说：“我想知道Japt是否具有此内置函数”。另外，我没有使用<language> -flag吗？
Quintec

11

# Japt-R，9 7字节

-2个字节，感谢Shaggy

Êõ@¯XÃê

1
@Shaggy哦，等等... Ã是一回事

1

1
@Quintec，累积归约也适用于字符串，因此您无需在开始时进行拆分。我还要说的是，它足以保证自己发布。

10

# 哈斯克尔， 5250 44个字节

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

@ SriotchilismO'Zaic不确定是否需要计数。添加，谢谢！
Joseph Sible

4

1

Axman6

9

# R，79 65 62 58字节

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

-14由朱塞佩的高级功能知识

-3，索引更清晰

-4感谢尼克·肯尼迪和Giuseppe的举动scanwrite

2

1

CriminallyVulgar

2

Giuseppe

3

1
@NickKennedy 58字节（如果替换""为）1

7

# 果冻，5 4字节

-1个字节感谢@JonathanAllan

¹ƤŒḄ

## 说明

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

@JonathanAllan提出的另一种方法是;\ŒḄ，该方法可累计减少（\）级联（;），这是生成前缀的另一种方法。

@JonathanAllan谢谢！非常有趣:)
Conor O'Brien

7

# Python 3.8（预发布），48字节

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

# Python 2，51个字节

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

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

Jaden Travnik

print('\n'.join(f(s))) 什么？
Jaden Travnik

@JadenTravnik社区默认设置（此挑战遵循）允许除程序外的功能。挑战作者在评论中说，默认情况下允许使用连接中的字符串列表，但我自己不喜欢将其作为默认值，因此对此表示反对。另请参阅Python规则摘要
xnor

Jaden Travnik

@JadenTravnik没问题，不幸的是规则散布在整个地方。不过，您的示例是不允许的摘录。它需要像一样进行输入和输出s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]。请参阅此处顶部示例
xnor

6

Ｇ^Ｌθθ

6

# C＃（Visual C＃中交互式编译器），123个109 94 84 74字节

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

5

Bounce@Prefixes

5

# Brachylog（v2），6个字节

a₀ᶠ⊆.↔

## 说明

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

5

# PowerShell，89 87 66字节

-2个字节，感谢@AdmBorkBork

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

AdmBorkBork

@AdmBorkBork谢谢。

AdmBorkBork

5

# PowerShell，46字节

(\$l=\$args|% t*y|%{(\$s+=\$_);++\$i})+\$l[\$i..0]|gu

# PowerShell，42个字节（YouTube专用，脏）

(\$l=\$args|% t*y|%{(\$s+=\$_)})+\$l[1e4..0]|gu

4

(⊢,1↓⌽),\

,\ 前缀列表（点亮，累积串联）

() 对列表应用以下功能：

反向列表

1↓ 删除第一项

, 前置

未经修改的清单

4

# JavaScript（Node.js），90字节

s=>{a=[];for(c=s.length-1;c--;)a[c]=s.slice(0,c+1);return[...a,s,...a.reverse()].join`\n`}

4

# SNOBOL4（CSNOBOL4），118字节

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

SNOBOL的此实现似乎存在一个错误；试图更换标签D与标签2导致错误，尽管对于香草SNOBOL手动指示（强调）

4

# APL + WIN，31个字节

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

(¯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字节

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

4

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

# 说明

: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

manatwork

2

Sophia Lechner

4

# Python 2中，131个100 84字节

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

1

akozi

2

Sriotchilism O'Zaic

Yoni Matz

2

4

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.