1、2、3、4、5、6、7、8、および9を「1」、「2」、「3」などに変換する


47

勝者:professorfish's bash answer!全部で9バイト!うわー!

引き続き回答を送信できますが、勝つことはできません。後世のために残された元の投稿:


あなたの目標は、1から9までの整数を、それが表す単語に変換することです。

  • あなたは小数を心配する必要はありません
  • ユーザーは数字を入力します。10以上は入力しないと仮定します
  • ユーザーは、いくつかの点で番号を入力する必要がありますが、プログラムがそれを読み込む方法は重要ではありません。テキストファイルの読み取りなど、stdinを使用できますが、ユーザーはキーボードの9ボタンを(たとえば)ある時点で押す必要があります。
  • 大文字と小文字は区別されません(つまり、「one」、「One」、「oNe」、「OnE」などはすべて受け入れられます)
  • HTTP /などの要求が許可されている、しかし、私はC ++のプログラムを持っていた場合は、要求があなたの最終的なコード(例えばのバイト数へのカウントに行われているサーバーで実行される任意のコードでは、HTTPリクエスト、HTTPリクエスト数で使用されるPHPコードを作ります)
  • コンパイルして実行できるものなら何でも構いません

  • このコンテストは 2014年6月27日に終了しました(投稿から7日後)。
  • これはので、最短のコードが勝ちます

2
末尾の空白(つまりone )は受け入れられますか?
— grc 14年

1
@grcはい、プログラムが単語を出力する限り。
— ジョン14年

1
指定した番号のみを印刷し、他の番号は印刷しないように指定する必要があります。
— Pinna_be 14年

1
@Pinna_beたとえば、私が入力した場合3、技術的に出力しone two three four five six seven eight nineても出力できません。同様に、あなたが出力できない、などthreethree seven
— ジョン

1
この質問はとても良かったです。しかし、私は日付制限の追加が好きではありません。特に、日付制限は7日前ではなく、日付制限の直前に追加されています。
— ニコラスバルブレスコ14年

回答:


19

Bash(with bsdgames)、9

number -l

標準入力から読み取ります。

なぜこのユーティリティがあるのか​​わかりませんが、何でも。


2
予約が主観的であることは認めますが、bsdgamesをインストールしてから「bash」と呼ぶのが好きかどうかはわかりません。
— ポールドレイパー14年

@PaulDraperどちらもI.私は他の答えの一つが受け入れられるに値すると思いますが、深刻な答えとしてこれを投稿しませんでしたか

5
これは標準的な抜け穴ではありませんか?
— ジャスティン14

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文字ごとに選択します。


9
ああ、たわごと、私はこれが好きです。ちなみに、これはpython 2であることを指摘する価値があります。
— 地下

3
説明してください!:)
— クリストファーオルソン14年

6
@ChristoferOlsson input()::9は、またはのようなinput()ステップの文字列の末尾から末尾までの範囲です。これは、対応する単語の文字が見つかるインデックスです。91,10,19,28,373,12,21,30,39
— マーティンエンダー

1
@ m.buettnerありがとう!それはすばらしい。
— クリストファーオルソン14年

6
これは、柵フェンス暗号のようなものではありませんか?(方法によってニート溶液のための+1)
— ルー

18

Common Lisp-22バイト

ここに一般的なものがあります(10個だけではありません):

(format nil"~R"(read))

ああ、序数が必要ですか(最初、2番目、... 300分の1 ...)?OK!

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

10
これは標準的な抜け穴ではありませんか?
— seequ 14年

2
どんな意味で抜け穴ですか?Hyperspec
— filcab


3
それが標準的な抜け穴であるかどうかにかかわらず、それは私がここに投稿するために来たものでもあります。+1 :)
— ジョシュアテイラー14年

5
@TheRareその答えに対するコメントを見ると、これが抜け穴であるという強いコミュニティのコンセンサスがあるとは思いません。私の考えでは、質問を使用しない場合、この種の組み込み関数の使用を明示的に禁止する必要があります。
— デジタル外傷14年

16

バッシュ51

そこで、2番目のアイデアに加えて、他の人の助けを借りて、別のアイデアを作成しました。

set one two three four five six seven eight nine

$X

ここで、「X」は希望する番号です。


バッシュ48(67)

\n改行を含む67

ファイルから読み取るため、これが完全にカウントされるかどうかはわかりませんが、:

sed -n Xp a

「X」は入力で、where aは次のファイルです。

one
two
three
four
five
six
seven
eight
nine

ファイルは36文字で、bashコマンドは13です。

使い方:

ファイル内の各行には、1から始まる番号が付けられます。したがって、1行目は「1」、2行目は「2」です。sed -n 'Xp' a「ファイル 'a'の行 'X'にリストされているものを印刷してください」というコマンドsedは、Unixストリームエディターです。-n黙ることを意味するか、他のすべてを本質的に無視するだけです。Xp行 'X'にあるものを印刷することを意味します。


2
素敵な最初の答え!このサイトで回答をどのようにフォーマットするかを理解していただき、ありがとうございます。プログラミングパズルとコードゴルフへようこそ!
— ジャスティン14年

2
で改行を数えませんでしたa。
— デニス14年

1
以前よりも1バイト少なく、コマンドライン引数を受け入れ、追加のファイルを必要としません。pastebin.com / qdbXKQGP Bashは、heredocデリミタの欠落について文句を言いますが、DashおよびZshでは問題なく動作します。
— デニス14年

1
@デニスああクール私はそれが好きです。私はあなたの答えを今すぐ編集することになっていますか?申し訳ありませんが、ゴルフをコーディングするのは初めてです。
— エリックラガーグレン14年

1
'引用符は省略できます。外部ファイルの代わりにhere文字列を使用してみることもできます。ただし、実際にはファイル内の改行を数える必要があります。
— デジタル外傷14年

16

C#-127(86/46)

実行可能な部分のみを取得する場合...

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

そして場合はHourOfDay、あなたが46個の文字を必要とするシステムの名前空間の一部であったであろう。残念ながら、System.DirectoryServices.ActiveDirectory86 になっているため、他のノイズによって損なわれます。

これはコンパイル可能で、コマンドラインから実行可能です(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 は列挙型であるため、マジック定数の代わりに名前を使用できます。列挙型には、valueの名前を提供するToString()実装があります。intを列挙型にキャストできます。Console.Read()は、整数として表される入力ストリームから文字を読み取ります。「1」を入力すると49が得られ、48を減算すると1が得られ、キャスト/ボックスがHourOfDay「One」に戻ります。

この同じトリックのPowershellバージョンを見てください


これはどのように作動しますか ?9と入力するとしましょう。プログラムは何をしますか?
— ニコラスバルブレスコ14年


これ-48はここで何をしますか?
— ニコラスバルブレスコ14年

2
@NicolasBarbulescoが追加しました。段落。理にかなっていますか?
— ルネ14年

1
@NicolasBarbulesco-アルファベット順にソートされています。これは、「これらの単語は数字です」以外のすべてのコンテキストで意味があります。ドキュメンテーションは自動的に生成されると確信しているため、1つの記事を特別な場合には意味がありません。
— ボブソン14年

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
@Dennisどうしてそんなに難しいのかわかりません。ファイルを取り出してに変え、場所をchar[][]保持し、xそのy場所でキャラクターを実行するだけです。最も難しいのは、考えられるすべてのキャラクターの操作を定義することです。
— ジャスティン14年

1
で2バイトを簡単に保存できます&1-。
— har-wradim 14年

10

Javascript 68

Atob / btoaは貧弱な人の圧縮ツールになる可能性があります (ただし、コンソールでこれを試してみたい場合は、一度に表示される書式設定されたテキストからコピーすることはできません。「編集」に移動してソースパネルからコピーします)

Markdownエディターは、この回答の一部の文字が気に入らず、一部の文字は保存時に失われます。それでも、それは私の問題ではなく、エディターの問題だと思います。失われた文字は完全に有効な8ビットのユニコード文字です。
(または、この問題がメタで既に議論されている場合、私に間違っている、私に知らせてください)ここに問題のある文字がエスケープされたバージョンがあります、各シーケンス\ 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によって回答が破損していると思います。
— アンダースコア14年

@nderscore、いまいましい。ポストを改正、まだそれは私に応じて有効だ
— edc65

1
エスケープされた文字を含むバージョンでは、3と8、出力TreeとEightF。
— ジャスティン14年

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バイト節約できますか?ユーザーはまだ彼らが望む数...入力
— エリックLagergren

@eric_lagergrenは、ユーザーがソースの番号を変更する必要があるということですか?それが入力としてカウントされるとは思わない。
— アンダースコア14年

ああ、わかった コンソールでコマンドのように実行した場合、ソースではなく入力の一部になると思います。
— エリックラガーグレン14年

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に書き込まれます。

コードは配列を生成し、適切な要素を選択するだけです。オプション-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]
— ザイド

2
@Zaid:ありがとう、2バイト節約しました。(私は慣れていますuse strict)。
— ヘイコオベルディク14年

私はその「-1」が好きではありません。$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]-1文字短い。
— aragaer

@aragaer:ありがとう、いいアイデア。
— ヘイコOberdiek 14年

6

Oracle SQL-46

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

デモンストレーション

これには標準の抜け穴が含まれていますが、SQLはGolfscriptよりも短いです。抵抗できませんでした!

Oracleの日時形式モデルを(ab)使用することで機能します。TO_DATE(n, 'j')数値をユリウス日、紀元前4712年1月1日からの日数に変換します。TO_CHAR(<date>, 'jsp')これを整数に戻します(ただし、文字列として)。sp、ある書式要素の接尾辞番号を綴ります。これは実際には非常に多くの数で機能します。

&1置換変数である場合、SQL * Plusのそれを受け入れるクライアント、とだけ仕事をよ。


オラクルのRDBMSとは恋愛関係がありますが、これは素晴らしいことです。
— ルネ14年

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

うわー、私たちの答えは長さが同じです(ユーザーが文字列を入力すると仮定します)。
— ジャスティン14年

1
@Quincunx:同様の心は素晴らしいと思う!:私は何か他のものを考える必要がありますので、Pしかし、読んでユーザ入力が...、CJamに2バイトの費用がかかります
— デニス・

@Quincunx:GolfScriptでも動作するはずですが、おそらくバイトは節約されません。Base64ダンプ:IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
— デニス、14年

これが私が思いついたものです。長いです:golfscript.apphb.com/…–
— ジャスティン

非ASCII文字に対してgolfscriptのエンコードが何を期待しているか知っていますか?utf-8ではないようです
— ジャスティン

5

GolfScript、51バイト

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

シンプルなルックアップテーブルです。入力が評価され(~)、値の配列が作成され、インデックスが見つかります。

ここで試してみてください


ユーザーは文字列を入力する必要があります。ハードコーディングすることはできません。また、Try it hereリンクには貼り付けられたコードとは異なるコードがあります。
— ジョン14年

@Chipperymanユーザーはこのプログラムに文字列を入力します。Try it hereWebページは、ユーザー入力をサポートしていないため、コード内のリンクの違いがあります。の後にある文字列を変更します;。これはユーザー入力と同じです。
— ジャスティン14年

ああ、分かった。私はgolfscriptをあまりよく知りません。教えてくれてありがとう。
— ジョン14年

2
@Chipperyman:GolfScriptは、スクリプト自体を実行する前に、STDINの内容をスタックに配置します。
— デニス14年

2
ハァッ!私はあなたを1バイト倒すことができます!;-)
— イルマリカロネン14年

4

Perl、60バイト

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

-pスイッチが必要です(2バイト)。

例

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

使い方

  • -pSTDINから読み取り、結果をに保存します$_。

  • =~/.[a-z]*/g 先行するベアワードを1文字(大文字)の後に任意の数の小文字が続く部分文字列に分割します。

  • (…) 部分文字列を配列に収集します。

  • [$_] ユーザー入力に対応する部分文字列を取得します。

  • $_=…結果をに保存し$_ます。

  • -pの値を出力します$_。


2
私は正規表現のトリックが好きです。+1
— seequ 14年

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
i
v
e


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文字で表現できます。各バイトを2つの16進数に分割する簡単な方法として、バイトの16進表現を使用できます。その後、16進数字を、必要な文字trまたは使用する文字に変換します。運にそれがあるので、rstuvwxそのように表現することができる、連続しているr-xとtr。エンコーディングはeand fがそのままで、単語が改行で区切られるように配置されているため、sed必要な行だけを出力するために使用できます。

このデコード処理は、かなりの量の余分なスペースを使用することになります。そのため、この回答はシェルスクリプトスタイルの回答として非競合になりますが、他の言語では有用な概念になる場合があります。


3

(純粋)バッシュ、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]}
— デニスウィリアムソン14年

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

これもいいです。:-) できます。
— ニコラスバルブレスコ14年

3
あなたは、このように一つの文字を保存することができます:'nine eight seven six five four three two one'.split()[-input()]
— flornquake

いいね!
— ウィレム14年

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

ここでの長さは慎重に設計されているため、バイナリとして解釈し、10進数に変換できます。わずか7文字で、勝者がいると確信しています!


1
+1 コード愛好家は、仕様を満たしている限り、一般にcコードが警告付きでコンパイルされてもかまいません。したがって、#includeand main()の戻り値の型を省略できます。式のリファクタリングも少しmain(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}。私のカウントで86文字。
— デジタル外傷14年

私は長さのものを手に入れません、そして、7文字がどこにあるかわかりません。
— ニコラスバルブレスコ14年

@NicolasBarbulesco:111文字ですが、これを111バイナリとして扱うと7、10進数に変換されます。
— ジェリーコフィン14年

ジェリー、あなたの頭の中を走るコードゴルフがあります!
— ニコラスバルブレスコ14

3

bash say(OS X):3 8

「あなたの目標は、1から9までの整数を、それが表す単語に変換することです」

前回チェックしたとき、話された言葉も言葉です。以前の試行(入力を受け入れません)

say 4

編集、入力を読み取れる必要があります:

say|read

任意の数を入力すると、単語が出てきます。終了日が迫っていることは知っていますが、私の意見ではコンテストに勝ったはずです。

オーディオファイルの例:four.aiff


5であってはなりませんか?
— rpax

@rpax入力が文字としてカウントされるとは思わないでしょうか?
— いとこコカイン14年

1
これは賢いです。しかし、これは入力を逃します。
— ニコラスバルブレスコ14年

1
これは、ユーザからの入力を受け付けたことがないと数が4である場合にのみ動作しますので、残念ながら、これは有効な回答ではありません
— ジョン

1
CousinCocaineによるこの答えに関するChipperymanのコメントは真実です。しかし、@ RegisteredUserによる答えにも当てはまります。ただし、ChipsinymanはCousinCocaineによるこの回答を拒否し、登録ユーザーの勝者exæquoによる回答を宣言しました。さらに、登録ユーザーによる回答は、CousinCocaineによるこの回答のレプリカです。これは不公平だ。
— ニコラスバルブレスコ14年

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 文字列を読み取り、整数に変換します


あなたは1つの文字をtrain((;:'one two blah')>@{~<:)として書くことで保存でき、別の6つをone`two`blah代わりに動名詞を使用することで保存できます;:。
— algorithmshark 14年

@algorithmsharkありがとう!私はまだJを学習しています箱)?
— seequ 14年

フォークの左側の引数に名詞を含めることができます。これは、ランクが無限である名詞を生成する定数動詞(辞書の qv )の省略形です。いいえ、動名詞に余分な引用符はありません:未定義の名前は動詞への参照として扱われ、その動詞は名前を含むボックス化された文字列です。
— algorithmshark 14年

また、STDINバージョンを動詞式として記述する必要はありません>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1。3文字短くなります。
— algorithmshark 14年

1
@algorithmsharkハハ、どうしてそうしなかったの?
— seequ 14年

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.
— ニコラスバルブレスコ14年

私のMacでは、2番目のスクリプトは機能しません。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.
— ニコラスバルブレスコ14年

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 14年

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を実行し、これを実行可能ファイルに変換するためにfluffを必要としないため、powershell以外に必要なものはすべて...


2

CJam-50

これはHTTP要求を使用するプレーンASCIIソリューションです(これは質問で許可されています)。

"aj21.com/"r+g

サーバーには、1、2、...、9という名前の9つのプレーンテキストファイルがあり、それぞれに対応する単語が含まれています。

合計サイズ:14 + 3(「1」)+ 3(「2」)+ 5 + 4 + 4 + 3 + 5 + 5 + 4 =50。
より短いドメインを使用することで、より多くのゴ​​ルフを楽しめます。

オンラインインタープリターはHTTPリクエストをサポートしていないため、プログラムはjavaインタープリターを使用して実行する必要があります。


1
投票する場合はコメントを追加してください。
— aditsu

-1、これは標準の抜け穴です。
— nyuszika7h

3
nyuszika7h @それは、特にこの問題では許可されています
— aditsu

1
すみません、見逃しました。答えが編集されるまで、今度は下票を取り消せません。
— nyuszika7h 14年

1
@ nyuszika7h編集
— aditsu 14年

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を代入することにより、いくつかのより多くのバイトを切ることができます
— ミスターエイリアン

6
このコードが入力をどこで受け取るかわかりません。そして9-1、あなたがちょうど言うことができるとき、なぜ書いてください8?もちろん両方9-1と8間違っています。このスクリプトは常に「9」を出力し、入力を無視します。
— レイトール14年

2

BASH 9

cousincoicaneの答えの恥知らずなLinuxレプリカ

spd-say 1

発言する


1
これは、入力が1の場合にのみ機能しませんか?
— ジョン14年

1
@Chipperymanそれは任意の数で動作します
— 登録ユーザー14年

制限はあるが賢い!
— ニコラスバルブレスコ14年

これは入力を逃します。
— ニコラスバルブレスコ14年

@nicolasbarbulescoはい。しかし、入力を逃す他の多くの答えがあったので、私はこれを進めました。
— 登録ユーザー14年

2

GolfScript、50バイト

Quincunxの51バイトの自己完結型GolfScriptソリューションを打ち負かすことができるかどうかを見たかったのです。十分なトリックで、はい、できます— 1バイト単位で。

私が使用しているトリックの1つは、印刷可能なASCII範囲外のバイトの使用であるため、結果のプログラムをここに直接貼り付けることはできません。代わりに、16進ダンプを提供しています。Unixishシステムのユーザーxxd -rは、16進ダンプから実際の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コード)を減算し、結果の値を基数22の数値として解釈することにより、Quincunxのコードの大部分を構成する長い文字列リテラルを圧縮します(文字をまでエンコードするのに十分x)、その後、結果の数値をベース255で再エンコードして、プログラムの前半の大部分を構成する印刷できないバイト文字列を生成します。プログラムの残りの部分は、このプロセスを逆にして、文字列をデコードして印刷可能なものに戻します。

(数字の名前に実際に存在する最も低い文字eはなので、ASCIIコードから101を減算し、20を使用してバイト文字列をさらに短縮できます。ただし、101を減算すると、文字oが改行にマッピングされます。nGolfScriptの組み込み定数として便利に使用できるため、番号区切り文字として使用しています。これを回避するには、より低いベースを使用すると節約できる1バイト以上のコストがかかります。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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.