Introducción
En este desafío, su tarea es enumerar correctamente los casos de dos sustantivos finlandeses. El giro es que puede usar uno de los listados como guía para producir el otro.
Los sustantivos
Utilizamos las siguientes dos tablas de declinación como nuestros datos. Enumeran los casos de dos sustantivos, un caso por línea en el mismo orden que en el artículo de Wikipedia vinculado anteriormente, en la forma singular: plural cuando corresponda.
Tabla 1: Casos de ovi ("puerta")
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
Tabla 2: Casos de jalka ("pie")
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
La tarea
Su tarea es escribir dos programas f
y g
(posiblemente con diferentes nombres) que toman una cadena como entrada, dan una cadena como salida y tienen la siguiente propiedad. Si la Tabla 1 se proporciona f
como entrada, genera la Tabla 2, y si se proporciona la Tabla 2 g
, genera la Tabla 1. Todas las demás entradas dan como resultado un comportamiento indefinido. Las tablas deben aparecer exactamente como se indica arriba tanto en la entrada como en la salida. Opcionalmente, puede suponer que hay una nueva línea final, pero luego debe usarse en ambas tablas, y tanto en la entrada como en la salida. No hay una nueva línea precedente.
Reglas y bonos
Puede escribir f
y g
como funciones o programas completos, pero deben ser del mismo tipo y deben estar completamente separados (si escribe una función auxiliar f
, debe volver a escribirla g
si desea usarla allí) . El conteo total de bytes más bajo gana, y las lagunas estándar no se permiten.
Hay una bonificación de -25% por no usar expresiones regulares.
Algunas aclaraciones
Está perfectamente bien escribir una función / programa f
que ignore su entrada y siempre devuelva la Tabla 2, y una función / programa g
que siempre devuelva la Tabla 1. Solo se requiere eso y ; el comportamiento de y en todas las demás entradas es irrelevante.f(Table 1) == Table 2
g(Table 2) == Table 1
f
g
La parte "completamente separada" significa lo siguiente. Su respuesta proporciona dos piezas de código, una para f
y otra para g
, preferiblemente en diferentes cuadros de código. Si pongo el código f
en un archivo y lo ejecuto, funciona, y lo mismo para g
. Su puntaje es la suma de los recuentos de bytes de las dos piezas de código. Cualquier código duplicado se cuenta dos veces.
if Table 1 is given `f` as input
¿Cómo se ingresa una función en una tabla? No entiendo esta partef
como entrada"Respuestas:
Perl, 105 + 54 = 159
Programa
f
(trate de mí ):Programa
g
(trate de mí ):Una versión alternativa de
f
, solo 2 bytes más (este método también se puede aplicarg
pero sería demasiado largo):Técnicamente, esto todavía usa una expresión regular (para decodificar la cadena de sustitución y luego aplicarla), por lo que no puedo reclamar el bono aquí.
fuente
s/jalk?o?/ov/g
! Ese es poderoso.Perl, 131 + 74 = 205
Tabla 1 a la Tabla 2
Expandido:
Tabla 2 a la Tabla 1
Expandido:
(Gracias a @nutki por algunos consejos de Perl)
A pesar de la penalización en expresiones regulares, decidí abordarlo de todos modos y aprender Perl mientras estaba en eso. Supongo que hay algunos trucos de Perl que podrían permitirme reemplazar las cadenas, pero no pude encontrar ninguno en mi búsqueda rápida en línea.
Es mucho más difícil pasar de la tabla ovi a la tabla jalka , lo que supongo es que la tabla jalka tiene matices adicionales para que las palabras sean más fáciles de pronunciar.
Aquí está la tabla de reemplazo con la que estaba trabajando:
fuente
Pitón 2, 371 - 25% = 278
Cuando la tabla 1 es la entrada para la función f, devuelve la tabla 2. Si la entrada no es la tabla 1, su salida no está definida (aunque es probable pero no está garantizado que devuelva la tabla 2). Por ejemplo, llamar
f(9**9**9**9)
probablemente no devolverá la tabla 2.La misma lógica se usa con la función g:
Las funciones son independientes.
fuente
Python - 462 - 25% = 346.5
Este programa realiza el enfoque obvio y directo, excepto por algunos trucos de golf de datos. Para el comportamiento indefinido, imprime la tabla al igual que el comportamiento definido. ¡Qué sorprendente "coincidencia"! :)
Ahora, si uno considerara esta trampa (sí, claro), puedo seguir el espíritu de las reglas para 20 personajes más = 482 - 25% = 361.5 . Simplemente reemplace las dos últimas líneas con:
Esto haría que el comportamiento indefinido no devuelva la tabla correcta sino la tabla de entrada.
fuente
x
yy
en una expresión, y usar una enf
y la otra eny
.y
" -> "eng
"VBA
1204 (1605 - 25%)1191 (1587 - 25%)El enfoque directo.
Editar: error corregido y truco de reemplazo utilizado de @Maltysen
Ejecutar desde la ventana Inmediato:
fuente
JavaScript (ES6) 271 (165 + 196-25%)
Comenzando simple. Las funciones ignoran el parámetro de entrada en absoluto.
Usar dividir / unir en lugar de reemplazar para evitar expresiones regulares.
Prueba en la consola Firefox / FireBug
fuente