Pemenang: jawaban pesta professorfish ! Seluruh 9 byte! Wow!
Anda dapat terus mengirimkan jawaban Anda, namun Anda tidak bisa lagi menang. Pos asli disimpan untuk anak cucu:
Tujuan Anda adalah mengonversi seluruh angka antara 1-9 menjadi kata yang diwakilinya.
- Anda tidak perlu khawatir tentang desimal
- Pengguna akan memasukkan nomor. Asumsikan bahwa mereka tidak akan pernah memasukkan apa pun 10 atau lebih tinggi
- Pengguna harus mengetikkan angka di beberapa titik, namun metode yang dibaca program itu tidak masalah. Bisa dengan stdin, membaca file teks, dll, namun pengguna harus menekan tombol 9 pada keyboard mereka (misalnya) di beberapa titik
- Ini tidak peka huruf besar-kecil (yaitu, "satu", "Satu", "oNe", "OnE", dll. Semuanya dapat diterima)
- Permintaan HTTP / etc diizinkan, namun kode apa pun yang dijalankan oleh server permintaan dibuat untuk diperhitungkan terhadap jumlah byte dari kode akhir Anda (misalnya jika saya memiliki program C ++ membuat permintaan HTTP, kode PHP yang digunakan dalam jumlah permintaan HTTP )
- Apa pun yang dapat dikompilasi dan dijalankan dapat diterima
- Kontes ini telah berakhir pada 27 Juni 2014 (7 hari sejak posting).
- Ini adalah kode-golf , sehingga kode terpendek menang
one
) dapat diterima?3
, Anda tidak dapat menampilkanone two three four five six seven eight nine
meskipun secara teknis Anda keluaranthree
. Demikian pula, Anda tidak dapat menampilkanthree seven
, dll.Jawaban:
Bash (dengan bsdgames), 9
Membaca dari input standar.
Saya tidak tahu mengapa ada utilitas untuk ini, tetapi apa pun itu.
sumber
Python 2, 64
Seperti inilah bentuk string dengan spasi putih tambahan (coba baca secara vertikal):
Seperti yang dijelaskan dalam komentar di bawah,
[input()::9]
dimulai pada indeks yang diberikan dan memilih setiap karakter berikutnya kesembilan.sumber
input()::9
adalah rentang dariinput()
hingga akhir string dalam langkah-langkah9
, seperti1,10,19,28,37
atau3,12,21,30,39
, yang persis indeks di mana huruf-huruf untuk kata yang sesuai ditemukan.Common Lisp - 22 byte
Inilah yang umum (bukan hanya untuk satu-sepuluh):
Oh, Anda ingin ordinals (pertama, kedua, ... tiga per seratus ...)? Baik!
sumber
BASH 51
Jadi saya membuat yang lain menggunakan ide kedua saya ditambah bantuan dari yang lain:
Di mana 'X' adalah nomor yang Anda inginkan.
BASH 48 (67)
67 dengan
\n
jeda barisSaya tidak yakin apakah ini benar-benar diperhitungkan, karena membaca dari file, tetapi:
sed -n Xp a
Di mana "X" adalah input dan di mana
a
file dengan:File adalah 36 karakter, dan perintah bash adalah 13.
Bagaimana itu bekerja:
sumber
a
.'
tanda kutip. Anda juga dapat mencoba menggunakan string di sini alih-alih file eksternal. Tetapi Anda benar-benar harus menghitung jeda baris dalam file Anda.C # - 127 (86/46)
Jika Anda hanya mengambil bagian yang dapat dieksekusi ...
dan jika
HourOfDay
akan menjadi bagian dari namespace Sistem Anda akan membutuhkan 46 karakter. Sayangnya itu duduk diSystem.DirectoryServices.ActiveDirectory
mana membuatnya 86 ... kebisingan lainnya merusaknya.Ini dapat dikompilasi dan dijalankan dari commandline (127 karakter):
jika disimpan ke file bernama cg2.cs
Bagaimana cara kerjanya?
HourOfDay
adalah tipe enum sehingga kita dapat menggunakan nama alih-alih konstanta ajaib. Jenis Enum memiliki implementasi ToString () yang memberi Anda nama nilai . Anda bisa memberikan int ke enum. Console.Read () membaca karakter dari aliran input yang direpresentasikan sebagai integer. mengetik '1' memberikan 49 , kurangi 48 untuk mendapatkan 1, cor / kotakHourOfDay
untuk mengembalikan 'One'.Lihatlah versi Powershell dari trik yang sama ini
sumber
-48
dilakukan di sini?Befunge 98,
116105103 byteBefunge tidak dibuat untuk ini ...
Penjelasan:
sumber
char[][]
, menjagax
dany
lokasi, dan melaksanakan karakter di lokasi itu. Hal yang paling sulit adalah mendefinisikan operasi untuk setiap karakter yang mungkin.&1-
.Javascript 68
Atob / btoa dapat menjadi alat kompresi orang miskin
(tetapi jika Anda ingin mencoba ini di konsol, Anda tidak dapat menyalin dari teks yang diformat yang Anda lihat sekaligus. Buka 'edit' dan salin dari panel sumber)Editor penurunan harga tidak menyukai beberapa karakter dalam jawaban ini: beberapa karakter hilang karena tabungan. Tetap saja, saya pikir ini masalah editor, bukan masalah saya. Karakter yang hilang adalah karakter unicode 8 bit yang valid.
(Atau saya salah, jika masalah ini sudah diperdebatkan dalam meta, beri tahu saya) Ini adalah versi dengan karakter yang menyinggung lolos, setiap urutan \ xNN harus dihitung 1
Tes sederhana
Di konsol firefox:
sumber
Tree
danEightF
.Javascript 73
69
sumber
alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])
menjadi hal yang sama tetapi menghemat 8 byte? Pengguna masih memasukkan nomor yang mereka inginkan ...Perl, 55
Dijalankan dengan opsi
-p
(+1 byte), misalnya:Input diharapkan dalam STDIN dan output ditulis ke STDOUT.
Kode hanya menghasilkan sebuah array dan memilih elemen yang tepat. Opsi
-p
mengurus membaca jalur input ke$_
dan mencetak hasilnya$_
.Variasi:
Dengan mengikuti baris baru (+3):
atau (jumlah byte yang sama):
Memperbarui:
Menggunakan kata-kata telanjang alih-alih
qw[...]
(terima kasih Zaid).Indeks negatif menyimpan satu byte (terima kasih aragaer).
sumber
$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
use strict
).$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]
- satu karakter lebih pendek.Oracle SQL - 46
Demonstrasi
Ini memang termasuk celah standar , saya akui, tetapi SQL lebih pendek dari Golfscript; Saya tidak bisa menolak!
Ini bekerja dengan (ab) menggunakan model format datetime Oracle .
TO_DATE(n, 'j')
mengkonversi angka menjadi hari Julian , jumlah hari sejak 1 Januari 4712 SM.TO_CHAR(<date>, 'jsp')
mengubahnya kembali menjadi integer (meskipun sebagai string). Thesp
, adalah akhiran elemen format yang mengeja angka. Ini sebenarnya akan bekerja dengan angka yang cukup banyak.Ini
&1
adalah variabel substitusi yang hanya akan bekerja dengan klien yang menerimanya, misalnya SQL * Plus.sumber
CJam,
4543 byteDi atas menggunakan ^ dan notasi-M, karena beberapa karakter tidak dapat dicetak.
Dengan biaya 9 byte lebih, karakter yang tidak patut dapat dihindari:
Cobalah online.
Bagaimana itu bekerja
Contoh
sumber
IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
GolfScript, 51 byte
Ini adalah tabel pencarian sederhana. Input dievaluasi (
~
), array nilai-nilai dibuat, dan indeks ditemukan.Coba di sini
sumber
Try it here
tautan Anda memiliki kode yang berbeda dari kode yang ditempelkan.Try it here
tautan dalam kode adalah karena halaman web tidak mendukung input pengguna. Ubah string setelah;
, ini identik dengan input pengguna.Perl, 60 byte
Membutuhkan
-p
sakelar (dua byte).Contoh
Bagaimana itu bekerja
-p
membaca dari STDIN dan menyimpan hasilnya di$_
.=~/.[a-z]*/g
membagi kata pengantar sebelumnya menjadi substring dari satu huruf (huruf besar) diikuti oleh sejumlah huruf kecil.(…)
mengumpulkan substring ke dalam array.[$_]
mengambil substring yang sesuai dengan input pengguna.$_=…
menyimpan hasilnya$_
.-p
mencetak nilai$_
.sumber
Batch DOS - 162 Karakter (termasuk jeda baris)
Jawaban ini terinspirasi oleh jawaban Python @ grc, meskipun saya memiliki sesuatu yang serupa dalam pikiran.
Pemakaian:
[Nama file] [angka]
Misalnya, jika kode tersebut dalam file bernama speak.bat, dan Anda ingin melihat nomor "lima", Anda akan menjalankannya sebagai:
speak 5
Juga, outputnya dari atas ke bawah, bukan dari kiri ke kanan! Jadi, bukannya
kamu akan lihat
sumber
Bash + coreutils, 64
Konsep kompresi non-kompetitif
Beberapa karakter eksotis di sini mungkin tidak dapat ditampilkan dengan baik, jadi skrip ini dapat direkonstruksi dari representasi base64:
Contoh output
Penjelasan
Terpikir oleh saya bahwa string
one two three four five six seven eight nine
hanya berisi hurufefghinorstuvwx
dan pemisah ruang - total nilai 15 karakter. Dengan demikian setiap karakter berpotensi direpresentasikan dalam 4 bit, atau 2 karakter per 1 byte. Kita dapat menggunakan representasi hex dari byte sebagai cara mudah untuk membagi setiap byte menjadi dua digit hex. Kami kemudian dapat mengubah digit hex kembali ke huruf yang kami butuhkan menggunakantr
atau serupa. Seperti nasib itu,rstuvwx
yang berturut-turut, sehingga dapat dinyatakan sebagair-x
untuktr
. Encoding yang diatur sedemikian rupa sehinggae
danf
yang tersisa sebagai-adalah, dan bahwa kata-kata yang line-break dipisahkan, sehingga kita dapat menggunakansed
untuk ouptut hanya garis yang kita butuhkan.Proses pendekodean ini berakhir dengan menggunakan cukup banyak ruang ekstra, jadi jadikan jawaban ini tidak kompetitif sebagai jawaban gaya-skrip shell, tetapi mungkin konsep yang berguna dalam bahasa lain.
sumber
(murni) Bash, 64
Mengambil input sebagai argumen pertama, dengan asumsi input yang valid.
Membuat array
v
, lalu mengakses elemen yang ditentukan pada input. Karena array tidak diindeks, saya harus menambahkan elemen 0 sebagai pengganti. Atau (thnx @DennisWilliamson untuk menunjukkan ini):sumber
v=(one two three four five six seven eight nine)
danecho ${v[$1-1]}
Python 2.x -
6564Tidak sebagus jawaban @grc, tapi tentu lebih terbaca :-)
Satu char kurang, terima kasih kepada @flornquake
sumber
'nine eight seven six five four three two one'.split()[-input()]
Java 7 - 185
sumber
C 111
Panjang di sini adalah hati-hati direkayasa sehingga saya bisa menafsirkannya sebagai biner dan mengkonversi yang untuk desimal. Hanya dengan 7 karakter, saya yakin saya memiliki pemenang!
sumber
#include
danmain()
kembali. Juga menggigit refactoring ekspresi Anda:main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}
. 86 karakter menurut perhitungan saya.111
sebagai biner, itu akan dikonversi menjadi7
dalam desimal.bash say (OS X):
38"Tujuanmu adalah untuk mengubah angka keseluruhan antara 1-9 menjadi kata yang diwakilinya"
Terakhir kali saya memeriksa, kata-kata yang diucapkan adalah kata-kata juga. Upaya sebelumnya (tidak menerima input)
say 4
Edit, harus dapat membaca input:
Ketikkan nomor apa saja dan kata keluar. Saya tahu tanggal akhirnya akan tiba, tetapi menurut saya saya seharusnya memenangkan kontes.
Contoh file audio: four.aiff
sumber
VBScript
988075sumber
J -
68 atau 6057 atau 53 byteVersi interaktif (stdin):
Versi fungsi:
Penjelasan:
".(1!:1)1
membaca sebuah string dan mengubahnya menjadi integersumber
(;:'one two blah')>@{~<:
) dan enam lainnya dengan menggunakan gerundone`two`blah
bukan;:
.>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1
lebih pendek 3 karakter.Perl 36 (58 standalone)
Atau, tanpa modul tambahan:
sumber
Can't locate Number/Spell.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at toto.pl line 1.
BEGIN failed--compilation aborted at toto.pl line 1.
syntax error at titi.pl line 1, near "say qw(one two three four five six seven eight nine)"
Execution of titi.pl aborted due to compilation errors.
Di AppleScript; 123 karakter.
Script ini mengambil input dalam dialog. Kemudian memberikan output dalam AppleScript ini hasil .
Contoh:
6
"six"
Ini adalah versi yang lebih bagus:
Versi ini menampilkan output dalam dialog yang bagus.
Contoh:
9
nine
[Jawaban diedit; sedikit meningkatkan dialog untuk input; masih 124 karakter. Jawaban diedit lagi; sekarang 1 char kurang! ]
sumber
set n to text returned of
... Wow.Powershell -
9174Menemukan cara melakukan cast untuk menghapus panggilan Enum dan ToObject:
Bagaimana cara kerjanya?
HourOfDay adalah tipe enum sehingga kita dapat menggunakan nama alih-alih konstanta ajaib. Jenis Enum memiliki implementasi ToString () yang memberi Anda nama nilai konstan. Anda bisa memberikan int ke enum. Console.Read () membaca karakter dari aliran input yang direpresentasikan sebagai integer. mengetik '1' menghasilkan 49, kurangi 48 untuk mendapatkan 1, masukkan ke HourOfDay untuk mengembalikan 'One'.
Karena PowerShell melakukan ToString pada semua objek yang ditulis ke aliran output dan tidak perlu bulu untuk mengubah ini menjadi executable ini semua yang diperlukan selain PowerShell ...
sumber
CJam - 50
Ini adalah solusi ASCII sederhana yang menggunakan permintaan HTTP (ini diizinkan dalam pertanyaan):
Di server ada 9 file teks biasa bernama 1, 2, ..., 9, masing-masing berisi kata yang sesuai.
Ukuran total: 14 + 3 ("satu") + 3 ("dua") + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Dapat bermain golf lebih banyak dengan menggunakan domain yang lebih pendek.
Juru bahasa online tidak mendukung permintaan HTTP, sehingga program harus dijalankan menggunakan juru bahasa java .
sumber
Gelombang - 86
Jauh lebih pendek daripada jawaban kelompok lain, dan ternyata sangat kompetitif.
Digunakan sebagai
filename.bat number
, dan output dalam bentuk file dengan nama nomor yang benar.sumber
Ruby 64
sumber
9-1
ketika Anda bisa mengatakannya8
? Tentu saja keduanya9-1
dan8
itu salah; skrip ini menghasilkan "sembilan" sepanjang waktu dan mengabaikan input.BASH 9
Linux-replika jawaban cousincoicane yang memalukan
berbicara satu
sumber
GolfScript, 50 byte
Saya ingin melihat apakah saya bisa mengalahkan solusi GolfScript mandiri 51-byte Quincunx . Ternyata itu, dengan trik yang cukup, ya, saya bisa - dengan satu byte.
Karena salah satu trik yang saya gunakan adalah penggunaan byte di luar rentang ASCII yang dapat dicetak, program yang dihasilkan tidak dapat langsung ditempelkan di sini. Sebaliknya, saya memberikan hex dump itu; pengguna pada sistem Unixish dapat digunakan
xxd -r
untuk merekonstruksi program GolfScript 50-byte yang sebenarnya dari hex dump:Trik dasar yang digunakan untuk menghasilkan program ini sederhana: Saya memampatkan string string panjang yang membentuk sebagian besar kode Quincunx dengan mengurangi 99 (kode ASCII surat
c
) dari nilai karakter, menafsirkan nilai yang dihasilkan sebagai angka di basis 22 (cukup untuk menyandikan huruf hinggax
) dan kemudian menyandikan ulang angka yang dihasilkan pada basis 255 untuk menghasilkan string byte yang tidak dapat dicetak yang membentuk sebagian besar bagian pertama dari program saya. Sisa program kemudian membalikkan proses ini, mendekode ulang string menjadi sesuatu yang dapat dicetak.(Karena huruf terendah benar-benar hadir dalam nama-nama angka adalah
e
, saya bisa lebih pendek string byte dengan mengurangi 101 dari kode ASCII dan menggunakan basis 20. Namun, mengurangi 101 akan memetakan surat ituo
ke baris baru, yang saya Saya menggunakan sebagai pembatas angka karena mudah digunakan sebagai konstantan
bawaan di GolfScript. Bekerja di sekitar itu akan membuat saya lebih mahal daripada satu byte yang menggunakan basis yang lebih rendah akan menghemat. Menggunakan offset 99 meninggalkan baris baru sesuai dengan hurufm
, yang dengan mudah absen dari nama-nama nomor.)Berikut adalah versi de-golf dari program:
sumber