ย้อนกลับได้


19

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

ตัวอย่างเช่น:

อินพุต: "Hello!", เอาต์พุต: "! olleH"

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

เกณฑ์การให้คะแนน: ใช้การให้คะแนนโค้ดกอล์ฟแบบมาตรฐานโดยมีการแก้ไขดังต่อไปนี้เพื่อ จำกัด การคว้าน

//margorp
program//

คำตอบสไตล์: วิธีแก้ปัญหาใด ๆ ที่เป็น palindrome จะต้องเสียค่าปรับ 25% จากคะแนนเต็ม บทลงโทษนี้ยังคงมีผลอยู่หากคุณใส่ตัวอักษรลงในโปรแกรมที่ไม่มีผลใด ๆ ที่เป็นประโยชน์เพียงเพื่อแยกส่วนที่เป็นสีออก


2
"เอฟเฟ็กต์ที่มีประโยชน์" อาจไม่สามารถระบุอย่างเป็นกลาง เช่นใน GolfScript สิ่งที่เกี่ยวกับ-1%#%1-/1หรือ-1%#%(0?
Peter Taylor

คำตอบ:


14

APL, 5

⌽⍞⍝⍞⊖

สิ่งนี้จะย้อนกลับ ( ตามแนวแกนสุดท้าย) อินพุต ( ) และตามด้วยความคิดเห็น ( ทำเครื่องหมายความคิดเห็นในบรรทัด) ย้อนกลับโปรแกรมจะย้อนกลับ ( ตามแนวแกนแรก) อินพุตและตามด้วยความคิดเห็น เพราะอินพุตจะเป็นหนึ่งมิติเสมอในกรณีนี้และเทียบเท่ากับหน้าที่ บางทีมันก็เป็นแม้กระทั่ง sneakier กว่าวิธี GolfScript เพื่อให้ที่นี่เป็นทางออกที่ทำความสะอาด (no comments) ซึ่งคะแนน9

⍬,⌽,⍞,⊖,⍬

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

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


14

Unix shell - 8 + 25% = 10

rev||ver

คำตอบก่อนหน้านี้ของใช้งานcat|tacไม่ได้จริงtacกลับคำสั่งของบรรทัดไม่ใช่ลำดับของอักขระในบรรทัด


10

Haskell, 53

main=niam
niam=interact reverse
esrever tcaretni=main

ในทางเทคนิคไม่ใช่ palindrome แต่เนื่องจากลำดับการประกาศฟังก์ชันไม่สำคัญเมื่อย้อนกลับคุณมีโปรแกรมเดียวกันทั้งหมด


ดีมาก (+1) ฉันไม่เชื่อว่านี่จะทำอะไรจริง ๆ ก่อนที่ฉันจะลอง ( ลิงก์ )
Martin Thoma

ย้ายการmain=niamประกาศไปที่กึ่งกลางและคุณจะได้รับ palindrome
Johannes Kuhn

@JohannesKuhn ใช่ฉันยอมรับว่ามันยังคงเป็นโซลูชัน palindrome "น่าเบื่อ" ที่มีลักษณะแตกต่างกัน
lortabac


6

Tcl, 78

puts [string rev [gets stdin]];#\
]]nidts steg[ ver gnirts[ stup;# tixe emaner

ไม่ใช่ palindrome



โปรแกรมนี้มีประโยชน์อะไรบ้างใน "rename exit" ในโปรแกรมนี้? (ฉันไม่รู้ Tcl)
vsz

เปลี่ยนชื่อคำสั่งexitเป็น#(# คือพารามิเตอร์ไม่ใช่จุดเริ่มต้นของความคิดเห็น) \#ในบรรทัดถัดไปจะดำเนินการ#(ไม่เริ่มต้นของความคิดเห็นเพราะหนี) exitซึ่งเป็นใหม่
Johannes Kuhn

6

gs2, 2

(ใช่ภาษานี้สร้างขึ้นก่อนการท้าทายไม่ใช่ไม่ใช่เรื่องตลกหรือช่องโหว่ ASCII space ( 0x20) กลับด้าน )

แก้ไข: aw, man คำถามนี้เก่ามาก? ถ้าเพียง แต่ฉันจะยอมรับเร็วกว่านี้ : <ฉันจะทิ้งคำตอบนี้ไว้เพียงเพราะมันดีเกินกว่าจะผ่านไปได้


3

Golfscript, 9 (7 * 1.25 = 8.75)

-1%#%1-

สกปรกสกปรกสกปรก แต่สั้นมาก -1%หมายถึง "เลือกแต่ละองค์ประกอบ (ตัวอักษร) ไปข้างหลัง" และ#หมายถึง "ความคิดเห็นของบรรทัด" ที่เหลือเป็นเพียงส่วนหนึ่งของเวทมนตร์ I / O ของ GolfScript

นี่เป็นคำตอบสั้น ๆ "สะอาด" (ไม่มีความคิดเห็น) ที่ฉันได้พบ ( 14 * 1.25 = 17.5 ):

'';-1%..%1-;''

ความหมาย: กดสตริงว่าง, ปล่อยมัน, ย้อนกลับอินพุต, คัดลอกสองครั้ง, แยกมันเอง (ใช้สองสำเนาและสร้างอาร์เรย์ว่าง), ลบสตริงทั้งหมดออกจากอาร์เรย์ว่าง, ปล่อยอาร์เรย์ emtpy, ผลักสตริงว่าง และ (โดยปริยาย) พิมพ์สแต็ก


ฉันควรคาดหวังสิ่งนี้ แม้การลงโทษ 500% จะมีโอกาสสูงที่จะทำให้เป็นผู้ชนะ
vsz

@ vsz ฉันกำลังมองหาวิธีแก้ปัญหาไม่มีความคิดเห็น (เช่นสะอาด) ใน golfscript อย่างไรก็ตาม
John Dvorak

หากอินพุตไม่มี 1 .. ..
Johannes Kuhn

@JohannesKuhn คุณพูดถูก ฉันทิ้ง "วิธีแก้ปัญหา" นั้น
John Dvorak

@vsz ความท้าทายที่น่าสนใจยิ่งกว่าคือห้ามตัวละครที่แสดงความคิดเห็น (และยังลงโทษ Palindromes?) ผู้แข่งขันของฉันมี 14 ตัวอักษรค่อนข้างมากฉันเดา
John Dvorak

3

ทับทิม, 44

puts gets.reverse#esrever.steg stup

เพียงความคิดเห็นในตอนท้ายของโปรแกรมปกติ: P

35 ตัวอักษร + 25% = 44



2

Python 3, 42

print(input()[::-1]);#)]1-::[)(tupni(tnirp

เครดิต

  • รุ่นเริ่มต้นด้วยคะแนน 49 + 25% = 61.25 สร้างโดยฉัน
  • ขอบคุณarshajiiสำหรับการปรับปรุงคะแนนจาก 61.25 ถึง 51.25
  • รุ่นใหม่ที่มีคะแนน 42 ( :-)) สร้างโดยฉัน

คุณสามารถใช้print(input()[::-1])#)]1-::[)(tupni(tnirpใน Python 3 แทนเพื่อลดคะแนนลงเหลือ 51.25
arshajii

1
ไม่ตัด ...
Oliver Ni

"วิธีแก้ปัญหาใด ๆ ที่เป็น palindrome จะต้องเสียค่าปรับ 25% จากคะแนน, ปัดเศษขึ้นค่าปรับนี้ยังคงมีผลเช่นถ้าคุณแทรกตัวอักษรลงในโปรแกรมที่ไม่มีผลใด ๆ ที่เป็นประโยชน์เพียงเพื่อทำลาย palindrome ." ฉันขอยืนยันว่า;มันเป็นส่วนเสริมที่ไม่มีประโยชน์ใด ๆ
Oliver Ni

2

Rebmu : 9 (w / โทษ) หรือ 13 (ไม่รวม)

โซลูชัน Rebmu ที่น่าเบื่อคือ 9 และรับโทษ Palindromic ฉันจะแสดงมันต่อไป "เพียงเพราะ":

rnRVaVRnr

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

rn rv a vr nr

ซึ่งเป็นชวเลขสำหรับรหัสที่เทียบเท่า (เช่น Rebmu ตามกฎหมาย):

return reverse a vr nr

ความจริงที่ว่า vr และ nr นั้นไร้ความหมายไม่สำคัญเพราะแม้จะไม่ได้รับมอบหมายให้ทำสิ่งใดก็ตาม ดังนั้นผู้ประเมินจะรันreturn reverse a... มันทำงานได้ทั้งสองวิธี แต่นี่คล้ายกับการโกงที่น่าเบื่อ: รหัสไม่ได้ถูกใส่ความคิดเห็น แต่มันตายแล้วและไม่ได้ดำเนินการบนเส้นทางเดียว

สำหรับสิ่งที่น่าตื่นเต้นมากกว่าที่ไม่ได้รับการลงโทษวิธีการแก้ปัญหาตัวละคร 13 ตัวนี้:

a VR :rv AvrA

เรามาดูกันว่าวิธีนี้ถูกประมวลผลบนเส้นทางไปข้างหน้าและย้อนกลับเมื่อขยาย ส่งต่อ:

a               ; evaluate a, as it is a string it has no side effects
vr: :reverse    ; "set" vr to mean what a "get" of reverse means now
a: vr a         ; assign a to calling "vr" on a, effectively reversing
                ;   ^-- result of assign is last expression, the answer!

ย้อนกลับเป็นArvA vr: RV a:

a: reverse a    ; assign A to its reversal
vr: rv: a       ; make the abbreviation vr equal to assignment of a to rv
                ;   ^-- result of assign is last expression, the answer!

ในข้อเสียตัวแปรด้านหลังคือการเขียนทับตัวย่อสำหรับการย้อนกลับ แต่เฮ้มันไม่ใช่ Palindrome และมันก็แค่ 13 ตัวอักษร :-)

(หมายเหตุ: นี่ถือว่าคุณใช้ Rebmu ในโหมด / args โดยที่ a คืออาร์กิวเมนต์เริ่มต้นของโปรแกรมที่ส่งไปยังตัวแปลบนบรรทัดคำสั่งและคุณยอมรับผลลัพธ์หากการอ่านจากอินพุตมาตรฐานเป็นสิ่งที่จำเป็นจริง ๆ เติบโตเช่นจาก 9 ถึง 11 ตัวอักษรสำหรับการแก้ปัญหาอย่างง่าย: rnRVrArVRnr. และหากคุณต้องพิมพ์ไปยังเอาต์พุตมาตรฐานจากภายในโปรแกรมแทนการยอมรับการแสดงออกของการแสดงออกของล่ามที่จะเพิ่มตัวอักษรคู่เกินไป)


2

JavaScript, 62 * 1.25 = 78

i.split('').reverse().join('')//)''(nioj.)(esrever.)''(tilps.i

ไม่สร้างสรรค์เกินไป แต่สิ่งที่ดีที่สุดที่ฉันสามารถทำได้ (สมมติว่าอินพุตถูกเก็บในตัวแปรi)

ฉันได้รับสิ่งนี้:

63 chars, ไม่มี palindrome

i.split('').reverse().join('')//)a(nioj.)(esrever.)''=a(tilps.i

แต่มันรู้สึกเหมือนโกงมากเกินไป : PI สามารถทำการเปลี่ยนแปลงเล็กน้อยอื่น ๆ อีกมากมาย (เช่นใช้i['split']แทนi.split) แต่ทุกคนยังคงรู้สึกอยากโกง: P


สมมติว่าอินพุตถูกเก็บไว้ในตัวแปร i ดังนั้น(p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)(60 ไบต์) ก็ทำสิ่งนั้น
Esc Điệp

2

Pyke, 2 (+ 25%), ไม่ใช่การแข่งขัน

_

Pyke รับอินพุตโดยปริยายและแสดงผลลัพธ์โดยปริยาย

_ เป็นฟังก์ชั่นย้อนกลับ


1

Tcl, 99

proc unknown args {puts "Hello World!"}
}"!dlroW olleH" stup{ sgra nwonknu corp

หากคำสั่งที่ไม่มีอยู่เรียกว่าunknownคำสั่งพิเศษที่เรียกว่าสามารถโหลดคำสั่ง หรือทำเรื่องตลก ๆ


1

T-SQL, 86 * 1.25 = 108

นี่คือรายการ palindromic ที่น่าเบื่อสำหรับ SQL Server 2008 (และใหม่กว่า) เพียงเพื่อแสดงว่าเป็นไปได้

DECLARE @ VARCHAR(MAX)='Hi'PRINT REVERSE(@)--)@(ESREVER TNIRP''=)XAM(RAHCRAV @ ERALCED

@ เก็บข้อความอินพุตสตริงตัวอย่างเป็น "Hi" จำนวนถ่านของรายการนี้มีไว้สำหรับสตริงอินพุตแบบสองถ่าน


1

Keg , ceil (1 + 0.25) = 2 ไบต์

?

สิ่งนี้จะรับอินพุตและย้อนกลับและเอาต์พุตโดยปริยาย TIO



0

QBIC , 14 + 25% = 18 ไบต์

;?_fA|#|Af_?;

ใช้ซอร์สโค้ดแบบ palindromic การใช้สองวิธีที่แตกต่างในการทำเช่นนี้จะใช้เวลานานกว่า (34 ไบต์):

;[_lA|,1,-1|Z=Z+mid$(A,a,1)#|Af_?;

คำอธิบาย:

Read the input string from the command line as A$
;

FOR len(A$); a >= 1; a--
[        Starts a FOR loop
_l...|   returns the length the argument(here, A$); sets the starting point of the loop
,1       set the end point of the loop
,-1      FOR loop incrementer (or decrementer in this case)
|        Ends the argument list for the FOR loop

On each FOR iteration, add the right-most character of the input to Z$
Z=Z+mid$(A,a,1)

The cheat:
# starts a string literal, hiding the flipped source.
    The literal is closed implicitly at the end-of-file.
    The FOR loop is closed implicitly at the end-of-file.
    Z$ gets printed implicitly at the end of the program if it's non-empty

The flipped source is the same as my palindrome-code:
;       reads in A$ from the cmd line   
 ?      PRINT
  _fA|  The reversed version of A$
      # And hide the rest of our source in a literal  

0

Pushy , 7 ไบต์ (5 + 25%)

@"i"@

ลองออนไลน์!

นี่เป็นโทษ 25% เนื่องจากเป็นสิ่งที่ผิดพลาด แต่สิ่งที่ดีที่สุดที่ฉันทำได้ ไม่ว่าโปรแกรมจะทำงานในลักษณะใดมันก็ทำตาม 3 คำสั่งนี้:

@     \ Reverse the input
 "    \ Print
  i   \ Exit

การแทนที่iสำหรับ c(ล้างสแต็ก) หรือ\(ความคิดเห็น) มีผลเหมือนกัน



0

R , 65 ไบต์

แก้ไข: ทิ้งโทษ 25% ด้วยความขอบคุณเล็กน้อย แต่มองไม่เห็นฉันเปลี่ยนโดย Grimy

stringi::stri_reverse(scan(,""))#))'',(nacs(esrever_irts::ignirts

ลองออนไลน์!

ทักทายกับความสามารถสุดซึ้งของ R ในการจัดการสตริงแม้ว่าคุณจะใช้แพ็คเกจที่ออกแบบมาสำหรับสตริงอย่างstringi... barf


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