Đảo ngược sự thật


22

Viết chương trình hoặc hàm:

  1. lấy một chuỗi từ stdio hoặc đối số
  2. thay thế tất cả các lần xuất hiện của truevới falsefalsevớitrue
  3. đảo ngược nó, nhưng không đảo ngược truefalse
  4. trả về hoặc in kết quả

Ví dụ (bên trái là đầu vào):

"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"

Tiêu chuẩn áp dụng. Đây là , vì vậy mã ngắn nhất tính bằng byte thắng.

Bảng xếp hạng


Trong Bước 3, chỉ cần một thay thế, hoặc tất cả các lần xuất hiện phải được thay thế? ví dụ true true false falsetrở thành true true false falsehay true eslaf false eurt?
gaborsch

Nên eurttrở thành falsehay true?
Zereges

@Zereges Không phải là sai hay đúng trước khi nó bị đảo ngược, vì vậy: eurt->true
Hannes Karppila

@HannesKarppila Vì vậy, các quy tắc được áp dụng theo thứ tự:1 3 2 4 5
Zereges

3
Điều này cũng có nghĩa là trufalse -> trueurt?
Adnan

Câu trả lời:


12

C # 6, 144 byte

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

Nó sử dụng một biểu thức chính quy để khớp true|falsevà nếu nó khớp truethì nó sẽ được thay thế bằng eslaf, nếu không thì bằng eurt. m.Value[0]<'g'là một cách ngắn hơn để nói m.Value[0]=="false", bởi vì các giá trị duy nhất có thể m.Value"true"hoặc "false", vì vậy nếu mã char của char đầu tiên nhỏ hơn mã char của 'g'"false".

Phiên bản cũ, 95 byte

Cái này có một lỗi, nó không trả về đầu ra chính xác cho falstrue.

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

15
Giải pháp AC # dưới 100 byte? Chắc chắn ngày kết thúc là khi chúng ta.
Alex A.

@AlexA. Haha, tất cả là nhờ phiên bản 6; P
Chương trìnhFOX

1
Điều này không hoạt động chính xác cho đầu vào falstrue.
frageum

2
@AlexA. Chà, với đầu ra không chính xác cho falstruecố định, nó không còn <100 byte ... :(
Chương trìnhFOX

14
Trong khi điều đó thực sự đáng buồn, điều đó có nghĩa là chúng ta không còn phải lo lắng về ngày tận thế. Lỗi phần mềm đã cứu tất cả chúng ta.
Alex A.

7

TeaScript , 36 25 24 byte

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

TeaScript là JavaScript để chơi gôn.

Chỉnh sửa: Đã lưu 11 byte nhờ @ Vɪʜᴀɴ. Đã sửa lỗi cho đầu vào falstruevà lưu một byte.

Phiên bản cũ (Không hợp lệ):

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

Giải trình:

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.

Nếu bạn sử dụng lithay vì tf, bạn có thể .sử dụng s. f cũng được xác định trước để falsebạn có thể nhận được:xv¡g(l="eurt",i=f+¢)g(iv¡,lv¡)
Downgoat

Thực tế thậm chí còn tốt hơn:xv¡g("eurt",f)g(f.T¡v¡,t)
Downgoat

@ Vɪʜᴀɴ Cảm ơn sự giúp đỡ. đã không thấy điều đó trong các tài liệu. Nó sẽ có thể tự động chèn (sau khi phương thức? Thích replace(/(\.[BcCdeE...])/g,"$1(")hoặc tương tự sau khi chèn thời gian.
intrepidcoder

1
Điều này không hoạt động chính xác cho đầu vào falstrue.
frageum

@feersum Đã sửa. Cảm ơn đã chỉ ra rằng. Đó là khó khăn.
intrepidcoder

7

Bash + GNU, 45 38 73 byte

Chỉnh sửa: hoạt động với cả hai trufalsefalstrue

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

Phiên bản cũ , 38 byte (rút ngắn, nhờ Digital Trauma):

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

1
Kết hợp các biểu thức sed thành một và loại bỏ "-e" và trích dẫn:rev|sed s/eurt/false/g\;s/eslaf/true/g
Chấn thương kỹ thuật số

2
Điều này không hoạt động chính xác cho đầu vào falstrue.
frageum

@feersum Điểm tốt, cố định. Cũng đã kiểm tra trufalse.
gaborsch

6

JavaScript ES6, 59

Là một chức năng ẩn danh.

Lưu ý, thay thế được sử dụng như một cách viết tắt cho trận đấu (). Map (). Chuỗi thay thế bị loại bỏ và chuỗi đầu ra được tạo thành từng mảnh ngược (vì vậy không cần phải đảo ngược).

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

Kiểm tra chạy đoạn mã dưới đây trong trình duyệt tuân thủ 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>


Đến đây để đăng giải pháp 62 byte tuyệt vời ... đã tìm thấy giải pháp 59 byte đáng kinh ngạc. +1
Sản phẩm ETH

5

Batch Windows, 184 213 byte

Đã sửa lỗi falstrue -> falseslaftrufalse -> trueurt

Có lẽ là một trong những ngôn ngữ ít phổ biến hơn:

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
Điều này không hoạt động chính xác cho đầu vào falstrue.
frageum

@feersum, đã sửa nó :)
Adnan

5

Haskell, 94 byte

Thực hiện khớp mẫu trên chuỗi đầu vào, tìm kiếm "false" hoặc "true" và nối ngược lại với kết quả của việc áp dụng hàm trên phần còn lại của chuỗi. Nếu đúng hoặc sai không được tìm thấy, nó sử dụng đệ quy để đảo ngược chuỗi theo cùng một kiểu.

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]

Đã thêm ngay bây giờ, xin lỗi về điều đó
Craig Roy

Đừng bận tâm. Có vẻ như tôi đã phạm một số sai lầm khi cố gắng kiểm tra nó. Có lẽ tôi chỉ đơn giản là in ra chuỗi mà không quản lý để áp dụng chức năng cho nó.
frageum

Tôi tin rằng bạn có thể lấy f[]=[]dòng trên cùng và thay vào đó đặt f x=xở dưới cùng để tiết kiệm một byte.
Michael Klein

4

JavaScript ES6, 95 93 byte

Hàm không tên. Thêm f=vào đầu để sử dụng nó. Cảm ơn Ismael! Cũng giả sử rằng đầu vào không chứa các tab.

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

Bạn có thể sử dụng .replace(/eurt/g,false).replace(/eslaf/g,true), vì chúng sẽ được chuyển đổi thành chuỗi. Hãy thử true + ''(nên quay lại 'true')
Ismael Miguel

3
CHỜ ĐỢI!!! Thay đổi falsevới !1truevới !0. Ở đó, ngắn hơn vài byte
Ismael Miguel

3
@IsmaelMiguel whoa cảm ơn !!!!
Conor O'Brien

1
Tôi nghĩ bạn cũng có thể sử dụng [...x]thay vì x.split ''
Downgoat

2
67 : x=>[...x].reverse().join``[r='replace'](/eurt/g,!1)[r](/eslaf/g,!0). Tôi cũng đã thay đổi param tham gia thành một chuỗi mẫu trống để tạo ra các dấu phẩy mảng.
Mama Fun Roll

2

Bình thường, 30 byte

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

Điều này đảo ngược đầu vào ( _z), thay thế "eurt"cho "false""eslaf"cho "true". Thay thế được thực hiện bằng cách sử dụng :.

Dùng thử trực tuyến


Bạn có thể khai báo "true""false"như một biến : =d"true"=k"false"::_z_dk_kd, và sử dụng ngược lại của nó. Nó sẽ tiết kiệm 3 byte.
Ad Nam


5
Điều này không hoạt động chính xác cho đầu vào falstrue.
frageum


2

Julia, 59 55 46 byte

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

Điều này tạo ra một hàm không tên chấp nhận một chuỗi và trả về một chuỗi. Để gọi nó, đặt tên cho nó, vd f=s->....

Đầu vào được đảo ngược bằng cách sử dụng reverse. Chúng tôi khớp với biểu thức chính quy eurt|eslafkhớp truehoặc falsengược. Đối với trận đấu, chúng tôi áp dụng một hàm trả về truenếu trận đấu nhỏ hơn về mặt từ vựng so với et(nghĩa là eslaf) và falsengược lại. Các chữ boolean được chuyển đổi thành chuỗi trong đầu ra.

Đã lưu 9 byte và khắc phục sự cố nhờ Glen O!


2
Tôi không tin rằng điều này hoạt động chính xác cho đầu vào falstrue.
frageum

Nó sử dụng cùng một lý do cơ bản, vì vậy tôi sẽ cung cấp cho bạn: s->replace(reverse(s),r"eurt|eslaf",i->i<"et")- sử dụng một biểu thức chính thay vì thực hiện hai lần và một chức năng để thay thế đánh giá truenếu đó là "elsaf" và falsenếu đó là "eurt". 46 byte.
Glen O

Oh, và nó cũng khắc phục falstruevấn đề.
Glen O

@GlenO Thật tuyệt, cảm ơn
Alex A.

@feersum Đã sửa ngay bây giờ
Alex A.

2

Javascript, 135 byte

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

Kiểm tra:

=>"sai là trái ngược với đúng"

<="đúng cho etisoppo eht si sai"

Cảm ơn Chương trìnhFOX và edc65 đã chỉ ra một lỗi!


Chào mừng bạn đến với Câu đố lập trình & Code Golf! Câu hỏi yêu cầu một chương trình đầy đủ hoặc một hàm, vì vậy không chỉ là một đoạn mã giả định rằng một biến stồn tại. Ngoài ra, mã của bạn không hoạt động cho falstrue: nó nên xuất ra falseslaf, không trueslaf. Bạn có muốn khắc phục những vấn đề này? Cảm ơn! :)
Chương trìnhFOX

@ProgramFOX Cảm ơn bạn! Tôi sẽ hiểu đúng về điều đó!
Fuzzyzilla

1
Bạn có thể lưu một vài byte nếu bạn sử dụng ES6, nó có cú pháp hàm mũi tên này : f=s=>s.split(""). ....
Chương trìnhFOX

Điều này là quá phức tạp và sai. Kiểm tra với 'false1' hoặc 'true0' hoặc 'true1'
edc65

@ edc65 Tại sao cảm ơn bạn, loại thưa ông!
Fuzzyzilla

2

Java, 162 98 92 byte

Cảm ơn (và xin lỗi! ~) Cho @DanielM. đã cho tôi biết về StringBuffer và thực tế là chúng ta có thể sử dụng các hàm!

Bởi vì, bạn biết đấy, Java.

s -> ("" + StringBuffer mới (s.replaceAll ("false", "eurt")). Reverse ()). thayTất cả ("eurt", "false");

Trả về chuỗi chính xác, đảo ngược.

Phiên bản Ungolfed:

s-> StringBuilder mới (
    s.replaceAll ("sai", "eurt"))
    .reverse (). toString (). thayTất cả ("eurt", "false");

Về cơ bản, tôi thay thế tất cả các trường hợp "sai" bằng "đúng" ngược, sau đó đảo ngược toàn bộ chuỗi và sau đó thay thế các phiên bản ngược lại của "đúng" (không phải phiên bản tôi vừa thay thế) bằng "sai". Dễ như ăn bánh.


StringBuffer là một byte ngắn hơn. Ngoài ra, chức năng được cho phép.
Daniel M.

Tôi đang chuẩn bị một câu trả lời khác bằng một ngôn ngữ khác, vì vậy bạn có thể giữ câu này
Daniel M.

Điều returnnày tiềm ẩn khi giao dịch với lambdas một dòng
Daniel M.

4
Java đánh bại Python? Bây giờ chắc chắn kết thúc đã đến với chúng ta
Downgoat

1
@GaborSch Tiện lợi. : P Cảm ơn!
Addison Crump


1

Con trăn 3, 68 100 byte

Tôi vẫn đang chơi nó, nhưng nó đã sửa lỗi, falstrue -> falselsaftrufalse -> trueurt

Khá đơn giản:

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

3
Điều này không hoạt động chính xác cho đầu vào falstrue.
frageum

Điều này có thể dễ dàng khắc phục bằng cách chuyển đổi các câu lệnh thay thế ( print(input()[::-1].replace("eslaf","true").replace("eurt","false")))
Beta Decay

@BetaDecay, điều đó sẽ không hoạt động, bởi vì trufalsetrở thành trufalse, trong khi nó cần phải cótrueurt
Adnan

@Adriandmen Tuy nhiên, đó không phải là một trong những ví dụ I / O vì vậy nó sẽ đủ cho đến bây giờ :)
Beta Decay

@BetaDecay Haha, họ sẽ không chú ý :)
Adnan

1

Japt, 26 byte

Lưu ý: Điều này có thể không hợp lệ, vì nó yêu cầu sửa lỗi được thực hiện sau khi thử thách này được đăng.

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

Hãy thử nó trong phiên dịch trực tuyến ! (Chức năng mũi tên yêu cầu trình duyệt tương thích ES6, chẳng hạn như Firefox.)

Làm thế nào nó hoạt động

             // 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

Đây là phiên bản hoạt động trước khi sửa lỗi: (38 byte)

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


1

Bình thường, 28 22

Amr`!dZ2jHjLGcR_Hc_z_G

6 byte nhờ Jakube

Hoạt động chính xác cho falstrue, như thể hiện trong bộ dưới đây.

Bộ kiểm tra


Không, tôi nghĩ rằng tôi đã làm sai. Bạn giải pháp 22 byte là chính xác.
Jakube

1

Haskell, 102 byte

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

Việc thay thế "true" bằng "false" và ngược lại khá dài với khớp mẫu, nhưng ít nhất nó xử lý chính xác với "falstrue" và tương tự. Và bên cạnh đó, tôi nghi ngờ rằng một phiên bản dựa trên regex chính xác sẽ dài hơn một chút.


1

Python 3 - 108 92 byte

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

Sử dụng biểu thức chính để khớp với "đúng" hoặc "sai" và sử dụng lambda để xử lý kết quả khớp và chọn sử dụng làm chuỗi thay thế. Sử dụng repr sẽ biểu diễn chuỗi của (len (khớp)> 4) cho ra "Đúng" khi "false" được khớp và ngược lại (và sử dụng .lower () vì repr (bool) đưa ra một chuỗi viết hoa) để có được nghịch đảo của trận đấu và kết thúc bằng cách đảo ngược sự thay thế và sau đó là đầu vào được xử lý bằng [:: - 1]

Quản lý để có được độ dài xuống 16 byte từ các đề xuất của TFelds.

Chỉnh sửa: Python đã trở lại trước java, không cần báo động.


5
Chúng tôi yêu cầu ở đây các chương trình hoạt động cho tất cả các đầu vào, không chỉ cho các trường hợp thử nghiệm nhất định.
lirtosiast

Bạn có thể lưu 6 byte bằng cách đảo ngược chuỗi trước, sau đó thay thế (lưu một chuỗi [::-1]) print(re.compile("eslaf|eurt").sub(lambda m:repr(m.group(0)!="eurt").lower(),input()[::-1]))
TFeld

Bạn cũng có thể thoát khỏi việc không sử dụng re.compile print(re.sub("eslaf|eurt",lambda m:repr(m.group(0)!="eurt").lower(),input()[::-1])) Thay đổi m.group(0)!="eurt"thành len(m.group(0))>4(thêm 1 lần nữa)
TFeld


1

Prolog, 225 byte

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).

Dùng thử trực tuyến tại đây
Chạy bằng cách truy vấn theo cách sau:

p("falstrue").

0

Ruby, 55 byte

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

Kiểm tra:

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

0

Perl 5, 68 byte

67 cộng 1 -Ethay cho-e

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

0

OpenSCAD, 178 byte

(Lưu ý rằng điều này sử dụng thư viện Lý thuyết chuỗi , vì OpenSCAD không chính xác có thư viện chuẩn. Ngoài ra, đây là một chức năng vì đầu vào được phép duy nhất là mã hóa cứng.

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 byte

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);}}

Đây là bài đăng đầu tiên (thực sự) của tôi - Tôi đã thấy ai đó sử dụng c # ở trên không bao gồm: sử dụng hệ thống; lớp P {}, static void main (), Console.WriteLine (); hoặc Console.ReadLine ();. Chúng rõ ràng chiếm rất nhiều byte đối với tôi - nếu có cách chơi golf đó hoặc nếu nó bị loại trừ khỏi môn đánh gôn - hãy cho tôi biết :)
Belfield

0

PHP, 60 byte

Đơn giản, đảo ngược chuỗi trước, sau đó thay thế các phiên bản đảo ngược bằng các giao dịch hoán đổi tương ứng của chúng.

"falstrue" trở thành "eurtslaf" trở thành "falseslaf".

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

0

Perl 5.10, 54 byte

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

Đảo ngược, sau đó thay thế. Một cách khác để làm điều đó ngoài bảng băm được sử dụng cho câu trả lời Perl khác, kết thúc là ngắn hơn!

Hãy thử trực tuyến.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.