Máy phát mã C cũ *


13

* Máy phát điện là gì?

Trong ngôn ngữ lập trình C , có các thành phần được gọi là sơ đồ và biểu đồ là các chuỗi hai và ba ký tự đánh giá các ký tự ít phổ biến hơn. Ví dụ: bạn có thể sử dụng ??-nếu bàn phím của bạn không có ~.

Đưa ra văn bản, thay thế tất cả các trường hợp của các bản vẽ và chữ viết sau (bên trái) bằng ký tự chính xác, ngắn hơn, được đánh golf (bên phải).

??=  #
??/  \
??'  ^
??(  [
??)  ]
??!  |
??<  {
??>  }
??-  ~
<:   [
:>   ]
<%   {
%>   }
%:   #

Nguồn

Đầu vào

Đầu vào là văn bản ASCII. Trailing newline cho phép. Không cần phải là mã C hợp lệ.

Đầu ra

Đầu ra là cùng một văn bản, với tất cả các phiên bản của các bản vẽ và chữ viết trên được thay thế bằng phiên bản rút gọn, được đánh giá từ trái sang phải. Trailing newline cho phép. Không cần phải là mã C hợp lệ.

Các trường hợp thử nghiệm

=> tách đầu vào và đầu ra.

if (true ??!??! false) { => if (true || false) {

??-arr.indexOf(n) => ~arr.indexOf(n)

function f(??) { console.log('test??'); } => function f(] { console.log('test^); }

/* comment :> :) *??/ => /* comment ] :) *\

%:What am I doing??!!??` => `#What am I doing|!??

??(??)??(??) <:-- not a palindrome => [][] [-- not a palindrome

?????????? => ??????????

int f(int??(??) a) ??< return a??(0??)??'a??(1??) + "??/n"; ??> => int f(int[] a) { return a[0]^a[1] + "\n"; }

??<:>??<% => {]{%

<:> => [>

<::> => []

:>> => ]>

#\^[]|{}~ => #\^[]|{}~

: > => : >

??=%: => ##

3
Vui lòng xóa `s khỏi các ví dụ. Nó làm cho chúng rất khó đọc.
caird coinheringaahing

4
"??=%:"là một trường hợp thử nghiệm liên quan: trong C, điều này có nghĩa là "#%:"nơi %:không phải là đặc biệt, nhưng tôi nghĩ rằng sản lượng dự kiến của bạn là "##".
hvd

@ Satan'sSon sẽ làm, ban đầu tôi không có nó trong một khối mã để làm cho đầu vào / đầu ra dễ đọc hơn nhưng Riker đã thay đổi nó. Vui lòng chỉnh sửa nội dung như định dạng bản thân vào lần tới :)
Stephen

1
Vì vậy, bạn đang yêu cầu mã golf để mã golf. Thưởng golf :-)
Cột

@Mast đó là ý tưởng
Stephen

Câu trả lời:


5

Võng mạc , 65 byte

T`-=/'()!<>?`~#\\^[]|{}_`\?\?[-=/'()!<>]
<:
[
:>
]
<%
{
>%
}
%:
#

Hãy thử trực tuyến! Thơi khó sử dụng nhưng vẫn tiết kiệm cho tôi 14 byte.


Bạn có thể làm được \?\?[^:%]không
Sản phẩm ETH

( \?\?[^:%?]đúng hơn)
Sản phẩm ETH

@ETHproductions Điều đó sẽ có tác dụng phụ cũng biến ??athành a.
eush77

@ eush77 Oh hmm, bạn nói đúng ...
Sản phẩm ETH

Dòng 8 nên %>thay thế >%.
Dennis

7

C, 206 205 byte

(-1 nhờ trần nhà)

Các dòng mới chỉ ở đây để dễ đọc.

c,d,q;f(char*s){for(char*S,*T,*t=s;c-63?q=0:q++,d=c<<8|*s,*s?
q>1&&(T=index(S="=/'()!<>-",*s))?t-=2,*s="#\\^[]|{}~"[T-S]:
d>*s&&(T=strstr(S=">:<>%<:%",&d))&&(c="][ }{ # "[T-S])&1?--t,*s=c:0:
0,*t++=c=*s++;);}

Sửa đổi stại chỗ. Đã thử nghiệm với GCC và kêu vang trên Fedora Workstation, x86, ở chế độ 32 bit và 64 bit.

C không chính xác là ngôn ngữ tốt nhất để chơi golf ở đây.


C is not exactly the best language for golfing here.không đua đâu. Có vẻ tốt :) Nghĩ lại, tôi nên buộc tất cả các câu hỏi để thêm +1 hoặc +2 byte nếu họ sử dụng một trong các ký tự mà một máy in hoặc ba chữ tạo ra xD
Stephen

1
Bạn có thể làm cho nó thậm chí còn tệ hơn: +1 hoặc +2 cho mỗi nhân vật có thể là một phần của di- / trecraft sẽ thực sự bị tổn thương :)
hvd

5

JavaScript (ES6), 106 byte

s=>[...'#\\^[]|{}~[]{}#'].map((c,i)=>s=s.split('<:<%%'[i-9]+':>%>:'[i-9]||'??'+"=/'()!<>-"[i]).join(c))&&s

Làm sao?

Việc này thật thẳng thắn.

Tuy nhiên, chúng ta cần lưu ý rằng:

  • Khi tôi nhỏ hơn 9 , biểu thức '<:<%%'[i-9] + ':>%>:'[i-9]sẽ undefined + undefinedước lượng bằng NaN(giả như mong đợi).

  • Khi tôi lớn hơn hoặc bằng 9 , khái niệm '??' + "=/'()!<>-"[i]đánh giá lại để "??" + undefinedđược cưỡng chế thi hành chuỗi "??undefined"(truthy khi chúng ta mong đợi một kết quả falsy).

Đó là lý do tại sao chúng ta phải xử lý bài kiểm tra theo thứ tự này.

Các trường hợp thử nghiệm



2

Javascript (ES6), 131 123 byte

f=
s=>"#??= \\??/ ^??' [??( ]??) |??! {??< {??> ~??- [<: ]:> {<% }%> #%:".split` `.map(x=>s=s.split(x.slice(1)).join(x[0]))&&s
<input oninput=console.log(f(this.value))>


2

PHP, 112 byte

<?=str_replace(explode(_,strtr("<:_:>_<%_%>_%:0=0/0'0(0)0!0<0>0-",["_??"])),str_split("[]{}##\\^[]|{}~"),$argn);

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

PHP, 115 byte

<?=str_replace(explode(_,"??=_??/_??'_??(_??)_??!_??<_??>_??-_<:_:>_<%_%>_%:"),str_split("#\\^[]|{}~[]{}#"),$argn);

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

PHP, 124 byte

Giải pháp Regex

foreach(explode(_,"=|%:_/_'_\(|<:_\)|:>_!_<|<%_>|%>_-")as$v)$a=preg_replace("#\?\?$v#","#\\^[]|{}~"[$k++],$a=&$argn);echo$a;

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


1

JavaScript (ES6), 113 byte

s=>s.replace(/\?\?[^:%?]|[<:%]./g,c=>"#\\^[]|{}~"["=/'()!<>-".indexOf(c[2])]||"[] {} #"["<:><%>%:".indexOf(c)]||c)

Không phải là ngắn nhất, nhưng tôi muốn thử một cách tiếp cận khác.

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.