Resposta à vida, ao universo e a tudo

46

Tarefa

Dada uma String como entrada, sua tarefa é produzir 42 apenas se a String de entrada for exatamente o seguinte:

abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz

Ele pode gerar qualquer outro valor, produzir um erro ou não produzir, se a entrada não for igual à String mencionada acima.


Critério vencedor

Isso é , então o código mais curto em bytes vence!

Mateen Ulhaq
fonte
Muitas das soluções fornecidas aqui estão erradas porque elas imprimem 42 quando a string é maior que a desejada e o prefixo corresponde à desejada.
FR0DDY
@froddy: E se os únicos personagens? após a sequência (é | são) uma quebra de linha? Meu mecanismo de entrada usual não se importa se a entrada é finalizada por uma quebra de linha ou não, mas produz o mesmo nos dois casos, por exemplo.
Joey
@ fR0DDY: Não havia uma definição clara de como o restante da entrada deveria ser tratado, portanto não há 'errado' aqui.
22411 PatrickhL
3
@PatrickvL Menciona 'only' se a entrada for a string especificada. Portanto abbcccddddeeeee...zzabc, não satisfaz o que eu suponho e posso ver alguns programas dando sim nessa entrada.
FR0DDY
2
@ fR0DDY: Deixe-me colocar de outra maneira: não há especificação sobre como a entrada é delimitada, portanto é aberta à interpretação. Também não há menção à codificação de caracteres (acho que a maioria de nós assume o padrão de ambiente - ANSI, UTF8 e UTF16LE serão os mais populares). Também não há menção de como a entrada é apresentada - é inserida através da entrada padrão, através de um parâmetro de linha de comando? Então você vê - ter toda essa liberdade dá lugar a alguma interpretação que você marcaria como 'incorreta', enquanto outros a julgariam 'compatível'. NOFI, mas isso é prática diária para alguns de nós.
22411 PatrickvL

Respostas:

20

Golfscript, 20

26,{.97+\{.}*}%=42`*

com nova linha, 21 caracteres (da Nabb)

26,{).[96+]*}%n+=42`*

Na verdade, a Nabb venceu a minha, aqui está a solução original para a nova linha, 22 caracteres

26,{.97+\{.}*}%n+=42`*

Isso é simplesmente gerar a string de origem e apenas compará-la com a string do stdin.

VOCÊ
fonte
3
26,{).[96+]*}%n+=42`*para 21 (incluindo nova linha).
Nabb 11/03
Heh, ele não funciona sem o n+porque o array não é plano. Você precisará manter seus 20 caracteres originais ou adicionar um ~para achatar os termos internos da matriz.
Nabb 12/03/11
@ Nabb, heheh, eu não percebi que a nova linha tornou diferente.
VOCÊ
13

Ruby 1.9, 46 42 39 caracteres

p (?a..?z).map{|a|a*$.+=1}*""==gets&&42

Supõe que a entrada não seja finalizada com uma nova linha.

Ventero
fonte
E a nova linha de gets?
steenslag
2
@steenslag: As especificações não dizem nada, pois a entrada está sendo finalizada por uma nova linha; portanto, esta solução assume que não há nenhuma.
Ventero 30/03
11

Programa C - 78 89

Editar: Não imprima 42 quando houver caracteres extras.

Assume que a entrada não possui uma nova linha à direita.

main(i,j){for(i=1;i<27;i++)for(j=i;j--;getchar()==96+i?0:exit(1));puts("42"+!!gets(&i));}

Se o prefixo não corresponder, o programa será encerrado. Se o prefixo corresponder, mas houver 1 a 3 caracteres extras, imprime 2. Caso contrário, produz um comportamento indefinido.

Isso pode reduzir um caractere, alterando exit(1)para fork(). Ah, e em uma nota não relacionada, lembre-se de salvar todos os documentos abertos, caso, por qualquer motivo , seu sistema seja bloqueado.

Joey Adams
fonte
1
Isso imprimirá 42 se a sequência for maior que a desejada e o prefixo corresponder à sequência desejada.
FR0DDY
8

PHP (60)

Supondo que a entrada seja fornecida na linha de comandos:

for(;$i<702;)$s.=chr(96.5+sqrt($i+=2));echo$s!=$argv[1]?:42;

Explicação : você pode visualizar a sequência como uma estrutura de triângulo.

j     i   val
0     0   a
1   1-2   bb
2   3-5   ccc
3   6-9   dddd
4 10-14   eeeee
5 15-20   ffffff
      ...

A linha jcomeça no índice i = j*(j+1)/2(essa é a fórmula numérica triangular). A resolução da equação quadrática resulta no índice iestar on-line j = int((sqrt(8*i+1)-1)/2)e, portanto, conter caracteres 97 + int((sqrt(8*i+1)-1)/2). O 0-350intervalo de índice nos permite simplificar isso 96.5 + sqrt(2*(i+1)), mas isso não é mais válido para valores maiores.

Editar : alternado para a entrada da linha de comando, conforme sugerido nos comentários.
Editar : usa operador condicional para salvar um personagem

sam hocevar
fonte
+1, isso funciona;) Umm, você poderia explicar como $s.=chr(96.5+sqrt($i+=2));funciona?
Clyde Lobo
Editado. Espero que isso faz sentido :-)
Sam Hocevar
for (; $ i <702;) $ s. = chr (96,5 + sqrt ($ i + = 2)); echo ($ s == $ argv [1]) * 42; Somente 61 caracteres, assumindo entrada stdin
Viper_Sb
@Viper_Sb: obrigado pela dica; Eu não tinha certeza das regras, então imitei a solução de Clyde. Eu vou com a sua sugestão.
Sam Hocevar
1
@powtac A sintaxe da linguagem não requer espaço aqui #
sam hocevar
7

Perl, 35 43

map$s.=$_ x++$a,a..z;say 42if<>~~$s

Precisa do Perl 5.10 ou posterior (executado com -E), sem nova linha na entrada.

Gostei mais do meu regex de efeitos colaterais, mas o código mais curto já falou. Aqui está como uma lembrança. Também destinado ao Perl 5.10 ou posterior, mas apenas para os recursos regex avançados / experimentais, portanto, apenas uma popção de linha de comando é necessária.

$a=a;$_=/^(??{$b++;$a++."{$b}"}){26}$/&&42
JB
fonte
Excelente. Eu tentei muito vencer esse regex w / recursivo, mas não consegui ficar abaixo de 43c. : - ((
botas de borracha
Por que é necessário dizer em $a++."{$b}"vez de apenas $a++.$b?
Timwi as
@ Timwi, porque eu preciso que essas chaves apareçam na string resultante. Eu não quero corresponder em "d4" literal, eu quero "dddd", expressa em regex "d {4}"
JB
Claro. Obrigado por explicar!
Timwi
Veio com uma solução de 33 bytes para isso! Experimente online!
Dom Hastings
7

05AB1E , 7 bytes (não concorrente)

AƶJQi42

Experimente online!

Explicação

A       push lowercase alphabet
 ƶ      lift every letter, push it and multiply it by its index
  J     join the list
   Qi   does it equal the input?
     42 push 42 and output implicitly

Apenas passando por alguns desafios para aprender 05AB1E (e golfe em geral). Esse desafio foi marcado como ativo ontem e eu encontrei uma solução curta. Por que não compartilhar? :)

Cinari
fonte
3
Bem-vindo ao PPCG!
Steadybox
6

Programa Haskell - 71 67 64 57

Não assume nenhuma nova linha à direita e também não gera uma.

f x|x==[c|c<-['a'..'z'],_<-['a'..c]]="42"
main=interact f

Uso:

$ echo -n 'abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz' | { ./42; echo; }
42
$ echo -n 'something else' | { ./42; echo; }
42: 42.hs:1:0-54: Non-exhaustive patterns in function f


$
Joey Adams
fonte
1
fwiw esse código também ainda é muito legível.
Dan Burton
1
Como zipWithpara quando chega ao final da lista mais curta, você pode substituir ['a'..'z']por ['a'..]e salvar 3 caracteres.
9137 hammar
@hammar: Obrigado. Salvei mais 1 caractere usando >> = (concatMap) em vez de concat e zipWith.
Joey Adams
@hammar: Saved ainda mais, usando a notação fazer em vez de >> = e lambda :-)
Joey Adams
2
@Joey: Ou melhor:[c|c<-['a'..'z'],_<-['a'..c]]
hammar
4

J, 29

f=:42#~((>:#a.{~97+])i.26)-:]

exemplo:

f 'oasijfiojasef'

f 23841235

f 'abbccc...'
42
Eelvex
fonte
Eu gosto de J. E acho feio e horrível. E eu gosto.
see
4

D: 94 caracteres

void f(S)(S s){S t;foreach(i;0..26)t~=array(repeat(cast(char)(i+'a'),i+1));s==t&&writeln(42);}

Mais legivelmente:

void f(S)(S s)
{
    S t;

    foreach(i; 0 .. 26)
        t ~= array(repeat(cast(char)(i + 'a'), i + 1));

    s == t && writeln(42);
}
Jonathan M Davis
fonte
3

Delphi, 164 132

Este cria uma string e a compara com o primeiro argumento da linha de comando. É mais curto e menos complicado do que minha outra submissão:

var s:string;c,i:int8;begin repeat s:=s+Char(c+97);i:=i-1;c:=c+Ord(i<0);if i<0then i:=c;until c=26;Write(42*Ord(s=ParamStr(1)));end.

(Observe que esta versão pressupõe que as variáveis ce iiniciam com 0, como é o caso na minha versão de Delphi (2010).)

Como minha outra submissão, este precisa de menos caracteres se a construção de string não ocorrer em uma função, como eu fiz antes:

Delphi, 181

program a;{$APPTYPE CONSOLE}function s(c,i:byte):string;begin if(i>0)then Exit(Char(c)+s(c,i-1));if(c<122)then Exit(s(c+1,c-95));end;begin if(s(97,1)=ParamStr(1))then Write(42);end.

Observe que a saída não precisa de uma nova linha, então WriteLn () se tornou Write ().

PatrickvL
fonte
3

PHP - 45 caracteres

Estou surpreso que ninguém tenha postado nenhuma resposta que usasse hash. É uma maneira muito eficiente de testar a string exata.

echo md5($argv[1],1)!='¯è a@ÛÚƒ:ïT�p'?:42;

É difícil copiar / colar os dados, pois existe um byte nulo no meio do código. Aqui está um hex-dump do código para fins de teste.

65 63 68 6f 20 6d 64 35 28 24 61 72 67 76 5b 31 5d 2c 31 29 21 3d 27 af e8 a0 61 40 db da 7f 11 0f 83 3a ef 54 00 70 27 3f 3a 34 32 3b

HoLyVieR
fonte
2
Esperto! Embora, tecnicamente, existam outros valores de entrada que produzam esse mesmo hash, ele não satisfaz completamente o requisito de gerar 42 somente se a entrada estiver no formato especificado.
mellamokb
3

Scala 79

 if((for(i <- 1 to 26;j<-1 to i)yield(96+i).toChar).mkString==args(0))print(42)
Lalith
fonte
3

Pyth, 14

*42qzsm*dhxGdG

Apenas constrói a sequência necessária, depois se compara com a entrada e multiplica por 42.

isaacg
fonte
'compara com a entrada e multiplica por 42.' nunca teria pensado nisso sozinho. Você acabou de me ajudar a raspar 1 caractere da minha solução. Obrigado.
precisa saber é o seguinte
Argh, cheguei tarde demais. Você pode explicar como isso funciona? A função mme causa problemas ...
Jim
1
@ Jim Começamos com a função map m, que aplica uma função a cada elemento de sua entrada. A entrada é G, o alfabeto. xGdencontra a posição de d, o caractere no alfabeto, no Galfabeto. haumenta isso em um e *dreplica o caractere assim muitas vezes. Fora da mfunção, scombina a lista resultante de seqüências de caracteres em uma única sequência e qzverifica se o resultado é igual à entrada. Os booleanos são representados como 0se False e 1se true, *42resultando em um valor de 42se True e 0se False.
Isaacg
3

Brachylog (2), 15 bytes, desafio de pós-datas de idiomas

⊇Ạ∧?o?ọtᵐ~⟦₁+₁₆

Experimente online!

E agora, uma resposta que funcione segundo um princípio completamente diferente do mais visto aqui. Este é um envio de função (a pergunta não especifica que tipo de envio é desejado, mas as funções são permitidas por padrão).

Explicação

Essa resposta funciona definindo um tipo de sequência: as que: a) contêm todas as letras minúsculas do alfabeto; b) estão na ordem de classificação; ec) para as quais tomar o número de ocorrências de cada caractere na sequência produz uma sequência consecutiva. números inteiros a partir de 1. (Deve ficar claro que existem muitas dessas strings, mas a que queremos para casos especiais é a mais curta.) Então, se a string atender a esses critérios, adicionaremos 16 ao número de caracteres distintos no corda; isso produzirá 42 se a string for a que a pergunta nos pede para casos especiais e pelo menos 43 em todos os outros casos. (Se a sequência falhar em algum dos critérios da categoria, a função terminará em falha, o que é como lançar uma exceção.)

Veja como interpretar o código fonte:

⊇Ạ∧?o?ọtᵐ~⟦₁+₁₆
⊇Ạ               {the input} contains all lowercase letters
  ∧              and
   ?o?           the input sorts to itself
                 {and; implied when two conditions overlap}
     ?ọ          the {character, number of occurrences} pairs for the input
       tᵐ        when the second element of each is taken
         ~       create an output that could have been produced by
          ⟦₁     outputting the list of integers from 1 to some input inclusive;
            +₁₆  add 16 to that input {and output it}

fonte
3

R, 60 58

if(readline()==paste0(rep(letters,1:26),collapse=""))cat(42)

if(scan(,"")==paste(rep(letters,1:26),collapse=""))cat(42)

Obrigado pela sugestão de @giusppe

Kun Ren
fonte
Eu acho que pasteestá bem aqui, e você pode usar em scan(,"")vez de readline().
Giuseppe
2

Python (84)

Pressupõe uma nova linha à direita no final da entrada.

sys de importação
if ''. join (c * chr (c + 96) para c no intervalo (27)) + '\ n' == sys.stdin.read (): print 42
Hoa Long Tam
fonte
1
Por que não usar raw_input, em vez sys.stdin.read?
1013 Juan Juan
1
@ Juan: raw_inputlê apenas uma linha; Eu não tinha certeza se "a entrada" seria sempre uma única linha ou se poderia haver entrada desqualificante nas linhas posteriores.
Hoa Long Tam
2

Python - 62 caracteres

print("".join(x*chr(x+96) for x in range(27))==raw_input())*42
mordedor
fonte
2
Poderia ser encurtado em Python 3: print("".join(x*chr(x+96)for x in range(27))==input())*42.
mbomb007
2

Perl, 49 46 caracteres

para ser usado em um programa, não na linha de comando

$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'

join('',map$_ x++$x,'a'..'z')eq pop&&print'42'

Saudações

rbo

Editar: Idéia extraída de Ventero

botas de borracha
fonte
2

PHP 92 88 87 caracteres

function _($a){for($i=97;$i<123;$i++)for($j=$i-96;$j;$j--)$b.=chr($i);echo($b==$a)*42;}

EDITAR

Substituído $j<0por $je return $b==$a?42:0;porecho $b==$a?42:0;

Substituído echo $b==$a?42:0;porecho($b==$a)*42;

Clyde Lobo
fonte
2
Poderia ter 80 caracteres se não fosse por todos os malditos cifrões.
Joey Adams
Veja também minha entrada para uma solução de loop único.
Sam Hocevar
2

ECLiPSe Prolog - 173

c(_,[],_):-!. c(A,M,N):-length(L,N),checklist('='(A),L),append(F,L,M),P is N-1,B is A-1,c(B,F,P). ?- read_string(end_of_file,351,S),string_list(S,L),c(122,L,26),writeln(42).
coredump
fonte
2

JavaScript (91 93 94 98 102 116 )

Uso:, a('string')retorna 42se válido de acordo com as especificações, ou 0.

function a(z){for(i=r='';i++<26;)for(j=i;j--;)r+=String.fromCharCode(i+96);return(z==r)*42}

http://jsfiddle.net/g25M3/6/

Edit : Removido vare eliminado dois espaços no for (.

Editar 2 : alterado j>0para je

  1. return (z==r)?42:0; para
  2. return z==r?42:0

Editar 3 : Inicializar icom i='', alterar

  1. (z==r)?42:0 para
  2. (z==r)*42

Editar 4 : Alterar

  1. for(;i<27;i++) para
  2. while(i++<26)

Editar 5 : Alterar

  1. i=r='';while(i++<26) para
  2. for(i=r='';i++<26;) e
  3. for(j=i;j;j--) para
  4. for(j=i;j--;)
mellamokb
fonte
Bem, você pode reduzir mais 12 caracteres se você não usar varpara declarar variáveis;)
Clyde Lobo
@Clyde: Obrigado! Também achei que eu poderia remover o espaço entre eles for (.
precisa saber é o seguinte
Sim, estava prestes a sugerir o mesmo;) Ah, e eu codificados uma solução em PHP usando a mesma lógica que o seu
Clyde Lobo
Você pode salvar outros 2 caracteres substituindo return(z==r)?42:0;porreturn z==r?42:0
Clyde Lobo
j>0poderia ser apenas jeu acho.
VOCÊ
2

JavaScript 1.8, 99 caracteres

function c(x)(x.replace(/([a-z])\1*/g,function(m)!(a-m.length)*m.charCodeAt(0)-96-a++,a=1)==0)*a+15

Eu desafio você a entender isso :)

Casey Chu
fonte
2

PHP - 59

Assume que pelo menos 1 entrada é fornecida sobre cli

echo md5($argv[1])!='afe8a06140dbda7f110f833aef540070'?:42;

Funciona mais ou menos, exceto que o md5 is pode tecnicamente ter duplicações com o hash algo.

sintaxe
fonte
2

PowerShell v2 +, 47 bytes

42*(-join(1..26|%{,[char]($_+96)*$_})-ceq$args)

Constrói um intervalo 1..26, alimenta isso através de um loop com |%{...}. A cada iteração, usamos o operador vírgula para construir uma matriz literal da corrente [char]multiplicada pelo número do loop atual. Nós, então, -jointodos juntos para construir a string abbcccdddd...e, em seguida, usamos uma -ceqcomparação que diferencia maiúsculas de minúsculas em relação a nossa entrada $args, o que resultará em um $TRUEou outro $FALSE. No PowerShell, os valores booleanos podem ser convertidos implicitamente como 1ou 0, respectivamente, o que acontece aqui com o 42*. Será impressa 42se a entrada for abbccc...zzzzzzzzzzzzzzzzzzzzzzzzzze sairá em 0contrário.

AdmBorkBork
fonte
você pode salvar um byte :) Experimente online!
mazzy 04/04
2

K, 26 bytes

{(::;42)x~,/(1+!26)#'.Q.a}
{(::;42)x~,/(1+!26)#'.Q.a}"hello"
{(::;42)x~,/(1+!26)#'.Q.a}"abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz"
42

obrigado

Chromozorz
fonte
{$[x~.Q.a@&1+!26;42;]}por 22 bytes.
Streetster 11/11
1
42*(&!27)~-96+"j"$por 18 bytes (portando minha resposta ok ).
Streetster
2

VBA 91

Não havia respostas do VBA, mas isso funciona:

Function f(t)
    For i = 1 To 26
        o = o & String(i, Chr(i + 96))
    Next
    f = -42 * (t = o)
End Function
OSG
fonte
É realmente impossível remover algum espaço em branco disso?
Esolanging Fruit
1
Versão condensada, 61 bytes -o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
Taylor Scott
@ Challenger5 Não, não é impossível. O comentário de Taylor sobre Scott é exatamente isso. Ele é executado na Janela Imediata e pega o valor da célula A1como entrada.
Engenheiro Toast
2

APL (Dyalog) , 18 17 bytes

42/⍨⍞≡819⌶⎕A/⍨⍳26

Experimente online!

Quatro bytes óbvios podem ser salvos se for permitido usar letras maiúsculas.

42 42.

/⍨ se (literalmente replicado por)

 entrada de caracteres

 é idêntico a

819⌶ as minúsculas

⎕AUm alfabeto

/⍨ replicado por

 um a

26 26

Adão
fonte
1

Clojure - 61 caracteres

(fn[a](if(=(mapcat #(repeat%(char(+% 96)))(range 1 27))a)42))

Explora os seguintes fatos:

  • Clojure pode interpretar qualquer string automaticamente como uma sequência de caracteres
  • Eu posso usar o intervalo de números de 1 a 26 para criar os caracteres e repeti-los o número correto ou as vezes para gerar a entrada "correta"
Mikera
fonte
economizaria 6 caracteres se o Clojure permitisse nested # () s ..... solicitação de recurso importante para o Clojure 1.4, eu acho!
Mikera #
1

Javascript 144

Provavelmente pode ser significativamente melhorado, a recursão sempre foi um problema para mim.

Comprimido

function r(a,b,d,c){c++;if(b<d)a+=r(a,b+1,d,c);for(i=0;i<c;i++)a=String.fromCharCode(b)+a;return a}function q(a){if(q==r(a,97,122,0))return 42};

Menos comprimido

function r(s, c, x, w){        
    w++;
    if(c < x)
        s += r(s, c + 1, x, w);
    for(i = 0; i < w; i++)
        s = String.fromCharCode(c) + s;              
    return s;
}
function q(z){
    if(q==r(z,97, 122, 0))
        return 42;            
}

alert(q("rgrg"));
Tom Gullen
fonte
1

Delphi, 127

var b:Char;c,i:Int8;begin repeat if i<0then i:=c;Read(b);if c+97<>Ord(b)then Exit;i:=i-1;c:=c+Ord(i<0)until i=27;Write(42);end.

Este lê a string da entrada, compara-a como está, escreve 42 quando a entrada corresponde até a última z.

Delphi, 157

var b:pchar;c,i:byte;begin b:=CmdLine+85;c:=97;i:=1;repeat Inc(b);if b^<>Char(c)then Exit;Dec(i);if i>0then Continue;c:=c+1;i:=c-96;until i=27;Write(42);end.

Delphi, 188

program a;{$APPTYPE CONSOLE}var b:pchar;c,i:byte;begin b:=CmdLine+85;c:=97;i:=1;repeat Inc(b);if(b^<>Char(c))then Exit;Dec(i);if(i>0)then Continue;c:=c+1;i:=c-96;until(i=27);Write(42);end.

Esta versão não usa uma função, que salva alguns caracteres quando comparada à versão anterior desta técnica:

Delphi, 213

program a;{$APPTYPE CONSOLE}function t(b:pchar;c,i:byte):byte;begin repeat Inc(b);if(b^<>Char(c))then Exit(0);Dec(i);if(i>0)then Continue;c:=c+1;i:=c-96;until(i=27);t:=42;end;begin WriteLn(t(CmdLine+77,97,1));end.

É um pouco longo, principalmente porque as palavras-chave longas do Delphi e a necessidade de inicializar aplicativos de console antes que eles possam escrever a saída.

Observe também que eu incrementei o CmdLine em 77 caracteres, pois esse era o deslocamento necessário para pular o meu caminho executável local (o Delphi não possui ponteiro de argumento direto). Ajuste para corresponder à sua própria configuração (pode levar a 1 caractere a menos quando o deslocamento for <10).

PatrickvL
fonte
Você pode definir o tipo de aplicativo em ProjectOptions / DelphiCompiler / Linking / GenerateConsoleApplication. Além disso, você pode omitir a program a;linha. E os suportes ao redor b^<>Char(c), i>0e i=27podem ser removidos.
Wouter van Nifterick 31/03
@Wouter van Nifterick: Obrigado pelas sugestões, eu também as aplicarei a meus outros envios. (Eu nem sabia que if i>0thenseria compilar!)
PatrickvL