Kendinden numaralandırmalı pangramlar


12

Pangrams

Hızlı kahverengi tilki tembel köpeğin üstünden atladı.

Bu bir pangram örneğidir - alfabenin her harfini en az bir kez içeren bir cümledir.

Bir öz numaralandırma pangram kendi harf sayısı bir analizini üreterek bir pangram olacak kriterleri yerine getiren bir cümledir.

Bunu başarmanın bir örneği cümledir

Bu pangramda dört As, bir B, iki Cs, bir D, otuz Es, altı Fs, beş Gs, yedi Hs, onbir İş, bir J, bir K, iki Ls, iki Ms, onsekiz Ns, onbeş Os, iki Ps , bir Q, beş Rs, yirmi yedi Ss, on sekiz Ts, iki Us, yedi Vs, sekiz Ws, iki Xs, üç Ys ve bir Z.


Meydan okuma

Girdi harf envanterine giden dize olacak şekilde bir işlev üretin. Örnekte, girdi "Bu pangram içerir" olacaktır. Her bir harfin miktarı yazılı olarak olmalı ve görüntülenen harf sayısına katkıda bulunmalıdır.


kurallar

  • Oxford virgül isteğe bağlıdır
  • Z'den önce bir ve işareti kullanın (veya zor mod için işlevde "&" ve "ve" arasında geçiş yapma özelliğini dahil edin)
  • Her harf toplam harf sayımına göre sayılır
  • Yazılmamış numara yok
  • Bu bu nedenle bayttaki en kısa kod kazanır
  • Hono yılında u evli çiftin bu hafta sonu r, sayılar Kraliçe'nin İngilizce yazılmış edilecektir. örneğin nine hundred and ninety-nine GsG harfinin 999 tekrarında ve nine hundred and nine Gs909 için.
  • Büyüklük dereceleri standart kısa ölçekli adlandırma kuralında yazılmalıdır.

Edge kutuları

  • Kodun bir döngüde sıkışacağı bazı durumlar vardır - örneğin, iki Os varsa kod sayıyı üç Os'a yükseltir ve bu da kodun iki Os'u saymasına neden olur. Sorunu çözemezse buna geri gelmeden önce her harfi hesaplanırken, giriş sahte marş ve çıkış olarak kabul false, nullveya boş dize.
  • Bir harfin 999'dan fazla örneği varsa, giriş yanlış başlangıç ​​olarak kabul edilmelidir.

Test Durumları

  • "Bu pangram içerir" örnek cümlesini çıktılamalıdır

8
Test etmedim, ancak geçerli bir çözüm oluşturamayacağınız bazı durumlar olduğundan eminim, bu durumda çıktı ne olmalı? Örneğin o, sayı sözcüğü olmayan iki -s içeren bir dizeniz varsa , bununla hecelediğinizde two, tüm dize artık üç o-s'ye sahiptir, yani kelime artık yanlıştır; vs
Nit

2
Çözümün desteklemesi gereken en büyük yazılı sayı nedir? Yüz, bin, milyon?
Nit

7
Güzel bir ilk soru! Ancak, kişisel olarak maksimum harf sayısını 999 veya hatta sadece 99 ile sınırlandırmanızı öneririm. (Ayrıca, bazı dillerde milyonlarca harf içeren girişleri test etmek bile mümkün olmayabilir.)
Arnauld


1
Rob enjoys any sentence with two As, two Bs, two Cs, one D, thirty five Es, four Fs, three Gs, nine Hs, eight Is, two Js, one K, two Ls, one M, twenty two Ns, eighteen Os, one P, one Q, nine Rs, twenty three Ss, twenty three Ts, three Us, four Vs, eleven Ws, one X, seven Ys, & one Z.
Chas Brown

Yanıtlar:


6

Python 2,615 bayt

def g(n):S=str.split;D=S('z one two three four five six seven eight nine');K=' fif six seven eigh nine';n,m=n/100,n%100;e,d=m/10,m%10;return' '.join([D[n],'hundred']*(n>0)+([S('ten eleven twelve thir four'+K)[d]+'teen'*(d>2)]if 9<m<20else[S('twen thir for'+K)[e-2]+'ty']*(e>0)+[D[d]]*(d>0)))
from random import*
X='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def f(p):
 T=set();s='';i=0
 while 1:
	Q=s.upper().count;t=p+' '+', '.join(['& '*(c=='Z')+g(Q(c))+' '+c+'s'*(Q(c)!=1)for c in X])+'.'
        if s==t:return i,t
	if t in T:t=''.join(c*max(1,t.upper().count(c)+(randint(0,6)-3)*(random()<0.25))for c in X)
	T.add(t);s=t;i+=1

Çevrimiçi deneyin!

İşlev dize öneki olarak falır p; ve atılan adım sayısını ve otogramı temsil eden bir tamsayı demetini döndürür.

İşlev gbir sayıyı 1<=n<=999ingilizce dizesine kodlar ; toplam bayt sayısının yaklaşık yarısı olan 291 bayt alır. Kod

Q=s.upper().count
t=p+' '+', '.join(['& '*(c=='Z')+g(Q(c))+' '+c+'s'*(Q(c)!=1)for c in X])+'.'

dizgiyi s(potansiyel olarak otogram-matik) bir pangrama kodlar t.

Bir otogram (yani nerede ) tgibi bir şey bulduğumuz durumu umarak sürecin üzerinden tgeçiyoruz t==s. Eğer bir döngü içine almak, biz rastgele tamamen geçici bir şekilde harflerin sayılarını dürtmek.

Değerlerinin çoğu için p, bu işlem TIO'da zaman aşımına uğrar. Tipik olarak, bir 'kazanan' kombinasyon bulmadan önce milyonlarca olasılık incelenir.

Hiç kanıtım yok, ama tahminim: (a) Lee Sallows'un burada tarif ettiği ve donanımda uyguladığı (!) Gibi kapsamlı bir kaba kuvvet aramasının yanı sıra , bu tür rastgele sezgisel alabileceğiniz kadar iyi; ve (b) birçok başlangıç ​​ifadesi için çözüm bulunmayacaktır p.


map(chr,range(65,91))bazı baytlar kaydeder.
ბიმო
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.