Ngôn ngữ của bạn trong một hộp


8

Bây giờ với THƯỞNG cho vị trí thời gian chạy.

Viết chương trình để điền vào hộp văn bản với các mã định danh được sử dụng trong chương trình của bạn trong khi giữ cho chương trình của bạn nhỏ. Với tất cả các định bạn đã sử dụng (trừ các bạn tạo ra) trong chương trình của bạn, điền vào một hộp 12x6 với càng nhiều càng tốt. Bạn nhận được thêm điểm cho các số nhận dạng giao nhau (kiểu ô chữ), nhưng chúng không thể nối từ đầu đến cuối.

Đầu ra

Chương trình của bạn nên in (để xuất bản) một hộp ký tự 12x6 với các số nhận dạng được đóng gói và #đường viền. Hộp phải có các cột được dán nhãn bằng chữ AL và các hàng 1-6 (cách nhau như ví dụ bên dưới). Sau đó in một dòng cho mỗi định danh được sử dụng. Mỗi dòng sẽ có vị trí của chữ cái đầu tiên, chính định danh và điểm số. Điểm số bằng với số chữ cái trong mã định danh có thêm '+ phần thưởng' có thể được thêm vào. Mã định danh nhận được 5 điểm thưởng cho mỗi chữ cái được chia sẻ với mã định danh chéo. Dòng cuối cùng báo cáo 'TOTAL:' và tổng số điểm định danh. Một đầu ra ví dụ cho một chương trình Python có thể sẽ trông như thế này:

   ABCDEFGHIJKL
  ##############
1 #  pinsert   #
2 #  o         #
3 #  print     #
4 #    not     #
5 #            #
6 #import      #
  ##############
C1 pop 3+5
D1 insert 6
C3 print 5+10
E3 in 2+10
E4 not 3+5
A6 import 6
TOTAL: 55

Ghi chú:

  • Định danh có thể không được gắn kết (như importtrên).
  • Bạn không thể tham gia popprintnội tuyến với poprint.
  • Chuỗi inbên trong insertkhông thể được sử dụng. Tham gia từ phải trực giao.
  • Mã định danh có thể được đặt cạnh nhau (như popinsertở trên).

Câu trả lời của bạn nên bao gồm đầu ra chương trình của bạn với mã nguồn của bạn và một tiêu đề bao gồm tên ngôn ngữ và điểm số của bạn.

Ghi bàn

Điểm của bạn cho thử thách sẽ là điểm số câu đố bình phương chia cho kích thước của mã nguồn của bạn (tính bằng byte). Ví dụ: Câu đố ở trên với chương trình 300 byte sẽ ghi điểm 55*55/300 = 10.08. Điểm số cao nhất chiến thắng.

Quy tắc

  • Bạn có thể sử dụng bất kỳ định danh nào trong chương trình không do bạn xác định. Từ khóa, tên lớp, tên phương thức, tên thư viện và tên hàm dựng sẵn là ví dụ về các định danh đủ điều kiện.
  • EDITED: Bạn chỉ có thể sử dụng các thư viện tiêu chuẩn được bao gồm trong bản phát hành ngôn ngữ tối thiểu. Các gói ngôn ngữ mở rộng và việc sử dụng các thư viện bên ngoài (hiện đang bị cấm). Hàng loạt các thư viện với danh sách định danh phong phú sẽ làm mất cân bằng thách thức này. Nếu bạn không chắc chắn làm thế nào điều này hoạt động với ngôn ngữ của bạn, xin vui lòng để lại một câu hỏi trong các ý kiến.
  • Mã định danh phải chỉ bao gồm các ký tự [a-zA-Z_] và có ít nhất 2 ký tự.
  • Bạn chỉ có thể sử dụng mỗi định danh một lần trong câu đố.
  • Mã định danh chỉ có thể được sử dụng từ trái sang phải hoặc xuống dưới.

Phần thưởng năng động!

Nếu mã của bạn xác định nơi đặt mã định danh vào thời gian chạy, phần thưởng thư được chia sẻ sẽ là 20 thay vì 5. Bạn có thể liệt kê danh tính nào sẽ được sử dụng, nhưng mã của bạn phải quyết định vị trí trong hộp để đặt chúng. Mã của bạn cũng phải tính toán và in danh sách điểm. Nếu các vị trí của bạn phụ thuộc vào thứ tự của danh sách số nhận dạng, các cặp được mã hóa cứng hoặc các lối tắt vị trí không động khác, bạn không đủ điều kiện nhận Tiền thưởng động.

Trong ví dụ đầu ra ở trên, điểm số câu đố cho chương trình sắp xếp thời gian chạy sẽ trở thành 145. Sau đó, nếu mã là 800 byte, điểm sẽ là 145*145/800 = 26.28.

Phần thưởng động được thiết kế để thưởng cho các thuật toán thông minh thay vì các chuỗi giải pháp được mã hóa cứng và bù cho kích thước mã nguồn lớn hơn.

CHỈNH SỬA:

  • Các thư viện đã thay đổi chỉ được sử dụng cho những thư viện phát hành ngôn ngữ tối thiểu.
  • Đã thêm tùy chọn tiền thưởng động.

Chỉ cần rõ ràng, điểm số lớn hơn là tốt hơn, phải không?
Chấn thương kỹ thuật số

1
Chính xác. Kẹt càng nhiều số nhận dạng duy nhất vào hộp trong khi giữ cho chương trình của bạn càng nhỏ càng tốt -> điểm số tốt nhất.
Logic Knight

Liệu thử thách này có thực sự liên quan đến lập trình?
frageum

Có lẽ tôi nên làm điều này rõ ràng hơn. Bạn phải viết và thực hiện một chương trình đưa ra yêu cầu văn bản. Văn bản trong đầu ra phụ thuộc vào các định danh được sử dụng trong chương trình bạn viết.
Logic Knight

1
FYI, một số thư viện liên quan đến SIMD hoặc Shader xác định tất cả các kết hợp của xyzw/ rgba/ stpq:)
kennytm 8/2/2015

Câu trả lời:


2

SỐ LIỆU, 387 ^ 2/777 = 221,2

Tôi đã lười biếng và chỉ muốn đầu ra một cái gì đó hoạt động trước khi cố gắng để có được nó với điểm số tối ưu. Có lẽ tôi sẽ cập nhật nó sau khi tôi phù hợp với nhiều từ hơn và tôi sẵn sàng nhận đề xuất từ ​​bất kỳ ai sử dụng STATA (có vẻ không phổ biến trên CodeGolf). STATA thực sự tốt khi có rất nhiều hai lệnh / tham số chữ cái. Ngoài ra, thông thường hầu hết có thể được rút ngắn để lưu các ký tự / phù hợp hơn (ví dụ: màn hình có thể được hiển thị, dịch chuyển, dịch chuyển, phân tán, dis hoặc di). Ngoài ra, chụp có nghĩa là nó ngăn chặn các thông báo đầu ra và lỗi. Vì vậy, toàn bộ vòng lặp while có đầu ra 0.

cap infile using a,us(b)
cap while _rc>0{
ls
cap ge c=1 if 0<1
so c
egen d=rownonmiss(c),str
regres c d
notes
clist,noh no
li,compress
dec c,g(f)
do a
}
gl e=";;;ABCDEFGHIJKL ;;############## 1;#rownonmissdo# 2;#e;hd;o;notes# 3;#geii;hif_rc;# 4;#r;ls;clist;;# 5;#egen;ailu;;;# 6;#slcompress;;# ;;############## A1;rownonmiss;10+30 K1;do;2+5 H2;notes;5+20 A3;ge;2+5 G3;if;2+5 I3;_rc;3+15 C4;ls;2+10 F4;clist;5+20 A5;egen;4+20 C6;compress;8+20 A1;regres;6+15 C1;while;5+15 F1;noh;3+5 H1;infile;6+25 I1;so;2+10 J1;str;3+15 K1;dec;3+15 D2;dis;3+5 I3;_s;2+10 F4;cap;3+10 G4;li;2+5 B5;gl;2+5 D5;no;2+10 I5;us;2+5 TOTAL:;387"
token $e
forv x=1/34{
dis subinstr(``x'',";"," ",.)_s(0)
}

tạo ra

   ABCDEFGHIJKL
  ##############
1 #rownonmissdo#
2 #e hd o notes#
3 #geii hif_rc #
4 #r ls clist  #
5 #egen ailu   #
6 #slcompress  #
  ##############
A1 rownonmiss 10+30
K1 do 2+5
H2 notes 5+20
A3 ge 2+5
G3 if 2+5
I3 _rc 3+15
C4 ls 2+10
F4 clist 5+20
A5 egen 4+20
C6 compress 8+20
A1 regres 6+15
C1 while 5+15
F1 noh 3+5
H1 infile 6+25
I1 so 2+10
J1 str 3+15
K1 dec 3+15
D2 dis 3+5
I3 _s 2+10
F4 cap 3+10
G4 li 2+5
B5 gl 2+5
D5 no 2+10
I5 us 2+5
TOTAL: 387

Câu trả lời này có vẻ hợp lệ. Hiện là người lãnh đạo.
Logic Knight

3

Python, 134 2 /349 = 50.02

Nếu tôi đã hiểu đúng các quy tắc, đây sẽ là một bài nộp hợp lệ.

from sys import *
stdout.write("""   ABCDEFGHIJKL
  ##############
1 #from   f  i #
2 #  r   not t #
3 #      write #
4 #  s   import#
5 #  y   False #
6 #  stdout    #
  ##############
A1 from 4+5
C1 or 2+5
H1 format 6+25
K1 iter 4+10
G2 not 3+5
G3 write 5+10
C4 sys 3+5
G4 import 6+10
G5 False 5+5
C6 stdout 6+10
TOTAL 134
""".format(not False or iter([])))

Bạn thực sự có thể tiếp tục tăng điểm của mình bằng cách thêm nhiều số nhận dạng: kích thước của chương trình tăng tuyến tính (gấp khoảng hai lần chiều dài số nhận dạng), trong khi điểm số tăng xấp xỉ bằng bình phương của độ dài số nhận dạng. Sau đó, thách thức trở thành nhiều hơn làm thế nào để nhồi nhét hầu hết các từ khóa vào hình vuông thay vì làm thế nào để viết một chương trình ngắn để làm điều đó.


Câu trả lời của bạn có vẻ hợp lệ. Tôi đã lên kế hoạch để thúc đẩy các lập trình viên viết một bộ giải động với một số mức độ hướng nội, nhưng tôi hy vọng phương pháp nhúng câu trả lời này sẽ dễ dàng hơn. Thở dài.
Logic Knight

Quan điểm của bạn rằng thách thức là nhiều câu đố hơn là lập trình được thực hiện tốt. Tôi đã thêm phần thưởng cho câu trả lời sử dụng vị trí thời gian chạy trong chương trình của họ. Phong cách in chuỗi vẫn hợp lệ, nhưng tôi hy vọng sẽ thấy nhiều giải pháp lập trình sử dụng phần thưởng hơn. Cảm ơn câu trả lời và hiểu biết của bạn +1.
Logic Knight

Có lẽ tôi chỉ thiếu một cái gì đó, nhưng tại sao stdout.writehơn là print, và format(not False or iter([]))cuối cùng là gì? Bạn cũng có thể dễ dàng thêm "là" bên cạnh "sys" và "cho" bên dưới "từ" ...
aquavitae

@aquavitae Bạn chỉ có thể sử dụng các định danh được sử dụng trong chương trình của mình theo cú pháp hợp lệ, vì vậy Frxstrem bao gồm các định danh sẽ được sử dụng trong câu đố. Chương trình không phải có ý nghĩa hoặc có hiệu quả.
Logic Knight

À, xin lỗi, rõ ràng tôi đã không đọc đúng vấn đề. Trong trường hợp đó, bạn có thể thay đổi formatthành đọciter([i for i in [not False is sys]])
aquavitae

0

Perl, 728 2 /639 = 829,4

Ồ, điều này không hợp lệ, đã bỏ lỡ rằng tôi phải có mã định danh trong mã của mình.

#!perl -l
use B::Keywords'@Symbols','@Barewords';
use List::Util shuffle;
srand 45502;
@b=@a=shuffle map{push@{+length},$_;$_}grep/^[a-z]{2,}$/,@Symbols,@Barewords;
$z=$"x12 .$/;$z x=6;
$s=length,$z=~s/ {$s}/$_/&&($_=0)for@a;
$_=$z;$"='|';
sub f{join'',/(.)(?=@_.*(\n))/sg}$_=f".{12}(.)"x5;
s/@a/$v=length$&;$tot+=$v*21;$r.=(map{m!.!;map{$&.$_}1..7}A..L)[@-]." $& $v+".($v*20)."\n";uc$&/ge;
$_=f".{6}(.)"x11;
s/@b/$v=length$&;$b=$&=~y!A-Z!!;$tot+=$v+$b*20;$c=lc$&;$r.=(map{m!.!;map{$_.$&}A..M}1..6)[@-]." $c $v+".($b*20)."\n";uc$&/ige;
$_=$z;
s/
/#
/mg;
s/^/++$l.' #'/mge;
print'   ',A..L,'
  ','#'x14,'
',$_,'  ','#'x14,"
${r}TOTAL: $tot"

Điều này đòi hỏi một mô-đun phản xạ perl ( B::Keywords). Có thể cài đặt trên Ubuntu với sudo apt-get install libb-keywords-perl. Với hạt giống được đưa ra trong đoạn mã trên, nó tạo ra câu trả lời 728:

   ABCDEFGHIJKL
  ##############
1 #dumplogforqr#
2 #lcfirstbreak#
3 #socketshmctl#
4 #requiregiven#
5 #lengthgmtime#
6 #getserventdo#
  ##############
B1 uc 2+40
C2 fc 2+40
F3 tr 2+40
G1 gt 2+40
I1 or 2+40
J1 recv 4+80
L4 ne 2+40
A1 dump 4+20
E1 log 3+20
H1 for 3+40
K1 qr 2+0
A2 lcfirst 7+60
H2 break 5+40
A3 socket 6+40
G3 shmctl 6+20
A4 require 7+20
H4 given 5+40
A5 length 6+0
G5 gmtime 6+20
A6 getservent 10+0
K6 do 2+0
TOTAL: 728

Lưu ý rằng các phiên bản khác nhau của perl có thể có RNG khác nhau và danh sách từ khóa khác nhau, nhưng sẽ dễ dàng tìm thấy một hạt giống có kết quả tương đương.


Bạn đã phát hiện ra một trong những vấn đề - số nhận dạng phải xảy ra ít nhất một lần trong mã của bạn. Có một vấn đề khác. Bạn không nên sử dụng các thư viện không được cung cấp trong gói ngôn ngữ cơ bản. Đây là một quy tắc cần thiết để ngăn chặn việc sử dụng các thư viện sẽ cung cấp lợi thế không công bằng trong thách thức này. Tôi hy vọng bạn có thể thay đổi cách tiếp cận của mình và tạo ra một câu trả lời Perl tốt cho thử thách.
Logic Knight
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.