Os moradores de Flapus usam um sistema numérico de base 8. Os números são:
0 - Kuzla
1 - Ponara
2 - Boqkel
3 - Colopee
4 - Vruenat
5 - Foham
6 - Stikty
7 - Kricola
Para números acima de 7, o nome completo do último dígito é o primeiro, seguido pelo apóstrofo e os primeiros caracteres do (s) outro (s) dígito (s), até e incluindo a primeira vogal:
11 - Ponara (1) 'po (1)
13 - Colopéia (3)' po (1)
64 - Vruenat'sti
55 - Foham'fo
47 - Kricola'vru
À medida que os números aumentam, a fórmula permanece a mesma - o nome completo, último dígito, é o primeiro, seguido de um apóstrofo e os primeiros caracteres dos outros dígitos, incluindo a primeira vogal. Observe que, além do dígito final (primeira palavra), a ordem permanece a mesma.
123 - Colopee (3) 'po (1) bo (2)
205 - Foham (5)' bo (2) ku (0)
1123 - Colopee'popobo
7654 - Vruenat'kristifo
A exceção à regra é para números que terminam em 0. Aqui a palavra começa com Ku e é completada com as primeiras letras dos outros dígitos, até e incluindo a primeira vogal. Nenhum apóstrofo é usado.
10 - Kupo
70 - Kukri
350 - Kucofo
630 - Kustico
1000 - Kupokuku
Desafio
Escreva um programa ou função que aceite um número base-8 válido e produz o equivalente falado. Você pode assumir que sempre receberá um número válido. Espaço em branco à direita / nova linha após sua resposta estar correta. O primeiro caractere precisa estar em maiúsculas, conforme exemplos.
Isso é código-golfe . O menor código em bytes vence. Aplicam-se brechas padrão. As respostas cujos comprimentos são convertidos e enviados adicionalmente em flapussiano recebem cookies extras.
Casos de teste
0 -> Kuzla
1 -> Ponara
2 -> Boqkel
3 -> Colopee
4 -> Vruenat
5 -> Foham
6 -> Stikty
7 -> Kricola
10 -> Kupo
11 -> Ponara'po
23 -> Colopee'bo
56 - > Stikty'fo
70 -> Kukri
100 -> Kupoku
222 -> Boqkel'bobo
2345 -> Foham'bocovru
Respostas:
Pitão, 117 bytes (Kricola'popo)
Transpilados manualmente para pseudocódigo pitônico:
fonte
if ... else
para um ternário, alterando seufor
loop para umamap
operação e fazendo algumas pequenas alterações. Aqui está o que eu tenho. Também chamaria sua atenção para o."
que pode ser usado em seqüências de caracteres compactadas.Retina , Colópico,
165157143127123 bytesO avanço de linha à direita é significativo.
Experimente online!
Explicação
Começamos trazendo o dígito final para a frente e inserindo um apóstrofo depois dele. Observe que isso mantém os números de um dígito inalterados, pois a regex não corresponde - portanto, esses nunca recebem um apóstrofo em primeiro lugar.
Isso substitui cada dígito pelo seu nome completo, independentemente de onde ele aparece.
Isso reduz todos os nomes de dígitos que aparecem após um apóstrofo. Observe que apenas as vogais
iou
aparecem primeiro no nome de um dígito; portanto, verificamos uma posição logo após uma delas e depois de um apóstrofo e, em seguida, combinamos (e removemos) todas as letras minúsculas que seguem essa posição. Como inserimos os nomes dos dígitos na caixa do título, isso será interrompido antes do próximo dígito.Isso usa a transliteração para transformar todos os caracteres maiúsculos
L
, em letras minúsculasl
, desde que sejam encontrados em uma correspondência que começa com'
(para deixar o capital principal intocado).A única coisa que resta é lidar corretamente com múltiplos de (octal) 10. Nesse caso, teremos um resultado começando com o
Kuzla'
qual queremos começarKu
. Então, simplesmente removemos todas as ocorrências dezla'
.fonte
JavaScript (ES6), 171
Teste
fonte
Java (1.8) - Vruenat'fobo (
486340 bytes)Quando pensei que não poderia mais jogar golfe, encontrei outros 33 bytes! Muito satisfeito! As maiores economias foram de mudar para matrizes de caracteres (mais curtas para maiúsculas / minúsculas) e reutilizar a matriz de strings de entrada para as palavras.
Descobrindo um monte de truques de golfe, abaixo de 400! Em teoria, eu ainda poderia reduzir mais isso, pois eu disse que uma função estaria bem nas regras, enquanto este é um programa completo.
Atualizado Usando a abordagem de Martin Büttner, refatorei o uso de regex. Conseguiu salvar outros 10 bytes! Obrigado Martin.
Ungolfed
fonte
interface F
e remover a declaração pública no método principal. Você também pode remover o espaço dentroString[] x
e dentro.substring(0, v+1)
."Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")
é de 70 bytes, enquanto a matriz em linha é de 74.Python (3.5)
225222217202 bytesUma solução funcional com compreensão de lista em python
Explicação
Ganhe 3 bytes com a versão dividida (versão anterior:
d="Kuzla","Ponara",...
)Inicialização do resultado em função do último dígito
Altere a lista d para manter os 2 ou 3 primeiros caracteres e coloque em minúsculas
Cat the string
fonte
Javascript ES6,
231228225222204 bytesEconomizou um monte de bytes graças a Neil.
fonte
[...s]
vez des.split``
;b=b==c[0]?"Ku":b+"'"
em vez deif(b==c[0]){b="Ku"}else b+="'"
; da mesma forma para oif(a.length)
(apenas use0
para aelse
peça);a.map(d=>b+=c[d].match...)
em vez de brincar comfor
eshift
. Eu acho que já são 29 bytes salvos.[iou]
como sua classe "vogal".F #,
364288250 bytes (Kubofo)Retorna uma função que recebe um número inteiro e retorna seu equivalente Flapus. = D
fonte
Python 3 -
181177 bytes (Ponara'bosti)Cuidado com o uso mais incrível que
pow
você já viu em toda a sua vida.u**v
é equivalente no contexto booleano, comou|(not v)
anteriormente foi jogado com a bela~v+2|u
expressão!fonte