Le défi
Affichez l'alphabet d'une lettre donnée lue à partir de l'entrée de la console. Si la lettre est en majuscule, vous devez afficher l'alphabet en majuscule. L'alphabet imprimé doit se terminer par la lettre précédente de celle insérée. Si un paramètre supplémentaire est ajouté à l'entrée (un simple point .
), l'alphabet doit être imprimé une lettre sur chaque ligne. Sinon, l'alphabet doit être imprimé sur la même ligne, séparé par un simple espace. Si une mauvaise entrée est envoyée au programme, elle n'imprimera rien.
Exemples d'entrées:
Contribution:
c
Sortie du programme:
d e f g h i j k l m n o p q r s t u v w x y z a b
Contribution
H.
Sortie du programme:
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
D
E
F
G
Réponses:
GolfScript
48 75 73 70 67 66 63 5753Démos en ligne:
Cas de test 1 («c»)
Cas de test 2 («H.»)
Cas de test 3 (entrée non valide)
Mise à jour:
Maintenant, la dernière règle est également implémentée. Merci à Ventero d' avoir signalé le problème.
Mise à jour:
J'ai réécrit le code à partir de zéro et j'ai trouvé de nouvelles façons de le raccourcir encore plus.
Historique des modifications:
la source
If wrong input is send to the program it will not print anything.
C,
135 129128 caractèresMerde, tant de nombres magiques différents, mais aucun moyen de s'en débarrasser.
Doit être exécuté avec l'entrée comme paramètre de programme. Suit maintenant l'exigence de "mauvaise entrée".
Explication:
La
**b+6&31
partie utilise le fait que les codes ASCII pour les caractères minuscules / majuscules sont les mêmes si l'on ne regarde que les 5 derniers bits et les 5 bits restants sont dans la plage 1..26.Version sans exigence de "mauvaise entrée" (82 caractères):
la source
test
, appelez-le commetest c
outest X.
main(a,b)char**b;{
. De plus, onb++
vous laisserait remplacer*b[1]
->**b
etb[1][1]
->1[*b]
.Ruby,
727161 caractèresCette version rubis utilise une expression régulière pour vérifier l'entrée. Heureusement, la méthode de la chaîne Ruby
succ
fait la plupart du travail pour nous (y compris le bouclage).Edit: 61 caractères avec l'aide de chron et Ventero .
la source
c=gets[0];25.times{$><<c.next![-1]+($1?$/:' ')}if~/^[a-z](\.)?$/i
gets;25.times{$><<$_=$_.next[0]+($1?$/:' ')}if~/^[a-z](\.)?$/i
- fondamentalement la même chose que la vôtre juste abuser$_
et$/
+=
au lieu de+
, vous pouvez supprimer les parenthèses$1?$/:' '
.Ruby:
12711392 (?) Caractères(Je ne trouve pas la règle sur le score de pénalité lors de l'utilisation
-p
. Ajouté 1 pour l'instant. En cas d'erreur, veuillez me corriger.)Exemple d'exécution:
la source
Rubis,
10195Essayez-le en ligne
la source
('a'..'z').to_a
=>[*?a..?z]
GolfScript,
8072 caractèresBeaucoup de code teste l'entrée valide et l'option "n'imprime rien". La logique réelle est de 37 caractères seulement.
Cas de test en ligne
la source
q / k4
66 64 63 60 5856 + 2 pénalitépénalité pour la variable globale init, l'algorithme est de 56 comme ci-dessous:
56:
58:
60:
63:
64:
ÉDITER:
Ajout d'une pénalité de 2 pour l'initialisation globale (x :), même si la fonction d'enveloppement entre crochets (comme suggéré par slackware)
ne sait pas si le changement d'espace de noms doit également être puni ... alors c'est un autre 3
Exemple:
la source
Perl,
131127117 117112106104102 1029896929190937166656458 caractèresUsage:
Un caractère a été ajouté au décompte de l'
n
option.La plus grande coupure n'a été possible qu'en raison du comportement des
++
personnages dans la réponse de Jon Purdy .la source
s/a.$1/az/
pour économiser 2 de plus.chop().($2?$/:$")
->chop,$2?$/:$"
pour 4 de plusPerl,
149, 167Mise à jour
la source
$s=($d)?"\n":" ";
avec$s=$d?$/:$";
et peut-être simplement vous débarrasser$s
complètementPython, 83
la source
PHP,
120119113la source
$v[1]=='.'?"\n":" "
le résultat de la variable $ s, laissez PHP le calculer à chaque fois dans l'echo
instruction. De cette façon, vous pouvez épargner 6 caractères.Mathematica
158 159 204 199 183 167 165162Code
Usage
la source
J 43
Exemples:
tuvwxyzabcdefghijklmn opqr
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
Cette solution a évolué sur le forum de programmation J: http://jsoftware.com/pipermail/programming/2012-August/029072.html
Auteurs: AlvordBossCerovskiCyrEllerHuiLambertMcCormickMillerQuintanaSchottSherlockTaylorTherriault
Explication
Les phrases J sont exécutées en commençant à droite, en passant le résultat en cours vers la gauche lors de son évaluation. Puisqu'il est interactif, nous pouvons examiner des éléments de la solution isolément pour mieux les comprendre.
La partie centrale génère l'alphabet majuscule et minuscule en Unicode:
Le verbe "u:" convertit son argument numérique de droite en caractères Unicode. L'argument numérique est généré à partir des valeurs ASCII pour les caractères majuscules et minuscules en ajoutant les nombres pour "A" et "a" chacun aux valeurs de 0 à 25 générées par "i.26":
La partie droite,
recherche (i.) la position de l'argument de droite (]) dans la gauche ([) - qui est le vecteur des lettres ci-dessus - et laisse tomber (}.) un de plus (>:) que ce nombre. Le "" 0 "applique cette phrase aux arguments (scalaires) à 0 dimension.
La phrase "25 {." Prend les 25 premiers éléments du vecteur à droite.
L'avant-dernière phrase "1j1 #" à gauche reproduit son argument de droite en fonction du nombre à gauche. Un simple numéro fait une simple réplication:
Cependant, un nombre complexe - indiqué par le "j" entre les parties réelle et imaginaire - insère un élément de remplissage en fonction de la partie imaginaire. Ici, nous indiquons un élément de remplissage par celui à droite du "j".
Comme pour la plupart des primitives J, le verbe répliqué (#) fonctionne sur les tableaux numériques de manière analogue à son fonctionnement sur les tableaux de caractères. Comme montré ici,
nous voyons que l'élément de remplissage numérique par défaut est zéro alors que pour les caractères c'est le caractère espace.
Enfin, le jeton le plus à gauche "|:" transpose le résultat des verbes précédents à sa droite.
Explication fournie par Devon McCormick. Merci Devon.
la source
enculé, 303
Actuellement, il ne prend pas en charge la
If wrong input is send to the program it will not print anything
pièce, et il peut probablement être plus court. J'ai l'intention de le réparer plus tard. En ce moment, mon cerveau est trop fou pour continuer.la source
C, 110
Imprime parfois des "espaces" entre les lettres, parfois non.
Un peu plus lisible:
Exécute:
la source
JavaScript, 137
Malheureusement un peu bavard (
String.fromCharCode
etcharCodeAt
).la source
Perl,
77767068Modifications:
Enregistré un personnage en utilisant regex au lieu de
substr
.6 caractères enregistrés à la
map
place defor
.Enregistrement de 2 caractères en omettant le retour à la ligne final.
la source
\n
finaleprint
soit requise, ce qui permettra d'économiser quelques caractères\n
, merci.R, 219
Moche, longtemps ... fonctionne toujours.
Usage:
la source
C, 146 caractères (terrible)
Je ne suis pas très expérimenté en C, ce qui montre probablement ...>. <J'avais le sentiment que les caractères étant des entiers seraient utiles, mais cela ne semblait pas avoir un impact aussi important que je l'espérais ... Je vais laisser ma tentative ici cependant, n'hésitez pas à suggérer des améliorations.
Version non minimisée:
la source
VBA 225
Formaté pour s'exécuter à partir de la fenêtre immédiate:
Décomposé en lignes individuelles (doit être entouré de
Sub
blocs et nécessite uneprint
méthode différente pour fonctionner dans un module, allongeant ainsi le code):la source
Java 8, 127 octets
Explication:
Essayez-le en ligne.
la source
Oreillons,
91,86,82,79, 76Pas un langage aussi moderne;) Je suis sûr qu'il reste un peu d'espace d'optimisation ..
Explication:
lire l'entrée
vérifier si t correspond à l'entrée requise
de base pour parcourir l'alphabet. Notez que les oreillons évaluent strictement de gauche à droite. Vrai = 1, donc vous obtenez 65 ou 97 comme résultat pour p, # est l'opérateur modulo
tests:
(vous aurez besoin d'un environnement d'exécution des oreillons, c'est-à-dire Caché pour exécuter ceci)
modifier: titre en gras
edit: avait une mauvaise solution, corrigée maintenant. Merci à rtfs et Averroees pour l'avoir signalé
la source
JavaScript: 141
Version commentée:
jsFiddle DEMO
la source
Voici ma première tentative avec APL.
si je peux utiliser une seule variable globale,
A←2 26⍴6↓26⌽⎕UCS 65+⍳58
je peux raccourcir ce qui précède comme suit:la source
C ++ 11
la source
C (111)
dissection
Works] $ ./test 5
Works] $ ./test W XYZABCDEFGHIJKLMNOPQRSTUV
Works] $ ./test M NOPQRSTUVWXYZABCDEFGHIJKL
Works] $ ./test g hijklmnopqrstuvwxyzabcdef
Works] $ ./test [
Works] $ ./test a bcdefghijklmnopqrstuvwxyz
Works] $ ./test Z ABCDEFGHIJKLMNOPQRSTUVWXY
Merci pour un peu de réflexion.
la source
[A-Za-z]\.?
, si j'ai bien compris la question.Perl, 226 caractères
la source
die
relevé peut être réduit, économisant un tas ...C # 170
Non compressé
la source
1
: Si la lettre est en majuscule, vous devez afficher l'alphabet en majuscule.2
: L'alphabet imprimé doit se terminer par la lettre précédente de celle insérée.3
: Si un paramètre supplémentaire est ajouté à l'entrée (un simple point.) L'alphabet doit être imprimé une lettre sur chaque ligne. Sinon, l'alphabet doit être imprimé sur la même ligne, séparé par un simple espace.4
: Si une mauvaise entrée est envoyée au programme, elle n'imprimera rien. Il s'agit d'une erreur de 4 sur 4.char
avecvar
et rasage 1 point de votre score, perdre la.ToCharArray()
(unstring
est un char-tableau , vous pouvez déjà itérer sur!), Perdre lestring[] a
car vous n'êtes pas traiter avec des arguments de commandline, perdre l'espace de noms, votre constante « c » devrait être lu à partir de l'entrée de la console, perdez la chaîne alphabétique et utilisez ASCII à la place, etc. C'est super que vous jouiez, mais essayez de faire un effort décent; la plupart de vos soumissions semblent être uniquement à la traîne.C, 117
Nous remercions schnaader pour l'astuce d + 6 & 31.
http://ideone.com/ts1Gs9
la source
Bash: 110 octets
En termes d'explication, c'est assez simple, pas de tours de magie - c'est juste quelque chose pour lequel bash est intrinsèquement bien adapté. En termes de bits non évidents:
{a..z}
est une astuce très sous-utilisée en bash - elle se développe àa b c d...
. Vous pouvez faire de même pour générer des séquences numériques.[[ $1 =~ [a-z] ]]
exécute une correspondance regex avec le premier argument de programme pour les caractères de a à z. De même pour AZ. Cependant, vous avez besoin de crochets doubles,[
vous ne pouvez pas le faire.${1:1:1}
obtient une sous-chaîne de $ 1 (le premier argument), un caractère dans, un caractère de long - c'est-à-dire qu'il retourne le deuxième caractère de la chaîne, ce que nous attendons.
.sed 's/ /\n/g'
expression rationnelle simple: recherche et remplace les espaces par des retours à la ligne. Si.
est le deuxième caractère de la chaîne, nous dirigeons l'entrée vers cela, ou autrement ...cat
est l'astuce finale ici - si nous ne voulons pas remplacer les espaces par des sauts de ligne, nous alimentons stdin à cat à la place qui le renvoie simplement à nouveau.la source