이것은 코드 골프 도전입니다. 제목에서 알 수 있듯이 ASCII 문자 문자열을 이진수로 변환하는 프로그램을 작성하십시오.
예를 들면 다음과 같습니다.
"Hello World!"
로 바뀌어야한다
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100 100001
합니다.
참고 : 특히 pyth 구현에 관심이 있습니다.
이것은 코드 골프 도전입니다. 제목에서 알 수 있듯이 ASCII 문자 문자열을 이진수로 변환하는 프로그램을 작성하십시오.
예를 들면 다음과 같습니다.
"Hello World!"
로 바뀌어야한다
1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100 100001
합니다.
참고 : 특히 pyth 구현에 관심이 있습니다.
답변:
l:i2fbS*
쉬워요:
l:i "Read the input line and convert each character to its ASCII value";
2fb "Put 2 on stack and use that to convert each ASCII value to base 2";
S* "Join the binary numbers by space";
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"
입력은 따옴표없이 변환해야하는 문자열입니다.
Psum(d).append(Pfilter(lambda T:gte(head(join(Plen(k),Plen())))))
whee d = ''및 k = ''. 따라서 전혀 유효하지 않습니다.
$<.bytes{|c|$><<"%b "%c}
STDIN을 통해 입력을받습니다. AShelly 덕분에 6 바이트가 절약되었고 britishtea 덕분에 4 바이트가 절약되었습니다.
$<.each_byte{|c|$><<"%b "%c}
String#bytes
대신을 사용하여 더 많은 문자를 제거 할 수 있습니다 String#each_byte
. 블록 형식은 더 이상 사용되지 않지만 여전히 작동합니다 :)
이것은 익명 함수입니다
f=@(x) dec2bin(char(x))
사용법은 f('Hello World')
입니다.
또는 작업 공간 x
에서 문자열 Hello World!
로 정의 된 경우 dec2bin(char(x))
작동합니다.
char
? 난 당신 말은 생각dec2bin(x)-'0'
char(x)
때 x
, 이미 문자열 아무것도하지 않는다. 따라서 공간을 절약하기 위해 제거 할 수 있습니다. 반면에 결과 dec2bin
는 문자열이며 출력은 숫자 여야한다고 생각합니다.
1":#:3&u:
코드 길이를 두 배로 늘리지 않고 이것을 행으로 만드는 방법을 모른다면 J 전문가가 나에게 말해줘야합니다. :)
1":#:3&u:'Hello world!'
1001000
1100101
1101100
1101100
1101111
0100000
1110111
1101111
1110010
1101100
1100100
0100001
".
처음에 추가 할 수 있습니다 . 결과를 한 줄로 표시하고 공백으로 구분하여 결과를 평가합니다. 더 짧은 것은 base2 숫자로 base10 숫자를 만드는 것 10#.#:3&u:
입니다.
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)+" ");}}}
전체 파일을 포함하도록 편집
for(char c:a[0].toCharArray()){
되거나 심지어 더 짧을 수 있음for(byte b:a[0].getBytes()){
public
더 많은 바이트를 얻기 위해를 제거 하고 프로그램 이름을 단일 문자로 줄이십시오. 또한 (String[]a)
컴파일러에서 완벽하게 허용되어 다른 바이트를 얻습니다.
alert([for(c of prompt())c.charCodeAt().toString(2)].join(' '))
JavaScript의 긴 함수 이름 덕분에 다소 길다. 아래의 스택 스 니펫은 대략 ES5에 해당하므로 모든 브라우저에서 실행할 수 있습니다. 골프 개선을위한 edc65 덕분입니다.
alert(prompt().split('').map(function(e){return e.charCodeAt().toString(2)}).join(' '))
[for of]
[...].map
문자열에서 문자를 열거하는 것보다 약간 짧습니다 .alert([for(c of prompt())c.charCodeAt().toString(2)].join(' '))
.join(' ')
하여 2 바이트를 골프 오프 할 수 있습니다 .join` `
. prompt
/ 대신에 함수를 사용하여 많은 바이트를 alert
리스팅 :
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
완전한 PC DOS 실행 가능 COM 파일, 입력은 명령 행을 통해 이루어집니다.
선행 0으로 :
ASCBIN.COM을 다운로드하여 테스트 하십시오 .
또는 앞에 0이없는 39 바이트 :
ASCBIN2.COM을 다운로드하고 테스트 하십시오 .
* 선행 0이 허용되는지 여부가 명확하지 않으므로 버전을 양방향으로 게시하고 있습니다.
입력 문자열이 메모리 주소에 있습니다 #0000H
( allowed ). 전면 패널 I / O 표시등을 통해 이진수로 출력됩니다 D7-D0
.
예를 들어 RESET
, 그런 다음 EXAMINE
첫 번째 바이트 EXAMINE NEXT
를 확인한 다음 나머지를 보려면 반복 하십시오.
"H" = 01 001 000:
"e" = 01 100 101:
"l" = 01 101 100:
물론 비경쟁. :)
m s=tail$do c<-s;' ':do j<-[6,5..0];show$mod(fromEnum c`div`2^j)2
heavy use of the list monad. it couldn't be converted to list comprehentions because the last statements weren't a return
.
Freeing memory? What's that?
#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 compiles the code with warning)
main(int c,char**v){char x[9];for(;c=*(v[1]++);printf("%s ",itoa(c,x,2)));}
binary scan [join $argv] B* b;puts [regsub -all .{8} $b {& }]
Here is the obfuscated listing using Commodore BASIC keyword abbreviations:
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
Here for explanation purposes is the non-obfuscated symbolic listing:
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
The function fn b
declared on line zero accepts a numeric parameter of x
which is AND
ed with the value of b
; SGN is then used to convert x and b
to 1
or 0
.
Line one accept a string input to the variable a$
, and the loop starts (denoted with i
) to the length of that input. b
represents each bit from the 6th to 0th bit. c$
takes each character of the string at position i
.
line 5 starts the loop to test each bit position; right$
is used in line 6 to remove a auto-formatting issue when Commodore BASIC displays a number, converting the output of fn b
to a string; asc(c$)
converts the current character to its ascii code as a decimal value.
Line 7 represents the next bit value. The loop j
is ended before printing a space, then the last loop i
is ended.
alert(prompt().split('').map(c=>c.charCodeAt(0).toString(2))).join(' ')
.split('')
빈 문자열에서 분리 해야 합니다. .split()
회전 "abc"
에 ["abc"]
.
: 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
나는 마틴 엔더 를 이길 바라고 있었지만 나는 그를 묶을 수밖에 없었다.
STDIN에 입력을받습니다. -p
플래그의 경우 +1 바이트
gsub(/./){"%b "%$&.ord}
ċb¦ṡ
이것에 매우 만족
ċ Get a list of all the code points in the input string
b¦ Convert every number in that list to binary
ṡ Joins the element of the list with spaces
Implicit Output
나는 대부분의 것과 다른 접근법을 사용했습니다. display _request () 프롬프트를 통해 읽습니다 (di _r (r)로 단축). 문자열을 텍스트 모드에서 b라는 파일에 씁니다. 이진 모드에서 b를 열고 각 문자를 바이트로 읽고 이진으로 변환합니다. 기술적으로 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
}
Never will C# win these kinds of questions but here's a try, completely without encoding. :)
Console.Write(String.Join(" ",Console.ReadLine().Select(x=>Convert.ToString(x,2))));
x=>String.Join(" ",x.Select(y=>Convert.ToString(y,2)));
그러나이 .Select()
짧은 답변과 원래 답변을 모두 using System.Linq;
사용하기 때문에 Visual C # Interactive Compiler를 사용하도록 지정하지 않는 한 18 바이트를 포함해야합니다. 기본적으로 System.Linq를 가져옵니다