Risposta alla vita l'universo e tutto


46

Compito

Data una stringa come input, il tuo compito è quello di produrre 42 solo se l'input String sembra essere esattamente il seguente:

abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz

Può generare qualsiasi altro valore, produrre un errore o non emetterlo affatto, se l'input non è uguale alla stringa sopra menzionata.


Criterio vincente

Questo è , quindi vince il codice più corto in byte!


Molte delle soluzioni fornite qui sono errate perché stampano 42 quando la stringa è più lunga della stringa desiderata e il prefisso corrisponde alla stringa desiderata.
fR0DDY

@froddy: cosa succede se gli unici personaggi? seguire la stringa (è | are) un'interruzione di riga? Al mio solito meccanismo di input non importa se l'input è terminato da un'interruzione di linea o meno, ma produce lo stesso in entrambi i casi, ad esempio.
Joey,

@ fR0DDY: non c'era una definizione chiara su come gestire il resto dell'input, quindi non c'è 'errore' qui.
PatrickvL

3
@PatrickvL Indica 'solo' se l'input è la stringa data. Quindi abbcccddddeeeee...zzabcnon so che suppongo e posso vedere alcuni programmi che danno sì su quell'input.
fR0DDY,

2
@ fR0DDY: Vorrei dirlo in un altro modo: non ci sono specifiche su come delimitare l'input, quindi è aperto all'interpretazione. Inoltre non si fa menzione della codifica dei caratteri (immagino che la maggior parte di noi presuma il default del proprio ambiente - ANSI, UTF8 e UTF16LE saranno i più popolari). Inoltre, non viene menzionato il modo in cui viene presentato l'input: viene immesso tramite l'input standard, tramite un parametro della riga di comando? Quindi vedi: avere tutta questa libertà lascia spazio a qualche interpretazione che considereresti "errata", mentre altri la giudicherebbero "conforme". NOFI, ma questa è una pratica quotidiana per alcuni di noi.
PatrickvL

Risposte:


20

Golfscript, 20

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

con nuova linea, 21 caratteri (di Nabb)

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

In realtà Nabb ha battuto il mio, ecco la soluzione originale per con la nuova linea, 22 caratteri

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

Questo sta semplicemente generando una stringa di origine e la sta semplicemente confrontando con una stringa di stdin.


3
26,{).[96+]*}%n+=42`*per 21 (inc newline).
Nabb,

Heh, non funziona senza il n+perché l'array non è piatto. Dovrai mantenere i 20 caratteri originali o aggiungere un ~per appiattire i termini interni dell'array.
Nabb,

@Nabb, heheh, non avevo realizzato che Newline lo rendesse diverso.
TU

13

Ruby 1.9, 46 42 39 caratteri

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

Presuppone che l'input non sia terminato con una nuova riga.


E la newline di ottiene?
steenslag,

2
@steenslag: Le specifiche non dicono nulla che l'input sia terminato da una nuova riga, quindi questa soluzione presuppone che non ce ne sia.
Ventero

11

Programma C - 78 89

Modifica: non stampare 42 in presenza di caratteri extra.

Presuppone che l'input non abbia una nuova riga finale.

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

Se il prefisso non corrisponde, il programma viene chiuso. Se il prefisso corrisponde ma sono presenti circa 1-3 caratteri extra, stampa 2. In caso contrario, produce un comportamento indefinito.

Questo può essere abbreviato di un personaggio cambiando exit(1)in fork(). Oh, e su una nota non correlata, ricordati di salvare eventuali documenti aperti nel caso, per qualsiasi motivo , il tuo sistema si blocca.


1
Questo stamperà 42 se la stringa è più lunga della stringa desiderata e il prefisso corrisponde alla stringa desiderata.
fR0DDY

8

PHP (60)

Supponendo che l'input sia fornito nella riga di comando:

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

Spiegazione : è possibile visualizzare la stringa come una struttura a triangolo.

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
      ...

La linea jinizia dall'indice i = j*(j+1)/2(questa è la formula numerica triangolare). Risolvendo l'equazione quadratica, l'indice iè in linea j = int((sqrt(8*i+1)-1)/2)e quindi contiene carattere 97 + int((sqrt(8*i+1)-1)/2). L' 0-350intervallo dell'indice ci consente di semplificare ciò 96.5 + sqrt(2*(i+1)), ma ciò non vale più per valori più grandi.

Modifica : passa all'input della riga di comando come suggerito nei commenti.
Modifica : utilizza un operatore condizionale per salvare un personaggio


+1, che funziona;) Umm potresti per favore elaborare come $s.=chr(96.5+sqrt($i+=2));funziona?
Clyde Lobo

Modificato. Spero abbia senso :-)
sam hocevar

for (; $ i <702;) $ s = chr (96,5 + sqrt ($ i + = 2)),. echo ($ s == $ argv [1]) * 42; Solo 61 caratteri, presupponendo input stdin
Viper_Sb

@Viper_Sb: grazie per il suggerimento; Non ero sicuro delle regole, quindi imitavo la soluzione di Clyde. Vado con il tuo suggerimento.
Sam Hocevar,

1
@powtac la sintassi del linguaggio non richiede uno spazio qui
sam hocevar

7

Perl, 35 43

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

Richiede Perl 5.10 o successivo (funziona con -E), nessuna nuova riga in input.

Mi è piaciuto il mio regex effetti collaterali meglio, ma il codice più breve ha parlato. Qui è come un souvenir. Destinato anche a Perl 5.10 o versioni successive, ma solo per le funzionalità regex avanzate / sperimentali, quindi pè necessaria solo un'opzione da riga di comando.

$a=a;$_=/^(??{$b++;$a++."{$b}"}){26}$/&&42

Eccellente. Ho provato a battere questo regex ricorsivo ma non sono riuscito a scendere sotto 43c. : - ((
stivali di gomma

Perché è necessario dire $a++."{$b}"invece che solo $a++.$b?
Timwi

@ Timwi perché ho bisogno di quelle parentesi graffe per apparire nella stringa risultante. Non voglio abbinare letteralmente "d4", voglio "dddd", espresso come regex "d {4}"
JB

Ovviamente. Grazie per aver spiegato!
Timwi,

È venuto con una soluzione a 33 byte per questo! Provalo online!
Dom Hastings,

7

05AB1E , 7 byte (non concorrenti)

AƶJQi42

Provalo online!

Spiegazione

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

Sto solo affrontando alcune sfide per imparare 05AB1E (e giocare a golf in generale). Questa sfida è stata contrassegnata come attiva ieri e ho trovato una soluzione breve, quindi perché non condividerla? :)


3
Benvenuti in PPCG!
Steadybox

6

Programma Haskell - 71 67 64 57

Presuppone che non ci sia nuova riga finale e non ne genera nemmeno una.

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


$

1
anche questo codice è ancora molto leggibile.
Dan Burton,

1
Poiché si zipWitharresta quando raggiunge la fine dell'elenco più breve, è possibile sostituire ['a'..'z']con ['a'..]e salvare 3 caratteri.
Hammar,

@hammar: grazie. Ho salvato un altro carattere utilizzando >> = (concatMap) al posto di concat e zipWith.
Joey Adams,

@hammar: salvato ancora di più usando do notation invece di >> = e lambda :-)
Joey Adams,

2
@Joey: O ancora meglio:[c|c<-['a'..'z'],_<-['a'..c]]
hammar,

4

J, 29

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

esempio:

f 'oasijfiojasef'

f 23841235

f 'abbccc...'
42

Mi piace J. E lo trovo brutto e orribile. E mi piace.
Seequ,

4

D: 94 personaggi

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

Più leggibilmente:

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

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

    s == t && writeln(42);
}

3

Delfi, 164 132

Questo crea una stringa e la confronta semplicemente con il primo argomento della riga di comando. È più breve e meno complicato dell'altra mia presentazione:

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.

(Si noti che questa versione presuppone che le variabili ce iinizino inizializzate su 0, come nel caso della mia versione di Delphi (2010).)

Come la mia altra presentazione, questa richiede meno caratteri se la creazione di stringhe non avviene in una funzione, come ho fatto prima:

Delfi, 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.

Nota che l'output non ha bisogno di una nuova riga, quindi WriteLn () è diventato Write ().


3

PHP - 45 caratteri

Sono sorpreso che nessuno abbia pubblicato alcuna risposta che utilizzava l'hashing. È un modo efficace di dimensioni molto grandi per testare la stringa esatta.

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

I dati sono piuttosto difficili da copiare / incollare poiché c'è un byte null nel mezzo del codice. Ecco un dump esadecimale del codice a scopo di test.

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


2
Intelligente! Sebbene poiché ci sono tecnicamente altri valori di input che producono questo stesso hash, non soddisfa del tutto il requisito di produrre 42 solo se l'input è nel formato specificato.
mellamokb,

3

Scala 79

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

3

Pyth, 14

*42qzsm*dhxGdG

Costruisce semplicemente la stringa necessaria, quindi confronta con l'input e si moltiplica per 42.


'confronta con l'input e si moltiplica per 42.' non ci avrei mai pensato da solo. Mi aiuti a radere 1 carattere dalla mia soluzione. Grazie.
AndoDaan,

Argh, sono arrivato troppo tardi. Puoi spiegare come funziona? La funzione mmi causa problemi ...
Jim,

1
@Jim Iniziamo con la funzione map m, che applica una funzione a ciascun elemento del suo input. L'input è G, l'alfabeto. xGdtrova la posizione di d, il carattere dell'alfabeto, in G, l'alfabeto. haumenta quello di uno e *dreplica il personaggio così tante volte. Al di fuori della mfunzione, scombina l'elenco risultante di stringhe in una singola stringa, quindi qzcontrolla se il risultato è uguale all'input. I booleani sono rappresentati come 0falsi e 1se veri, quindi il *42risultato è 42se vero e 0falso.
isaacg

3

Brachylog (2), 15 byte, sfida postdatati in lingua

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

Provalo online!

E ora una risposta che funziona secondo un principio completamente diverso da quello più visto qui. Si tratta di un invio di funzione (la domanda non specifica quale tipo di invio sia desiderato, ma le funzioni sono consentite per impostazione predefinita).

Spiegazione

Questa risposta funziona definendo una sorta di stringa: quelle che a) contengono tutte le lettere minuscole dell'alfabeto, b) sono in ordine, ec) per le quali prendere il numero di occorrenze di ciascun carattere nella stringa produce una sequenza di numeri interi a partire da 1. (Dovrebbe essere chiaro che ci sono molte di queste stringhe, ma quella che vogliamo in caso speciale è la più breve.) Quindi se la stringa soddisfa questi criteri, aggiungeremo 16 al numero di caratteri distinti nel corda; questo produrrà 42 se la stringa è quella che la domanda ci pone nel caso speciale, e almeno 43 in tutti gli altri casi. (Se la stringa non soddisfa nessuno dei criteri per appartenere alla categoria, la funzione terminerà con un errore, che è un po 'come lanciare un'eccezione.)

Ecco come interpretare il codice sorgente:

⊇Ạ∧?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}

3

R, 60 58

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

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

Grazie per il suggerimento di @giusppe


Penso che pastequi vada bene, e puoi usare scan(,"")invece di readline().
Giuseppe,

2

Python (84)

Presuppone una nuova riga finale alla fine dell'input.

import sys
if ''. join (c * chr (c + 96) for c in range (27)) + '\ n' == sys.stdin.read (): stampa 42

1
Perché non usare raw_inputinvece sys.stdin.read?
Juan

1
@Juan: raw_inputlegge solo una riga; Non ero sicuro che "l'input" sarebbe sempre una singola riga o se ci potesse essere squalifica dell'input nelle righe successive.
Hoa Long Tam

2

Python - 62 caratteri

print("".join(x*chr(x+96) for x in range(27))==raw_input())*42

2
Potrebbe essere più breve in Python 3: print("".join(x*chr(x+96)for x in range(27))==input())*42.
mbomb007,

2

Perl, 49 46 caratteri

da utilizzare in un programma, non sulla riga di comando

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

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

Saluti

RBO

Modifica: Idea strappata da Ventero


2

PHP 92 88 87 caratteri

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

MODIFICARE

Sostituito $j<0con $je return $b==$a?42:0;conecho $b==$a?42:0;

Sostituito echo $b==$a?42:0;conecho($b==$a)*42;


2
Potrebbero essere 80 caratteri se non fosse per tutti i pazzi segni del dollaro.
Joey Adams,

Vedi anche la mia voce per una soluzione a loop singolo.
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).

2

JavaScript (91 93 94 98 102 116 )

Utilizzo:, a('string')restituisce 42se valido secondo le specifiche, oppure 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/

Modifica : rimossi vared eliminati due spazi in for (.

Modifica 2 : modificato j>0in je

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

Modifica 3 : Inizializza icon i='', cambia

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

Modifica 4 : Cambia

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

Modifica 5 : Cambia

  1. i=r='';while(i++<26) per
  2. for(i=r='';i++<26;) e
  3. for(j=i;j;j--) per
  4. for(j=i;j--;)

Bene, puoi ridurre altri 12 caratteri se non usi varper dichiarare le variabili;)
Clyde Lobo

@Clyde: grazie! Ho anche scoperto che potevo rimuovere lo spazio tra for (.
mellamokb

Sì, stavo per suggerire lo stesso;) Oh e io abbiamo codificato una soluzione in PHP usando la stessa logica della tua
Clyde Lobo

Puoi salvare altri 2 caratteri sostituendoli return(z==r)?42:0;conreturn z==r?42:0
Clyde Lobo

j>0potrebbe essere solo jpenso.
TU

2

JavaScript 1.8, 99 caratteri

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

Ti sfido a dare un senso :)


2

PHP - 59

Presuppone che sia fornito almeno 1 input su cli

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

Funziona più o meno, tranne per il fatto che md5 può tecnicamente avere duplicazioni con l'algoritmo di hashing.


2

PowerShell v2 +, 47 byte

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

Costruisce un intervallo 1..26, lo alimenta attraverso un ciclo con |%{...}. Ogni iterazione che usiamo l' operatore virgola per costruire un array letterale della corrente [char]moltiplicato per il numero di loop corrente. Quindi, -jointutti insieme per costruire la stringa abbcccdddd...e quindi utilizzare un -ceqconfronto sensibile al maiuscolo / minuscolo rispetto al nostro input $args, che si tradurrà in uno $TRUEo $FALSE. In PowerShell, i valori booleani possono essere implicitamente espressi come 1o 0, rispettivamente, che è ciò che accade qui con 42*. Stampa 42se l'input è abbccc...zzzzzzzzzzzzzzzzzzzzzzzzzze verrà emesso 0altrimenti.


potresti salvare un byte :) Provalo online!
mazzy

2

K, 26 byte

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

Grazie


{$[x~.Q.a@&1+!26;42;]}per 22 byte.
streetster

1
42*(&!27)~-96+"j"$per 18 byte (porting della mia risposta oK ).
stradinaio

2

VBA 91

Non c'erano risposte VBA ma questo funziona:

Function f(t)
    For i = 1 To 26
        o = o & String(i, Chr(i + 96))
    Next
    f = -42 * (t = o)
End Function

È davvero impossibile rimuovere qualsiasi spazio bianco da questo?
Esolanging Fruit

1
Versione condensata, 61 byte -o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
Taylor Scott

@ Challenger5 No, non è impossibile. Il commento di Taylor a Scott è esattamente questo. Funziona nella finestra immediata e prende il valore dalla cella A1come input.
Ingegnere Toast,

2

APL (Dyalog) , 18 17 byte

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

Provalo online!

Quattro byte ovvi possono essere salvati se ci è permesso usare maiuscole.

42 42

/⍨ if (lit. replicato da)

 input di caratteri

 è identico a

819⌶ il minuscolo

⎕AUn alfabeto

/⍨ replicato da

 uno attraverso

26 26


1

Clojure - 61 caratteri

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

Sfrutta i seguenti fatti:

  • Clojure può interpretare automaticamente qualsiasi stringa come una sequenza di caratteri
  • Posso usare l'intervallo di numeri da 1 a 26 sia per creare i caratteri che per ripeterli il numero o le volte corretti per generare l'input "corretto"

salverebbe 6 caratteri se Clojure permettesse n # () s nidificati ... importante richiesta di funzionalità per Clojure 1.4 Penso!
Mikera,

1

Javascript 144

Probabilmente può essere notevolmente migliorato, la ricorsione è sempre stata un vantaggio per me.

compressa

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};

Meno compresso

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"));

1

Delfi, 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.

Questo legge la stringa dall'input, la confronta mentre procede, scrive 42 quando l'input corrisponde fino all'ultimo z.

Delfi, 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.

Delfi, 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.

Questa versione non utilizza una funzione, che consente di salvare alcuni caratteri rispetto alla versione precedente di questa tecnica:

Delfi, 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.

Purtroppo un po 'lungo, soprattutto perché le lunghe parole chiave di Delphi e la necessità di inizializzare le applicazioni della console prima che possano scrivere l'output.

Nota anche che ho incrementato CmdLine di 77 caratteri, dato che era l'offset di cui avevo bisogno per saltare il mio percorso eseguibile locale (Delphi non ha un puntatore di argomento diretto). Regola in modo che corrisponda alla tua configurazione (potrebbe portare a 1 carattere in meno quando offset <10).


È possibile impostare il tipo di applicazione in ProjectOptions / DelphiCompiler / Linking / GenerateConsoleApplication. Inoltre, puoi omettere la program a;linea. E le staffe intorno b^<>Char(c), i>0e i=27possono essere rimossi.
Wouter van Nifterick,

@Wouter van Nifterick: Grazie per i suggerimenti, li applicherò anche alle altre mie osservazioni. (Non sapevo nemmeno che si if i>0thensarebbe compilato!)
PatrickvL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.