Palindrome çok dilli


15

Göreviniz iki farklı dilde çalışan ve aşağıdakileri yapan bir program yazmaktır:

  • Bir dilde, belirli bir dizeyi palindromize eder.
    • Dizeyi al. abcde
    • Dizeyi ters çevirin. edcba
    • İlk karakteri kaldırın. dcba
    • Orijinal dizeye yapıştırın. abcdedcba
  • Başka bir dilde, belirli bir dizeyi depalromize eder.
    • Yukarıdaki yöntemle palidromize edilmiş bir dize alın. abcdedcba
    • Karakterleri baştan sona alın. abcde

Unutmayın, bu , bu yüzden en az karaktere (bayt değil) sahip kod kazanır.

Liderler

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı.

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language 1/Language 2, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

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


@LuisMendo Bir saniye ...
Oliver Ni

@LuisMendo Tamam, quesiton'u güncelledim
Oliver Ni

Dize hiç yeni satır içerecek mi?
Outgolfer Erik

Giriş formatı iki dilde farklı olabilir mi? Tırnakları içeren veya onlarsız bir dize gibi
Luis Mendo

@LuisMendo Evet.
Oliver Ni

Yanıtlar:


14

05AB1E / MATL , 10 9 karakter

9LQ2/)%¹û

05AB1E'de bu palindromize olur . MATL'de depalindromize olur .

05AB1E'de açıklama

Kodun bu kısmı hiçbir şey yapmaz (global olarak):

9L    Pushes array [1, 2, ... 9]
Q     Consumes the array, takes the input implicitly, and produces no output
2/    With no further input to take implicitly, this gives no output
)     Wrap stack into an array: gives an empty array
%     Consumes that array and, with no further input to take implicitly, gives no ouput 

Bu işi yapan kısımdır:

¹     Push input again
û     Palindromize. Implicitly display

MATL açıklaması

Bu işi yapan kısımdır:

9L    Push array [0, 1j]
Q2/   Add 1, divide by two: transforms into [1/2, (1+1j)/2]
)     Use as index into implicit input. [1/2, (1+1j)/2] is interpreted as
      1/2:(end+1)/2, which is rounded to 1:(end+1)/2. So this takes elements
      from first to half, including both. Implicitly display

Bu önemsenmez:

%¹û   Everything after '%' is a comment

12

05AB1E / Jelly , 6 karakter

05AB1E'de palindromize olur.
Jelly'de depalindromize olur.

œs2Ḣ¹û

05AB1E'de deneyin

05AB1E Açıklama

œ       # compute powerset of input
 s      # swap (does nothing)
  2     # push 2
   Ḣ    # does nothing
    ¹û  # palindromize input

Jelly'de dene

Jöle Açıklaması

œs2     # split input in 2 chunks (first chunk is larger for odd length strings)
   Ḣ    # head, take first
    ¹û  # does nothing

6

Python 3 / JavaScript, 83 karakter

@LevitatingLion sayesinde 2 bayt kaydedildi

1//2;x=input();print(x+x[-2::-1]);"""
x=prompt();alert(x.slice(0,-x.length/2))//"""

Python palindromize olur , JavaScript depalindromize olur .

İkisi arasında daha fazla kod sabit tutmaya çalıştım, ancak .slicePython'a gizlice girmenin iyi bir yolunu bulamadım . İşte alternatif bir yöntem:

1//2;prompt=input,alert=print
x=prompt();1//2;x+=x[-2::-1]);"""
x=x.slice(0,-x.length/2))//"""
alert(x)

İki karakter kaydetmek için x[::-1][1:]ile değiştirebilirsiniz x[-2::-1].
LevitatingLion

@LevitatingLion Teşekkürler! İki dilimi nasıl birleştireceğimizi anlamaya çalıştım, ama hiçbir şey işe yaramadı.
ETHproductions

5

Scala / Javascript, 106 bayt

/*\u002A/print(args(0)+args(0).reverse.tail)//*/
/*/**/
alert((s=prompt()).slice(0,-s.length/2))//\u000A*/

Skalada palindromize olur ve javascriptte depalindromize olur.

İdeone (scala) üzerinde deneyin - Uyarı: yanlış sözdizimi vurgulama

Jsfiddle (javascript) üzerinde deneyin .

Açıklama:

Scala, java gibi, unicode kaçışlarını her şeyden önce işler, bu nedenle scalac kodu şöyle görür:

/**/                                //\u002A is as asterisk, results in an empty block comment
print(args(0)+args(0).reverse.tail) //scala code
//*/                                //a line comment
/*                                  //scala supports nested block comments, so this comment...
  /*
  */
  alert((s=prompt()).slice(0,-s.length/2)) 
  //                                  //\u000A (newline) inserted here
*/                                  //...ends here

Javascript şöyle ayrıştırılır:

/*\u002A/print(args(0)+args(0).reverse.tail)//*/ //block comment
/*                                               //a block comment...
  /*
*/                                               //...ending here, no nesting
alert((s=prompt()).slice(0,-s.length/2))         //code
//\u000A*/                                       //line comment

4

CJam / MATL , 18 karakter

r_W%(;
"j9LQ2/)%";

CJam'de bu palindromize olur . MATL'de depalindromize olur .

CJam açıklaması

Çalışma bölümü:

r           Read string
_           Duplicate
W%          Reverse
(;          Remove first element

Kukla bölüm:

"j9LQ2/)%"  Push this string
;           Remove it from the stack
            Implicitly display both strings obtained previously

MATL açıklaması

Kukla bölüm:

r           Push random number between 0 and 1
_           Negate
W           2 raised to that
%(;  Comment (ignored)

Çalışma bölümü:

"           For each element in the array at the top of the stack. Since it is a number,
            which is the same as a length-1 array, the following is executed once
  j         Input string
  9L        Push array [0, 1j]
  Q2/       Add 1, divide by 2: transforms into [1/2, (1+1j)/2]
  )         Use as index. [1/2, (1+1j)/2] is interpreted as 1/2:(end+1)/2, which is
            rounded to 1:(1+end)/2. So this takes elements from first to half,
            including both

Başka bir kukla bölüm:

   %";      Comment (ignored)
            Implicitly display the previously obtained string

4

𝔼𝕊𝕄𝕚𝕟 / Javascript ES6, 55 karakter

this._?Σ(`ï+ï.Ħ⬮.Đ1`):(x=prompt()).slice(0,-x.length/2)

Try it here (ES6 browsers only).

İnd ile palindromize olur, Javascript ES6 ile depalindromize olur.

Bu kolay olacaktı, çünkü ES ES6 için derler ve ES6'nın çoğu 𝔼𝕊𝕄𝕚𝕟 içinde çalıştırılabilir. Görünüşe göre, tamamen yanılıyorum.

açıklama

this._değişkenin _global kapsamda olup olmadığını kontrol eder ; Lo Lodash kullanır ve bu nedenle saklamıştır _, ancak saf ES6 kullanmaz.

𝔼𝕊𝕄𝕚𝕟 segmenti - Σ(`ï+ï.Ħ⬮.Đ1`)- girişi palindromize eden kodu dizeden değerlendirir. Normalde, kod olurdu ï+ïĦ⬮Đ1, ama derleyici mutlu etmek için noktalar koymak .

Javascript segmenti - (x=prompt()).slice(0,-x.length/2)- bir dizeden bilgi istemini kaldırır.


Bir işlev kullanacaktım (bu yüzden uğraşmak zorunda promptkalmadım), ama evaluation değerlendirme fonksiyonu bundan hoşlanmadı, bu yüzden derleyiciyi mutluprompt etmek için hiçbir işlev kullanmadım .


Vay canına, derleyici seçici.
HyperNeutrino

4

JavaScript ES6 / JavaScript ES3, 143 bayt

function(x){'use strict';function a(){return x+x.split('').reverse().slice(1).join('')}{function a(){return x.slice(0,-x.length/2)}}return a()}

JavaScript ES6'da palindromizes, JavaScript ES3'te palindromize olur. Rekabetçi değil , aynı dilin iki sürümü için bir çok dilek oluşturmaya çalışmak.

ES3 işlevlerinde bloklar halinde izin verilir, ancak bloklar kapsam tanımlayamadığından, yeni fonksiyon sadece ilk fonksiyonun yerini alır. ES5 katı modunda, işlevlerin bloklar halinde tanımlanmasına izin vermediğinden başarısız olur. ES6'da izin verilir ve bloklar artık kapsamları tanımladığından, ilk işlev değiştirilmez.

Internet Explorer 5'te (öykünülmüş) ES3 ve Düğüm için test edilmiştir.JS ve Firefox için ES6.


4

Jelly / CJam, 15 14 karakter

q_,2./m]<e#¶ŒB

42545 (ETHproductions) sayesinde -1 karakter

Çevrimiçi deneyin! (Jöle) (Palindromizasyon)

CJam yorumlayıcısı (Depalindromizasyon)

Jöle açıklaması:

Jelly'de, aynıdır \n, bu yüzden Jelly'in gördüğü budur:

q_,2./m]<e#
ṖṚṭ

ṖṚṭ         Main link. Arguments: z
Ṗ           Pop
 Ṛ          Reverse
  ṭ         Append
   ⁸        (implicit) z

CJam açıklaması:

CJam'de, e#bir satırdaki her şey bir yorumdur. CJam böyle görüyor:

q_,2./m]< Code
q         All input
 _        Duplicate
  ,       Length
   2.     2.0
     /    Float division
      m]  Ceil
        < Take

@ETHproductions Hata! Unuttum! Buna "sıçrama" denir, bu yüzden.
Outgolfer Erik

4

Perl / JavaScript, 73 bayt

Perl bir palindrom döndürür ve JavaScript giriş dizesini 'pal-palindromizes'.

s=prompt();console.log(s.slice(0,-s.length/2));eg=1;t=eg;s=$=reverse$_=eg

JavaScript

Dizenin zaten geçerli bir palindrom olduğunu varsayar.

Tüm çalışmalar ilk bölümde gerçekleşir:

s=prompt();console.log(s.slice(0,-s.length/2));

Girdiyi depolar s, ardından dizenin ilk yarısını (yuvarlanmış) döndürür. Komut dosyasının geri kalanı anlamsız değişken atamalarıdır:

eg=1;t=eg;s=$=reverse$_=eg

Burada deneyin:

s=prompt();console.log(s.slice(0,-s.length/2));eg=1;t=eg;s=$=reverse$_=eg

Perl

Şununla çalıştırılmalıdır -pl, örn:

perl -ple 's=prompt();console.log(s.slice(0,-s.length/2));eg=1;t=eg;s=$=reverse$_=eg' <<< 'test'
# returns testtset

Kod temel olarak iki ikamedir ( s///), ancak =bunun yerine ayırıcı olarak kullanılır /:

s/prompt();console.log(s.slice(0,-s.length\/2));eg/1;t/eg;s/$/reverse$_/eg

Birincisi, değiştirilen prompt();console.log(s.slice(0,-s.length\/2));eg(kuşkusuz dizginizi içeriyorsa ... gibi bir şey içeriyorsa "prompt;console.logs.slice0,-s.length/2;eg") ile 1;tdeğiştirilir, evaldöndürülür, tikincisi dizenin ( $) sonunun yerini alır ve reverse$_sonra da evalorijinal kaynağı ekler dize ters çevrildi.

Çevrimiçi deneyin!


3

Python 2 / Nim , 76 74 bayt

#[
s=input();print s+s[-2::-1]#let s=stdin.readLine;echo s[0..s.len div 2]

Python'da palindromize olur, Nim'de depalindromize olur. Yorum sözdizimini kötüye kullanır.

Python ve Nim #yorum yapmak için kullanırlar . Python, blok yorumlarını hiç desteklemez (çok satırlı dizeler hariç """), ancak Nim bunu yapar #[ comment ]#.

Bunu Nim için Python'u (başlangıçta) yorumlamak için kötüye kullanıyoruz, daha sonra ]Python için bir yorum gibi görünen Nim kodunu başlatmak için Python'daki sonunu kullanıyoruz.

Python kodu girişlerinin tırnak işaretleri içine alınmasını gerektirir. Nim kodunda bu kısıtlama yoktur.

Python 2.7.8 ve Nim 0.14.2 üzerinde test edilmiştir.

Boşver! - Python 2, palindromize etme

Boşver! - Nim, depalindromizing Görünüşe göre Nim Ideone'nin kullandığı sürüm (0.11.2) çok satırlı yorumları desteklemiyor. Nim 0.14.2 üzerinde çalışır.




2

Japt / JavaScript, 63 karakter

Günün dersi: Japt / JavaScript poliglotları her zaman kötü bir fikirdir ...

$Oq=1;$Oq &&0
alert(($U=prompt()).slice(0*$U,-$U.length/2));$Uê

JavaScript

İlk satır, değişkeni $Oq1 olarak ayarlar , ardından ile no-op gerçekleştirir $Oq &&0.

İkinci satır kullanıcıdan değişkene atayarak bir girdi dizesi ister $U, ardından dizinden 0*$U(her zaman 0) dizine böler -$U.length/2. Bu gerekli depalindromizasyonu gerçekleştirir; sonuç daha sonra alertdüzenlenir. Değişken $Uêtanımlanmadığı için program ReferenceError ile bitiyor .

Japt

Japt'te dolar işaretleri arasındaki herhangi bir şey doğrudan aktarılan kaynak koduna eklenir. Bunun dışında, her bir küçük harf örneğin .q(önceki karakter başka bir küçük harf olmadıkça aktarılır , bu durumda olur "q". Bir alan aktarılır )ve eksik olan tüm ebeveynler otomatik olarak eklenir. Yukarıdaki program kabaca aşağıdakilere aktarılır:

Oq=1;O.q()&&0
.a("l".e("r".t((U=prompt()).slice(0*U,-U.length/2))));U.ê()

Bu daha sonra JavaScript olarak yürütülür. Oq=1;değişkeni Oq1 olarak ayarlar . Bu bir daha asla kullanılmaz, bu nedenle işlem yapılmaz. O.q()STDOUT'u temizleyip geri dönen bir işlevdir undefined; bu sahteler, bu yüzden tüm &&0 .a("l".e(...parça yürütülmez.

Gerçekten önemli olan tek kısım U.ê(). Örtülü giriş girilen dizinin koyar U, .ê()bir palindrom haline döner ve örtük çıktı STDOUT sonucu gönderir.


İşlev girişlerine izin verilirse, 34 karakter için aşağıdakiler çalışır:

X=>($X=X).slice(0,-X.length/2);$Uê

İlk bölüm bir ES6 işlevini tanımlar, ancak hala Japt'ta tam bir programdır. Çevrimiçi test edin!


2

Java / Brainfuck, 71 bayt

/*+[,>]<[<]>[.>]<<[.<][*/a->a.substring(0,Math.ceil(a.length()/2d));//]

BF'de palindromize olur, Java'da depalindromize olur.

Anlaşılır olması için, BF tercümanı için önemli olan budur:

+[,>]<[<]>[.>]<<[.<][->,..]

burada işaretçi o noktada boş bir karakteri gösterdiğinden Java lambda'dan karakterler içeren son döngü atlanır.


0

05AB1E / Java 8, 102 karakter

//¹ûq
interface M{static void main(String[]a){System.out.print(a[0].substring(0,a[0].length()/2+1));}}

05AB1E'de palindromize edin.
Java 8'de depalromize edin.

Açıklama 05AB1E:

//     # No-ops
¹      # First input
 û     # Palindromize it
  q    # Terminate the program
interface M{static void main(String[]a){System.out.print(a[0].substring(0,a[0].length()/2+1));}}
       # No-ops

Açıklama Java 8:

//¹ûq                           // No-ops
interface M{                    // Class
  static void main(String[]a){  //  Mandatory main-method
    System.out.print(           //   Print to STDOUT:
      a[0].substring(0,         //    The substring of the input-argument from index 0 to
        a[0].length()/2+1));}}  //    the length of the input integer-divided by 2 plus 1
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.