Convertir 1, 2, 3, 4, 5, 6, 7, 8 et 9 en «un», «deux», «trois», etc.

47

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 , donc le code le plus court gagne
Jon
la source
2
Les espaces de fin (c.-à-d. one ) Sont-ils acceptables?
grc
1
@grc Oui, tant que le programme renvoie le mot.
Jon
1
vous devez spécifier que seul le numéro donné peut être imprimé et non les autres numéros.
Pinna_be
1
@ Pinin_be par exemple, si j'entre 3, vous ne pouvez pas sortir one two three four five six seven eight ninemême si vous produisez techniquementthree . De même, vous ne pouvez pas sortir three seven, etc.
Jon
1
Cette question était assez sympa. Mais je n'aime pas l'ajout de la date limite. En particulier, la date limite a été ajoutée juste avant la date limite et non 7 jours avant.
Nicolas Barbulesco

Réponses:

19

Bash (avec bsdgames), 9

number -l

Lit à partir de l'entrée standard.

Je ne sais pas pourquoi il y a un utilitaire pour cela, mais peu importe.


la source
2
Je ne suis pas sûr d'aimer installer bsdgames puis l'appeler "bash", bien que je reconnaisse que ma réserve est subjective.
Paul Draper
@ PaulDraper Moi non plus. Je n'ai pas posté cela comme une réponse sérieuse. Je pense que l'une des autres réponses méritait d'être acceptée
5
N'est-ce pas une échappatoire standard?
Justin
2
@ Quincunx oui, c'est fondamentalement. Bien que la plupart des choses soient des utilitaires externes dans Bash, je ne considérerais pas le paquet bsdgames comme quelque chose de très admissible (contrairement à grep, wget, coreutils, sed, bc ...).
132

Python 2, 64

print' ottffssennwhoiieiieoruvxvgn  ere ehe  e   nt'[input()::9]

Voici à quoi ressemble la chaîne avec des espaces supplémentaires (essayez de lire à la verticale):

o t t f f s s e n
n w h o i i e i i
e o r u v x v g n
    e r e   e h e 
    e       n t

Comme expliqué dans les commentaires ci-dessous, [input()::9]commence à l'index donné et sélectionne chaque neuvième caractère suivant.

grc
la source
9
Oh merde, j'aime ça. Soit dit en passant, il s’agit bien de python 2.
undergroundmonorail
3
Expliquez s'il vous plaît! :)
Christofer Ohlsson le
6
@ChristoferOlsson input()::9est une plage allant input()de la fin de la chaîne à des étapes de 9, comme 1,10,19,28,37ou 3,12,21,30,39, qui sont exactement les index auxquels les lettres du mot correspondant sont trouvées.
Martin Ender
1
@ m.buettner merci! C'est bien.
Christofer Ohlsson le
6
N'est-ce pas quelque chose comme ce que fait un chiffrement de clôture de rail? (+1 pour une solution soignée en passant.)
Lou
18

Common Lisp - 22 octets

En voici un général (pas seulement pour un dix):

(format nil"~R"(read))

Oh, vous voulez des ordinaux (premier, deuxième, ... trois centième ...)? D'accord!

(format nil"~:R"(read))
filcab
la source
10
N'est-ce pas une échappatoire standard?
seequ
2
Une échappatoire dans quel sens? C'est clairement défini dans Hyperspec: lispworks.com/documentation/lw50/CLHS/Body/22_cba.htm
filcab le
3
Que ce soit une échappatoire standard ou non, c'est ce que je suis venu poster ici aussi. +1 :)
Joshua Taylor le
5
@TheRare En regardant les commentaires à cette réponse, je ne pense pas que la communauté s'entende pour dire qu'il s'agit d'une échappatoire. Mon sentiment est que les questions doivent interdire explicitement l'utilisation de ce type de fonction intégrée si elles ne doivent pas être utilisées.
Trauma numérique
16

BASH 51

Alors j'en ai créé une autre en utilisant ma deuxième idée et l'aide des autres:

set one two three four five six seven eight nine

$X

Où "X" est le numéro que vous voulez.


BASH 48 (67)

67 avec \nsauts de ligne

Je 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ù aest un fichier avec:

one
two
three
four
five
six
seven
eight
nine

Le fichier a 36 caractères et la commande bash est 13.

Comment ça fonctionne:

Chaque ligne du fichier est numérotée, en commençant par 1. Ainsi, «un» est sur la première ligne, «deux» sur la deuxième. La commande, sed -n 'Xp' aindique "Imprimez ce qui est répertorié à la ligne 'X' du fichier 'a' ' sedest un éditeur de flux Unix. -nsignifie être silencieux ou ignorer essentiellement tout le reste. Xpsignifie imprimer ce qui est en ligne 'X'.

Eric Lagergren
la source
2
Belle première réponse! Merci d'avoir pris le temps de comprendre comment nous formulons nos réponses sur ce site. Bienvenue dans Programmation Puzzles et Code Golf!
Justin
2
Vous n'avez pas compté les retours à la ligne a.
Dennis
1
Un octet de moins qu'avant, accepte un argument de ligne de commande et ne nécessite pas de fichier supplémentaire: pastebin.com/qdbXKQGP Bash se plaindra du délimiteur heredoc manquant, mais fonctionnera correctement avec Dash et Zsh.
Dennis
1
@ Dennis oh cool je l'aime. Suis-je censé modifier ma réponse avec la tienne maintenant? Désolé, je suis nouveau au code de golf.
Eric Lagergren
1
Vous pouvez omettre les '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.
Digital Trauma
16

C # - 127 (86/46)

Si vous ne prenez que la partie exécutable ...

Console.Write(((HourOfDay)Console.Read()-48));

et si HourOfDaycela aurait fait partie de l'espace de noms System, vous auriez besoin de 46 caractères. Malheureusement, il se trouve dans System.DirectoryServices.ActiveDirectoryce 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):

using System;class P{static void Main(){Console.Write((System.DirectoryServices.ActiveDirectory.HourOfDay)Console.Read()-48);}}

si enregistré dans un fichier nommé cg2.cs

csc cg2.cs /r:System.DirectoryServices.dll  && cg2

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 / box HourOfDaypour retourner 'Un'.

Jetez un coup d'œil à la version Powershell de ce même truc

rene
la source
Comment cela marche-t-il ? Disons que j'entre 9. Que fait le programme alors?
Nicolas Barbulesco
Qu'est-ce -48que cela fait ici?
Nicolas Barbulesco
2
@NicolasBarbulesco a ajouté un Comment cela fonctionne-t-il? paragraphe. Est-ce que ça fait du sens?
Rene
1
@ NicolasBarbulesco - Il est trié par ordre alphabétique. Ce qui a du sens dans tous les contextes sauf "Ces mots sont des nombres". Étant donné que je suis sûr que la documentation est générée automatiquement, il serait insensé de choisir un seul cas.
Bobson
13

Befunge 98, 116 105 103 octets

&1-       v
vvvvvvvvvj<
"""""""""
etnxereoe
nheivuewn
igvsiorto
nie"ffh""
"es ""t
 ""   "
>>>>>>>>>4k,@

Befunge n'était pas fait pour ça ...

Explication:

&1-           ;Grab the input number (`n`) and subtract 1 from it
&1-       v   ;Start moving downwards
          <   ;Start moving leftwards
         j    ;Jump `n - 1` characters to the left.
vvvvvvvvvj    ;Redirect each of the possible locations to jump to, sending the IP down.

        "     ;If `n` was 1, push `o, n, e` onto the stack (`o` is at the bottom)
        e
        n
        o
        "

       "      ;If `n` was 2, push `t, w, o` onto the stack
       o
       w
       t
       "

    *
    *
    *

"             ;If `n` was 9, push `n, i, n, e` onto the stack
e
n
i
n
"

>>>>>>>>>     ;Collect all the different possible positions the IP could be in, and send it right
>>>>>>>>>4k,  ;Print the top 5 chars. If there are less than 5, the rest are null characters. This is allowed
            @ ;End of program
Justin
la source
8
@ Dennis Je ne vois pas en quoi cela pourrait être si difficile. Il suffit de prendre le fichier, le transformer en un char[][], gardez un xet l' yemplacement, et exécuter le caractère à cet endroit. Le plus difficile serait de définir l'opération pour tous les personnages possibles.
Justin
1
Vous pouvez facilement enregistrer deux octets avec a &1-.
Har-Wradim
10

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

alert(btoa("×C§{Dð£Dá­ç´\x16\x8b«ÐX¯{D¢ÇD\x9e½éô\x12(!·Cb\x9dí").split(0)[prompt()])

Test simple

Dans la console Firefox:

[0,1,2,3,4,5,6,7,8,9]
.map(x=>x +',' btoa("×C§{Dð£Dá­ç´\x16\x8b«ÐX¯{D¢ÇD\x9e½éô\x12(!·Cb\x9dí").split(0)[x])
edc65
la source
J'ai essayé quelque chose de similaire mais je n'ai pas pu trouver une chaîne base64 valide commençant par un nombre. Je pense que votre réponse a été corrompue par stackexchange cependant.
nderscore
@nderscore, zut. Modifier le post, toujours valide selon moi
edc65
1
Avec la version qui contient les caractères échappés, tout fonctionne sauf 3 et 8, la sortie Treeet EightF.
Justin
3
@Quincunx 'Tree' est moi ne parle pas anglais
edc65
10

Javascript 73

alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[prompt()])

69

alert(btoa("ôéÞõ5õ1ëxO_¢êý|Þöȱõ'xß^hSôا{Ý").split(9)[prompt()])
Nderscore
la source
Techniquement, ce ne serait pas alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])la même chose mais économiser 8 octets? L'utilisateur entre toujours le nombre qu'il veut ...
Eric Lagergren
@eric_lagergren voulez-vous dire que l'utilisateur devrait changer le nombre dans le source? Je ne pense pas que cela compterait comme entrée.
nderscore
Oh, d'accord, je vois ce que tu veux dire. Je suppose que si vous l’exécutiez comme une commande dans la console, cela ferait partie de l’entrée plutôt que de la source.
Eric Lagergren
7

Perl, 55

$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]

Il est exécuté avec une option -p(+1 octet), par exemple:

perl -pe '$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]'

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 -pprend en charge la lecture de la ligne d'entrée $_et imprime le résultat $_.

Variations:

  • Avec nouvelle ligne (+3):

    $_=(nine,eight,seven,six,five,four,three,two,one)[-$_].$/

    ou (même nombre d'octets):

    s/./(nine,eight,seven,six,five,four,three,two,one)[-$&]/e

Mise à jour:

  • Utiliser des mots nus au lieu de qw[...](merci Zaid).

  • L'index négatif enregistre un octet (merci aragaer).

Heiko Oberdiek
la source
1
Sauver quelques personnages:$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
Zaid
2
@ Zaid: Merci, cela a sauvé deux octets. (Je suis habitué à use strict).
Heiko Oberdiek
Je n'aime pas ça "-1". $_=(nine,eight,seven,six,five,four,three,two,one)[-$_]- un caractère plus court.
aragaer
@aragaer: Merci, bonne idée.
Heiko Oberdiek
6

Oracle SQL - 46

select to_char(to_date(&1,'j'),'jsp')from dual

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). Le sp, est un suffixe d'élément de format qui épelle le nombre. Cela fonctionnera avec beaucoup de chiffres.

Il &1s'agit d'une variable de substitution qui ne fonctionne qu'avec les clients qui l'acceptent, par exemple SQL * Plus.

Ben
la source
J'ai une relation amour / haine avec le SGBDR d'Oracle, mais c'est agréable.
Rene
6

CJam, 45 43 octets

"^AM-^L8M-xM-^L^US^_M-^WrM-rM- 1M-s^CHM-|M-X^HE,M-qM-^EM-q4"256bKb'ef+'j/li=

Ce 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:

" one two three four five six seven eight nine"S/li=

Essayez-le en ligne.

Comment ça fonctionne

" Convert the string into an integer by considering it a base-256 number.                ";

"^AM-^L8M-xM-^L^US^_M-^WrM-rM- 1M-s^CHM-|M-X^HE,M-qM-^EM-q4"256b

" Convert the integer from above into an array by considering it a base-20 number.       ";

Kb

" Add the ASCII character code of “e” to all elements of that array. This casts to char. ";

'ef+

" So far, we've pushed the string “jonejtwojthreejfourjfivejsixjsevenjeightjnine”.       ";

" Split the the above string where the character “j” occurs.                             ";

'j/

" Read an integer from STDIN and push the corresponding substring.                       ";

li=

Exemple

$ base64 -d > convert.cjam <<< IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YktiJ2VmKydqL2xpPQ==
$ wc -c convert.cjam
43 convert.cjam
LANG=en_US cjam convert.cjam <<< 5
five
Dennis
la source
Wow, nos réponses sont identiques, même en longueur (je suppose que l'utilisateur entre une chaîne).
Justin
1
@Quincunx: Les mêmes esprits se sentent bien! : P Mais la lecture de la saisie de l'utilisateur coûtera deux octets à CJam, je vais donc devoir penser à autre chose ...
Dennis
@Quincunx: Cela devrait également fonctionner avec GolfScript, bien que cela ne économise probablement pas d'octets. Dump Base64:IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
Dennis, le
C'est ce que j'ai réussi à trouver; c'est plus long: golfscript.apphb.com/…
Justin le
Savez-vous ce que golfscript attend pour les caractères non-ASCII? Il semble ne pas être utf-8
Justin
5

GolfScript, 51 octets

~'
one
two
three
four
five
six
seven
eight
nine'n/=

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

Justin
la source
L'utilisateur doit saisir une chaîne, vous ne pouvez pas la coder en dur. En outre, votre Try it herelien a un code différent du code collé.
Jon
@Chipperyman L'utilisateur entre une chaîne dans ce programme. La Try it herediffé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.
Justin
Ah, je vois. Je ne connais pas très bien golfscript, merci de me l'avoir fait savoir.
Jon
2
@Chipperyman: GolfScript place le contenu de STDIN sur la pile avant d'exécuter le script lui-même.
Dennis
2
Hah! Je peux te battre d'un octet ! ;-)
Ilmari Karonen
4

Perl, 60 octets

$_=(ZOneTwoThreeFourFiveSixSevenEightNine=~/.[a-z]*/g)[$_]

Nécessite le -pcommutateur (deux octets).

Exemple

$ perl -p convert.pl <<< 5
Five

Comment ça fonctionne

  • -plit à 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 $_.

  • -paffiche la valeur de $_.

Dennis
la source
2
J'aime le truc de regex. +1
voir le
3

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.

@setlocal enabledelayedexpansion
@set s="ottffssennwhoiieiieoruvxvgn  ere ehe  e   nt
@set /a c=%1
@set z=!s:~%c%,1!
@if _%z%==_ exit /b
@echo %z%
@%0 %c%+9

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

cinq

tu verras

f
i
v
e

Ruslan
la source
3

Bash + coreutils, 64

Concept de compression non compétitif

xxd -p<<<TàPnàõ:àsÀ~®@ãCN|tr 0-9a-d \\ng-inor-x|sed -n $1p

Certains caractères exotiques peuvent ne pas bien être rendus ici, ce script peut donc être reconstruit à partir de sa représentation en base64:

base64 -d <<< eHhkIC1wPDw8VOCLUIJu4PWWDzrgc8B+rkDjEoBDTnx0ciAwLTlhLWQgXFxuZy1pbm9yLXh8c2VkIC1uICQxcA==

Exemple de sortie

$ ./n.sh 1
one
$ ./n.sh 9
nine
$ 

Explication

Il m'est apparu que la chaîne one two three four five six seven eight ninene contenait que les lettres efghinorstuvwxet 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 demandons trou similaires. Comme la chance l'aurait, rstuvwxsont consécutifs, peuvent donc être exprimés r-xà tr. Le codage est agencé de telle sorte eet fsont laissés en l' état , et que les mots sont séparés saut de ligne, de sorte que nous pouvons utiliser sedpour 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.

Trauma numérique
la source
3

(pur) Bash, 64 ans

Prend l’entrée comme premier argument, en supposant une entrée valide.

v=(o one two three four five six seven eight nine)
echo ${v[$1]}

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é):

v=(one two three four five six seven eight nine)
echo ${v[$1-1]}

la source
2
Même nombre de personnages: v=(one two three four five six seven eight nine)etecho ${v[$1-1]}
Dennis Williamson le
3

Python 2.x - 65 64

Pas aussi bon que la réponse de @grc, mais certainement plus lisible :-)

'one two three four five six seven eight nine'.split()[input()-1]

Un personnage de moins, grâce à @flornquake

'nine eight seven six five four three two one'.split()[-input()]
Willem
la source
Celui-ci est bien aussi. :-) Ça marche.
Nicolas Barbulesco
3
Vous pouvez sauvegarder un personnage comme celui-ci:'nine eight seven six five four three two one'.split()[-input()]
flornquake
Thats un Nice!
Willem
3

Java 7 - 185

class Num{
public static void main(String[] args) {
    System.out.print("ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE".split(",")[(new java.util.Scanner(System.in)).nextInt()-1]);
    }}
Bébé
la source
3

C 111

#include <stdio.h>
int main(){printf("%.5s","one  two  threefour five six  seveneightnine"+5*(getchar()-'1'));}

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!

Jerry Coffin
la source
1
+1 Les golfeurs de code ne sont généralement pas gênés si votre code c est compilé avec des avertissements , à condition qu'il réponde aux spécifications. Ainsi , vous pouvez omettre le #includeet main()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.
Trauma numérique
Je ne comprends pas la longueur, et je ne vois pas où il y aurait 7 caractères.
Nicolas Barbulesco
@ NicolasBarbulesco: C'est 111 caractères - mais si nous traitons le 111comme binaire, cela se convertirait 7en décimal.
Jerry Coffin
Jerry, il y a du code golf dans ta tête!
Nicolas Barbulesco
3

bash say (OS X): 3 8

"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:

say|read

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

Cousin cocaine
la source
ne devrait pas être 5?
RPAP
@ rpax Je ne crois pas que l'entrée soit considérée comme un caractère, n'est-ce pas?
CousinCocaine
1
C'est malin. Mais cela manque l'entrée.
Nicolas Barbulesco
1
Malheureusement, cette réponse n'est pas valide car: elle n'accepte jamais les entrées de l'utilisateur ET ne fonctionne que si le nombre est 4.
Jon
1
Le commentaire de Chipperyman sur cette réponse de CousinCocaine est vrai. Mais il en va de même pour la réponse de @RegisteredUser . Cependant, Chipperyman a rejeté cette réponse de CousinCocaine et a déclaré la réponse de l'utilisateur enregistré gagnant ex æquo. En outre, la réponse par Utilisateur enregistré est une réplique de cette réponse par CousinCocaine. C'est plus qu'injuste.
Nicolas Barbulesco Le
2

VBScript 98 80 75

msgbox split(" one two three four five six seven eight nine")(inputbox(""))
confortablydrei
la source
2

J - 68 ou 60 57 ou 53 octets

Version interactive (stdin):

>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1

Version de la fonction:

f=:one`two`three`four`five`six`seven`eight`nine>@{~<:

Explication:

f=:one`two`three`four`five`six`seven`eight`nine>@{~<:
                                                   <: Decrease by one
                                                 {~   Get the correct string
                                               >@     Unbox

".(1!:1)1 lit une chaîne et la convertit en entier

voir
la source
Vous pouvez enregistrer un caractère en l’écrivant en tant que train ( (;:'one two blah')>@{~<:) et six autres en utilisant le gérondif one`two`blahau lieu de ;:.
algorithmshark
@ algorithmshark Merci! J'apprends toujours J. Bien que la version de train n'exige pas un texte infini (edit: apparemment pas ... pourquoi pas?) Et la version gérondée des guillemets supplémentaires (edit: oh, il crée des boites)?
seequ
Un fork peut avoir un nom dans l'argument de gauche, qui est un raccourci pour un verbe constant produisant ce nom avec un rang infini (qv dans le Dictionnaire ). Et non, pas de guillemets supplémentaires sur le gérondif: les noms non définis sont traités comme des références aux verbes, et le gérondi pour cela est simplement une chaîne encadrée contenant le nom.
algorithmshark
De plus, vous n'avez pas besoin d'écrire la version de STDIN sous forme d'expression verbale: >one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]13 caractères sont plus courts.
algorithmshark
1
@ Algorithmshark Haha, pourquoi ne l'ai-je pas fait de cette façon?
seequ
2

Perl 36 (58 autonome)

use Number::Spell;say spell_number<>

Ou, sans modules supplémentaires:

say qw(one two three four five six seven eight nine)[<>-1]
el.pescado
la source
Votre premier script ne fonctionne pas, sur mon Mac. 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.
Nicolas Barbulesco
Votre deuxième script ne fonctionne pas, sur mon Mac. 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.
Nicolas Barbulesco le
2

En AppleScript; 123 caractères.

{"one","two","three","four","five","six","seven","eight","nine"}'s item((display dialog""default answer"")'s text returned)

Ce script prend l'entrée dans une boîte de dialogue. Ensuite, il donne la sortie dans le résultat AppleScript  .

Exemple :

  • Contribution : 6
  • Sortie: "six"

Voici une version plus agréable:

set l to {"one","two","three","four","five","six","seven","eight","nine"}
set n to text returned of (display dialog "?" default answer "")
display dialog (l's item n) buttons ("OK") default button 1

Cette version affiche la sortie dans un joli dialogue.

Exemple :

  • Contribution : 9
  • Sortie: 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! ]

Nicolas Barbulesco
la source
1
set n to text returned of... Sensationnel.
seequ
2

Powershell - 91 74

[Enum]::ToObject([System.DirectoryServices.ActiveDirectory.HourOfDay],[Console]::Read()-48)

Découvrez comment utiliser pour supprimer l'appel Enum et ToObject:

[System.DirectoryServices.ActiveDirectory.HourOfDay]([Console]::Read()-48)

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

rene
la source
2

CJam - 50

Il s'agit d'une solution ASCII standard qui utilise des requêtes HTTP (ceci est autorisé dans la question):

"aj21.com/"r+g

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 .

Aditsu
la source
1
S'il vous plaît ajouter un commentaire si le vote est négatif.
Aditsu
-1, c'est une échappatoire standard .
nyuszika7h
3
@ nyuszika7h c'est spécifiquement autorisé dans cette question
Aditsu
1
Désolé, j'ai raté ça. Je ne peux pas annuler mon vote vers le bas jusqu'à ce que la réponse soit modifiée.
Nyuszika7h
1
@ nyuszika7h édité
Aditsu
2

Lot - 86

Beaucoup plus courte que l'autre réponse de lot, et étonnamment compétitive.

for /f "tokens=%1" %%1 in ("one two three four five six seven eight nine") do echo>%%1

Utilisé en tant que filename.bat number, et la sortie est sous la forme d'un fichier avec le nom du numéro correct.

Οurous
la source
2

Ruby 64

p %w?one two three four five six seven eight nine?[$*[0].to_i-1]
Mhmd
la source
1
Vous pouvez couper quelques octets de plus en substituant 9 directement à la place de x
M. Alien
6
Je ne vois pas où ce code prend en entrée. Et pourquoi écrire 9-1quand vous pouvez juste dire 8? Bien sûr les deux 9-1et 8ont tort; ce script génère "neuf" tout le temps et ignore les entrées.
Ray Toal
2

BASH 9

réplique Linux sans vergogne de la réponse de cousincoicane

spd-say 1

parle un

Utilisateur enregistré
la source
1
Cela ne fonctionnerait-il que si l'entrée était 1?
Jon
1
@Chipperyman cela fonctionne pour n'importe quel numéro
Utilisateur enregistré
Limite, mais malin!
Nicolas Barbulesco
Cela manque l'entrée.
Nicolas Barbulesco
@ nicolasbarbulesco oui. mais il y avait beaucoup d'autres réponses qui manquent l'entrée, alors je suis allé de l'avant avec ceci.
Utilisateur enregistré
2

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 -rpour reconstruire le programme GolfScript réel sur 50 octets à partir du vidage hexadécimal:

0000000: 7e6e 270b 97eb 442f e166 9894 9f00 c63c  ~n'...D/.f.....<
0000010: 8128 73a3 9b55 5065 a9fb f06a 2727 ff16  .(s..UPe...j''..
0000020: 277b 6261 7365 7d2f 2b6e 2f3d 7b39 392b  '{base}/+n/={99+
0000030: 7d25                                     }%

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ée osur une nouvelle ligne, que nJ'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 lettre m, qui est commodément absent des noms de nombres.)

Voici une version dé-golfée du programme:

~       # eval the input, turning it into a number
n       # push a newline onto the stack; we'll need it later

# this is the byte string encoding the number names:
"\x0B\x97\xEBD/\xE1f\x98\x94\x9F\x00\xC6<\x81(s\xA3\x9BUPe\xA9\xFB\xF0j"

# convert the encoded string from base 255 to base 22
# (and, incidentally, from a string to an array):
"\xFF\x16" {base}/

+       # prepend the newline pushed earlier to the array, re-stringifying it
n/      # split the resulting string at newlines
=       # pick the substring corresponding to the input number
{99+}%  # add 99 to the character values in the chosen substring
Ilmari Karonen
la source