Gagnant: la réponse basse de professorfish ! Un entier de 9 octets! Hou la la!
Vous pouvez continuer à envoyer votre réponse, mais vous ne pouvez plus gagner. Poste originale conservée pour la postérité:
Votre objectif est de convertir un nombre entier compris entre 1 et 9 dans le mot qu'il représente.
- Vous n'aurez pas à vous soucier des décimales
- L'utilisateur va entrer un numéro. Supposons qu'ils n'entreront jamais rien de 10 ou plus
- L'utilisateur doit taper le numéro à un moment donné, mais la méthode que le programme le lit n'a pas d'importance. Cela peut être avec stdin, lire un fichier texte, etc., mais l'utilisateur doit appuyer sur le bouton 9 de son clavier (par exemple) à un moment donné.
- Il n'est pas sensible à la casse (c.-à-d. "Un", "un", "on", "un", etc. sont tous acceptables)
- Les requêtes HTTP / etc sont autorisées, mais tout code exécuté par le serveur auquel la requête est adressée compte pour le nombre d'octets de votre code final (par exemple, si un programme C ++ a envoyé une requête HTTP, le code PHP utilisé dans la requête HTTP est pris en compte. )
- Tout ce qui peut compiler et exécuter est acceptable
- Ce concours s'est terminé le 27 juin 2014 (7 jours après l'envoi).
- Ceci est un code-golf , donc le code le plus court gagne
one
) Sont-ils acceptables?3
, vous ne pouvez pas sortirone two three four five six seven eight nine
même si vous produisez techniquementthree
. De même, vous ne pouvez pas sortirthree seven
, etc.Réponses:
Bash (avec bsdgames), 9
Lit à partir de l'entrée standard.
Je ne sais pas pourquoi il y a un utilitaire pour cela, mais peu importe.
la source
Python 2, 64
Voici à quoi ressemble la chaîne avec des espaces supplémentaires (essayez de lire à la verticale):
Comme expliqué dans les commentaires ci-dessous,
[input()::9]
commence à l'index donné et sélectionne chaque neuvième caractère suivant.la source
input()::9
est une plage allantinput()
de la fin de la chaîne à des étapes de9
, comme1,10,19,28,37
ou3,12,21,30,39
, qui sont exactement les index auxquels les lettres du mot correspondant sont trouvées.Common Lisp - 22 octets
En voici un général (pas seulement pour un dix):
Oh, vous voulez des ordinaux (premier, deuxième, ... trois centième ...)? D'accord!
la source
BASH 51
Alors j'en ai créé une autre en utilisant ma deuxième idée et l'aide des autres:
Où "X" est le numéro que vous voulez.
BASH 48 (67)
67 avec
\n
sauts de ligneJe ne suis pas sûr que cela compte totalement, car c'est la lecture d'un fichier, mais:
sed -n Xp a
Où "X" est l'entrée et où
a
est un fichier avec:Le fichier a 36 caractères et la commande bash est 13.
Comment ça fonctionne:
la source
a
.'
guillemets. Vous pouvez également essayer d'utiliser une chaîne here au lieu du fichier externe. Mais vous devez vraiment compter les sauts de ligne dans votre fichier.C # - 127 (86/46)
Si vous ne prenez que la partie exécutable ...
et si
HourOfDay
cela aurait fait partie de l'espace de noms System, vous auriez besoin de 46 caractères. Malheureusement, il se trouve dansSystem.DirectoryServices.ActiveDirectory
ce qui le rend 86 ... l'autre bruit le gâte.Ceci est compilable et exécutable à partir de la ligne de commande (127 caractères):
si enregistré dans un fichier nommé cg2.cs
Comment cela marche-t-il?
HourOfDay
est un type enum afin que nous puissions utiliser des noms au lieu de constantes magiques. Les types Enum ont une implémentation ToString () qui vous donne le nom de la valeur . Vous pouvez lancer un int sur une enum. Console.Read () lit un caractère dans le flux d'entrée représenté sous forme d'entier. taper '1' donne 49 , soustraire 48 pour obtenir 1, cast / boxHourOfDay
pour retourner 'Un'.Jetez un coup d'œil à la version Powershell de ce même truc
la source
-48
que cela fait ici?Befunge 98,
116105103 octetsBefunge n'était pas fait pour ça ...
Explication:
la source
char[][]
, gardez unx
et l'y
emplacement, et exécuter le caractère à cet endroit. Le plus difficile serait de définir l'opération pour tous les personnages possibles.&1-
.Javascript 68
Atob / btoa peut être un outil de compression de l'homme pauvre
(mais si vous voulez essayer ceci dans la console, vous ne pouvez pas copier à partir du texte formaté que vous voyez à la fois. Allez dans 'edit' et copiez à partir du panneau source)L’éditeur Markdown n’aime pas certains caractères de cette réponse: certains caractères sont perdus lors de la sauvegarde. Pourtant, je pense que c'est un problème de l'éditeur, pas le mien. Les caractères perdus sont des caractères Unicode 8 bits parfaitement valables.
(Ou alors je me trompe, si cette question a déjà été débattue en méta, faites le moi savoir) Voici la version avec les caractères fautifs échappés, chaque séquence \ xNN devrait compter 1
Test simple
Dans la console Firefox:
la source
Tree
etEightF
.Javascript 73
69
la source
alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])
la même chose mais économiser 8 octets? L'utilisateur entre toujours le nombre qu'il veut ...Perl, 55
Il est exécuté avec une option
-p
(+1 octet), par exemple:Une entrée est attendue dans STDIN et la sortie est écrite dans STDOUT.
Le code génère simplement un tableau et sélectionne le bon élément. Option
-p
prend en charge la lecture de la ligne d'entrée$_
et imprime le résultat$_
.Variations:
Avec nouvelle ligne (+3):
ou (même nombre d'octets):
Mise à jour:
Utiliser des mots nus au lieu de
qw[...]
(merci Zaid).L'index négatif enregistre un octet (merci aragaer).
la source
$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
use strict
).$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]
- un caractère plus court.Oracle SQL - 46
Manifestation
Cela comprend une échappatoire standard , je l’admets, mais le SQL est plus court que Golfscript; Je n'ai pas pu résister!
Cela fonctionne en utilisant les modèles de format de date et d’ heure d’Oracle .
TO_DATE(n, 'j')
convertit un nombre en un jour julien , le nombre de jours depuis le 1er janvier 4712 av.TO_CHAR(<date>, 'jsp')
le reconvertit en entier (bien que sous forme de chaîne). Lesp
, est un suffixe d'élément de format qui épelle le nombre. Cela fonctionnera avec beaucoup de chiffres.Il
&1
s'agit d'une variable de substitution qui ne fonctionne qu'avec les clients qui l'acceptent, par exemple SQL * Plus.la source
CJam,
4543 octetsCe qui précède utilise les notations ^ et M-, car certains caractères sont non imprimables.
Au prix de 9 octets supplémentaires, les caractères non imprimables peuvent être évités:
Essayez-le en ligne.
Comment ça fonctionne
Exemple
la source
IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
GolfScript, 51 octets
C'est une simple table de correspondance. L'entrée est évaluée (
~
), un tableau des valeurs est créé et l'index est trouvé.Essayez-le ici
la source
Try it here
lien a un code différent du code collé.Try it here
différence de code du lien provient du fait que la page Web ne prend pas en charge la saisie de l'utilisateur. Changer la chaîne après le;
, ceci est identique à la saisie de l'utilisateur.Perl, 60 octets
Nécessite le
-p
commutateur (deux octets).Exemple
Comment ça fonctionne
-p
lit à partir de STDIN et enregistre le résultat dans$_
.=~/.[a-z]*/g
divise le mot clé précédent en sous-chaînes d'une lettre (majuscule) suivies d'un nombre quelconque de lettres minuscules.(…)
collecte les sous-chaînes dans un tableau.[$_]
récupère la sous-chaîne correspondant à l'entrée de l'utilisateur.$_=…
enregistre le résultat dans$_
.-p
affiche la valeur de$_
.la source
Lot de DOS - 162 caractères (sauts de ligne inclus)
Cette réponse a été inspirée par la réponse de @ grc en Python, même si j'avais quelque chose de similaire à l'esprit.
Usage:
[Nom du fichier] [numéro]
Par exemple, si le code est dans un fichier appelé speak.bat et que vous souhaitez afficher le nombre "cinq", vous l'exécutez comme suit:
speak 5
En outre, la sortie est de haut en bas, pas de gauche à droite! Donc au lieu de
tu verras
la source
Bash + coreutils, 64
Concept de compression non compétitif
Certains caractères exotiques peuvent ne pas bien être rendus ici, ce script peut donc être reconstruit à partir de sa représentation en base64:
Exemple de sortie
Explication
Il m'est apparu que la chaîne
one two three four five six seven eight nine
ne contenait que les lettresefghinorstuvwx
et un séparateur d'espace - 15 caractères au total. Ainsi, chaque caractère peut potentiellement être représenté sur 4 bits, ou 2 caractères par 1 octet. Nous pouvons utiliser la représentation hexadécimale d'un octet comme moyen facile de scinder chaque octet en deux chiffres hexadécimaux. Nous pouvons ensuite transformer les chiffres hexadécimaux en lettres que nous demandonstr
ou similaires. Comme la chance l'aurait,rstuvwx
sont consécutifs, peuvent donc être exprimésr-x
àtr
. Le codage est agencé de telle sortee
etf
sont laissés en l' état , et que les mots sont séparés saut de ligne, de sorte que nous pouvons utilisersed
pour ouptut juste la ligne dont nous avons besoin.Ce processus de décodage finit par utiliser une quantité d'espace supplémentaire non négligeable. Cette réponse devient donc non compétitive en tant que réponse de type script shell, mais peut constituer un concept utile dans d'autres langues.
la source
(pur) Bash, 64 ans
Prend l’entrée comme premier argument, en supposant une entrée valide.
Crée un tableau
v
, puis accède à l'élément spécifié dans l'entrée. Comme les tableaux sont indexés à zéro, j'ai dû ajouter un élément 0e en tant qu'espace réservé. Alternativement (thnx @DennisWilliamson pour l'avoir signalé):la source
v=(one two three four five six seven eight nine)
etecho ${v[$1-1]}
Python 2.x -
6564Pas aussi bon que la réponse de @grc, mais certainement plus lisible :-)
Un personnage de moins, grâce à @flornquake
la source
'nine eight seven six five four three two one'.split()[-input()]
Java 7 - 185
la source
C 111
La longueur est soigneusement conçu ici pour que je puisse l' interpréter comme binaire et convertir que en décimal. Avec seulement 7 personnages, je suis convaincu d'avoir un gagnant!
la source
#include
etmain()
de » type de retour. Et aussi un peu de refactorisation de votre expression:main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}
. 86 caractères par mon compte.111
comme binaire, cela se convertirait7
en décimal.bash say (OS X):
38"Votre objectif est de convertir un nombre entier compris entre 1 et 9 dans le mot qu'il représente"
La dernière fois que j'ai vérifié, les mots parlés sont aussi des mots. Tentative précédente (n'accepte aucune entrée)
say 4
Edit, doit pouvoir lire les entrées:
Tapez n'importe quel nombre et le mot sort. Je sais que la date de fin est due, mais j’aurais dû gagner le concours.
Exemple de fichier audio: four.aiff
la source
VBScript
988075la source
J -
68 ou 6057 ou 53 octetsVersion interactive (stdin):
Version de la fonction:
Explication:
".(1!:1)1
lit une chaîne et la convertit en entierla source
(;:'one two blah')>@{~<:
) et six autres en utilisant le gérondifone`two`blah
au lieu de;:
.>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1
3 caractères sont plus courts.Perl 36 (58 autonome)
Ou, sans modules supplémentaires:
la source
Can't locate Number/Spell.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at toto.pl line 1.
BEGIN failed--compilation aborted at toto.pl line 1.
syntax error at titi.pl line 1, near "say qw(one two three four five six seven eight nine)"
Execution of titi.pl aborted due to compilation errors.
En AppleScript; 123 caractères.
Ce script prend l'entrée dans une boîte de dialogue. Ensuite, il donne la sortie dans le résultat AppleScript .
Exemple :
6
"six"
Voici une version plus agréable:
Cette version affiche la sortie dans un joli dialogue.
Exemple :
9
nine
[Réponse modifiée; légèrement amélioré le dialogue pour l'entrée; encore 124 caractères. Réponse modifiée à nouveau; maintenant 1 car moins! ]
la source
set n to text returned of
... Sensationnel.Powershell -
9174Découvrez comment utiliser pour supprimer l'appel Enum et ToObject:
Comment cela marche-t-il?
HourOfDay est un type enum, nous pouvons donc utiliser des noms au lieu de constantes magiques. Les types Enum ont une implémentation ToString () qui vous donne le nom de la valeur constante. Vous pouvez lancer un int sur une enum. Console.Read () lit un caractère dans le flux d'entrée représenté sous forme d'entier. taper '1' donne 49, soustraire 48 pour obtenir 1, transtyper en HourOfDay pour renvoyer 'Un'.
Parce que powershell fait une ToString sur tous les objets en cours d'écriture dans le flux de sortie et qu'il n'a pas besoin de fluff pour le transformer en un exécutable, c'est tout ce qui est nécessaire à part PowerShell ...
la source
CJam - 50
Il s'agit d'une solution ASCII standard qui utilise des requêtes HTTP (ceci est autorisé dans la question):
Sur le serveur, il y a 9 fichiers de texte brut nommés 1, 2, ..., 9, chacun contenant le mot correspondant.
Taille totale: 14 + 3 ("un") + 3 ("deux") + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Il est possible de jouer davantage au golf en utilisant un domaine plus court.
L'interpréteur en ligne ne prend pas en charge les requêtes HTTP. Le programme doit donc être exécuté à l'aide de l' interpréteur Java .
la source
Lot - 86
Beaucoup plus courte que l'autre réponse de lot, et étonnamment compétitive.
Utilisé en tant que
filename.bat number
, et la sortie est sous la forme d'un fichier avec le nom du numéro correct.la source
Ruby 64
la source
9-1
quand vous pouvez juste dire8
? Bien sûr les deux9-1
et8
ont tort; ce script génère "neuf" tout le temps et ignore les entrées.BASH 9
réplique Linux sans vergogne de la réponse de cousincoicane
parle un
la source
GolfScript, 50 octets
Je voulais voir si je pouvais battre la solution GolfScript autonome de 51 octets de Quincunx . Il s'avère que, avec assez de ruses, oui, je le peux - d'un octet.
Étant donné que l’un des trucs que j’utilise est l’utilisation d’octets situés en dehors de la plage imprimable ASCII, le programme résultant ne peut pas être directement collé ici. Au lieu de cela, je fournis un vidage hexadécimal de celui-ci; Les utilisateurs de systèmes Unixish peuvent utiliser
xxd -r
pour reconstruire le programme GolfScript réel sur 50 octets à partir du vidage hexadécimal:L'astuce de base utilisée pour générer ce programme est simple: je compresse le littéral de chaîne longue qui constitue la majeure partie du code de Quincunx en soustrayant 99 (le code ASCII de la lettre
c
) des valeurs de caractère, en interprétant les valeurs résultantes comme un nombre en base 22 (assez pour encoder les lettres jusqu’àx
) puis ré-encodez le nombre obtenu en base 255 pour produire la chaîne d’octets non imprimable qui constitue la majeure partie de la première moitié de mon programme. Le reste du programme inverse ensuite ce processus en décodant la chaîne en quelque chose d’imprimable.(Étant donné que la lettre la plus basse présente dans les noms de numéro est
e
, j’aurais pu raccourcir davantage la chaîne d’octets en soustrayant 101 des codes ASCII et en utilisant la base 20. Cependant, en soustrayant 101, la lettre aurait été mappéeo
sur une nouvelle ligne, quen
J'utilise comme délimiteur de numéro, car elle est facilement disponible comme constante intégrée dans GolfScript. Cela me coûterait plus que l'octet que sauverait une base inférieure permettrait d'économiser. L'utilisation de l'offset 99 laisse la nouvelle ligne correspondant à la lettrem
, qui est commodément absent des noms de nombres.)Voici une version dé-golfée du programme:
la source