Seu chefe acabou de lhe enviar uma lista de 12 tarefas de programação que ele precisa executar o mais rápido possível. As tarefas são bastante simples, mas seu chefe, sendo um jovem magnata do software amamentado pelas redes sociais, insiste em que suas soluções possam caber em um único tweet no Twitter .
Isso significa que você tem apenas 140 bytes de código para resolver todas as tarefas, uma média de 11,67 bytes por tarefa. (Sim, o Twitter conta caracteres, mas seu chefe disse especificamente bytes.)
Você percebe que não há como resolver todas as 12 tarefas em 140 bytes, mas suspeita que seu chefe não irá testar todas as suas soluções. Assim, você resolve todas as tarefas possíveis, ignorando completamente algumas delas. Sua mentalidade é que não importa qual subconjunto das tarefas que você concluir, importa apenas que o subconjunto seja o maior possível .
Quantas tarefas você pode concluir?
Desafio
Escreva até 12 programas diferentes, cada um dos quais resolve com precisão uma das 12 tarefas listadas abaixo. A soma acumulada dos comprimentos desses programas não pode exceder 140 bytes
Como alternativa, você pode escrever um único programa de no máximo 140 bytes que leve um número inteiro de 1 a 12 e (idealmente) prossiga para resolver a tarefa correspondente, obtendo mais entradas conforme necessário. Nem todas as tarefas precisam funcionar, mas apenas as que contam para a sua pontuação. Tarefas que não funcionam podem errar ou fazer qualquer outra coisa.
Nos dois casos, um "programa" pode de fato ser uma função que recebe a entrada como argumentos ou solicita-a e imprime ou retorna a saída. Portanto, por exemplo, você pode escrever uma função de 140 bytes que seja semelhante f(taskNumber, taskInput)
ou escrever trechos de código separados para cada tarefa, alguns como funções e outros como programas de pleno direito.
Outros detalhes:
Todo o código deve ser escrito no mesmo idioma.
Como de costume, a entrada deve vir do stdin, da linha de comando, de um argumento de função ou do que for usual para o seu idioma. A saída é impressa no stdout ou na alternativa mais próxima do seu idioma ou retornada em um tipo apropriado.
Uma quantidade razoável de formatação de entrada é boa; por exemplo, aspas em torno de strings ou em
\n
vez de novas linhas reais.A saída deve ser exatamente o que é solicitado, sem formatação ou espaço em branco estranhos. A exceção é uma nova linha opcional à direita.
O código que é executado apenas em um ambiente REPL não constitui um programa ou função.
Você não pode escrever vários programas que resolvem várias tarefas. Ou é um programa que (idealmente) resolve todas as tarefas ou (idealmente) 12 programas que resolvem uma única tarefa.
Não é permitida a publicação de uma solução de tarefas que você não escreveu ou apenas modificou ligeiramente, sem atribuir o autor original e, idealmente, obtendo permissão também. Se sua resposta compõe principalmente as soluções mais curtas de todas as outras respostas, deve ser um wiki da comunidade.
Pontuação
O envio que concluir a maioria das tarefas é o vencedor. Se houver dois envios, o que tiver menos bytes vence. Se a contagem de bytes estiver empatada, o envio anterior vence. As respostas do wiki da comunidade não têm permissão para vencer.
Não deixe de nos dizer quais tarefas você resolveu, e não quantas!
Handicap para não-golfistas:
É provável que esse desafio seja dominado por idiomas de golfe . Muitos idiomas podem ter problemas para resolver até uma ou duas tarefas em 140 bytes. Portanto, você pode enviar uma resposta não competitiva em que o limite é de 3 tweets, ou seja, 420 bytes. Todas as outras regras permanecem as mesmas.
Tarefas
Tarefa 1 - Três números podem formar um triângulo?
Pegue três números inteiros positivos e produza um valor de verdade / falsidade indicando se três linhas com esses comprimentos podem formar um triângulo . Você não pode presumir que os números vêm em qualquer ordem específica.
Exemplos de verdade (um por linha):
20 82 63
1 1 1
2 3 4
1 2 2
Exemplos de falsidade:
6 4 10
171 5 4
1 1 2
1 2 3
Tarefa 2 - mais próxima de um milhão
Dada uma sequência de exatamente 7 dígitos decimais (0-9), reorganize-os para obter um número o mais próximo possível de um milhão. Ou seja, abs(1000000 - rearrangedNumber)
deve ser minimizado.
Imprima ou retorne o número resultante como um número inteiro, não como uma string (portanto, não deve haver zeros à esquerda, a menos que seja a norma para o seu idioma).
por exemplo, uma entrada de 9034318
deve resultar em 984331
(e não 1033489
).
2893984
deve se tornar 2348899
.
0001000
deve se tornar 1000000
.
0000020
deve se tornar 200000
.
Tarefa 3 - Simulador de teclado simples
Pegue uma sequência de letras minúsculas (az), espaços e colchetes angulares <>
. Leia da esquerda para a direita, essa sequência representa as teclas que foram pressionadas em um teclado padrão enquanto um editor de texto inicialmente vazio estava aberto. As letras e o espaço correspondem às teclas normais, mas <
correspondem às setas esquerda e >
direita, ambas movendo o cursor quando pressionadas.
<
move o cursor um caractere para a esquerda ou não faz nada se o cursor estiver no início da string.
>
move o cursor um caractere para a direita ou não faz nada se o cursor estiver no final da string.
Saída a string que estaria no editor de texto depois que todas as teclas da string de entrada forem pressionadas. Não é permitido emitir códigos de escape para mover o cursor.
Sempre haverá pelo menos um caractere que não seja da seta na entrada.
por exemplo, a entrada ui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<f
deve render the quick brown fox
.
op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>m
deve dar llammoptimizer
.
e< <c<b<a
deve dar abc e
.
<<<>><><<><toast>><<>><><<>><
deve dar toast
.
Tarefa 4 - Cartas da FILTHE
Em muitas fontes, 6 das maiúsculas letras Inglês alfabeto consiste inteiramente de linhas horizontais e verticais: E
, F
, H
, I
, L
, e T
. Nós chamaremos essas letras de FILTHE.
Pegue uma sequência de letras maiúsculas (AZ) e conte o número de linhas nas letras FILTHE, produzindo o número inteiro resultante.
E
, F
, H
, I
, L
, E T
tem 4, 3, 3, 3, 2, 2 e linhas, respectivamente.
por exemplo, GEOBITS
tem 4 + 3 + 2 = 9 linhas como parte das letras FILTHE (para .E..IT.
), portanto a saída deve ser 9
.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
deve produzir 17
.
ABCDGJKMNOPQRSUVWXYZ
deve produzir 0
.
FILTHYLINESINLETTERS
deve produzir 39
.
Tarefa 5 - Alex Recursivo A.
Nosso moderador Alex A. tem uma inicial bastante misteriosa, "A".
Agora não tenho certeza, mas acho que isso A.
significa .A xelA
. E também tenho certeza de que o que .A
existe sorrateiramente significa Alex A.
.
Assim, para obter o nome completo de Alex, precisamos expandir os A.
's e .A
' s:
Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.
Faça com que seu programa obtenha um número inteiro não negativo e expanda Alex A.
isso muitas vezes, produzindo a sequência resultante.
Assim,
0
torna-se Alex A.
,
1
torna-se Alex .A xelA
,
2
torna-se Alex Alex A. xelA
,
3
torna-se Alex Alex .A xelA xelA
,
4
torna-se Alex Alex Alex A. xelA xelA
,
5
torna-se Alex Alex Alex .A xelA xelA xelA
,
e assim por diante.
(Fiz isso porque me senti mal por deixar inadvertidamente Alex fora do meu desafio de tributo a mod .: P)
Tarefa 6 - Rotação de Numpad
Pegue um número inteiro de 1 a 9 inclusive (você pode considerá-lo como uma string). Emita o quadrado de 3 × 3 dígitos
789
456
123
girado em incrementos de 90 °, de modo que o dígito de entrada apareça em qualquer lugar na linha superior. Quando 5
é inserida, qualquer rotação é uma saída válida, pois 5
não pode ser girada para o topo.
por exemplo, quando 3
é introduzido, ambos
963
852
741
e
321
654
987
são saídas válidas.
Para entrada 4
, apenas
147
258
369
é uma saída válida.
Tarefa 7 - Divisão de dígitos em dezenas
Pegue uma sequência não vazia de dígitos decimais (0-9) e forneça um valor verdadeiro, se puder ser dividido em seções contíguas, onde todos os dígitos em cada seção somam exatamente 10. Se isso não for possível, insira um valor falso.
por exemplo, 19306128
pode ser dividido como 19|3061|28
, todas as seções somando 10 (1 + 9, 3 + 0 + 6 + 1, 2 + 8), portanto, um valor verdadeiro deve ser gerado.
Exemplos de verdade (um por linha):
19306128
073
730
0028115111043021333109010
2222255
Exemplos de falsidade:
6810410
9218
12341
5222225
000
Tarefa 8 - Relógio quadrado
Pegue uma cadeia de várias linhas de tamanho consistente.
Saída 12
se a entrada for
_ _
| | |
|_ _|
Saída 3
se a entrada for
_ _
| |_|
|_ _|
Saída 6
se a entrada for
_ _
| | |
|_|_|
Saída 9
se a entrada for
_ _
|_| |
|_ _|
Não há outros casos de entrada.
Tarefa 9 - Bracket Art
Leve de uma cadeia de 4 byte contendo um de cada um dos suportes esquerdo (
, [
, {
, e <
em qualquer ordem.
Adicione os colchetes direitos correspondentes para que a cadeia tenha 8 bytes de comprimento e tenha uma linha vertical de simetria. por exemplo, [<({
torna-se [<({})>]
.
Em seguida, inverta todos os colchetes nessa sequência. por exemplo, [<({})>]
torna-se ]>)}{(<[
.
Emita a string de suporte de 8 bytes original com a versão invertida acima e abaixo em linhas separadas.
Portanto, a saída final para entrada [<({
seria
]>)}{(<[
[<({})>]
]>)}{(<[
Da mesma forma, a saída para <({[
deve ser
>)}][{(<
<({[]})>
>)}][{(<
A entrada (<<[
é inválida porque {
está faltando e há um extra <
.
Tarefa 10 - Perimiterar
Pegue uma grade retangular de texto (1 × 1 no menor) feito de .
's que representam espaço vazio e X
' s que representam blocos sólidos. As células além dos limites da grade são consideradas vazias. Você pode assumir que cada uma das quatro linhas e colunas da borda da grade conterá pelo menos uma X
.
por exemplo, uma entrada válida pode ser:
XXX.....X.....
X..X...X.X....
XXX.....X....X
Saída outra grade retangular de texto onde todas as células vazias vizinhas a uma X
ortogonal ou diagonal, incluindo aquelas fora da grade de entrada , se tornam o
. Então, essencialmente, um perimitro de o
's é desenhado em torno de todas as partes dos ladrilhos sólidos. A nova grade não deve ser maior do que deve ser.
Portanto, a saída do exemplo acima seria:
ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo
Da mesma forma, a saída da entrada XXX..X.X
deve ser
oooooooooo
oXXXooXoXo
oooooooooo
e saída
oooooooooo.
oXXXooXoXo.
oooooooooo.
seria inválido, pois a coluna mais à direita vazia é desnecessária.
Você pode usar qualquer 3 distintas ASCII imprimíveis caracteres no lugar de .
, X
e o
.
Tarefa 11 - Praça Sator
Saída do Sator Square :
SATOR
AREPO
TENET
OPERA
ROTAS
Qualquer uma das letras pode ser minúscula ou maiúscula, portanto
SatOR
aRePO
tenet
OPERa
RoTaS
também é saída válida.
Não há entrada.
Tarefa 12 - Prime Tweet
Não aceite entrada, mas produza uma sequência ASCII imprimível de 140 bytes que contém pelo menos um de cada um dos 95 caracteres ASCII imprimíveis. (Portanto, 45 caracteres serão duplicados.)
A soma dos códigos de caracteres de todos os 140 bytes nessa string deve ser um primo de Sophie Germain , ou seja, um número primo p
, que 2p+1
também é primo. O código de caractere para o espaço é 32, 33 para !
, 34 para "
e assim por diante até 126 para ~
. A soma pode ser calculada em Python como sum(map(ord, myString))
.
Um exemplo de saída é:
! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d
A soma do código de caractere é o primo 12203, cujo primo seguro correspondente é 24407.
import
s? Digamos que eu escreva 5 funções em que 2 precisam do mesmo módulo (por exemplo import Math
), isso é contado duas vezes?