Eu nem ... eu só estranho!


36

Sua tarefa é simples: escreva um programa que receba um número inteiro como entrada e o produza se for ímpar e não faça nada de outra forma (não é permitido interromper). O desafio é que você só pode usar bytes ímpares.

Opcionalmente, você pode anexar uma nova linha à direita na saída.

Isso é código-golfe, a resposta mais curta em bytes (ímpares) vence.

Lacunas padrão são proibidas. Além disso, você não pode usar versões de idiomas mais recentes que a publicação deste desafio.

Exemplo de entrada> saída:

13 > 13

42 >


10
Eu derrotei esse desafio porque é um desafio "Faça X sem Y".
Leaky Nun

4
O que exatamente does nothing otherwisesignifica? No Haskell, uma função com o tipo Int -> Int retorna um número inteiro ou não interrompe ou gera algum erro. Se a entrada for igual, obviamente não deveria ser retornada, portanto, interromper ou lançar um erro nesse caso seria aceitável?
Laikoni

2
Se você quiser saber se pode usar seu código-fonte, tente estes scripts no console do navegador. Criar charset válido: alphabet=new Set(Array(256).fill(0).map((v,i)=>i).filter(v=>v%2).map(String.fromCharCode));. Verifique se a fonte é válido: [..."SOURCE CODE"].every(v=>alphabet.has(v)). Veja caracteres inválidos na fonte: [...new Set("SOURCE CODE")].filter(v=>!alphabet.has(v)). Lembre-se de escapar suas citações, "=> \";)
kamoroso94

14
O @LeakyNun "faça X sem Y" não se refere a desafios gerais de fonte restrita , mas desafios que proíbem o uso de certos recursos de um idioma. Esse desafio não é esse e também não tem nenhum dos problemas que tornam os desafios reais do "faça X sem Y" problemáticos.
Martin Ender

1
@Laikoni Como já existem algumas respostas que entram em um loop infinito, eu diria que não há problema em mostrar esse comportamento. Não retornar pode ser interpretado como não fazendo nada.
31417 M.Herzkamp

Respostas:



67

Lenguage , 645529908926937253684695788965635909332404360034079 9394157991500940492270727190763049448735 1174269748937617561533841898064735499551 2293382937520069756300171520285993

Isso é aproximadamente igual a 2 duodecilhões de bytes.

O arquivo é traduzido para o seguinte programa brainfuck:

,[<<+>+>-]<[>>+<<-]+>>[-[->]<]<[<[<]>.<]

Recebe a entrada como um código ASCII, com um valor máximo de 256. Usa quebra automática.


@ Ok Meu erro. Mas por que você não usa ,[<<+>+>-]<[>>+<<-]+>>[-[->]<]<[<[<]>.<]?
user202729

1
Que tal ,[[>]++[-<]<+>>]>[<<<.<]apenas por 3452857532394791089951 bytes?
Jo King

Na verdade, como infinitos loops são permitidos, ,-[-->++<]>+.funciona também
Jo King

20

Código da máquina x86-64, 8 bytes

Inspirado na solução de Bruce Forte , mas um pouco abaixo do par. :-)

8D 07          lea      eax, [rdi]    ; put copy of input parameter in EAX
D1 EF          shr      edi, 1        ; shift LSB into CF
             InfiniteLoop:
F3 73 FD       rep jnc  InfiniteLoop  ; test CF; infinite loop back here if input was even
C3             ret                    ; return with original input in EAX if it was odd

Um único parâmetro inteiro é obtido no EDIregistro, seguindo a convenção de chamada do System V AMD64.

Uma cópia desse valor é feita inicialmente e inserida EAXpara que possa ser retornada, se apropriado. ( LEAé usado em vez do normal MOVporque precisamos de uma instrução com bytes ímpares.)

Em seguida, o valor in EDIé deslocado para a direita por 1, o que coloca o bit deslocado no sinalizador de transporte (CF). Este bit será 0 se o número for par ou 1 se for ímpar.

Em seguida, testamos CF usando a JNCinstrução, que será ramificada apenas se CF for 0 (ou seja, o número foi par). Isso significa que entraremos em um loop infinito para valores pares. Para valores ímpares, nós caímos e o valor original (in EAX) é retornado.

Há um pouco de truque com a JNCinstrução - ela tem um REPprefixo! Normalmente, os REPprefixos são usados ​​apenas com instruções de string, mas como os manuais da Intel e da AMD concordam que REPprefixos irrelevantes / supérfluos / redundantes são ignorados, lançamos um na instrução de ramificação aqui para torná-lo com 3 bytes de comprimento. Dessa forma, o deslocamento relativo que é codificado na instrução de salto também é ímpar. (E claro,REP é é um prefixo de bytes ímpares).

Graças a Deus RETé codificado usando um byte ímpar!

Experimente online!


Caso você não pense em retornar o valor se for ímpar ou entrar em um loop infinito se for par (para que você nunca retorne) satisfaça os requisitos de "saída" do desafio, ou apenas deseje algo mais interessante, aqui está uma função que gera o valor para uma porta serial (mas apenas se for ímpar, é claro).

Código da máquina x86-64 (saída para porta serial), 17 bytes

8D 07         lea   eax, [rdi]   ; put copy of input parameter (EDI) in EAX

B1 F7         mov   cl, 0xf7     ; put 0xF7 into low-order bits of CX
B5 03         mov   ch, 0x03     ; put 0x03 into high-order bits of CX
FE C1         inc   cl           ; increment low-order bits of CX to 0xF8 (so all together it's now 0x3F8)
0F B7 D1      movzx edx, cx      ; move CX to DX ("MOV DX, CX" would have a 16-bit prefix of 0x66)

D1 EF         shr   edi, 1       ; shift LSB of input parameter into CF
73 01         jnc   IsEven       ; test CF: branch if 0 (even), fall through if 1 (odd)
EF            out   dx, eax      ; output EAX (original input) to I/O port 0x3F8 (in DX)
            IsEven:
C3            ret                ; return

O que torna isso um pouco mais interessante é que o código faz mais , o que significa que foi mais desafiador fazer tudo isso usando instruções que são codificadas usando apenas bytes ímpares. Obviamente, isso também significa que ele falha no código de golfe, então é uma espécie de compensação - você quer ser interessante e desafiador ou quer ser breve?

De qualquer forma, isso usa a OUTinstrução x86 para gravar na porta de E / S 0x3F8, que é a porta serial COM1 padrão em um PC. A parte divertida, é claro, é que todas as portas de E / S padrão (serial e paralela) têm endereços pares, de modo que não podem simplesmente ser codificadas como imediatas para a OUTinstrução ou movidas diretamente para um registrador. Você precisa inicializar com um a menos que o valor real e depois incrementar o valor no registro. Você também está limitado ao uso de certos registradores para a manipulação, porque precisa de registradores codificados usando bytes ímpares na instrução quando usados ​​como operandos.

Além disso, tive que inicializar o DXregistrador (via CXregistrador) na parte superior do loop, mesmo que isso seja necessário apenas se o valor for ímpar, para garantir que a JNCinstrução tenha um deslocamento ímpar. No entanto, como o que estamos pulando é a OUTinstrução, todo esse código é desperdício de ciclos e registros de arranhões; Na verdade, não saída de qualquer coisa, para que ele não quebrar as regras.

Finalmente, esta função retornará (depois de ter feito ou não a saída para a porta serial) com o valor de entrada deixado em EAX. Mas isso realmente não quebra nenhuma regra; todas as funções na linguagem assembly retornam com um valor em EAX- a questão é apenas se é um valor significativo ou um valor de lixo . Isso é determinado pela documentação da função (essencialmente, ela retorna um valor ou retorna void) e, neste caso, estou documentando como não retornando um valor. :-)

Nenhum link TIO para este, pois ele não implementa saída para portas seriais. Você precisará de ferro de verdade ou imaginação.


+1 para a explicação! Por que você pode usar mov na segunda linha, mas não na primeira?
M.Herzkamp

Além de codificar que é uma MOVinstrução, seus operandos também precisam ser codificados em bytes. Nesse caso, esses seriam os registros de origem e destino (embora operandos também possam ser valores imediatos, que são como constantes). Registradores diferentes são mapeados para bytes diferentes, e alguns desses bytes são pares. Então, por exemplo, o que eu gostaria de usar seria mov eax, edi, mas isso é 89 F8em bytes. Veja muito mais do que você sempre quis saber sobre codificações aqui, na seção "código" . @ M.Herzkamp
Cody Gray


9

05AB1E , 3 bytes

Éi=

O código corresponde aos valores dos bytes C9,69,3Dou 201,105,61que são todos ímpares.

Experimente online!

Explicação

É     # input % 2 == 1
 i    # if true
  =   # print without popping

= # print without newlineque é realmente impresso com nova linha sem aparecer
Erik the Outgolfer

@EriktheOutgolfer: True. Eu vou consertar a explicação.
Emigna

Infelizmente, É×parece não funcionar):
kalsowerus

@kalsowerus: Sim, eu notei isso também. Funciona corretamente com um Dna frente, mas é uniforme e não é mais curto. A razão pela qual não funciona é que a entrada implícita repetida é tomada como segundo argumento.
Emigna

@Emigna mas o estranho é, trocando o topo dois valores na pilha duas vezes, faz com que funcione bem ...
kalsowerus

5

MATL , 3 bytes

o?G

MATL utiliza caracteres ASCII, de modo que o?Gcorresponde aos bytes (decimais) 111, 63, 71.

Experimente online!

Explicação

o     % Push (implicit) input modulo 2
?     % If nonzero
  G   %   Push input
      % End (implicit)
      % Display stack contents (implicit)

5

Haskell , 36 33 bytes

c[1]=1;c[m]=1+1+c[m-1-1];o	m=c[m]

Experimente online!

Uso: o 7yiedls 7, o 8entra em um loop infinito.

O algoritmo real é

o 1 = 1
o m = 2 + o(m-2)

O primeiro problema que enfrentei foi a falta de espaço e (, porque uma função oque recebe um argumento mé geralmente definida como o m=...ou o(m)=.... No entanto, descobri que um comentário embutido também {- some comment -}funciona como delimitador de token, portanto, uma definição o{--}m=...é possível sob as regras fornecidas. Edit: Ørjan Johansen apontou que é possível usar um caractere de tabulação em vez de um espaço, economizando três bytes: o m=...

O segundo problema foi a chamada recursiva o(m-2). -2é justo -1-1, mas aqui o truque de comentário não funciona porque os parênteses são necessários. Corrigi isso deixando a função funcionar em uma lista singleton contendo um número: o[m-2]no entanto, como essa não é uma maneira padrão de fornecer entrada, terceirizei o cálculo para uma função auxiliar cque funciona em listas e chamadas a cpartir das oquais tem o formato correto .


Você pode usar uma guia em vez de um espaço.
Ørjan Johansen

@ ØrjanJohansen Posso verificar se ele funciona em \tvez de {--}.
Esolanging Fruit

@ ØrjanJohansen Obrigado, é bom saber.
Laikoni 13/07

5

Python REPL, 38 bytes

Recebe a entrada como o valor da expressão anterior usando _. A saída será uma sequência (a representação da sequência inteira para ímpar ou a sequência vazia para par).

'%s'%[['']+[_]][-1][[_%[1+1][-1]][-1]]

Experimente online

Para executá-lo em um shell real, você pode experimentá-lo aqui . Digite a entrada, pressione enter. Cole o código, pressione enter.

Explicação:

Demorou um pouco para descobrir. Não há multiplicação, ramificação, fatias, vírgulas, nem pontos, nem importações, parênteses, não exec, não eval, não printe funções. Eu tenho uma solução trabalhando nessa saída usando stderr, mas então percebi que tínhamos que produzir o número inteiro real, não apenas um valor de verdade / falsey.

Eu uso colchetes no lugar de parênteses com [expression][-1]. Simplificando que transforma o código acima em '%s'%(['']+[_])[_%(1+1)].

Como não pode haver vírgulas, usei a adição de lista para criar ['',_]. Usando a formatação de string, o resultado desejado é obtido.


Parabéns. Como bônus, ele também funciona para o Ruby IRB :) Nitpick: está correto retornar uma string para números ímpares, está correto retornar uma string vazia para números pares?
Eric Duminil

Não fazer nada e imprimir ou devolver nada são os mesmos, eu acho. De certa forma, cadeia vazia não é nada.
mbomb007

Sim, eu estava realmente falando sério. Ele ainda retorna uma string em vez de nada. No Python REPL, eu diria queNone seria uma correspondência ainda melhor do que ''. De qualquer forma, isso ainda é 10000 vezes melhor do que qualquer coisa que eu possa criar.
Eric Duminil

@EricDuminil eu poderia voltar False. Idk como você poderia conseguir None, no entanto.
mbomb007

4

CJam, 6 bytes

q_iY%%

113 95 105 89 37 37

Este programa pega o mod 2 da entrada (chame-o de r ) e imprime cada r- ésimo caractere na string de entrada. Se o número de entrada for ímpar, ele imprime toda a string, mas, se solicitado a imprimir todos os caracteres 0, o programa gera um erro.

Experimente aqui


Agradável! Eu ia postar qi_Y%]W%{}/M?e depois vi isso.
Esolanging Fruit

4

Cubix , 23 19 17 bytes

;;u!I1)%/;O=!;;/;

Tente!

@, que finaliza um programa Cubix, é ascii 64, então, infelizmente, isso realmente entra em um loop infinito após o teste de estranheza. Nenhum link TIO, pois o tempo limite será excedido.

= (ascii 61) é um no-op no Cubix.

Essa é uma pequena modificação do algoritmo anterior (mesmo número de bytes) que realmente funciona para números inteiros negativos.

Versão do cubo:

    ; ;
    u !
I 1 ) % / ; O =
! ; ; / ; . . .
    . .
    . .

Algoritmo:

  • I (73) : ler na entrada como número
  • 1 (49) : push 1
  • ) (41) : incremento
  • % (37) : pegue o mod
  • / (47) : vire a esquerda
  • ! (33) : pula a próxima instrução se ímpar
    • 1;;/; ; é (59) : prepara a pilha para saída
    • O (79) : Saída como um número.
    • Em seguida, ele entra novamente no algoritmo, mas Ilê um 0para o final da entrada, por isso temos a garantia de inserir o ramo par
  • u (117) : inversão de marcha à direita
  • ;;;!I : loop, efetivamente não fazendo nada.

@MickyT que falha para a entrada negativa, o que é por isso que eu evitado usando?
Giuseppe

Desculpas, não verifiquei corretamente #
MickyT

3

Carvão , 9 bytes

¿﹪Iθ÷χ⁵→θ

Experimente online!

Basicamente, imprime a entrada à direita, se não for um múltiplo de 10/5 (o ²caractere está na página de código do carvão vegetal ). Os caracteres usados ​​são:

  • ¿: código BF.
  • : código A5.
  • : código C9.
  • θ: código F1.
  • ÷: código AF.
  • χ: código E3.
  • : código B5.
  • : código 13.

De fato, o fim do fim é redundante, mas então eu vi que a resposta tinha que ter um comprimento estranho ...

Explicação:

¿      if (
 ﹪      Modulo (
  Iθ      the input as number,
  ÷χ⁵      χ (predefined value: 10) divided by 5 = 2 ) [is 1])
 →θ      then print rightwards the input as string

Você está imprimindo e depois se movendo para a direita; imprimir para a direita seria realmente →θ.
Neil

@ Neil oops, fixo. Pelo menos isso não invalida a minha resposta ... :-D
Charlie

3

código de máquina x86_64 (Linux), 12 11 bytes

Infelizmente 0x80é par, mas ainda funcionou (supondo que "não faz nada" significa não retornar):

0000000000000000 <odd>:
   0:   8d 07                   lea  (%rdi), %eax
   2:   83 e7 01                and    $0x1, %edi
   5:   83 ff 01                cmp    $0x1, %edi
   8:   75 fb                   jne       5  <odd+0x5>
   a:   c3                      retq

-1 byte, obrigado @CodyGray!

Experimente online!


1
Como se trata de x86-64, lea (%edi),%eaxrequer um prefixo de substituição de tamanho de endereço ( 0x67) quando a origem é um registro de 32 bits. Você pode eliminar isso fazendo lea (%rdi),%eax. Isso economiza um byte e, na verdade, tornaria o código um pouco mais eficiente (prefixos diminuem a decodificação e preenchem o i-cache). Existem outras coisas que você pode fazer para reduzir ainda mais isso, mas isso constitui essencialmente uma reescrita completa, então postarei minha própria resposta. :-) Eu também votei nisso, é claro! (Oh, só percebi que você pode ter usado o prefixo para fazer o deslocamento estranho Bem salto, você vai precisar de mais magia..)
Cody Grey

Além disso, solução realmente inteligente para o TIO! Eu pulei na maioria das minhas respostas asm porque não queria escrever todo o padrão no "rodapé" para imprimir a saída em asm. Finalmente quebrei e fiz no outro dia, mas essa é uma ideia muito melhor, permitindo que você use C para todo o resto. Eu vou roubar isso a partir de agora! :-)
Cody Gray

Felicidades por suas contribuições, eu sou um noob completo na montagem, mas isso parecia bastante fácil! Curioso pela sua solução. Ah, o crédito vai para @ceilingcat - eu mesmo roubei;) #
# #

Na verdade, eu não salvei um byte para você ... O que você tem agora tem um byte par ( F6) para a JNEinstrução porque ele tem um deslocamento par. Foi isso o que quis dizer com o último parênteses que editei no meu primeiro comentário. Você realmente precisa desse prefixo para criar um alinhamento ímpar. Ou você deve reescrever o código de alguma outra maneira. Eu brinquei com várias variações diferentes. Na verdade, eu olhei para isso ontem à noite e estava tentando descobrir uma boa maneira de usar OUTpara gerar valores ímpares, mas nenhuma solução realmente me ocorreu. O insight aqui para mim é entrar em um loop infinito para valores pares.
Cody Grey

Este é um desafio bastante tolo, na verdade, porque nenhuma das soluções razoáveis ​​funciona. Realmente apenas testa quão bem você conhece os cantos obscuros do conjunto de instruções x86. Eu até tentei a BTfamília de instruções, que ninguém usa nunca (infelizmente, todas as codificações de registro são mesmo bytes). Eu pensei que poderia ser mais interessante escrever código que produza para uma porta serial, em vez de apenas retornar um valor ou qualquer outra coisa, mas isso aumenta a contagem de bytes lá em cima (especialmente porque os endereços de porta serial em hexadecimal são iguais!), Então eu desistiu disso.
Cody Grey

3

Mathematica, 20 bytes

Parece ser a primeira solução em linguagem não-golfe.

a=1+1;g[i_/;!a\[Divides]i]=i

Na MacintoshChineseTraditionalcodificação de caracteres. \[Divides]é {161, 253}(2 bytes)

Versão alternativa (23 bytes)

\[CapitalAlpha]=1+1;\[CapitalGamma][\[CapitalChi]_/;\[CapitalAlpha]\[LeftFloor]\[CapitalChi]/\[CapitalAlpha]\[RightFloor]\[NotEqual]\[CapitalChi]]=\[CapitalChi]

ou (mostrado em Unicode)

Α=1+1;Γ[Χ_/;Α⌊Χ/Α⌋≠Χ]=Χ

na Symbolcodificação de caracteres. (use apenas caracteres de 1 byte)

A solução define uma função g(ou Γ) que é avaliada para entrada quando a entrada é ímpar e literalmente "não faz nada" (não avalia) quando a entrada é par.


+1 byte ( ;no final) se o número de bytes precisar ser par; e \[Divides]também possui um ponto de código Unicode ímpar.
user202729

Você não precisa I[1+1], você pode apenas usar {1+1}. Além disso, você verificou se os bytes dos colchetes são válidos? Se sim, você pode obter 2de \[LeftFloor]E\[RightFloor].
Martin Ender

@MartinEnder Torna apenas o Symbolpiso válido, mas não tem nem Enem \[ExponentialE].
user202729

Receio que você não tenha permissão para usar os personagens D; v; nem d, uma vez que têm um valor de byte par .. :(
Kevin Cruijssen

1
@KevinCruijssen \[Divides]é um caractere único no Mathematica, representado por 2 bytes {161, 253}.
user202729

3

Perl, 54 bytes

Requer -E.

Eu realmente gostei desse desafio, acho que gostaria de tentar melhorar essa resposta, mas acho que esse pode ser o mais curto que posso fazer por enquanto. Estou brincando com essas respostas há alguns dias, mas sinto que estou feliz com a solução de 54 bytes!

s//A_=Y[;A_=A_%O?A_W''/;y/#A-_/#-A/;s/[#-}]+/uc/ee;say

Experimente online!

Explicação

Por padrão, a maioria das funções de string do Perl funciona $_, que está vazia para iniciar.

Primeiro, s//A_=Y[;A_=A_%O?A_W''/substitui a sequência vazia por $_e A_=Y[;A_=A_%O?A_W'', em seguida, y/#A-_/#-A/substitui os caracteres com base na seguinte lista (o caractere acima se torna o caractere abaixo):

#ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
#$%&'()*+,-./0123456789:;<=>?@A

quais atualizações $_devem conter $_=<>;$_=$_%2?$_:''. Em seguida, s/[#-}]+/uc/eesubstitui todos os caracteres [#-}]+por uc. Sem /eeisso, seria apenas a string uc, mas /eeavalia o conteúdo da string duas vezes. A primeira avaliação retorna o resultado de uc, que é uma versão em maiúscula, $_mas como $_não contém caracteres alfabéticos, isso retorna a sequência inteira, então a segunda /eavalia a sequência novamente, que define $_como $_(o número de entrada) ou ''depende de se não o número é ímpar ou par.

Finalmente, como $_agora contém o que queremos, chamamos say(que é o que requer, em -Evez de -e) quais impressões são $_seguidas por uma nova linha.


Perl alternativo, 93 bytes

Código de 92 bytes + 1 para -p, o que acho que o tornaria não competitivo.

s//_/g;s//uc/e;y/\x09-\x0b/_/;s/____/}[/;s/___/%C]/;s/_/{''H/;y/'{}1CDGH/'-)1-3+--/;s/[#-}]+/uc/ee

Contém uma guia e uma guia vertical na y///, indicada como \x09e \x0b.

Experimente online!


2

LOGO , 390 46 52 50 bytes

[ask    1   se[make]iseq    1-3 cos ?/ask   1[1/sum 1   179]?]

Essa é uma lista de modelos que retorna a entrada se a entrada for ímpar e causa um erro se a entrada for par.

Uso:

show invoke [ask ... (paste code here) ... ] 5

saída

5

já que 5 é ímpar e

invoke [ask ... (paste code here) ... ] 6

causará um erro porque 6 é par.



2

TI-BASIC, 14 bytes

Input Q
sinֿ¹(gcd(Q²,int(e
Q

Isso gera um erro de domínio (imprimindo nada na tela inicial) em um número par.

Input Q             Q is a variable with an odd code. We cannot use "Ans" as it's even.

            int(e   floor(e) = 2; "2" is even.
         Q²         Q may be negative, so we square it which preserves parity.
     gcd(Q²,int(e   1 if Q is odd; 2 if Q is even.
sinֿ¹(gcd(Q²,int(e   Error iff Q is even.

Q                   If there was no error, print Q.

1

Pitão , 14 11 10 9 bytes

I + Q_ + K / Q + 3_1KQ 
I! SIcQ + 3_1Q
 I! U + 1_GQ1Q
? u + 1_GQ1k

Conjunto de teste .


Essa é uma maneira inteligente, mas algo como I%Qy1Qtambém não deveria funcionar?
Jakube 12/07/2017

@Jakube Eu claramente não entendi y1... No entanto %, infelizmente, não é permitido.
Leaky Nun

Por que não? %tem valor ASCII 37 e é ímpar.
Jakube 12/07/19

3
@Jakube porque, aparentemente, eu confiei em esta lista o OP fornecido (que é errado)
Leaky Nun

1

Japonês , 4 bytes

u)çU

Japt usa ISO / IEC 8859-1 , portanto, isso corresponde a (em decimal) 117 41 231 85.

Teste online!

Explicação

Uu)çU   Implicit: U = input integer
Uu)     Return Python-style U % (missing argument = 2). This gives 1 if U is odd, 0 if even.
   çU   Implicitly convert U to a string and repeat it that many times.
        Implicit: output result of last expression

Primeiro tentei soluções usando p, que é basicamente çcom argumentos invertidos. No entanto, pexecuta exponenciação se o argumento esquerdo for um número, portanto, precisaríamos convertê-lo explicitamente em uma string. Essa solução acaba sendo um byte mais curto, além de não conter bytes ímpares.


1

dc , 21 bytes

[c]sa?kKKCI-1;1k%1!=a

Decimal: 91 99 93 115 97 63 107 75 75 67 73 45 49 59 49 107 37 49 33 61 97

Conforme esse padrão de E / S, este programa deixa a entrada na pilha principal se for ímpar e esvazia a pilha caso contrário. Isso pode ser confirmado adicionando o fcomando debug ao final do programa, como é o caso na página do TIO.

Experimente online!

Explicação

[    # Begin macro definition.
 c   # Clear the main stack.
]sa  # End macro definition and push the macro into register "a".
?k   # Prompt for input and store it into precision parameter "k".
KK   # Push two copies of the input to the main stack.
CI-  # Push C-I = 12-10 = 2 to the main stack  
1;1  # Push the value stored in the first index of array "1" (0 by default) 
     # to the main stack. 
k    # Push 0 into parameter "k" to reset the precision (otherwise the modulus 
     # function will not work correctly).
%    # Push the input (mod 2) to the main stack.
1!=a # If the input (mod 2) does not equal 1, execute the macro in register "a".
f    # OPTIONAL: Output the contents of the main stack.

1

TI-Basic, 18 bytes

Economizou 2 bytes graças a lirtosiast

:Prompt Q
:While 5Q/ᴇ1-int(5Q/ᴇ1
:Q

em bytes (+2 novas linhas = 3F)

:Prompt Q
 DD     51
:While 5Q/ᴇ1-int(5Q/ᴇ1
 D1    35 3B B1  35 3B  
        51 31     51 31
         83 71     83
:Q
 51

Consulte http://tibasicdev.wikidot.com/one-byte-tokens


1
Por que não usar fPart (?
lirtosiast

@lirtosiast parece ser um byte mesmo (BA = 186) de acordo com tibasicdev.wikidot.com/one-byte-tokens
Oki

Ah, eu li mal quais entradas eram linhas e quais são colunas.
lirtosiast

1
Eu encontrei Input Q[newline]sinֿ¹(gcd(Q²,int(e[newline]Q(14 bytes). Posso postar como resposta separada?
lirtosiast

@lirtosiast Wow! Definitivamente, é diferente o suficiente para uma resposta separada. Love it
Oki


0

Bash , 31 bytes

read a
[ $[a%2] = 0 ] ||echo $a

Experimente online!

Explicação:

read a                   reading the input and define it on the variable a
[ $[a%2] = 0 ]      outputs exit status 0 when a/2 is 0 and exit status 1 if not.
||                           evaluates only when the exit status left of it is 1
echo $a                displays the variable a

Parece que você esqueceu que este é um desafio restrito à fonte - você está usando bytes proibidos. ( rd $20|he nova linha.) #
Ørjan Johansen

@ ØrjanJohansen corrigido, eu acho
ADDB

2
Hum não. Não há restrição quanto à duração do programa, mas cada caractere deve ter um valor de byte ímpar.
Ørjan Johansen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.