เอาท์พุทตัวเลขฐาน quater- จินตภาพในไบนารี


17

เขียนฟังก์ชั่นหรือโปรแกรมที่แสดงผลฐาน Quater-จินตภาพที่แสดงเป็นเลขฐานสอง จำนวนฐานคือ 2 iโดยที่iคือรากที่สองของ -1 ดูจำนวนคอมเพล็กซ์สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับฉัน ตำแหน่งหลักแต่ละตำแหน่งสามารถไปได้ตั้งแต่ 0 ถึง 3 (ควอเทอร์นารี) เนื่องจากแต่ละส่วนจริงและจินตภาพจะมีขนาดใหญ่กว่าเดิมจริงและจินตภาพ -4 เท่า ตัวเลขสี่ในไบนารีมีดังนี้0: 00, 1: 01, และ2: 103: 11

รายละเอียดของตำแหน่งหลัก:

re   im       16 -8i  -4  2i   1 -0.5i, etc.
 4    0        1   0   3   0   0        (quaternary representation)
              01  00  11  00  00        (binary representation)

จำนวน100110000คือ 1x16 + 3x-4 = 16 + -12 = 4

re   im       16 -8i  -4  2i   1 -0.5i, etc.
 0    5        0   0   0   3   0   2    (quaternary representation)
              00  00  00  11  00 .10    (binary representation)

จำนวน1100.1เป็น 3x2 ฉัน + 2x-0.5 ฉัน = 6 ฉัน + - ฉัน = 5 ฉัน

รหัสของคุณจะเป็นตัวเลขคู่หนึ่งซึ่งอาจเป็นจำนวนเต็มหรือทศนิยมและจะส่งออกจำนวนเชิงซ้อนเป็นสตริงของเลขฐานสอง ตัวเลขแรกจะเป็นจริงจำนวนอินพุตที่สองจะเป็นค่าจินตภาพ จุดไบนารี่จะต้องถูกพิมพ์ถ้าตำแหน่งที่ไม่ใช่ศูนย์ต่ำกว่า 1 เท่านั้น (เช่นถ้าตำแหน่งใด ๆ สำหรับ -0.5 i , -0.25, 0.125 i , ฯลฯ มีตัวเลขที่ไม่ใช่ศูนย์) ไม่อนุญาตให้นำหน้าและต่อท้ายยกเว้นเลขศูนย์เดียวเดียวหน้าเลขฐานสองทันทีหากไม่มีตัวเลขอื่น ผลลัพธ์จะต้องไม่เริ่มต้นด้วยเลขฐานสอง (* 00.1- ผิด, 0.1- ถูกต้อง, * .1- ผิด, * 0.10- ผิด) คุณอาจสันนิษฐานว่าตัวเลขที่ป้อนเข้าทั้งหมดจะมีการแทนแบบไบนารีที่แน่นอน

หมายเลขทดสอบ:

re   im            output
 0    0                 0
 1    0                 1
 2    0                10
 3    0                11
 4    0         100110000
-1    0             10011
-2    0             10010
-3    0             10001
 0    1               100.1
 0    2               100
 0    3              1000.1
 0    4              1000
 0   -1                 0.1
 0   -2           1001100
 0   -3           1001100.1
 3    4              1011
 4    3         100111000.1
 6   -9         101110010.1
-6    9       10011100110.1
-9   -6           1110111
 0.5 14.125   10011001101.001001

หมายเหตุ: ผลลัพธ์ของค่าจำนวนเต็มทั้งหมดจะสิ้นสุดลง.1หากส่วนจินตภาพเป็นเลขคี่

รหัสมาตรฐานกอล์ฟ


4
นี่เป็นความท้าทายที่ดี แต่คำอธิบายอาจชัดเจนกว่านี้มาก คุณควรชี้แจงกระบวนการ: มันจะไปจากตัวเลขที่ซับซ้อนไปยังบรรณนิทัศน์สี่เป็นตัวแทนเพื่อไบนารี0 → 00, 1 → 01, 2 → 10, 3 → 11การทำแผนที่การเป็นตัวแทน
ลินน์

@Mauris ฉันได้ทำการแก้ไขทั้งหมดเพื่อแก้ไขความคิดเห็นของคุณ แจ้งให้เราทราบหากฉันสามารถปรับปรุงเพิ่มเติม
CJ Dennis

2
เกิดอะไรขึ้นถ้ามันเกิดขึ้นในไบนารี?
แม่ชีที่รั่วไหล

1
@LeakyNun มันบอกว่าถูกต้องในความท้าทาย: "คุณอาจคิดว่าตัวเลขอินพุตทั้งหมดจะมีการแทนไบนารีแบบ จำกัด "
Mego

คำตอบ:


2

JavaScript (ES6), 340 ไบต์

f=x=>[0,...x.toString(16)].reverse().map(d=>s=d<'.'?s:d<`0`?d+s.slice(0,-1):`${(c=+`0x${d}`+(c>>4)+m^m)>>2&3}${c&3}`+s,c=s='.',m=x<0?3:12)&&s
g=(s,t,n=s.indexOf`.`,m=t.indexOf`.`)=>n<m?g(0+s,t):n>m?g(s,0+t):t[s.length]?g(s+0,t):s.replace(/\d/g,(c,i)=>`${t[i]>>1}${t[i]&1}${c>>1}${c&1}`).replace(/^0+(\d)|\.?0*$/g,'$1')
(r,i)=>g(f(r),f(i/2))

f แปลงตัวเลขให้เป็นฐาน -4 (โดยมีส่วนท้าย.หากตัวเลขเป็นจำนวนเต็ม) gใช้-4หมายเลขฐานสองตัววางไว้ที่ปลายทั้งสองข้างให้มีความยาวและ.ตำแหน่งเท่ากันสับตัวเลขด้วยกันแปลงทุกอย่างจากฐานหนึ่ง4ไปยังอีกฐาน2จากนั้นก็ดึงแถบนำและศูนย์ต่อท้าย

คำอธิบาย: ในการแสดงจำนวนเชิงซ้อนที่กำหนดในฐานที่ดัดแปลง2iเราจำเป็นต้องแสดงส่วนจริงและครึ่งหนึ่งของส่วนที่ซับซ้อน (เช่นการหารส่วนจินตภาพด้วย2i) ในฐาน2i²(เช่น-4) สับเปลี่ยนตัวเลขเข้าด้วยกันแล้วแปลงจากฐาน42ไปยังฐาน เพื่อแสดงจำนวนจริงในฐาน-4เราเริ่มต้นด้วยการ4แปลงฐาน ตัวเลขสำรองมีเครื่องหมายที่ถูกต้อง (ในกรณีของจำนวนบวกตัวเลขเหล่านี้เป็นตัวเลขในตำแหน่งคู่ในกรณีที่มีจำนวนลบตัวเลขเหล่านี้เป็นตัวเลขในตำแหน่งคี่) แต่ตัวเลขที่เหลือนั้นมีเครื่องหมายผิดและ การแก้ไขจะต้องมีการใช้ ตัวอย่าง:

 0 -> 000 -> 000 (no correction needed)
 4 -> 010 -> 130 }
 8 -> 020 -> 120 } (correction includes carry)
12 -> 030 -> 110 }

ที่คุณสามารถดูการแก้ไขเป็นลบหลักเดิมพอควร8 8อย่างไรก็ตามการคำนวณที่สะดวกกว่าเล็กน้อยคือตัวเลขดั้งเดิมบวก 3, xor 3 (แน่นอนในเลขจำนวนเต็ม 32 บิตเราสามารถเขียน+0xCCCCCCCC^0xCCCCCCCCเพื่อแปลงจำนวนทั้งหมดในครั้งเดียว) ในที่สุดเมื่อการแก้ไขนำไปใช้กับตัวเลขอื่นมันเป็นการง่ายกว่าที่จะทำการแปลงเริ่มต้นไปที่ฐาน16ซึ่งจะเลือก4ตัวเลขฐานคู่โดยอัตโนมัติจากนั้นแก้ไขให้ถูกต้องโดยใช้ปัจจัยอย่างใดอย่างหนึ่ง3หรือ0xCตามความเหมาะสม มันก็ยังคงไม่สนใจ-สัญญาณ


0

Perl - 313 ไบต์

เนื่องจากไม่มีใครโพสต์คำตอบ แต่ฉันคิดว่าฉันเตะมันเอง

$r=$ARGV[0];$i=$ARGV[1]/2;$m=1;while($r!=int($r)||$i!=int($i)){$c++;$m*=-1;$i*=4;$r*=4}while($r||$i){$r-=($d[$n++]=$r/$m%4)*$m;$i-=($d[$n++]=$i/$m%4)*$m;$m*=-4}$_=join("",map({sprintf"%02b",$_}reverse splice(@d,$c*2)))||"0";@d and$_.=".".join("",map({sprintf"%02b",$_}reverse@d));s/^0+1/1/;s/(\.\d*1)0+$/$1/;print

ฉันแน่ใจว่ามีโอกาสอีกมากที่จะตีกอล์ฟต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.