ฉันใช้เวลานานมากในการทำสิ่งนี้ (ความเห็นของ YouTube # 1)


84

เดี๋ยวก่อน ..... นี่มันไม่ได้หลอกเลย


พื้นหลัง

วันนี้บน YouTube ส่วนความคิดเห็นจะเกลื่อนไปด้วยรูปแบบดังกล่าว:

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

ที่Stringเป็นตัวยึดตำแหน่งเพียงและหมายถึงการรวมกันของตัวละครใด ๆ รูปแบบเหล่านี้มักจะมาพร้อมกับIt took me a lot of time to make this, pls likeหรืออะไรบางอย่างและบ่อยครั้งที่ OP ประสบความสำเร็จในการสะสมจำนวนไลค์


งาน

แม้ว่าคุณจะมีความสามารถที่ยอดเยี่ยมในการสะสมผู้ติดตามบน PPCG ด้วยทักษะการเล่นกอล์ฟที่มีเสน่ห์ของคุณ แต่คุณก็ไม่ได้เป็นตัวเลือกอันดับต้น ๆ สำหรับการพูดอย่างมีไหวพริบหรือการอ้างอิงในส่วนแสดงความคิดเห็นของ YouTube ดังนั้นความคิดเห็นเชิงสร้างสรรค์ของคุณที่เกิดขึ้นจากความคิดโดยเจตนาจะรวบรวม 'ไม่ชอบ' ไว้ใน YouTube เพียงเล็กน้อย คุณต้องการให้สิ่งนี้เปลี่ยนแปลง ดังนั้นคุณต้องสร้างรูปแบบความคิดโบราณที่กล่าวมาข้างต้นเพื่อให้บรรลุเป้าหมายสูงสุด แต่ไม่ต้องเสียเวลาพยายามเขียนด้วยตนเอง

เพียงแค่ใส่งานของคุณคือการใช้สตริง, พูดs, และเอาต์พุต2*s.length - 1ย่อยของs, คั่นด้วย newline, เพื่อให้สอดคล้องกับรูปแบบต่อไปนี้:

(สำหรับs= "Hello")

H
He
Hel
Hell
Hello
Hell
Hel
He
H

อินพุต

sสายเดียว ใช้ค่าเริ่มต้นของอินพุตของชุมชน คุณสามารถสันนิษฐานได้ว่าสตริงอินพุตจะมีอักขระ ASCII ที่พิมพ์ได้เท่านั้น


เอาท์พุต

มีหลายบรรทัดคั่นด้วยบรรทัดใหม่ซึ่งประกอบขึ้นเป็นรูปแบบที่เหมาะสมตามที่อธิบายไว้ข้างต้น ใช้ค่าดีฟอลต์ของชุมชน อนุญาตการนำหน้าและต่อท้ายว่างเปล่า (ที่ไม่มีอักขระหรืออักขระที่ไม่สามารถมองเห็นได้เช่นช่องว่าง)ในเอาต์พุต


กรณีทดสอบ

กรณีทดสอบหลายคำ:

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
ฉันวางแผนที่จะแสดงความคิดเห็นเกี่ยวกับความท้าทายที่เกี่ยวข้องกับ YouTube ในอนาคตอีก ดังนั้นYouTube Comments #1ในชื่อ
อาร์จัน

1
อนุญาตให้ส่งกลับอาร์เรย์ของบรรทัดได้หรือไม่
บางคน

2
เราสามารถรับอินพุตเป็นอาร์เรย์ของอักขระและส่งกลับอาร์เรย์ของอักขระได้หรือไม่
Shaggy


3
อินพุตสามารถเป็นได้""หรือไม่? แล้วตัวละครเดียว"H"ล่ะ? ถ้าเป็นเช่นนั้นสิ่งที่ควรเป็นผลลัพธ์สำหรับทั้งสองกรณี?
AdmBorkBork

คำตอบ:


103

brainfuck , 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
นั่นเป็นเพียงธรรมดาที่น่ากลัว ฉันพยายามทำอะไรบางอย่างใน brainfuck แต่มันออกมานานกว่า 10 เท่าและยังทำงานไม่ถูกต้อง
ElPedro

34
ไม่เคยคิดเลยว่าฉันจะได้เห็นความท้าทายที่คำตอบของ brainfuck นั้นให้คะแนนในการแข่งขันการทำงานที่ยอดเยี่ยม!
เครื่องหมายคำถาม

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
คำตอบที่ดีมาก: D
lois6b

10
@MartinBarker บน Windows ฉันใช้ Notepad ++ โดยที่ Line Ending เริ่มต้นหันไปUnix (LF)ใช้ แก้ไขปัญหาทันทีและสำหรับทั้งหมด :)
Arnauld

3
น่ากลัว! คุณสามารถเขียนคำอธิบายสำหรับสิ่งนี้สำหรับผู้ที่เพิ่งเริ่มหัดทำ JS อย่างสมบูรณ์หรือไม่?
Akhoy

3
@Akhoy ฉันได้เพิ่มรุ่นที่แสดงความคิดเห็น
Arnauld

3
ขอขอบคุณ. ชัดเจนขึ้นมากในขณะนี้
Akhoy

47

05AB1E (ดั้งเดิม) ,  4  3 ไบต์

ข้ามไป&nbsp;4&nbsp;ไม่ใช่ 4 :)

η.∊

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

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

ในรุ่นใหม่ของ 05AB1E และ»จำเป็นต้องมีอย่างชัดเจนหลังจากηนั้นซึ่งเป็นเหตุผลที่ฉันใช้รุ่นดั้งเดิมของ 05AB1E ที่นี่เพื่อบันทึกไบต์


7
อืมดูเหมือนว่าจะเป็น 6 ไบต์ใน UTF8:\xce\xb7\x2e\xe2\x88\x8a
rubenvb

10
@rubenvb ใน UTF-8 ยิ่งกว่า 05AB1E ใช้เช่นเดียวกับบางส่วนของภาษาการเขียนโปรแกรมที่ใช้ในคำตอบอื่น ๆ (เช่น Jelly; Japt; Charcoal) เป็นซอร์สโค้ดของตัวเอง (ซึ่งคือCP-1252ในกรณีของ 05AB1E) โดยที่ 256 ตัวอักษรแต่ละตัวรู้ว่าเป็น ไบต์เดียว
Kevin Cruijssen

เอาล่ะยุติธรรมพอ :)
rubenvb

@KevinCruijssen PHP ดูเหมือนว่าตัวละครเหล่านี้ไม่ถูกต้องสำหรับ CP-1252 แต่อาจเป็นเพียงข้อผิดพลาดของ PHP: 3v4l.org/UC1QE
hanshenrik

7
@hanshenrik เป็นคำถามที่ดี ไม่ใช่ CP-1252 แต่จริงๆแล้วเป็นการเข้ารหัส 05AB1Eซึ่งเป็นการเข้ารหัสแบบกำหนดเองที่ใช้ ไบต์ของรหัสนี้เป็น hex 08 2e 17ซึ่งคุณสามารถเรียกใช้และตรวจสอบด้วยการ--osabieตั้งค่าสถานะ: tio.run/…
Adnan

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

การอธิบาย

วน2 * input length - 1ซ้ำสำหรับแต่ละแถว ฟังก์ชั่นการแสดงผลสตริงของ DOS API ( INT 21H,9) เขียน$สตริง -terminated ไปที่หน้าจอดังนั้นในแต่ละครั้งที่วนลูปของตัวละครหลังจากที่จะแสดงครั้งสุดท้ายจะถูกสลับกับจุดสิ้นสุดของสตริง

ตัวนับลูปจะถูกเปรียบเทียบกับความยาวของสตริงและถ้ามันมีค่ามากกว่า (หมายถึงส่วนที่เพิ่มขึ้นของเอาต์พุต) ตำแหน่งของสตริง / swap จะเพิ่มขึ้นมิฉะนั้นจะลดลง (จริง ๆ แล้วมัน-1-1+1จะน้อยกว่าไบต์

โปรแกรมที่ดำเนินการแบบสแตนด์อโลนใช้สตริงอินพุตจากบรรทัดคำสั่ง

เอาท์พุต

enter image description here

ดาวน์โหลด YT2.COM (43 ไบต์)


1
รสชาติ DOS ส่วนใหญ่มี SI = 100h เมื่อโหลดไฟล์ COM SHR SI, 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
สิ่งนี้ขึ้นอยู่กับคุณสมบัติที่กำลังจะมาถึงของ 3.8? คุณสมบัติใด
อเล็กซิส

7
@alexis นี่คือการใช้การแสดงออกที่ได้รับมอบหมาย : x:=s[:n].
Arnauld

1
อ่าฉันเห็นแล้วตอนนี้ขอบคุณ :-) ฉันเคยอ่านเกี่ยวกับคุณสมบัตินี้มาแล้ว ยังคงคิดถึงได้จากวันที่ฉัน C ...
อเล็กซิส

1
สิ่งเหล่านี้จะไม่พิมพ์ผลลัพธ์ พวกเขาสร้างอาร์เรย์ใช่มั้ย
Jaden Travnik

@JadenTravnik Python จะทำซ้ำผลลัพธ์การแสดงออกล่าสุดหากทำงานแบบโต้ตอบผ่านคอนโซล
Xeverous

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
[:(และ}:,|ดูเศร้ามาก ...
อดัม

แต่มัน (}: ซึ่งเป็นคนที่มีความสุขกับหนวดแฟนซี
DonFusili

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
เป็นเรื่องตลกที่ทุกวันนี้ Perl แม้คนเล่นกอล์ฟยังเป็นหนึ่งในผู้แข่งขันที่อ่านง่ายที่สุด
หยุดหมุนทวนเข็มนาฬิกา

7
@ceasedtoturncounterclockwis นี่คือ Perl 6 คำตอบของ Perl 5ยังอ่านไม่ได้
Jo King

12

Japt -R , 4 ไบต์

å+ ê

การลดการสะสมบนสตริง

-1 ไบต์ขอบคุณ @Shaggy

ลองออนไลน์!


สงสัยเกี่ยวกับ "-R" ที่จะต้องรวมอยู่ในสตริง (โดยไม่ต้องเอาท์พุทไม่ทำงาน)
Flying Thunder

3
@FlyThunder อย่าสงสัยอีก :) ดูที่นี่
Quintec

@Quintec ฉันได้ทำการเชื่อมโยงการตั้งค่าสถานะในส่วนหัวโซลูชันของฉันไปยังเมตาโพสต์นั้นเพื่อพยายามเอาความคิดเห็นเหล่านี้ไว้ก่อน
Shaggy

1
ค่อนข้างมั่นใจว่าการประชุมคือ <ภาษา> + -flagหรือ -flag<ภาษา> นอกจากนี้: | ฉันลืมการลดการสะสมเป็นสิ่งที่ฉันสาบานฉันข้ามมันทุกครั้งที่ฉันเห็น
ASCII- เท่านั้น

@ ASCII- แบบเดียวเท่านั้นฉันจำได้เพียงเพราะฉันคิดว่าฉันจะแก้ปัญหานี้ใน APL และพูดว่า "ฉันสงสัยว่า Japt มีตัวนี้หรือไม่" นอกจากนี้ฉันไม่ได้ใช้ <language> -flagหรือไม่
Quintec

11

Japt -R , 9 7 ไบต์

-2 ไบต์ต้องขอบคุณShaggy

Êõ@¯XÃê

ลองออนไลน์!



1
@Shaggy โอ้เดี๋ยวก่อน ... Ãเป็นเรื่อง
ASCII เท่านั้น

อีก 300 ตัวแทนกำลังจะมาถึงทันทีที่คำถามนี้มีสิทธิ์ได้รับรางวัล
ขนด


1
@Quintec การลดการสะสมของสตริงเช่นกันดังนั้นคุณไม่จำเป็นต้องแยกตอนเริ่มต้น ฉันก็บอกว่ามันแตกต่างกันพอที่จะรับประกันการโพสต์ด้วยตัวคุณเอง
ปุย


10

Haskell, 52 50 44 ไบต์

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

ลองออนไลน์!


ยินดีต้อนรับสู่เว็บไซต์ initsต้องใช้การนำเข้าดังนั้นคุณจะต้องเพิ่มimport Data.Listหรือสิ่งที่คล้ายกัน
ข้าวสาลีตัวช่วยสร้าง

@ SriotchilismO'Zaic ไม่แน่ใจว่าจำเป็นต้องนับหรือไม่ เพิ่มแล้วขอบคุณ!
Joseph Sible

4
นอกจากนี้ฉันควรพูดถึงว่าเรามีห้องแชทสำหรับพูดคุยกอล์ฟ Haskell หากคุณมีความคิดหรือคำถามใด ๆ นั่นเป็นสถานที่ที่ยอดเยี่ยม
ข้าวสาลีตัวช่วยสร้าง

1
ฉันไม่อยากเชื่อเลยว่าคุณจะได้สิ่งที่ฉันต้องการโพสต์:import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
Axman6

9

R , 79 65 62 58 ไบต์

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

ลองออนไลน์!

-14 โดย Giuseppe ความรู้เกี่ยวกับฟังก์ชั่นที่เหนือกว่า

-3 พร้อมการทำดัชนีที่สะอาดขึ้น

-4 ต้องขอขอบคุณ Nick Kennedy และ Giuseppe ที่ย้ายมาscanและwrite

หลีกเลี่ยงการวนsubstrซ้ำ(และ) ดี


2
ลูปนั้นไม่จำเป็นอย่างทั่วถึงเช่นเดียวกับsapply- substringจะทำในสิ่งที่คุณต้องการ (ด้วยการเพิ่มบรรทัดว่าง) และ65 ไบต์ ! แน่นอนฉันจะไม่คิดsubstringถ้าฉันไม่เห็นคุณใช้ประโยชน์substrที่นี่
Giuseppe

1
ฮ่าฮ่าจับได้ดี! ฉันคิดว่าฉันได้เรียนรู้เพิ่มเติมเกี่ยวกับฟังก์ชันทางเลือกสำหรับงานเดียวกันจากการแก้ไขของคุณมากกว่าที่อื่น ณ จุดนี้
CriminallyVulgar

2
ฮ่าฮ่าอาร์มีคำพ้องความหมายโง่ ๆ ที่มีความแตกต่างที่ลึกซึ้ง ทุกครั้งที่ฉันรู้สึกว่าฉันรู้จักเครื่องมือที่ดีที่สุดสำหรับงานนี้ฉันจะพบสิ่งอื่นที่ดีกว่าเล็กน้อยในกรณีที่แปลก ๆ ...
Giuseppe

3
วิธีการเกี่ยวกับลองออนไลน์! ใช้scanและwrite? เพียง 59 ไบต์!
Nick Kennedy

1
@NickKennedy 58 ไบต์ถ้าคุณแทนที่ด้วย"" 1
Giuseppe

7

เยลลี่ , 5 4 ไบต์

-1 ไบต์ขอบคุณ@JonathanAllan !

¹ƤŒḄ

ลองออนไลน์! ฉันคิดว่านี่เป็นคำตอบที่สองของฉัน Jelly? ฉันไม่รู้ว่าสิ่งนี้เหมาะสมหรือไม่ ฉันมั่นใจมากขึ้นว่าเป็นสิ่งที่ดีที่สุด ส่งคืนอาร์เรย์ของบรรทัด

การอธิบาย

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

วิธีการอื่นที่เสนอโดย @JonathanAllan คือวิธี;\ŒḄที่การรวมกันลด ( \) การต่อข้อมูล ( ;) ซึ่งเป็นอีกวิธีหนึ่งในการสร้างคำนำหน้า


เราได้รับอนุญาตให้เรียงแถวเพื่อให้คุณสามารถชนYรหัส (ฉันจะทำให้ส่วนท้ายÇYหรืออย่างใดอย่างหนึ่งÇŒṘเพื่อหลีกเลี่ยงการพิมพ์ยอดเยี่ยมโดยนัยของโปรแกรมเต็มรูปแบบ) ในหมายเหตุด้านนี้ยังมีการนำมาใช้อย่างเท่าเทียมกันเช่น;\ŒḄเดียวกับจำนวนไบต์เดียวกัน (นอกจากนี้คุณยังสามารถส่งผ่านอาร์กิวเมนต์ได้เช่น"blah"เดียวกับ Jelly ตีความว่านี่เป็นรายชื่อตัวละคร - จริง ๆ แล้วคุณเป็นรายการของตัวละครตามที่คุณเห็น ถ้าคุณทำส่วนท้ายÇŒṘ)
Jonathan Allan

@Janathan ทุกคนขอบคุณมาก! น่าสนใจมาก :)
Conor O'Brien

7

Python 3.8 (pre-release) 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]

ลองออนไลน์!

เราเกือบจะมีวิธีแก้ปัญหา 45 ไบต์ที่ดีดังต่อไปนี้ แต่มันมีสตริงเดิมสองครั้งและฉันไม่เห็นวิธีแก้ไขปัญหาสั้น ๆ

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

ลองออนไลน์!


คุณไม่จำเป็นต้องเพิ่มบรรทัดใหม่และพิมพ์เพื่อให้ได้ผลลัพธ์ที่ต้องการหรือไม่
Jaden Travnik

สิ่งที่ชอบprint('\n'.join(f(s))) ?
Jaden Travnik

@JadenTravnik ค่าเริ่มต้นของชุมชน (ซึ่งความท้าทายนี้ตามมา) ทำให้สามารถใช้งานได้นอกเหนือจากโปรแกรม และผู้เขียนที่ท้าทายกล่าวในความคิดเห็นว่าพวกเขาตกลงกับรายการของสตริงภายในการเข้าร่วมตามที่อนุญาตโดยค่าเริ่มต้นแม้ว่าฉันเองไม่ชอบสิ่งนี้เป็นค่าเริ่มต้นและมี downvote เห็นแล้วยังสรุปกฎหลาม
xnor

ฮะ. โอเคขอบคุณสำหรับการชี้ให้เห็นว่า ฉันใหม่¯_ (ツ) _ / ¯ หาก thats กรณีที่นี่เป็นวิธีการแก้ปัญหาการแข่งขัน 45 ไบต์:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Travnik

@ JadenTravnik ไม่มีปัญหากฎนี้กระจัดกระจายไปทั่วสถานที่ แม้ว่าตัวอย่างของคุณเป็นตัวอย่างที่ไม่ได้รับอนุญาต มันต้องทำอินพุทและเอาท์พุทเหมือนs=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]กัน ดูตัวอย่างที่ด้านบนที่นี่
xnor

6

ถ่าน 5 ไบต์

G^Lθθ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย: วาดรูปหลายเหลี่ยมที่เต็มไป^ระบุว่าด้านข้างลงด้านขวาและด้านซ้าย (รูปหลายเหลี่ยมนั้นจะปิดตัวเองโดยอัตโนมัติ) Lθระบุความยาวของด้านเหล่านั้นเป็นความยาวของอินพุตต้นฉบับและสุดท้ายθระบุสตริงการกรอก


6

C # (Visual C # Interactive Compiler) , 123 109 94 84 74 ไบต์

สมมติว่าเราสามารถส่งคืนอาร์เรย์อาร์เรย์ถ่าน (ฉันเชื่อว่าเราสามารถทำได้เนื่องจากอาร์เรย์ char เป็นตัวแทนที่ถูกต้องสำหรับสตริงและสตริงอาร์เรย์เป็นตัวแทนที่ถูกต้องสำหรับหลายบรรทัด)

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

ลองออนไลน์!


5

ทูตขนาด 15 ไบต์

Bounce@Prefixes

ลองออนไลน์!

ค่อนข้างง่าย Bounces (ผนวกกลับไม่มีศูนย์) Prefixesของการป้อนข้อมูล

อีกวิธีหนึ่งคือ21 ไบต์: Bounce@{_[0..0:~-#_]}ส่วนนำหน้าการนำไปใช้อีกครั้ง


5

Brachylog (v2), 6 ไบต์

a₀ᶠ⊆.↔

ลองออนไลน์!

ฟังก์ชั่นการส่งกลับอาร์เรย์ของเส้น ตามคำตอบของ @ Fatalizeอย่างหลวม ๆคำตอบของ

การอธิบาย

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

ลำดับ Tiebreak ที่นี่ถูกตั้งค่าโดย ที่เมื่อนำมาใช้กับรูปแบบการไหลนี้ชอบเอาท์พุทที่สั้นที่สุด, tiebroken โดยการวางองค์ประกอบให้เร็วที่สุดเท่าที่เป็นไปได้ ผลลัพธ์ที่สั้นที่สุดที่เป็นไปได้คือสิ่งที่เราต้องการที่นี่ (เนื่องจากไม่มีความเป็นไปได้ที่จะมีคำนำหน้าซ้ำ) และการวางองค์ประกอบที่กำหนด (เช่นคำนำหน้า) ให้เร็วที่สุดเท่าที่จะทำได้จะวางไว้ในครึ่งแรก เอาท์พุต เนื่องจากเราต้องการให้พวกเขาอยู่ในลำดับเดียวกันเราจึงได้รูปแบบที่เราต้องการแม้ว่าคำอธิบายที่เราให้ Brachylog นั้นเป็นเรื่องทั่วไปมาก tiebreaks นั้นเกิดขึ้นอย่างถูกต้องทำให้ Brachylog เลือกเอาท์พุทที่เราต้องการมากกว่าเอาท์พุทอื่น ๆ ที่ทำตามคำอธิบาย


5

PowerShell, 89 87 66 ไบต์

-2 ไบต์ขอบคุณ @AdmBorkBork

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

ลองออนไลน์!

อันที่จริงมันใช้งานไม่ได้ตามที่ระบุมาก่อนขออภัยด้วย! ฉันได้ทำการแก้ไขแล้วและสามารถจัดการบางส่วนได้ด้วย


คุณสามารถ--$dแทน($d-1)การบันทึกคู่ในตอนท้าย
AdmBorkBork

@AdmBorkBork ขอบคุณ
Gabriel Mills

วิธีนี้ใช้ไม่ได้กับอินพุตอักขระเดี่ยวเศร้า
AdmBorkBork

5

PowerShellขนาด 46 ไบต์

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

ลองออนไลน์!


PowerShellขนาด 42 ไบต์ (พิเศษสำหรับ YouTube สกปรก)

เป็นที่ทราบกันว่าความยาวสูงสุดของความคิดเห็นใน youtube คือ 10,000 ตัวอักษร ตกลงใช้สิ่งนี้เป็นขีด จำกัด บน

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

ลองออนไลน์!


4

APL (Dyalog Unicode) , 9 ไบต์SBCS

ฟังก์ชันนำหน้าเงียบโดยไม่ระบุชื่อ ส่งคืนรายการสตริง

(⊢,1↓⌽),\

ลองออนไลน์!

,\ รายการคำนำหน้า (lit, การต่อข้อมูลแบบรวมสะสม)

(... ) ใช้ฟังก์ชันต่อไปนี้กับรายการนั้น:

 รายการที่กลับรายการ

1↓ วางรายการแรก

, ย่อหน้า

 รายการที่ไม่ได้แก้ไข




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ทำให้เกิดข้อผิดพลาดถึงแม้ว่าคู่มือสำหรับ Vanilla SNOBOL บ่งชี้ว่า (เน้นเพิ่ม)

หากมีฉลากอยู่จะต้องเริ่มต้นด้วยอักขระตัวแรกของบรรทัด Labels ให้ชื่อสำหรับคำสั่งและใช้เป็นเป้าหมายสำหรับการโอนการควบคุมจากฟิลด์ GOTO ของคำสั่งใด ๆ ป้ายกำกับต้องเริ่มต้นด้วยตัวอักษรหรือตัวเลขตามด้วยสตริงอักขระที่กำหนดเอง ฟิลด์ป้ายกำกับถูกยกเลิกด้วยอักขระว่างแท็บหรือเครื่องหมายอัฒภาค หากอักขระตัวแรกของบรรทัดว่างหรือแท็บฟิลด์เลเบลจะหายไป

ข้อสันนิษฐานของฉันคือล่าม CSNOBOL รองรับป้ายกำกับเดียวที่ขึ้นต้นด้วยจำนวนเต็ม


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])

ลองออนไลน์!

อินพุตคือ a stringและเอาต์พุตคือ aseq<string>

วิธีแก้ปัญหาอื่นอาจเป็นlet f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]80ish ไบต์ ... ฉันไม่แน่ใจว่ามันคุ้มค่าที่จะดู


4

sed , 31 35 bytes

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

ลองออนไลน์!

การอธิบาย

ที่จุดเริ่มต้นของการวนซ้ำแต่ละครั้งของการวนซ้ำพื้นที่รูปแบบคือ "Central Chunk" บางส่วนของเอาต์พุตที่ต้องการและแต่ละวงจะเพิ่มสำเนาที่สั้นลงไปที่ด้านบนและด้านล่าง

: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
ดีหนึ่ง แต่เส้นกลาง (อินพุตต้นฉบับเต็ม) น่าจะเป็นเอาต์พุต 3 ครั้ง อย่างน้อยกับ sedGNU เหมือนกันบน TIO sedการใช้งานแบบใดที่คุณใช้และวิธีส่งอินพุต (BTW เปลี่ยนการทดแทนเพื่อs/.\n.*\|.$//แก้ไข)
จัดการ

2
อ่าคุณพูดถูก ไม่มีปัญหากับsedการติดตั้ง (ใช้ GNU เวอร์ชั่น 4.2.1) ฉันไม่ได้สังเกตเห็นข้อผิดพลาด ฉันเล่นกับโปรแกรมแก้ไขอื่น ๆ แล้วและไม่พบสิ่งใดที่เพิ่มน้อยกว่าสี่ไบต์ดังนั้นฉันจึงใช้โปรแกรมแก้ไขของคุณขอบคุณ
Sophia Lechner

4

Python 2 , 131 100 84 ไบต์

คำตอบแรกของฉันเกี่ยวกับ Code Golf!

-47 ไบต์โดยรวมต้องขอบคุณ @ 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)

ลองออนไลน์!


1
ยินดีต้อนรับสู่ PCG! ให้แน่ใจว่าได้อ่านเกี่ยวกับการท่องเที่ยวและรหัสของการดำเนินการ ทางออกที่ดี!
akozi

2
สำหรับไพ ธ อนคุณสามารถใช้;s แทนการขึ้นบรรทัดใหม่เพื่อหลีกเลี่ยงการเยื้อง ยังไม่จำเป็นต้องมีช่องว่างระหว่างprintและ''
ตัวช่วยสร้างข้าวสาลี

ขอบคุณสำหรับเคล็ดลับ @ SriotchilismO'Zaic ช่วยจริงๆลดจำนวนไบต์ของฉัน!
Yoni Matz

2
และสิ่งสุดท้ายที่หนึ่งถ้าคุณทำaสตริงมากกว่ารายการคุณไม่จำเป็นต้องที่ทุกคนและคุณก็สามารถjoin print a
ข้าวสาลีตัวช่วยสร้าง

4
xไม่ถูกต้องจะต้องมีโปรแกรมเต็มหรือฟังก์ชั่นในขณะที่คุณถือว่าอยู่ในการป้อนข้อมูล
ASCII- เท่านั้น

4

J , 12 ไบต์

]\,[:}.@|.]\

ลองออนไลน์!

ยังคง 1 ไบต์ยาวกว่าของAdám

K (oK) , 12 11 ไบต์

-1 ไบต์ขอบคุณ ngn

{x,1_|x}@,\

ลองออนไลน์!


2
ฉันไม่outgolf master‽
อดัม

@ Adámฉันยังห่างไกลจากการเป็นอาจารย์ J :) มี J coders มากมายที่นี่ดีกว่าฉัน
Galen Ivanov

1
-1 ไบต์สำหรับ oK:{x,1_|x}@,\
ngn

@ngn ขอบคุณ!
Galen Ivanov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.