Hundir ese Bismark! (Errr, cerdo)

8

Pig-latin es un lenguaje inventado que se traduce al mover la primera letra de una palabra al final y agregarla ayal final. Por ejemplo: se hellotraduce en latín porcino como ellohay. Por lo tanto, traducir pig-latin nuevamente al inglés es soltar el ayfinal y mover la última letra al inicio (like oodbyegayto goodbye). Al escribirlo, algunas personas pondrán un -al final antes de mover la primera letra para mayor claridad, por lo que se lee (por ejemplo) en ello-haylugar de ellohaypara hello. Utilizaremos esta versión con guiones para este desafío.

Objetivo

Deshacer una cuerda de cerdo latino.

Instrucciones

Escriba un programa / función que tome un argumento, una sola palabra en forma de cadena. Si esa palabra está en latín, el programa / función debe generar (es decir, returno imprimirla) la palabra no latina. Si no es pig-latin, escriba la palabra como está.

Pig-latin para este desafío tendrá el siguiente formato:

ello-hay

Si la palabra termina en -*ay, es pig-latin, donde *es un carácter comodín único.

Los caracteres que no son letras deben tratarse como una letra normal. Para guiones múltiples, ignore todos excepto el último.

Ejemplos

Uso de la unpig()función ficticia de Python para la demostración.

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

Reglas

  1. Se aplican lagunas estándar
  2. Este es el , por lo que gana el código más corto.
  3. Las funciones integradas (específicamente para este propósito) no están permitidas.
  4. Usar encabezado # Language, XX bytes

Tabla de clasificación

juniorrubista
fuente

Respuestas:

5

JavaScript (ES6), 34 bytes

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

Casos de prueba

Arnauld
fuente
¿Es esta una función? No hago JS (ES6).
juniorRubyist
Literalmente tuve exactamente la misma solución, excepto el uso de comillas dobles en lugar de comillas simples
ETHproductions
Nvm. ¡Gran comienzo!
juniorRubyist
@juniorRubyist Es una función anónima que se puede asignar a cualquier variable (en este caso, 'unpig').
officialaimm
Parece bastante inmejorable.
Steve Bennett
3

PHP , 61 bytes

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

Pruébalo en línea!

PHP , 46 bytes

sin una función

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

Pruébalo en línea!

Jörg Hülsermann
fuente
Debe ser una función. Inválido.
CalculatorFeline
@CalculatorFeline fijo
Jörg Hülsermann
En realidad, hace 22 minutos, su solución de 46 bytes se hizo válida.
CalculatorFeline
3

Python 2 , 48 46 bytes

-2 bytes gracias a xnor.

Estas son funciones lambda anónimas que se pueden asignar a, digamos unpig .

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

Pruébalo en línea!

Solución de expresiones regulares, 49 bytes

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

Pruébalo en línea!

totalmente humano
fuente
1
No necesita usarlo and/orcuando no se requiere un cortocircuito. Seleccionar de una lista funciona y es más corto.
xnor
2

Python 2.7, 68 55 52 bytes

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

Utiliza un operador tipo ternario.

-13 bytes gracias a officialaimm y una actualización en las reglas.

-3 Operador ternario modificado. Ver https://stackoverflow.com/a/470376/3210045 .

juniorrubista
fuente
1
s[0:len(s)-4]puede ser sustituido por solo s[:-4]. Y pocos espacios se pueden evitar apretando ]ify"else
officialaimm
1

05AB1E , 15 bytes

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

Pruébalo en línea!

θes reemplazado por ®èen TIO ya que aún no se ha extraído allí.

Erik el Outgolfer
fuente
El mejor golf! Tú ganas.
juniorRubyist
0

Japt , 18 bytes

El mismo reemplazo de RegEx que todos los demás, publicado por primera vez por Arnauld

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

Pruébalo

Lanudo
fuente
Tenía q$/-(.)ay/$ w q15 pero desafortunadamente eso falla en las entradas que contienen múltiples copias de -<char>ay(las corrige a todas en lugar de solo la última). Oh, bueno ...
ETHproductions
0

Perl 6 , 22 bytes

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

Solución básica de expresión regular.

Sean
fuente
0

Python 3 , 59 60 bytes

  • 1 byte agregado gracias a @Erik the Outgolfer: $ para garantizar que las ig-payyaysalidas sean las mismas y noyig-pa
lambda a:a[-3]+a[:-4]if re.search("-.ay$",a)else a
import re

Pruébalo en línea!

officialaimm
fuente
0

Java (OpenJDK 8) , 146 bytes

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);}

Pruébalo en línea!

marcelovca90
fuente