진실을 뒤집다


22

다음과 같은 프로그램이나 기능을 작성하십시오.

  1. stdio 또는 인수에서 문자열을받습니다.
  2. 모든 항목 대체 truefalsefalse와를true
  3. 그것을 반전,하지만 반대하지 않습니다 truefalse
  4. 결과를 반환하거나 인쇄합니다

예 (왼쪽이 입력 됨) :

"true"                     "false"
"2false"                   "true2"
"true is false"            "true si false"
"false,true,undefined"     "denifednu,false,true"
"stressed-false"           "true-desserts"
"falstrue"                 "falseslaf"
"true false true x"        "x false true false"

표준 허점이 적용됩니다. 이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.

리더 보드


3 단계에서 한 번의 교체 만 필요합니까 아니면 모든 발생을 교체해야합니까? 예를 들면 true true false false하게 true true false falsetrue eslaf false eurt?
gaborsch

해야이 eurt되었다 falsetrue?
Zereges

@Zereges 그것은 반전되기 전에 거짓 또는 사실이 아니므로, eurt- :true
Hannes Karppila

@HannesKarppila 따라서, 규칙은 순서대로 적용됩니다 :1 3 2 4 5
Zereges

3
이것도 의미합니까 trufalse -> trueurt?
Adnan

답변:


12

C # 6, 144 바이트

string R(string t)=>string.Concat(new System.Text.RegularExpressions.Regex("true|false").Replace(t,m=>m.Value[0]<'g'?"eurt":"eslaf").Reverse());

정규식을 사용하여 일치 true|false시키고 일치 true하면으로 대체되고 eslaf그렇지 않으면 로 대체 됩니다 eurt. m.Value[0]<'g'말하는 짧은 방법은 m.Value[0]=="false"유일한 가능한 값이 있기 때문에, m.Value있습니다 "true"또는 "false"첫 번째 문자의 문자 코드의 문자 코드보다 작은 그렇다면 'g', 그것은이다 "false".

이전 버전, 95 바이트

이것에는 버그가 있었고에 대한 올바른 출력을 반환하지 않았습니다 falstrue.

string R(string t)=>string.Concat(t.Reverse()).Replace("eurt","false").Replace("eslaf","true");

15
100 바이트 미만의 AC # 솔루션? 분명히 끝이 우리에게 있습니다.
Alex A.

@AlexA. 하하, 모든 버전 6 덕분에; P
ProgramFOX

1
입력에 대해서는 제대로 작동하지 않습니다 falstrue.
feersum

2
@AlexA. 글쎄, falstrue고정에 대한 잘못된 출력으로 , 더 이상 100 바이트가 아닙니다 ... :(
ProgramFOX

14
그것은 슬프지만, 더 이상 종말에 대해 걱정할 필요가 없다는 것을 의미합니다. 소프트웨어 버그로 우리 모두를 구했습니다.
Alex A.

7

티 스크립트 , 36 25 24 바이트

xv¡g("eurt|eslaf",#ln>4)   

TeaScript는 골프를위한 JavaScript입니다.

편집 : @ Vɪʜᴀɴ 덕분에 11 바이트가 절약되었습니다. 입력 고정 falstrue및 바이트 저장

이전 버전 (잘못된) :

xv¡g("eurt",f)g(f.T¡v¡,t)

설명:

x    // Input
 v¡    // Reverse
   g("eurt",    // Global replace "eurt" with "false".
            f)    // f is predefined to false.
              g(f.T¡v¡, // Convert false to string, then reverse.
                       t) // t is predefined to true.

당신이 사용하는 경우 li대신 t하고 f, 당신은 ommit 수 .들. f는 다음과 같이 미리 정의되어 false있습니다.xv¡g(l="eurt",i=f+¢)g(iv¡,lv¡)
Downgoat

실제로 더 나은 :xv¡g("eurt",f)g(f.T¡v¡,t)
Downgoat

@ Vɪʜᴀɴ 도와 주셔서 감사합니다. 문서에서 그것을 보지 못했습니다. (방법 후에 자동 삽입이 가능 합니까? 추천 replace(/(\.[BcCdeE...])/g,"$1(")또는 기간을 삽입 한 후 유사한.
intrepidcoder

1
입력에 대해서는 제대로 작동하지 않습니다 falstrue.
feersum

@feersum 수정되었습니다. 지적 해 주셔서 감사합니다. 까다로웠다.
intrepidcoder

7

Bash + GNU, 45 38 73 바이트

편집 : 모두 trufalse와 함께 작동falstrue

sed s/false/%eurt%/g\;s/true/%eslaf%/g|rev|sed "s/%\(true\|false\)%/\1/g"

이전 버전 , 38 바이트 (Digital Trauma 덕분에 단축 됨) :

rev|sed s/eurt/false/g\;s/eslaf/true/g

1
sed 표현을 하나로 결합하고 "-e"와 따옴표를 제거하십시오.rev|sed s/eurt/false/g\;s/eslaf/true/g
Digital Trauma

2
입력에 대해서는 제대로 작동하지 않습니다 falstrue.
feersum

@feersum 좋은 지적, 고정. 또한 확인했습니다 trufalse.
gaborsch

6

자바 스크립트 ES6, 59

익명의 기능으로.

replace는 match (). map ()의 속기처럼 사용됩니다. 대체 된 문자열은 버려지고 출력 문자열은 한 조각 씩 거꾸로 만들어집니다 (반복 할 필요 없음).

s=>s.replace(/false|true|./g,x=>s=(x[1]?x<'t':x)+s,s='')&&s

EcmaScript 6 호환 브라우저에서 아래 스 니펫을 테스트하십시오.

f=s=>s.replace(/false|true|./g,x=>s=(x[1]?x<'t':x)+s,s='')&&s

//test

console.log=x=>O.innerHTML+=x+'\n'

;[
 ["true","false"]
,["falstrue","falseslaf"]  
,["1false","true1"]
,["true is false","true si false"]
,["false,true,undefined","denifednu,false,true"]
,["stressed-false","true-desserts"]
,["true false true x","x false true false"]
].forEach(t=>console.log(t[0]+' -> '+f(t[0])))
<pre id=O></pre>


놀라운 62 바이트 솔루션을 발견하기 위해 여기에 왔습니다. 놀라운 59 바이트 솔루션을 발견했습니다. +1
ETHproductions

5

Windows 배치, 184213 바이트

버그를 고정, falstrue -> falseslaf그리고trufalse -> trueurt

아마도 덜 인기있는 언어 중 하나입니다.

setlocal enabledelayedexpansion
set /p Q=
set N=0
:L
call set T=%%Q:~%N%,1%%%
set /a N+=1
if not "%T%" equ "" (
set R=%T%%R%
goto L
)
set R=%R:eurt=false%
set R=%R:eslaf=true%
set R=%R:falstrue=falseslaf%
echo %R%

1
입력에 대해서는 제대로 작동하지 않습니다 falstrue.
feersum

@feersum, 고정 :)
Adnan

5

하스켈, 94 바이트

입력 문자열에서 패턴 일치를 수행하여 "false"또는 "true"를 찾고 나머지 문자열에 함수를 적용한 결과에 반대를 추가합니다. true 또는 false를 찾을 수 없으면 재귀를 사용하여 동일한 방식으로 문자열을 되돌립니다.

f[]=[]
f('t':'r':'u':'e':s)=f s++"false"
f('f':'a':'l':'s':'e':s)=f s++"true"
f(x:s)=f s++[x]

미안, 이제 추가
크레이그 로이

신경 쓰지 마. 테스트하려고 할 때 실수를 한 것 같습니다. 아마도 함수를 적용하지 않고 단순히 문자열을 인쇄했을 수도 있습니다.
feersum

나는 당신이 최상위 f[]=[]줄을 취할 수 있고 대신 f x=x바이트를 저장하기 위해 맨 아래에 놓을 수 있다고 생각합니다 .
Michael Klein

4

자바 스크립트 ES6, 95 93 바이트

명명되지 않은 기능. f=처음에 추가 하여 사용하십시오. 감사합니다 이스마엘! 또한 입력에 탭이 포함되어 있지 않다고 가정합니다.

x=>[...x[r="replace"](/false/g,"\teslaf")[r](/(\t)*true/g,"eurt")[r](/\t/g,"")].reverse().join``

.replace(/eurt/g,false).replace(/eslaf/g,true)문자열로 변환되므로을 사용할 수 있습니다 . 시도 true + ''(반환해야합니다 'true')
이스마엘 미구엘

3
기다림!!! 변경 false!1true함께 !0. 거기에 몇 바이트 더 짧은
Ismael Miguel

3
트윗 담아 가기
Conor O'Brien

1
[...x]x.split 대신 사용할 수도 있어야한다고 생각합니다 ''
Downgoat

2
67 : x=>[...x].reverse().join``[r='replace'](/eurt/g,!1)[r](/eslaf/g,!0). 또한 배열 쉼표를 제거하기 위해 조인 매개 변수를 빈 템플릿 문자열로 변경했습니다.
Mama Fun Roll

2

Pyth, 30 바이트

::_z"eurt""false""eslaf""true"

이것은 입력을 반대로합니다 (_z ) 대체품 "eurt""false""eslaf""true". 를 사용하여 교체가 완료됩니다 :.

온라인으로 사용해보십시오


및를 변수로 선언 "true"하고 그 반대를 사용할 수 있습니다. 3 바이트를 절약합니다. "false"=d"true"=k"false"::_z_dk_kd
Adnan


5
This does not work correctly for the input falstrue.
feersum


2

Julia, 59 55 46 bytes

s->replace(reverse(s),r"eurt|eslaf",i->i<"et")

This creates an unnamed function that accepts a string and returns a string. To call it, give it a name, e.g. f=s->....

The input is reversed using reverse. We match on the regular expression eurt|eslaf which matches true or false backwards. To the match we apply a function that returns true if the match is lexicographically smaller than et (i.e. eslaf) and false otherwise. The boolean literals are converted to string in the output.

Saved 9 bytes and fixed an issue thanks to Glen O!


2
I don't believe this works correctly for the input falstrue.
feersum

It's using the same basic reasoning, so I'll offer it to you: s->replace(reverse(s),r"eurt|eslaf",i->i<"et") - uses a regex rather than doing it twice, and a function for the replace that evaluates to true if it was "elsaf" and to false if it was "eurt". 46 bytes.
Glen O

Oh, and it also fixes the falstrue issue.
Glen O

@GlenO That's great, thanks
Alex A.

@feersum Fixed now
Alex A.

2

Javascript, 135 Bytes

function(s){return s.split("").reverse().join("").replace(/eslaf/i,'☺').replace(/eurt/i,'☻').replace(/☻/g,!1).replace(/☺/g,!1)}

Test:

=>"false is the opposite of true"

<="true fo etisoppo eht si false"

Thanks ProgramFOX and edc65 for pointing out a bug!


Welcome to Programming Puzzles & Code Golf! The question requests a full program or a function, so not just a code snippet that assumes that a variable s exists. Also, your code does not work for falstrue: it should output falseslaf, not trueslaf. Do you want to fix these issues? Thanks! :)
ProgramFOX

@ProgramFOX Thank you! I'll get right on that!
Fuzzyzilla

1
You can save a few bytes if you use ES6, it has this arrow-function syntax: f=s=>s.split(""). ....
ProgramFOX

This is both overly complex and wrong. Test with 'false1' or 'true0' or 'true1'
edc65

@edc65 Why thank you, kind sir!
Fuzzyzilla

2

Java, 162 98 92 bytes

Thanks (and sorry!~) to @DanielM. for telling me about StringBuffer and the fact that we can use functions!

Because, you know, Java.

s->(""+new StringBuffer(s.replaceAll("false","eurt")).reverse()).replaceAll("eurt","false");

Returns the correct, reversed string.

Ungolfed Version:

s->new StringBuilder(
    s.replaceAll("false","eurt"))
    .reverse().toString().replaceAll("eurt","false");

Basically, I replace all instances of "false" with a backwards "true", then reverse the entire string, and then replace the now backwards versions of "true" (not the ones I just replaced) with "false". Easy peasy.


StringBuffer is a byte shorter. Also, functions are allowed.
Daniel M.

I'm preparing another answer in a different language, so you can keep this
Daniel M.

The return is implicit when dealing with one-line lambdas
Daniel M.

4
Java beat Python? Now surely the end is upon us
Downgoat

1
@GaborSch Nifty. :P Thanks!
Addison Crump

1

Mathematica, 64 bytes

StringReverse@#~StringReplace~{"eurt"->"false","eslaf"->"true"}&

1

Python 3, 68 100 bytes

I'm still golfing it, but it's fixed to the bug, so falstrue -> falselsaf and trufalse -> trueurt

Pretty straightforward:

print(input()[::-1].replace("eurt","false").replace("eslaf","true").replace("falstrue","falseslaf"))

3
This does not work correctly for the input falstrue.
feersum

This can be easily remedied by switching the replace statements (print(input()[::-1].replace("eslaf","true").replace("eurt","false")))
Beta Decay

@BetaDecay, that will not work, because trufalse becomes trufalse, while it needs to be trueurt
Adnan

@Adriandmen However, that's not one of the example I/Os so it will suffice for now :)
Beta Decay

@BetaDecay Haha, they won't notice :)
Adnan

1

Japt, 26 bytes

Note: This may be invalid, as it requires bug fixes made after this challenge was posted.

Uw r"eurt|eslaf",X=>X<"et"

Try it in the online interpreter! (Arrow function requires ES6-compliant browser, such as Firefox.)

How it works

             // Implicit: U = input string
Uw r         // reverse U, then replace:
"eurt|eslaf" // occurrences of either "eurt" or "eslaf"
X=>X<"et"    // with "false" or "true", respectively
             // Implicit: output last expression

Here's a version that worked before the bug fixes: (38 bytes)

Uw $.replace(/eurt|eslaf/g,X=>X<"et")$


1

Pyth, 28 22

Amr`!dZ2jHjLGcR_Hc_z_G

6 bytes thanks to Jakube

Works correctly for falstrue, as shown in the suite below.

Test suite


No, I think I made a mistake. You 22 byte solution is correct.
Jakube

1

Haskell, 102 bytes

h('t':'r':'u':'e':s)="eslaf"++h s
h('f':'a':'l':'s':'e':s)="eurt"++h s
h(x:s)=x:h s
h[]=""
r=reverse.h

The replacement of "true" by "false" and vice-versa is quite lengthy with the pattern-matching, but at least it deals correctly with "falstrue" and the like. And besides, I suspect that a correct regex-based version would be a bit longer.


1

Python 3 - 108 92 bytes

import re
print(re.sub("eslaf|eurt",lambda m:repr(len(m.group(0))>4).lower(),input()[::-1]))

Uses a regex to match on "true" or "false" and uses a lambda to process matches and choose what to use as a replacement string. Using repr gets the string representation of (len(match)>4) which gives "True" when "false" is matched and vice versa (and use .lower() because repr(bool) gives a capitalized string) to get the inverse of the match and finish up by reversing the replacement and then the processed input using [::-1]

Managed to get the length down 16 bytes from TFelds suggestions.

Edit: Python is back in front of java, no need for alarm.


5
We require here that programs work for all inputs, not just for the given test cases.
lirtosiast

You can save 6 bytes by reversing the string first, and then replacing (saving one [::-1]) print(re.compile("eslaf|eurt").sub(lambda m:repr(m.group(0)!="eurt").lower(),input()[::-1]))
TFeld

You can also get away with not using re.compile print(re.sub("eslaf|eurt",lambda m:repr(m.group(0)!="eurt").lower(),input()[::-1])) Change m.group(0)!="eurt" to len(m.group(0))>4 (for 1 more)
TFeld


1

Prolog, 225 bytes

p(X):-string_to_list(X,L),reverse(L,B),q(B,C),string_to_list(Z,C),write(Z),!.
q([],[]).
q([101,117,114,116|T],[102,97,108,115,101|L]):-q(T,L).
q([101,115,108,97,102|T],[116,114,117,101|L]):-q(T,L).
q([H|T],[H|L]):-q(T,L).

Try it out online here
Run by querying in the following way:

p("falstrue").

0

Ruby, 55 bytes

->s{s.gsub(/true|false/){$&[?t]?:eslaf: :eurt}.reverse}

Test:

->s{s.gsub(/true|false/){$&[?t]?:eslaf: :eurt}.reverse}["false,true,undefined"]
=> "denifednu,false,true"

0

Perl 5, 68 bytes

67 plus 1 for -E instead of -e

%a=(false,eurt,true,eslaf);say~~reverse<>=~s/false|true/$a{$&}/gr

0

OpenSCAD, 178 bytes

(Note that this uses the String Theory library, as OpenSCAD doesn't exactly have a standard library. Additionally, this is a function because the only allowed input is to hard-code it.

use <Strings.scad>;function f(a)=contains(g(a),"eurt")?replace(g(a),"eurt","false"):g(a);function g(a)=contains(reverse(a),"eslaf")?replace(reverse(a),"eslaf","true"):reverse(a);

0

C#, 260 bytes

using System;class P{static void Main(){var y=Console.ReadLine();char[] n=y.ToCharArray();Array.Reverse(n);var s=new string(n);if(s.Contains("eslaf")){s=s.Replace("eslaf","true");}if(s.Contains("eurt")){s=s.Replace("eurt","false");}Console.WriteLine(s);}}

This is my first (real) post - I've seen someone using c# above didn't include: using system; class P{ }, static void main(), Console.WriteLine(); or Console.ReadLine();. These obviously take on a lot of bytes for me - if there is a way of golfing that or if it is excluded from code-golf - let me know :)
Belfield

0

PHP, 60 bytes

Simple, reverses the string first, then replaces the reversed versions with their respective swaps.

"falstrue" becomes "eurtslaf" becomes "falseslaf".

<?=strtr(strrev($argv[1]),{'eurt'=>'false','eslaf'=>'true'})

0

Perl 5.10, 54 bytes

$_=reverse<>;s/(eurt)|(eslaf)/$1?"false":"true"/eg;say

Reverse, then replace. A different way of doing it besides the hash table used for the other Perl answer, which ends up being shorter!

Try it online.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.