Sua tarefa é converter um número suave de 103 em uma palavra em inglês, usando o método descrito abaixo.
Quão?
- Gere a lista de fatores primos (com repetição) do número de entrada.
- Classifique a lista:
- Se 2 não for um dos fatores principais, classifique a lista em ordem crescente.
- Se 2 for um dos fatores primos, remova-o da lista e classifique os demais fatores em ordem decrescente.
Traduza cada fator em uma letra, usando a seguinte tabela:
3 = S 13 = L 29 = X 43 = O 61 = Z 79 = H 101 = K 5 = P 17 = Q 31 = N 47 = R 67 = T 83 = V 103 = Y 7 = M 19 = U 37 = C 53 = A 71 = E 89 = D 11 = F 23 = I 41 = W 59 = G 73 = J 97 = B
Nota : Esta tabela foi construída empiricamente para maximizar o número de palavras possíveis. Para os curiosos, aqui está uma lista de 2.187 palavras que podem ser codificadas dessa maneira (podem incluir linguagem rude). Definitivamente, não é garantido que seja o ideal, mas é bom o suficiente para esse desafio.
Exemplos
Exemplo 1: 579085261 (ordem crescente)
- Os fatores primos são [37, 47, 53, 61, 103] .
- 2 não é um fator primordial, por isso mantemos a lista classificada em ordem crescente.
- 37 = C, 47 = R, etc. A saída é "LOUCA".
Exemplo 2: 725582 (ordem decrescente)
- Os principais fatores são [2, 11, 13, 43, 59] .
- 2 é um fator primordial, portanto, nós o removemos e classificamos a lista em ordem decrescente, o que indica:
[59, 43, 13, 11] . - 59 = G, 43 = O, etc. A saída é "GOLF".
Exemplo 3: 10757494 (com um fator repetido)
- Os fatores primos são [2, 11, 71, 71, 97] .
- 2 é um fator primordial, portanto, nós o removemos e ordenamos a lista em ordem decrescente, o que fornece:
[97, 71, 71, 11] . - 97 = B, 71 = E, 11 = F. A saída é "BEEF".
Esclarecimentos e regras
- É garantido que o número de entrada seja 103 suave e divisível por 2 no máximo uma vez.
- Por definição, um número suave é um número inteiro positivo .
- A entrada e a saída podem ser manipuladas em qualquer formato razoável. A saída pode estar em minúscula ou maiúscula. O espaço em branco à direita é aceitável. Os principais espaços em branco não são.
- Se o seu programa / função não suportar entradas grandes, especifique-o na sua resposta.
- Isso é código de golfe, então a resposta mais curta em bytes vence.
Casos de teste
34874 --> ARM
483254 --> BAR
353722 --> EAR
494302 --> EGG
39061 --> FAT
6479 --> FUN
60421 --> ICE
54166 --> JAM
48911474 --> BETA
2510942 --> BOOM
2303854 --> DOOM
844261 --> FIRE
1606801 --> MAZE
1110085 --> PAGE
5212974 --> BALLS
67892046 --> BEANS
885396199 --> CREEK
67401037 --> FUNKY
27762173 --> QUICK
1238440506 --> ARROWS
33045832681 --> CRAGGY
1362714005 --> PIRATE
137302698 --> TROLLS
358310128062 --> BEGGARS
40255151586 --> DETAILS
164633248153 --> FIXATED
621172442227 --> UNRATED
2467812606 --> VACUUMS
86385078330 --> GROWNUPS
26607531423091 --> UNWORTHY
Ò
em579085261
, sentir como <s> Emigna </ s> Adnan já começou.<=103
... o resultado éPIRATE MAZE
, ouDOOM VACUUMS
...Respostas:
Geléia ,
2927 bytesGraças a @ JonathanAllan por jogar fora um byte!
Experimente online!
fundo
é um literal numérico. Os caracteres entre as aspas são substituídos pelos índices baseados em 1 na página de códigos Jelly , e a matriz resultante é interpretada como um número de base 250. Isso gera o número inteiro c: = 288824892868083015619552399 .
Como funciona
fonte
Gelatina , 36 bytes
Experimente online!
Explicação
Constante auxiliar
1£
(produzida“SPMFLQUIXNCWORAGZTEJHVDBKY ”
com 1 anexado)Programa principal
Tenho a sensação de que minha compactação da lista supera facilmente a outra resposta do Jelly, mas que meu algoritmo para usá-lo pode ser muito mais eficiente. Talvez eu tente combiná-los.
Gelatina , 31 bytes, inspirada na resposta de @ Leakynun
Experimente online! (ligeiramente modificado para rodar muito mais rápido)
É inconsistente se ela imprime uma nova linha à direita (mas o PPCG normalmente permite respostas com ou sem uma nova linha à direita, então acho que isso também funciona?). É muito lento (O ( n ) onde n é a entrada e esses números não são exatamente pequenos…)
Explicação
Constante auxiliar
1£
(produz“¶SPMFLQUIXNCWORAGZTEJHVDBKY”
, onde¶
está a nova linha)Programa principal
fonte
05AB1E ,
3938 bytesUsa a codificação CP-1252 . Experimente online!
fonte
Ø
foi a parte disso que venceu a minha por 20 bytes de qualquer maneira: P.Python 2,
220217 bytesExperimente online - executa apenas o menor caso de teste sem ficar sem memória
Ungolfed:
Esta versão não usa
exec
, portanto, você pode testar todos os casos de teste sem ficar sem memória.Experimente online
fonte
Rubi ,
139138134125 125120115 + 7 =146145141132127 127122 bytesUsa o
-rprime
sinalizador para +7 bytes.-1 byte de @daniero. -4 bytes, lembrando que eu posso apenas fazer uma verificação regular de divisibilidade, em vez de verificar a existência de divisão primária
2
.-9 bytes da solução Python do @ mbomb007, lembrando-me de uma maneira mais curta de recuperar a letra correspondente.
-5 bytes porque o espaço em branco à direita agora é permitido.
-5 bytes da descoberta
Enumerable#find_index
Experimente online! (todos os casos de teste)
Explicação
fonte
zip
e"
Bash + utilitários GNU + pacote bsd-games, 170
Parece bastante não ideal, mas funciona:
Experimente online .
fonte
Gelatina , 33 bytes
Experimente online!
fonte
Japt ,
5150 bytes49 bytes de código, +1 para o
-P
sinalizador.Experimente online!
Isso poderia ser bem mais curto se apenas Japt tivesse mais alguns recursos ...
Explicação
`yspmflquixncÙgz’jhvdbk`
é exatamente a mesma string que todo mundo está usando compactado, tanto quanto o Japt pode compactá-lo (3 bytes mais curto que o original!). A única ferramenta de compactação incorporada do Japt no momento substitui pares comuns de letra minúscula por um caractere de byte único.Então, vamos examinar o código real:
Então
£
é usado para substituir cada itemX
no resultado desta forma:O resultado é uma matriz de caracteres neste momento; portanto, o
-P
sinalizador o une em uma única sequência e o resultado é enviado implicitamente para a saída.fonte
Geléia , 40 bytes
Experimente online!
Verifique todos os casos de teste de uma só vez! (ligeiramente modificado)
fonte
Pitão ,
5447 bytes7 bytes graças a isaacg
(
❤
representa um caractere não imprimível)Pyth não tem muitos built-ins principais ...
Hexdump:
Experimente online!
fonte
J , 59 bytes
Experimente online!
Bem simples...
fonte
PHP, 173 bytes
Versão Online
Expandido
PHP, 178 bytes
Versão Online
Expandido
fonte
Python, 1420 bytes
Definitivamente isso poderia causar um curto-circuito em alguns, mas é minha tentativa de resolvê-lo sem números ou literais de strings. Sei que este é um problema de código-golfe e isso não é exatamente curto, mas queria compartilhar de qualquer maneira, não tenho certeza se isso quebra alguma regra ou não.
Foi muito divertido de fazer, usei o algoritmo nesta postagem no blog para reduzir a representação numérica ASCII de "SPMFLQUIXNCWORAGZTEJHVDBKY" na expressão de deslocamento de bits que eu uso. Eu também geralmente me inspirei bastante neste blog, queria experimentar por mim mesmo e isso parecia um bom desafio.
Aqui está uma versão um pouco mais legível, com alguns nomes de variáveis mais sensíveis também
fonte