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 código de golf , por lo que gana el código más corto en bytes.
abbcccddddeeeee...zzabc
lo tanto , no satisface lo que supongo y puedo ver algunos programas que dan un sí en esa entrada.Respuestas:
Golfscript, 20
con nueva línea, 21 caracteres (por Nabb)
En realidad, Nabb venció al mío, aquí hay una solución original para una nueva línea, 22 caracteres
Esto es simplemente generar una cadena de origen y solo compararlo con la cadena de stdin.
fuente
26,{).[96+]*}%n+=42`*
para 21 (inc. nueva línea).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.Ruby 1.9,
46 4239 caracteresAsume que la entrada no termina con una nueva línea.
fuente
Programa C -
7889Editar: no imprima 42 cuando haya caracteres adicionales.
Asume que la entrada no tiene una nueva línea final.
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)
afork()
. 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.fuente
PHP (60)
Suponiendo que la entrada se proporciona en la línea de comandos:
Explicación : puede ver la cadena como una estructura triangular.
La línea
j
comienza en el índicei = j*(j+1)/2
(esa es la fórmula del número triangular). Resolver la ecuación cuadrática da como resultado que el índicei
esté en líneaj = int((sqrt(8*i+1)-1)/2)
y, por lo tanto, contenga caracteres97 + int((sqrt(8*i+1)-1)/2)
. El0-350
rango del índice nos permite simplificar eso96.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
fuente
$s.=chr(96.5+sqrt($i+=2));
funciona?Perl, 35
43Necesita 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
p
se necesita una opción de línea de comandos.fuente
$a++."{$b}"
lugar de solo$a++.$b
?05AB1E , 7 bytes (no competitivos)
Pruébalo en línea!
Explicación
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? :)
fuente
Programa Haskell -
71676457Asume que no hay una nueva línea final y tampoco genera una.
Uso:
fuente
zipWith
se detiene al llegar al final de la lista más corta, se puede reemplazar['a'..'z']
con['a'..]
y guardar 3 caracteres.[c|c<-['a'..'z'],_<-['a'..c]]
J, 29
ejemplo:
fuente
D: 94 caracteres
Más legible:
fuente
Delphi,
164132Este 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:
(Tenga en cuenta que esta versión supone que las variables
c
yi
comienzan 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
Tenga en cuenta que la salida no necesita una nueva línea, por lo que WriteLn () se convirtió en Write ().fuente
PHP - 45 caracteres
Me sorprende que nadie haya publicado ninguna respuesta que use hashing. Es una forma muy eficiente de probar la cadena exacta.
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.
fuente
Scala 79
fuente
Pyth, 14
Simplemente construye la cadena necesaria, luego se compara con la entrada y se multiplica por 42.
fuente
m
me causa problemas ...m
, que aplica una función a cada elemento de su entrada. La entrada esG
, el alfabeto.xGd
encuentra la posición deld
personaje en el alfabeto, enG
, el alfabeto.h
aumenta eso en uno y*d
replica el personaje como muchas veces. Fuera de lam
función,s
combina la lista resultante de cadenas en una sola cadena, luegoqz
verifica si el resultado es igual a la entrada. Los booleanos se representan como0
si fueran falsos y1
si son verdaderos, por*42
lo que se obtiene un valor de42
si es verdadero y0
si es falso.Brachylog (2), 15 bytes, desafío de fechas posteriores al idioma
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:
fuente
R,
6058Gracias por la sugerencia de @giusppe
fuente
paste
está bien aquí, y puedes usarlo enscan(,"")
lugar dereadline()
.Pitón (84)
Asume una nueva línea al final de la entrada.
fuente
raw_input
en su lugarsys.stdin.read
?raw_input
solo 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.Python - 62 caracteres
fuente
print("".join(x*chr(x+96)for x in range(27))==input())*42
.Perl,
4946 caracterespara ser utilizado en un programa, no en la línea de comando
$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'Saludos
rbo
Editar: Idea arrancada de Ventero
fuente
PHP
928887 caracteresEDITAR
Reemplazado
$j<0
por$j
yreturn $b==$a?42:0;
conecho $b==$a?42:0;
Reemplazado
echo $b==$a?42:0;
conecho($b==$a)*42;
fuente
Prólogo ECLiPSe - 173
fuente
JavaScript (91
939498102116)Uso:,
a('string')
devuelve42
si es válido según las especificaciones, o0
.http://jsfiddle.net/g25M3/6/
Editar : Eliminado
var
y eliminado dos espacios enfor (
.Edición 2 : cambiado
j>0
aj
, yreturn (z==r)?42:0;
areturn z==r?42:0
Edición 3 : Inicializar
i
coni=''
, cambiar(z==r)?42:0
a(z==r)*42
Edición 4 : Cambiar
for(;i<27;i++)
awhile(i++<26)
Edición 5 : Cambiar
i=r='';while(i++<26)
afor(i=r='';i++<26;)
yfor(j=i;j;j--)
afor(j=i;j--;)
fuente
var
para declarar variables;)for (
.return(z==r)?42:0;
conreturn z==r?42:0
j>0
podría ser soloj
creo.JavaScript 1.8, 99 caracteres
Te reto a darle sentido :)
fuente
PHP - 59
Asume que se proporciona al menos 1 entrada sobre cli
Funciona más o menos, excepto que md5 es técnicamente puede tener duplicaciones con el algoritmo hash.
fuente
PowerShell v2 +, 47 bytes
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,-join
todos juntos para construir la cadenaabbcccdddd...
y luego usar una-ceq
comparación entre mayúsculas y minúsculas contra nuestra entrada$args
, lo que dará como resultado$TRUE
o$FALSE
. En PowerShell, los valores booleanos se pueden convertir implícitamente como1
o0
, respectivamente, que es lo que sucede aquí con el42*
. Se imprimirá42
si la entrada esabbccc...zzzzzzzzzzzzzzzzzzzzzzzzzz
y saldrá de0
otra manera.fuente
K, 26 bytes
Gracias
fuente
{$[x~.Q.a@&1+!26;42;]}
por 22 bytes.42*(&!27)~-96+"j"$
por 18 bytes (portando mi respuesta oK ).VBA 91
No hubo respuestas de VBA pero esto funciona:
fuente
o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
A1
como entrada.APL (Dyalog) ,
1817 bytesPrué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 a819⌶
las minúsculas⎕A
Un alfabeto/⍨
replicado por⍳
uno a través26
26fuente
Clojure - 61 caracteres
Explota los siguientes hechos:
fuente
Javascript 144
Probablemente se puede mejorar significativamente, la recursión siempre ha sido una gran diferencia para mí.
Comprimido
Menos comprimido
fuente
Delphi, 127
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
Delfos, 188
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
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).
fuente
program a;
línea. Y los soportes alrededorb^<>Char(c)
,i>0
yi=27
se pueden quitar.if i>0then
que compilaría!)