Pembalik reversibel


19

Tugas Anda sederhana. Program membaca dalam satu baris teks dari input standar, dan mencetak teks yang sama dalam bentuk karakter-terbalik. Tidak diperbolehkan mencetak apa pun.

Sebagai contoh:

input: "Hello!", output: "! olleH"

Tangkapannya adalah , program Anda harus dapat melakukan hal yang sama persis jika kode sumber itu sendiri karakter-terbalik!

Penilaian: penilaian standar kode-golf berlaku, dengan modifikasi berikut untuk membatasi membosankan

//margorp
program//

jawaban gaya: solusi apa pun yang merupakan palindrom akan dikenakan penalti + 25% untuk skor, dibulatkan ke atas. Hukuman ini masih berlaku, jika Anda, misalnya, memasukkan karakter ke dalam program yang tidak memiliki efek yang berguna, hanya untuk memecahkan palindrom.


2
"Efek yang berguna" mungkin tidak dapat ditentukan secara objektif. Misalnya di GolfScript, bagaimana dengan -1%#%1-/1atau -1%#%(0?
Peter Taylor

Jawaban:


14

APL, 5

⌽⍞⍝⍞⊖

Ini membalikkan ( , sepanjang sumbu terakhir) input ( ), dan diikuti oleh komentar ( menandai komentar garis). Terbalik, program membalikkan ( , sepanjang sumbu pertama) input, dan diikuti oleh komentar. Karena input selalu akan menjadi satu dimensi, dalam hal ini dan secara fungsional setara. Ini mungkin bahkan lebih licik daripada solusi GolfScript, jadi inilah solusi yang lebih bersih (tidak ada komentar), yang mendapat skor 9 .

⍬,⌽,⍞,⊖,⍬

Ini pertama-tama mengambil vektor kosong ( ), meratakannya (monadik ,), dan membaliknya ( , di sepanjang sumbu pertama). Ini masih menyisakan vektor kosong. Kemudian ia menyambungkan (diad ,) ke input ( ), membiarkan input tersebut tidak tersentuh. Ini kemudian meratakan (monadik ,) input yang sudah rata dan membalikkannya ( , di sepanjang sumbu terakhir). Kemudian ia menggabungkan (diad ,) vektor kosong lainnya ( ) ke input yang dibalik. Ini tidak melakukan apa-apa, dan meninggalkan input terbalik. Terbalik, program ini melakukan hal yang sama, berdasarkan pada fakta bahwa dan secara fungsional setara dengan argumen satu-dimesional.

Anda benar-benar tidak bisa mengatakan saya menambahkan karakter yang tidak berguna untuk memecahkan palindrom (dua fungsi terbalik berbeda dengan input dua atau lebih dimensi; Saya hanya mengambil keuntungan dari fakta mereka bertindak sama dengan satu- input dimensi)


14

Unix shell - 8 + 25% = 10

rev||ver

Jawaban sebelumnya dari cat|tactidak benar-benar berfungsi, tacmembalik urutan garis, bukan urutan karakter dalam satu garis.


10

Haskell, 53

main=niam
niam=interact reverse
esrever tcaretni=main

Secara teknis bukan palindrome, tetapi, karena perintah deklarasi fungsi tidak masalah, setelah dibalik Anda memiliki program yang persis sama.


Bagus (+1). Saya tidak percaya ini benar-benar melakukan apa pun, sebelum saya mencobanya ( Tautan ).
Martin Thoma

pindahkan main=niamdeklarasi ke tengah, dan Anda mendapatkan palindrome.
Johannes Kuhn

@JohannesKuhn Ya, saya akui itu masih merupakan solusi palindrom "membosankan", dengan penampilan yang berbeda.
lortabac

10

Ruby, 37

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

Terbalik:

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

Herestrings, licik! +1
Gagang Pintu

6

Tcl, 78

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

Bukan palindrome.



Apa efek bermanfaat yang dimiliki "rename exit" dalam program ini? (Saya tidak tahu Tcl)
vsz

mengganti nama perintah exitmenjadi #(# adalah parameter, bukan awal dari sebuah komentar). \#di baris berikutnya akan mengeksekusi #(bukan memulai dari komentar karena lolos) yang baru exit.
Johannes Kuhn

6

gs2, 2

(Ya, bahasa ini dibuat sebelum tantangan. Tidak, ini bukan lelucon atau celah. Ruang ASCII ( 0x20) terbalik .)

EDIT: aw, kawan, pertanyaan ini sudah sangat tua? Andai saja saya berkomitmen lebih cepat. : <Saya akan membiarkan jawaban ini hanya karena terlalu bagus untuk dilewatkan begitu saja.


3

Golfscript, 9 (7 * 1.25 = 8.75)

-1%#%1-

kotor, kotor, kotor, tetapi sangat pendek. -1%berarti "pilih setiap elemen (karakter), mundur" dan #berarti "komentar garis". Sisanya hanya sedikit dari sihir I / O GolfScript.

Ini adalah solusi "bersih" terpendek (tanpa komentar) yang saya temukan ( 14 * 1.25 = 17.5 ):

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

artinya: mendorong string kosong, menjatuhkannya, membalikkan input, mengkloningnya dua kali, membaginya dengan sendirinya (mengkonsumsi dua salinan dan menghasilkan array kosong), menghapus semua yang dari array kosong, menjatuhkan array emtpy, mendorong string kosong dan (secara implisit) mencetak tumpukan.


Saya seharusnya mengharapkan ini. Bahkan penalti 500% akan memiliki peluang tinggi untuk menjadikannya pemenang.
vsz

@vsz Saya mencari solusi no-comment (bersih) di golfscript, namun.
John Dvorak

Jika input tidak mengandung 1's ..
Johannes Kuhn

@JohannesKuhn kamu benar. Saya telah menjatuhkan "solusi" itu.
John Dvorak

@vsz tantangan yang lebih menarik adalah melarang karakter komentar (dan masih menghukum palindrom?) Kontestan saya untuk ini memiliki 14 karakter, saya kira cukup banyak.
John Dvorak

3

Ruby, 44

puts gets.reverse#esrever.steg stup

Hanya komentar di akhir program normal: P

35 karakter, + 25% = 44


2

Tcl, 75.25

Kali ini sebuah palindrome.

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

(antara ]]dan ]]adalah karakter \ x1A.)
Johannes Kuhn

2

Python 3, 42

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

Kredit

  • Versi awal dengan skor 49 + 25% = 61.25 dibuat oleh saya
  • Terima kasih kepada arshajii untuk meningkatkan skor dari 61.25 menjadi 51.25
  • Versi baru dengan skor 42 ( :-)) dibuat oleh saya

Anda bisa menggunakan print(input()[::-1])#)]1-::[)(tupni(tnirpPython 3 sebagai gantinya untuk memotong skor menjadi 51,25.
arshajii

1
Itu tidak memotong ...
Oliver Ni

"solusi apa pun yang merupakan palindrome akan dikenakan penalti + 25% untuk skor, dibulatkan. Penalti ini masih berlaku, jika Anda, misalnya, memasukkan karakter ke dalam program yang tidak memiliki efek yang berguna, hanya untuk memecahkan palindrom . " Saya berpendapat bahwa ;ini adalah penyisipan yang tidak memiliki efek yang berguna.
Oliver Ni

2

Rebmu : 9 ( dg hukuman) atau 13 (tanpa)

Solusi Rebmu yang membosankan adalah 9 dan dikenakan penalti palindrom. Saya akan tetap menunjukkannya "hanya karena":

rnRVaVRnr

Dengan menggunakan trik yang tak terbendung dari memperhatikan huruf kapital adalah kata-kata yang terpisah, dan tidak adanya huruf besar berarti kita tidak membuat kata-kata, kita menghasilkan lima kata biasa:

rn rv a vr nr

Yang merupakan singkatan untuk kode yang setara (juga hukum Rebmu):

return reverse a vr nr

Fakta bahwa vr dan nr tidak ada artinya tidak masalah, karena meskipun tidak ditugaskan untuk apa pun mereka adalah kata-kata yang valid. Jadi evaluator hanya menjalankan return reverse a... ia bekerja dua arah. Tapi ini analog dengan cheat yang membosankan: kode tidak dikomentari, tapi sudah mati dan tidak dieksekusi di satu jalur.

Untuk sesuatu yang lebih menarik yang tidak dikenakan penalti, bagaimana dengan solusi 13 karakter ini:

a VR :rv AvrA

Mari kita lihat bagaimana ini diproses pada jalur maju dan mundurnya, ketika diperluas. Meneruskan:

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!

Mundur sebagai 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!

Pada sisi negatifnya, varian mundur menimpa singkatan untuk terbalik. Tapi hei, itu bukan palindrome, dan itu hanya 13 karakter. :-)

(Catatan: Ini mengasumsikan Anda menjalankan Rebmu dalam mode / args, di mana a adalah argumen default untuk program yang diteruskan ke penerjemah pada baris perintah dan Anda menerima hasilnya. Jika membaca dari input standar sebenarnya merupakan persyaratan, hal-hal tumbuh misalnya dari 9 hingga 11 karakter untuk solusi sederhana:. rnRVrArVRnrDan jika Anda harus mencetak ke output standar dari dalam program alih-alih menerima output ekspresi dari interpreter yang akan menambahkan beberapa karakter juga.)


2

JavaScript, 62 * 1.25 = 78

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

Tidak terlalu kreatif, tetapi yang terbaik yang bisa saya dapatkan. (mengasumsikan bahwa input disimpan dalam variabel i)

Saya mendapatkan ini:

63 karakter, tanpa palindrome

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

tapi rasanya seperti selingkuh. : PI dapat melakukan lebih banyak perubahan sepele (seperti menggunakan i['split']alih-alih i.split), tetapi semua itu masih terasa curang: P


mengasumsikan bahwa input disimpan dalam variabel i (p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)(60 byte) melakukan hal itu
Esc Điệp

2

Pyke, 2 (+ 25%), tidak bersaing

_

Pyke mengambil input secara implisit dan output secara implisit.

_ adalah fungsi sebaliknya.


1

Tcl, 99

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

Jika perintah yang tidak ada dipanggil, unknownperintah khusus dipanggil yang dapat memuat perintah. Atau melakukan hal-hal lucu lainnya.


1

T-SQL, 86 * 1.25 = 108

Berikut ini adalah entri palindromic yang membosankan untuk SQL Server 2008 (dan yang lebih baru) hanya untuk menunjukkan bahwa itu mungkin.

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

@ memegang teks input, contoh string adalah "Hai". Hitungan char entri ini adalah untuk string input dua char.


1

Tong , ceil (1 + 0,25) = 2 byte

?

Ini mengambil input dan membalikkan, dan output implisit mengeluarkannya secara harfiah. TIO



0

QBIC , 14 + 25% = 18 byte

;?_fA|#|Af_?;

Mempekerjakan kode sumber palindromic. Menggunakan dua cara berbeda untuk melakukan ini membutuhkan waktu agak lama (34 byte):

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

Penjelasan:

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"@

Cobalah online!

Ini dikenakan penalti 25% karena itu palindrom, tapi itu yang terbaik yang bisa saya lakukan. Tidak peduli ke arah mana program dijalankan, ia melakukan 3 perintah ini:

@     \ Reverse the input
 "    \ Print
  i   \ Exit

Mengganti iuntuk c(tumpukan jelas) atau \(komentar) memiliki efek yang sama.



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.