นับจำนวนคนในจำนวนเต็ม 16 บิตที่ไม่ได้ลงนาม


24

เขียนคำสั่งที่จะนับจำนวนของคำในจำนวนเต็มสิบหกบิตที่ไม่ได้ลงนาม

ตัวอย่างเช่นหากอินพุตคือ1337ผลลัพธ์จะเป็น6เพราะ1337เลขฐานสิบหกบิตเท่ากับ0000010100111001ซึ่งประกอบด้วยหกรายการ


2
เคล็ดลับ: เช่นเดียวกับบางส่วนของตัวเลขในตัวเลขที่สอดคล้องกับหมายเลข mod 9 บางบิตเท่ากับจำนวน mod 1
PyRulez

8
@PyRulez จำนวนใด ๆ เป็นศูนย์แบบโมดูโล 1
โทมัส

1
สวัสดีคุณได้เลือกคำตอบที่ผิดเป็นคำตอบที่ยอมรับ (โดยค่าเริ่มต้นของตรรกะเบรกเกอร์โพสต์แรกสุด)
เครื่องมือเพิ่มประสิทธิภาพ

4
@ โทมัสฉันไม่เคยบอกว่ามันเป็นคำแนะนำที่เป็นประโยชน์
PyRulez

2
ทำไมคำถามนี้ดึงดูดผู้โหวตอย่างใกล้ชิดหลังจากคำตอบส่วนใหญ่ถูกโพสต์ ปิดผู้ลงคะแนนโปรดระบุเหตุผลของคุณในความคิดเห็น หากเป็นการยอมรับคำตอบ 4 ไบต์ของ es1024 (ฉลาดมาก) ซึ่งไม่สอดคล้องกับช่องโหว่มาตรฐาน (เพราะใช้ตัวบิวอิน) โปรดระบุว่านี่คือเหตุผล มิฉะนั้นมันคืออะไร
เลเวลริเวอร์เซนต์

คำตอบ:


37

รหัสเครื่อง 80386 ขนาด 4 ไบต์

F3 0F B8 C1

ซึ่งใช้จำนวนเต็มในcxและเอาท์พุทนับในaxและเทียบเท่ากับ:

popcnt ax, cx     ; F3 0F B8 C1

และนี่คือวิธีแก้ปัญหา11 10ไบต์ที่ไม่ได้ใช้ POPCNT:

31 C0 D1 E9 10 E0 85 C9 75 F8

ซึ่งเทียบเท่ากับ:

xor ax, ax        ; 31 C0   Set ax to 0
shr cx, 1         ; D1 E9   Shift cx to the right by 1 (cx >> 1)
adc al, ah        ; 10 E0   al += (ah = 0) + (cf = rightmost bit before shifting)
test cx, cx       ; 85 C9   Check if cx == 0
jnz $-6           ; 75 F8   Jump up to shr cx, 1 if not

นี่เป็นโหมด 32- บิตหรือ 16- บิต (ทั้งจริงหรือได้รับการป้องกัน)?
FUZxxl

2
@FUZxxl แอสเซมบลีที่จัดเตรียมไว้มีไว้สำหรับ 16 บิต แต่การแทนที่axและcxด้วยeaxและecxเปลี่ยนเป็น 32 บิต bytecode นั้นเหมือนกันสำหรับทั้งสอง
es1024

1
@ es1024 โค้ดไบต์เหมือนกันถ้าคอมไพล์ในโหมด 16 บิตและเวอร์ชัน 32 บิตในโหมด 32 บิต
โคลจอห์นสัน

2
ไม่ได้บรรจุอยู่ภายในและทำให้การทำผิดพลาดของช่องโหว่มาตรฐานหรือไม่ ยังคงเครดิตสำหรับโซลูชันที่สองแม้ว่า
เล่นแร่แปรธาตุ

5
เมื่อคุณอ้างสิทธิ์ความยาวของรหัสเครื่องชื่อนี้ไม่ควรเป็น "80386 รหัสเครื่อง" ไม่ใช่ "80386 Assembler"
Kevin Reid

14

Python 2, 17 ไบต์

bin(s).count('1')

binในตัวผลตอบแทนจำนวนเต็มแปลงเป็นสตริงไบนารี จากนั้นเราจะนับ1ตัวเลข:

>>> s=1337
>>> bin(s)
'0b10100111001'
>>> bin(s).count('1')
6

11

J (5 ตัวอักษร)

J ไม่มีประเภทที่ชัดเจน นี่เป็นสิ่งที่ถูกต้องสำหรับจำนวนเต็มทั้งหมด

+/@#:
  • +/ ผลรวม
  • @ ของ
  • #: การเป็นตัวแทนฐานสอง

11

C, 21

for(n=0;x;n++)x&=x-1;

คุณกล่าวว่า "เขียนคำสั่งบาง" (ไม่ใช่ "ฟังก์ชั่น") ดังนั้นฉันได้สันนิษฐานว่าจำนวนจะจำหน่ายในxและจำนวน 1 nจะถูกส่งกลับใน หากฉันไม่ต้องเริ่มต้นnฉันสามารถบันทึก 3 ไบต์

นี่คือการปรับตัวของนิพจน์ที่มีชื่อเสียงx&x-1สำหรับการทดสอบว่าบางสิ่งเป็นพลังของ 2 (เท็จถ้าเป็นจริงถ้าไม่ใช่)

ที่นี่มีการใช้งานกับหมายเลข 1337 จากคำถาม โปรดทราบว่าการลบ 1 จะพลิก 1 บิตที่สำคัญน้อยที่สุดและศูนย์ทั้งหมดไปทางขวา

0000010100111001 & 0000010100111000 = 0000010100111000
0000010100111000 & 0000010100110111 = 0000010100110000
0000010100110000 & 0000010100101111 = 0000010100100000
0000010100100000 & 0000010100011111 = 0000010100000000
0000010100000000 & 0000010011111111 = 0000010000000000
0000010000000000 & 0000001111111111 = 0000000000000000

แก้ไข: เพื่อความสมบูรณ์นี่เป็นอัลกอริธึมไร้เดียงสาซึ่งมีความยาวหนึ่งไบต์ (และค่อนข้างช้าลงเล็กน้อย)

for(n=0;x;x/=2)n+=x&1;


1
@ edc65 ดังนั้นเมื่อปรากฎออกมาฉันได้สร้างล้อใหม่ อย่างน้อยผมบันทึกไว้ 2 {}ไบต์โดยถนัด มันเป็นงานง่าย ๆ ที่ฉันไม่ควรแปลกใจที่ใครบางคนคิดมาแล้ว
เลเวลริเวอร์เซนต์

"ตีพิมพ์ครั้งแรกในปี 1960"น่าประทับใจ
mbomb007

การแก้ไขอัลกอริธึมไร้เดียงสา:for(n=0;x;x/=2)n+=x&1;
Helios

1
@nmxprime OP ขอ int ที่ไม่ได้ลงนาม สำหรับ -7 = 11111111 11111111 11111111 11111001 บนคอมไพเลอร์ 32 บิตของฉันฉันได้รับ 30 สำหรับอัลกอริทึมที่รวดเร็วซึ่งถูกต้อง สำหรับอัลกอริทึมไร้เดียงสามันวนซ้ำผ่าน -7, -7 / 2 = -3, -3 / 2 = -1, -1 / 2 = 0 ที่ให้คำตอบที่ไม่ถูกต้อง การเปลี่ยน x / = 2 เป็น x >> = 1 อาจให้คำตอบที่ถูกต้องสำหรับคอมไพเลอร์บางตัว แต่ C นั้นไม่ได้นิยามว่าจะเลื่อน 1 หรือ 0 ไปเป็นบิตว่างสำหรับ >> สำหรับจำนวนลบ คอมไพเลอร์ที่เปลี่ยน 1 ในจะเข้าสู่วงวนไม่สิ้นสุด วิธีแก้ปัญหาคือกำหนด x เป็น int ที่ไม่ได้ลงนาม จากนั้นโหลด x = -7 (1 << 32) -7 = 4294967289 เป็น x
เลเวลริเวอร์เซนต์

5

เยลลี่ไม่ใช่การแข่งขัน

คำตอบนี้ไม่ใช่การแข่งขันเนื่องจากภาษาถูกสร้างขึ้นหลังจากการโพสต์ความท้าทาย

2 ไบต์:

BS

Jelly เป็นภาษาใหม่ที่เขียนโดย @Dennis พร้อมกับไวยากรณ์คล้าย J

         implicit: function of command-line arguments
B        Binary digits as list
 S       Sum

ลองมันนี่


4

Pyth, 4 ไบต์

sjQ2

โปรแกรมใช้หมายเลขที่จะพบน้ำหนักการขัดขวางบน STDIN


4

Julia, 29 27 19 ไบต์

n->sum(digits(n,2))

nนี้จะสร้างฟังก์ชั่นที่ไม่ระบุชื่อที่ยอมรับอาร์กิวเมนต์เดียว ที่จะใช้มันกำหนดให้สิ่งที่ชอบและเรียกมันเหมือนf=n->...f(1337)

digits()ฟังก์ชั่นที่เรียกว่าเมื่อมี 2 ข้อโต้แย้งกลับอาร์เรย์ของตัวเลขของการป้อนข้อมูลในฐานที่กำหนด ดังนั้นจะส่งกลับตัวเลขไบนารีของdigits(n, 2) ใช้ผลรวมของอาร์เรย์และคุณมีจำนวนคนที่อยู่ในฐานเป็นตัวแทนของnn


สิ่งนี้อาจสั้นกว่านี้มาก: Julia มีฟังก์ชั่นcount_ones
Andrew พูดว่า Reinstate Monica

@AndrewPiliser: ขอขอบคุณสำหรับข้อเสนอแนะ แต่ฟังก์ชั่นในตัวที่ทำงานให้สำเร็จได้รับการพิจารณาว่าเป็นช่องโหว่มาตรฐานและขมวดคิ้วเมื่อไม่ได้รับอนุญาตอย่างชัดเจน
Alex A.


3

โจ 4 ไบต์

/+Ba

นี่คือฟังก์ชั่นที่ไม่ระบุชื่อ Baให้การแทนเลขฐานสองของจำนวนและ/+ผลรวม

   (/+Ba)13
3
   (/+Ba)500
6

3

R, 24 ไบต์

sum(intToBits(scan())>0)

scan() อ่านอินพุตจาก stdin

intToBits()รับจำนวนเต็มและคืนค่าเวกเตอร์ประเภทrawที่มีเลขศูนย์และอันของการแทนค่าฐานสองของอินพุต

intToBits(scan())>0ส่งกลับเวกเตอร์ตรรกะที่แต่ละองค์ประกอบคือTRUEถ้าสอดคล้องเวกเตอร์ไบนารี 1 (ตั้งแต่องค์ประกอบทั้งหมดที่มี 0 หรือ 1 และ 1> 0) FALSEมิฉะนั้น

ใน R คุณสามารถหาผลรวมของเวกเตอร์เชิงตรรกะเพื่อให้ได้จำนวนTRUEองค์ประกอบดังนั้นการรวมเวกเตอร์ของตรรกะดังกล่าวข้างต้นทำให้เราได้รับสิ่งที่เราต้องการ

โปรดทราบว่าsum()ไม่สามารถจัดการrawอินพุตโดยตรงดังนั้นวิธีแก้ปัญหาโดยใช้โลจิคัล


จะไม่sum(intToBits(scan()))เหมือนเดิมหรือ
seequ

@Sieg: แต่น่าเสียดายที่ไม่มีตั้งแต่sum()ไม่สามารถใช้ใส่ของชนิดซึ่งเป็นสิ่งที่กลับมาจากraw intToBits()
Alex A.

นั่นแปลกสำหรับฉันจริงๆ
seequ

1
@ ซิก: ใช่มันก็แปลกสำหรับฉันเช่นกัน โอ้ดี หากหมูทุกตัวสมบูรณ์แบบเราจะไม่มีฮอทด็อก
Alex A.

และนั่นเป็นคำอุปมาที่แปลกประหลาดที่สุดเท่าที่เคยมีมา
seequ

3

ทับทิมขนาด 18 ไบต์

n.to_s(2).count'1'


1
n.to_s(2).count ?1ยังใช้งานได้ แต่มีความยาวเท่ากัน
Piccolo

รุ่น 2019: n.digits (2) .sum / 15 ไบต์
GB

3

Forth, 48 49 ไบต์

: c ?dup if dup 1- and recurse 1+ then ;
0 1337 c

หากจำเป็นต้องใช้ฟังก์ชันจริงบรรทัดที่สองจะกลายเป็น

: c 0 swap c ;

และคุณเรียกมันว่า "1337 c" คำที่ใช้ในการควบคุมอย่างละเอียดของ Forth ทำให้สิ่งนี้เป็นคำที่ยาก (อันที่จริงแล้ว

แก้ไข: รุ่นก่อนหน้าของฉันจัดการตัวเลขลบไม่ถูกต้อง



3

ES6 (34 22 21 ไบต์):

นี่เป็นฟังก์ชั่นแบบเรียกซ้ำง่าย ๆ ที่สามารถย่อให้สั้นได้อีกเล็กน้อย ใช้เวลาเพียงเล็กน้อยและรันตัวเองอีกครั้ง:

B=n=>n&&(1&n)+B(n>>1)

ลองใช้กับhttp://www.es6fiddle.net/imt5ilve/ (คุณต้องใช้varเพราะ'use strict';)

ฉันไม่อยากจะเชื่อเลยว่าฉันถูกตีปลา !!!

อันเก่า:

n=>n.toString(2).split(1).length-1

ES5 (39 ไบต์):

ทั้งสองฟังก์ชั่นสามารถปรับใช้กับ ES5 ได้อย่างง่ายดาย:

function B(n){return n?(1&n)+B(n>>1):0}

//ungolfed:

function B(number)
{
    if( number > 0 )
    {
        //arguments.callee points to the function itself
        return (number & 1) + arguments.callee( number >> 1 );
    }
    else
    {
        return 0;
    }
}

อันเก่า:

function(n){return n.toString(2).split(1).length-1}

@ user1455003ให้ความคิดที่ยอดเยี่ยมแก่ฉันนั่นคือ 'จุดประกาย ' ที่เล็กที่สุด:

function B(n,x){for(x=0;n;n>>=1)x+=n&1;return x}

ฉันได้ดัดแปลงเป็น ES6 และทำให้มันซ้ำเพื่อให้สั้นลงมาก!


1
นี่คือฟังก์ชัน javascript 'reguar' ที่เล็กลง ฟังก์ชัน B (n, x) {สำหรับ (x = 0; n; n >> = 1) x + = n & 1; return x}
wolfhammer

@ user1455003 ขอบคุณมากหรือคำแนะนำของคุณ! ฉันใช้มันและดัดแปลงเป็น ES6 และย่อให้สั้นลงมาก ขอขอบคุณ!
Ismael Miguel

ยินดีต้อนรับ! ฉันชอบสิ่งที่คุณทำกับมัน ด้วยจาวาสคริปต์ปกติเรียกซ้ำได้ถึง 39! function B (n) {return n? (1 & n) + B (n >> 1): 0}
wolfhammer

@ user1455003 หากคุณต้องการคุณสามารถแก้ไขส่วน ES5 และเพิ่มจำนวนไบต์เป็นเวอร์ชัน golfed (ฉันคิดว่าคุณชนะชื่อเสียงด้วยการแก้ไข)
Ismael Miguel

@ user81655 ว้าว! มันได้ผล!!! ขอบคุณมาก! ฉันรู้ว่าสิ่งนี้อาจทำให้สั้นลงได้
อิสมาเอลมิเกล

2

> <> (ปลา) , 24 ไบต์ + 2 = 26

0$11.>~n;
2,:?!^:2%:{+}-

โปรแกรมเพิ่งทำ mod 2 ซ้ำแล้วลบและหารจนกว่าจำนวนอินพุตจะกลายเป็นศูนย์จากนั้นพิมพ์ผลรวมของ mod 2s

ทดสอบกับ-vธงเช่น

py -3 fish.py ones.fish -v 1337

สำหรับจำนวนเต็ม 16 บิตรหัสอินพุต codepoint อาจไม่เพียงพอ ( -vรุ่นธงยังคงใช้งานได้)
Random

@randomra ประณามคุณพูดถูก ในขณะที่อินพุต Unicode ใช้งานได้ 16 บิตเป็นเพียงคำสั่งไม่กี่คำที่อยู่นอกขอบเขต ...
Sp3000

2

PHP (38 ไบต์):

สิ่งนี้ใช้ aproach เหมือนกับคำตอบ ES6ของฉัน

<?=count(split(1,decbin($_GET[n])))-1;

n=<number>นี่คือรหัสเต็มคุณจะต้องใส่ไว้ในไฟล์และการเข้าถึงผ่านเบราว์เซอร์ที่มีพารามิเตอร์

PHP <4.2 (32 ไบต์):

สั้นกว่านี้เล็กน้อย:

<?=count(split(1,decbin($n)))-1;

สิ่งนี้ทำงานได้อย่างน่าเชื่อถือบน PHP <4.2 เพราะคำสั่งregister_globalsถูกตั้งค่าเป็นค่าOffเริ่มต้นจาก PHP4.2 ถึง PHP5.4 (ซึ่งถูกลบออกไปแล้ว)

หากคุณสร้างphp.iniไฟล์ด้วยregister_globals=Onสิ่งนี้จะทำงาน

ในการใช้รหัสให้เข้าถึงไฟล์โดยใช้เบราว์เซอร์ด้วย POST หรือ GET

@ViniciusMonteiro 's ข้อเสนอแนะ (38/45 bytes):

เขาให้คำแนะนำที่ดีจริงๆ 2 ข้อซึ่งมีการใช้งานฟังก์ชั่นที่น่าสนใจมากarray_sum:

38 ไบต์:

<?=array_sum(str_split(decbin(1337)));

45 ไบต์:

<?=array_sum(preg_split('//', decbin(1337)));

นี่เป็นแนวคิดที่ยอดเยี่ยมและสามารถย่อให้สั้นลงได้อีก 36 ไบต์:

<?=array_sum(split(1,decbin(1337)));

2
หรือคุณสามารถใช้ echo array_sum (str_split (decbin (1337))); และคุณสามารถใช้ echo array_sum ได้เช่นกัน (preg_split ('//', decbin (1337)));
Vinicius Monteiro

1
@ViniciusMonteiro ขอบคุณมากสำหรับคำแนะนำของคุณ ฉันชอบมันมาก! ฉันได้เพิ่มไปยังคำตอบ
Ismael Miguel

รับสี่ไบต์โดยใช้<?=substr_count(decbin(1337),"1");(34 ไบต์)
Cogicero

1
@Cogicero <?=substr_count(decbin(1337),1);และคุณสามารถประหยัดมากยิ่งขึ้นโดยการเอาคำพูด: นั่นคือทั้งหมด 32 ไบต์ เมื่อพิจารณาว่าเป็นรหัสที่แตกต่างกันคุณไม่ต้องการโพสต์เป็นคำตอบของคุณเองหรือ ฉันจะยกมันขึ้นไปเลย!
Ismael Miguel

@Cogicero เป็นเพียงสองไบต์ที่สั้นกว่าหากคุณใช้ parametrization: <?=substr_count(decbin($argv[1]),1);(หรือ$_GET[n]; 36 bytes)
ติตัส


2

Japt 3 ไบต์ (ไม่ใช่การแข่งขัน)

¢¬x

ลองที่นี่


ผู้ชายฉันไม่เคยเห็นวันที่เหล่านั้นด้วยเหตุผลบางอย่าง
Mama Fun Roll

1
ฮ่าฮ่า Japt นั้นสั้นที่สุด: D BTW ¢o1 lก็ใช้ได้เช่นกัน อีกวิธีที่น่าสนใจคือ-¢¬r-0; ¢¬แยกออกเป็นอาเรย์ของเลขฐานสองr-0ลดโดยการลบเริ่มต้นที่ 0 และ-คัดค้านผลลัพธ์ทำให้เป็นบวก
ETHproductions

¢¬xในฐานะของคืนที่ผ่านมาตอนนี้คุณสามารถใช้
ETHproductions

2

ขี้ผึ้ง ,วันที่ 31 27 ไบต์

คำตอบที่ไม่ใช่การแข่งขัน Beeswax ใหม่กว่าความท้าทายนี้

วิธีนี้ใช้วิธีนับจำนวนบิตของ Brian Kherigan จากเว็บไซต์“ Bit Twiddling Hacks”

มันเป็นเพียงแค่วิ่งผ่านห่วงที่เพิ่มขึ้นนับบิตในขณะที่การทำซ้ำผ่านจนกว่าnumber=number&(number-1) number = 0การแก้ปัญหาจะต้องผ่านการวนซ้ำบ่อยเท่าที่มีการตั้งค่าบิต

ฉันสามารถโกน 4 ไบต์ด้วยการจัดเรียงคำสั่งใหม่ ทั้งซอร์สโค้ดและคำอธิบายได้รับการอัพเดต:

pT_
>"p~0+M~p
d~0~@P@&<
{@<

คำอธิบาย:

pT_            generate IP, input Integer, redirect
>"             if top lstack value > 0 jump next instruction,
               otherwise continue at next instruction
  p            redirect if top lstack value=0 (see below)
   ~           flip top and 2nd lstack values
    0+         set top lstack value to 0, set top=top+2nd
      M        decrement top lstack value
       ~       flip top and 2nd lstack values
        p      redirect to lower left
        <      redirect to left
       &       top=top&2nd
      @        flip top and 3rd lstack values
    @P         increment top lstack value, flip top and 3rd values
 ~0~           flip top and 2nd values, set top=0, flip top and 2nd again
d              redirect to upper left
>"p~0+M.....   loop back

  p            if top lstack = 0 at " instruction (see above), redirect
  0            set lstack top to zero (irrelevant instruction)
  <            redirect to the left
 @             flip top and 3rd lstack values
{              output top lstack value as integer (bitcount)

โคลนที่เก็บ GitHub ของฉันที่มีตัวแปลขี้ผึ้งข้อมูลจำเพาะภาษาและตัวอย่าง


1

Java, 17 ไบต์

การทำงานสำหรับbyte, short, และchar intใช้เป็นแลมบ์ดา

Integer::bitCount

ทดสอบที่นี่

โดยไม่ต้องใช้บิวด์อิน:

42 ไบต์

s->{int c=0;for(;s!=0;c++)s&=s-1;return c}

ทดสอบที่นี่


6
นี่เป็นช่องโหว่มาตรฐาน: ฟังก์ชั่นภายในที่ทำสิ่งที่คุณต้องการอย่างถูกต้อง
FUZxxl

@FUZxxl ผู้ปฏิบัติการไม่เคยห้ามช่องโหว่มาตรฐาน
โคลจอห์นสัน


6
@FUZxxl ในขณะที่ es1024 นั้นถูกต้องที่ช่องโหว่มาตรฐานจะถูกปิดโดยค่าเริ่มต้นการใช้ฟังก์ชั่นในตัวในปัจจุบันไม่ได้เป็นช่องโหว่ที่ยอมรับได้ที่การแบ่งคะแนนเสียงเป็น +43 / -26
Martin Ender

1

คลิป 6

2 วิธี:

cb2nx1

นี่คือการแปลข้อกำหนดที่ตรงไปตรงมา: การนับจำนวนในการแสดงเลขฐาน 2

r+`b2n

วิธีอื่นซึ่งใช้ผลรวมของตัวเลขของการแสดงฐาน 2






1

PowerShell (51 ไบต์)

"$([char[]][convert]::ToString($s,2)|%{"+$_"})"|iex

คำอธิบาย: ผลิตแสดงสตริงไบนารีจาก
[convert]::ToString($s,2) ปลดเปลื้องมันเป็นอาร์เรย์ถ่านและช่วยให้เราระบุถ่านแต่ละตัว เติมอักขระแต่ละตัวด้วยเครื่องหมาย + โดยนัยการเรียกในนิพจน์ย่อยผลลัพธ์จะรวมสตริง piped (เช่น "+1 +0 +1 +1 +1 +0 +1 +0 +0" = 4)$s
[char[]]
|%{"+$_"}
"$()".ToString()
|iex


สวัสดี! ทำตามตรรกะเดียวกับที่คุณมีทำไมไม่ใช้ตัว-joinดำเนินการอินไลน์และโดยปริยาย.ToString()เพื่อให้ได้ 45 ไบต์ด้วย[char[]][convert]::ToString($s,2)-join'+'|iex... หรือวิธีการต่าง ๆ ใช้-replaceตัวดำเนินการแบบอินไลน์เพื่อให้ได้ 43 ไบต์ด้วย([convert]::ToString($s,2)-replace0).length
AdmBorkBork

1

Clojure 42 ไบต์

#(count(filter #{\1}(Long/toString % 2)))

อ่านจากขวาไปซ้าย, แปลงเป็นสตริงไบนารี, แปลงเป็นลำดับของอักขระ, กรองบน1s และนับจำนวนคุณ

แก้ไข ด้วยความช่วยเหลือจาก Sieg


42:#(count(filter #{\1}(Integer/toString% 2)))
Seequ

คุณต้องการตัวละครอีกหนึ่งตัว#(count(filter #{\1}(Integer/toString % 2)))
Neil Masson

ไม่คุณทำไม่ได้ :)
Seequ

นี่คือสิ่งที่ฉันได้รับเมื่อฉันลอง:CompilerException java.lang.IllegalArgumentException: No matching method: toString_PERCENT_
Neil Masson

ฉันทดสอบใน Try Clojure Integer/toStringเห็นได้ชัดว่าหน้าก็ไม่รู้จัก มันทำงานได้ในวินาทีที่ผ่านมา
seequ

1

Haskell 42 ตัวอักษร

t 0=[]
t n=t(quot n 2)++[rem n 2]
f=sum.t

ประกาศการf :: Integer -> Integer
ใช้ฟังก์ชั่นจากล่ามแบบโต้ตอบเป็นf <number>หรือเพิ่มบรรทัดmain=print$f <number>ในตอนท้ายของไฟล์


คุณสามารถบันทึกจำนวนมากของไบต์โดยรวมโดยตรงrem n 2s แทนการสร้างรายการและโดยใช้divแทนquot: t 0=0 t n=t(div n 2)+rem n 2- ไม่fอีกต่อไป
nimi

1

Matlab ขนาด 13 ไบต์

de2biสร้างเวกเตอร์ของศูนย์และคนที่เป็นตัวแทนของเลขฐานสองและsumเพียงแค่ส่งกลับผลรวมของรายการทั้งหมด

sum(de2bi(n))

1

𝔼𝕊𝕄𝕚𝕟, 4 ตัวอักษร / 11 ไบต์ (ไม่แข่งขัน)

⨭⟦ïⓑ

Try it here (Firefox only).

คำอธิบาย

แปลงอินพุตเป็นไบนารีแยกตามตัวอักษรและรับผลรวมของอาร์เรย์ที่ได้

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