Afunde esse Bismark! (Errr, porco)

8

Pig-latin é um idioma inventado que é traduzido movendo a primeira letra de uma palavra para o final e adicionando ay-o ao final. Por exemplo: hellotraduz para porco-latino como ellohay. Portanto, traduzindo volta porco-latino para o Inglês é deixar cair o ayno final e movendo-se a última letra do início (como oodbyegaya goodbye). Ao escrevê-lo, algumas pessoas colocam um -no final antes de mover a primeira letra para maior clareza, então lê-se (por exemplo) em ello-hayvez de ellohaypara hello. Usaremos esta versão hifenizada para esse desafio.

Objetivo

Desfazer uma sequência de caracteres latinos de porco.

Instruções

Escreva um programa / função que aceite um argumento, uma única palavra na forma de uma string. Se essa palavra estiver em latim porco, o programa / função deve exibir ( returnou imprimi-lo) a palavra não latina. Se não for latim-porco, use a palavra como está.

O porco latino para este desafio estará no seguinte formato:

ello-hay

Se a palavra terminar -*ay, será em latim porco, onde *é um caractere curinga único.

Caracteres que não sejam letras devem ser tratados como uma letra normal. Para vários traços, ignore todos, exceto o último.

Exemplos

Usando a unpig()função Python fictícia para demonstração.

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

Regras

  1. Aplicam-se brechas padrão
  2. Isso é , então o código mais curto vence.
  3. Funções internas (especificamente para essa finalidade) não são permitidas.
  4. Usar cabeçalho # Language, XX bytes

Entre os melhores

juniorRubyist
fonte

Respostas:

5

JavaScript (ES6), 34 bytes

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

Casos de teste

Arnauld
fonte
Isso é uma função? Eu não faço JS (ES6).
juniorRubyist
Eu literalmente tinha a mesma solução exata, excepto o uso de aspas duplas em vez de aspas simples
ETHproductions
Nvm. Ótimo começo!
juniorRubyist
@juniorRubyist É uma função anônima que pode ser atribuída a qualquer variável (neste caso 'unpig').
officialaimm
Parece imbatível.
9788 Steve Jobs,
3

PHP , 61 bytes

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

Experimente online!

PHP , 46 bytes

sem função

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

Experimente online!

Jörg Hülsermann
fonte
Deve ser uma função. Inválido.
CalculatorFeline
@CalculatorFeline Fixed
Jörg Hülsermann 23/06
Na verdade, 22 minutos atrás, sua solução de 46 bytes se tornou válida.
CalculatorFeline
3

Python 2 , 48 46 bytes

-2 bytes graças ao xnor.

Essas são funções lambda anônimas às quais podem ser atribuídas, digamos unpig.

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

Experimente online!

Solução Regex, 49 bytes

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

Experimente online!

totalmente humano
fonte
1
Você não precisa usar and/orquando o curto-circuito não é necessário. A seleção de uma lista funciona e é mais curta.
xnor
2

Python 2.7, 68 55 52 bytes

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

Usa um operador do tipo ternário.

-13 bytes graças a officialaimm e uma atualização nas regras.

-3 Operador ternário alterado. Consulte https://stackoverflow.com/a/470376/3210045 .

juniorRubyist
fonte
1
s[0:len(s)-4]pode ser substituído por apenas s[:-4]. E alguns espaços pode ser evitado apertando ]ife"else
officialaimm
1

05AB1E , 15 bytes

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

Experimente online!

θé substituído por ®èno TIO, pois ainda não foi puxado para lá.

Erik, o Outgolfer
fonte
Melhor golfe! Você ganha.
juniorRubyist
0

Japonês , 18 bytes

A mesma substituição de RegEx que todos os outros, publicada pela primeira vez por Arnauld

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

Teste-o

Shaggy
fonte
Eu tinha q$/-(.)ay/$ w qpor 15, mas infelizmente isso falha em entradas que contêm várias cópias de -<char>ay(corrige todas elas, e não apenas a última). Ah, bem ...
ETHproductions
0

Perl 6 , 22 bytes

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

Solução básica de expressão regular.

Sean
fonte
0

Python 3 , 59 60 bytes

  • 1 byte adicionado graças a @Erik the Outgolfer: $ para garantir as ig-payyaysaídas iguais e nãoyig-pa
lambda a:a[-3]+a[:-4]if re.search("-.ay$",a)else a
import re

Experimente online!

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

Experimente online!

marcelovca90
fonte