Dengan menggunakan dua program yang ditautkan, tampilkan angka urut hingga n

19

... Angka urut (atau angka urut) adalah kata-kata yang mewakili posisi atau peringkat dalam urutan berurutan.

masukkan deskripsi gambar di sini

Dari Wikipedia .

Tugas Anda adalah, menggunakan 2 program terpisah (yang dapat dibuat dari 2 bahasa berbeda), untuk menghasilkan urutan urut dari pertama hingga nth. Anda akan mengeluarkan kata lengkap secondsebagai lawan 2nd.

Tantangan bilangan ordinal telah diangkat sebelumnya, khususnya dalam entri ini . Dalam tantangan ini, tata cara hanyalah sarana untuk memfasilitasi kondisi unik yang dirinci di bawah ini.


Bagian 1

Anda harus membuat program itu, ketika diberi input nharus output apa pun .
nakan selalu menjadi bilangan bulat positif, bukan nol, tidak lebih besar dari 999.

Output yang valid termasuk tetapi tidak terbatas pada :

  • Output apa pun ke stdout/ stderr/ etc
  • Pembuatan file / folder / dll
  • Antarmuka grafis atau gambar dalam bentuk apa pun

Apapun itu.


Bagian 2

Anda harus membuat program yang menggunakan output dari program bagian 1 untuk menampilkan urutan nomor urut, mulai dari 1 (pertama), hingga apa pun nyang diuraikan di bagian 1.

Kondisi umum:

  • Total byte untuk bagian 2 tidak boleh melebihi total byte untuk bagian 1 (kurang dari atau sama dengan).

Kondisi output:

  • Tidak peka huruf besar-kecil.
  • Keluaran harus hanya berisi urutan ordinal (hanya karakter aZ) dan spasi putih (baris baru diizinkan).
  • Dapat di-output ke sumber apa saja, selama itu terlihat selama atau setelah eksekusi.
  • Program tidak perlu berakhir selama outputnya benar.
  • Output tidak diperlukan untuk memiliki tata bahasa, tetapi secara opsional dapat memasukkannya (tanda hubung, koma, "ands", dll). nine hundred ninety ninthhanya bisa diterima nine hundred and ninety-ninth.

Output Sampel

Dimana n8

FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH

Mencetak gol

Hirarki kondisi menang adalah:

  1. Jumlah byte terendah di bagian 1
  2. Jumlah byte terendah di bagian 2
Entry #1 | Part 1 = 32 bytes, Part 2 = 22 bytes
Entry #2 | Part 1 = 31 bytes, part 2 = 30 bytes

Entry #2 wins - Part 1 contains 31 bytes vs 32 bytes

---

Entry #1 | Part 1 = 21 bytes, Part 2 = 33 bytes
Entry #2 | Part 1 = 80 bytes, Part 2 = 70 bytes

Entry #2 wins - Entry #1 disqualified (Part 2 contains more bytes than Part 1)

---

Entry #1 | Part 1 = 50 bytes, Part 2 = 49 bytes
Entry #2 | Part 1 = 50 bytes, Part 2 = 50 bytes

Entry #1 wins - Part 1 is equal, Part 2 contains 49 bytes vs 50 bytes
BDM
sumber
5
Apa gunanya bagian 1 (seperti, mengapa tantangan ini tidak bisa hanya dinilai pada pengajuan terpendek untuk bagian 2)? Juga, dalam contoh skor kedua Anda, bukankah entri pertama tidak valid (bagian 2> bagian 1), dan jika tidak, bukankah akan mengalahkan entri kedua? Juga, saya sarankan memiliki setidaknya tautan ke aturan formal untuk mendefinisikan tata cara; misalnya, apakah 111 seharusnya dikatakan one hundred and eleventhatau one hundred eleventh?
HyperNeutrino
3
@HyperNeutrino Saya pikir idenya adalah untuk mencoba membagi pekerjaan antara keduanya serata mungkin saat bermain golf - jika saya membuat output p1 [30, 'second']untuk 32kemudian p2 memiliki lebih sedikit pekerjaan untuk melakukan itu jika memiliki output, hanya 32.
Jonathan Allan
4
Mungkin saya melewatkan sesuatu yang bodoh, tetapi dari dua entri terakhir dalam contoh penilaian, mengapa entri 1 tidak menang? bagian 1 memiliki byte yang sama, bagian 2 kurang dari atau sama dengan bagian 1 untuk keduanya, dan entri 1 bagian 2 memiliki lebih sedikit byte daripada entri 2 bagian 2.
Patrick Roberts
@ PatrickRoberts Karena Bagian 2 harus mengandung byte yang sama atau lebih sedikit ke Bagian 1. Karena Bagian 1 adalah 21 byte, tetapi Bagian 2 adalah 33 byte, Entri # 1 didiskualifikasi. Sayangnya, informasi itu tersimpan dan tidak secara eksplisit dinyatakan dalam kondisi menang saat ini.
Chronocidal
@ PatrickRoberts Ini penting, karena jika tidak, Anda bisa menggunakan bahasa yang secara implisit melewati input sebagai output ketika program 0 byte dijalankan untuk Bagian 1
Chronocidal

Jawaban:

14

Sledgehammer 0.5.1 / Sledgehammer 0.5.1, 10 byte

Program 1 (10 byte):

⣘⢷⠾⣃⢖⣎⢅⡨⠱⢳

Dekompresi ke dalam fungsi Bahasa Wolfram ini:

{Range[#1], "Ordinal"} &

Program 2 (7 byte):

⡾⡁⢚⣷⣬⠤⣾

Dekompresi ke dalam fungsi Bahasa Wolfram ini:

StringRiffle[IntegerName @@ #1, " "] &

Cobalah online!

lirtosiast
sumber
9

R (dengan englishpaket), 16 byte / 16 byte

 Bagian 1, 16 byte

f=function(n)1:n

Bagian 2, 16 byte

english::ordinal

Membutuhkan englishpaket (yang tidak diinstal pada TIO, sayangnya).

english::ordinal(f(22))output first second third fourth fifth sixth seventh eighth ninth tenth eleventh twelfth thirteenth fourteenth fifteenth sixteenth seventeenth eighteenth nineteenth twentieth twenty first twenty second.

Tentu saja, bagian 1 dapat dibuat lebih pendek (3 byte:) seq, tetapi itu akan bertentangan dengan batasan bahwa bagian 2 harus tidak lebih dari bagian 1.

Robin Ryder
sumber
@Giuseppe Sure. Meskipun saya berpendapat bahwa paket CRAN adalah bagian dari R, dan karenanya harus diizinkan selama kita menghitung karakter yang diperlukan untuk memuat dan memasangnya.
Robin Ryder
Saya percaya konsensus meta adalah bahwa menggunakan perpustakaan eksternal pada dasarnya dianggap sebagai "bahasa lain"; lihat misalnya posting ini yang tentang flag-flag compiler, tetapi memiliki catatan tentang library eksternal Python. Jawabannya di sini adalah instruktif dengan banyak contoh tapi sepertinya saya tidak dapat menggunakan fungsi pencarian pada meta untuk menemukan pernyataan definitif.
Giuseppe
@Giuseppe Lanjutan dalam obrolan: chat.stackexchange.com/transcript/message/51052875#51052875
Robin Ryder
8

Bahasa Wolfram (Mathematica) (kedua bagian), 18 byte / 15 byte

-5 / -1 terima kasih kepada lirtosiast

Bagian 1, 18 byte

Range@#|"Ordinal"&

Bagian 2, 15 byte

IntegerName@@#&

Cobalah online!

Dua fungsi yang dihasilkan melalui nilai balik.

attinat
sumber
2
Range@#|"Ordinal"&lebih pendek, dan membuat IntegerNamevektor pada argumen pertama. Saya pikir output yang dipisahkan oleh ruang mungkin diperlukan.
lirtosiast
4

Python 3 (bagian 1 & bagian 2)

Sayangnya Nodebox sangat bertele-tele ... tidak ada banyak ruang untuk bermain golf.

Bagian 1 76 byte

for  i  in  range  (  1 ,  int  (  input  (  ) ) + 1 ) : print ( i ,end=" ")

Bagian 2 (Menggunakan perpustakaan NodeBox ) 76 byte

import en.number as n
for i in input().split():print(n.ordinal(n.spoken(i)))
SEBUAH
sumber
5
Jawaban Anda harus valid; dalam hal ini, bagian 2 Anda lebih panjang dari bagian 1 Anda, yang tidak valid. Anda tidak dapat menandai jawaban sebagai "tidak bersaing" dan mengirimkan kiriman yang tidak valid; label "tidak bersaing" adalah label usang untuk tantangan yang disampaikan dalam bahasa atau versi bahasa yang mengundurkan tanggal tantangan, yang biasanya ditolak, tetapi diizinkan di bawah status "tidak bersaing" untuk pengiriman yang menarik.
HyperNeutrino
1
@HyperNeutrino Maaf, saya pikir aturan mengharuskan Bagian 1 lebih pendek dari Bagian 2. Saya menandai ini sebagai non-bersaing karena menggunakan perpustakaan untuk menyelesaikan masalah ini.
A
2
Secara teknis, menggunakan perpustakaan eksternal tampaknya baik-baik saja: codegolf.meta.stackexchange.com/q/188
Jono 2906
1
import en.number as nmenghemat empat byte di setiap bagian.
Khuldraeseth na'Barya
1

JavaScript (Node.js), 47 byte / 47 byte

Dua fungsi di lingkungan Node.js yang sama, dipanggil seperti g(f(n)). Menggunakan nomor-ke-kata paket npm .

Bagian 1, 47 byte (40 byte + 7 spasi)

n=>H=>{for(i=0;i<n;)console.log(H(++i))}       

Bagian 2, 47 byte

F=>F(require("number-to-words").toWordsOrdinal)

Cobalah di Runkit!


JavaScript (Node.js), 48 byte / 43 byte

Bagian 1, 48 byte

n=>[n,require("number-to-words").toWordsOrdinal]

Bagian 2, 43 byte

([n,F])=>{for(i=0;i<n;)console.log(F(++i))}

Cobalah di Runkit!

Darrylyeo
sumber
1

Perl 5.10 / Common Lisp, 34/26 bytes

Jadi, Common Lisp formatmemiliki ini sebagai bawaan, karena tentu saja bisa.

Program 1 (34 byte)

say"(format t\"~:r \"$_)"for 1..<>

Perl melakukan semua iterasi. Kode Common Lisp yang setara ( (dotimes(i(read)) ...)) lebih panjang dari Perl yang lebih golf ... for 1..<>. Perl menghasilkan banyak kode Common Lisp.

Program 2 (26 byte)

(loop(eval(read nil nil)))

Ini adalah REPL, minus P. Itu membaca input standar dan, well, jalankan itu. Tidak berakhir, tetapi aturan secara eksplisit mengatakan itu baik-baik saja.

Silvio Mayolo
sumber