Emita os nomes falados dos números usados ​​no planeta Flapus
Os moradores de Flapus usam um sistema numérico de base 8. Os números são:
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)
À 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)
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.
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.
10 -> Kupo
56 - > Stikty'fo
Agora que penso nisso, os números todo o som muito bonito
Pitão, 117 bytes (Kricola'popo)
Transpilados manualmente para pseudocódigo pitônico:
Bom trabalho! Você pode salvar alguns bytes, alterando seu if ... elsepara um ternário, alterando seu forloop para uma mapoperaçã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.
@FryAmTheEggman eu estava ciente ", mas eu totalmente não esperava que poderia comprimir a primeira corda.!
Retina , Colópico, 165 157 143 127 123 bytes
O avanço de linha à direita é significativo.
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 iouaparecem 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úsculas l, 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çar Ku. Então, simplesmente removemos todas as ocorrências de zla'.
Refatorei e usei sua abordagem regex - economiza 10 bytes! Acho que não consigo extrair muito mais da minha solução Java. Ainda a milhas de distância da sua!
Java (1.8) - Vruenat'fobo ( 486 340 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.
Você pode usar interface Fe remover a declaração pública no método principal. Você também pode remover o espaço dentro String[] xe dentro .substring(0, v+1).
Você pode economizar mais alguns bytes gerando a matriz a partir de uma cadeia de caracteres dividida: "Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")é de 70 bytes, enquanto a matriz em linha é de 74.
Por mais que eu tente, não consigo jogar golfe com mais força. Alguém aí com mais dicas?
Uma solução funcional com compreensão de lista em python
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
2345 retorna Foham'bocovr. Deve retornar Foham'bocovru. Isso ocorre porque você está lendo apenas 2 caracteres, em vez de incluir a primeira vogal e inclusive. Pesky Vruenat
Mesmo problema para 'Stikty' e 'Kricola'
@ Denham Coote oops Eu esqueci de responder seus comentários. obrigado por suas observações, eu corrigi os problemas
Economizou um monte de bytes graças a Neil.
Dicas gerais de golfe: em [...s]vez de s.split``; b=b==c[0]?"Ku":b+"'"em vez de if(b==c[0]){b="Ku"}else b+="'"; da mesma forma para o if(a.length)(apenas use 0para a elsepeça); a.map(d=>b+=c[d].match...)em vez de brincar com fore shift. Eu acho que já são 29 bytes salvos.
Examinar a resposta de outra pessoa sugere que você pode salvar outros 2 bytes porque você só precisa usar [iou]como sua classe "vogal".
@ Neil Obrigado. Eu farei isso.
F #, 364 288 250 bytes (Kubofo)
Retorna uma função que recebe um número inteiro e retorna seu equivalente Flapus. = D
Cuidado com o uso mais incrível que powvocê já viu em toda a sua vida. u**vé equivalente no contexto booleano, como u|(not v)anteriormente foi jogado com a bela ~v+2|uexpressão!