Đếm như Chuck Norris


58

Như đã biết ,

Chuck Norris tính đến vô cùng. Hai lần

Bên cạnh đó ,

Chuck Norris có thể đếm đến vô cùng ngược.

Ngoài ra, mặc dù có lẽ ít được biết đến, Chuck Norris có thể nói một chút tiếng Tây Ban Nha ngoài tiếng Anh.

Các thách thức

Viết chương trình (hoặc hàm) có thể chạy bằng hai ngôn ngữ khác nhau. Trong một ngôn ngữ, chương trình sẽ xuất chuỗi

1, 1, 2, 2, 3, 3, 4, 4, ...

và trong ngôn ngữ khác, nó sẽ tạo ra chuỗi (bao gồm các số 0 đứng đầu)

1, 2, ..., 9, 01, 11, 21, 31, ..., 89, 99, 001, 101, 201, ...

Quy tắc

  • Các chương trình hoặc chức năng được cho phép, trong bất kỳ ngôn ngữ lập trình . Sơ hở tiêu chuẩn bị cấm.
  • Các phiên bản khác nhau của cùng một ngôn ngữ (như Python 2/3) không được tính là các ngôn ngữ khác nhau. Các ngôn ngữ liên quan (như C / C ++ hoặc Matlab / Octave) được tính là khác nhau.
  • Không có đầu vào sẽ được thực hiện.
  • Chương trình sẽ tiếp tục xuất các điều khoản của chuỗi cho đến khi người dùng dừng lại. Vì chương trình sẽ không tự dừng lại, đầu ra không thể được tạo ra ở cuối. Nó phải được sản xuất trong khi chương trình chạy, liên tục hoặc theo đợt.
  • Đầu ra có thể sử dụng STDOUT hoặc tương đương hoặc có thể được hiển thị trong cửa sổ đồ họa. Bất kỳ phân tách không số nào giữa các thuật ngữ chuỗi được cho phép, miễn là mỗi thuật ngữ có thể được phân biệt rõ ràng với các thuật ngữ lân cận. Nó cũng được chấp nhận nếu màn hình bị xóa giữa các điều khoản.
  • Chuỗi hoặc có thể bắt đầu tại 0thay vì 1. Trong trường hợp đó, trong chuỗi "hai lần", 0nên lặp lại, giống như các số khác.
  • Các số 0 đứng đầu có ý nghĩa trong chuỗi "ngược". Chẳng hạn, thuật ngữ thứ mười là 01; không phải 1cũng không 001được chấp nhận
  • Nếu hai ngôn ngữ sử dụng mã hóa ký tự khác nhau, chương trình được xác định bởi các byte của nó , không phải các ký tự của nó. Đó là, các byte nên giống nhau trong hai ngôn ngữ.
  • Mã ngắn nhất trong byte thắng.

8
Downvoters, đề nghị cải thiện?
Luis Mendo

29
Chuck Norris quá mạnh để đếm, nếu anh ta làm vậy, số đầu tiên anh ta đếm sẽ vượt quá vô hạn và phá vỡ vương quốc của toán học đã biết. Do đó, tôi từ chối thi đấu.
Bạch tuộc ma thuật Urn

11
@carusocomputing, rất khôn ngoan khi thiếu hụt lực đẩy trên toàn thế giới kể từ khi Chuck Norris làm tất cả.
Wossname

33
Chuck Norris có thể hoàn thành thử thách này trong 0 byte. Anh ta chỉ có thể nhìn vào máy tính và máy tính làm bất cứ điều gì anh ta muốn.
Kodos Johnson

17
Chuck Norris đã không cố gắng để chiến thắng thử thách này, anh ta chỉ cho phép bạn thua cuộc.
Nat

Câu trả lời:


18

05AB1E / Jelly ,  14  13 byte

-1 byte nhờ Adnan (tránh ba lần với bản in không xuất hiện)

Các byte thô (thập lục phân):

31 5b 3d 3d 3e 5d fc 06 b6 3b 87 08 15

Trong trang mã của 05AB1E :

1[==>]üε¶;‡ηΩ

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

Trong trang mã của Jelly :

1[==>]‘©Ṛ;⁷®ß

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

Làm sao?

Các 05AB1E chương trình in ra số đôi với mỗi mục được phân cách bởi dòng mới:

1[==>]üε¶;‡ηΩ
1             - push 1 onto the stack
 [            - start infinite loop:
  =           - print top of stack
   =          - print top of stack
    >         -   increment the top of the stack (pop(1), x+=1, push)
     ]        - end the infinite loop
      üε¶;‡ηΩ - this code is never executed nor is it parsed

Các Jelly chương trình in ra số đảo ngược với mỗi mục được phân cách bởi dòng mới.

Trình phân tích cú pháp sẽ xử lý một chữ hợp lệ giữa []dưới dạng chữ kèm theo, nếu không, các byte này là các mã thông báo không xác định và do đó trở nên tương đương với các mã thông báo tách mã thành các dòng. ==>không phân tích cú pháp theo nghĩa đen, vì vậy mã có hiệu quả:

1 - link 1 (not executed but parsed)
1 - literal 1

==> - link 2 (not executed but parsed)
=   - left equals right? (vectorises)
 =  - left equals right? (vectorises)
  > - is greater than the right argument? (vectorises)

‘©Ṛ;⁷®ß - Main link: no arguments
‘       - increment (implicit 0 on left increments to 1 on the first pass)
 ©      - copy the result to the register and yield it
  Ṛ     - reverse, this has an implicit decimal list build, e.g. 142 -> [2,4,1]
    ⁷   - a newline character
   ;    - concatenate, e.g. [2,4,1] -> [2,4,1,'\n']
     ®  - recall the number from the register, e.g. 142
        - The chain has reduced to one item of arity 0, causing a pre-evaluation print:
        -     ...and since the list contains a character it gets smashed together
        -     e.g. [2,4,1,'\n'] prints 241 followed by a newline character
      ß - call this link with the same arity, e.g. as a monad with left = 142

Tôi đã không kiểm tra nếu nó hoạt động cho Jelly, nhưng nếu nó hoạt động, bạn có thể thay thế Ð,,bằng ==.
Ad Nam

Điều đó nên phân tích trong Jelly. Tôi đã xem trong info.txt cho một bản in không xuất hiện và không thấy điều đó. Cảm ơn.
Jonathan Allan

26

Python 2 / C (tiếng kêu) , 109 107 100 84 95 88 89 88 87 84 byte

i=0;
#/*
while 1:i+=1L;print`i`[::-1]
'''*/
a(){for(;;)printf("%i %1$i ",++i);}//'''

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

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

L trong mã Python là một phần của dấu phân cách.

Giải trình:

Trong mã C, đầu tiên, nó đặt i thành 0. Sau đó, nó bắt đầu một nhận xét ( #là mã hợp lệ trong C cho các #includecâu lệnh) nơi mã Python đi. Vào cuối bình luận, nó xác định một hàm tăng mãi mãi một biến và in nó hai lần, được phân tách bằng dấu cách. Sau đó nó bắt đầu một bình luận.

Trong mã Python, i=0;đặt i về 0. Python bỏ qua dòng tiếp theo vì #bắt đầu một nhận xét một dòng. Sau đó, nó mãi mãi tăng nó và biến nó thành một số dài và in biểu diễn chuỗi đảo ngược của nó. Chữ "L" từ lâu là một phần của dấu phân cách. Sau đó, nó bắt đầu một chuỗi nhiều dòng để nhận xét mã C, kết thúc sau đó.

 

-2 byte nhờ @LuisMendo. -7 byte nhờ @ZacharyT. -6 byte nhiều hơn nhờ @ZacharyT. +11 byte để sửa lỗi nhờ @ mbomb007. -7 byte nhờ @Doorknob. +1 byte để sửa lỗi nhờ @Doorknob. -1 byte nhờ @yoann. -1 byte hơn nhờ @yoann. -3 byte nhờ @Cyoce.


Hmm, tôi nghĩ rằng bạn có thể sử dụng đệ quy trong mã C -a(i){printf("%i %i ",i,i);a(i+1)}
enedil

Tại sao không sử dụng whilevòng lặp cho mã C?
enedil

@enedil Mất nhiều byte hơn.
Đồng chí SparklePony

Tôi nghĩ bạn có thể sử dụng `i`thay vìstr(i)
Cyoce

Bạn có thể sử dụng for(;;)printf("%i %1$i ",i++);để lưu một byte. Đây 1$là một đối số vị trí yêu printfcầu hiển thị đối số đầu tiên (sau chuỗi định dạng).
yoann

12

Jelly / Pyth, 15 byte

.V1_`b;"1üÉÉ$

Không thể in được phần mềm SE được đọc sai, vì vậy đây là một hexdump:

00000000: 2e56 315f 6062 3b22 7f31 fcc9 c924 0b    .V1_`b;".1...$.

Chạy với jelly f filepyth filetương ứng.

Giải trình

Đầu tiên là phần Pyth. .Vchạy một vòng lặp vô hạn trên chuỗi tăng dần bắt đầu từ đầu vào của nó, ở đây 1. Sau đó, chúng tôi đảo ngược ( _) `chỉ số vòng lặp chuỗi ( ) ( b) và ngầm xuất nó. Có ;ở đó để kết thúc vòng lặp, và "cần thiết phải coi phần còn lại của chương trình là một chuỗi ký tự để trình phân tích cú pháp không bị nghẹt thở.

Phần Jelly sẽ được giải thích bằng cách dịch phần còn lại của chương trình từ bảng mã Jelly:

¶1‘ṄṄ$¿

Các hoạt động như một nguồn cấp dữ liệu, có hiệu quả bỏ qua phần đầu tiên của chương trình bằng cách làm cho nó một liên kết không bao giờ được gọi. Sau đó, chúng tôi bắt đầu tại 1và chạy một vòng lặp while ( ¿) sử dụng ṄṄ$(in hai lần) làm điều kiện của nó và tăng ( ) giá trị làm thân vòng lặp.


Ngẫu nhiên, thay thế phần Pyth bằng 1[DR,>] sẽ tạo ra một đệ trình Jelly / 05AB1E hợp lệ trong 14 byte, nhưng trình thông dịch hiện tại có một lỗi ngăn chặn điều này.


1
@Jonathan ALLan Bạn nói đúng, đó là dòng mới được thêm vào bởi trình soạn thảo văn bản của tôi.
Doorknob

11

Perl / JavaScript, 87 byte

s=0;print=console.log;m=s;$_=s=s=s=m;while(++$_){print((m/s,$_+`
`+$_||/&&reverse.$/))}

Perl

s/0;print/console.log;m/s;$_=s/s/s/m;while(++$_){print((/s,$_+`
`+$_||/&&reverse.$/))}

Một cơ chế Tôi đã sử dụng rất nhiều trong polyglots JS / Perl là để lợi dụng thực tế là thay thể chấp nhận khá nhiều bất kỳ dấu phân cách, sử dụng =phương tiện tôi có thể sử dụng thay thế vô nghĩa ban đầu (đầu tiên thay thế 0;printvới console.log;mvới một lá cờ của /strong $_, mà hiện nay là undef) , sau đó cài đặt $_thành kết quả của việc thay thế sbằng strong chế độ đa dòng ( /m) 0. Bây giờ $_0và tôi bắt đầu whilevòng lặp, sau đó tăng dần $_. Tiếp theo tôi gọi print, chuyển qua một biểu thức thông thường khớp (do ||ở cuối khớp với một chuỗi trống) và sử dụng &&toán tử để gửi ngược lại $_nối với một dòng mới ($/được khởi tạo trước "\n"). Điều này được tính đến vô cùng ngược.

JavaScript

s=0;print=console.log;m=s;$_=s=s=s=m;while(++$_){print((m/s,$_+`
`+$_||/&&reverse.$/))}

Rất nhiều bài tập biến ở đây, được che dấu trong các s///cuộc gọi Perl . Tôi thiết lập các biến smnhư 0, bí danh console.logđể print, chạy một số bộ phận vô nghĩa, thiết lập $_để 0và bắt đầu whileincrementing vòng lặp $_, gọi printđi trong 0( m/s, điều này bắt đầu cuộc gọi đến mtrong Perl, nhưng được coi là bộ phận tiêu chuẩn trong JS) và chuỗi mục tiêu của chúng tôi ( $_+"\n"+$_) thông qua toán tử dấu phẩy, trả về mục cuối cùng trong danh sách. Tôi tránh đoạn mã Perl cuối cùng ( &&reverse.$/) vì $_+"\n"+$_nó sẽ là sự thật và vì vậy tôi có thể sử dụng ||để tạo ra một RegExpđối tượng chứa phần cuối của mã Perl không bao giờ được đánh giá.

Đã thử nghiệm bằng Perl 5 và Nút 6.


8

NodeJS / PHP, 131 106 byte

-25 byte nhờ @Titus

<!--
printf=(_,i)=>process.stdout.write(i+i),strrev=i=>i+" "//--><?
for($i=0;;)printf("%s ",strrev($i++));

Sử dụng NodeJS thay vì JS trình duyệt để định dạng đầu ra tốt hơn và xử lý vòng lặp vô hạn tốt hơn.

Dùng thử JavaScript trực tuyến
Hãy thử PHP trực tuyến

Lưu ý rằng đầu ra TIO bị cắt sau 128KB.


1
102 byte bắt đầu từ 0 : <!--←printf=(_,i)=>process.stdout.write(i),strrev=i=i>>1//--><?←for($i=0;;)printf("%s ",strrev($i++));. 84 byte (nhưng không bằng một nửa so với cách tiếp cận của bạn): <!--←for(i=1;;)process.stdout.write(i+" "+i+++" ")//--><?for(;;)echo strrev(++$i),_;hoặc <!--←for(i=1;;)process.stdout.write((++i>>1)++" ")//--><?for(;;)echo strrev(++$i),_;.
Tít

@Titus Ý tưởng hay với việc i>>1lặp lại số, nhưng tôi đã phải thay đổi write(i)để bao gồm một khoảng trắng , và vì write()không chấp nhận một số. Và bạn đã có một lỗi đánh máy ( strrev=i=i>>1-> strrev=i=>i>>1) đã thêm một byte khác. Kết thúc là ngắn hơn để làm write(i+i)strrev=i=>i+" ".
Justin Mariner

7

V / Brain-flak Classic , 27 , 26 byte

(()){[[({}())[]]]}é1òÙæ_æ

Hexdump:

00000000: 2828 2929 7b5b 5b28 7b7d 2829 295b 5d5d  (()){[[({}())[]]
00000010: 5d7d e931 f2d9 e65f 01e6                 ]}.1..._..

Hãy thử trực tuyến! trong V (được sửa đổi một chút để nó sẽ chấm dứt để bạn có thể thấy đầu ra. Trên TIO, V chỉ xuất ra nếu chương trình kết thúc)

Hãy thử trực tuyến! trong Brain-flak Classic

Đây không phải là điều thú vị nhất của polyglots, vì mã V không có tác dụng đối với trò chơi kinh điển não bộ và ngược lại, tuy nhiên, thật thú vị khi sử dụng cả hai ngôn ngữ của riêng tôi cho một thách thức và hai giải pháp khá thú vị tự mình

V Giải thích:

é1              " Insert a '1'
  ò             "   Recursively:
   Ù            "   Duplicate this number
    æ_          "   Flip this line
      <C-a>     "   Increment the number on this line
           æ    "   Flip it back (the '_' is implicit because it's at the end of the program)

Giải thích về BFC:

#Push a one onto the main stack
(())

#Forever:
{

  #Print twice:
  [[

    #Increment the top of the stack.
    #Evaluates to *i + 1*
    ({}())

    #Minus one
    []
  ]]

#Endwhile
}

3
Ngay khi tôi nhìn thấy các ngôn ngữ tôi biết bạn đã đăng bài này.
Riley

Tại sao lại là "Brain-flak Classic"? Có một Brain-flak khác nhau?
nmjcman101

@ nmjcman101 Brain-flak classic là phiên bản gốc của Brain-flak. Sự khác biệt được giải thích chi tiết hơn ở đây , nhưng lý do tôi chọn nó là vì nó có đầu ra rõ ràng, điều mà bộ não hiện đại không có. (cho phép đầu ra vô hạn)
DJMcMayhem

4

Võng mạc / Python 2, 61 byte

#{*M`
#*M`
"""

}`$
1
""";i=1
while 1:print str(i)[::-1];i+=1

Võng mạc | Con trăn 2


Tôi đã thử thay thế str()bằng ``, nhưng dường như đã làm xáo trộn mã Retina. Tôi không biết tại sao?
chính thức tuyên bố

Dù sao thì bạn cũng không thể làm điều đó. Nếu nó sẽ làm cho số lượng lớn và hoạt động đúng, thì phải str, nếu không bạn sẽ nhận được Lkết quả. Nhưng nó thực sự không làm việc trong Retina. Bạn phải thay đổi nhiều hơn những gì bạn nói, như chuyển một thứ gì đó sang một dòng khác.
mbomb007

3

R / Octave , 83 80 78 71 byte

-3 byte nhờ Luis Mendo

i=0;
while(1)
#{
print(c(i<-i+1,i))
#}
disp(flip(num2str(i)))
i+=1;
end

#{ }#là một nhận xét khối Octave và #thực sự là bình luận cho R. Trình thông dịch R chỉ xem dòng tiếp theo là phần thân của whilevòng lặp và trình thông dịch Octave bỏ qua ngay trước mã Octave

Phần R in ra các cặp số bắt đầu từ 1 và phần Octave in ra các số lùi bắt đầu từ 0.

Tôi hoàn toàn mong đợi được vượt qua (thậm chí bởi cùng một ngôn ngữ); Gần đây tôi đã viết rất nhiều mã Matlab và R đến nỗi tôi nghĩ rằng tôi sẽ thử.

Hãy thử trực tuyến! - Liên kết Octave


Là một trong những cần thiết phải được i=i+1?
Zacharý

1
@ZacharyT thật không may, +=không hoạt động trong R, vì vậy, vâng, nó phải như vậy.
Giuseppe

endcần thiết?
BLT

1
@BLT, yeah, đánh dấu sự kết thúc của vòng lặp while cho quãng tám.
Giuseppe

Được rồi cảm ơn. Tôi đã nghĩ rằng vì dù sao nó sẽ không bao giờ kết thúc ( while(1)) bạn có thể lưu các byte đó.
BLT

3

Ruby / Python2: 68 64 byte

i=0
"#{loop{p i+=1,i}}"
exec('while 1:print str(i)[::-1];i+=1')

Phối cảnh của Ruby

init đơn giản của biến:

i = 0

"#{}"là cú pháp cho phép nội suy chuỗi. Tôi sử dụng nó để thực hiện biểu thức thay thế.

"#{loop{p i+=1,i}}"

plà một tốc ký cho puts. looptạo ra một vòng lặp vô hạn.

Tiếp theo là execđiều, nhưng nó không bao giờ được đánh giá, vì vòng lặp vô hạn theo định nghĩa là vô hạn. execKhông cần phải sinh ra lỗi cú pháp với mã Python.

Phối cảnh Python

Từ quan điểm của Python, có một điểm chung i=0. Tiếp theo, Python có cú pháp khác nhau để nội suy chuỗi, vì vậy dòng này chỉ bị loại bỏ. Tiếp theo là một vòng lặp vô hạn tương tự như những gì người khác đăng.


3

Bash / Kiểm tra , 50 28 byte

Cảm ơn @Doorknob vì đã lưu một loạt byte bằng cách chuyển từ Python sang Bash

#>
#v
 #p<p<)#
seq 1 inf|rev

Cú đánh:

#>
#v
 #p<p<)#

Đây chỉ là một số ý kiến, được bỏ qua.

seq 1 inf|rev

Bắt đầu một chuỗi đi từ 1 đến vô cùng, sau đó dẫn kết quả đến rev.

Để kiểm tra:

#>

Điều này ngay lập tức chuyển sang chế độ 2D, đi đúng. >chỉ đạo quyền IP, không có hiệu lực. Nó quấn quanh đầu dòng và đánh #lại, chuyển ra khỏi chế độ 2D. Sau đó, nó nhấn >trong chế độ 1D, đẩy 0 đến ngăn xếp. Bởi vì nó ở chế độ 1D, IP kết thúc thành dòng tiếp theo.

#v

#chuyển IP sang chế độ 2D một lần nữa và vhướng nó xuống dưới.

 #p<p<)#

Đầu tiên #chuyển trở lại chế độ 1D một lần nữa. pxuất ra ĐKDV dưới dạng một số (nhưng không bật nó), và sau đó <in một dòng mới. Điều này được thực hiện hai lần, và sau đó số lượng được tăng lên với ). #chuyển sang chế độ 2D một lần nữa, do đó, IP kết thúc ở đầu dòng, nhấn #để chuyển sang chế độ 1D, v.v.


1
Bash sử dụng #cho các bình luận và có thể thực hiện nhiệm vụ "số đảo ngược" rất dễ dàng : seq 1 inf|rev.
Doorknob

Mã Ruby i=1;loop{puts i.to_s.reverse;i+=1}ngắn hơn một byte
dkudriavtsev

3

CJam /> <>, 27 23 byte

"la,:naonao
"1{_sW%n)}h

Tới CJam:

Hãy thử trực tuyến! - lưu ý rằng bạn phải đợi đến giới hạn 60 giây để xem đầu ra, nhưng nó hoạt động ngoại tuyến.

"la,:naonao
"

Điều này định nghĩa một chuỗi ký tự nhiều dòng không bao giờ được sử dụng.

 1{_sW%n)}h

Dòng thứ hai đi như thế này:

1     e# Push 1:               | 1 
{     e# Forever:              | 1
  _   e#   Duplicate:          | 1 1
  s   e#   Convert to string:  | 1 "1"
  W%  e#   Reverse:            | 1 "1"
  n   e#   Print with newline: | 1
  )   e#   Increment:          | 2
}h    e# End loop

Tới> <>:

"

Bắt đầu một chuỗi theo nghĩa đen.

 la,:naonao

Nội dung của chuỗi chữ. Mỗi mã ký tự được đẩy riêng lẻ vào ngăn xếp.

"

IP kết thúc để tiếp cận "lại, kết thúc chế độ chuỗi.

 la,

llấy chiều dài của ngăn xếp, ađẩy 10 và ,chia. Điều này cho chúng ta chiều dài của ngăn xếp / 10.

    :nao

:trùng lặp, nin dưới dạng số, ađẩy 10 và oin dưới dạng mã ký tự (dòng mới).

        nao

Điều tương tự. In số theo sau là một dòng mới. Bây giờ ngăn xếp có độ dài 10 lần nữa (nội dung của chuỗi gốc là trên ngăn xếp).

IP sau đó kết thúc "một lần nữa, dẫn đến 10 yếu tố nữa sẽ được đẩy. Lần sau, ltrả về 20, vì vậy 2 được in, v.v.

Dòng thứ hai không bao giờ được chạm vào IP.


2

Röda / C (gcc) , 90 byte

main(){f(0);}f(a){a=1//1{[` $a`[::-1]];a++}while[]/*
;for(;;a++)printf("%d %d ",a,a);/**/}

Röda: Hãy thử trực tuyến!

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

Giải trình

Điều này lạm dụng thực tế //là int divison ở Röda nhưng một dòng bình luận trong C.

Trong cả hai ngôn ngữ, main(){}biểu thị chương trình chính và cả hai đều gọi hàm fvới một đối số giả 0.

Trong Röda, a=1//1không chia int và gán kết quả 1cho a. C nhìn thấy a=1và làm điều tương tự, nhưng tất cả mọi thứ sau bài tập đó là một nhận xét cho C. Từ đó, hai ngôn ngữ tách ra.

Röda

Chúng tôi có một vòng lặp vô hạn với while[]( một điều kiện trống là sự thật ). Bên trong đó, ` $a`chuyển đổi số nguyên athành một chuỗi (có khoảng trắng ở đầu) sau đó [::-1]đảo ngược nó (và nó xuất ra với một khoảng trắng ở cuối). Sau đó, giá trị của ađược tăng lên một.

Bên ngoài vòng lặp while, một nhận xét đa dòng bắt đầu /*và kết thúc ngay trước khi kết thúc hàm.

C

Sau khi bỏ qua phần còn lại của dòng, chương trình đi đến dòng thứ hai. Chúng tôi bắt đầu bằng một dấu chấm phẩy vì a=1câu lệnh cần được chấm dứt. Sau đó, chúng ta bắt gặp một vòng lặp đơn giản để in biến lặp a, hai lần trên mỗi lần lặp.

Bên ngoài vòng lặp for, /*chỉ có ở đó để bỏ qua */bình luận kết thúc của Röda .


2

QBIC / QBasic 4.5 , 58 byte

do
p=p+1
if q then
'?`_f!p$|
else
?p,p,
end if
loop

Điều này lạm dụng rất nhiều thực tế là tất cả các chữ cái viết thường được xem là mã QBasic theo nghĩa đen của trình thông dịch QBIC và được chuyển đến lớp QBasic của QBIC. Làm thế nào cả hai ngôn ngữ nhìn thấy mã này, cạnh nhau:

LOC         QBasic                    QBIC
-------------------------------------------------------
do                   Start an infinite loop
p=p+1                Increment p, starts off as 0
if q then    q = 0, goto ELSE         q = 1, execute IF
'?`_f!p$|    ' = comment, invalid     '?` is a 'code literal', passing PRINT to QBASIC
             syntax is ignored        followed by QBIC code to flip p cast as string.
else         q=0, execute             q=1, so ignored
?p,p,        PRINT p twice,
             separated by tab
end if               End of the branching logic
loop                 Wrap around for the next pass

2

laserLANG / > <> , 163 byte

!\0 \
/:+1/!   ]oo\
\:a( ?\:a%$a ,!
/r[-1l//" ,"/
/!n-%1:\?(1l
 \ --\/ <<---\
/----/'
\----  v
/>>--\#>---->/
\     /
/----<
\  \
/ -<< \
 /<< \
 "
">=>= /
\>=>=/

Lần đầu tiên chơi golf, vì vậy nó lớn hơn một chút so với nó có thể. Tôi muốn sử dụng> <>, nhưng vì một vài người đã sử dụng nó để tạo chuỗi thứ hai, tôi quyết định tôi muốn tạo ra chuỗi đầu tiên.

Hãy thử> <> trực tuyến!
Đối với laserLANG, cần có một trình thông dịch ngoại tuyến để thử nó. Nó có thể được tìm thấy ở đây .

laserLANG

!\
 \ --\/ <<---\
/----/'
\----  v
/>>--\#>---->/
\     /
/----<
\  \
/ -<< \
 /<< \
 "
">=>= /
\>=>=/

thực hiện bắt đầu tại !đó được bỏ qua hoàn toàn. sau đó nó đến \và bắt đầu du hành qua một vài nhân vật mà nó hoàn toàn bỏ qua. Cuối cùng nó cũng đến nơi khác \và cuộc vui bắt đầu. Về cơ bản, tôi đã lấy ý tưởng đằng sau "Xin chào, Thế giới!" lặp lại và cô đọng nó tốt như tôi có thể. Đó là một chút thách thức khi đối phó với thực tế rằng laserLANG chỉ sắp giảm / tăng bộ đếm bộ nhớ khi bộ đếm chương trình lần lượt sang trái / phải. Tôi cảm thấy như hầu hết các byte có thể được lưu ở đây bằng cách thực hiện một số thủ thuật mà tôi chưa từng nghĩ tới.

> <>

!\0 \
/:+1/!   ]oo\
\:a( ?\:a%$a ,!
/r[-1l//" ,"/
/!n-%1:\?(1l

Thực thi bắt đầu từ !đó làm cho nó bỏ qua \. Sau đó nó tiếp tục như thể mã laserLANG không có ở đó. Tôi đã không nhận ra> <> chỉ có hỗ trợ cho phân chia float, vì vậy việc cắt ngắn và đơn giản lúc đầu hơi khó hiểu.


2

Befunge-98 / > <> , 32 byte

\r.#%a/# :_::p#+a#1,#
>l::naonao

Đã viết điều này trước khi tôi thấy có bao nhiêu ><>câu trả lời. Một số nền tảng: \là toán tử thay đổi hướng trong> <>, trong trường hợp này đẩy nó xuống, trong khi trong Befunge, nó hoán đổi hai mục trên cùng trên ngăn xếp. Mã Befunge trông giống như:

\r.#%a/# :_::p#+a#1,#

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

In ra các số ngược được phân tách bằng dòng mới. Befunge tự động in một khoảng trắng sau mỗi số, vì vậy mỗi chữ số được phân tách bằng dấu cách. Lặp đi lặp lại lấy chữ số cuối cùng, in nó và chia số đó cho 10 cho đến khi nó bằng 0. Sau đó tăng dần và lặp lại.

Mã> <> ngay lập tức đi xuống dòng thứ hai.

>l::naonao

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

Và khá đơn giản. Lấy chiều dài của ngăn xếp, in hai lần với dòng mới và để lại một bản sao độ dài trên ngăn xếp cho vòng lặp tiếp theo.


1

Ruby / Xếp chồng , 37 byte

0#/0[1+:tostr rev out]
loop{p p$.+=1}

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

Điều này in 1 1 2 2... trong Ruby và 1 2 3 ... 01 11 21...trong Stacked.

Giải trình

Trong Ruby:

0#/0[1+:tostr rev out]
loop{p p$.+=1}

Sau khi xóa nhận xét, điều này trở thành:

0
loop{p p$.+=1}

Dòng duy nhất có liên quan ở đây là cuối cùng. ptrả về đối số của nó, vì vậy p pin đối số của nó hai lần. $.bắt đầu từ 0, vì vậy $.+=1tăng $., trả về giá trị tăng. Do đó, điều này in mỗi số từ 1hai lần.

Trong xếp chồng:

0#/0[1+:tostr rev out]
loop{p p$.+=1}

Điều này tương đương với các mã thông báo sau:

0 #/ 0 [ 1 + : tostr rev out ] loop { p p $ . + = 1 }

Hai cái đầu tiên không liên quan (về cơ bản, chuyển 0thành giảm f Unction). Sau đó, 0được đẩy lên ngăn xếp. Sau đó, chức năng [1+:tostr rev out]được đẩy đến ngăn xếp. loopbật chức năng này và thực hiện nó vô hạn.

Phần bên trong của hàm làm tăng đỉnh của stack ( 1+), sao chép nó ( :), chuyển đổi nó thành một chuỗi ( tostr), đảo ngược nó ( rev) và xuất ra nó ( out). Quá trình này được lặp đi lặp lại vô tận. Vì vòng lặp là vô hạn, nên bất kỳ thứ gì xuất hiện sau mã thông báo đó về cơ bản đều bị người phiên dịch bỏ qua.


1

> <> / Jelly , 37 byte (25 trong bảng mã của Jelly)

01+:nao:nao!
DU;⁷Ṙ€
®‘©Çß

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

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

> <> in chuỗi thành vô cực hai lần, Jelly đếm ngược.

> <> chỉ liên quan đến dòng trên cùng:

Và cảm ơn @ Challenger5 vì đã lưu một số byte ở đây trên linefeed

01+:nao:nao!                           Stack at: 1st run   2nd run ...
0                 Push a 0             0         -
 1                Push a 1             0,1       1,1   
  +               Pop 2, add them      1         2 
   :              Duplicate top item   1, 1      2, 2
    n             Pop top, show as num 1         2
     a            Push the number 10   1, 10     2, 10
      o           Pop and show 10 as an ACII char (ie '\lf')
                                       1         2
         :nao     And again, for repetition
             !    ><> wraps around; this skips pushing a 0 again.

Jelly thực thi mã từ dưới lên trên. Chỉ có 2 dòng cuối cùng có liên quan.

®‘©Çß       main link, keeps track of the current number

®           Get a number from the register (0 on first run)
 ‘          Increment that by 1
  ©         Store in register
   Ç        Call helper (printer) link
    ß       Call this link again

DU;⁷Ṙ€      Printer

            (Say we are at number 21)
D           Break into digits         [2, 1]
 U          Reverse array             [1, 2]
  ;⁷        Append a line break       [1, 2, \n]
    Ṙ€      Print each char in array

@LuisMendo Các ký tự được sử dụng trong ><>mã này có các điểm mã ASCII tương ứng với Jelly Codepage. Tôi không biết quá nhiều về doanh nghiệp mã hóa này, nhưng tôi nghĩ rằng điều này sẽ dẫn đến cùng các byte được sử dụng để thể hiện mã. Các ký tự ở dòng dưới được bỏ qua bởi ><>vì vậy không có vấn đề gì nếu chúng giống hệt nhau giữa các bảng mã. Số lượng byte được lấy từ ><>liên kết TIO.
steenbergh

Không phải chúng được in mà không có dấu phân cách trong> <>?
Trái cây Esolanging

@ Challenger5 bạn phải; đã sửa.
steenbergh

Cá không có kiểu nhân vật; ","chỉ cần đẩy giá trị ASCII của ,ngăn xếp, vì vậy bạn có thể sử dụng athay thế cho dấu phân cách dòng mới.
Trái cây Esolanging

Có vẻ như dấu phẩy vẫn còn ở dòng đầu tiên của phần giải thích> <>.
Trái cây Esolanging

1

C (gcc) / PHP , 102 86 80 byte

#//\
for(;;)echo strrev(++$i).'
int main(i){for(;;i++)printf("%d %d ",i,i);}//';

Xuất ra chuỗi kép trong C và chuỗi ngược trong PHP.

Hãy thử nó trong C!

Hãy thử nó trong PHP!

Giải thích

C

Trong C, các #công cụ tiền xử lý mẫu. Tôi thực sự không biết nhiều về C nhưng nó không phàn nàn khi có bất kỳ dòng trống nào cho công cụ này. Các //hình thức một bình luận dòng. A \ở cuối dòng về cơ bản là "thoát" dòng mới và làm cho hai dòng được coi là một. Điều này cũng hoạt động cho các nhận xét dòng, vì vậy dòng thứ hai được xem như là một nhận xét trong C. Dòng thứ ba thực hiện công việc xuất các số với một vòng lặp for đơn giản. Sau đó, chỉ đơn giản là một bình luận.

PHP

Trong PHP, #tạo thành một nhận xét dòng, vì vậy dòng đầu tiên bị bỏ qua hoàn toàn. Dòng thứ hai in các số được đảo ngược bằng một vòng lặp for và phân tách chúng bằng \nint main(i){for(;;i++)printf("%d %d ",i,i);}//(mã C được gói trong một chuỗi).

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.