Respuesta a la vida el universo y todo

46

Tarea

Dada una Cadena como entrada, su tarea es generar 42 solo si la Cadena de entrada es exactamente la siguiente:

abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz

Puede generar cualquier otro valor, producir un error o no generar ningún resultado, si la entrada no es igual a la Cadena mencionada anteriormente.


Criterio ganador

Este es el , por lo que gana el código más corto en bytes.

Mateen Ulhaq
fuente
Muchas de las soluciones proporcionadas aquí son incorrectas porque imprimen 42 cuando la cadena es más larga que la cadena deseada y el prefijo coincide con la cadena deseada.
fR0DDY
@froddy: ¿Qué pasa si los únicos personajes? siguiendo la cadena (es | son) un salto de línea? A mi mecanismo de entrada habitual no le importa si la entrada se termina con un salto de línea o no, pero produce el mismo en ambos casos, por ejemplo.
Joey
@ fR0DDY: No había una definición clara sobre cómo se debe manejar el resto de la entrada, por lo que aquí no hay un "error".
PatrickvL
3
@PatrickvL Menciona 'solo' si la entrada es la cadena dada. Por abbcccddddeeeee...zzabclo tanto , no satisface lo que supongo y puedo ver algunos programas que dan un sí en esa entrada.
fR0DDY
2
@ fR0DDY: Permítanme decirlo de otra manera: no hay una especificación sobre cómo se delimita la entrada, por lo que está abierto a interpretación. Tampoco se menciona la codificación de caracteres (supongo que la mayoría de nosotros supone el valor predeterminado de su entorno: ANSI, UTF8 y UTF16LE serán los más populares). Tampoco se menciona cómo se presenta la entrada: ¿se ingresa a través de la entrada estándar, a través de un parámetro de línea de comandos? Como puede ver, tener toda esta libertad da paso a alguna interpretación que marcaría como 'incorrecta', mientras que otros la juzgarían 'conforme'. NOFI, pero esta es una práctica diaria para algunos de nosotros.
PatrickvL

Respuestas:

20

Golfscript, 20

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

con nueva línea, 21 caracteres (por Nabb)

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

En realidad, Nabb venció al mío, aquí hay una solución original para una nueva línea, 22 caracteres

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

Esto es simplemente generar una cadena de origen y solo compararlo con la cadena de stdin.


fuente
3
26,{).[96+]*}%n+=42`*para 21 (inc. nueva línea).
Nabb
Je, no funciona sin el n+porque la matriz no es plana. Tendrás que mantener tus 20 caracteres originales o agregar un ~para aplanar los términos internos de la matriz.
Nabb
@Nabb, jeje, no me di cuenta de que Newline lo hacía diferente.
USTED
13

Ruby 1.9, 46 42 39 caracteres

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

Asume que la entrada no termina con una nueva línea.

Ventero
fuente
¿Qué pasa con la nueva línea de gets?
steenslag
2
@steenslag: Las especificaciones no dicen nada si la entrada termina con una nueva línea, por lo que esta solución supone que no hay ninguna.
Ventero
11

Programa C - 78 89

Editar: no imprima 42 cuando haya caracteres adicionales.

Asume que la entrada no tiene una nueva línea final.

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

Si el prefijo no coincide, el programa se cierra. Si el prefijo coincide pero hay 1-3 caracteres adicionales, imprime 2. De lo contrario, produce un comportamiento indefinido.

Esto puede hacerse un carácter más corto cambiando exit(1)a fork(). Ah, y en una nota no relacionada, recuerde guardar todos los documentos abiertos en caso de que, por cualquier razón , su sistema se bloquee.

Joey Adams
fuente
1
Esto imprimirá 42 si la cadena es más larga que la cadena deseada y el prefijo coincide con la cadena deseada.
fR0DDY
8

PHP (60)

Suponiendo que la entrada se proporciona en la línea de comandos:

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

Explicación : puede ver la cadena como una estructura triangular.

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 línea jcomienza en el índice i = j*(j+1)/2(esa es la fórmula del número triangular). Resolver la ecuación cuadrática da como resultado que el índice iesté en línea j = int((sqrt(8*i+1)-1)/2)y, por lo tanto, contenga caracteres 97 + int((sqrt(8*i+1)-1)/2). El 0-350rango del índice nos permite simplificar eso 96.5 + sqrt(2*(i+1)), pero eso ya no es válido para valores más grandes.

Editar : se cambió a la entrada de línea de comandos como se sugiere en los comentarios.
Editar : utiliza un operador condicional para guardar un personaje

sam hocevar
fuente
+1, eso funciona;) Umm, ¿podrías explicar cómo $s.=chr(96.5+sqrt($i+=2));funciona?
Clyde Lobo
Editado Espero que tenga sentido :-)
sam hocevar
para (; $ i <702;) $ s. = chr (96.5 + sqrt ($ i + = 2)); echo ($ s == $ argv [1]) * 42; Solo 61 caracteres, suponiendo entrada estándar
Viper_Sb
@Viper_Sb: gracias por la pista; No estaba seguro de las reglas, así que imité la solución de Clyde. Iré con tu sugerencia.
sam hocevar
1
@powtac la sintaxis del idioma no requiere un espacio aquí
sam hocevar
7

Perl, 35 43

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

Necesita Perl 5.10 o posterior (ejecutar con -E), no hay línea nueva en la entrada.

Me gustó más mi expresión regular de efectos secundarios, pero el código más corto ha hablado. Aquí está como recuerdo. También destinado a Perl 5.10 o posterior, pero solo para las funciones avanzadas / experimentales de expresiones regulares, por lo que solo pse necesita una opción de línea de comandos.

$a=a;$_=/^(??{$b++;$a++."{$b}"}){26}$/&&42
JB
fuente
Excelente. Intenté superar esta expresión regular recursiva pero no pude llegar a menos de 43c. : - ((
botas de goma el
¿Por qué es necesario decir en $a++."{$b}"lugar de solo $a++.$b?
Timwi
@Timwi porque necesito esas llaves para aparecer en la cadena resultante. No quiero coincidir con el literal "d4", quiero "dddd", expresado como expresión regular "d {4}"
JB
Por supuesto. ¡Gracias por la explicación!
Timwi
Se le ocurrió una solución de 33 bytes para esto. Pruébalo en línea!
Dom Hastings
7

05AB1E , 7 bytes (no competitivos)

AƶJQi42

Pruébalo en línea!

Explicación

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

Solo atravesamos algunos desafíos para aprender 05AB1E (y jugar al golf en general). Este desafío fue marcado como activo ayer y encontré una solución corta, entonces ¿por qué no compartir? :)

Cinari
fuente
3
Bienvenido a PPCG!
Steadybox
6

Programa Haskell - 71 67 64 57

Asume que no hay una nueva línea final y tampoco genera 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


$
Joey Adams
fuente
1
Además, este código también es muy legible.
Dan Burton
1
Dado que zipWithse detiene al llegar al final de la lista más corta, se puede reemplazar ['a'..'z']con ['a'..]y guardar 3 caracteres.
hammar
@hammar: Gracias. Ahorré 1 char más usando >> = (concatMap) en lugar de concat y zipWith.
Joey Adams
@hammar: ahorró aún más usando la notación do en lugar de >> = y lambda :-)
Joey Adams
2
@Joey: O incluso mejor:[c|c<-['a'..'z'],_<-['a'..c]]
hammar
4

J, 29

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

ejemplo:

f 'oasijfiojasef'

f 23841235

f 'abbccc...'
42
Eelvex
fuente
Me gusta J. Y lo encuentro feo y horrible. Y me gusta.
seequ
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);}

Más legible:

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
fuente
3

Delphi, 164 132

Este construye una cadena y simplemente la compara con el primer argumento de línea de comando. Es más corto y menos complicado que mi otro enví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.

(Tenga en cuenta que esta versión supone que las variables cy icomienzan inicializadas en 0, como es el caso en mi versión de Delphi (2010)).

Al igual que mi otro envío, este necesita menos caracteres si la construcción de cadenas no tiene lugar en una función, como lo hice antes:

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

Tenga en cuenta que la salida no necesita una nueva línea, por lo que WriteLn () se convirtió en Write ().

PatrickvL
fuente
3

PHP - 45 caracteres

Me sorprende que nadie haya publicado ninguna respuesta que use hashing. Es una forma muy eficiente de probar la cadena exacta.

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

Los datos son un poco difíciles de copiar / pegar ya que hay un byte nulo en el medio del código. Aquí hay un volcado hexadecimal del código para fines de prueba.

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
fuente
2
¡Inteligente! Aunque dado que técnicamente hay otros valores de entrada que producen este mismo hash, no satisface el requisito de generar 42 solo si la entrada está en el 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
fuente
3

Pyth, 14

*42qzsm*dhxGdG

Simplemente construye la cadena necesaria, luego se compara con la entrada y se multiplica por 42.

isaacg
fuente
'se compara con la entrada y se multiplica por 42.' Nunca hubiera pensado en eso por mi cuenta. Solo me ayudas a eliminar 1 personaje de mi solución. Gracias.
AndoDaan el
Argh, llegué demasiado tarde. ¿Puedes explicar cómo funciona? La función mme causa problemas ...
Jim
1
@ Jim Comenzamos con la función de mapa m, que aplica una función a cada elemento de su entrada. La entrada es G, el alfabeto. xGdencuentra la posición del dpersonaje en el alfabeto, en G, el alfabeto. haumenta eso en uno y *dreplica el personaje como muchas veces. Fuera de la mfunción, scombina la lista resultante de cadenas en una sola cadena, luego qzverifica si el resultado es igual a la entrada. Los booleanos se representan como 0si fueran falsos y 1si son verdaderos, por *42lo que se obtiene un valor de 42si es verdadero y 0si es falso.
isaacg
3

Brachylog (2), 15 bytes, desafío de fechas posteriores al idioma

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

Pruébalo en línea!

Y ahora para una respuesta que funciona en un principio completamente diferente al más visto aquí. Esta es una presentación de función (la pregunta no especifica qué tipo de presentación se desea, pero las funciones están permitidas por defecto).

Explicación

Esta respuesta funciona definiendo un tipo de cadena: aquellas que a) contienen todas las letras minúsculas del alfabeto, b) están ordenadas, yc) para las cuales tomar el número de ocurrencias de cada carácter en la cadena produce una secuencia consecutiva enteros a partir de 1. (Debe quedar claro que hay muchas cadenas de este tipo, pero la que queremos en caso especial es la más corta). Luego, si la cadena cumple esos criterios, sumamos 16 al número de caracteres distintos en el cuerda; esto producirá 42 si la cadena es la que la pregunta nos pide para casos especiales, y al menos 43 en todos los demás casos. (Si la cadena falla en cualquiera de los criterios para pertenecer a la categoría, la función terminará en falla, lo que es como lanzar una excepción).

Aquí se explica cómo interpretar el código fuente:

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

fuente
3

R, 60 58

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

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

Gracias por la sugerencia de @giusppe

Kun Ren
fuente
Creo que pasteestá bien aquí, y puedes usarlo en scan(,"")lugar de readline().
Giuseppe
2

Pitón (84)

Asume una nueva línea al final de la entrada.

sistema de importación
if ''. join (c * chr (c + 96) para c en el rango (27)) + '\ n' == sys.stdin.read (): print 42
Hoa Long Tam
fuente
1
¿Por qué no usar raw_inputen su lugar sys.stdin.read?
Juan
1
@Juan: raw_inputsolo lee una sola línea; No estaba seguro de si "la entrada" siempre sería una sola línea o si podría haber una entrada descalificante en las líneas posteriores.
Hoa Long Tam
2

Python - 62 caracteres

print("".join(x*chr(x+96) for x in range(27))==raw_input())*42
gnibbler
fuente
2
Podría ser más corto en Python 3: print("".join(x*chr(x+96)for x in range(27))==input())*42.
mbomb007
2

Perl, 49 46 caracteres

para ser utilizado en un programa, no en la línea de comando

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

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

Saludos

rbo

Editar: Idea arrancada de Ventero

botas de goma
fuente
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

Reemplazado $j<0por $jy return $b==$a?42:0;conecho $b==$a?42:0;

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

Clyde Lobo
fuente
2
Podría ser 80 caracteres si no fuera por todos los malditos signos de dólar.
Joey Adams
También vea mi entrada para una solución de bucle único.
sam hocevar
2

Prólogo ECLiPSe - 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).
volcado de memoria
fuente
2

JavaScript (91 93 94 98 102 116 )

Uso:, a('string')devuelve 42si es válido según las especificaciones, o 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/

Editar : Eliminado vary eliminado dos espacios en for (.

Edición 2 : cambiado j>0a j, y

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

Edición 3 : Inicializar icon i='', cambiar

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

Edición 4 : Cambiar

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

Edición 5 : Cambiar

  1. i=r='';while(i++<26) a
  2. for(i=r='';i++<26;) y
  3. for(j=i;j;j--) a
  4. for(j=i;j--;)
mellamokb
fuente
Bueno, puedes reducir otros 12 caracteres si no los usas varpara declarar variables;)
Clyde Lobo
@Clyde: ¡Gracias! También descubrí que podía eliminar el espacio entre for (.
mellamokb
Sí, estaba a punto de sugerir lo mismo;) Ah, y codifiqué una solución en PHP usando la misma lógica que la tuya
Clyde Lobo
Puede guardar otros 2 caracteres reemplazando return(z==r)?42:0;conreturn z==r?42:0
Clyde Lobo
j>0podría ser solo jcreo.
USTEDES
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

Te reto a darle sentido :)

Casey Chu
fuente
2

PHP - 59

Asume que se proporciona al menos 1 entrada sobre cli

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

Funciona más o menos, excepto que md5 es técnicamente puede tener duplicaciones con el algoritmo hash.

sintaxis
fuente
2

PowerShell v2 +, 47 bytes

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

Construye un rango 1..26, lo alimenta a través de un bucle con |%{...}. Cada iteración usamos el operador de coma para construir una matriz literal de la corriente [char]multiplicada por el número de bucle actual. Luego, -jointodos juntos para construir la cadena abbcccdddd...y luego usar una -ceqcomparación entre mayúsculas y minúsculas contra nuestra entrada $args, lo que dará como resultado $TRUEo $FALSE. En PowerShell, los valores booleanos se pueden convertir implícitamente como 1o 0, respectivamente, que es lo que sucede aquí con el 42*. Se imprimirá 42si la entrada es abbccc...zzzzzzzzzzzzzzzzzzzzzzzzzzy saldrá de 0otra manera.

AdmBorkBork
fuente
podrías guardar un byte :) ¡ Pruébalo en línea!
mazzy
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

Gracias

Chromozorz
fuente
{$[x~.Q.a@&1+!26;42;]}por 22 bytes.
streetter
1
42*(&!27)~-96+"j"$por 18 bytes (portando mi respuesta oK ).
Callejero el
2

VBA 91

No hubo respuestas de VBA pero esto funciona:

Function f(t)
    For i = 1 To 26
        o = o & String(i, Chr(i + 96))
    Next
    f = -42 * (t = o)
End Function
OSG
fuente
¿Es realmente imposible eliminar cualquier espacio en blanco de esto?
Esolanging Fruit
1
Versión condensada, 61 bytes -o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
Taylor Scott
@ Challenger5 No, no es imposible. El comentario de Taylor Scott es exactamente eso. Se ejecuta en la ventana Inmediato y toma el valor de la celda A1como entrada.
Engineer Toast
2

APL (Dyalog) , 18 17 bytes

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

Pruébalo en línea!

Se pueden guardar cuatro bytes obvios si se nos permite usar mayúsculas.

42 42

/⍨ if (lit. replicado por)

 entrada de caracteres

 es idéntico a

819⌶ las minúsculas

⎕AUn alfabeto

/⍨ replicado por

 uno a través

26 26

Adán
fuente
1

Clojure - 61 caracteres

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

Explota los siguientes hechos:

  • Clojure puede interpretar cualquier cadena automáticamente como una secuencia de caracteres
  • Puedo usar el rango de números del 1 al 26 para crear los caracteres y repetirlos el número o las veces correctas para generar la entrada "correcta"
mikera
fuente
ahorraría 6 caracteres si Clojure permitiera # () s anidados ..... solicitud de función importante para Clojure 1.4 ¡Creo!
mikera
1

Javascript 144

Probablemente se puede mejorar significativamente, la recursión siempre ha sido una gran diferencia para mí.

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
fuente
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 lee la cadena de la entrada, la compara a medida que avanza, escribe 42 cuando la entrada coincide hasta la ú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.

Delfos, 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 versión no utiliza una función, que ahorra bastantes caracteres en comparación con la versión anterior de esta técnica:

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

Por desgracia, un poco largo, principalmente porque las palabras clave largas de Delphi y la necesidad de inicializar las aplicaciones de consola antes de que puedan escribir la salida.

También tenga en cuenta que incrementé CmdLine en 77 caracteres, ya que ese era el desplazamiento que necesitaba para omitir mi ruta ejecutable local (Delphi no tiene puntero de argumento directo). Ajústelo para que coincida con su propia configuración (podría dar lugar a 1 carácter menos cuando se compensa <10).

PatrickvL
fuente
Puede establecer el tipo de aplicación en ProjectOptions / DelphiCompiler / Linking / GenerateConsoleApplication. Además, puede omitir la program a;línea. Y los soportes alrededor b^<>Char(c), i>0y i=27se pueden quitar.
Wouter van Nifterick
@Wouter van Nifterick: Gracias por las sugerencias, también las aplicaré a mis otras presentaciones. (¡Ni siquiera sabía if i>0thenque compilaría!)
PatrickvL