İki bağlantılı program kullanarak n'ye kadar sıra sayıları


19

... Sıralı sayılar (veya sıralı sayılar) sıralı bir sırada konumu veya sıralamayı temsil eden kelimelerdir.

resim açıklamasını buraya girin

Gönderen Wikipedia .

Göreviniz, sıralı dizinin ilkinden başlayarak çıktısını almak için 2 ayrı program (2 farklı dilden yapılabilir) kullanmaktır nth. Bunun secondyerine tam kelimeyi çıkartabilirsiniz 2nd.

Sıra sayılarının zorluğu, özellikle bu girişte daha önce gündeme getirildi . Bu meydan okumada ordinaller sadece aşağıda ayrıntıları verilen benzersiz koşulları kolaylaştırmak için bir araçtır.


Bölüm 1

nGirdiğinde herhangi bir çıktı vermesi gereken bir program yapmalısınız .
n999'dan büyük olmayan her zaman pozitif, sıfır olmayan bir tam sayı olacaktır.

Geçerli çıktı aşağıdakileri içerir ancak bunlarla sınırlı değildir :

  • stdout/ stderr/ Etc'ye herhangi bir çıktı
  • Dosya / klasör / vb. Oluşturma
  • Grafiksel bir arayüz veya her türlü görüntü

Her şey olur.


Bölüm 2

1'den (birinci) başlayarak, 1. nbölümde ayrıştırılmış olana kadar bir dizi sıra sayı çıktısı almak için bölüm 1'in çıktısını kullanan bir program yapmalısınız .

Genel Şartlar:

  • Kısım 2 için toplam baytlar, kısım 1 için toplam baytları geçmemelidir (eşit veya daha az).

Çıktı koşulları:

  • Büyük küçük harf duyarlı değil.
  • Çıktıda yalnızca sıra dizisi (yalnızca aZ karakterleri) ve boşluk (satır sonlarına izin verilir) bulunmalıdır.
  • Yürütme sırasında veya sonrasında görünür olduğu sürece herhangi bir kaynağa verilebilir.
  • Programın çıktısı doğru olduğu sürece sonlanması gerekmez.
  • Çıktının herhangi bir dilbilgisi olması gerekmez, ancak isteğe bağlı olarak bunu içerebilir (tire, virgül, "ands", vb.). nine hundred ninety ninthkadar kabul edilebilir nine hundred and ninety-ninth.

Örnek Çıktı

n8 nerede

FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH EIGHTH

puanlama

Kazanma koşulları hiyerarşisi:

  1. Bölüm 1'deki en düşük bayt sayısı
  2. Bölüm 2'deki en düşük bayt sayısı
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

5
Bölüm 1'deki nokta nedir (olduğu gibi, bu zorluk bölüm 2 için en kısa sunumda neden puanlanamadı?) Ayrıca, ikinci puanlama örneğinizde, ilk giriş geçersiz değil (bölüm 2> bölüm 1) ve eğer değilse, ikinci girişi yenmez mi? Ayrıca, ordinalleri tanımlamak için resmi bir kural kümesine en azından bir bağlantıya sahip olmanızı öneririm; örneğin, 111 one hundred and eleventhya da one hundred eleventh?
HyperNeutrino

3
@HyperNeutrino Bence fikir, golf sırasında işi olabildiğince eşit bir şekilde bölmeye çalışmaktır - eğer p1 çıkışı [30, 'second']için 32yaparsam, p2 çıktısı varsa bunu yapmak için daha az işi olur 32.
Jonathan Allan

4
Belki aptalca bir şey eksik ama puanlama örneklerindeki son iki girişten, giriş 1 neden kazanmıyor? bölüm 1 aynı bayt içerir, bölüm 2 her ikisi için bölüm 1'den daha az veya ona eşittir ve giriş 1 bölüm 2 giriş 2 bölüm 2'den daha az bayt içerir
Patrick Roberts

@PatrickRoberts Bölüm 2 , Bölüm 1'e eşit veya daha az bayt içermesi gerektiğinden, Bölüm 1 21 bayt, ancak Bölüm 2 33 bayt olduğundan Giriş # 1 diskalifiye edilir. Ne yazık ki, bu bilgi gizlenmiştir ve şu anda kazanma koşullarında açıkça belirtilmemiştir.
Kronokidal

@PatrickRoberts Bu önemlidir, çünkü aksi takdirde Bölüm 1
Kronokidal

Yanıtlar:


14

Balyoz 0.5.1 / Balyoz 0.5.1, 10 bayt

Program 1 (10 bayt):

⣘⢷⠾⣃⢖⣎⢅⡨⠱⢳

Bu Wolfram Dili işlevine açılır:

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

Program 2 (7 bayt):

⡾⡁⢚⣷⣬⠤⣾

Bu Wolfram Dili işlevine açılır:

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

Çevrimiçi deneyin!


9

R ( englishpaketli), 16 bayt / 16 bayt

 Bölüm 1, 16 bayt

f=function(n)1:n

Bölüm 2, 16 bayt

english::ordinal

englishPaketi gerektirir (maalesef TIO'da yüklü değildir).

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

Tabii ki, bölüm 1 çok daha kısa yapılabilir (3 bayt:) seq, ancak bu bölüm 2'nin bölüm 1'den daha uzun olmaması gerektiği kısıtlamasına aykırıdır.


@Giuseppe Sure. Her ne kadar CRAN paketlerinin R'nin bir parçası olduğunu iddia etsem de, bunları yüklemek ve eklemek için gerekli karakterleri saydığımız sürece izin verilmelidir.
Robin Ryder

Meta konsensüsün, harici bir kütüphane kullanmanın esas olarak "başka bir dil" olarak sayılması olduğuna inanıyorum; Örneğin bkz Bu yayını derleyici bayrakları hakkında ama Python harici kütüphaneleri hakkında bir not vardır. Burada cevap birçok örnek ile öğretici ama kesin ifadeyi bulmak için meta arama işlevini kullanmak gibi görünmüyor.
Giuseppe


8

Wolfram Dili (Mathematica) (her iki bölüm), 18 bayt / 15 bayt

Lirtosiast sayesinde -5 / -1

Bölüm 1, 18 bayt

Range@#|"Ordinal"&

Bölüm 2, 15 bayt

IntegerName@@#&

Çevrimiçi deneyin!

Dönüş değeri üzerinden çıkış yapan iki fonksiyon.


2
Range@#|"Ordinal"&daha kısadır ve IntegerNameilk argüman üzerinde vektörleşir. Bence boşlukla ayrılmış çıktılar gerekli olabilir.
lirtosiast

4

Python 3 (bölüm 1 ve bölüm 2)

Ne yazık ki Nodebox çok garip ... golf için fazla yer yok.

Bölüm 1 76 bayt

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

Bölüm 2 ( NodeBox kütüphanesini kullanır ) 76 bayt

import en.number as n
for i in input().split():print(n.ordinal(n.spoken(i)))

5
Cevabınız geçerli olmalı; bu durumda, 2. bölümünüz geçersiz olan 1. bölümünüzden daha uzundur. Bir yanıtı "rakip olmayan" olarak işaretleyemez ve geçersiz bir başvuru gönderemezsiniz; "rakip olmayan" etiketi, normalde izin verilmeyen ancak yine de ilginç gönderimler için "rakip olmayan" statüsünde izin verilen, meydan okumayı sonlandıran dillerde veya dil sürümlerinde gönderilen ve kaldırılan etiketler için kullanımdan kaldırılmış bir etikettir.
HyperNeutrino

1
@HyperNeutrino Üzgünüz, Kurallar Bölüm 1 Bölüm 2'den daha kısa olması gerektiğini düşündüm. Bu sorunu çözmek için bir kütüphane kullandığı için bunu rakip olmayan olarak işaretledim.
A̲̲

2
Teknik olarak, harici kütüphaneleri kullanmak iyi görünüyor: codegolf.meta.stackexchange.com/q/188
Jono 2906

1
import en.number as nher bölümde size dört bayt kazandırır.
Khuldraeseth na'Barya

1

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

Aynı Node.js ortamında iki işlev gibi çağrılır g(f(n)). Npm paketini kelimelere kullanır .

Bölüm 1, 47 bayt (40 bayt + 7 boşluk)

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

Bölüm 2, 47 bayt

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

Runkit üzerinde deneyin!


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

Bölüm 1, 48 bayt

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

Bölüm 2, 43 bayt

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

Runkit üzerinde deneyin!


1

Perl 5.10 / Ortak Lisp, 34/26 bayt

Yani, Common Lisp formatbunu yerleşik olarak var, çünkü tabii ki öyle.

Program 1 (34 bayt)

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

Perl tüm yinelemeyi yapar. Eşdeğer Ortak Lisp kodu ( (dotimes(i(read)) ...)), daha golfçü Perl'den daha uzundur ... for 1..<>. Perl, bir grup Common Lisp kodu verir.

Program 2 (26 bayt)

(loop(eval(read nil nil)))

Bu bir REPL, eksi P'dir. Standart girişi okur ve bunu yürütür. Sonlandırılmaz, ancak kurallar açıkça bunun iyi olduğunu söylüyor.

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.