Chuyển đổi 1, 2, 3, 4, 5, 6, 7, 8 và 9 thành một trong một, một hai, một ba, một ba, v.v.


47

Người chiến thắng: câu trả lời bash của professorfish ! Toàn bộ 9 byte! Ồ

Bạn có thể tiếp tục gửi câu trả lời của mình, tuy nhiên bạn không còn có thể giành chiến thắng. Bài gốc giữ cho hậu thế:


Mục tiêu của bạn là chuyển đổi toàn bộ số từ 1-9 thành từ mà nó đại diện.

  • Bạn sẽ không cần phải lo lắng về số thập phân
  • Người dùng sẽ nhập một số. Giả sử rằng họ sẽ không bao giờ nhập bất cứ thứ gì 10 hoặc cao hơn
  • Người dùng phải nhập số tại một số điểm, tuy nhiên phương thức mà chương trình đọc nó không quan trọng. Nó có thể là với stdin, đọc tệp văn bản, v.v. Tuy nhiên, người dùng phải nhấn nút 9 trên bàn phím của họ (ví dụ) tại một số điểm
  • Nó không phân biệt chữ hoa chữ thường (nghĩa là "một", "Một", "oNe", "OnE", v.v ... đều được chấp nhận)
  • Yêu cầu HTTP / etc được cho phép, tuy nhiên bất kỳ mã nào được thực hiện bởi máy chủ, yêu cầu được tạo để đếm theo số byte của mã cuối cùng của bạn (ví dụ: nếu tôi có chương trình C ++ tạo yêu cầu HTTP, mã PHP được sử dụng trong số yêu cầu HTTP )
  • Bất cứ điều gì có thể biên dịch và chạy đều được chấp nhận

  • Cuộc thi này đã kết thúc vào ngày 27 tháng 6 năm 2014 (7 ngày kể từ ngày đăng).
  • Đây là một , vì vậy đoạn mã ngắn nhất sẽ thắng

2
Là khoảng trắng dấu (nghĩa là one ) có thể chấp nhận?
grc

1
@grc Có, miễn là chương trình xuất ra từ.
Jon

1
bạn nên chỉ định rằng chỉ có thể in số đã cho chứ không phải số khác.
Pinna_be

1
Ví dụ @Pinna_be, nếu tôi nhập 3, bạn không thể xuất one two three four five six seven eight ninengay cả khi bạn xuất kỹ thuậtthree . Tương tự, bạn không thể xuất three seven, v.v.
Jon

1
Câu hỏi này khá hay. Nhưng tôi không thích việc thêm giới hạn ngày. Đặc biệt, giới hạn ngày đã được thêm ngay trước ngày giới hạn, không phải 7 ngày trước.
Nicolas Barbulesco

Câu trả lời:


19

Bash (với bsdgames), 9

number -l

Đọc từ đầu vào tiêu chuẩn.

Tôi không biết tại sao có một tiện ích cho việc này, nhưng bất cứ điều gì.


2
Tôi không chắc chắn tôi thích cài đặt bsdgames và sau đó gọi nó là "bash", mặc dù tôi sẽ thừa nhận rằng việc đặt chỗ của tôi là chủ quan.
Paul Draper

@PaulDraper Tôi cũng vậy. Tôi không đăng câu này như một câu trả lời nghiêm túc, tôi nghĩ một trong những câu trả lời khác xứng đáng được chấp nhận

5
Đây không phải là một lỗ hổng tiêu chuẩn?
Justin

2
@Quincunx vâng, cơ bản là vậy. Mặc dù hầu hết mọi thứ là các tiện ích bên ngoài trong Bash, tôi sẽ không tính gói bsdgames là một thứ gì đó rất cho phép (không giống như grep, wget, coreutils, sed, bc ...).

132

Con trăn 2, 64

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

Đây là những gì chuỗi trông giống như với một số khoảng trắng bổ sung (thử đọc theo chiều dọc):

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

Như được giải thích trong các ý kiến ​​dưới đây, [input()::9]bắt đầu tại chỉ mục đã cho và chọn mọi ký tự tiếp theo thứ chín.


9
Oh, chết tiệt, tôi thích điều này. Có lẽ đáng để chỉ ra rằng đây là python 2.
undergroundmonorail

3
Vui lòng giải thích! :)
Christofer Ohlsson

6
@ChristoferOlsson input()::9là một phạm vi từ input()đến cuối chuỗi theo các bước 9, như 1,10,19,28,37hoặc 3,12,21,30,39, chính xác là các chỉ số mà tại đó các chữ cái cho từ tương ứng được tìm thấy.
Martin Ender

1
@ m.buettner cảm ơn! Điều đó thật tuyệt.
Christofer Ohlsson

6
Đây không phải là một cái gì đó giống như những gì một mật mã hàng rào đường sắt làm? (+1 cho một giải pháp gọn gàng bằng cách này.)
Lou

18

Lisp thường gặp - 22 byte

Đây là một tổng quát (không chỉ cho một mười):

(format nil"~R"(read))

Ồ, bạn muốn có chức vụ (thứ nhất, thứ hai, ... ba phần trăm ...)? Đồng ý!

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

10
Đây không phải là một lỗ hổng tiêu chuẩn?
Seequ

2
Lỗ hổng theo nghĩa nào? Nó được xác định rõ ràng trong Hyperspec: lispworks.com/documentation/lw50/CLHS/Body/22_cba.htmlm
filcab


3
Cho dù đó là một lỗ hổng tiêu chuẩn hay không, đó cũng là những gì tôi đến đây để đăng. +1 :)
Joshua Taylor

5
@TheRare Nhìn vào các bình luận cho câu trả lời đó, tôi không nghĩ có sự đồng thuận mạnh mẽ của cộng đồng rằng đây là một lỗ hổng. Cảm giác của tôi là các câu hỏi cần cấm rõ ràng việc sử dụng loại chức năng tích hợp này nếu chúng không được sử dụng.
Chấn thương kỹ thuật số

16

TIỀN 51

Vì vậy, tôi đã thực hiện một ý tưởng khác bằng ý tưởng thứ hai của mình cộng với một số trợ giúp từ người khác:

set one two three four five six seven eight nine

$X

Trong đó 'X' là số bạn muốn.


BASH 48 (67)

67 với \nngắt dòng

Tôi không chắc chắn nếu điều này hoàn toàn được tính, bởi vì nó đang đọc từ một tệp, nhưng:

sed -n Xp a

Trong đó "X" là đầu vào và đâu alà tệp có:

one
two
three
four
five
six
seven
eight
nine

Tệp này là 36 ký tự và lệnh bash là 13.

Làm thế nào nó hoạt động:

Mỗi dòng trong tệp được đánh số, bắt đầu bằng 1. Vì vậy, 'một' nằm trên dòng thứ nhất, 'hai' trên dòng thứ 2. Lệnh này sed -n 'Xp' acho biết: "Vui lòng in những gì được liệt kê trên dòng 'X' của tệp 'a'" sedlà trình chỉnh sửa luồng Unix. -ncó nghĩa là im lặng, hoặc chỉ về cơ bản bỏ qua mọi thứ khác. Xpnghĩa là in những gì trên dòng 'X'.


2
Câu trả lời đầu tiên tốt đẹp! Cảm ơn bạn đã dành thời gian để tìm hiểu cách chúng tôi định dạng câu trả lời của chúng tôi trên trang web này. Chào mừng bạn đến với Câu đố lập trình và Code Golf!
Justin

2
Bạn đã không đếm các nguồn cấp dữ liệu trong a.
Dennis

1
Ít hơn một byte so với trước đây, chấp nhận đối số dòng lệnh và không yêu cầu các tệp bổ sung: pastebin.com/qdbXKQGP Bash sẽ phàn nàn về dấu phân cách heredoc bị thiếu, nhưng nó sẽ chạy tốt với Dash và Zsh.
Dennis

1
@Dennis oh tuyệt tôi thích nó. Tôi có nên chỉnh sửa câu trả lời của tôi với bạn bây giờ không? Xin lỗi, tôi mới chơi golf.
Eric Lagergren

1
Bạn có thể bỏ qua các 'trích dẫn. Bạn cũng có thể thử sử dụng chuỗi ở đây thay vì tệp bên ngoài. Nhưng bạn thực sự nên đếm các ngắt dòng trong tệp của bạn.
Chấn thương kỹ thuật số

16

C # - 127 (86/46)

Nếu bạn chỉ lấy phần thi hành ...

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

và nếu HourOfDaycó thể là một phần của không gian tên Hệ thống, bạn sẽ cần 46 ký tự. Thật không may, nó nằm trong System.DirectoryServices.ActiveDirectoryđó làm cho nó 86 ... tiếng ồn khác làm hỏng nó.

Đây là phần có thể biên dịch và có thể chạy được từ dòng lệnh (127 ký tự):

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

nếu được lưu vào một tệp có tên cg2.cs

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

Cái này hoạt động ra sao?

HourOfDay là một loại enum vì vậy chúng ta có thể sử dụng tên thay vì hằng số ma thuật. Các loại Enum có triển khai ToString () cung cấp cho bạn tên của giá trị . Bạn có thể chuyển một int thành enum. Console.Read () đọc một ký tự từ luồng đầu vào được biểu diễn dưới dạng một số nguyên. gõ '1' sẽ cho 49 , trừ 48 để nhận 1, bỏ / hộp HourOfDayđể trả về 'Một'.

Hãy xem phiên bản Powershell của thủ thuật tương tự này


Cái này hoạt động ra sao ? Giả sử tôi nhập 9. Chương trình sau đó làm gì?
Nicolas Barbulesco


Cái này -48làm gì ở đây?
Nicolas Barbulesco

2
@NicolasBarbulesco đã thêm một cái này hoạt động như thế nào? đoạn văn. Liệu nó có ý nghĩa?
rene

1
@NicolasBarbulesco - Nó được sắp xếp theo thứ tự abc. Điều này có ý nghĩa trong mọi ngữ cảnh ngoại trừ "Những từ này là số". Vì tôi chắc chắn rằng tài liệu được tạo tự động, nó sẽ không có ý nghĩa đối với trường hợp đặc biệt là một bài viết.
Bobson

13

Befunge 98, 116 105 103 byte

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

Befunge không được làm cho ...

Giải trình:

&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 Tôi không thể thấy điều đó có thể khó đến thế. Đơn giản chỉ cần mất tập tin, biến nó thành một char[][], giữ một xyvị trí, và thực hiện các nhân vật tại vị trí đó. Điều khó nhất sẽ là xác định thao tác cho mọi nhân vật có thể.
Justin

1
Bạn có thể dễ dàng lưu hai byte với a &1-.
har-wradim

10

Javascript 68

Atob / btoa có thể là một công cụ nén người nghèo (nhưng nếu bạn muốn thử điều này trong bảng điều khiển, bạn không thể sao chép từ văn bản được định dạng mà bạn nhìn thấy ngay lập tức. Đi đến 'chỉnh sửa' và sao chép từ bảng nguồn)

Trình chỉnh sửa Markdown không thích một số ký tự trong câu trả lời này: một số ký tự bị mất khi lưu. Tuy nhiên, tôi nghĩ đó là một vấn đề biên tập, không phải của tôi. Các ký tự bị mất là ký tự unicode 8 bit hoàn toàn hợp lệ.
(Hoặc nếu tôi sai, nếu vấn đề này đã được tranh luận trong meta, hãy cho tôi biết) Đây là phiên bản có các ký tự vi phạm được thoát, mỗi chuỗi \ xNN sẽ được tính 1

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

Kiểm tra đơn giản

Trong bảng điều khiển 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])

Tôi đã thử một cái gì đó tương tự nhưng không thể tìm ra một chuỗi base64 hợp lệ bắt đầu bằng một số. Tôi nghĩ rằng câu trả lời của bạn đã bị hỏng bởi stackexchange mặc dù.
nderscore

@nderscore, chết tiệt của bạn. Sửa đổi bài đăng, vẫn còn hiệu lực theo tôi
edc65

1
Với phiên bản có các ký tự thoát, mọi thứ đều hoạt động trừ 3 và 8, đầu ra TreeEightF.
Justin

3
@Quincunx 'Cây' là tôi không nói được tiếng Anh
edc65

10

Javascript 73

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

69

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

Về mặt kỹ thuật sẽ không alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])giống như vậy nhưng giúp bạn tiết kiệm 8 byte? Người dùng vẫn nhập số họ muốn ...
Eric Lagergren

@eric_lagergren, ý bạn là người dùng sẽ phải thay đổi số trong nguồn? Tôi không nghĩ rằng nó sẽ được tính là đầu vào.
nderscore

Ồ, được thôi, tôi hiểu ý của bạn. Tôi cho rằng nếu bạn chạy nó như một lệnh trong bảng điều khiển thì nó sẽ là một phần của đầu vào trái ngược với nguồn.
Eric Lagergren

7

Perl, 55

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

Nó được chạy với tùy chọn -p(+1 byte), ví dụ:

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

Đầu vào được mong đợi trong STDIN và đầu ra được ghi vào STDOUT.

Mã chỉ cần tạo một mảng và chọn đúng phần tử. Tùy chọn -pchăm sóc đọc dòng đầu vào $_và in kết quả vào $_.

Biến thể:

  • Với dòng mới (+3):

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

    hoặc (cùng số byte):

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

Cập nhật:

  • Sử dụng từ trần thay vì qw[...](cảm ơn Zaid).

  • Chỉ số âm tiết kiệm một byte (cảm ơn aragaer).


1
Lưu một vài nhân vật:$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
Zaid

2
@Zaid: Cảm ơn, nó đã lưu hai byte. (Tôi đã quen use strict).
Heiko Oberdiek

Tôi không thích "-1". $_=(nine,eight,seven,six,five,four,three,two,one)[-$_]- một ký tự ngắn hơn.
aragaer

@aragaer: Cảm ơn, ý kiến ​​hay.
Heiko Oberdiek

6

Oracle SQL - 46

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

Trình diễn, thuyết trình

Điều này bao gồm một lỗ hổng tiêu chuẩn , tôi thừa nhận, nhưng SQL ngắn hơn Golfscript; Tôi không thể cưỡng lại!

Nó hoạt động bằng cách (ab) sử dụng các mô hình định dạng datetime của Oracle . TO_DATE(n, 'j')chuyển đổi một số thành một ngày Julian , số ngày kể từ ngày 1 tháng 1 năm 4712 trước Công nguyên. TO_CHAR(<date>, 'jsp')chuyển đổi lại thành số nguyên (mặc dù là một chuỗi). The sp, là một hậu tố phần tử định dạng đánh vần số. Điều này thực sự sẽ làm việc với khá nhiều số.

Các &1là một biến thay thế đó sẽ chỉ làm việc với các khách hàng rằng chấp nhận nó, ví dụ SQL * Plus.


Tôi có mối quan hệ yêu / ghét với RDBMS của Oracle nhưng điều này thật tuyệt.
rene

6

CJam, 45 43 byte

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

Ở trên sử dụng ký hiệu ^ và M, vì một số ký tự không thể in được.

Với chi phí thêm 9 byte, có thể tránh các ký tự không thể in được:

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

Hãy thử trực tuyến.

Làm thế nào nó hoạt động

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

Thí dụ

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

Ồ, câu trả lời của chúng tôi giống hệt nhau, thậm chí về chiều dài (tôi giả sử người dùng nhập một chuỗi).
Justin

1
@Quincunx: Tâm trí giống nhau nghĩ tuyệt vời! : P Nhưng đọc đầu vào của người dùng sẽ tốn hai byte trong CJam, vì vậy tôi sẽ phải nghĩ đến điều gì khác ...
Dennis

@Quincunx: Nó cũng hoạt động với GolfScript, mặc dù có thể nó sẽ không lưu byte. Bãi rác Base64:IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
Dennis

Đây là những gì tôi quản lý để đưa ra; nó dài hơn: golfscript.apphb.com/ Hãy
Justin

Bạn có biết những gì golfscript mã hóa mong đợi cho các nhân vật không phải là ascii? Nó dường như không phải là utf-8
Justin

5

GolfScript, 51 byte

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

Đó là một bảng tra cứu đơn giản. Đầu vào được ước tính ( ~), một mảng các giá trị được tạo và chỉ mục được tìm thấy.

Hãy thử nó ở đây


Người dùng phải nhập một chuỗi, bạn không thể mã hóa nó. Ngoài ra, Try it hereliên kết của bạn có mã khác với mã đã dán.
Jon

@Chipperyman Người dùng nhập một chuỗi trong chương trình này. Sự Try it herekhác biệt về mã của liên kết là do trang web không hỗ trợ đầu vào của người dùng. Thay đổi chuỗi sau ;, đây là giống hệt với đầu vào của người dùng.
Justin

Ah tôi thấy. Tôi không biết nhiều về golf, cảm ơn vì đã cho tôi biết.
Jon

2
@Chipperyman: GolfScript đặt nội dung của STDIN lên ngăn xếp trước khi tự thực thi tập lệnh.
Dennis

2
Hừ! Tôi có thể đánh bại bạn bằng một byte ! ;-)
Ilmari Karonen

4

Perl, 60 byte

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

Yêu cầu -pchuyển đổi (hai byte).

Thí dụ

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

Làm thế nào nó hoạt động

  • -pđọc từ STDIN và lưu kết quả vào $_.

  • =~/.[a-z]*/g tách các bareword trước thành các chuỗi của một chữ cái (chữ hoa) theo sau bởi bất kỳ số lượng chữ cái viết thường.

  • (…) thu thập các chuỗi con thành một mảng.

  • [$_] lấy chuỗi con tương ứng với đầu vào của người dùng.

  • $_=…lưu kết quả trong $_.

  • -pin giá trị của $_.


2
Tôi thích thủ thuật regex. +1
xem

3

DOS Batch - 162 Chars (bao gồm ngắt dòng)

Câu trả lời này được lấy cảm hứng từ câu trả lời Python của @ grc, mặc dù tôi đã có một cái gì đó tương tự trong tâm trí.

@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

Sử dụng:

[Tên tệp] [số]

Ví dụ: nếu mã nằm trong một tệp có tên speak.bat và bạn muốn xem số "năm", bạn sẽ chạy nó dưới dạng:

speak 5

Ngoài ra, đầu ra là từ trên xuống dưới, không phải từ trái sang phải! Vì vậy, thay vì

số năm

Bạn sẽ thấy

f
i
v
e


3

Bash + coreutils, 64

Khái niệm nén không cạnh tranh

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

Một số ký tự kỳ lạ ở đây có thể không hiển thị tốt, do đó, tập lệnh này có thể được xây dựng lại từ biểu diễn base64 của nó:

base64 -d <<< eHhkIC1wPDw8VOCLUIJu4PWWDzrgc8B+rkDjEoBDTnx0ciAwLTlhLWQgXFxuZy1pbm9yLXh8c2VkIC1uICQxcA==

Ví dụ đầu ra

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

Giải trình

Nó xảy ra với tôi rằng chuỗi one two three four five six seven eight ninechỉ chứa các chữ cái efghinorstuvwxvà dấu phân cách dấu cách - tổng cộng 15 giá trị ký tự. Do đó, mỗi ký tự có khả năng có thể được biểu thị bằng 4 bit hoặc 2 ký tự trên 1 byte. Chúng ta có thể sử dụng biểu diễn hex của một byte như một cách dễ dàng để chia mỗi byte thành hai chữ số hex. Sau đó chúng ta có thể chuyển đổi các chữ số hex trở lại các chữ cái chúng ta yêu cầu sử dụng trhoặc tương tự. Như may mắn sẽ có nó, rstuvwxlà liên tiếp, như vậy có thể được diễn tả như r-xđể tr. Mã hóa được sắp xếp sao cho giống nhau efđược giữ nguyên, và các từ được phân tách bằng dòng, vì vậy chúng ta có thể sử dụng sedđể chỉ dòng chúng ta cần.

Quá trình giải mã này kết thúc bằng cách sử dụng một lượng không gian thừa, do đó, làm cho câu trả lời này không cạnh tranh như một câu trả lời kiểu shell-script, nhưng có thể là một khái niệm hữu ích trong các ngôn ngữ khác.


3

(thuần khiết) Bash, 64

Lấy đầu vào làm đối số đầu tiên của nó, giả sử đầu vào hợp lệ.

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

Tạo một mảng v, sau đó truy cập phần tử được chỉ định trên đầu vào. Vì các mảng được lập chỉ mục bằng 0, tôi đã phải thêm phần tử thứ 0 làm trình giữ chỗ. Ngoài ra (thnx @DennisWilliamson vì đã chỉ ra điều này):

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

2
Số lượng nhân vật tương tự: v=(one two three four five six seven eight nine)echo ${v[$1-1]}
Dennis Williamson

3

Con trăn 2.x - 65 64

Không tốt như câu trả lời của @grc, nhưng chắc chắn dễ đọc hơn :-)

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

Một ít char, nhờ @flornquake

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

Cái này cũng đẹp :-) Nó hoạt động.
Nicolas Barbulesco

3
Bạn có thể lưu một nhân vật như thế này:'nine eight seven six five four three two one'.split()[-input()]
flornquake

Đó là một trong những tốt đẹp!
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]);
    }}

3

C 111

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

Độ dài ở đây được thiết kế cẩn thận để tôi có thể hiểu nó là nhị phân và chuyển đổi thành thập phân. Chỉ có 7 ký tự, tôi tự tin mình có người chiến thắng!


1
+1 Người chơi gôn Code thường không bận tâm nếu mã c của bạn biên dịch với các cảnh báo , miễn là nó đáp ứng được thông số kỹ thuật. Vì vậy, bạn có thể bỏ qua #includemain()'s kiểu trả về. Ngoài ra một chút cấu trúc lại biểu thức của bạn : main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}. 86 ký tự bằng số đếm của tôi.
Chấn thương kỹ thuật số

Tôi không nhận được các công cụ dài và tôi không thấy nơi nào sẽ có 7 ký tự.
Nicolas Barbulesco

@NicolasBarbulesco: Đó là 111 ký tự - nhưng nếu chúng ta coi đó 111là nhị phân, thì nó sẽ chuyển thành 7số thập phân.
Jerry Coffin

Jerry, có mã golf đang chạy trong đầu của bạn!
Nicolas Barbulesco

3

bash nói (OS X): 3 8

"Mục tiêu của bạn là chuyển đổi toàn bộ số từ 1-9 thành từ mà nó đại diện"

Lần trước tôi đã kiểm tra, lời nói cũng là lời. Nỗ lực trước đó (chấp nhận không có đầu vào)

say 4

Chỉnh sửa, phải có thể đọc đầu vào:

say|read

Nhập bất kỳ số nào và từ đi ra. Tôi biết ngày kết thúc là do, nhưng theo tôi nên đã giành chiến thắng trong cuộc thi.

Tệp âm thanh mẫu: Four.aiff


không nên là 5?
rpax

@rpax Tôi không tin đầu vào được tính là một ký tự, phải không?
Anh em họ

1
Đây là thông minh. Nhưng điều này bỏ lỡ đầu vào.
Nicolas Barbulesco

1
Thật không may, đây không phải là một câu trả lời hợp lệ bởi vì: Nó không bao giờ chấp nhận đầu vào từ người dùng VÀ nó chỉ hoạt động nếu số đó là 4.
Jon

1
Nhận xét của Chipperyman về câu trả lời này của CousinCocaine là đúng. Nhưng nó cũng đúng cho câu trả lời của @RegisteredUser . Tuy nhiên, Chipperyman đã từ chối câu trả lời này của CousinCocaine và đã tuyên bố câu trả lời của người chiến thắng Người dùng đã đăng ký ex æquo. Ngoài ra, câu trả lời của Người dùng đã đăng ký là bản sao câu trả lời này của CousinCocaine. Điều này còn hơn cả không công bằng.
Nicolas Barbulesco

2

VBScript 98 80 75

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

2

J - 68 hoặc 60 57 hoặc 53 byte

Phiên bản tương tác (stdin):

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

Phiên bản chức năng:

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

Giải trình:

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

".(1!:1)1 đọc một chuỗi và chuyển đổi nó thành số nguyên


Bạn có thể lưu một char bằng cách viết nó dưới dạng train ( (;:'one two blah')>@{~<:) và sáu char khác bằng cách sử dụng gerund one`two`blahthay vì ;:.
thuật toán

@alerskymshark Cảm ơn! Tôi vẫn đang học J. Mặc dù, phiên bản xe lửa không yêu cầu văn bản phải xếp hạng vô hạn (chỉnh sửa: dường như không ... tại sao không?) Và phiên bản gerund trích dẫn thêm (chỉnh sửa: oh, nó tạo ra một danh sách hộp)?
xem

Một ngã ba có thể có một danh từ trong đối số bên trái, đó là viết tắt cho một động từ không đổi tạo ra danh từ đó với thứ hạng vô hạn (qv Từ điển ). Và không, không có trích dẫn thêm về gerund: tên không xác định được coi là tham chiếu đến động từ và gerund cho đó chỉ là một chuỗi được đóng hộp có chứa tên.
thuật toán

Ngoài ra, bạn không phải viết phiên bản STDIN dưới dạng một động từ: >one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1ngắn hơn 3 ký tự.
thuật toán

1
@alerskymshark Haha, tại sao tôi không làm theo cách đó?
xem

2

Perl 36 (58 độc lập)

use Number::Spell;say spell_number<>

Hoặc, không có mô-đun bổ sung:

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

Kịch bản đầu tiên của bạn không hoạt động, trên máy Mac của tôi. 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

Kịch bản thứ hai của bạn không hoạt động, trên máy Mac của tôi. 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

2

Trong AppleScript; 123 ký tự.

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

Kịch bản này lấy đầu vào trong một hộp thoại. Sau đó, nó cung cấp đầu ra trong kết quả của AppleScript  .

Thí dụ :

  • Đầu vào : 6
  • Đầu ra: "six"

Đây là một phiên bản đẹp hơn:

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

Phiên bản này hiển thị đầu ra trong một hộp thoại đẹp.

Thí dụ :

  • Đầu vào : 9
  • Đầu ra: nine

[Trả lời chỉnh sửa; cải thiện một chút hộp thoại cho đầu vào; vẫn còn 124 ký tự. Trả lời chỉnh sửa lại; bây giờ 1 char ít! ]


1
set n to text returned of... Wow.
xem

2

Quyền hạn - 91 74

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

Tìm ra cách truyền để loại bỏ lệnh gọi Enum và ToObject:

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

Cái này hoạt động ra sao?

HourOfDay là một loại enum vì vậy chúng ta có thể sử dụng tên thay vì hằng số ma thuật. Các loại Enum có triển khai ToString () cung cấp cho bạn tên của giá trị không đổi. Bạn có thể chuyển một int thành enum. Console.Read () đọc một ký tự từ luồng đầu vào được biểu diễn dưới dạng một số nguyên. gõ '1' sẽ cho 49, trừ 48 để nhận 1, chuyển sang HourOfDay để trả về 'Một'.

Bởi vì powershell thực hiện ToString trên tất cả các đối tượng được ghi vào luồng đầu ra và không cần lông tơ để biến điều này thành một thực thi, tất cả những gì cần thiết ngoài powershell ...


2

CJam - 50

Đây là một giải pháp ASCII đơn giản sử dụng các yêu cầu HTTP (điều này được cho phép trong câu hỏi):

"aj21.com/"r+g

Trên máy chủ có 9 tệp văn bản thuần có tên 1, 2, ..., 9, mỗi tệp chứa từ tương ứng.

Tổng kích thước: 14 + 3 ("một") + 3 ("hai") + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Nó có thể được đánh gôn nhiều hơn bằng cách sử dụng tên miền ngắn hơn.

Trình thông dịch trực tuyến không hỗ trợ các yêu cầu HTTP, vì vậy chương trình cần được chạy bằng trình thông dịch java .


1
Vui lòng thêm một bình luận nếu downvote.
aditsu

-1, đây là một lỗ hổng tiêu chuẩn .
nyuszika7h

3
@ nyuszika7h nó được cho phép đặc biệt trong câu hỏi này
aditsu

1
Xin lỗi tôi đã bỏ lỡ. Tôi không thể hoàn tác downvote của mình bây giờ cho đến khi câu trả lời được chỉnh sửa.
nyuszika7h

1

2

Mẻ - 86

Ngắn hơn nhiều so với câu trả lời hàng loạt khác, và thực sự cạnh tranh đáng ngạc nhiên.

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

Được sử dụng như filename.bat number, và đầu ra ở dạng một tệp với tên của số chính xác.


2

Ruby 64

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

1
Bạn có thể cắt thêm vài byte bằng cách thay thế 9 byte trực tiếp tại vị trí của x
Ông Alien

6
Tôi không thấy mã này lấy ở đâu. Và tại sao viết 9-1khi bạn chỉ có thể nói 8? Tất nhiên cả hai 9-18đều sai; tập lệnh này xuất ra "chín" mọi lúc và bỏ qua đầu vào.
Ray Toal

2

BASH 9

bản sao Linux không biết xấu hổ về câu trả lời của anh em họ

spd-say 1

nói ra một


1
Điều này sẽ không hoạt động nếu đầu vào là 1?
Jon

1
@Chipperyman nó hoạt động cho bất kỳ số nào
Người dùng đã đăng ký

Hạn chế, nhưng khéo léo!
Nicolas Barbulesco

Điều này bỏ lỡ đầu vào.
Nicolas Barbulesco

@nicolasbarbulesco vâng. nhưng có nhiều câu trả lời khác mà bỏ lỡ đầu vào, vì vậy tôi đã tiếp tục với nó.
Người dùng đã đăng ký

2

GolfScript, 50 byte

Tôi muốn xem liệu tôi có thể đánh bại giải pháp GolfScript tự chứa 51 byte của Quincunx không . Hóa ra, với đủ thủ thuật, vâng, tôi có thể - bằng một byte.

Vì một trong những thủ thuật tôi đang sử dụng là sử dụng byte ngoài phạm vi ASCII có thể in, chương trình kết quả không thể được dán trực tiếp tại đây. Thay vào đó, tôi đang cung cấp một bãi chứa hex của nó; Người dùng trên các hệ thống Unixish có thể sử dụng xxd -rđể xây dựng lại chương trình GolfScript 50 byte thực tế từ kết xuất hex:

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

Thủ thuật cơ bản được sử dụng để tạo chương trình này rất đơn giản: Tôi nén chuỗi ký tự dài chiếm hầu hết mã của Quincunx bằng cách trừ 99 (mã ASCII của chữ cái c) khỏi các giá trị ký tự, diễn giải các giá trị kết quả là một số trong cơ sở 22 (đủ để mã hóa các chữ cái lên đến x) và sau đó mã hóa lại số kết quả trong cơ sở 255 để tạo ra chuỗi byte không thể in được, chiếm hầu hết nửa đầu chương trình của tôi. Phần còn lại của chương trình sau đó đảo ngược quá trình này, giải mã chuỗi trở lại thành một cái gì đó có thể in được.

(Vì chữ cái thấp nhất thực sự có trong tên số là e, tôi có thể rút ngắn chuỗi byte hơn nữa bằng cách trừ 101 từ mã ASCII và sử dụng cơ sở 20. Tuy nhiên, trừ 101 sẽ ánh xạ chữ cái osang một dòng mới, mà tôi Tôi đang sử dụng làm dấu phân cách số vì nó có sẵn thuận tiện như hằng số tích hợp ntrong GolfScript. Làm việc xung quanh sẽ khiến tôi tốn nhiều hơn một byte mà sử dụng cơ sở thấp hơn sẽ tiết kiệm. Sử dụng offset 99 để lại dòng mới tương ứng với chữ cái m, đó là thuận tiện vắng mặt trong các tên số.)

Đây là phiên bản rút gọn của chương trình:

~       # 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.