1, 2, 3, 4, 5, 6, 7, 8 ve 9'u “bir”, “iki”, “üç”, vb.


47

Kazanan: profesorf'un bash cevabı ! Bir bütün 9 bayt! Vaov!

Cevabınızı göndermeye devam edebilirsiniz, ancak artık kazanamazsınız. Posterity için tutulan orijinal yayın:


Amacınız bir dönüştürmektir bütün temsil ettiği kelimenin içine 1-9 arasındaki sayı.

  • Ondalıklar için endişelenmenize gerek kalmayacak
  • Kullanıcı bir numara girecektir. Asla 10 veya daha yukarı birşeye girmeyeceklerini varsayalım.
  • Kullanıcı numarayı bir noktaya yazmalıdır, ancak programın okuduğu yöntem önemli değildir. Bir metin dosyasını okumak vb. Gibi stdin ile olabilir, ancak kullanıcının klavyesindeki 9 düğmesine (örneğin) bir noktada basması gerekir.
  • Büyük / küçük harfe duyarlı değildir (yani, "bir", "Bir", "oNe", "OnE", vb. Kabul edilebilir)
  • HTTP / etc isteklerine izin verilir, ancak sunucu tarafından yürütülen herhangi bir kod, son kodunuzun bayt sayısına göre sayılır (örneğin, eğer bir C ++ programım bir HTTP isteğinde bulunduysa, HTTP isteğinde kullanılan PHP kodu sayılır) )
  • Derleyebilecek ve çalışabilecek her şey kabul edilebilir

  • Bu yarışma 27 Haziran 2014 tarihinde sona ermiştir .
  • Bu bir , bu yüzden en kısa kod kazanır.

2
İzleyen boşluk (yani one ) kabul edilebilir mi?
grc

1
@grc Evet, program sözcüğü çıktığı sürece.
Jon

1
diğer numaraları değil yalnızca verilen numaraların yazdırılabileceğini belirtmelisiniz.
Pinna_be

1
Mesela @Pinna_be, eğer giriş yaparsam 3, teknik olarak çıkış yapsanız one two three four five six seven eight ninebile çıktı alamazsınız . Benzer şekilde, çıkış yapamazsınız , vb.threethree seven
Jon

1
Bu soru oldukça güzeldi. Ancak tarih sınırını eklemekten hoşlanmıyorum. Özellikle, tarih sınırı 7 gün öncesine değil, tarih sınırının hemen öncesine eklenmiştir.
Nicolas Barbulesco

Yanıtlar:


19

Bash (bsdgames ile), 9

number -l

Standart girdiden okur.

Bunun için neden bir yardımcı program olduğunu bilmiyorum ama her neyse.


2
Ben bsdgames yüklemek ve daha sonra "bash" diyerek emin değilim, ancak benim rezervasyon subjektif olduğunu itiraf edeceğim.
Paul Draper

@PaulDraper Ben de yapmam. Bunu ciddi bir cevap olarak göndermedim, bence kabul

5
Bu standart bir kaçamak değil mi?
Justin,

2
@ Quincunx evet, temelde öyle. Her şey Bash'in harici kurumları olmasına rağmen, bsdgames paketini çok izin verilen bir şey olarak saymazdım (grep, wget, coreutils, sed, bc ...).

132

Python 2, 64

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

Bu, dizgenin biraz boşlukla göründüğü şeydir (dikey olarak okumayı deneyin):

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

Aşağıdaki açıklamalarda açıklandığı gibi, [input()::9]verilen endekste başlar ve sonraki her dokuzuncu karakteri seçer.


9
Kahretsin, bunu sevdim. Muhtemelen bu arada, python 2 olduğunu göstermeye değer.
undergroundmonorail

3
Açıkla lütfen! :)
Christofer Ohlsson,

6
@ChristoferOlsson input()::9, input()dizgenin sonuna kadar , karşılık gelen kelimenin harflerinin bulunduğu indeksleri olan 9, gibi 1,10,19,28,37ya da gibi basamaklarda bir aralıktır 3,12,21,30,39.
Martin Ender

1
@ m.buettner teşekkürler! Bu iyi.
Christofer Ohlsson,

6
Bu bir demiryolu çit şifresinin yaptığı gibi bir şey değil mi? (Bu arada temiz bir çözüm için +1).
Lou

18

Ortak Lisp - 22 bayt

İşte genel bir tane (sadece bir tanesi için değil):

(format nil"~R"(read))

Ah, sıralılar istersiniz (ilk, ikinci, ... üç yüzüncü ...)? Tamam!

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

10
Bu standart bir kaçamak değil mi?
seequ

2
Loophole ne anlamda? Hyperspec'te açıkça tanımlanmıştır: lispworks.com/documentation/lw50/CLHS/Body/22_cba.htm
filcab


3
İster standart bir boşluk olsun, olmasın, ben de buraya yazı göndermeye geldim. +1 :)
Joshua Taylor

5
@TheRare Bu cevabın yorumlarına bakarak, bunun bir kaçamak olduğu konusunda güçlü bir topluluk oybirliği olduğunu sanmıyorum. Benim düşüncem, eğer kullanılmazlarsa, soruların bu tür yerleşik işlevlerin kullanımını açıkça yasaklaması gerektiğidir.
Dijital Travma,

16

BASH 51

Böylece başka bir fikrimi ikinci fikrimi ve diğerlerinden biraz yardım alarak yaptım:

set one two three four five six seven eight nine

$X

'X' istediğiniz sayıdır.


BASH 48 (67)

67 \nsatır sonları ile

Bu tamamen sayılır mı emin değilim, çünkü bir dosyadan okuyor, fakat:

sed -n Xp a

Burada "X" giriş ve nerede abir dosya:

one
two
three
four
five
six
seven
eight
nine

Dosya 36 karakter ve bash komutu 13'tür.

Nasıl çalışır:

Dosyadaki her satır 1'den başlayarak numaralandırılır. Yani 'bir' 1. satırda, 'iki' 2. sıradadır. Komut, sed -n 'Xp' a"Lütfen" a "dosyasının" X "satırında listelenenleri yazdırın" sedifadesi bir Unix akış düzenleyicisidir. -nanlamına gelir sessiz olmak, ya da sadece esasen her şeyi göz ardı etmek. Xp'X' satırında olanı yazdırmak anlamına gelir.


2
Güzel ilk cevap! Cevaplarımızı bu sitede nasıl biçimlendirdiğimizi bulmak için zaman ayırdığınız için teşekkür ederiz. Programlama Bulmacaları ve Code Golf'a Hoş Geldiniz!
Justin

2
Kazıkları hesaba katmadın a.
Dennis

1
Bir bayt öncekinden daha az, bir komut satırı argümanını kabul eder ve ek dosyalar gerektirmez: pastebin.com/qdbXKQGP Bash eksik heredoc sınırlayıcı hakkında şikayet eder, ancak Dash ve Zsh ile sorunsuz çalışacaktır.
Dennis

1
@Dennis oh cool Beğendim. Cevabımı şimdi sizinkinde mi düzenlemeliyim? Üzgünüm, golf kodunu değiştirmek için yeniyim.
Eric Lagergren

1
'Tırnakları atlayabilirsiniz . Dış dosya yerine burada bir dize kullanmayı da deneyebilirsiniz. Ancak, dosyanızdaki satır sonlarını gerçekten saymalısınız.
Dijital Travma

16

C # - 127 (86/46)

Sadece çalıştırılabilir kısmı alırsanız ...

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

ve eğer HourOfDaySistem ad alanının bir parçası olsaydı, 46 karaktere ihtiyacınız olacaktı. Ne yazık ki o System.DirectoryServices.ActiveDirectoryda öyle yapar ki 86 ... diğer gürültü onu mahveder.

Bu komut satırından derlenebilir ve çalıştırılabilir (127 karakter):

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

cg2.cs adlı bir dosyaya kaydedilmişse

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

Bu nasıl çalışıyor?

HourOfDay bir enum türüdür böylece sihirli sabitler yerine isimleri kullanabiliriz. Enum türlerinde , değerin adını veren bir ToString () uygulaması bulunur . Bir numaralamaya int atabilirsiniz. Console.Read () bir tamsayı olarak gösterilen giriş akışından bir karakter okur. '1' yazarak 49 , alt çıkarma 48 'i 1, alçı / kutu HourOfDay' One 'döndürür.

Bu aynı hilenin Powershell versiyonuna bir göz atın


Bu nasıl çalışıyor ? Diyelim ki 9. giriyorum. Program ne yapar?
Nicolas Barbulesco


Bunun -48burada ne işi var?
Nicolas Barbulesco

2
@ NikolBarbulesco ekledi Bu nasıl çalışır? paragraf. Mantıklı geliyor?
rene

1
@NicolasBarbulesco - Alfabetik olarak sıralanır. "Bu kelimeler sayılar" dır. Belgelerin otomatik olarak üretildiğinden emin olduğum için, bir makalenin özel olarak ele alınması mantıklı olmaz.
Bobson

13

Befunge 98, 116 105 103 bayt

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

Bunun için Befunge yapılmadı ...

Açıklama:

&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 Bunun ne kadar zor olabileceğini göremiyorum. Basitçe, dosyayı almak bir çevirmek char[][], bir tutmak xve ykonumunu ve o yerde karakteri yürütün. En zor şey, her olası karakter için operasyonu tanımlamak olacaktır.
Justin

1
İki byte'ı a ile kolayca kaydedebilirsiniz &1-.
har-wradim

10

Javascript 68

Atob / btoa, fakir bir erkek sıkıştırma aracı olabilir (ancak bunu konsolda denemek istiyorsanız, bir kerede gördüğünüz biçimlendirilmiş metinden kopyalayamazsınız. 'Düzenle'ye gidin ve kaynak panelden kopyalayın)

Markdown editörü bu cevaptaki bazı karakterlerden hoşlanmıyor: bazı karakterler kaydedilirken kayboluyor. Yine de, bunun bir editör sorunu olduğunu düşünüyorum, benim değil. Kayıp karakterler 8 bitlik unicode karakterlerle tamamen geçerlidir.
(Ya da ben yanlışım, eğer bu konu zaten metada tartışıldıysa, bana haber verin) İşte rahatsız edici karakterlerden kaçan sürüm, her sıra \ xNN'nin 1 sayması gerekir

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

Basit bir test

Firefox konsolunda:

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

Benzer bir şey denedim, ancak bir sayı ile başlayan geçerli bir base64 dizgisi bulamadım. Bence cevabınız stackexchange tarafından bozulmuş.
nderscore

@nderscore, kahretsin.
Gönderiyi

1
Kaçış karakterleri olan sürümde, her şey çalışıyor ve 3 ve 8'den, çıkış Treeve EightF.
Justin

3
@ Quincunx 'Ağaç' benim İngilizce konuşamıyorum
edc65

10

Javascript 73

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

69

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

Teknik alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])olarak aynı şey olmaz ama 8 bayt kurtarır? Kullanıcı hala istediği numarayı
giriyor

@ eric_lagergren, kullanıcının kaynağın numarasını değiştirmesi gerektiği anlamına mı geliyor? Bunun girdi olarak sayılacağını sanmıyorum.
nderscore

Tamam, ne demek istediğini anlıyorum. Sanırım konsolda bir komut gibi çalıştırırsanız, kaynağın aksine bu girişin bir parçası olurdu.
Eric Lagergren

7

Perl, 55

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

Seçenekle -p(+1 byte) çalıştırılır , örneğin:

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

STDIN'de giriş bekleniyor ve çıkış STDOUT'a yazılıyor.

Kod sadece bir dizi oluşturur ve doğru elemanı seçer. Seçenek -p, giriş satırını okumaya özen gösterir $_ve sonucu yazdırır $_.

Varyasyonlar:

  • Sondaki yeni satırla (+3):

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

    veya (aynı bayt sayısı):

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

Güncelleme:

  • Bunun yerine çıplak kelimeler kullanmak qw[...](teşekkürler Zaid).

  • Negatif endeks byte tasarrufu sağlar (teşekkürler aragaer).


1
Birkaç karakter kaydedin:$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
Zaid

2
@ Zaid: Teşekkürler, iki bayt kurtardı. (Ben alışkınım use strict).
Heiko Oberdiek

Bu "-1" yi sevmiyorum. $_=(nine,eight,seven,six,five,four,three,two,one)[-$_]- bir karakter daha kısa.
aragaer

@aragaer: Teşekkürler, güzel fikir.
Heiko Oberdiek

6

Oracle SQL - 46

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

gösteri

Bu standart bir boşluk içerir , kabul ediyorum, ancak SQL Golfscript'ten daha kısa; Karşı koyamadım!

Oracle'ın datetime format modellerini kullanarak (ab) ile çalışır . TO_DATE(n, 'j')Sayıyı bir Jülyen gününe dönüştürür , 1 Ocak 4712'den beri gün sayısı. TO_CHAR(<date>, 'jsp')Bunu tekrar tamsayıya dönüştürür (bir string olarak). spBir olan biçim elemanı eki numarasını büyüler. Bu aslında pek çok sayıyla çalışacaktır.

Bu &1, yalnızca kabul eden istemcilerle, örneğin SQL * Plus ile çalışacak bir ikame değişkenidir.


Oracle'ın RDBMS'siyle aşk / nefret ilişkim var ama bu çok hoş.
rene

6

CJam, 45 43 bayt

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

Bazı karakterler yazdırılamadığından, yukarıdakiler ^ ve M kodlarını kullanır.

9 baytın maliyeti karşılığında, yazdırılamayan karakterlerden kaçınılabilir:

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

Çevrimiçi deneyin.

Nasıl çalışır

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

Örnek

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

Vay canına, cevaplarımız aynı uzunlukta bile aynı (kullanıcının bir dize girdiğini varsayıyorum).
Justin

1
@ Quincunx: Hem beyinler harika düşünüyor! : P Ancak kullanıcı girişi okumak CJam'da iki byte'a mal olacak, bu yüzden başka bir şey düşünmek zorunda kalacağım ...
Dennis

@ Quincunx: Her ne kadar muhtemelen baytları kurtarmayacak olsa da, GolfScript ile de çalışması gerekir. Base64 dökümü:IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
Dennis,

Bu benim başarabildiğim şeydi; daha uzun: golfscript.apphb.com/…
Justin

Ascii olmayan karakterler için ne kodlama golfscript bekliyor biliyor musunuz? Görünüşe göre utf-8
Justin

5

GolfScript, 51 bayt

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

Basit bir arama tablosu. Giriş değerlendirilir ( ~), değerlerin bir dizisi oluşturulur ve dizin bulunur.

Burada dene


Kullanıcının bir dize girmesi gerekir, zor kodlanmış olamaz. Ayrıca, Try it herebağlantınızın yapıştırılan koddan farklı bir kodu var.
Jon

@Chipperyman Kullanıcı bu programa bir dize girmiştir. Try it hereWeb sayfası kullanıcı girişi desteklemediği için kod bağlantının farktır. Bundan sonra dizgiyi değiştirin ;, bu kullanıcı girişi ile aynıdır.
Justin

Ah, anlıyorum. Golf senaryosunu çok iyi tanımıyorum, haber verdiğin için teşekkürler.
Jon

2
@Chipperyman: GolfScript betiği çalıştırmadan önce STDIN içeriğini yığına yerleştirir.
Dennis

2
Hah! Seni bir bayt yenebilirim ! ;-)
Ilmari Karonen

4

Perl, 60 bayt

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

-pAnahtarı gerektirir (iki bayt).

Örnek

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

Nasıl çalışır

  • -pSTDIN'den okur ve sonucu kaydeder $_.

  • =~/.[a-z]*/g bir önceki harfleri bir (büyük harf) harften sonra onu herhangi bir sayıda küçük harften ayırır.

  • (…) alt dizileri bir diziye toplar.

  • [$_] kullanıcı girişine karşılık gelen alt dizeyi alır.

  • $_=…sonucu kaydeder $_.

  • -pdeğerini yazdırır $_.


2
Regex numarasını beğendim. +1
seequ

3

DOS Toplu İş - 162 Karakter (satır sonları dahil)

Bu cevap @ grc'nin Python cevabından ilham almıştı, fakat aklımda benzer bir şey olsa da.

@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

Kullanımı:

[Dosya adı] [sayı]

Örneğin, kod speak.bat adlı bir dosyadaysa ve "beş" sayısını görmek istiyorsanız, şu şekilde çalıştırırsınız:

speak 5

Ayrıca, çıktı soldan sağa değil, yukarıdan aşağıya! Yani yerine

beş

göreceksin

f
ben
v
e


3

Bash + coreutils, 64

Rekabetçi olmayan sıkıştırma kavramı

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

Buradaki egzotik karakterlerin bazıları iyi sonuç vermeyebilir, bu nedenle bu senaryo, taban temsili 64 ile yeniden oluşturulabilir:

base64 -d <<< eHhkIC1wPDw8VOCLUIJu4PWWDzrgc8B+rkDjEoBDTnx0ciAwLTlhLWQgXFxuZy1pbm9yLXh8c2VkIC1uICQxcA==

Örnek çıktı

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

açıklama

Dize one two three four five six seven eight ninesadece harfleri efghinorstuvwxve boşluk ayıracı - toplamda 15 karakter değerini içerdiğini gördüm. Böylece her karakter potansiyel olarak 4 bit veya 1 bayt başına 2 karakter olarak gösterilebilir. Her bir baytı iki onaltılık basamağa bölmenin kolay bir yolu olarak bir baytın onaltılık gösterimini kullanabiliriz. Daha sonra altıgen rakamları tekrar kullanmamızı istediğimiz harflere dönüştürebiliriz tr. Şans bu ki, rstuvwxböylece olarak ifade edilebilir, ardışık olan r-xiçin tr. Kodlama şekilde düzenlenir eve folduğu gibi bırakılır, ve kullanabilmesi için, ayrılmış kelimeler satır sonu olduğu sedihtiyacımız sadece satır ouptut için.

Bu kod çözme işlemi makul miktarda fazladan alan kullanmakla sona erer, bu nedenle bu cevabı kabuk-senaryo tarzı bir cevap olarak rekabetçi yapmaz, ancak diğer dillerde yararlı bir kavram olabilir.


3

(saf) Bash, 64

Geçerli girdi olduğu varsayılarak girdiyi ilk argüman olarak alır.

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

Bir dizi oluşturur v, ardından girdide belirtilen öğeye erişir. Diziler sıfır dizinli olduğundan, yer tutucu olarak 0'ınci bir öğeyi eklemek zorunda kaldım. Alternatif olarak (bunu belirtmek için thnx @DennisWilliamson):

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

2
Aynı karakter sayısı: v=(one two three four five six seven eight nine)veecho ${v[$1-1]}
Dennis Williamson,

3

Python 2.x - 65 64

@Grc'nin cevabı kadar iyi değil ama kesinlikle daha okunaklı :-)

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

Flornquake sayesinde bir daha az karakter

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

Bu da güzel. :-) İşe yarıyor.
Nicolas Barbulesco

3
Böyle bir karakter kaydedebilirsiniz:'nine eight seven six five four three two one'.split()[-input()]
flornquake

Bu güzel bir tane!
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'));}

Ben ikili ve dönüştürmek olarak yorumlar, böylece burada uzunluk dikkatlice tasarlanmıştır olduğunu ondalık için. Sadece 7 karakterde, kazanan olduğuma eminim!


1
+1 Code-golfçüler genel olarak c kodunuzun teknik özelliklere uygun olduğu sürece uyarılarla derlenmesinin sakıncası yoktur . Böylece #includeve main()dönüş türünü atlayabilirsiniz . Ayrıca sizin ifade üstlenmeden bit: main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}. Benim sayımla 86 karakter.
Dijital Travma

Uzunluğu alamadım ve 7 karakterin nerede olacağını göremiyorum.
Nicolas Barbulesco

@NicolasBarbulesco: 111 karakter - fakat eğer 111ikili olarak ele alırsak , bu 7ondalık sayıya dönüşür .
Jerry Coffin

Jerry, kafanda koşan kod golfü var!
Nicolas Barbulesco,

3

bash diyor ki (OS X): 3 8

"Amacınız 1-9 arasında bir sayıyı temsil ettiği kelimeye dönüştürmektir"

Son kontrol ettiğimde, konuşulan kelimeler aynı zamanda kelimelerdir. Önceki deneme (giriş kabul etmiyor)

say 4

Düzenle, girişi okuyabilmeli:

say|read

Herhangi bir sayı yazın ve kelime çıkar. Bitiş tarihinin bittiğini biliyorum, ancak bence yarışmayı kazanmalıydım.

Örnek ses dosyası: four.aiff


5 olmamalı mı?
rpax

@rpax Girişin karakter sayıldığına inanmıyorum, değil mi?
Kuzen Kokain

1
Bu akıllıca. Ancak bu girişi özlüyor.
Nicolas Barbulesco

1
Ne yazık ki bu geçerli bir cevap değil çünkü: Kullanıcıdan gelen girdileri asla kabul etmez VE sadece sayı 4 olduğunda çalışır.
Jon

1
Chipperyman'ın bu cevabı CousinCocaine tarafından yaptığı yorum doğru. Ancak @RegisteredUser tarafından verilen cevap için de geçerlidir . Ancak, Chipperyman bu cevabı CousinCocaine tarafından reddetti ve cevabı æquo. Ayrıca, Kayıtlı Kullanıcının verdiği cevap, bu cevabın CousinCocaine tarafından bir kopyasıdır. Bu haksızlıktan daha fazlası.
Nicolas Barbulesco

2

VBScript 98 80 75

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

2

J - 68 veya 60 57 veya 53 bayt

Etkileşimli sürüm (stdin):

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

İşlev sürümü:

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

Açıklama:

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

".(1!:1)1 bir dize okur ve tamsayıya dönüştürür


Bir char'i bir train ( (;:'one two blah')>@{~<:) olarak yazarken bir tane daha, gerund one`two`blahyerine altıdan birini kaydedebilirsiniz ;:.
algorithmshark

@algorithmshark Teşekkürler! Ben hala J öğreniyorum. Ancak, tren sürümü metnin sonsuz bir sırada olmasını gerektirmez (düzenleme: görünüşe göre değil… neden olmasın?) Ve gerund sürümünde ekstra tırnak (düzenleme: oh, bir liste oluşturur) kutular)?
seequ

Bir çatal, sol argümandaki bir isme sahip olabilir; bu, sonsuz bir sıra ile bu ismi üreten sabit bir fiilin kısaltmasıdır ( Sözlük qv ). Ve hayır, gerund hakkında fazladan alıntı yok: undefined isimler fiillere referans olarak kabul edilir ve bunun için kullanılan sadece adını içeren kutulu bir dizedir.
algorithmshark

Ayrıca, STDIN sürümünü bir fiil ifadesi olarak yazmak zorunda değilsiniz: >one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]13 karakter daha kısa.
algorithmshark

1
@algorithmshark Haha, neden böyle yapmadım?
seequ

2

Perl 36 (58 bağımsız)

use Number::Spell;say spell_number<>

Veya, ek modüller olmadan:

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

İlk betiğim Mac'imde çalışmıyor. 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

İkinci betiğin Mac'imde çalışmıyor. 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

AppleScript'te; 123 karakter.

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

Bu betik, bir iletişim kutusundaki girişi alır. Daha sonra AppleScript'in sonucundaki çıktıyı verir  .

Örnek :

  • Giriş: 6
  • Çıktı : "six"

İşte daha güzel bir versiyon:

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

Bu sürüm çıktıyı hoş bir iletişim kutusunda görüntüler.

Örnek :

  • Giriş: 9
  • Çıktı : nine

[Cevap düzenlendi; girdi diyaloğunu biraz geliştirdi; hala 124 karakter. Cevap tekrar düzenlendi; şimdi 1 karakter daha az! ]


1
set n to text returned of... Vay.
seequ

2

Powershell - 91 74

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

Enum ve ToObject çağrısını kaldırmak için nasıl kullanılacağını öğrendim:

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

Bu nasıl çalışıyor?

HourOfDay bir enum türüdür, böylece sihirli sabitler yerine isimleri kullanabiliriz. Enum türlerinde, sabit değerin adını veren bir ToString () uygulaması bulunur. Bir numaralamaya int atabilirsiniz. Console.Read () bir tamsayı olarak gösterilen giriş akışından bir karakter okur. '1' yazdığınızda 49, alt çıktının 48 olması 1 olur, 'One' döndürmek için HourOfDay yazılır.

Çünkü powershell, çıktı akışına yazılan tüm nesneler üzerinde bir ToString yapıyor ve bunu çalıştırılabilir hale getirmek için kabartmaya ihtiyaç duymuyor, buna powershell'den başka ihtiyaç duyulan ...


2

CJam - 50

Bu, HTTP isteklerini kullanan sade bir ASCII çözümüdür (buna soruyla izin verilir):

"aj21.com/"r+g

Sunucuda, her biri karşılık gelen sözcüğü içeren 1, 2, ..., 9 adında 9 düz metin dosyası var.

Toplam boyut: 14 + 3 ("bir") + 3 ("iki") + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Daha kısa bir alan kullanılarak daha fazla golf oynanabilir.

Çevrimiçi tercüman HTTP isteklerini desteklemediğinden, programın java tercümanı kullanılarak çalıştırılması gerekir .


1
Aşağıya eğer bir yorum ekleyin.
aditsu


3
@ nyuszika7h, bu soruya özellikle izin
veriyor

1
Üzgünüm kaçırdım. Cevap düzenleninceye kadar artık oyumu geri alamıyorum.
nyuszika7h

1
@ nyuszika7h düzenlendi
aditsu

2

Toplu iş - 86

Diğer toplu cevaplardan çok daha kısa ve aslında şaşırtıcı bir şekilde rekabetçi.

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

Olarak kullanılır filename.bat numberve çıktı, doğru sayının adını taşıyan bir dosya şeklindedir.


2

Ruby 64

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

1
Alien

6
Bu kodun girildiği yeri anlamıyorum. Ve neden 9-1sadece söyleyebildiğini yazarken 8? Tabii hem 9-1ve 8yanlış; Bu komut her zaman "dokuz" çıktısı alır ve girişi yok sayar.
Ray Toal,


2

GolfScript, 50 bayt

Quincunx'in 51 bayt bağımsız GolfScript çözümünü yenip yenemeyeceğimi görmek istedim . Yeterli numaralarla, evet yapabilirim - bir byte eder.

Kullandığım numaralardan biri, yazdırılabilir ASCII aralığının dışındaki baytların kullanılması olduğundan, ortaya çıkan program doğrudan buraya yapıştırılamaz. Bunun yerine, onaltılık bir dökümünü veriyorum; Unixish sistemlerinde bulunan kullanıcılar xxd -r, gerçek 50 baytlık GolfScript programını hex dökümü üzerinden yeniden yapılandırmak için kullanabilirler :

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

Bu programı oluşturmak için kullanılan temel numara basittir: Quincunx kodunun çoğunu oluşturan uzun dize değişmezini c, karakter değerlerinden 99 çıkartarak (harfin ASCII kodu ) karakter değerlerinden çıkartarak elde ederim , elde edilen değerleri temel 22'deki sayı olarak yorumlarım. (harfleri kodlamak için yeterli x) ve daha sonra programımın ilk yarısının çoğunu oluşturan yazdırılamaz bayt dizisini üretmek için taban 255'teki sonuç sayısını yeniden kodlayın. Ardından programın geri kalanı bu işlemi tersine çevirir ve ipin yazdırılabilir bir şey haline gelmesini sağlar.

(Sayı adında gerçekte bulunan en düşük harf olduğundan e, bayt dizesini 101'i ASCII kodlarından çıkartarak ve 20 tabanını kullanarak daha da kısaltabilirdim. Ancak 101'i çıkartmak, mektubu oyeni bir satırla eşleştirirdi. sınırlayıcı olarak kullanıyorum çünkü nGolfScript'te yerleşik sabit olarak elverişlidir. Etrafta çalışmak bana daha düşük bir taban kullanmanın tasarruf edeceği bir bayttan daha pahalıya mal oldu. msayı isimlerinde uygun bir şekilde bulunmayanlar.)

İşte programın bir de-golfed versiyonu:

~       # 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.