> 1
> Input
>> 1…2
>> L!
>> L+1
>> L∣2
>> L⋅R
>> 2%L
>> Each 4 3
>> Each 5 9
>> Each 6 10
>> Each 7 11 3
> {0}
>> 12∖13
>> Each 8 14
>> L≠1
>> Each 16 15
>> Each 7 17 15
>> 18∖13
>> [19]
>> 2’
>> 21⋅20
>> Output 22
ลองออนไลน์!
ส่งคืนรายการว่างสำหรับช่วงเวลาที่ไม่ใช่ Pillai และรายการที่ไม่ว่างเปล่าเป็นอย่างอื่น
มันทำงานอย่างไร
เสียงกระซิบถูกออกแบบมาเพื่อจัดการกับตัวเลขจริง / ซับซ้อนโดยมีคำสั่งอาร์เรย์เพิ่มขึ้นเล็กน้อยเพื่อการวัดที่ดีดังนั้นการใช้ซ้ำEach
เพื่อย้ำไปยังรายการที่สร้างขึ้น
พื้นหลังเล็กน้อยบน Whispers:
เสียงกระซิบแตกต่างกันเล็กน้อยในเส้นทางการดำเนินการกับภาษาอื่นส่วนใหญ่ แทนที่จะทำงานผ่านแต่ละบรรทัดเป็นเส้นตรงแยกเฉพาะที่ conditionals, Whispers เริ่มต้นที่บรรทัดสุดท้ายในไฟล์ที่ขึ้นต้นด้วย>
(กฎมีความซับซ้อนมากกว่านั้นเล็กน้อย แต่นั่นคือทั้งหมดที่เราต้องรู้ตอนนี้) และความหมายของตัวเลข แตกต่างกันขึ้นอยู่กับว่าเส้นเริ่มต้นด้วยหรือ>
>>
หากบรรทัดเริ่มต้นด้วย>
เช่น> 1
หรือ> Input
นี่คือเส้นคงที่ - มันจะส่งกลับค่าเดียวกันทุกครั้ง ที่นี่ตัวเลขแสดงถึงรูปแบบตัวเลขดังนั้นบรรทัดแรกจะส่งคืน1เสมอเมื่อถูกเรียก
หากบรรทัดนั้นขึ้นต้นด้วย>>
ตัวเลขจะถือว่าเป็นการอ้างอิงไปยังบรรทัดอื่น ๆ เช่นการเรียกใช้ฟังก์ชันหากคุณต้องการ ตัวอย่างเช่นในบรรทัด>> 1…2
สิ่งนี้ไม่ได้ดำเนินการ…
คำสั่งกับจำนวนเต็ม1และ2แต่จะใช้กับค่าที่ส่งคืนจากบรรทัด1และ 2 ในกรณีนี้ค่าเหล่านั้นคือจำนวนเต็ม1และจำนวนเต็มใด ๆ ที่เราส่งผ่านเป็นอินพุต
สำหรับตัวอย่างนี้ลองพิจารณาอินพุตของ 23 เก็บไว้ในใจว่าเนื่องจากกระซิบ preprocessing, บรรทัดที่สอง ( > Input
) > 23
จะถูกแปลงเป็น
คำสั่งแรกของเราอยู่ในสายที่ >> 1…2
3: …
เป็นช่วง dyadic ในกรณีนี้จาก1ที่จะ23ยอม{1, 2, ... 22, 23} ต่อไปเราข้ามไปที่บรรทัดที่9ถึง12 :
>> Each 4 3
>> Each 5 9
>> Each 6 10
>> Each 7 11 3
ที่นี่เรามีEach
คำสั่งที่สอดคล้องกัน 4 รายการซึ่งแต่ละประโยคจะซ้ำกับผลลัพธ์ก่อนหน้าโดยจะทำการจับคู่คำสั่ง 4 กับอาร์เรย์ในบรรทัดที่3 : ช่วง สามคำสั่งแรกคือแผนที่ง่าย ๆ ที่มีบรรทัดที่4 , 5และ 6 :
>> L!
>> L+1
>> L∣2
ทั้งสามคำสั่งเหนือจำนวนเต็มnให้ผลตอบแทน(n! +1) ∣xโดยที่! หมายถึงแฟคทอเรียล , ∣หมายถึงการหารและxคืออินพุต ในที่สุดบรรทัด 12มีโครงสร้างของแผนที่แบบ dyadic
แผนที่ dyadicโครงสร้างต้องใช้เวลาสามจำนวนเต็ม: เป้าหมายด้านซ้ายและขวาของแต่ละดัชนีจะสายอื่น ๆ ที่นี่เราซิปซ้ายและขวาเพื่อสร้างรายการคู่จากนั้นลดแต่ละคู่โดยคำสั่ง dyadic (เป้าหมาย) ที่นี่หากอินพุตคือ23รายการจะเป็น{1, 2, ... 22, 23}และ {0, 0, ... 1, 0}และคำสั่งคือ
>> L⋅R
ซึ่งคูณอาร์กิวเมนต์ซ้ายทางขวา สิ่งนี้สร้างอาร์เรย์ของจำนวนเต็มโดยมี0ที่ดัชนีของจำนวนเต็มซึ่งแฟคทอเรียลที่เพิ่มขึ้นไม่สามารถหารด้วยอินพุทและดัชนีดั้งเดิมที่พวกมันอยู่ เราจะเรียกอาร์เรย์นี้ ต่อไปเราจะลบ0วินาทีออกจากAโดยการตั้งค่าความแตกต่างระหว่าง{0}และ A :
> {0}
>> 12∖13
ด้วยการป้อนข้อมูลตัวอย่างของเรานี้ผลิตชุด{14, 18, 22} ต่อไปเราจะนำส่วนที่เหลือของอินพุตที่ถูกหารด้วยแต่ละค่าในชุดและตรวจสอบว่าส่วนที่เหลือนั้นไม่เท่ากับ 1 :
>> 2%L
>> Each 8 14
>> L≠1
>> Each 16 15
อีกครั้งเรามีรายการเป็น0หรือ1วินาทีและต้องการลบ0วินาทีและแทนที่1วินาทีด้วยค่าดั้งเดิม ที่นี่เราทำซ้ำรหัสที่เราเห็นข้างต้น แต่มีมากกว่า>> 18∖13
12
ในที่สุดเราก็ส่งชุดผลลัพธ์นี้ไปยังรายการสำหรับการตรวจสอบขั้นสุดท้าย แต่น่าเสียดายที่รหัสของเรายังต้องปฏิเสธตัวเลขประกอบที่บรรลุเกณฑ์ทั้งหมดเหล่านี้เช่น437 ดังนั้นเราจึงเพิ่มการตรวจสอบครั้งสุดท้ายของเราคูณรายการสุดท้ายของเราด้วยความเป็นอันดับหนึ่งของอินพุต เนื่องจากการคูณ Python ทำงานกับรายการ0แทนที่ด้วยรายการที่ว่างเปล่าและ1ไม่มีผล ดังนั้นเราคำนวณความเป็นอันดับหนึ่งของอินพุตคูณด้วยรายการ ms สำหรับอินพุตและ ouput ผลลัพธ์สุดท้าย:
>> 2’
>> 21⋅20
>> Output 22