pangrams ที่ระบุตนเอง


12

Pangrams

สุนัขจิ้งจอกสีน้ำตาลได้อย่างรวดเร็วเพิ่มขึ้นกว่าสุนัขขี้เกียจ.

นี่คือตัวอย่างของ pangram - ประโยคที่มีตัวอักษรทุกตัวอักษรอย่างน้อยหนึ่งครั้ง

ตนเองแจงแกรมเป็นประโยคที่ตอบสนองเกณฑ์ที่จะเป็นแกรมโดยการผลิตการวิเคราะห์ของการนับตัวอักษรของตัวเอง

ตัวอย่างของการบรรลุเป้าหมายนี้คือประโยค

pangram นี้มีสี่ As, หนึ่ง B, สอง Cs, หนึ่ง D, สามสิบ Es, หก Fs, ห้า Gs, เจ็ด Hs, สิบเอ็ดคือหนึ่ง J, หนึ่ง K, หนึ่ง K, สอง Ls, สอง Ms, สิบแปด Os, สอง Ps หนึ่ง Q ห้าอาร์เอสเอสยี่สิบเจ็ดแปดสิบสองเราสองคนเจ็ด Vs แปดแปดวินาทีสอง Xs สามปีและหนึ่ง Z


ความท้าทาย

ผลิตฟังก์ชั่นที่มีการป้อนข้อมูลเป็นสตริงที่นำไปสู่สินค้าคงคลังจดหมาย ในตัวอย่างอินพุตจะเป็น "pangram นี้มี" ปริมาณของตัวอักษรแต่ละตัวจะต้องอยู่ในรูปแบบที่เป็นลายลักษณ์อักษรและมีส่วนร่วมในการนับตัวอักษรที่ปรากฏ


กฎระเบียบ

  • คอมม่า Oxford เป็นตัวเลือก
  • ใช้เครื่องหมายแอมเปอร์แซนด์ก่อน Z (หรือสำหรับโหมดฮาร์ดรวมถึงความสามารถในการสลับระหว่าง "&" และ "และ" ในฟังก์ชัน)
  • จดหมายทุกฉบับจะนับรวมตัวอักษรทั้งหมด
  • ไม่มีตัวเลขที่ไม่เป็นลายลักษณ์อักษร
  • นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ
  • ใน Hono U r ของคู่แต่งงานสุดสัปดาห์นี้ตัวเลขที่จะเขียนในสมเด็จพระราชินีอังกฤษ เช่นnine hundred and ninety-nine Gsสำหรับ 999 ตัวอักษร G และnine hundred and nine Gs909
  • คำสั่งของขนาดจะถูกเขียนในแบบแผนการตั้งชื่อสั้นขนาดมาตรฐาน

กรณีขอบ

  • มีบางกรณีที่รหัสจะติดค้างในลูป - ตัวอย่างเช่นหากมีสองระบบปฏิบัติการรหัสจะเพิ่มจำนวนเป็นสามระบบปฏิบัติการซึ่งทำให้รหัสจะนับสองระบบปฏิบัติการอีกครั้ง หากคำนวณจดหมายทุกฉบับอื่น ๆ ก่อนที่จะกลับไปที่จะมาถึงนี้ไม่สามารถแก้ไขปัญหาให้พิจารณาการป้อนข้อมูลที่จะเริ่มต้นการเท็จและส่งออกfalse, nullหรือสตริงที่ว่างเปล่า
  • หากจดหมายมีการเกิดขึ้นมากกว่า 999 รายการข้อมูลนั้นควรถือว่าเป็นผู้เริ่มต้นที่ผิด

กรณีทดสอบ

  • "pangram นี้บรรจุ" ควรเอาท์พุทประโยคตัวอย่าง

8
ฉันยังไม่ได้ทดสอบ แต่ฉันค่อนข้างแน่ใจว่ามีบางกรณีที่คุณไม่สามารถสร้างโซลูชันที่ถูกต้องได้ผลลัพธ์ควรเป็นเช่นไร ตัวอย่างเช่นหากคุณมีสตริงที่มีสองo-s โดยไม่มีคำสำหรับการนับจากนั้นเมื่อคุณสะกดออกด้วยtwoสตริงทั้งหมดตอนนี้มีสามo-s หมายถึงคำที่ไม่ถูกต้องตอนนี้สลับมันทำให้มันไม่ถูกต้องอีกครั้ง ฯลฯ
นิตย์

2
หมายเลขเขียนที่ใหญ่ที่สุดที่โซลูชันให้การสนับสนุนคืออะไร หนึ่งร้อยพันหนึ่งล้าน?
Nit

7
คำถามแรกที่ดี! อย่างไรก็ตามฉันขอแนะนำเป็นการส่วนตัวเพื่อ จำกัด จำนวนตัวอักษรสูงสุดที่ 999 หรืออาจจะเพียงแค่ 99 นี่จะทำให้ความท้าทายในการเข้าถึงภาษาที่ไม่มีการฝังตัวของข้อความในขณะที่รักษาความสนุกทั้งหมด (นอกจากนี้อาจเป็นไปไม่ได้ที่จะทดสอบรายการที่มีตัวอักษรนับล้านในบางภาษา)
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

คำตอบ:


6

Python 2 , 615 ไบต์

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

ลองออนไลน์!

ฟังก์ชั่นfใช้pเป็นคำนำหน้าสตริง; และส่งคืน tuple ของจำนวนเต็มแทนจำนวนขั้นตอนที่ดำเนินการและ autogram

ฟังก์ชั่นgเข้ารหัสตัวเลข1<=n<=999เป็นสตริงภาษาอังกฤษ มันใช้เวลา 291 ไบต์ประมาณครึ่งหนึ่งของจำนวนไบต์ทั้งหมด รหัส

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

ถอดรหัสสตริงsเป็น (อาจ autogram-matic) tแกรม

เราวนไปตามกระบวนการโดยหวังว่าสถานการณ์ที่เราพบtเช่นนั้นtคือ autogram (เช่นที่ไหนt==s) หากเมื่อเราเข้าสู่วงเราจะสุ่มนับจำนวนตัวอักษรในลักษณะเฉพาะกิจอย่างสมบูรณ์

สำหรับค่าส่วนใหญ่ของpกระบวนการนี้จะหมดเวลากับ TIO โดยทั่วไปมีการตรวจสอบความเป็นไปได้หลายล้านรายการก่อนที่จะค้นหาชุดค่าผสม

ฉันไม่มีหลักฐานใด ๆ เลย แต่สิ่งที่ฉันคาดเดาก็คือ: (ก) นอกเหนือจากการค้นหากำลังดุร้ายอย่างละเอียดซึ่งคล้ายกับสิ่งที่Lee Sallows ผู้ริเริ่มอธิบายไว้ที่นี่และนำฮาร์ดแวร์มาใช้ (!) ดีเท่าที่คุณจะได้รับ; และ (b) จะไม่มีคำตอบสำหรับวลีเริ่มต้น (มากที่สุด) จำนวนpมาก


map(chr,range(65,91))บันทึกบางไบต์
ბიმო
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.