พระคาร์ดินัลและเลข 1 ถึง 100


28

นี่คือวิธีง่ายๆในการยืดกล้ามเนื้อการบีบอัดของคุณ รหัสของคุณ (โปรแกรมที่สมบูรณ์) จะต้องแสดงผลลัพธ์เป็นตัวเลขภาษาอังกฤษทั้งหมดที่สะกดออกมาจาก 1 ถึง 100 จากนั้นตัวเลขลำดับทั้งหมดจาก 1 ถึง 100 ตัวเลขในแต่ละรายการควรคั่นด้วยเครื่องหมายจุลภาคและช่องว่างและเหมาะสม ยัติภังค์ แต่ละรายการควรเริ่มต้นด้วยอักษรตัวใหญ่และสรุปด้วยจุด ทั้งสองรายการควรถูกคั่นด้วยบรรทัดใหม่

เพื่อประโยชน์ของความชัดเจนคุณต้องสร้างกระแสไบต์ที่แน่นอนนี้:

One, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twenty-one, twenty-two, twenty-three, twenty-four, twenty-five, twenty-six, twenty-seven, twenty-eight, twenty-nine, thirty, thirty-one, thirty-two, thirty-three, thirty-four, thirty-five, thirty-six, thirty-seven, thirty-eight, thirty-nine, forty, forty-one, forty-two, forty-three, forty-four, forty-five, forty-six, forty-seven, forty-eight, forty-nine, fifty, fifty-one, fifty-two, fifty-three, fifty-four, fifty-five, fifty-six, fifty-seven, fifty-eight, fifty-nine, sixty, sixty-one, sixty-two, sixty-three, sixty-four, sixty-five, sixty-six, sixty-seven, sixty-eight, sixty-nine, seventy, seventy-one, seventy-two, seventy-three, seventy-four, seventy-five, seventy-six, seventy-seven, seventy-eight, seventy-nine, eighty, eighty-one, eighty-two, eighty-three, eighty-four, eighty-five, eighty-six, eighty-seven, eighty-eight, eighty-nine, ninety, ninety-one, ninety-two, ninety-three, ninety-four, ninety-five, ninety-six, ninety-seven, ninety-eight, ninety-nine, one hundred.
First, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth, seventeenth, eighteenth, nineteenth, twentieth, twenty-first, twenty-second, twenty-third, twenty-fourth, twenty-fifth, twenty-sixth, twenty-seventh, twenty-eighth, twenty-ninth, thirtieth, thirty-first, thirty-second, thirty-third, thirty-fourth, thirty-fifth, thirty-sixth, thirty-seventh, thirty-eighth, thirty-ninth, fortieth, forty-first, forty-second, forty-third, forty-fourth, forty-fifth, forty-sixth, forty-seventh, forty-eighth, forty-ninth, fiftieth, fifty-first, fifty-second, fifty-third, fifty-fourth, fifty-fifth, fifty-sixth, fifty-seventh, fifty-eighth, fifty-ninth, sixtieth, sixty-first, sixty-second, sixty-third, sixty-fourth, sixty-fifth, sixty-sixth, sixty-seventh, sixty-eighth, sixty-ninth, seventieth, seventy-first, seventy-second, seventy-third, seventy-fourth, seventy-fifth, seventy-sixth, seventy-seventh, seventy-eighth, seventy-ninth, eightieth, eighty-first, eighty-second, eighty-third, eighty-fourth, eighty-fifth, eighty-sixth, eighty-seventh, eighty-eighth, eighty-ninth, ninetieth, ninety-first, ninety-second, ninety-third, ninety-fourth, ninety-fifth, ninety-sixth, ninety-seventh, ninety-eighth, ninety-ninth, one hundredth.

นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ

คำตอบ:


28

เสียงกระเพื่อมสามัญ 88 82 80 ไบต์

(format t"~@(~{~R~^, ~}~).
~:*~@(~{~:R~^, ~}~)."(loop as i to 99 collect(1+ i)))

(เป็นส่วนหนึ่งของภาษาฉันหวังว่าคุณจะไม่รังเกียจ)

เอาท์พุต

One, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twenty-one, twenty-two, twenty-three, twenty-four, twenty-five, twenty-six, twenty-seven, twenty-eight, twenty-nine, thirty, thirty-one, thirty-two, thirty-three, thirty-four, thirty-five, thirty-six, thirty-seven, thirty-eight, thirty-nine, forty, forty-one, forty-two, forty-three, forty-four, forty-five, forty-six, forty-seven, forty-eight, forty-nine, fifty, fifty-one, fifty-two, fifty-three, fifty-four, fifty-five, fifty-six, fifty-seven, fifty-eight, fifty-nine, sixty, sixty-one, sixty-two, sixty-three, sixty-four, sixty-five, sixty-six, sixty-seven, sixty-eight, sixty-nine, seventy, seventy-one, seventy-two, seventy-three, seventy-four, seventy-five, seventy-six, seventy-seven, seventy-eight, seventy-nine, eighty, eighty-one, eighty-two, eighty-three, eighty-four, eighty-five, eighty-six, eighty-seven, eighty-eight, eighty-nine, ninety, ninety-one, ninety-two, ninety-three, ninety-four, ninety-five, ninety-six, ninety-seven, ninety-eight, ninety-nine, one hundred.
First, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth, seventeenth, eighteenth, nineteenth, twentieth, twenty-first, twenty-second, twenty-third, twenty-fourth, twenty-fifth, twenty-sixth, twenty-seventh, twenty-eighth, twenty-ninth, thirtieth, thirty-first, thirty-second, thirty-third, thirty-fourth, thirty-fifth, thirty-sixth, thirty-seventh, thirty-eighth, thirty-ninth, fortieth, forty-first, forty-second, forty-third, forty-fourth, forty-fifth, forty-sixth, forty-seventh, forty-eighth, forty-ninth, fiftieth, fifty-first, fifty-second, fifty-third, fifty-fourth, fifty-fifth, fifty-sixth, fifty-seventh, fifty-eighth, fifty-ninth, sixtieth, sixty-first, sixty-second, sixty-third, sixty-fourth, sixty-fifth, sixty-sixth, sixty-seventh, sixty-eighth, sixty-ninth, seventieth, seventy-first, seventy-second, seventy-third, seventy-fourth, seventy-fifth, seventy-sixth, seventy-seventh, seventy-eighth, seventy-ninth, eightieth, eighty-first, eighty-second, eighty-third, eighty-fourth, eighty-fifth, eighty-sixth, eighty-seventh, eighty-eighth, eighty-ninth, ninetieth, ninety-first, ninety-second, ninety-third, ninety-fourth, ninety-fifth, ninety-sixth, ninety-seventh, ninety-eighth, ninety-ninth, one hundredth.

คำอธิบาย

ดูเอาท์พุทที่จัดรูปแบบให้กับตัวละครสตรีม

  • (format t "<control string>" <arguments>)จัดรูปแบบสายอักขระควบคุมตามอาร์กิวเมนต์ (variadic) และพิมพ์ไปยังเอาต์พุตมาตรฐาน (เพราะt)

  • (loop ...) สร้างรายการจำนวนเต็มตั้งแต่ 1 ถึง 100

  • ~@( ... ~) ใช้อักษรตัวพิมพ์ใหญ่สตริงที่ส่งคืนโดยสตริงควบคุมภายใน
  • ~{ ... ~} วนซ้ำกว่าอาร์กิวเมนต์ปัจจุบันและใช้การจัดรูปแบบภายในกับแต่ละองค์ประกอบ
  • ภายในการทำซ้ำทุกอย่างที่ตามมา~^จะไม่ถูกพิมพ์ในการทำซ้ำครั้งล่าสุด: ใช้เพื่อเพิ่มตัวคั่นช่องว่างระหว่างองค์ประกอบ
  • ~R แสดงผลอาร์กิวเมนต์ปัจจุบันเป็นตัวเลข
  • ~:R ส่งออกอาร์กิวเมนต์ปัจจุบันเป็นลำดับ
  • ~% เอาต์พุตบรรทัดใหม่
  • ~:*รีเซ็ตอาร์กิวเมนต์ปัจจุบันที่จะประมวลผลเป็นอาร์กิวเมนต์ก่อนหน้าซึ่งใช้ที่นี่เพื่อใช้รายการของจำนวนเต็มเป็นครั้งที่สอง

บันทึก 2 ไบต์ขอบคุณPrzemysławP


1
และฉันคิดว่าคำตอบขนาด 340 ไบต์น่าประทับใจ ...
kirbyfan64sos

3
ตัวแทนของคุณในขณะนี้สวย 1337! : D โชคไม่ดีที่ฉันไม่สามารถแก้ปัญหานี้ได้ ... :(
Numeri พูดว่า Reinstate Monica

2
@Numeri คุณสามารถโหวตตอนนี้ ;)
DLosc

1
โซลูชั่นที่สั้นกว่าความซับซ้อนของอินพุต kolomogorov มักจะน่าประทับใจมาก! ทำได้ดี.
isaacg

1
@DLosc มันเป็นการดีสำหรับฉันที่จะทำลาย ... : D
Numeri พูดว่า Reinstate Monica

9

Pyth, 366 342 340 ไบต์

Lcbdj=Y", "++rhJy"one two three four five six seven eight nine"3+tJ+y"ten eleven twelve"+=Nm+d"teen"=by"thir four fif six seven eigh nine"sm+dm++d\-kJKy"twenty thirty forty fifty sixty seventy eighty ninety"+=H"one hundred"\.jY+rh=J++y"first second third"m+d=T"th"tPby"ninth"3+++tJy"tenth eleventh twelfth"+m+dTNsm++Pd"ieth"m++d\-kJK+H"th."

การสาธิตสด

รุ่น 342 ไบต์:

Lcbdj", "++rhJy"one two three four five six seven eight nine"3+tJ+y"ten eleven twelve"+=Nm+d"teen"=by"thir four fif six seven eigh nine"sm+dm++d\-kJKy"twenty thirty forty fifty sixty seventy eighty ninety"+=H"one hundred"\.j", "+rh=J++y"first second third"m+d"th"tPby"ninth"3+++tJy"tenth eleventh twelfth"+m+d"th"Nsm++Pd"ieth"m++d\-kJK+H"th."

รุ่น 366- ไบต์:

Lcbd
j", "++"One"+tJy"one two three four five six seven eight nine"+y"ten eleven twelve"+=Nm+d"teen"y"thir four fif six seven eigh nine"sm+dm++d\-kJKy"twenty thirty forty fifty sixty seventy eighty ninety"+=H"one hundred"\.
j", "+"First"+++t=Jy"first second third fourth fifth sixth seventh eighth ninth"y"tenth eleventh twelfth"+m+d"th"Nsm++Pd"ieth"m++d\-kJK+H"th."

6

PHP - 491 ไบต์

โกงเล็ก ๆ ที่นี่สำหรับพระคาร์ดินัล (ฉันใช้คลาส NumberFormatter ที่เริ่มต้นด้วย PHP):

echo'One, ';$x=new NumberFormatter(0,5);for($i=1;$i++<100;)echo$x->format($i).($i>99?
'.':', ');echo"
";$y=[First,second,third,fourth,fifth,sixth,seventh,eighth,ninth,tenth,
eleventh,twelfth,thirteenth,fourteenth,fifteenth,sixteenth,seventeenth,eighteenth,nineteenth,
twentieth];for($z=[thirtieth,fortieth,fiftieth,sixtieth,seventieth,eightieth,ninetieth];
$j++<99;$q=floor($j/10),$w=$z[$q-2])echo$j<21?$y[$j-1]:($j%10?$x->format($q*10).'-'.
strtolower($y[$j%10-1]):$w),', ';echo'one hundredth.';

(เพิ่มบรรทัดใหม่สองสามบรรทัดเพื่อให้สามารถอ่านได้)


2
โดยทั่วไปคำเตือนจะได้รับอนุญาตให้ลบทั้งหมด@(-4 ไบต์) ใช้การขึ้นบรรทัดใหม่แทนการเขียน\n(-1 ไบต์) ใส่คำนิยามของ$zลงในการเริ่มต้นของforลูปที่สอง(-1 ไบต์)
Blackhole

บันทึก 6 ไบต์โดยใช้วิธีการขั้นตอนแทนตัวสร้างเชิงวัตถุ
rink.attendant.6

6

PHP 5.3+, 195 ไบต์

ที่มีอักขระขึ้นบรรทัดใหม่

มันเป็นส่วนหนึ่งของNumberFormatterชั้นเช่นเดียวกับคำตอบของ Razvan ยกเว้นฉันจะสะกดทั้งพระคาร์ดินัลและลำดับตามไอซียู

$f=numfmt_create(en,5);$g=clone$f;$g->setTextAttribute(6,'%spellout-ordinal');for($x=$y='',$i=1;$i++<100;){$x.=$f->format($i).($z=$i<=99?', ':'');$y.=$g->format($i).$z;}echo"One, $x.
First, $y.";

ที่เกี่ยวข้อง: https://stackoverflow.com/a/19411974/404623


ดี! ฉันไม่รู้เลยว่ารูปแบบ% spellout-ordinal
Razvan

4

Oracle SQL 231 ไบต์

SqlFiddleLiveDemo

 SELECT 'O'||SUBSTR(LISTAGG(TO_CHAR(TO_DATE(level,'j'),'jsp'),', ')WITHIN GROUP(ORDER BY level),2)||'.','F'||SUBSTR(LISTAGG(TO_CHAR(TO_DATE(level,'j'),'jTHSP'),', ')WITHIN GROUP(ORDER BY level),2)||'.' FROM DUAL CONNECT BY level<101

3

JavaScript ES6, 562 464 ไบต์

ยังไม่เล่นกอล์ฟเลย!

n=>(f=(a,b)=>Array(89).fill(a=btoa(a+`·§·,í*íË7躻rÍø·,ìrÎǯz{rÍè Ü³)Þ·,ó`).split`z`).map((l,i)=>i<1?b:i<20?a[i]:a[18+(i-i%10)/10]+'-'+a[i%10]).join`, `+', one hundred')(`¢w³·
3¶Þ{7躼ß÷³²,s±ëÞ7¢s)ÞÎקÍé^½éó·¥½ìí*íyéó~«µç§Íøµç§Îȱµç§Îǯz{^z|Þmyéó)Þµç§ÎÜܳ¶«·,ߢêíË7â~ܳ²,mË;½éíË7¢rÎx§µì³`,'One')+`
`+f(`~*ì·;rÝÎØb­Üߢêí7â~Øs²,m;½éí7¢Øs)Þ¶íz{aÍé^½éí;pz[Þ¶í*íyéí7躻^z{aÍøµç§¶ì^z{aÎǯz{^z{aÍè ×Øs)޵秶ó`,'First')+'th'

หากวิธีนี้ใช้ไม่ได้ฉันอาจต้องเพิ่ม hexdump เนื่องจากอักขระพิเศษทั้งหมดโปรดแจ้งให้เราทราบหากเป็นกรณีนี้และฉันจะไปหาคุณในวันพรุ่งนี้

หากพวกเขามีความผิดพลาดใด ๆ ก็แจ้งให้เราทราบ

โค้ดใน pastebin (ทดสอบบน Safari Nightly)

คำอธิบาย

นี่อาจดูเหมือนตัวละครที่อ่านไม่ออก แต่จริง ๆ แล้วมันค่อนข้างเรียบง่าย

เราเริ่มต้นด้วยการสร้างพระคาร์ดินัล อาร์เรย์นี้ถูกบีบอัดโดยใช้btoaฟังก์ชัน

['one', ..., 'eighteen', 'nineteen', 'twenty', 'thirty', ...,'ninety']

ในการวนซ้ำผ่าน "ช่วง" เราใช้สิ่งต่อไปนี้:

ตอนนี้เราสร้าง Array of Length 89 โดยใช้ นี่...คือสิ่งที่ไม่มีการบีบอัดอาร์เรย์

Array(89).fill(...)

จากนั้นแผนที่ผ่านมันฉันเป็นดัชนี:

.map((l,i)=>

ตอนนี้สำหรับเงื่อนไขi < 1หรือถ้าเป็นรายการแรกเราจะใช้เวอร์ชันตัวพิมพ์ใหญ่ของหนึ่ง / แรก

i<1?b

มิฉะนั้น ... หากน้อยกว่า 20 เราจะแสดงผลเป็นสิบเอ็ด ... สิบเก้า

i<20?a[i]:

มิฉะนั้น ... โดยใช้(i-i%10)/10เราจะได้ตัวเลขตัวสุดท้าย เราบวก 18 เข้าไปเพื่อชดเชย 1..19 เราเพิ่ม-แล้วเพิ่มตัวเลขสุดท้ายหรือ i% 10

ในที่สุดเราเพิ่ม 'หนึ่งร้อย' ไปยังจุดสิ้นสุดเพราะเราทำไม่ได้

เราทำซ้ำสำหรับตัวเลขทั้งสองประเภทและแยกด้วยบรรทัดใหม่


พยายามกับ FireFox: รหัสที่โพสต์นั้นมีข้อบกพร่อง รหัสใน Pastebin เป็น ok hundredแต่บอลเฉียงระยะเวลาหลังจากที่ครั้งแรก โดยรวม: ยอดเยี่ยมมาก | +1
edc65

ตัวละครพิเศษคืออะไร?
ส่องสว่าง

3

C ++ 704 642 620 602

ไม่มีการใช้งานอื่น ๆ ในห้องสมุดกว่าostream operator<<()สำหรับchar*s

#include<iostream>
char*q,a[]="|one|two|three|four|five|six|seven|eight|ni&u$Il%*twel&bthirte$Q(P#tif#j)/#k'L#|)y#r*4#s'9rst&>cond*5d)zh)gh)U#V)Ch)2h(}#V09$m0M$I0]'g0k)B0|*I#}1A+4$01f+y1u$$|+/nty+(y*`#X*3y)p#V)Ly))y(dyC5~hundred)Oie1o#|1c#}*E#s*a#t*}$&+9#|+T#|+uth",b[448],*s=a,*t=b;int i,j,k;auto p(int k){for(s=b;k--;)while(*s++);return s;}int main(){for(;k=*s++;)if(k>98)*t++=k<'|'?k:" "[k<'~'];else for(i=(k-35)*95+*s++-32,q=t-i/9,k=3+i%9;k--;)*t++=*q++;for(j=0;j<2;++j)for(i=1;b[1+126*j]^=32*(i<3),k=i<20?i:i%10,i<101;++i)std::cout<<p(40+!k*j*11+i/10)<<"-"[!k|i<20]<<p(j*20+k)<<", \0.\n"+i/100*3;}

รุ่นสด

ด้วยช่องว่างและความคิดเห็น:

#include <iostream>

// Encoded as literal characters or offset/length pairs for previous runs of characters, LZ like
char *q, a[] =
             "|one|two|three|four|five|six|seven|eight|ni&u$Il%*twel&bthirte$Q(P#tif#j)/"
             "#k'L#|)y#r*4#s'9rst&>cond*5d)zh)gh)U#V)Ch)2h(}#V09$m0M$I0]'g0k)B0|*I#}1A+4$01f+y1u$$|"
             "+/nty+(y*`#X*3y)p#V)Ly))y(dyC5~hundred)Oie1o#|1c#}*E#s*a#t*}$&+9#|+T#|+uth",
         b[448], *s = a, *t = b;

int i, j, k;

// Find the kth null separated string in array b
auto p(int k) {
    for (s = b; k--;)
        while (*s++)
            ;
    return s;
}

int main() {
    // Decode the compressed 'primitives' we use to build up the output.
    for (; k = *s++;)
        if (k > 98)
            *t++ = k < '|' ? k : " "[k < '~'];
        else
            for (i = (k - 35) * 95 + *s++ - 32, q = t - i / 9, k = 3 + i % 9; k--;) *t++ = *q++;

    // Loop twice over numbers 1-100, building up output from the 'primitives' in our array
    for (j = 0; j < 2; ++j)
        for (i = 1; b[1 + 126 * j] ^= 32 * (i < 3), k = i < 20 ? i : i % 10, i < 101; ++i)
            std::cout << p(40 + !k * j * 11 + i / 10) << "-"[!k | i < 20] << p(j * 20 + k)
                      << ", \0.\n" + i / 100 * 3;
}

สตริงที่บีบอัดถูกถอดรหัสจากaเป็นb:

|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|
sixteen|seventeen|eighteen|nineteen||first|second|third|fourth|fifth|sixth|seventh|eighth|
ninth|tenth|eleventh|twelfth|thirteenth|fourteenth|fifteenth|sixteenth|seventeenth|
eighteenth|nineteenth|||twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|one~
hundred|||twentieth|thirtieth|fourtieth|fiftieth|sixtieth|seventieth|eightieth|
ninetieth|one~hundredth;

โดยไม่ต้องขึ้นบรรทัดใหม่ ในระหว่างการคลายบีบอัด|s จะถูกแทนที่ด้วย'\0'และ~แทนที่ด้วย' '(การเล่นโวหารของวิธีการที่ตัวละครจะถูกเข้ารหัสเป็น ASCII ที่พิมพ์ได้) สตริง 'ดั้งเดิม' เหล่านี้จะถูกค้นหาโดยดัชนีในbอาร์เรย์โดยใช้pฟังก์ชันและใช้เพื่อรวบรวมเอาต์พุต

การบีบอัดเป็น LZ แบบง่ายๆที่มีการเข้ารหัสอักขระเป็นตัวอักษรหรือเป็นค่าลบเชิงลบลงในบัฟเฟอร์และความยาวการรัน (เข้ารหัสเป็นอักขระสองตัว) หากพบความยาวที่ตรงกัน> = 3 สตริงสามารถบีบอัดเพิ่มเติมโดยใช้อักขระที่ไม่สามารถพิมพ์ได้ แต่ฉันต้องการให้โค้ดของฉันคัดลอกและวางอย่างปลอดภัย :)


1

Javascript (ES6), 713

คล้ายกับการส่ง PHP ครั้งที่สองของฉันกับคำถามนี้ (2444 - 713) / 2444 = 70.8% การบีบอัด

a=`Onez]cu^dP~Ntenz\`zHlvezmwgwjwkw{wqwpwHnQxZx]xcxux^xdxPx~xNmQXZX]XcXuX^XdXPX~XNforQbZb]bcbub^bdbPb~bNjQWZW]WcWuW^WdWPW~WNkQVZV]VcVuV^VdVPV~VN{QUZU]UcUuU^UdUPU~UNqQTZT]TcTuT^TdTPT~TNpQSZS]ScSuS^SdSPS~SNy.
FirstzaRMLKJI[ten}\`}Hlf}mGgGjGkG{GqGpGHnYx_xaxRxMxLxKxJxIx[mYX_XaXRXMXLXKXJXIX[forYb_babRbMbLbKbJbIb[jYW_WaWRWMWLWKWJWIW[kYV_VaVRVMVLVKVJVIV[{YU_UaURUMULUKUJUIU[qYT_TaTRTMTLTKTJTIT[pYS_SaSRSMSLSKSJSIS[yth.`,'eleven|`}|`z|twe|q}|{}|k}|j}|g}|pz|{z|kz|gz|one hundred|tyz|mdz|qtz|p~|q~|{~|k~|j~|m~|tie}|onez|nin}|twoz|fivez|firstz|teen|threez|secondz|for~|four|fif|twen~|six|thir|nine|eigh|, |seven|th, |ty-'.split('|').map((e,i)=>a=a.split('`GwHIJKLMNPduyQR~STUVWXYZ[]^_`cabgjxkmpqz{}~'[i]).join(e)),alert(a)

ซอ


ทำไม downvote นี้
DankMemes

1

Mathematica 415 391 407

IntegerName[n]พระคาร์ดินัลจะได้รับจาก พระราชกฤษฎีกามาจากพระคาร์ดินัล

s = StringRiffle; y = IntegerName; t = StringReplace;
k@n_ := If[(z = (TextWords["first second third a fifth a a a ninth,a, a twelfth a a a a a eighteenth a, twentieth"])[[n]]) == "a", y@n <> "th", z]
g@n_ := Module[{i = IntegerDigits[n], z}, z := y[Quotient[n, 10]*10];Which[n == 100, "one hundredth", n < 20, k[n], i[[-1]] == 0, t[z, "y" -> "ieth"], 3 > 2, z <> "-" <> k[i[[-1]]]]]
t[(s[y@Range@100 /. "one" -> "One", ", "] <> ".") <> s[g /@ Range@100 /. "first" -> "\nFirst", ", "] <> ".", "tt" -> "t"]

เอาท์พุท:

One, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twenty-one, twenty-two, twenty-three, twenty-four, twenty-five, twenty-six, twenty-seven, twenty-eight, twenty-nine, thirty, thirty-one, thirty-two, thirty-three, thirty-four, thirty-five, thirty-six, thirty-seven, thirty-eight, thirty-nine, forty, forty-one, forty-two, forty-three, forty-four, forty-five, forty-six, forty-seven, forty-eight, forty-nine, fifty, fifty-one, fifty-two, fifty-three, fifty-four, fifty-five, fifty-six, fifty-seven, fifty-eight, fifty-nine, sixty, sixty-one, sixty-two, sixty-three, sixty-four, sixty-five, sixty-six, sixty-seven, sixty-eight, sixty-nine, seventy, seventy-one, seventy-two, seventy-three, seventy-four, seventy-five, seventy-six, seventy-seven, seventy-eight, seventy-nine, eighty, eighty-one, eighty-two, eighty-three, eighty-four, eighty-five, eighty-six, eighty-seven, eighty-eight, eighty-nine, ninety, ninety-one, ninety-two, ninety-three, ninety-four, ninety-five, ninety-six, ninety-seven, ninety-eight, ninety-nine, one hundred.
First, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth, seventeenth, eighteenth, nineteenth, twentieth, twenty-first, twenty-second, twenty-third, twenty-fourth, twenty-fifth, twenty-sixth, twenty-seventh, twenty-eighth, twenty-ninth, thirtieth, thirty-first, thirty-second, thirty-third, thirty-fourth, thirty-fifth, thirty-sixth, thirty-seventh, thirty-eighth, thirty-ninth, fortieth, forty-first, forty-second, forty-third, forty-fourth, forty-fifth, forty-sixth, forty-seventh, forty-eighth, forty-ninth, fiftieth, fifty-first, fifty-second, fifty-third, fifty-fourth, fifty-fifth, fifty-sixth, fifty-seventh, fifty-eighth, fifty-ninth, sixtieth, sixty-first, sixty-second, sixty-third, sixty-fourth, sixty-fifth, sixty-sixth, sixty-seventh, sixty-eighth, sixty-ninth, seventieth, seventy-first, seventy-second, seventy-third, seventy-fourth, seventy-fifth, seventy-sixth, seventy-seventh, seventy-eighth, seventy-ninth, eightieth, eighty-first, eighty-second, eighty-third, eighty-fourth, eighty-fifth, eighty-sixth, eighty-seventh, eighty-eighth, eighty-ninth, ninetieth, ninety-first, ninety-second, ninety-third, ninety-fourth, ninety-fifth, ninety-sixth, ninety-seventh, ninety-eighth, ninety-ninth, one hundredth.

1
บางคนไม่ถูกแก้ไขeightth
Mario Trucco

คุณพูดถูก! ตอนนี้ฉันแก้ไขพวกเขา
DavidC

คุณอาจจะเปลี่ยน"first" -> "\nFirst"ไป"fir" -> "\nFir"เพื่อประหยัด 4 ไบต์
LegionMammal978

@ LegionMamal978 ข้อเสนอแนะที่ดี แต่จะไม่ทำงานเพราะเรากำลังแทนที่องค์ประกอบ (คำ) ในรายการ: "แรก" เป็นองค์ประกอบในรายการ แต่ "fir" ไม่ใช่ หากเราพยายามที่จะดำเนินการตามคำแนะนำของคุณหลังจากรายการองค์ประกอบถูกStringJoinเอ็ดดังนั้น "ยี่สิบเอ็ด ... สามสิบเอ็ด ... " จะกลายเป็น "ยี่สิบเอ็ด ... สามสิบเอ็ด ... "
DavidC

1

JavaScript (ES6), 480

/*TEST: redirect console output to snippet body */ console.log=x=>O.innerHTML=x

// Not a function, as a complete program is requested
b=x=>btoa(x).split`/`;
Z=i=>z[i]||z[i-8]||z[i-18];
y=b("ýø«²ßìyÊ'wûa·ýøÿÿÞ)ÿÿûpzWÿÿÿÿÿÿÿ");
z=b("þÞþÜ(þØkyïߢêÿ~+ÞþȱþǯzÞmþx§{û^÷¥z÷§þÜ÷¿¶«ÿ÷âÿÿz(!ÿûpzÿ~ÿÿÿÿ");
o=(z.map((v,i)=>i<20?i<13?v:(v||z[i-10])+'teen':z[S='slice'](0,10).map(d=>Z(i)+(d?'ty-'+d:'ty')))+`,${h='one hundred'}.\nF`).split`,`;
q=y.map((v,i)=>i<4?v:`${v||o[i]}th`);
q=z.map((v,i)=>i<20?' '+q[i]:q[S](0,10).map(d=>' '+Z(i)+(d?'ty-'+d:'tieth')));
console.log('O'+o.join`, `[S](3)+`${q}, ${h}th.`[S](4))

// INFO: z uncompressed is [,one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thir,,fif,,,eigh,,twen,,for,,,,,]
// INCO: y uncompressed is [,first,second,third,,fif,,,eigh,nin,,,twelf,,,,,,,,,]
#O { white-space: pre-wrap }
<pre id=O></pre>


0

PHP - 842 ไบต์

การข้ามแท็กเริ่มต้นและแท็กสิ้นสุด PHP ปกติการบีบอัดคือ 1 - 842/2445 = 65.6%

โดยทั่วไปรับเอาท์พุทbase64_encode(gzdeflate($input, 9));และย้อนกลับการดำเนินงาน เห็นได้ชัดว่าถ้าฉันเลือกที่จะส่งออกใน 8 บิตบริสุทธิ์กับฐาน 64 มันจะมีขนาดเล็กลง 25% แต่มีความเสี่ยงในการหลบหนีหรือตัวละครที่ไม่สามารถพิมพ์ได้

echo gzinflate(base64_decode('VZRdcuIwEITfcwoOQHKMfd1DBGnlKspUEYfEt1+rf2bGL6gbkLplS9/ftV0v28/j+BjPduj++H4en8vr0F/L7/HRXm29Xtryb2zXy7pgAr6585ftp93nv7exPLc2v5lrSC2d4lhKYk6ixJJQc1WqY7F12z2+P1gPmi2lWVaOnW1QXQY7sI6602k/ctrW3MHuUeHUekTUCqdTuMzyyl8YLq1wOofTMbw/kI2B0ZRIlvQrylxpxFIjVZKhNMqkUeTxdnYNioRkJKUiYXw2ekZCM5JSkTCOhGHkPAe7BkZSIlKSkTSMlPahdKQkI2kUSaNInLg9hGJlGGyjaFmF2zFeLu9GqSDrErKsgS93jywhjQ7WrCDHBjYoIIN863JFI12O4bhgu0eGSyPcmuFyDLdBuAzCrRkuVzAR4UfaZXyvt2e7fbz9WZ5feDafj/XGK3ATMQaPyuDrG36AQ3sZWHYOm769+/eJIEw0g7CWKOR1JUWiXL+VDGnzSGuv29JCzkeBLQRWtBOTCRsqZDrN7MVplxVPxXvPSajYoNoYOWxjzuRzLW0SVaeZvTi3KbwqPtoEsviIXcYcQhfTh1XMLr3oWsSzehrVKABL6xLBML9adRCY2EE4UgfBjB0CZnVWT+MOSbS00cFQ85liB5OKh1x8YgfTDR2SbnVWT+MrkIhL6w5BuTzMahHI0mV7nY5q4o5dCu7Os3u1p0tZO1XqjRP24l6xVnAMrQJeLBX8Q6fCv9PMXpwKVQgW7zrJwbjZbBNgQ5ugGdsEENGmAPE0sxenNpWKxReCtWxTyLiNj7f/'));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.