Tenggelamkan Bismark itu! (Errr, babi)

8

Babi-latin adalah bahasa yang dibuat-buat yang diterjemahkan ke dalam dengan memindahkan huruf pertama kata ke akhir dan menambahkan ayke akhir. Sebagai contoh: helloditerjemahkan ke dalam babi-latin sebagai ellohay. Oleh karena itu, menerjemahkan pig-latin kembali ke dalam bahasa Inggris berarti aymenghilangkan huruf di bagian akhir dan memindahkan huruf terakhir ke awal (seperti oodbyegayke goodbye). Saat menuliskannya, beberapa orang akan meletakkan -di bagian akhir sebelum memindahkan huruf pertama untuk kejelasan, jadi bunyinya (misalnya) ello-haybukan ellohayuntuk hello. Kami akan menggunakan versi ditulis dgn tanda penghubung untuk tantangan ini.

Objektif

Membatalkan string babi-latin.

Instruksi

Tulis program / fungsi yang mengambil satu argumen, satu kata dalam bentuk string. Jika kata itu dalam pig-latin, program / fungsi harus menampilkan (yaitu returnatau mencetaknya) kata non-babi-latin. Jika bukan babi-latin, tampilkan kata apa adanya.

Babi-latin untuk tantangan ini akan dalam format berikut:

ello-hay

Jika kata berakhir -*ay, itu adalah babi-latin, di mana itu *adalah karakter wildcard tunggal.

Karakter non-huruf harus diperlakukan sebagai huruf normal. Untuk beberapa tanda hubung, abaikan semua kecuali yang terakhir.

Contohnya

Menggunakan unpig()fungsi Python fiktif untuk demo.

unpig("ello-hay")    #=> hello
unpig("hello-world") #=> hello-world
unpig("hello")       #=> hello
unpig("pple-aay")    #=> apple
unpig("apple")       #=> apple
unpig("ig-Stay")     #=> ig-Stay (+1 to ETHproductions for noticing.)
unpig("ello----hay") #=> hello---
unpig("la$s-gay")    #=> gla$s
unpig("ig-pay-yay")  #=> yig-pay

Aturan

  1. Celah standar berlaku
  2. Ini , jadi kode terpendek menang.
  3. Fungsi bawaan (khusus untuk tujuan ini) tidak diizinkan.
  4. Gunakan tajuk # Language, XX bytes

Papan peringkat

juniorRubyist
sumber

Jawaban:

5

JavaScript (ES6), 34 byte

s=>s.replace(/(.*)-(.)ay$/,'$2$1')

Uji kasus

Arnauld
sumber
Apakah ini suatu fungsi? Saya tidak melakukan JS (ES6).
juniorRubyist
Saya benar-benar memiliki solusi yang sama persis, kecuali menggunakan tanda kutip ganda dan bukan tanda kutip tunggal
ETHproduk
Nvm. Awal yang bagus!
juniorRubyist
@juniorRubyist Ini adalah fungsi anonim yang dapat ditugaskan ke variabel apa pun (dalam hal ini 'unpig').
officialaimm
Tampaknya cukup tak terkalahkan.
Steve Bennett
3

PHP , 61 byte

function f($v){echo preg_replace("#(.*)-(.)ay$#","$2$1",$v);}

Cobalah online!

PHP , 46 byte

tanpa fungsi

<?=preg_replace("#(.*)-(.)ay$#","$2$1",$argn);

Cobalah online!

Jörg Hülsermann
sumber
Harus berupa fungsi. Tidak valid
CalculatorFeline
@CalculatorFeline diperbaiki
Jörg Hülsermann
Sebenarnya, 22 menit yang lalu, solusi 46 byte Anda menjadi valid.
CalculatorFeline
3

Python 2 , 48 46 byte

-2 byte terima kasih kepada xnor.

Ini adalah fungsi lambda anonim yang dapat ditugaskan, katakanlah unpig.

lambda s:[s,s[-3]+s[:-4]][s[-4]+s[-2:]=="-ay"]

Cobalah online!

Solusi Regex, 49 byte

lambda s:re.sub('(.*)-(.)ay',r'\2\1',s)
import re

Cobalah online!

benar-benar manusiawi
sumber
1
Anda tidak perlu menggunakan and/orsaat hubungan arus pendek tidak diperlukan. Memilih dari daftar berfungsi dan lebih pendek.
xnor
2

Python 2.7, 68 55 52 byte

def up(s):print(s,s[-3]+s[:-4])[s[-4]+s[-2:]=="-ay"]

Menggunakan operator seperti terner.

-13 bytes berkat officialaimm dan pembaruan dalam aturan.

-3 Operator ternary yang diubah. Lihat https://stackoverflow.com/a/470376/3210045 .

juniorRubyist
sumber
1
s[0:len(s)-4]bisa diganti dengan adil s[:-4]. Dan beberapa ruang dapat dihindari dengan memeras ]ifdan"else
officialaimm
1

05AB1E , 15 byte

D'-¡θ¦„ayQi¨¨Á¨

Cobalah online!

θdiganti oleh ®èpada TIO karena belum ditarik ke sana.

Erik the Outgolfer
sumber
Golf terbaik! Kamu menang.
juniorRubyist
0

Japt , 18 byte

Hanya penggantian RegEx yang sama seperti orang lain, pertama kali diposting oleh Arnauld

r"(.*)-(.)ay""$2$1

Menguji

Shaggy
sumber
Saya punya q$/-(.)ay/$ w qselama 15 tetapi sayangnya itu gagal pada input yang berisi banyak salinan -<char>ay(itu mengoreksi mereka semua, bukan hanya yang terakhir). Oh well ...
ETHproduksi
0

Perl 6 , 22 byte

{S/(.+)\-(.)ay$/$1$0/}

Solusi ekspresi reguler dasar.

Sean
sumber
0

Python 3 , 59 60 byte

  • 1 byte ditambahkan berkat @Erik the Outgolfer: $ untuk memastikan ig-payyayoutput yang sama dan tidakyig-pa
lambda a:a[-3]+a[:-4]if re.search("-.ay$",a)else a
import re

Cobalah online!

officialaimm
sumber
0

Java (OpenJDK 8) , 146 byte

s->{Matcher m=Pattern.compile("(.*)-(.)ay").matcher(s);String g="";while(m.find())g=m.group(1);return (g!=""?s.charAt(s.lastIndexOf('-')+1)+g:s);}

Cobalah online!

marcelovca90
sumber