Tersinir ters çevirici


19

Göreviniz basit. Program, standart girişten bir metin satırı okur ve aynı metni karakter ters çevrilmiş biçimde yazdırır. Başka bir şey yazdırmaya izin verilmiyor.

Örneğin:

girdi: "Merhaba!", çıktı: "! olleH"

Yakalama, kaynak kodunun kendisi karakter tersine çevrilmişse, programınızın tam olarak aynı şeyi yapabilmesi gerekir!

Puanlama: standart kod-golf puanlaması geçerlidir, sıkıcıyı sınırlamak için aşağıdaki değişiklikle

//margorp
program//

Stil cevapları: Palindrom olan herhangi bir çözüm, puan için +% 25 cezaya çarptırılır. Bu ceza yine de, örneğin, palindromu kırmak için faydalı etkileri olmayan karakterleri programa girerseniz geçerlidir.


2
"Yararlı etkiler" muhtemelen objektif olarak belirtilemez. GolfScript içinde Ör, peki -1%#%1-/1ya -1%#%(0?
Peter Taylor

Yanıtlar:


14

APL, 5

⌽⍞⍝⍞⊖

Bu , girdiyi ters çevirir ( son eksen boyunca) ( ) ve ardından bir açıklama gelir ( bir satır açıklamasını işaretler). Tersine çevrildiğinde, program girişi ( ilk eksen boyunca) tersine çevirir ve ardından bir açıklama gelir. Çünkü girdi her zaman bir boyutlu olacak, bu durumda ve işlevsel olarak eşdeğerdir. Belki de GolfScript çözümünden bile daha sinsidir, bu yüzden 9 puan alan daha temiz bir çözüm (yorum yok) .

⍬,⌽,⍞,⊖,⍬

Bu önce boş bir vektörü ( ) alır, düzleştirir (monadik ,) ve tersine çevirir ( ilk eksen boyunca). Bu hala boş bir vektör bırakır. Daha sonra girdiye dokunmadan bırakılarak ,( ) girdiye ( ) birleştirilir . Daha sonra ,, zaten düz olan girişi düzleştirir (monadic ) ve tersine çevirir ( son eksen boyunca). Daha sonra ters bir girişe ,başka bir boş vektörü ( ) birleştirir (ikili ) . Bu hiçbir şey yapmaz ve ters girdiyi geride bırakır. Tersine çevrildiğinde, bu program aynı şeyi tekrar yapar ve işlevsel olarak tek boyutlu argümanlarla eşdeğerdir.

Palindromu kırmak için işe yaramaz karakterler eklediğimi gerçekten söyleyemezdiniz (iki farklı ters işlev, iki veya daha fazla boyutlu girişle farklıdır; Sadece biriyle aynı şekilde hareket ettikleri gerçeğinden faydalanıyorum- boyutsal girdi)


14

Unix kabuğu - 8 +% 25 = 10

rev||ver

Önceki cevabı cat|tacaslında işe yaramadı, tacbir satırdaki karakterlerin sırasını değil, satırların sırasını tersine çevirir.


10

Haskell, 53

main=niam
niam=interact reverse
esrever tcaretni=main

Teknik olarak bir palindrom değil, ancak işlev bildirim sırası önemli olmadığından, bir kez tersine döndüğünde aynı programa sahip olursunuz.


Güzel (+1). Bunu denemeden önce bunun gerçekten bir şey yaptığına inanmadım ( Link ).
Martin Thoma

hareket main=niamortalarına beyanı ve bir palindrom olsun.
Johannes Kuhn

@JohannesKuhn Evet, hala farklı bir görünüme sahip "sıkıcı" palindrom çözümü olduğunu itiraf ediyorum.
lortabac


6

Tcl, 78

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

Palindrom değil.



Bu programda "yeniden adlandır" ın yararlı etkisi nedir? (Tcl bilmiyorum)
vsz

komutu yeniden adlandırır exitiçin #(# bir parametre değil, bir açıklama başlangıcıdır). \#sonraki satırda yeni #(kaçan çünkü yorum başlamaz) yürütülür exit.
Johannes Kuhn

6

gs2, 2

(Evet, bu dil meydan okumadan önce yapıldı. Hayır, şaka ya da boşluk değil. ASCII alanı ( 0x20) ters .)

EDIT: aw, dostum, bu soru süper eski mi? Keşke daha erken işleseydim. : <Bu yanıtı, sadece geçmek için çok iyi olduğu için bırakacağım.


3

Golfscript, 9 (7 * 1.25 = 8.75)

-1%#%1-

kirli, kirli, kirli, ama son derece kısa. -1%"her öğeyi (karakteri), geriye doğru seç" ve #"satır yorumu" anlamına gelir. Gerisi GolfScript'in I / O büyüsünden biraz.

Bu bulduğum en kısa "temiz" (yorum yok) çözümü ( 14 * 1.25 = 17.5 ):

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

Anlamı: boş bir dize itin, bırakın, girişi tersine çevirin, iki kez klonlayın, kendi kendine bölün (iki kopya tüketerek ve boş bir dizi üretin), boş diziden hepsini kaldırın, boş diziyi bırakın, boş bir dize itin ve (örtük olarak) yığını yazdırın.


Bunu beklemeliydim. % 500 ceza bile kazanma şansı yüksek olacaktı.
vsz

@vsz Ancak ben golfscript bir yorum (yani temiz) bir çözüm arıyorum.
John Dvorak

Giriş 1 içermiyorsa ..
Johannes Kuhn

@JohannesKuhn haklısın. O "çözümü" düşürdüm.
John Dvorak

@vsz daha ilginç bir meydan okuma yorum karakterleri yasaklamak (ve hala palindromları cezalandırmak?) Bunun için yarışmacım 14 karakter, sanırım çok fazla.
John Dvorak

3

Yakut, 44

puts gets.reverse#esrever.steg stup

Normal bir programın sonunda bir yorum: P

35 karakter, +% 25 = 44


2

Tcl, 75.25

Bu sefer bir palindrom.

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

(arasına ]]ve ]]\ X1A karakteridir.)
Johannes Kuhn

2

Python 3, 42

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

Kredi


Sen kullanabilirsiniz print(input()[::-1])#)]1-::[)(tupni(tnirpyerine 51.25 ile skoru azaltmak için Python 3'te.
arshajii

1
Kesmiyor ...
Oliver Ni

"bir palindrom olan herhangi bir çözüm, puan için +% 25 cezaya çarptırılır. Bu ceza, örneğin, palindromu kırmak için faydalı etkileri olmayan karakterleri programa eklerseniz bu ceza yine de geçerlidir. ." Bunun ;yararlı bir etkisi olmayan böyle bir ekleme olduğunu iddia ediyorum .
Oliver Ni

2

Rebmu : 9 (penaltı ile) veya 13 (olmadan)

Sıkıcı Rebmu çözümü 9'dur ve palindromik cezayı taşır. Yine de "sadece çünkü" göstereceğim:

rnRVaVRnr

Harflerin büyük harflerini fark etmenin hileli hünerini kullanmak ayrı kelimelerdir ve önde gelen bir sermaye işleminin olmaması, bir set kelimesi yapmadığımız anlamına gelir, beş sıradan kelime üretiriz:

rn rv a vr nr

Eşdeğer kod için bir kısayol olan (ayrıca yasal Rebmu):

return reverse a vr nr

Vr ve nr'nin anlamsız olması önemli değildir, çünkü hiçbir şeye atanmamasına rağmen geçerli kelimelerdir. Yani değerlendirici sadece return reverse a... her iki şekilde de çalışır. Ancak bu, sıkıcı hile açısından bir anlamlıdır: kod yorumlanmaz, ancak ölüdür ve tek bir yolda yürütülmez.

Cezalandırılmayan daha heyecan verici bir şey için, bu 13 karakterlik çözüme ne dersiniz:

a VR :rv AvrA

Bunun, genişletildiğinde ileri ve geri yollarında nasıl işlendiğine bakalım. yönlendir:

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!

Şu şekilde geriye 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!

Aşağı yönde, geriye doğru varyant, ters kısaltmanın üzerine yazılıyor. Ama hey, bu bir palindrom değil ve sadece 13 karakter. :-)

(Not: Bu, Rebmu'yu / args modunda çalıştırdığınızı varsayar; burada a, komut satırındaki yorumlayıcıya iletilen programın varsayılan argümanıdır ve sonucu kabul edersiniz. Standart girdiden okumak aslında bir gereklilikse, basit çözüm için örneğin 9'dan 11'e kadar karakter büyütün: rnRVrArVRnrVe eğer bir kaç karakter ekleyecek olan yorumlayıcının ifade çıktısını kabul etmek yerine program içinden standart çıktıya yazdırmanız gerekiyorsa.)


2

JavaScript, 62 * 1.25 = 78

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

Çok yaratıcı değil, ama gelebileceğim en iyisi. (girişin değişkente saklandığını varsayari )

Bunu aldım:

63 karakter, palindrom yok

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

ama hile gibi hissettiriyordu. : PI çok daha önemsiz değişiklikler yapabilir ( i['split']bunun yerine kullanmak gibi i.split), ancak hepsi hala hile gibi hissediyorlar: P


girdinin i değişkeni içinde saklandığını varsayarsa (p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)(60 bayt) bunu yapar.
Esc Điệp

2

Pyke, 2 (+% 25), rakipsiz

_

Pyke girdiyi dolaylı olarak alır ve dolaylı olarak çıktı alır.

_ ters fonksiyonudur.


1

Tcl, 99

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

Var olmayan bir komut çağrılırsa, unknownkomutu yükleyebilecek özel bir komut çağrılır. Ya da başka komik şeyler yapın.


1

T-SQL, 86 * 1.25 = 108

İşte SQL Server 2008 (ve daha yeni) için sadece mümkün olduğunu göstermek için sıkıcı bir palindromik giriş.

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

@ girdi metnini tutar, örnek dize "Merhaba" dur. Bu girişin karakter sayısı iki karakterlik bir giriş dizesi içindir.


1

Fıçı , tavan (1 + 0.25) = 2 bayt

?

Bu, girişi alır ve tersine çevirir ve örtük çıktı, kelimenin tam anlamıyla çıkar. TIO



0

QBIC , 14 +% 25 = 18 bayt

;?_fA|#|Af_?;

Palindromik kaynak kodu kullanır. Bunu yapmak için iki farklı yol kullanmak biraz daha uzun sürer (34 bayt):

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

Açıklama:

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

Saldırgan , 7 bayt (5 +% 25)

@"i"@

Çevrimiçi deneyin!

Bu bir palindrom olduğu için% 25 ceza alıyor, ancak yapabileceğim en iyi şey bu. Programın hangi yolu çalıştırılırsa çalıştırılsın, şu 3 komutu yerine getirir:

@     \ Reverse the input
 "    \ Print
  i   \ Exit

İkame iiçin c(açık yığını) ya da \(yorum) aynı etkiye sahiptir.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.