将1、2、3、4、5、6、7、8和9转换为“一个”,“两个”,“三个”等


47

优胜者:Professorfish的猛击答案!整个9个字节!哇!

您可以继续提交答案,但是您将无法再获胜。供后代保留的原始帖子:


您的目标是将1-9之间的整数转换成它代表的单词。

  • 您无需担心小数
  • 用户将输入一个数字。假设他们永远不会输入10或更高的值
  • 用户必须在某个时候键入数字,但是程序读取它的方法并不重要。它可以与stdin一起使用,读取文本文件等,但是用户必须在某个时候按键盘上的9按钮(例如)
  • 它不区分大小写(例如,“一个”,“一个”,“ oNe”,“ OnE”等都是可以接受的)
  • 允许HTTP / etc请求,但是服务器执行的所有请求代码都将计入最终代码的字节数(例如,如果我有C ++程序发出HTTP请求,则HTTP请求中使用的PHP代码将被计入)
  • 任何可以编译和运行的东西都是可以接受的

  • 该竞赛已于 2014年6月27日(发布后7天)结束。
  • 这是一个,因此最短的代码获胜

2
尾随空格(即one )是否可以接受?
grc 2014年

1
@grc是的,只要程序输出单词即可。
2014年

1
您应该指定只能打印给定的数字,而不能打印其他数字。
Pinna_be 2014年

1
例如,@ Pinna_be,如果我输入3one two three four five six seven eight nine即使从技术上来说,您也无法输出three。同样,你不能输出three seven
乔恩·

1
这个问题很好。但我不喜欢增加日期限制。特别是,日期限制是在日期限制之前而不是7天之前添加的。
Nicolas Barbulesco 2014年

Answers:


19

Bash(使用bsdgames),9

number -l

从标准输入读取。

我不知道为什么有这个实用程序,但是无论如何。


2
我不确定我喜欢安装bsdgames,然后称其为“ bash”,尽管我承认我的预订是主观的。
Paul Draper 2014年

@PaulDraper我也不是。我没有将其发布为一个严肃的答案,我认为其他答案之一也应该被接受

5
这不是标准漏洞吗?
贾斯汀

2
@Quincunx是的,基本上是这样。尽管大多数东西都是Bash中的外部实用程序,但我不会将bsdgames包视为非常允许的东西(与grep,wget,coreutils,sed,bc等不同)。

132

Python 2,64

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

这是字符串的样子,带有一些额外的空格(尝试垂直读取):

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

如以下注释中所述,[input()::9]从给定索引开始并选择每第九个后续字符。


9
哦,该死,我喜欢这个。可能值得指出的是,这是python 2。
地下

3
请解释!:)
Christofer Ohlsson 2014年

6
@ChristoferOlsson input()::9是一个从input()字符串到末尾的范围,以91,10,19,28,37或的步长确定3,12,21,30,39,这正是找到对应单词的字母的索引。
Martin Ender 2014年

1
@ m.buettner谢谢!真好。
Christofer Ohlsson 2014年

6
这难道不是像铁轨密码那样吗?(顺便说一句,为一个整洁的解决方案+1。)
2014年

18

通用Lisp-22个字节

这是一个普通的(不仅仅是十个):

(format nil"~R"(read))

哦,您要买普通的东西(第一,第二,三百...)吗?好!

(format nil"~:R"(read))

10
这不是标准漏洞吗?
seequ 2014年

2
漏洞是什么意思?在Hyperspec中明确定义了以下内容:lispworks.com/documentation/lw50/CLHS/Body/22_cba.htm
filcab 2014年


3
无论是否存在标准漏洞,这也是我来此发布的内容。+1 :)
约书亚·泰勒

5
@TheRare查看该答案的评论,我认为社群之间没有强烈的共识认为这是一个漏洞。我的感觉是,如果不使用问题,则需要明确禁止使用此类内置函数。
Digital Trauma

16

重击51

因此,我用第二个想法加上其他人的一些帮助又做了一个:

set one two three four five six seven eight nine

$X

其中“ X”是您想要的数字。


重击48(67)

67,带\n换行符

我不确定这是否完全有用,因为它是从文件中读取的,但是:

sed -n Xp a

其中“ X”是输入,而a文件是:

one
two
three
four
five
six
seven
eight
nine

文件为36个字符,bash命令为13。

这个怎么运作:

文件中的每一行都从1开始编号。因此,“ 1”在第一行,“ 2”在第二行。该命令sed -n 'Xp' a说:“请打印文件'a'的行'X'上列出的内容” sed是Unix流编辑器。-n意味着保持沉默,或者只是本质上忽略其他一切。Xp表示打印“ X”行上的内容。


2
不错的第一答案!感谢您抽出宝贵的时间来弄清楚我们如何在此站点上设置答案格式。欢迎来到编程难题和Code Golf!
贾斯汀

2
您没有计入中的换行符a
丹尼斯2014年

1
比以前少一个字节,它接受命令行参数并且不需要其他文件:pastebin.com/qdbXKQGP Bash会抱怨缺少Heredoc分隔符,但在Dash和Zsh上可以正常运行。
丹尼斯

1
@丹尼斯哦,酷,我喜欢它。我现在应该编辑您的答案吗?抱歉,是高尔夫的新手。
Eric Lagergren 2014年

1
您可以省略'引号。您也可以尝试使用here字符串代替外部文件。但是您确实应该计算文件中的换行符。
Digital Trauma 2014年

16

C#-127(86/46)

如果您只执行可执行文件...

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

如果HourOfDay要成为System名称空间的一部分,则需要46个字符。不幸的是,它位于System.DirectoryServices.ActiveDirectory其中,使其达到了86 ...其他噪音破坏了它。

这是可从命令行编译和运行的(127个字符):

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

如果保存到名为cg2.cs的文件中

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

这是如何运作的?

HourOfDay 是一个枚举类型,因此我们可以使用名称代替魔术常数。枚举类型具有ToString()实现,可为您提供value名称。您可以将int转换为枚举。Console.Read()从输入流中读取一个表示为整数的字符。键入“ 1”将得到49,将48减去48将得到1,强制转换/转换框HourOfDay返回“ One”。

看看这个技巧的Powershell版本


这是如何运作的 ?假设我输入9。该程序然后做什么?
Nicolas Barbulesco 2014年


这是-48做什么的?
Nicolas Barbulesco 2014年

2
@NicolasBarbulesco添加了这项工作如何进行?段。是否有意义?
rene 2014年

1
@NicolasBarbulesco-按字母顺序排序。除了“这些单词是数字”之外,这在每种情况下都是有意义的。由于我确定文档是自动生成的,因此特殊情况下一篇文章没有意义。
Bobson 2014年

13

Befunge 98,116个 105 103字节

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

Befunge不是为此而生的...

说明:

&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

8
@丹尼斯,我看不出这有多难。只需取出文件,将其转换为char[][],并保留xy位置,然后在该位置执行字符。最困难的事情是为每个可能的字符定义操作。
贾斯汀

1
您可以使用轻松保存两个字节&1-
har-wradim

10

脚本68

Atob / btoa可能是穷人的压缩工具 (但是,如果您想在控制台中尝试此操作,则无法从您一次看到的格式化文本中进行复制。请转到“编辑”并从源面板进行复制)

Markdown编辑器不喜欢此答案中的某些字符:某些字符在保存时会丢失。不过,我认为这是一个编辑器问题,不是我的。丢失的字符是完全有效的8位Unicode字符。
(否则我错了,如果这个问题已经在meta中讨论过了,请告诉我)这是转义字符的版本,每个序列\ xNN都应计为1

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

简单测试

在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])

我尝试了类似的操作,但是找不到以数字开头的有效base64字符串。我认为您的答案已被stackexchange破坏。
2014年

@nderscore,该死的你的权利。修改帖子,依我的说法仍然有效
edc65

1
对于带有转义字符的版本,除了3和8以及输出Tree和之外,其他所有功能都可以使用EightF
贾斯汀

3
@Quincunx'树'是我不会说英语
edc65

10

Javascript 73

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

69

alert(btoa("ôéÞõ5õ1ëxO_¢êý|Þöȱõ'xß^hSôا{Ý").split(9)[prompt()])

从技术上讲不是alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])同一件事,但可以节省8个字节吗?用户仍然输入他们想要的号码...
Eric Lagergren 2014年

@eric_lagergren您是说用户必须更改源中的数字吗?我认为那不算输入。
nderscore 2014年

哦,好的,我明白你的意思了。我想,如果您像在控制台中一样运行它,它将是输入的一部分,而不是源。
埃里克·拉格格伦

7

Perl,55岁

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

它与选项-p(+1字节)一起运行,例如:

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

在STDIN中需要输入,而输出将写入STDOUT。

该代码仅生成一个数组并选择正确的元素。Option -p负责将输入行读入$_并在中打印结果$_

变化:

  • 尾随换行符(+3):

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

    或(相同字节数):

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

更新:

  • 使用裸词代替qw[...](感谢Zaid)。

  • 负索引保存一个字节(感谢aragaer)。


1
保存几个字符:$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
Zaid

2
@Zaid:谢谢,它节省了两个字节。(我习惯了use strict)。
Heiko Oberdiek 2014年

我不喜欢那个“ -1”。$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]-短一个字符。
aragaer 2014年

@aragaer:谢谢,好主意。
Heiko Oberdiek 2014年

6

Oracle SQL-46

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

示范

我承认,这确实包括一个标准漏洞,但是SQL比Golfscript短。我无法抗拒!

它通过(ab)使用Oracle的datetime格式模型来工作TO_DATE(n, 'j')将数字转换为儒略日,即公元前4712年1月1日以来的天数。TO_CHAR(<date>, 'jsp')将其转换回整数(尽管是字符串)。的sp,是一个格式元素后缀似乎意味着数。实际上,这将处理大量数字。

&1是一个替代变量,将只与接受客户的工作,例如在SQL * Plus。


我与Oracle的RDBMS有恋爱关系,但这很好。
rene 2014年

6

CJam,45 43个字节

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

由于某些字符不可打印,因此上面使用^和M-表示法。

以另外9个字节为代价,可以避免无法打印的字符:

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

在线尝试。

这个怎么运作

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

$ base64 -d > convert.cjam <<< IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YktiJ2VmKydqL2xpPQ==
$ wc -c convert.cjam
43 convert.cjam
LANG=en_US cjam convert.cjam <<< 5
five

哇,我们的答案是一样的,甚至是长度也一样(我假设用户输入了一个字符串)。
贾斯汀

1
@Quincunx:相同的思想认为很棒!:P但是,读取用户输入的内容将在CJam中花费两个字节,因此我不得不考虑其他事情……
Dennis

@Quincunx:它也应该与GolfScript一起使用,尽管它可能不会保存字节。Base64转储:IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
丹尼斯

这是我设法提出的;时间更长:golfscript.apphb.com/…–
贾斯汀

您知道golfscript对非ASCII字符的编码要求吗?似乎不是utf-8
贾斯汀

5

GolfScript,51个字节

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

这是一个简单的查找表。对输入求值(~),创建值的数组,并找到索引。

在这里尝试


用户必须输入一个字符串,您不能对其进行硬编码。另外,您的Try it here链接具有与粘贴代码不同的代码。
2014年

@Chipperyman用户确实在该程序中输入了字符串。该Try it here链接的代码不同的是,因为该网页不支持用户输入。更改之后的字符串;,这与用户输入相同。
贾斯汀2014年

知道了 我不太了解golfscript,谢谢您告诉我。
2014年

2
@Chipperyman:GolfScript在执行脚本本身之前将STDIN的内容放在堆栈上。
丹尼斯2014年

2
哈哈!我可以打败你一个字节!;-)
Ilmari Karonen14年

4

Perl,60个字节

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

需要-p切换(两个字节)。

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

这个怎么运作

  • -p从STDIN读取并将结果保存在$_

  • =~/.[a-z]*/g 将前一个裸字拆分为一个(大写)字母的子字符串,然后是任意数量的小写字母。

  • (…) 将子字符串收集到一个数组中。

  • [$_] 检索与用户输入相对应的子字符串。

  • $_=…将结果保存到中$_

  • -p打印的值$_


2
我喜欢正则表达式的把戏。+1
seequ 2014年

3

DOS批-162个字符(包括换行符)

这个答案是受@grc的Python答案启发的,尽管我确实有类似的想法。

@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

用法:

[文件名] [编号]

例如,如果代码在一个名为speak.bat的文件中,并且您希望看到数字“ 5”,则可以将其运行为:

speak 5

同样,输出是从上到下,而不是从左到右!所以代替

你会看见

˚F

v
é


3

Bash + coreutils,64岁

非竞争性压缩概念

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

这里的某些奇特字符可能无法很好地呈现,因此该脚本可能是从base64表示中重建的:

base64 -d <<< eHhkIC1wPDw8VOCLUIJu4PWWDzrgc8B+rkDjEoBDTnx0ciAwLTlhLWQgXFxuZy1pbm9yLXh8c2VkIC1uICQxcA==

输出示例

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

说明

在我看来,该字符串one two three four five six seven eight nine仅包含字母efghinorstuvwx和空格分隔符-总共15个字符值。因此,每个字符都可以用4位或每1个字节2个字符表示。我们可以使用字节的十六进制表示形式作为将每个字节分成两个十六进制数字的简单方法。然后,我们可以将十六进制数字转换回我们需要使用的字母tr或类似字母。由于幸运的是,rstuvwx是连续的,所以可以表示为r-xtr。该编码设置成ef被保持原样,那话是换行分隔,所以我们可以使用sed到ouptut正是我们需要的线。

该解码过程最终会占用大量额外的空间,因此使该答案不具有外壳脚本样式的答案的竞争力,但在其他语言中可能是有用的概念。


3

(纯)Bash,64岁

假设输入有效,将输入作为其第一个参数。

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

创建一个数组v,然后访问输入中指定的元素。由于数组的索引为零,因此我必须添加第0个元素作为占位符。或者(thnx @DennisWilliamson指出了这一点):

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

2
相同的字符数:v=(one two three four five six seven eight nine)echo ${v[$1-1]}
丹尼斯威廉姆森

3

Python 2.x- 65岁 64

不如@grc的答案,但肯定更清晰:-)

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

少一个字符,多亏@flornquake

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

这个也很好。:-) 有用。
Nicolas Barbulesco 2014年

3
您可以保存一个这样的角色:'nine eight seven six five four three two one'.split()[-input()]
flornquake

那是一个不错的选择!
威廉

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]);
    }}

3

C 111

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

这里是精心设计的长度,所以我可以把它解释为二进制和转换为十进制。我相信只有7个字符,我会赢了!


1
+1 代码行通常不介意您的c代码是否符合警告,只要符合规范即可。因此,您可以省略#includeand main()的返回类型。还可以对表达式进行一些重构:main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}。根据我的计数,为86个字符。
Digital Trauma 2014年

我没有长度的东西,也看不到哪里有7个字符。
Nicolas Barbulesco 2014年

@NicolasBarbulesco:它是111个字符-但是,如果我们将111as视为二进制,则将转换为7十进制。
杰里·科芬

杰里,你头顶上有代码高尔夫!
Nicolas Barbulesco 2014年

3

bash说(OS X):3 8

“您的目标是将1到9之间的整数转换成它代表的单词”

上次我检查时,口语单词也是单词。上一次尝试(接受无输入)

say 4

编辑,必须能够读取输入:

say|read

输入任何数字,单词就会出现。我知道结束日期是应该的,但是我认为我应该赢得了比赛。

音频文件示例:four.aiff


不应该是5?
rpax 2014年

@rpax我不认为输入被视为字符,是吗?
CousinCocaine 2014年

1
这很聪明。但这错过了输入。
Nicolas Barbulesco 2014年

1
不幸的是,这不是一个有效的答案,因为:它从不接受来自用户的输入,并且仅在数字为4时才起作用
Jon

1
Chipperyman对CousinCocaine的答案的评论是正确的。但是@RegisteredUser的答案也是如此。但是,Chipperyman拒绝了CousinCocaine的回答,并由注册用户得主ex quo宣布了答案。此外,“注册用户”的答案是“表兄弟”的该答案的副本。这不仅仅是不公平的。
Nicolas Barbulesco 2014年

2

VBScript 98 80 75

msgbox split(" one two three four five six seven eight nine")(inputbox(""))

2

J- 68或60 57或53个字节

互动版(stdin):

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

功能版本:

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

说明:

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

".(1!:1)1 读取一个字符串并将其转换为整数


您可以通过将其写成火车((;:'one two blah')>@{~<:)来保存一个字符,one`two`blah而使用gerund 代替来保存另外六个字符;:
algorithmhark

@algorithmshark谢谢!我仍在学习J。尽管,火车版本不要求文本是无穷大的(编辑:显然不是。。盒)?
seequ

叉子的左自变量中可以有一个名词,这是一个常量动词的缩写,表示该谓词具有无限等级(qv 是Dictionary)。而且不,在gerund上没有多余的引号:未定义的名称被视为对动词的引用,而gerund只是包含名称的框式字符串。
algorithmhark

另外,您不必将STDIN版本写为动词表达式:>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1短3个字符。
algorithmhark

1
@algorithmshark哈哈,我为什么不那样做呢?
seequ 2014年

2

Perl 36(58独立)

use Number::Spell;say spell_number<>

或者,没有其他模块:

say qw(one two three four five six seven eight nine)[<>-1]

您的第一个脚本在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 2014年

您的第二个脚本在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 2014年

2

在AppleScript中; 123个字符。

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

该脚本在对话框中接受输入。然后,它在AppleScript的result中给出输出  。

范例:

  • 输入: 6
  • 输出: "six"

这是一个更好的版本:

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

此版本在一个漂亮的对话框中显示输出。

范例:

  • 输入: 9
  • 输出: nine

[答案编辑; 略微改进了输入对话框; 仍为124个字符。答案再次编辑; 现在少1个字符!]


1
set n to text returned of... 哇。
seequ 2014年

2

Powershell- 91 74

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

了解如何进行强制转换以删除Enum和ToObject调用:

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

这是如何运作的?

HourOfDay是一种枚举类型,因此我们可以使用名称代替魔术常数。枚举类型具有ToString()实现,可为您提供常量值的名称。您可以将int转换为枚举。Console.Read()从输入流中读取一个表示为整数的字符。键入“ 1”得到49,减去48得到1,强制转换为HourOfDay以返回“ One”。

因为powershell对写入输出流的所有对象执行ToString,并且不需要绒毛将其转换为可执行文件,所以除了powershell之外还需要其他所有东西...


2

果酱-50

这是使用HTTP请求的普通ASCII解决方案(问题中允许这样做):

"aj21.com/"r+g

在服务器上,有9个纯文本文件,分别名为1,2,...,9,每个文件包含相应的单词。

总大小:14 + 3(“一个”)+ 3(“两个”)+ 5 + 4 + 4 + 3 + 5 + 5 + 4 =50
。可以使用较短的域来打更多的球。

在线解释器不支持HTTP请求,因此该程序需要使用java解释器运行。


1
如果投票不足,请添加评论。
2014年

-1,这是一个标准漏洞
nyuszika7h 2014年

3
@ nyuszika7h这个问题明确允许使用
aditsu

1
抱歉,我错过了。在修改答案之前,我现在无法撤消我的不赞成投票。
nyuszika7h 2014年

1
@ nyuszika7h编辑
aditsu 2014年

2

批次-86

远远少于其他批处理答案,实际上具有惊人的竞争力。

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

用作filename.bat number,并且输出为文件形式,其名称为正确的数字。


2

红宝石64

p %w?one two three four five six seven eight nine?[$*[0].to_i-1]

1
您可以通过在x位置直接替换9来砍掉更多的字节
Alien先生

6
我看不到此代码在哪里输入。以及为什么9-1在您只能说的时候写8?当然两者9-18都是错误的。该脚本始终输出“九”,而忽略输入。
Ray Toal 2014年


2

GolfScript,50个字节

我想看看是否可以击败Quincunx的51字节独立式GolfScript解决方案。事实证明,有了足够的技巧,我可以—减少一个字节。

由于我使用的技巧之一是使用可打印ASCII范围之外的字节,因此无法将结果程序直接粘贴到此处。相反,我提供了它的十六进制转储。Unixish系统上的用户可以使用xxd -r十六进制转储来重建实际的50字节的GolfScript程序:

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                                     }%

生成该程序的基本技巧很简单:我通过c从字符值中减去99(字母的ASCII码)来压缩构成Quincunx大部分代码的长字符串文字,并将结果值解释为以22为底的数字(足以将字母编码为x),然后将结果数字重新编码为以255为基数,以产生构成程序前半部分大部分的不可打印字节字符串。然后,程序的其余部分将逆转此过程,将字符串解码回可打印的内容。

(由于数字名称中实际出现的最低字母为e,我可以通过从ASCII码中减去101并使用基数20来进一步缩短字节字符串。但是,减去101会将该字母映射o到换行符,之所以使用它作为数字定界符,是因为它可以方便地用作nGolfScript中的内置常量。解决该问题所花费的成本要比使用低位基数所节省的一个字节多。使用偏移量99可使换行符与字母相对应m,这在号码名称中很方便。)

这是该程序的简化版本:

~       # 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.