Bộ đảo chiều đảo ngược


19

Nhiệm vụ của bạn rất đơn giản. Chương trình đọc một dòng văn bản từ đầu vào tiêu chuẩn và nó in ra cùng một văn bản ở dạng đảo ngược ký tự. Nó không được phép in bất cứ điều gì khác.

Ví dụ:

đầu vào: "Xin chào!", đầu ra: "! olleH"

Điều thú vị là , chương trình của bạn phải có khả năng thực hiện chính xác điều tương tự nếu chính mã nguồn bị đảo ngược ký tự!

Ghi điểm: áp dụng cho điểm đánh gôn tiêu chuẩn, với sửa đổi sau đây để hạn chế sự nhàm chán

//margorp
program//

câu trả lời theo phong cách: bất kỳ giải pháp nào là bảng màu sẽ phải chịu mức phạt + 25% cho điểm số, làm tròn số. Hình phạt này vẫn được áp dụng, ví dụ, nếu bạn chèn các ký tự vào chương trình không có bất kỳ hiệu ứng hữu ích nào, chỉ để phá vỡ bảng màu.


2
"Hiệu ứng hữu ích" có lẽ không thể được chỉ định một cách khách quan. Ví dụ, trong GolfScript, những gì về -1%#%1-/1hoặc -1%#%(0?
Peter Taylor

Câu trả lời:


14

APL, 5

⌽⍞⍝⍞⊖

Điều này đảo ngược ( , dọc theo trục cuối cùng) đầu vào ( ) và được theo sau bởi một nhận xét ( đánh dấu một nhận xét dòng). Đảo ngược, chương trình đảo ngược ( , dọc theo trục đầu tiên) đầu vào và được theo sau bởi một nhận xét. Bởi vì đầu vào luôn luôn là một chiều, trong trường hợp này tương đương về chức năng. Nó thậm chí còn lén lút hơn giải pháp GolfScript, vì vậy đây là một giải pháp sạch hơn (không có nhận xét), điểm 9 .

⍬,⌽,⍞,⊖,⍬

Cái đầu tiên này lấy một vectơ trống ( ), làm phẳng nó (đơn âm ,) và đảo ngược nó ( , dọc theo trục đầu tiên). Điều này vẫn để lại một vector trống. Sau đó, nó nối (dyadic ,) với đầu vào ( ), để lại đầu vào không bị ảnh hưởng. Sau đó, nó làm phẳng (đơn âm ,) đầu vào đã phẳng và đảo ngược nó ( , dọc theo trục cuối cùng). Sau đó, nó nối (dyadic ,) một vectơ trống ( ) khác với đầu vào đảo ngược. Điều này không có gì, và để lại đầu vào đảo ngược phía sau. Đảo ngược, chương trình này thực hiện điều tương tự, một lần nữa dựa trên thực tế đó tương đương về mặt chức năng với các đối số một chiều.

Bạn thực sự không thể nói rằng tôi thêm các ký tự vô dụng để phá vỡ bảng màu (hai chức năng đảo ngược khác nhau với đầu vào hai chiều trở lên; Tôi chỉ lợi dụng thực tế là chúng hoạt động giống nhau với một- đầu vào chiều)


14

Vỏ Unix - 8 + 25% = 10

rev||ver

Câu trả lời trước đây cat|tackhông thực sự hoạt động, tacđảo ngược thứ tự các dòng, không phải thứ tự các ký tự trong một dòng.


10

Haskell, 53

main=niam
niam=interact reverse
esrever tcaretni=main

Về mặt kỹ thuật không phải là một bảng màu, nhưng, vì thứ tự khai báo hàm không thành vấn đề, nên một khi đảo ngược, bạn có chính xác cùng một chương trình.


Đẹp (+1). Tôi không tin rằng điều này thực sự đã làm bất cứ điều gì, trước khi tôi thử nó ( Liên kết ).
Martin Thoma

di chuyển main=niamkhai báo đến giữa, và bạn nhận được một bảng màu.
Julian Kuhn

@JohannesKuhn Vâng, tôi thừa nhận nó vẫn là giải pháp palindrom "nhàm chán", với diện mạo khác.
lortabac

10

Ruby, 37

eval <<1.reverse#
esrever.steg stup
1

Đảo ngược:

1
puts gets.reverse
#esrever.1<< lave

Herestrings, lén lút! +1
Doorknob

6

Tcl, 78

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

Không phải là một palindrom.



"Đổi tên thoát" có tác dụng gì trong chương trình này? (Tôi không biết Tcl)
vsz

đổi tên lệnh exitthành #(# là tham số, không phải bắt đầu nhận xét). \#trong dòng tiếp theo sẽ thực thi #(không bắt đầu bình luận vì đã thoát) là cái mới exit.
Julian Kuhn

6

gs2, 2

(Vâng, ngôn ngữ này đã được thực hiện trước thử thách. Không, đó không phải là một trò đùa hay kẽ hở. Không gian ASCII ( 0x20) là đảo ngược .)

EDIT: aw, anh bạn, câu hỏi này là siêu cũ? Giá như tôi cam kết sớm hơn. : <Tuy nhiên, tôi sẽ để lại câu trả lời này vì nó quá tốt để bỏ qua.


3

Golf, 9 (7 * 1,25 = 8,75)

-1%#%1-

bẩn, bẩn, bẩn, nhưng cực kỳ ngắn. -1%có nghĩa là "chọn từng yếu tố (ký tự), ngược" và #có nghĩa là "nhận xét dòng". Phần còn lại chỉ là một chút phép thuật I / O của GolfScript.

Đây là giải pháp "sạch" (không có bình luận) ngắn nhất mà tôi đã tìm thấy ( 14 * 1.25 = 17.5 ):

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

nghĩa là: đẩy một chuỗi rỗng, thả nó, đảo ngược đầu vào, sao chép hai lần, tách nó ra (tiêu thụ hai bản sao và tạo ra một mảng trống), loại bỏ tất cả các chuỗi khỏi mảng trống, thả mảng emtpy, đẩy một chuỗi trống và (ngầm) in ngăn xếp.


Tôi nên đã mong đợi điều này. Thậm chí một hình phạt 500% sẽ có cơ hội cao để biến nó thành người chiến thắng.
vsz

@vsz Tuy nhiên, tôi đang tìm kiếm một giải pháp không bình luận (tức là sạch) trong golfscript.
John Dvorak

Nếu đầu vào không chứa 1 ..
Julian Kuhn

@JohannesKuhn bạn nói đúng. Tôi đã bỏ "giải pháp" đó.
John Dvorak

@vsz một thử thách thú vị hơn là cấm các nhân vật bình luận (và vẫn phạt các palindromes?) Thí sinh của tôi cho điều này có 14 ký tự, tôi đoán khá nhiều.
John Dvorak

3

Hồng ngọc, 44

puts gets.reverse#esrever.steg stup

Chỉ cần một nhận xét ở cuối chương trình bình thường: P

35 ký tự, + 25% = 44


2

Tcl, 75,25

Lần này là một palindrom.

puts [string rev [gets stdin]]]]nidts steg[ ver gnirts[ stup

(giữa ]]]]là ký tự \ x1A.)
Johannes Kuhn

2

Trăn 3, 42

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

Tín dụng

  • Phiên bản ban đầu với số điểm 49 + 25% = 61,25 do tôi tạo
  • Cảm ơn arshajii vì đã cải thiện điểm số từ 61,25 lên 51,25
  • Phiên bản mới với số điểm 42 ( :-)) do tôi tạo

Bạn có thể sử dụng print(input()[::-1])#)]1-::[)(tupni(tnirptrong Python 3 thay vào đó để cắt giảm điểm xuống 51,25.
arshajii

1
Không cắt ...
Oliver Ni

"bất kỳ giải pháp nào là một bảng màu sẽ phải chịu một hình phạt + 25% cho điểm số, làm tròn lên. Hình phạt này vẫn được áp dụng, ví dụ, nếu bạn chèn các ký tự vào chương trình không có bất kỳ hiệu ứng hữu ích nào, chỉ để phá vỡ bảng màu . " Tôi tranh luận rằng việc ;chèn như vậy không có tác dụng hữu ích.
Oliver Ni

2

Rebmu : 9 (w / hình phạt) hoặc 13 (không có)

Giải pháp Rebmu nhàm chán là 9 và chịu hình phạt palindromic. Dù sao tôi cũng sẽ chỉ cho nó "chỉ vì":

rnRVaVRnr

Sử dụng unmushing trick của nhận thấy chạy vốn của các chữ cái là những từ riêng biệt, và việc thiếu một phương tiện vốn chạy hàng đầu chúng tôi không làm một bộ chữ, chúng tôi sản xuất năm từ bình thường:

rn rv a vr nr

Đó là một tốc ký cho mã tương đương (cũng là Rebmu hợp pháp):

return reverse a vr nr

Thực tế là vr và nr là vô nghĩa không quan trọng, bởi vì mặc dù không được gán cho bất cứ điều gì chúng là những từ hợp lệ. Vì vậy, người đánh giá chỉ chạy return reverse a... nó hoạt động cả hai cách. Nhưng điều này tương tự theo nghĩa gian lận nhàm chán: mã không được nhận xét, nhưng nó đã chết và không được thực thi trên một đường dẫn.

Đối với một cái gì đó thú vị hơn mà không phải chịu hình phạt, làm thế nào về giải pháp 13 ký tự này:

a VR :rv AvrA

Chúng ta hãy xem làm thế nào điều này được xử lý trên các đường dẫn thuận và ngược của nó, khi được mở rộng. Phía trước:

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!

Ngược như 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!

Mặt khác, biến thể ngược là ghi đè viết tắt cho đảo ngược. Nhưng này, nó không phải là một bảng màu, và nó chỉ có 13 ký tự. :-)

(Lưu ý: Điều này giả sử bạn đang chạy Rebmu ở chế độ / args, trong đó a là đối số mặc định cho chương trình được truyền cho trình thông dịch trên dòng lệnh và bạn chấp nhận kết quả. Nếu đọc từ đầu vào tiêu chuẩn thực sự là một yêu cầu, mọi thứ phát triển, ví dụ: từ 9 đến 11 ký tự cho giải pháp đơn giản : rnRVrArVRnr. Và nếu bạn phải in ra đầu ra tiêu chuẩn từ trong chương trình thay vì chấp nhận đầu ra biểu thức của trình thông dịch cũng sẽ thêm một vài ký tự.)


2

JavaScript, 62 * 1.25 = 78

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

Không quá sáng tạo, nhưng tốt nhất tôi có thể nghĩ ra. (giả sử rằng đầu vào được lưu trữ trong biến i)

Tôi đã nhận được điều này:

63 ký tự, không có bảng màu

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

nhưng nó cảm thấy quá giống như gian lận. : PI có thể thực hiện nhiều thay đổi nhỏ hơn (như sử dụng i['split']thay vì i.split), nhưng tất cả những người vẫn cảm thấy như gian lận: P


giả sử rằng đầu vào được lưu trữ trong biến i sau đó (p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)(60 byte) thực hiện điều đó.
Esc Điệp

2

Pyke, 2 (+ 25%), không cạnh tranh

_

Pyke lấy đầu vào ngầm và đầu ra ngầm.

_ là hàm ngược.


1

Tcl, 99

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

Nếu một lệnh không tồn tại được gọi, một unknownlệnh đặc biệt được gọi có thể tải lệnh. Hoặc làm những thứ buồn cười khác.


1

T-SQL, 86 * 1.25 = 108

Đây là một mục nhập palindromic nhàm chán cho SQL Server 2008 (và mới hơn) chỉ để cho thấy rằng nó có thể.

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

@ giữ văn bản đầu vào, chuỗi ví dụ là "Hi". Số char của mục này dành cho chuỗi đầu vào hai char.


1

Keg , trần (1 + 0,25) = 2 byte

?

Điều này có đầu vào và đảo ngược, và đầu ra ngầm định nó theo nghĩa đen. TIO



0

QBIC , 14 + 25% = 18 byte

;?_fA|#|Af_?;

Sử dụng một mã nguồn palindromic. Sử dụng hai cách riêng biệt để thực hiện việc này mất nhiều thời gian hơn (34 byte):

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

Giải trình:

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 byte (5 + 25%)

@"i"@

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

Điều này phải chịu mức phạt 25% vì đây là một bảng màu, nhưng đó là điều tốt nhất tôi có thể làm. Bất kể cách nào xung quanh chương trình được chạy, nó thực hiện 3 lệnh sau:

@     \ Reverse the input
 "    \ Print
  i   \ Exit

Thay thế icho c(ngăn xếp rõ ràng) hoặc \(bình luận) có tác dụng tương tự.



0

R , 65 byte

EDIT: Bỏ hình phạt 25% nhờ một sự tầm thường, nhưng không thấy được với tôi, thay đổi bởi Grimy.

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

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

Nói xin chào với khả năng tuyệt vời của R để xử lý các chuỗi, ngay cả khi bạn sử dụng các gói được thiết kế cho các chuỗi như stringi... barf


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.