Tâche
Avec une chaîne en entrée, votre tâche consiste à sortir 42
uniquement si la chaîne en entrée se trouve exactement comme suit:
abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmmnnnnnnnnnnnnnnoooooooooooooooppppppppppppppppqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssssttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzz
Il peut générer toute autre valeur, générer une erreur ou ne pas générer de sortie, si l’entrée n’est pas égale à la chaîne susmentionnée.
Critère gagnant
C'est du code-golf , donc le code le plus court en octets gagne!
abbcccddddeeeee...zzabc
ne satisfait pas cela, je suppose et je peux voir certains programmes donner un oui à cette entrée.Réponses:
Golfscript, 20
avec nouvelle ligne, 21 caractères (par Nabb)
En fait, Nabb a battu le mien, voici la solution originale pour une nouvelle ligne, 22 caractères
Il s’agit simplement de générer une chaîne source et de la comparer à la chaîne stdin.
la source
26,{).[96+]*}%n+=42`*
pour 21 (y compris newline).n+
parce que le tableau n'est pas plat. Vous devrez soit conserver vos 20 caractères d'origine, soit ajouter un~
pour aplatir les termes internes du tableau.Ruby 1.9,
46 4239 caractèresSuppose que l’entrée ne se termine pas par une nouvelle ligne.
la source
Programme C -
7889Éditer: N'imprimez pas quand il y a des caractères
Suppose que l'entrée n'a pas de nouvelle ligne.
Si le préfixe ne correspond pas, le programme se ferme. Si le préfixe correspond mais qu'il y a 1 à 3 caractères supplémentaires, est imprimé 2. Sinon, le comportement est indéfini.
Cela peut être raccourci d’un caractère en passant
exit(1)
àfork()
. Oh, et sur une note indépendante, n'oubliez pas de sauvegarder tous les documents ouverts au cas où, pour une raison quelconque , votre système se bloquerait.la source
PHP (60)
En supposant que l'entrée soit fournie dans la ligne de commande:
Explication : vous pouvez voir la chaîne comme une structure en triangle.
La ligne
j
commence à l'indexi = j*(j+1)/2
(c'est la formule du nombre triangulaire). En résolvant l'équation quadratique, l'indexi
est en lignej = int((sqrt(8*i+1)-1)/2)
et contient donc du caractère97 + int((sqrt(8*i+1)-1)/2)
. La0-350
plage d'index nous permet de simplifier cela96.5 + sqrt(2*(i+1))
, mais cela n'est plus le cas pour les valeurs plus grandes.Edit : Basculé en entrée de ligne de commande comme suggéré dans les commentaires.
Edit : Utilise l'opérateur conditionnel pour sauvegarder un personnage
la source
$s.=chr(96.5+sqrt($i+=2));
marche?Perl, 35
43Nécessite Perl 5.10 ou une version ultérieure (exécuté avec
-E
), aucune nouvelle ligne en entrée.J'ai mieux aimé mes regex d'effets secondaires, mais le code le plus court a été parlé. La voici en souvenir. Également destiné à Perl 5.10 ou ultérieur, mais uniquement aux fonctionnalités regex avancées / expérimentales, seule une
p
option de ligne de commande est nécessaire.la source
$a++."{$b}"
au lieu de juste$a++.$b
?05AB1E , 7 octets (non concurrents)
Essayez-le en ligne!
Explication
Juste en passant par quelques défis pour apprendre 05AB1E (et le golf en général). Ce défi a été marqué comme étant actif hier et j'ai trouvé une solution courte, alors pourquoi ne pas partager? :)
la source
Programme Haskell -
71676457Suppose qu'il n'y a pas de fin de ligne, et n'en génère pas non plus.
Usage:
la source
zipWith
arrêts quand il atteint la fin de la liste plus courte, vous pouvez remplacer['a'..'z']
avec['a'..]
et économisez 3 caractères.[c|c<-['a'..'z'],_<-['a'..c]]
J, 29
exemple:
la source
D: 94 caractères
Plus lisiblement:
la source
Delphi,
164132Celui-ci construit une chaîne et la compare simplement au premier argument de ligne de commande. C'est plus court et moins délicat que mon autre soumission:
(Notez que cette version suppose que les variables
c
eti
commencent initialisées à 0, comme c'est le cas dans ma version de Delphi (2010).)Comme mon autre soumission, celle-ci nécessite moins de caractères si la construction de chaîne ne se produit pas dans une fonction, comme je le faisais auparavant:
Delphi, 181
Notez que la sortie n'a pas besoin d'une nouvelle ligne, donc WriteLn () est devenue Write ().la source
PHP - 45 caractères
Je suis surpris que personne n'ait posté de réponse utilisant le hachage. C'est un moyen très efficace de tester la chaîne exacte.
Les données sont un peu difficiles à copier / coller car il y a un octet nul au milieu du code. Voici un vidage hexadécimal du code à des fins de test.
la source
Scala 79
la source
Pyth, 14
Construit simplement la chaîne nécessaire, puis compare avec l'entrée et multiplie par 42.
la source
m
me cause des ennuis…m
, qui applique une fonction à chaque élément de son entrée. L'entrée estG
, l'alphabet.xGd
trouve la position ded
, le caractère dans l'alphabet, dansG
, l'alphabet.h
augmente cela de un, et*d
reproduit le personnage autant de fois. En dehors de lam
fonction,s
combine la liste de chaînes résultante en une seule chaîne, puisqz
vérifie si le résultat est égal à l'entrée. Les booléens sont représentés comme0
s'ils étaient False et1
si true, ce*42
qui donne une valeur de42
si True et0
si False.Brachylog (2), 15 octets, défi linguistique après la date
Essayez-le en ligne!
Et maintenant, une réponse qui fonctionne sur un principe complètement différent de celui que nous avons le plus en vue ici. Il s'agit d'une soumission de fonction (la question ne spécifie pas le type de soumission souhaitée, mais les fonctions sont autorisées par défaut).
Explication
Cette réponse fonctionne en définissant une sorte de chaîne: celles qui a) contiennent toutes les lettres minuscules de l’alphabet, b) sont dans l’ordre trié et c) pour lesquelles le fait de prendre le nombre d’occurrences de chaque caractère de la chaîne produit une séquence de commandes consécutives. entiers à partir de 1. (Il doit être clair qu'il existe de nombreuses chaînes de ce type, mais celle que nous voulons casse est le plus court.) Ensuite, si la chaîne remplit ces critères, nous ajoutons 16 au nombre de caractères distincts dans le champ. chaîne; cela produira 42 si la chaîne est celle que la question nous demande, et au moins 43 dans tous les autres cas. (Si la chaîne échoue pour que l'un des critères appartienne à la catégorie, la fonction se terminera par un échec, ce qui revient à lancer une exception.)
Voici comment interpréter le code source:
la source
R,
6058Merci pour la suggestion de @giusppe
la source
paste
va bien ici, et vous pouvez utiliserscan(,"")
au lieu dereadline()
.Python (84)
Suppose un retour à la fin à la fin de l’entrée.
la source
raw_input
placesys.stdin.read
?raw_input
ne lit qu'une seule ligne; Je ne savais pas si "l'entrée" serait toujours une seule ligne ou s'il pourrait y avoir une entrée disqualifiante sur les lignes suivantes.Python - 62 caractères
la source
print("".join(x*chr(x+96)for x in range(27))==input())*42
.Perl,
4946 caractèresà utiliser dans un programme, pas sur la ligne de commande
$..=chr($+96)x$ for 1..26;$.eq(pop)&&print '42'Cordialement
rbo
Edit: Idée extraite de Ventero
la source
PHP
928887 caractèresMODIFIER
Remplacé
$j<0
par$j
etreturn $b==$a?42:0;
avececho $b==$a?42:0;
Remplacé
echo $b==$a?42:0;
parecho($b==$a)*42;
la source
Prolog ECLiPSe - 173
la source
JavaScript (91
939498102116)Utilisation:,
a('string')
retourne42
si valide selon les spécifications, ou0
.http://jsfiddle.net/g25M3/6/
Éditer : Supprimé
var
et éliminé deux espaces dansfor (
.Modifier 2 : remplacé
j>0
parj
, etreturn (z==r)?42:0;
àreturn z==r?42:0
Edit 3 : Initialize
i
withi=''
, change(z==r)?42:0
à(z==r)*42
Edit 4 : Change
for(;i<27;i++)
àwhile(i++<26)
Edit 5 : Change
i=r='';while(i++<26)
àfor(i=r='';i++<26;)
etfor(j=i;j;j--)
àfor(j=i;j--;)
la source
var
pour déclarer des variables;)for (
.return(z==r)?42:0;
parreturn z==r?42:0
j>0
pourrait être justej
je pense.JavaScript 1.8, 99 caractères
Je te défie de donner un sens :)
la source
PHP - 59
Suppose qu’au moins une entrée est fournie sur cli
Cela fonctionne plus ou moins, sauf que md5 is peut techniquement avoir des duplications avec l'algorithme de hachage.
la source
PowerShell v2 +, 47 octets
Construit une plage
1..26
, le nourrit à travers une boucle avec|%{...}
. Chaque itération, nous utilisons l' opérateur de virgule pour construire un littéral de tableau du courant[char]
multiplié par le numéro de la boucle actuelle. Ensuite, nous-join
réunissons tous ces éléments pour construire la chaîneabbcccdddd...
, puis nous utilisons une-ceq
comparaison sensible à la casse par rapport à notre entrée$args
, ce qui entraînera un$TRUE
ou$FALSE
. Dans PowerShell, les valeurs booléennes peuvent être implicitement converties sous la forme1
ou0
respectivement, ce qui se produit ici avec le42*
. Imprimera42
si et seulement si l'entrée estabbccc...zzzzzzzzzzzzzzzzzzzzzzzzzz
et si elle sortira0
.la source
K, 26 octets
Merci
la source
{$[x~.Q.a@&1+!26;42;]}
pour 22 octets.42*(&!27)~-96+"j"$
pour 18 octets (portant ma réponse OK ).VBA 91
Il n'y a pas eu de réponses VBA mais cela fonctionne:
la source
o="":For i=1To 26:o=o &String(i,Chr(i+96)):Next:?-42*([A1]=o)
A1
tant qu'entrée.APL (Dyalog) ,
1817 octetsEssayez-le en ligne!
Quatre octets évidents peuvent être sauvegardés si nous sommes autorisés à utiliser des majuscules.
42
42/⍨
si (lit. répliqué par)⍞
saisie de caractères≡
est identique à819⌶
le minuscule⎕A
Un alphabet/⍨
répliqué par⍳
un à travers26
26la source
Clojure - 61 caractères
Exploite les faits suivants:
la source
Javascript 144
Probablement peut être considérablement amélioré, la récursion a toujours été une tête loin pour moi.
Comprimé
Moins Compressé
la source
Delphi, 127
Celui-ci lit la chaîne à partir de l'entrée, la compare au fur et à mesure, écrit 42 quand l'entrée correspond jusqu'à la dernière
z
.Delphi, 157
Delphi, 188
Cette version n'utilise pas de fonction, ce qui enregistre pas mal de caractères par rapport à la version précédente de cette technique:
Delphi, 213
Hélas un peu long, principalement à cause des longs mots-clés de Delphi et de la nécessité d'initialiser les applications de la console avant de pouvoir écrire la sortie.Notez également que j'ai incrémenté CmdLine de 77 caractères, car c’était le décalage que je devais ignorer par mon chemin exécutable local (Delphi n’a pas de pointeur d’argument direct). Ajustez pour correspondre à votre propre configuration (peut entraîner 1 caractère de moins si le décalage <10).
la source
program a;
ligne. Et les crochets autourb^<>Char(c)
,i>0
eti=27
peuvent être supprimés.if i>0then
je compilerais!)