답변:
입력 문자열이 variable이라고 가정합니다 b
.
b='0'
이것은 대부분의 언어에서 할 수있는 일은하지 않습니다 ...
J 개의 비교 연산자는 단지 인
=
(=:
그리고=.
, 각각의 글로벌 및 로컬 할당하다). 그러나=
일반==
연산자 처럼 작동하지 않습니다 . 항목별로 비교합니다. 배열은 다음과 같이 구성0 2 3 2 3 1 2 3 4
됩니다. 예를 들어2 = 0 2 3 2 3 1 2 3 4
제공0 1 0 1 0 0 1 0 0
합니다. 이 문자열 비슷'a'='abcadcadda'
단지 반환하지 않습니다0
그것을 반환,1 0 0 1 0 0 1 0 0 1
(이것은 의미하는 것으로 추정 할 수0
와 함께*/
기본적으로 의미한다all
, 그러나이 경우.) 우리는 1과 0의 문자열을 원하기 때문에이 문제가, excelent, 또는 참과 거짓. J의 bools 이후 이다1
과0
,이 배열의 결과1
S '및0
(문자열 이 아니며이 배열을1
생성하는 것 이외의 다른 모든 문자0
입니다.) 인쇄 할 필요가 없습니다. J는 표현식의 결과를 자동으로 인쇄합니다. 나는 이것이 적절하지 않은 설명이기를 바랍니다. 그렇지 않은 경우 의견에 아직 명확하지 않은 것을 요청하십시오. 이 답변은'0'&=
(또는=&'0'
) 있었을 수도 있지만b='0'
더 명확 하다고 느꼈습니다 .
=&'0'
같은 바이트 수로 작동합니다.
{1^}%
GolfScript는 STDIN에서 전체 입력을 읽고 스택에 문자열로 배치합니다.
{}%
문자열의 모든 문자를 거치고 모든 문자에 대해 코드 블록을 실행합니다.
1^
"0"은 ASCII 코드 48에 해당하고 "1"은 ASCII 코드 49에 해당합니다.
48 ^ 1 = 49
및 이므로 49 ^ 1 = 48
0을 1로, 1을 0으로 바꿉니다.
완료되면 GolfScript는 수정 된 문자열을 인쇄합니다.
글쎄, 그것은 다시 짧아졌다! 관련이없는 문제에 대한 솔루션을 작성한 후에도 동일한 트릭이 여기에도 적용될 수 있음을 알았습니다. 그래서 우리는 간다 :
00000000 b4 08 cd 21 35 01 0a 86 c2 eb f7 |...!5......|
0000000b
주석이 달린 어셈블리 :
org 100h
section .text
start:
mov ah,8 ; start with "read character with no echo"
lop:
; this loop runs twice per character read; first with ah=8,
; so "read character with no echo", then with ah=2, so
; "write character"; the switch is performed by the xor below
int 21h ; perform syscall
; ah is the syscall number; xor with 0x0a changes 8 to 2 and
; viceversa (so, switch read <=> write)
; al is the read character (when we did read); xor the low
; bit to change 0 to 1 and reverse
xor ax,0x0a01
mov dl,al ; put the read (and inverted character) in dl,
; where syscall 2 looks for the character to print
jmp lop ; loop
나는 이것보다 훨씬 짧지 않다고 생각합니다.실제로 그렇습니다! 바이트를 하나 더 줄인 @ninjalj에게 감사합니다.
00000000 b4 08 cd 21 34 01 92 b4 02 cd 21 eb f3 |...!4.....!..|
0000000d
이 버전은 고급 인터랙티비티 기능을 제공 합니다. 명령 행에서 실행 한 후 입력 숫자 (반향되지 않음)를 쓰는 한 "반전 된"문자를 뱉어냅니다. 종료하려면 Ctrl-C를 수행하십시오.
이전 솔루션과 달리 DosBox에서 실행하는 데 약간의 문제가 있습니다. DosBox 가 Ctrl-C를 올바르게 지원하지 않기 때문에 종료하려면 DosBox 창을 닫아야합니다. 대신 DOS 6.0이 설치된 VM에서는 의도 한대로 실행됩니다.
NASM 소스 :
org 100h
section .text
start:
mov ah,8
int 21h
xor al,1
xchg dx,ax
mov ah,2
int 21h
jmp start
이것은 커맨드 라인으로부터의 입력을 받아 들였다; DosBox에서 .COM 파일로 부드럽게 실행됩니다.
00000000 bb 01 00 b4 02 8a 97 81 00 80 f2 01 cd 21 43 3a |.............!C:|
00000010 1e 80 00 7c f0 c3 |...|..|
NASM 입력 :
org 100h
section .text
start:
mov bx, 1
mov ah, 2
loop:
mov dl, byte[bx+81h]
xor dl, 1
int 21h
inc bx
cmp bl, byte[80h]
jl loop
exit:
ret
xchg dx,ax
1 바이트보다 짧은mov dl,al
tr 01 10
STDIN에서 입력을받습니다.
또는
y/01/10/
y 01 10
tr
.
>,[>,]<[<]>[<+++++++[>-------<-]<+>>[++<]<[>]++++++++[>++++++<-]>.[-]>]
설명:
>,[>,] Read characters until there are none left.
<[<] Return to start
>[< Loop as long as there are characters to invert
+++++++[>-------<-] Subtract 49 (ASCII value of 1)
>[++<] If not 0, add 2
+++[<++++>-]<[>>++++<<-]>> Add 48
. Print
[-] Set current cell to 0
>] Loop
a
대해 출력되는 버그를 수정해야했습니다 11
.
Put this tasty pancake on top!
[]
Put this delicious pancake on top!
[#]
Put this pancake on top!
How about a hotcake?
If the pancake is tasty, go over to "#".
Eat all of the pancakes!
Put this supercalifragilisticexpialidociouseventhoughtheso pancake on top!
Flip the pancakes on top!
Take from the top pancakes!
Flip the pancakes on top!
Take from the top pancakes!
Put this supercalifragilisticexpialidociouseventhoughthes pancake on top!
Put the top pancakes together!
Show me a pancake!
If the pancake is tasty, go over to "".
입력이 널 문자로 종료되었다고 가정합니다. 전략은 다음과 같습니다.
1
그것 의 ASCII 값을 빼 십시오.0
( 1
우리가 0
가진 0
경우 또는 우리가 가진 경우 1
)0
그것 의 ASCII 값을 추가하십시오i(char*s){while(*s)*s++^=1;}
while
로 for
28 자 길이의 여전히 발생합니다.
아,이 첫 번째 물건이 얼마나 빨라요. 꽤 추한 것입니다. 63 자
print''.join([bin(~0)[3:] if x == '0' else bin(~1)[4:] for x in ''])
이것은 조금 나아지지만 여전히 멋진 것은 아닙니다. 44 자
print''.join([str(int(not(int(x)))) for x in ''])
이후 int(x) and 1
수익률 int(x)
은 0, 그렇지 않으면 거짓이 아니라면. 이 솔루션은 36 문자로 더 줄일 수 있습니다.
print''.join([str(1-int(x)) for x in ''])
이후 join()
발전기 걸리는 브래킷을 제거 할 수있다. 32 자
print''.join(str(1-int(x))for x in'')
대신 백틱을 사용할 수 있습니다 str()
print''.join(`1-int(x)`for x in'')
@TheRare의 포인터 덕분에 34에서 44로 줄었습니다.
bin(-int)
-0bxxx를 반환하므로 위 의 내용을 보완하기가 쉽지 않습니다.
(int(x) and 1) == int(x)
'' == False
및'hi' == True
''.join(`1-int(x)`for x in'')
repr(x)
x <maxint에 대한 Fyi 는 다음과 같습니다str(x)
'y/10/01/'
9 번째 문자는 'p'플래그입니다
용법:
$ echo '10101001' | perl -pe 'y/10/01/'
alert(prompt().replace(/./g,x=>x^1))
s
, s.replace(/./g,x=>x^1)
22 개 문자이다.
p=prompt(p().replace(/./g,x=>x^1))
(p=prompt)(p().replace(/./g,x=>x^1))
길이가 같아야합니다.
(미로는이 도전보다 새로운 것이므로이 답변은 경쟁이 아닙니다. 어쨌든 승리하지는 않습니다 ...)
1,
.$@
이 코드는 STDIN 에 숫자 만 포함 된 것으로 가정합니다 (특히 후행 줄 바꿈 없음).
명령 포인터 (IP)는 왼쪽 상단에서 오른쪽으로 시작합니다. 읽을 숫자가있는 동안 왼쪽 2x2 블록을 통해 꽉 루프로 순환 1
합니다 .1을 ,
누르고 숫자를 읽은 다음 $
1로 XOR하여 마지막 비트를 토글 .
하고 결과를 인쇄하십시오. XOR 이후 스택의 상단이 양수이므로 IP는이 루프를 사용합니다. EOF를 누르면 대신 에 ,
리턴 -1
합니다. 그런 다음 XOR -2
은이 음수를 산출 하고이 음수 값으로 IP가 좌회전 @
하여 프로그램이 종료됩니다.
이 솔루션은 Labyrinth에 최적이어야합니다 . I / O 루프 가 필요 ,
하고 프로그램을 종료해야합니다. 마지막 비트를 토글하려면 두 문자 (여기 및 )가 필요합니다 . 그리고 종료 할 수있는 루프에는 적어도 하나의 줄 바꿈이 필요합니다..
@
1
$
그렇지 않으면 ... STDERR을 무시하면, 예를 들어 오류로 종료를 허용하면 저장할 수 @
있으며 두 경로 사이를 전환하는 방법이 필요하지 않습니다. 실수로 음수 값 ( -2
) 을 인쇄하려고 할 때까지 계속 읽고 인쇄합니다 . 이를 통해 최소 두 개의 5 바이트 솔루션이 가능합니다.
1,
.$
,_1$.
이 온라인 TM 시뮬레이터에 필요한 규칙 테이블 구문을 사용합니다 . 몇 달 전 Googology Wiki 사용자 블로그에 게시 한 게시물에서 빌 렸습니다.
0 0 1 r *
0 1 0 r *
0 _ _ * halt
print''.join(`1-int(x)`for x in raw_input())
왜 복잡하게 만들거나 치어 리딩 변수를 사용합니까?
print''.join('1-int(x)'for x in'input()')
. 주석 코드에서 백틱을 얻지 못하여 '로 대체했습니다.
`a\`b`
-> a`b
.
전체 프로그램. stdin을 프롬프트합니다.
∊⍕¨~⍎¨⍞
⍞
프롬프트 stdin
⍎¨
각 캐릭터를 실행
~
논리적 NOT
⍕¨
각 문자를 텍스트로 형식화
∊
ε의 NLIST (평탄화)
<kbd>
태그를 영리하게 남용합니다 .
이 함수는 입력으로 이진 문자열 Ans
을 사용하고 지정된대로 출력을 반전 된 (역전되지 않은) 문자열로 반환 하는 함수입니다 . 추가 도움이 not(
필요하면 TI-BASIC 위키에서 목록 애플리케이션을 읽을 수 있습니다 . 컴파일 된 버전이 작기 때문에 사용하고 있습니다.
»*r>Õ¸r
16 진수로 :
BB 2A 72 3E D5 B8 72
설명
»*r
-함수 입력을 문자열로 받아리스트로 변환
>
-리스트를 다음 연산자에게 파이프
Õ¸r
-리스트의 역수를 반환
»*r>Õ¸r
무엇입니까?
expr(Ans:Returnnot(Ans
. 2. 문자열은 쉼표로 구분되지 않고 a로 시작하지 않으므로 {
목록이 아닌 1000010011과 같은 정수로 줄어 듭니다. 3. Return
당신이 쓴 방식으로 작동하지 않습니다; 4. 이것은 문자열이 아닌 목록으로 출력을 제공합니다.
0>~1+:#v_$>:#,_@
^ -1<
빈 스택과 EOF가 모두 -1이라고 가정합니다.
0
널 종료 자로 \ 0을 푸시합니다.
>~1+:#v_
입력 루프이며, ASCII를 읽고, 1을 더하고, EOF + 1 = 0을 확인하고,
^ -1<
그렇지 않으면 1을 빼고 푸시 된 ASCII 값을 스택에 그대로 둡니다.
$>:#,_@
스택의 맨 위에 여분의 0을 복사 한 다음 이진 문자열을 위에서 아래로 인쇄합니다.
빈 스택이 0을 읽는 경우 2 바이트를
>~:1+#v_$>:#,_@
^ -1<
EOF = 0 인 경우 동일한 알고리즘을 사용하여 약 15 바이트 버전이 가능하지만 테스트하기에 편리한 구현은 없습니다.
'a#@~-,
모든 문자 c
에 대해, 입력에서 ASCII 값을 가진 문자를 인쇄합니다 94 - c
. 여기서 94는 '0'+ '1'또는 'a'
Methinks 파이썬은 이것에 가장 적합한 언어가 아닙니다. :)
for i in input():print(1-int(i),end='')
출력 후에 줄 바꿈이 필요한 경우 43 자 대안이 있습니다.
print(''.join("01"[i<"1"]for i in input()))
end=''
단지가 ,
:) 할 것입니다 - 당신이 걱정하지 않는 한이 공백 인하지에 대해
print
함수는 end
매개 변수를 조정하여 각 인쇄가 끝날 때 줄 바꿈을 억제 해야합니다 . 또한 OP의 사양에 따르면 공백이 없어야한다고 생각합니다. :) 댓글 주셔서 감사합니다!
J 부울 값은 정수로 표현 0
하고 1
도 물론 배열에 유효한 지표이다 (이 경우, 2 문자 배열 '01'
)
'01'{~'0'&=