StringgnirtSStringgnirtSStringgnirtS


42

นี่คือความท้าทายที่ค่อนข้างง่ายสำหรับคุณ

กำหนดสตริงที่มีความยาวNส่งออกสตริงไปข้างหน้าจากนั้นย้อนกลับแล้วไปข้างหน้าจากนั้นย้อนกลับ ... เป็นต้นNครั้ง ตัวอย่างเช่นถ้าข้อมูลของคุณเป็น

Hello!

คุณควรส่งออก:

Hello!!olleHHello!!olleHHello!!olleH

คุณยังสามารถเลือกที่จะออกบรรทัดใหม่หนึ่งบรรทัด

การส่งของคุณอาจเป็นได้ทั้งโปรแกรมเต็มหรือฟังก์ชั่นและคุณอาจต้องใช้เวลาเข้าและส่งออกในรูปแบบที่เหมาะสม ตัวอย่างเช่นคุณอาจใช้ IO จาก STDIN / STDOUT อาร์กิวเมนต์ของฟังก์ชันและค่าส่งคืนจากไฟล์ ฯลฯ คุณสามารถสันนิษฐานได้ว่าสตริงอินพุตจะไม่ว่างเปล่าและจะมี ASCII ที่พิมพ์ได้เท่านั้น คุณต้องส่งออกสตริงใหม่ในบรรทัดเดียว ตัวอย่างเช่นถ้าผลลัพธ์ไปยังตัวอย่างสุดท้ายคือ

Hello!
!olleH
Hello!
!olleH
Hello!
!olleH

นี่จะไม่ใช่ทางออกที่ถูกต้อง!

ต่อไปนี้เป็นกรณีทดสอบเพิ่มเติม:

Input:
a
Output:
a

Input:
abcd
Output:
abcddcbaabcddcba

Input:
OK!
Output:
OK!!KOOK!

Input:
4815162342
Output:
4815162342243261518448151623422432615184481516234224326151844815162342243261518448151623422432615184

Input:
PPCG
Output:
PPCGGCPPPPCGGCPP

Input:
42
Output:
4224

ลีดเดอร์

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

  1. คำตอบที่สั้นที่สุดในทุกภาษาและ

  2. คำตอบที่สั้นที่สุดในแต่ละภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

# Ruby, <s>104</s> <s>101</s> 96 bytes

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

# Perl, 43 + 2 (-p flag) = 45 bytes

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

code-golf  string  code-golf  math  geometry  data-structures  repeated-transformation  code-golf  number  random  code-golf  math  rational-numbers  code-golf  ascii-art  animation  code-golf  ascii-art  number  code-golf  math  number  code-golf  data-structures  code-golf  string  parsing  code-golf  array-manipulation  random  permutations  code-golf  string  code-golf  parsing  code-golf  string  quine  code-golf  string  parsing  comment  code-golf  string  counting  natural-language  code-golf  string  decision-problem  code-golf  math  code-challenge  metagolf  test-battery  code-golf  string  code-golf  math  number  arithmetic  source-layout  code-golf  number  primes  decision-problem  code-golf  math  arithmetic  code-golf  date  code-golf  string  cryptography  code-golf  code-golf  chess  board-game  code-golf  geometry  grid  puzzle-solver  set-partitions  code-golf  number  natural-language  code-golf  ascii-art  code-golf  math  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  string  natural-language  code-golf  game  board-game  tic-tac-toe  code-golf  ascii-art  hexagonal-grid  code-golf  string  comment  code-golf  internet  code-golf  sorting  code-golf  kolmogorov-complexity  unicode  code-golf  tips  code-golf  string  natural-language  code-golf  string  kolmogorov-complexity  source-layout  hello-world  code-golf  string  kolmogorov-complexity  counting  natural-language  code-golf  random  quine  code-golf  string  math  bitwise  code-golf  permutations  code-golf  string  code-golf  arithmetic 

ในตัวอย่างของคุณไม่ควรที่จะolleHไม่elloH?
Arnaud

2
@Downgoat ไม่คุณต้องรับอินพุตและเอาต์พุตในรูปแบบเดียวกันกับข้อมูลจำเพาะที่อธิบาย
DJMcMayhem

4
ชื่อไม่ควรเป็นStringgnirtSStringgnirtSStringgnirtS ?
Luis Mendo

2
@carusocomputing มันจะไม่: "คุณสามารถสันนิษฐานได้ว่าสตริงอินพุตจะไม่ว่างเปล่าและจะมี ASCII ที่พิมพ์ได้เท่านั้น"
Martin Ender

1
en.wikipedia.org/wiki/ASCII#Printable_charactersอ่าไม่รู้ว่ามันเป็นเซตย่อยของ ASCII ฉันจินตนาการว่าสามารถพิมพ์ได้เพื่อรวม \ t, \ n, ฯลฯ ...
Magic Octopus Urn

คำตอบ:


22

เป็นกลุ่ม, 39 , 34 การกดแป้น

:se ri
Y:s/./<C-r>"/g
<C-o>qqgJC<C-r>"<esc>gJ@qq@q

บันทึก 5 ไบต์ด้วย @Lynn!

นี่คือ gif ของมันเกิดขึ้นจริง: (โปรดทราบว่า gif นี้เป็นรุ่นก่อนหน้าเนื่องจากฉันยังไม่มีเวลาบันทึกอีกครั้ง)

ป้อนคำอธิบายรูปภาพที่นี่

และนี่คือคำอธิบายว่ามันทำงานอย่างไร:

:se ri                  "Turn 'reverse indent' on.
Y                       "Yank this line
:s/./<C-r>"/g           "Replace every character on this line with the register
                        "We just yanked followed by a newline
<C-o>                   "Jump to our previous location
     qq                 "Start recording in register 'q'
       gJ               "Join these two lines
         C              "Delete this line, and enter insert mode
          <C-r>"<esc>   "Paste the line we just deleted backwards 
gJ                      "Join these two lines
  @q                    "Call macro 'q'. This will run until we hit the bottom of the buffer.
    q                   "Stop recording.
     @q                 "Start our recursive macro

ในบันทึกย่อด้านข้างYจับขึ้นบรรทัดใหม่ซึ่งมักจะเป็นคุณสมบัติที่น่าสะพรึงกลัว นี่อาจเป็นครั้งแรกที่มีการบันทึกจริงหลายไบต์!


2
แทนที่จะ:%s/\n<cr>ทำเช่นนั้นคุณสามารถทำได้v{gJเพื่อบันทึกสามไบต์
ลินน์

2
คำตอบที่เป็นกลุ่ม?! นั่นเป็นการเคลื่อนไหวที่มีระดับในส่วนของคุณ
Magic Octopus Urn

@ ลินน์ขอบคุณสำหรับเคล็ดลับ! ฉันลงเอยด้วยการทำสิ่งที่แตกต่างออกไปเล็กน้อยและเอาออก 5 แทน
DJMcMayhem

นี่ถือว่า@qว่างเปล่าตอนเริ่มใช่ไหม? หรือ@qก่อนการหยุดบันทึกจะทำบางสิ่งตามอำเภอใจ (สิ่งนี้นำฉันไปสู่ ​​trivium vim ที่ฉันชื่นชอบที่ฉันคิดขึ้นมา: ทุกคนรู้ว่าการเรียก vim นั้นง่ายเหมือน:q<CR>แต่คุณจะปิดและบันทึกไฟล์ทั้งหมดของคุณได้อย่างไรง่าย ๆ : แค่qqqqqZZ@qq@q!)
wchargin

@wchargin ใช่จำเป็นต้อง@qเว้นว่าง ทำไมไม่ทำเช่นนั้น:wqaแทน? ยังต้องการทราบวิธีการสร้างเศษส่วนในกลุ่ม? qqqqq<C-w>v<C-w>n@qq@q: D
DJMcMayhem

18

Python ขนาด 40 ไบต์

f=lambda s,i=0:s[i:]and s+f(s[::-1],i+1)

ฟังก์ชั่นวนซ้ำ prepends สายป้อนsให้กับการทำงานของกลับจนกว่าเคาน์เตอร์เกินความยาวของis


ว้าว. ฉันเพิ่งจะส่งคำตอบหลามขนาด 56 ไบต์ฮ่าฮ่า
DJMcMayhem

@DJMcMayhem มันเต้นต่อlambda s:(len(s)*(s+s[::-1]))[:len(s)**2]หนึ่งไบต์
Jonathan Allan

ฉันได้รับสิ่งนี้f = lambda s : ''.join([s[((-1)**(i//len(s)) <= 0)*(len(s)-1)+(-1)**(i//len(s))*(i%len(s))] for i in range(len(s)*len(s))])แต่มันมีขนาด 136 ไบต์ตามที่sys.sizeofน่าสนใจมันมีขนาดเท่ากับf = lambda s : ''.join([s[::1] if i%2 else s for i in range(len(s))])
Carel

12

Brain-Flak , 418 378 228 ไบต์

นี่คือผลงานชิ้นเอกของ Brain-Flak ของฉัน มันอาจจะไม่ได้เล่นกอล์ฟได้ดี แต่ความท้าทายเป็นสิ่งที่ยากที่สุดที่ฉันเคยเจอ

ลองออนไลน์!

(([])[()]){({}[()]<(({}(<()>))<{({}[()]<(({}()<(({}<>))>)<({()<({}[()]<({}<({}<>)<>>)>)>}{}<>){({}[()]<({}<>)<>>)}{}>)>)}{}{}<>([]){{}({}<>)<>([])}{}<>>)>)}{}([(({}))]{({})({}[()])}{}){(({}[({}<>)<>])<<>({}<><{(({}[()])<{({}[()]<({}<({}<>)<>>)>)}{}<>([]){{}({}<>)<>([])}{}<>>)}{}>)>)}

คำอธิบาย

คำอธิบายนี้ล้าสมัยไปเล็กน้อย แต่ก็ยังทำงานได้ค่อนข้างดีในการอธิบายโปรแกรม

คำอธิบายนี้จะแตกต่างจากกระบวนการอธิบายปกติของฉันเล็กน้อย ฉันจะอธิบายว่าฉันมาเกี่ยวกับผลลัพธ์นี้ได้อย่างไรแทนที่จะอธิบายผลลัพธ์ตามลำดับ นี่มันไป:

ลูกกลิ้ง

หลังจากทำงานที่ปัญหาเล็กน้อยฉันมากับรหัสนี้:

(n[()])({()<({}[()]<({}<({}<>)<>>)>)>}{}<>){({}[()]<({}<>)<>>)}{}<>

รหัสนี้ (โดยที่ n เป็นตัวอักษรสำหรับบางหมายเลขเช่น()()) จะนำรายการที่ด้านบนของสแต็กและย้ายลง n ขั้นตอน ด้วย n เป็นความสูงของสแต็กสิ่งนี้จะดำเนินการกับ "ม้วน" เช่นย้ายรายการด้านบนไปด้านล่างของสแต็ค นี่คือวิธีการทำงาน:

เราวางที่ที่เราต้องการย้ายไอเท็มไปยังหนึ่งลบบนสแต็ก ทำไมลบหนึ่ง? ฉันไม่รู้ว่ามันใช้งานได้อย่างนั้น

(n[()])

()จากนั้นเราจะห่วงจนกว่าจำนวนนี้ถึงศูนย์ติดตามความเคลื่อนไหวของวงด้วย

{()<({}[()]<...>)>)>}{}

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

({}<({}<>)<>>)

สิ่งที่เราต้องทำตอนนี้คือใส่หมายเลขที่เราย้ายกลับไป เราสลับไปที่สแต็กปิดและผลักดันจำนวนการวนซ้ำที่เกิดขึ้น

(...<>)

เราวนการลดจำนวนการผลักใหม่จนกว่าจะถึงศูนย์ แต่ละครั้งที่เราย้ายหนึ่งหมายเลขกลับ

{({}[()]<({}<>)<>>)}{}<>

ย้อนกลับ

ฉันปรับเปลี่ยนม้วนถัดไปเพื่อให้สแต็กกลับเต็ม:

(n){(({}[()])<{({}[()]<({}<({}<>)<>>)>)}{}<>([]){{}({}<>)<>([])}{}<>>)}{}

n แสดงถึงความลึกของการย้อนกลับอีกครั้ง นั่นคือรายการด้านบน n ในสแต็กจะถูกกลับรายการ มันทำงานอย่างไร:

ด้านหลังเป็นเพียงลูกกลิ้งที่หุ้มห่ออย่างเพ้อฝัน เราเพียงหมุนด้านบนของสแต็ค n ครั้งเพื่อลดความลึกของม้วนหนึ่งครั้งในแต่ละครั้ง

(n){(({}[()])<ROLLER>)}{}

ซ้ำ

การทำสำเนาในสถานที่นั้นยาก ยากจริงๆ หลังจากที่ฉันคิดหาวิธีการย้อนกลับสแต็กก็ยังคงใช้ความพยายามอย่างมากที่จะเกิดขึ้นกับอัลกอริทึมการทำซ้ำ

นี่มันคือ:

(((n)<{({}[()]<(({}<>))<>>)}{}<>>)<{({}[()]<({}<>)<>([][()])({()<({}[()]<({}<({}<>)<>>)>)>}{}<>){({}[()]<({}<>)<>>)}{}<>>)}{}<>([]){{}({}<>)<>([])}{}<>([]){(({}[()])<{({}[()]<({}<({}<>)<>>)>)}{}<>([]){{}({}<>)<>([])}{}<>>)}{}>)

มันค่อนข้างใหญ่ แต่นี่เป็นวิธีการ:

เริ่มต้นด้วยการกด n n คือความลึกของสำเนา นอกจากนี้เรายังเปิดวงเล็บสองอัน สิ่งเหล่านี้ทำให้เราสามารถเก็บค่าของ n ในขอบเขตได้จนกว่าจะต้องการอีกครั้ง

(((n)<

ต่อไปเราวนซ้ำแต่ละครั้งผลักค่าสูงสุดของสแต็กไปที่สแต็กปิดสองครั้ง ทำให้ซ้ำเริ่มต้นสำหรับแต่ละหมายเลขในกอง

{({}[()]<(({}<>))<>>)}{}

ตอนนี้เรามีสำเนาสองหมายเลขของแต่ละหมายเลขบน offstack เราจำเป็นต้องแยกสิ่งเหล่านี้ออกเป็นสองกลุ่ม

ดังนั้นเราจึงสลับไปที่ offstack และระลึกถึงหนึ่งใน ns ที่เราบันทึกไว้ในตอนแรก

<>>)

เราวนรอบ n ครั้ง

{({}[()]<...>)}{}

ทุกครั้งที่เราย้ายหนึ่งสำเนาไปยัง mainstack

({}<>)<>

และม้วนหนึ่งสำเนาไปที่ด้านล่างของสแต็ค (ซึ่งถือว่า offstack ว่างเปล่าเพื่อเริ่มต้นด้วยการทำสำเนาที่ไม่ซ้ำกันนี้ไม่สะอาด)

([][()])ROLLER

เมื่อเสร็จแล้วเราได้แบ่งต้นฉบับออกเป็นสองกลุ่มคือ "ต้นฉบับ" และสำเนาบน offstack (สำเนาเป็นจริงในสิ่งที่ตรงกันข้าม) ดังนั้นเราเพียงแค่ย้ายสำเนาไปยังสแต็กหลักและเราสามารถทำได้

([]){{}({}<>)<>([])}{}<>

โปรแกรม Skeleton

ตอนนี้ฉันได้สร้างชิ้นส่วนทั้งหมดของโปรแกรมแล้วฉันก็แค่ใส่มันเข้าไปในเฟรม

กรอบเพิ่มข้อความเป็นสองเท่าน้อยกว่าความสูงของสแต็กคูณด้วยการใช้ซ้ำ

(([])[()])
{
 ({}[()]<
  DUPLICATE 
 >)
>)}{}

จากนั้นย้อนกลับสแต็กในการลดความสูงสแต็กเริ่มต้นที่ลดลงจาก n ^ 2-n เป็น 0

(({}))
{
 (({}[()])<
  ({}<>)<>(({}))({<({}[()])><>({})<>}{})<>{}<>
  ({}<({}<>)<>>)<>({}<>)
  ({}<
   REVERSE
  >)
 >)
}{}{}

5
น่าอัศจรรย์ คุณมักจะทำให้ใจของฉันกับสิ่งที่ภาษานี้สามารถทำ! : D
DJMcMayhem

10

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

,Ṛṁ

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

บันทึกขอบคุณไบต์ @ Maltysen

คำอธิบาย

,Ṛṁ  Input: string S
 Ṛ    Reverse S
,     Join S with reverse of S. Makes a list [S, rev(S)]
  ṁ   Mold [S, rev(S)] to len(S) by repeating elements cyclically
      Return and print implicitly as a string

1
ราไม่จำเป็นต้องใช้L
Maltysen

@Maltysen ว้าวขอบคุณมากคุณรู้ไหมว่าจากซอร์สโค้ดหรือจากประสบการณ์
ห่าง

จากประสบการณ์ฉันไม่รู้ Jelly แต่ฉันเดาได้เลยว่าสิ่งที่ราจะทำในรูปแบบที่ไม่ใช่ตัวเลขเนื่องจาก Jelly ไม่ทำงานหนักมากเกินไปรายังเตือนให้ฉันปรับรูปร่างจาก J
Maltysen

จริง ๆ แล้วmouldใช้ iterables เท่านั้น แต่มัน casts จำนวนเต็มช่วงแรก
เดนนิส

1
ใช่ฉันถือว่าราเป็นรูปร่างใหม่ดังนั้นฉันจึงให้หมายเลขเป็นประจำ มีหลายวิธีที่ประณีตในเยลลี่เช่นวิธีการเรียงลำดับของสตริงที่ถูกส่งออกโดยอัตโนมัติเป็นสตริงที่ต่อกัน
ไมล์

9

PHP, 54 52 ไบต์

(49 ไบต์ แต่ไม่สามารถใช้งานได้หากสตริงมี '0')

for(;($a=$argv[1])[$i++];)echo$i%2?$a:strrev($a);

(52 ไบต์)

<?=str_pad('',strlen($a=$argv[1])**2,$a.strrev($a));

(54 ไบต์)

for(;$i++<strlen($a=$argv[1]);)echo$i%2?$a:strrev($a);

str_padฉันสมบูรณ์ลืมเกี่ยวกับ ทำได้ดีนี่!
ติตัส


6

Ruby, 39 ไบต์

->(s){s.reverse!.gsub(/./){s.reverse!}}

ฉันดูดทับทิม ความช่วยเหลือด้านการเล่นกอล์ฟนั้นได้รับการชื่นชม

ทับทิมเป็นภาษาที่ดีมากสำหรับเรื่องนี้เพราะ .reverse!

คำอธิบาย

ฉันหวังว่ามันจะเป็นเรื่องที่เรียบง่ายเช่น:

s.gsub(/./){s.reverse!}

แต่เนื่องจากข้อ จำกัด ด้านหม้อไอน้ำ / ความท้าทาย

s.reverse!มีประโยชน์อะไรมาก s.reverse!เป็นพื้นความหมายมันยังแปรรูปs = s.reverse!s


สิ่งที่แต่ละส่วนของโปรแกรมอธิบายไว้ด้านล่าง:

->(s){             # Lambda with argument s
      s.reverse!   # Reverse `s` see above for details
      .gsub(/./)   # Replace every character with...
      {s.reverse!} # the input reversed!

สิ่งที่เกี่ยวกับs.reverse!ที่ดีคือทุกครั้งที่มีการประเมินสตริงรับพลิก ดังนั้นมันจึงแทนที่สตริง sมีการแก้ไข!


ด้วยการ-pตั้งค่าสถานะคุณสามารถบันทึก 4 ไบต์:$_.reverse!;gsub(/./){$_.reverse!}
Jordan

@Jordan ฉันจะไม่ต้องการ.chompแต่ใน$_? ดูเหมือนว่าจะมีการขึ้นบรรทัดใหม่ในขณะนี้
Downgoat

ไม่ว่าคุณจะทำอะไรruby -pe '$_.reverse!;gsub(/./){$_.reverse!}' < file.txtที่file.txtเป็นบรรทัดที่ไม่มีบรรทัดใหม่ต่อท้าย: V Anyways, ถ้าคุณตัดสินใจที่จะไม่ทำเช่นนั้นคุณไม่จำเป็นต้องมี parens บนแลมบ์ดาให้ใช้->sงานได้
Value Ink

@ValueInk คุณสามารถให้อินพุตแบบไม่ใช้ไฟล์โดยไม่ต้องใส่ไฟล์หากคุณไพพ์ หรือคุณสามารถพิมพ์ด้วยตนเองได้โดยไม่ต้องกด Enter: i.stack.imgur.com/6luxM.png
จัดการเอกสาร

1
คุณไม่จำเป็นต้องใช้วงเล็บในการโต้แย้งของแลมบ์ดา นอกจากนี้ฉันคิดว่าคุณสามารถกำจัดหนึ่งในเครื่องหมายอัศเจรีย์:s.gsub(/./){s.reverse!.reverse}
m-chrzan

6

Perl, 24 ไบต์

รวมถึง +2 สำหรับ -lp

ให้อินพุตบน STDIN:

rev.pl <<< Hello!

rev.pl:

#!/usr/bin/perl -lp
s%.%s/.?/chop/eg;$`%eg

น่าแปลกที่นี่ไม่ได้ใช้ตัวreverseดำเนินการในตัว ชื่อนั้นยาวมากโซลูชันทั้งหมดที่ฉันนึกได้reverseมีอย่างน้อย 1 ไบต์อีกต่อไป


เพิ่มขึ้นเพื่อค้นหาโซลูชันที่ใช้เวลาน้อยกว่าไบต์ในตัว
MilkyWay90

6

J, 13 8 ไบต์

บันทึก 5 ไบต์ด้วยไมล์!

#;@$];|.

นี่คือ 5 ขบวนพร้อมคำกริยาต่อไปนี้:

# ;@$ ] ; |.

ทางแยกด้านในประกอบด้วย](ข้อมูลประจำตัว), ;(ลิงก์) และ|.(ย้อนกลับ) สังเกต:

   (| ; |.) 'Hello!'
+------+------+
|Hello!|!olleH|
+------+------+

กริยาสองตัวที่เหลือทำให้รถไฟหยุดนิ่ง #ในกรณีนี้ขนาดของอาร์กิวเมนต์คือความยาว คำกริยาการเชื่อมโยงเหล่านี้;@$หรือมากกว่าravel reshapeสังเกต:

   # 'Hello!'
6
   6 $ (] ; |.) 'Hello!'
+------+------+------+------+------+------+
|Hello!|!olleH|Hello!|!olleH|Hello!|!olleH|
+------+------+------+------+------+------+
   ; 6 $ (] ; |.) 'Hello!'
Hello!!olleHHello!!olleHHello!!olleH
   6 ;@$ (] ; |.) 'Hello!'
Hello!!olleHHello!!olleHHello!!olleH
   (# ;@$ (] ; |.)) 'Hello!'
Hello!!olleHHello!!olleHHello!!olleH
   (# ;@$ ] ; |.) 'Hello!'
Hello!!olleHHello!!olleHHello!!olleH
   (#;@$];|.) 'Hello!'
Hello!!olleHHello!!olleHHello!!olleH

วิธีการแก้ปัญหาเก่า

[:,|.^:(i.@#)

เรียบง่ายพอสมควร |.ย้อนกลับและ^:เป็นกำลังเชื่อมต่อซึ่งทำซ้ำคำกริยาซ้าย (ขวา) # ครั้ง เมื่อการโต้แย้งที่ถูกต้องเป็นคำกริยาคำกริยานั้นจะถูกเรียกในการโต้แย้ง กริยาที่ถูกต้องในกรณีนี้คือช่วงจากศูนย์ ( i.) ถึงความยาว ( #) เมื่อยกขึ้นเป็นอาร์เรย์ผลลัพธ์ระดับกลางจะถูกเก็บไว้ ,ทั้งหมดที่จะต้องทำคือการแผ่อาร์เรย์ด้วย

ผลลัพธ์ระดับกลาง

   (i.@#) 'Hello!'
0 1 2 3 4 5
   |.^:0 1 2 3 4 5 'Hello!'
Hello!
!olleH
Hello!
!olleH
Hello!
!olleH
   |.^:(i.@#) 'Hello!'
Hello!
!olleH
Hello!
!olleH
Hello!
!olleH
   ([:,|.^:(i.@#)) 'Hello!'
Hello!!olleHHello!!olleHHello!!olleH

คุณสามารถบันทึกไบต์ด้วยการชกมวยระยะ<@#
ทาง

โซลูชัน 8 ไบต์ที่เรียบร้อยคือ#;@$];|.กล่องเริ่มต้นและย้อนกลับเปลี่ยนรูปร่างของสตริงที่บรรจุอยู่และรวมเข้าด้วยกัน
ไมล์

@miles โอ้โหนั่นเรียบร้อยดี
Conor O'Brien

5

JavaScript (ES 6), 59 50 ไบต์

ขอบคุณ 9 ไบต์สำหรับ Hedi และ Huntro

f=(s,n=1)=>s[n]?s+f([...s].reverse().join``,n+1):s

ฟังก์ชั่นวนซ้ำ

การย้อนกลับสตริงใช้เวลาเกือบครึ่งหนึ่งของขนาด ( 25 22 ไบต์!) ...
ทำไมไม่มีวิธีดั้งเดิมในการทำเช่นนั้น


1
คุณสามารถใช้งานs[n]?...ภายในของn<s.length?...
Hedi

1
คุณสามารถบันทึก 3 ไบต์โดยใช้[...s]แทนs.split``
Huntro

แท้จริงแล้ว 36 ไบต์นึกคิดf=(s,n=1)=>n==1?s:s+s.reverse(),n-1)
caub

non recursive f=(s,n=1)=>Array.from({length:n},(_,i)=>i%2?s.reverse():s).join``)ที่ดีกว่าด้วยฟังก์ชันที่ดีกว่าสำหรับ range
caub

@caub: SyntaxError: Unexpected token )JS ไม่มีการพลิกกลับสตริงดั้งเดิม SyntaxError: Invalid or unexpected tokenสำหรับคำแนะนำที่สองของคุณ เบราว์เซอร์ใดที่ใช้งานได้
ติตัส


4

8088 Assembly, IBM PC DOS, 29 28 ไบต์

ประกอบการxxdถ่ายโอนข้อมูล:

00000000: d1ee ac48 938a cbfc 518a cbf7 da78 01fd  ...H....Q....x..
00000010: acac b40e cd10 e2f9 59e2 ecc3            ........Y...

รายการที่ยังไม่ได้ประกอบ:

D1 EE       SHR  SI, 1          ; point SI to DOS PSP (080H) 
AC          LODSB               ; load input string length into AL 
48          DEC  AX             ; remove leading space from length counter 
93          XCHG BX, AX         ; save input length to BL 
8A FB       MOV  BH, BL         ; string output counter in BH 
        S_LOOP: 
FC          CLD                 ; set direction forward 
8A CB       MOV  CL, BL         ; reset char counter in CL 
F7 DA       NEG  DX             ; flip DX to toggle fwd/back output 
78 01       JS   C_START        ; if positive, go forward 
FD          STD                 ; otherwise go backwards 
        C_START: 
AC          LODSB               ; adjust SI to first/last char
        C_LOOP: 
AC          LODSB               ; load next char into AL
B4 0E       MOV  AH, 0EH        ; PC BIOS tty output function
CD 10       INT  10H            ; write char to console
E2 F9       LOOP C_LOOP         ; continue looping through chars
FE CF       DEC  BH             ; decrement string count loop
75 EC       JNZ  S_LOOP         ; if not zero, continue loop
C3          RET                 ; exit to DOS

โปรแกรมเรียกทำงาน PC DOS แบบสแตนด์อโลน สตริงอินพุตผ่านบรรทัดรับคำสั่งเอาต์พุตเป็นคอนโซล

ป้อนคำอธิบายรูปภาพที่นี่



3

Haskell, 40 36 32 Bytes

m s=take(length s^2)$cycle$s++reverse s

ตัวอย่าง:

*Main> m "Hello!"
"Hello!!olleHHello!!olleHHello!!olleH"

ยิ่งสั้น (เครดิตถึงดาเมียน):

q s=zip(s>>[s,reverse s])s>>=fst

s >> [s, reverse s]รอบ ["abc", "cba", ... ] ซึ่งถูกบีบอัดให้มีขนาดที่ถูกต้องและ concatMap'ped ด้วย fst


2
q s=zip(s>>[s,reverse s])s>>=fst
ดาเมียน

3
หรือ Pointfree หนึ่งที่มีขนาดเท่ากัน:(>>=fst).(iterate reverse>>=zip)
ดาเมียน

3

Perl 6 ,  31  30 ไบต์

{[~] (|($_,.flip)xx*)[^.chars]}

บันทึกหนึ่งไบต์ด้วยการใช้ผิด.ordsซึ่งจะส่งคืนรายการของเลขลำดับจากนั้นจึงแปลงให้เป็นตัวเลขเพื่อสร้างช่วงด้วย

{[~] (|($_,.flip)xx*)[^.ords]}

คำอธิบาย:

# bare block lambda with implicit parameter 「$_」
{
  # reduce using string concatenation operator 「~」
  [~]

  (
    # create a Slip
    |(
      # of the input, and its string reverse
      $_, .flip

    # list repeated infinitely
    ) xx *

  # get the values in the range from 0 up-to and excluding
  # the number of characters 「0 ..^ +$_.ords」
  )[ ^.ords ]
}

การใช้งาน:

my &code = {[~] (|($_,.flip)xx*)[^.ords]}

say code 'a'; # a
say code 'abcd'; # abcddcbaabcddcba
say code 'OK!'; # OK!!KOOK!
say code 4815162342; # 4815162342243261518448151623422432615184481516234224326151844815162342243261518448151623422432615184

3

Vim + coreutils, 32 keystrokes

คุณไม่มีคำตอบเป็นกลุ่มมากเกินไป

qqYv:!rev
Pjq@=len(@")
@q2dkv{gJ

คำอธิบาย

qq               " Start recording macro
Y                " Yank (copy) line
v:!rev<CR>       " Reverse line with coreutils rev command
Pj               " Paste yanked line above this line
q                " Stop recording
@=len(@")<CR>@q  " Playback macro once for each character
2dk              " Delete last 3 lines
v{gJ             " Join lines

1
ด้วย coreutils? นั่นคือการโกง! : P
Christian Rondeau

3

MATL, 13 12 8 ไบต์

ผลักองค์ประกอบทั้งหมดรวมในท้ายที่สุด

td"tP]&h

td"  ]     %For loop over string length - 1 due to diff
   tP      %Push copy of string, reverse
      &h   %Concatenate entire stack horizontally

ลองออนไลน์!


รุ่นเก่า:

แนวทางที่แตกต่างอย่างสิ้นเชิงขึ้นอยู่กับfprintf:

t"t1$0#YDP]x

t"        ]   % For loop over string
  t           % Duplicate string for printing:
   1$0#YD     % `fprintf` with 1 input, 0 output (i.e., to screen).
         P    % Reverse
           x  % Empty stack to prevent implicit output

เวอร์ชันที่อ้างอิงจากการย้อนกลับสตริงแม่แบบ

ttd"wPtbYc]Dx

t                 %Duplicate input, to create 'accumulator' string 
                  % (alongside the input string which will serve as 'template'
 td               %Duplicate input, diff to get an stringof size input-1
   "       ]      %For loop over size n-1 string (consumes diff'd string)
     wP           %Get 'template' string on top of stack, and reverse
       tb         %Duplicate template string, and switch with 'accumulator' string
         Yc       %Concatenate template string with accumulator. 
            Dx   %Display top element, delete template string to prevent implicit disp

ฉันชอบการใช้งานที่ชาญฉลาดของtd!
DJMcMayhem

@DJMcMayhem ขอบคุณ! ฉันมีความชัดเจนtnq:"ก่อน แต่tn:"ก็มีกลิ่นนิดหน่อย (ดูเคล็ดลับการเล่นกอล์ฟ Matlab นี้ ) ดังนั้นฉันจึงคิดว่าtnq:อาจมีขนาดเล็กลงเช่นกัน
Sanchises

3

สกาลา, 73 72 71 ไบต์

def f(s:String)=for(i<-1 to s.length){print(if(i%2>0)s else s.reverse)}

นี่เป็นความพยายามครั้งแรกของฉันในการตีกอล์ฟดังนั้นฉันมั่นใจว่ามีการปรับปรุงมากมาย

ปรับปรุง:

เลื่อนไป 1 ไบต์โดยการลบวงเล็บ

ขอบคุณแตงโมที่ทำลายล้างได้สำหรับคำแนะนำ


ผมไม่ทราบว่าสกาล่า, แต่คุณสามารถเปลี่ยนi%2==1ไปi%2>0?
เลมอนที่ถูกทำลายได้

@DestructibleWatermelon ไม่คิดอย่างนั้นใช่ฉันทำได้
พระองค์เอง 12794

3

Cubix , 52 ไบต์

Ap\:\;.#u/\:qqsoq(?;u.q..$u<../pB@u:\.....\(?q..s..p

บนลูกบาศก์:

      A p \
      : \ ;
      . # u
/ \ : q q s o q ( ? ; u
. q . . $ u < . . / p B
@ u : \ . . . . . \ ( ?
      q . .
      s . .
      p . .

อันนี้สนุก ยังคงมีจำนวนไบต์ที่จะถูกนำออกจากสนามกอล์ฟ แต่สิ่งนี้จะได้ผลแน่นอน

ลองออนไลน์!

คำอธิบาย:

อินพุตของ ABC

  • /A: ไปทางเหนือและอ่านในอินพุตทั้งหมดเป็นอักขระ -1จะอยู่ที่ด้านล่าง
  • p\;.: ลบออก-1จากสแต็ก
  • u# : ดันสตริง (จำนวนรายการบนสแต็ก)
  • \:\:qq : ทำซ้ำความยาวสตริงสองครั้งดันสำเนาสองชุดที่ด้านล่างของสแต็ก
  • ห่วง:

    • soq(?/<u : สลับด้านบนของสแต็ก, ด้านบนสุดของสแต็กเป็น ASCII, กดด้านบน (ตัวอักษร) ไปที่ด้านล่าง, ลดชั้นบนสุดของสแต็ก, เลี้ยวขวาถ้าไม่ทำ, จากนั้นย้าย IP ไปยังตำแหน่งที่ถูกต้อง
    • เมื่อสิ้นสุดการวนรอบสแต็กจะมีลักษณะดังนี้ C B A 3 3 0
  • ;u : pop top ของสแต็ก C B A 3 3

  • B : สแต็กย้อนกลับ 3 3 A B C
  • p( : เลื่อนจากล่างขึ้นบนและลดลง 3 A B C 2
  • ?ถ้าด้านบนเป็นศูนย์ให้ตรงไปที่@และยกเลิก
  • อื่น
    • psq:uq : เลื่อนจากด้านล่างขึ้นด้านบนสลับด้านบนแล้วเลื่อนจากบนลงล่างล่างและเลื่อนจากบนลงล่าง 3 2 A B C 3
    • $u : ข้าม u
    • < ทำให้เรากลับเข้าสู่วง

ล่าม


นี่คือ24 ไบต์หนึ่ง ตรรกะทั่วไปเดียวกันบีบอัดเพียงเล็กน้อย
MickyT

@MickyT ฉันรู้สึกไม่ดีเกี่ยวกับการรับเครดิตเป็นเวลา 28 ไบต์ของการเล่นกอล์ฟ โพสต์ด้วยตัวคุณเอง!
Giuseppe

3

C (gcc) , 88 87 85 83 68 66 83 82 78 ไบต์

-1 ต้องขอบคุณแมวป่า

เวอร์ชั่นเก่า

p,q;f(char*s){p=q=1;for(char*m=s--;*m;s[p+=q]*p?:(m++,p+=q=-q))putchar(s[p]);}

ลองออนไลน์!

รุ่นที่สั้นกว่า (แตกหักเล็กน้อย)

Riffing บน 76 byte approach โดยASCII-onlyในคอมเม้นท์, และ -1 byte จากtweak ของเขาใน tweak ของฉัน

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

f(char*s){for(char*n=s-1,k=1;*s++;k=-k)for(;*(n+=k);)putchar(*n);}

ลองออนไลน์!



@ ASCII เท่านั้น 68 เป็นไปได้ด้วยการปรับแต่ง
Gastropner

: P ตอนนี้ 67 ตอนนี้ lol @gastropner
ASCII เท่านั้น

@ ASCII-only 66 :-P
gastropner

@ ASCII- เท่านั้นน่าเสียดายที่เวอร์ชั่นสั้นเปิดใช้งานไม่ได้ในบางกรณี
Gastropner

2

Java, 127 111 88 ไบต์

(s,r)->{for(int i=0;i++<s.length();)r+=i%2<1?new StringBuffer(s).reverse():s;return r;};

โปรแกรมทดสอบ Ungolfed

    public static void main(String[] args) {
    BiFunction<String, String, String> func = (s, r) -> {
        for (int i = 0; i++ < s.length();) {
            r += i % 2 < 1 ? new StringBuffer(s).reverse() : s;
        }
        return r;
    };
    System.out.println(func.apply("Hello!", ""));
}

สามารถเล่นกอล์ฟได้อีก: (s,r)->{for(int i=0;i++<s.length();)r+=i%2<1?s:new StringBuffer(s).reverse();return r;};( 88 ไบต์ ) นอกจากนี้ฉันจะระบุว่านี่คือ Java 8
Kevin Cruijssen

เอาล่ะสมมติว่าเขาใช้ Java เวอร์ชันล่าสุด
Shaun Wild

@KevinCruijssen Java 7 ไม่ได้รับการสนับสนุนอีกต่อไป (ยกเว้นกับ $$$ ขนาดใหญ่) เราไม่ควรระบุรุ่นของ Java นอกจากนี้หากคุณเขียนเป็น Java 7 คำตอบส่วนใหญ่สามารถเขียนได้ใน Java 1.1 หรือ 1.2 ดังนั้นคุณไม่ควรเขียนเวอร์ชันต่ำสุดที่ใช้ได้ หากรหัสในคำตอบนี้เป็นไปตาม Java 7 ก็จะเป็นไปตาม Java 1.2 และ ... จะยังคงทำงานใน Java 8
Olivier Grégoire

2

R, 53 ไบต์

สมมติว่าอินพุตเป็นช่องว่างหรือขึ้นบรรทัดใหม่สำหรับอักขระแต่ละตัว

cat(rep(c(i<-scan(,""),rev(i)),l=length(i)^2),sep="")

กรณีทดสอบบางส่วน:

> cat(rep(c(i<-scan(,""),rev(i)),len=length(i)^2),sep="")
1: h e l l o !
7: 
Read 6 items
hello!!ollehhello!!ollehhello!!olleh

> cat(rep(c(i<-scan(,""),rev(i)),l=length(i)^2),sep="")
1: a
2: 
Read 1 item
a

> cat(rep(c(i<-scan(,""),rev(i)),l=length(i)^2),sep="")
1: a b c d
5: 
Read 4 items
abcddcbaabcddcba

> cat(rep(c(i<-scan(,""),rev(i)),l=length(i)^2),sep="")
1: O K !
4: 
Read 3 items
OK!!KOOK!

> cat(rep(c(i<-scan(,""),rev(i)),l=length(i)^2),sep="")
1: 4 8 1 5 1 6 2 3 4 2
11: 
Read 10 items
4815162342243261518448151623422432615184481516234224326151844815162342243261518448151623422432615184

> cat(rep(c(i<-scan(,""),rev(i)),l=length(i)^2),sep="")
1: P P C G
5:    
Read 4 items
PPCGGCPPPPCGGCPP

> cat(rep(c(i<-scan(,""),rev(i)),l=length(i)^2),sep="")
1: 4 2
3: 
Read 2 items
4224

2

PowerShell v2 +, 57 ไบต์

param($a)-join(1..($x=$a.length)|%{($a[$x..0],$a)[$_%2]})

ไม่มีวิธีที่สะอาดจริง ๆ ในการรับความยาวสตริงหรือย้อนกลับ 'em ดังนั้นจึงค่อนข้างยาว

รับอินพุต$aวนซ้ำจาก1ไปยัง$a.length(เก็บไว้$xเพื่อใช้ในภายหลัง) แต่ละซ้ำที่เราใช้หลอก ternary เพื่อดัชนีลงในอาร์เรย์ของอย่างใดอย่างหนึ่ง$aหรือ$a[$x..0](เช่นกลับ) [$_%2]คี่ขึ้นอยู่กับว่าจำนวนการป้อนข้อมูลของเราคือคู่ สิ่งเหล่านี้ถูกห่อหุ้มทั้งหมดใน parens และ-joined เข้าด้วยกันเพื่อสร้างสตริงเดี่ยว ที่เหลืออยู่บนไปป์ไลน์และเอาท์พุทเป็นนัย

PS C:\Tools\Scripts\golfing> .\stringgnirts.ps1 'TimmyD'
TimmyDDymmiTTimmyDDymmiTTimmyDDymmiT

2

Java, 151 ไบต์

public static void r(String s){String t = new StringBuffer(s).reverse().toString();for(int i=0;i<s.length();i++){System.out.print(((i%2==1)?t:s));}}

}

Ungolfed:

public static void r(String s) {
    String t = new StringBuffer(s).reverse().toString();
    for(int i = 0; i < s.length();i++) {
        System.out.print(((i % 2 == 1) ? t : s));
    }
}


1
สวัสดียินดีต้อนรับสู่ PPCG! แรกของทั้งหมดที่ผมอยากจะแนะนำให้อ่านผ่านเคล็ดลับสำหรับการเล่นกอล์ฟในชวา สำหรับรหัสของคุณมีบางสิ่งที่ยังสามารถตีกอล์ฟได้: คุณสามารถลบpublic staticก่อนวิธีการของคุณ t=new StringBufferคุณสามารถลบช่องว่างระหว่าง คุณสามารถลบวงเล็บและวงเล็บเหลี่ยมที่ไม่จำเป็นออกได้ และคุณสามารถสลับการตรวจสอบโมดูลจาก==1เป็น<1(ซึ่งเทียบเท่ากับ==0ตัวเลขที่ไม่เป็นลบ) นอกจากนี้คุณสามารถย้ายi++ไปยังการใช้งานล่าสุดภายใน for-loop
Kevin Cruijssen

6
โดยรวมแล้วจะกลายเป็น: void r(String s){for(int i=0;i<s.length();)System.out.print(i++%2<1?s:new StringBuffer(s).reverse()+"");}( 105 ไบต์ )
Kevin Cruijssen

2

C #, 94 ไบต์

using System.Linq;string R(string n)=>string.Concat(n.SelectMany((c,i)=>1>i%2?n:n.Reverse()));

76 ไบต์สำหรับวิธีการ + 18 ไบต์สำหรับการนำเข้า LINQ

มันทำงานอย่างไร:

using System.Linq; // Required for LINQ extension methods.

string R(string n) => 
    string.Concat( // Concatenate the following chars into a single string
        n.SelectMany( // Enumerate each char in n, flattening the returned IEnumerable<char>'s into a single IEnumerable<char>
            /*IEnumerable<char> Lambda*/(/*char*/ c, /*int*/ i) => // i = index in n
                1 > i % 2 // Check if i is even or odd
                    ? n // if i is even, add n to the concat
                    : n.Reverse() // else reverse n and concat that
        )
    )
;


2

อ็อกเทฟ39 39ไบต์

@(x)[x'+~x;flip(x'+~x),''](1:end/2)

f('Hello!')
ans = Hello!!olleHHello!!olleHHello!!olleH

คำอธิบาย:

@(x)            % Take x as input, inside apostrophes 'Hello!'
x'+~x           % Create a mesh of the ASCII-code of the input letters
                % For input `bcd` this will be:
                %    98    98    98
                %    99    99    99
                %   100   100   100
;flip(x'+~x)   % Concatenate vertically to create:
                %    98    98    98
                %    99    99    99
                %   100   100   100
                %   100   100   100
                %    99    99    99
                %    98    98    98
___,'']         % Short cut to convert ASCII-code to characters
(1:end/2)       % Display the first half of this array of letters, as a
                % horizontal string

บันทึกแล้ว 4 ไบต์ขอบคุณ Luis ~xแทนที่จะ0*xบันทึกไว้หนึ่งไบต์ (ใช้งานได้เนื่องจากองค์ประกอบทั้งหมดของ x ไม่เป็นศูนย์flipแทนที่จะflipudบันทึกอีกสองไบต์ (ฉันไม่ทราบว่าflipมีอยู่)


2

bash + util-linux, 68 58 53 ไบต์

y=$1;for((i;i<${#1};i++)){ echo -n $y;y=`rev<<<$y`;}

คำอธิบาย

สองสิ่งด้วยforลูป:

  • มีวิธีที่ไม่มีเอกสารที่เห็นได้ชัดของการเขียนเป็นforลูปที่หนึ่งแทนที่doและdoneคำหลักที่มีวงเล็บปีกกาและ{ }ช่องว่างหลังจากวงเล็บแรกจำเป็นและเครื่องหมายอัฒภาคที่ท้ายคือก็จำเป็นเช่นกัน
  • ปรากฎว่าใน "C-style" forลูปคุณสามารถเริ่มต้นด้วยi;i=0;แทนการใช้
  • ${#1}ส่วนหนึ่งของเงื่อนไขที่i < ${#1}หมายถึงความยาวของการป้อนข้อมูลของเรา (พารามิเตอร์แรก$1) โดยทั่วไปคุณสามารถใช้${#foo}เพื่อดึงขนาดของสตริง$fooเพื่อดึงขนาดของสตริง

นอกจากนี้:

  • rev เป็นเครื่องมือใน util-linux ที่ฝืนสตริง
  • เราจำเป็นต้องผ่าน-nธงไปechoกำจัดบรรทัดใหม่
  • การแสดงออกrev<<<$yที่เรียกว่าที่นี่สตริง (ดูหน้า tldp.org นี้มีความเกี่ยวข้อง ) ซึ่งผ่านตัวแปรที่จะเข้ามาตรฐานของ$yrev

โปรดอธิบายความรู้ของคุณ นอกจากนี้ยังอาจจะเป็นช่องว่างก่อนก้องอาจจะถอดออกผมไม่ได้มีความรู้เกี่ยวกับการทุบตีแม้ว่า
Rohan Jhunjhunwala

@RohanJhunjhunwala เพิ่มคำอธิบายเล็กน้อยเพื่อคำตอบเพื่อช่วยอธิบายบางสิ่งบางอย่าง นอกจากนี้เมื่อถนัดdoและdoneคำหลักในforห่วงคุณจริงไม่จำเป็นต้องใช้พื้นที่!
เฟรม

+1 ดูดีตอนนี้ ฉันแสดงความคิดเห็นเพียงเพราะรหัสของคุณดึงค่าสถานะคุณภาพต่ำโดยอัตโนมัติ คำตอบรหัสเพียง แต่ได้รับการตั้งค่าสถานะอัตโนมัติ
Rohan Jhunjhunwala

y=$1;for((;i<${#1};i++)){ printf $y;y=`rev<<<$y`;}... บันทึกสองไบต์
roblogic

2

Japt , 11 ไบต์

ê1 pUÊ ¯Uʲ
ê1          // Append the reverse of the input to the input,
   pUÊ      // then repeat it input length times
       ¯Uʲ // and finally trim to length input length squared.

ลองออนไลน์!



@Shaggy ฉันพยายามใช้ แต่สำหรับชีวิตของฉันฉันไม่สามารถแฮงค์มันได้ : P ขอบคุณมากสำหรับตัวอย่างแม้ว่า!
Nit

ขออภัยโพสต์ลิงก์ผิดก็จริง6 ไบต์
ปุย


1
@Shaggy ฉันไม่รังเกียจและมันก็แตกต่างจากคำตอบของ Nit ไปเพื่อมันคน
โอลิเวอร์

2

05AB1E , 7 ไบต์

vDR}v}J

ลองออนไลน์!

จะทำงานต่อไปเรื่อย ๆ ฉันไม่ชอบส่วน "v}" อาจจะสามารถบันทึกไบต์ที่นั่นได้

คำอธิบาย

vDR}v}J

v         ; Iterates through each character
 D        ; Duplicate top of stack
  R       ; Push top of stack reversed
   }      ; end for loop
   v}     ; same as other v, effectively pops top of stack off
     J    ; Join everything together

1
vÂ}\J 5 ไบต์เหมือนกับโค้ดของคุณ แต่ด้วยบิวอินที่คุณต้องการ :)Âคือ Bifurcate (ย่อมาจาก Duplicate & Reverse ซึ่งเป็นสิ่งที่คุณกำลังทำอยู่) \ ลบรายการบนสุดในสแต็ก
Kevin Cruijssen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.