बाइनरी को स्ट्रिंग


19

यह एक कोड गोल्फ चुनौती है। जैसे शीर्षक कहता है, असीसी वर्णों की एक स्ट्रिंग को बाइनरी में कवर करने के लिए एक कार्यक्रम लिखें।

उदाहरण के लिए:

"Hello World!" में बदल जाना चाहिए 1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100 100001

नोट: मुझे विशेष रूप से एक अजगर कार्यान्वयन में दिलचस्पी है।


1
हमने उल्टा पूछा था: codegolf.stackexchange.com/questions/35096/…
hmatt1

1
मैंने गौर किया। वहाँ एक किस्सा है कि मैंने यह सवाल क्यों पूछा। मैंने अपने दोस्त को प्रोग्रामिंग सीखने के लिए प्रोत्साहित किया, और उसने पिछली गर्मियों में एक जावा क्लास ली, जहाँ प्रत्येक छात्र को एक प्रोजेक्ट चुनना था। उसने मुझे बताया कि वह बाइनरी में पाठ का अनुवाद करना चाहता था, जो मैंने तब (उसके पतन के लिए) अजगर 3 में 1 पंक्ति (एक बहुत लंबी लाइन) में किया था। मुझे यह अविश्वसनीय लगता है कि उनका प्रोजेक्ट आइडिया 8 बाइट्स तक डिस्टिल्ड हो सकता है।
ericmarkmartin

1
यह अच्छा है, साझा करने के लिए धन्यवाद! मुझे इस तरह के आसान सवाल पसंद हैं क्योंकि यह अधिक लोगों को भाग लेने का मौका देता है और उत्तरों के रूप में बहुत सारी सामग्री उत्पन्न करता है।
hmatt1

1
क्या यह ASCII होना चाहिए? यदि कोई तकनीक ASCII संगत नहीं है, तो क्या परिणाम प्रतिबिंबित हो सकते हैं?
शॉन बेएबर्स

1
क्या हम ASCII प्रिंट करने योग्य 32-127 मान सकते हैं? यदि ऐसा है, तो क्या बाइनरी स्ट्रिंग्स बाएं शून्य-गद्दी के साथ 7 वर्ण हो सकते हैं?
640KB

जवाबों:




8

अजगर, 10 बाइट्स

jdmjkjCd2z

पायथन मैपिंग और स्पष्टीकरण:

j           # join(                               "Join by space"
 d          #      d,                             "this space"
 m          #      Pmap(lambda d:                 "Map characters of input string"
  j         #                    join(            "Join by empty string"
   k        #                        k,           "this empty string"
    j       #                        join(        "This is not a join, but a base conversion"
     C      #                             Pchr(   "Convert the character to ASCII"
      d     #                                  d  "this character"
            #                                 ),
     2      #                             2       "Convert to base 2"
            #                            )
            #                        ),
  z         #           z)))                      "mapping over the input string"

इनपुट वह स्ट्रिंग है जिसे उद्धरणों के बिना परिवर्तित करने की आवश्यकता होती है।

इसे यहाँ आज़माएँ


10
क्या asdfghjlkl भी एक मान्य पाइथ प्रोग्राम है? यह क्या करता है?
flawr

@ कोशिश करने में कोई नुकसान? ;)
ऑप्टिमाइज़र

2
@flawr यह अजगर के लिए संकलित है, मट्ठा Psum(d).append(Pfilter(lambda T:gte(head(join(Plen(k),Plen())))))डी = '' और के = ''। तो नहीं, यह बिल्कुल भी मान्य नहीं है।
इसहाक

12
@ ericmark26 अपने कमरे या कार्यालय के चारों ओर देखें, और वह सब कुछ तोड़ दें जो आप अपने कीबोर्ड में पा सकते हैं और देख सकते हैं कि क्या यह व्याख्या करता है। यह पता लगाएं कि यह क्या करता है, और फिर अगली वस्तु के साथ दोहराएं। जब आप बाहर भागते हैं, तो अलग-अलग घुमावों का प्रयास करें।
ग्लोबबी

2
@ ericmark26 मुझे लगता है कि पाइथ के अभ्यस्त होने का सबसे अच्छा तरीका कुछ सरल पायथन कार्यक्रम लेना है, और उन्हें पाइथ में अनुवाद करना है।
ईसैक

4

पायथन 3 - 43 बाइट्स


print(*map("{:b}".format,input().encode()))

कोई सबसे छोटा नहीं है, लेकिन एक दिलचस्प दृष्टिकोण IMO है। इसमें अतिरिक्त लाभ है कि यदि महत्वपूर्ण बिट्स की संख्या बदलती है, तो ईजी Hi!, शून्य के साथ पैडिंग तुच्छ है (2 और बाइट्स, 9 के लिए विरोध के रूप में .zfill(8)):

print(*map("{:08b}".format,input().encode()))

3

अजगर - 52

print" ".join([bin(ord(i))[2:]for i in raw_input()])

मैं इसे पायथ में अनुवाद करने पर काम करूँगा। किसी और ने पहले से ही एक पायथन जवाब दिया।

यदि आप इसे पूर्ण कार्यक्रम या I / O प्रारूप के बारे में परवाह नहीं करते हैं और पायथन 3 का उपयोग करते हैं, तो आप इसे 23 बाइट्स में कर सकते हैं:

[bin(ord(i))for i in x]

x इनपुट है

मुझे पता है कि यह इसलिए मायने नहीं रखता क्योंकि इंटरप्रेटर को चुनौती देने से पहले जारी नहीं किया गया था, लेकिन यहाँ यह KSFTgolf में है:

oan

3

रूबी, 34 28 24 बाइट्स

$<.bytes{|c|$><<"%b "%c}

STDIN के माध्यम से इनपुट लेता है। 6 बाइट्स ने एशेल्ली के लिए धन्यवाद और अन्य 4 ब्राइटिशिया के लिए धन्यवाद बचाया।


6 से ट्रिम$<.each_byte{|c|$><<"%b "%c}
19

आप String#bytesइसके बजाय का उपयोग करके कुछ और पात्रों को शेव कर सकते हैं String#each_byte। ब्लॉक फॉर्म को हटा दिया गया है, लेकिन यह अभी भी काम करता है :)
ब्रिटिश

@britishtea ओह, अच्छा है। धन्यवाद!
मार्टिन एंडर


2

Matlab

यह एक अनाम फ़ंक्शन है

f=@(x) dec2bin(char(x))

उपयोग है f('Hello World')

वैकल्पिक रूप से, यदि कार्यक्षेत्र में xस्ट्रिंग के रूप में परिभाषित किया गया है Hello World!, तो बस dec2bin(char(x))काम करेगा।


मुझे यकीन नहीं है कि यह कैसे स्कोर किया जाए क्योंकि मुझे यकीन नहीं है कि मुझे इनपुट कैसे मिल सकता है। कोई टिप्पणी?
डेविड

क्यों char? मुझे लगता है कि आपका मतलब हैdec2bin(x)-'0'
लुइस मेंडो

क्योंकि मैं वह चतुर नहीं हूँ!
डेविड

मेरा कहना है:, char(x)जब xपहले से ही एक स्ट्रिंग है, कुछ भी नहीं है। तो आप इसे कुछ जगह बचाने के लिए निकाल सकते हैं। दूसरी ओर, का परिणाम dec2binएक स्ट्रिंग है, और मुझे लगता है कि आउटपुट संख्या होना चाहिए
लुइस मेंडो

मैं समझता हूं, और आप सही हैं। मतलाब कभी-कभी डेटा प्रकारों के बारे में भूलना आसान बनाता है।
डेविड

2

जे - ९

1":#:3&u:

कोड की लंबाई को दोगुना किए बिना इसे बनाने का कोई विचार नहीं है, मुझे यह बताने के लिए जे गुरु की आवश्यकता है :)

1":#:3&u:'Hello world!'
1001000
1100101
1101100
1101100
1101111
0100000
1110111
1101111
1110010
1101100
1100100
0100001

2
आप ".शुरुआत में जोड़ सकते हैं । यह आपके परिणाम का मूल्यांकन करता है इसलिए यह एक पंक्ति में होगा और रिक्त स्थान से अलग होगा। यहां तक ​​कि बेस 2 अंकों के साथ आधार 10 नंबर बनाने के लिए कम है 10#.#:3&u::।
रैंडमरा

2

जावा - 148 बाइट्स

public class sToB{public static void main(String[] a){for(int i=0;i<a[0].length();i++){System.out.print(Integer.toString(a[0].charAt(i) ,2)+" ");}}}

पूर्ण फ़ाइल शामिल करने के लिए संपादित किया गया


2
मुझे लगता है कि ओपी एक पूर्ण कार्यक्रम चाहता है, न कि केवल एक स्निपेट। इसके अलावा, यह एक बहुत अधिक, methinks गोल्फ हो सकता है।
रोडोल्फो डायस

यह पूरा कार्यक्रम है, यदि आप इसे एक मुख्य वर्ग में रखते हैं, तो यह चलेगा। बेहतर गोल्फ के लिए के रूप में, शायद लेकिन मैं कैसे हाजिर नहीं कर सका।
ब्रायन देवनै

1
पूर्ण कार्यक्रम में मुख्य वर्ग भी शामिल है।
रोडोल्फो डायस

इनपुट के रूप में for(char c:a[0].toCharArray()){भी इसका उपयोग कम किया जा सकता है , for(byte b:a[0].getBytes()){क्योंकि एक गैर-utf-16 मशीन लोकेल
njzk2

1
आप इससे छुटकारा पा सकते हैं publicऔर अधिक बाइट जीतने के लिए प्रोग्राम नाम को एक ही चार में छोटा कर सकते हैं । इसके अलावा, (String[]a)संकलक द्वारा पूरी तरह से स्वीकार किया जाता है, आप एक और बाइट कमाते हैं।
रोडोल्फो डायस

2

जावास्क्रिप्ट ईएस 6, 63 65 बाइट्स

alert([for(c of prompt())c.charCodeAt().toString(2)].join(' '))

यह लंबे समय तक है, जावास्क्रिप्ट के लंबे फ़ंक्शन नामों के लिए धन्यवाद। नीचे दिए गए स्टैक स्निपेट ईएस 5 के बराबर है, इसलिए इसे किसी भी ब्राउज़र में चलाया जा सकता है। गोल्फ सुधार के लिए edc65 के लिए धन्यवाद।

alert(prompt().split('').map(function(e){return e.charCodeAt().toString(2)}).join(' '))


1
[for of][...].mapतार में गुनगुना से थोड़ा कम है :alert([for(c of prompt())c.charCodeAt().toString(2)].join(' '))
edc65

आप दो बाइट्स के .join(' ')साथ बदलकर गोल्फ कर सकते हैं .join` ` । आप promptalert
RamenChef

2

स्केल - 59 - 55 बाइट्स

readLine().map(x=>print(x.toByte.toInt.toBinaryString))

आम तौर पर, किसी को फॉर्च्यूनर का इस्तेमाल करना चाहिए, न कि मैप का।


2

8088 मशीन कोड, आईबीएम पीसी डॉस, 33 31 बाइट्स *

लिस्टिंग:

D1 EE           SHR  SI, 1          ; point SI to DOS PSP (80H)
AD              LODSW               ; load input string length into AL, SI to 82H 
8A C8           MOV  CL, AL         ; set up loop counter 
49              DEC  CX             ; remove leading space/slash from char count 
            LOOP_CHAR: 
B3 08           MOV  BL, 8          ; loop 8 bits 
AC              LODSB               ; load next char 
            LOOP_BIT: 
D0 C0           ROL  AL, 1          ; high-order bit into low-order bit 
B4 0E           MOV  AH, 0EH        ; BIOS display character function 
50              PUSH AX             ; save AH/AL 
24 01           AND  AL, 1          ; mask all but low-order bit 
04 30           ADD  AL, '0'        ; convert to ASCII 
CD 10           INT  10H            ; write char to display 
58              POP  AX             ; restore AH/AL 
4B              DEC  BX             ; decrement bit counter 
75 F1           JNZ  LOOP_BIT       ; loop next bit      
B0 20           MOV  AL, ' '        ; display a space 
CD 10           INT  10H            ; write space to display 
E2 E8           LOOP LOOP_CHAR      ; loop next char 
C3              RET                 ; return to DOS 

पूर्ण पीसी डॉस निष्पादन योग्य COM फ़ाइल, इनपुट कमांड लाइन के माध्यम से है।

अग्रणी शून्य के साथ:

यहाँ छवि विवरण दर्ज करें

डाउनलोड करें और ASCBIN.COM का परीक्षण करें

या बिना प्रमुख शून्य के 39 बाइट्स :

यहाँ छवि विवरण दर्ज करें

डाउनलोड करें और ASCBIN2.COM का परीक्षण करें

* चूंकि यह मेरे लिए स्पष्ट रूप से स्पष्ट नहीं था कि अग्रणी शून्य को अनुमति दी गई है या नहीं, मैं दोनों तरीकों से संस्करण पोस्ट कर रहा हूं।


2

MITS Altair 8800 , 0 बाइट्स

इनपुट स्ट्रिंग मेमोरी एड्रेस #0000H( अनुमत ) पर है। फ्रंट पैनल I / O रोशनी के माध्यम से बाइनरी में आउटपुट D7-D0

उदाहरण, करते हैं RESET, फिर EXAMINEपहले बाइट EXAMINE NEXTको देखने के लिए, बाकी को देखने के लिए दोहराने के बाद ।

"H" = 01 001 000:

यहाँ छवि विवरण दर्ज करें

"e" = 01 100 101:

यहाँ छवि विवरण दर्ज करें

"l" = 01 101 100:

यहाँ छवि विवरण दर्ज करें

इसे ऑनलाइन आज़माएं!

गैर-प्रतिस्पर्धा, बिल्कुल। :)


1

हास्केल, 65

m s=tail$do c<-s;' ':do j<-[6,5..0];show$mod(fromEnum c`div`2^j)2

सूची का भारी उपयोग मोनाड। इसे अंतिम सूची में नहीं होने के कारण सूची में नहीं बदला जा सकता है return


1

सी ++ - 119 बाइट्स

मुक्त स्मृति? वह क्या है?

#include<cstdio>
#include<cstdlib>
int main(int c,char**v){for(*v=new char[9];c=*(v[1]++);printf("%s ",itoa(c,*v,2)));}

(MSVC चेतावनी के साथ कोड संकलित करता है)


1
C संस्करण, छोटाmain(int c,char**v){char x[9];for(;c=*(v[1]++);printf("%s ",itoa(c,x,2)));}
n̴̖̋h̷͉̃a̷̭̿h̷̰̀ĥ̷̳d





1

कमोडोर VIC-20 / C64 / 128 और TheC64Mini, 101 टोकन बाइट्स

यहाँ Commodore BASIC कीवर्ड संक्षिप्ताक्षरों का उपयोग करते हुए अनुमानित सूची दी गई है:

 0dEfnb(x)=sG(xaNb):inputa$:fOi=1tolen(a$):b=64:c$=mI(a$,i,1):fOj=0to6
 1?rI(str$(fnb(aS(c$))),1);:b=b/2:nEj:?" ";:nE

स्पष्टीकरण उद्देश्यों के लिए यहाँ गैर-प्रतीकात्मक प्रतीकात्मक सूची है:

 0 def fn b(x)=sgn(x and b)
 1 input a$
 2 for i=1 to len(a$)
 3 let b=64
 4 let c$=mid$(a$,i,1)
 5 for j=0 to 6
 6 print right$(str$(fn b(asc(c$))),1);
 7 let b=b/2
 8 next j
 9 print " ";
10 next i

fn bलाइन पर घोषित फ़ंक्शन शून्य का एक सांख्यिक पैरामीटर स्वीकार करता है, xजिसके ANDमान के साथ एड है b; SGN तब या में परिवर्तित x and bकरने के लिए उपयोग किया जाता है10

लाइन एक चर के लिए एक स्ट्रिंग इनपुट स्वीकार करते हैं a$, और iउस इनपुट की लंबाई के लिए लूप शुरू होता है (साथ चिह्नित )। b6 से 0 वें बिट से प्रत्येक बिट का प्रतिनिधित्व करता है। c$स्ट्रिंग के प्रत्येक चरित्र को स्थिति पर ले जाता है i

पंक्ति 5 प्रत्येक बिट स्थिति का परीक्षण करने के लिए लूप शुरू करती है; right$ऑटो-स्वरूपण समस्या को दूर करने के लिए लाइन 6 में उपयोग किया जाता है, जब Commodore BASIC एक नंबर प्रदर्शित करता है, का आउटपुट परिवर्तित करता हैfn b एक स्ट्रिंग ; asc(c$)वर्तमान वर्ण को अपने ascii कोड में दशमलव मान के रूप में परिवर्तित करता है।

पंक्ति 7 अगले बिट मूल्य का प्रतिनिधित्व करती है। jकिसी स्थान को प्रिंट करने से पहले लूप समाप्त हो जाता है, फिर अंतिम लूप iसमाप्त हो जाता है।

C64 PETSCII को बाइनरी में परिवर्तित करना


1

जावास्क्रिप्ट ईएस 6, 71 बाइट्स

alert(prompt().split('').map(c=>c.charCodeAt(0).toString(2))).join(' ')

PPCG में आपका स्वागत है! आपको .split('')खाली स्ट्रिंग पर विभाजित करने की आवश्यकता है; .split()में बदल जाता "abc"है ["abc"]
डेनिस

1

फोर्थ (gforth) , 45 बाइट्स

: f 0 do dup i + c@ 2 base ! . decimal loop ;

इसे ऑनलाइन आज़माएं!

कोड स्पष्टीकरण

: f           \ start a new word definition
  0 do        \ start a loop from 0 to string length - 1
    dup i +   \ duplicate the address and add the loop index to get addr of current character
    c@        \ get the character at that address
    2 base !  \ set the base to binary
    .         \ print the ascii value (in binary)
    decimal   \ set the base back to decimal
  loop        \ end the loop
;             \ end the word definition

1

रूबी, 24 बाइट्स

मैं मार्टिन एंडर को हराने की उम्मीद कर रहा था , लेकिन मैं केवल उसे बांधने में कामयाब रहा।

एसटीडीआईएन पर इनपुट लेता है; -pध्वज के लिए +1 बाइट्स ।

gsub(/./){"%b "%$&.ord}

इसे ऑनलाइन आज़माएं!




0

STATA 158

मैंने सबसे अलग दृष्टिकोण का इस्तेमाल किया। प्रदर्शन के माध्यम से पढ़ें _request () शीघ्र (di _r (r) के लिए छोटा)। स्ट्रिंग को टेक्स्ट मोड में b नामक फ़ाइल में लिखें। बाइनरी मोड में बी खोलें और प्रत्येक चरित्र को बाइट के रूप में पढ़ें और बाइनरी में कनवर्ट करें। तकनीकी रूप से बी फाइल को अंत में बंद किया जाना चाहिए, लेकिन यह एक वैध कार्यक्रम है और इसके बिना सफलतापूर्वक चलता है।

di _r(r)
file open a using "b",w
file w a "$r"
file close a
file open a using "b",b r
file r a %1bu t
while r(eof)==0 {
loc q=t
inbase 2 `q'
file r a %1bu t
}

0

गोलंग - 68

मैं गो के लिए नया हूं और मुझे इस भाषा में वर्णों की गिनती के नियमों पर भी यकीन नहीं है।

आयात (11 बाइट्स):

import"fmt"

समारोह (55 बाइट्स):

func c(s string){for _,r:=range s{fmt.Printf("%b ",r)}}

आप इसे यहां चला सकते हैं


0

कभी भी C # इस प्रकार के प्रश्नों को नहीं जीतेंगे लेकिन यहाँ पूरी तरह से एन्कोडिंग के बिना एक कोशिश है। :)

सी # - 84

Console.Write(String.Join(" ",Console.ReadLine().Select(x=>Convert.ToString(x,2))));

लैंबडा फ़ंक्शन का उपयोग करके इसे बहुत कम बनाया जा सकता है, अर्थात: x=>String.Join(" ",x.Select(y=>Convert.ToString(y,2)));हालाँकि, ध्यान दें कि, .Select()इस छोटे से उत्तर का उपयोग करने के कारण , और आपके मूल उत्तर के लिए, 18 बाइट्स को शामिल करने की आवश्यकता है using System.Linq;जब तक कि आप यह निर्दिष्ट न करें कि यह विज़ुअल सी # इंटरएक्टिव कंपाइलर का उपयोग कर रहा है। , जो कि System.Linq को डिफ़ॉल्ट रूप से आयात करता है
Skidsdev

यहाँ इंटरैक्टिव संकलक, कुल 55 बाइट्स का उपयोग करते हुए लैम्ब्डा फंक्शन सॉल्यूशन
स्किड्सविद

0

कोबरा - 64

एक लैम्ब्डा के रूप में:

do(s='')=(for c as int in s get Convert.toString(c,2)).join(' ')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.