Introdução
Neste desafio, sua tarefa é listar corretamente os casos de dois substantivos finlandeses. O segredo é que você pode usar uma das listas como guia para produzir a outra.
Os Substantivos
Usamos as duas tabelas de declinação a seguir como dados. Eles listam os casos de dois substantivos, um caso por linha, na mesma ordem que no artigo da Wikipedia vinculado acima, na forma singular: plural, quando aplicável.
Tabela 1: Casos de óvulos ("porta")
ovi : ovet
oven : ovien
oven : ovet
ovea : ovia
ovessa : ovissa
ovesta : ovista
oveen : oviin
ovella : ovilla
ovelta : ovilta
ovelle : oville
ovena : ovina
oveksi : oviksi
ovin
ovetta : ovitta
ovine
Tabela 2: Casos de jalka ("pé")
jalka : jalat
jalan : jalkojen
jalan : jalat
jalkaa : jalkoja
jalassa : jaloissa
jalasta : jaloista
jalkaan : jalkoihin
jalalla : jaloilla
jalalta : jaloilta
jalalle : jaloille
jalkana : jalkoina
jalaksi : jaloiksi
jaloin
jalatta : jaloitta
jalkoine
A tarefa
Sua tarefa é escrever dois programas f
e g
(possivelmente com nomes diferentes) que recebem uma string como entrada, fornecem uma string como saída e têm a seguinte propriedade. Se a Tabela 1 é fornecida f
como entrada, ela gera a Tabela 2, e se a Tabela 2 é fornecida g
, ela gera a Tabela 1. Todas as outras entradas resultam em comportamento indefinido. As tabelas devem aparecer exatamente como acima, tanto na entrada quanto na saída. Opcionalmente, você pode assumir que há uma nova linha à direita, mas ela deve ser usada nas duas tabelas e nas entradas e saídas. Não há nova linha anterior.
Regras e Bônus
Você pode escrever f
e g
como funções ou programas completos, mas eles devem ser do mesmo tipo e devem ser completamente separados (se você escrever uma função auxiliar f
, deverá reescrevê-la g
se quiser usá-la) . A menor contagem total de bytes vence e as brechas padrão não são permitidas.
Há um bônus de -25% por não usar expressões regulares.
Alguns esclarecimentos
É perfeitamente correto escrever uma função / programa f
que ignore sua entrada e sempre retorne a Tabela 2, e uma função / programa g
que sempre retorne a Tabela 1. É necessário apenas que e ; o comportamento de e em todas as outras entradas é irrelevante.f(Table 1) == Table 2
g(Table 2) == Table 1
f
g
A parte "completamente separada" significa o seguinte. Sua resposta fornece dois pedaços de código, um para f
e outro para g
, de preferência em caixas de código diferentes. Se eu colocar o código f
em um arquivo e executá-lo, ele funcionará e o mesmo para g
. Sua pontuação é a soma das contagens de bytes dos dois pedaços de código. Qualquer código duplicado é contado duas vezes.
if Table 1 is given `f` as input
Como alguém insere uma função em uma tabela? Eu não entendo esta parte #f
como entrada"Respostas:
Perl, 105 + 54 = 159
Programa
f
(tente me ):Programa
g
(tente me ):Uma versão alternativa de
f
, apenas 2 bytes a mais (esse método também pode ser aplicado,g
mas seria muito longo):Tecnicamente, isso ainda usa um regexp (para decodificar a sequência de substituição e depois aplicá-la), portanto não posso reivindicar o bônus aqui.
fonte
s/jalk?o?/ov/g
! Essa é poderosa.Perl, 131 + 74 = 205
Tabela 1 a Tabela 2
Expandido:
Tabela 2 a Tabela 1
Expandido:
(Obrigado a @nutki por algumas dicas de Perl)
Apesar da penalidade nas regexes, decidi enfrentá-lo de qualquer maneira e aprender Perl enquanto estava nele. Estou assumindo que existem alguns truques do Perl que podem me permitir substituir trocas, mas não encontrei nenhum na minha pesquisa rápida online.
É muito mais difícil ir da tabela ovi para a tabela jalka , o que eu acho que é porque a tabela jalka tem nuances adicionais para facilitar a pronúncia das palavras.
Aqui está a tabela de substituição em que eu estava trabalhando:
fonte
Python 2, 371 - 25% = 278
Quando a tabela 1 é a entrada para a função f, ela retorna a tabela 2. Se a entrada não for a tabela 1, sua saída será indefinida (por mais provável que seja, mas não garantido, retornar a tabela 2). Por exemplo, a chamada
f(9**9**9**9)
provavelmente não retornará a tabela 2.A mesma lógica é usada com a função g:
As funções são independentes.
fonte
Python - 462 - 25% = 346,5
Este programa faz a abordagem direta e óbvia, exceto por alguns truques de golfe de dados. Para o comportamento indefinido, imprime a tabela exatamente como o comportamento definido. Que incrível "coincidência"! :)
Agora, se alguém considerar essa trapaça (sim, certo), posso seguir o espírito das regras para mais 20 caracteres = 482 - 25% = 361,5 . Apenas substitua as duas últimas linhas por:
Isso faria o comportamento indefinido retornar não a tabela correta, mas a tabela de entrada.
fonte
x
ey
em uma expressão, e usar um emf
e outro emy
.y
" -> "ing
"VBA
1204 (1605 - 25%)1191 (1587 - 25%)A abordagem direta.
Edit: Bug corrigido e usado substituir truque de @ Maltysen
Execute a partir da janela Imediata:
fonte
JavaScript (ES6) 271 (165 + 196 -25%)
Começando simples. As funções ignoram o parâmetro de entrada.
Usar divisão / junção em vez de substituição para evitar expressões regulares.
Teste no console Firefox / FireBug
fonte