Dalam Tetris tradisional , ada 7 batu bata tetromino yang berbeda , masing-masing dilambangkan dengan huruf yang mirip dengan bentuknya.
#
# # #
# ## # # ### ## ##
# ## ## ## # ## ##
I O L J T Z S
Pertimbangkan pengaturan bata ini yang dapat membuat persegi panjang W × H yang solid, untuk beberapa bilangan bulat positif W dan H. Misalnya, menggunakan 2 I, 1 L, 1 J, 2 T, dan 1 S, sebuah persegi panjang 7 × 4 dapat dibuat:
IIIITTT
LIIIITJ
LTTTSSJ
LLTSSJJ
Batu bata yang sama dapat disusun kembali (dengan menggerakkan dan memutar tetapi tidak membalik ) menjadi pola 7 × 4 yang berbeda:
IJJTLLI
IJTTTLI
IJSSTLI
ISSTTTI
Sekarang pertimbangkan untuk menggunakan blok kode persegi panjang sebagai pengganti pengaturan pertama. Misalnya 7x4 bit Python 3 ini, yang dicetak Tetris
ke stdout:
p=print
x='Tet'
y='ris'
p(x+y)#
Menurut pengaturan Tetris pertama 7 "batu bata" adalah ...
x '
int y ' ='r is
p=pr t p( ='Te )# x +y
Dalam pengaturan lain (salah satu dari banyak kemungkinan) mereka tidak dapat dipahami sebagai kode:
r#)x(x=
p'r'=y'
='istpT
p+ytnie
Tapi, mengingat batu bata secara terpisah, mungkin saja untuk menyatukannya kembali dengan benar. Ini adalah dasar dari tantangan.
Tantangan
Ini adalah tantangan polisi dan perampok . Ada dua peran yang saling bersaing, Jumblers dan Rebuilders .
Jumblers mengirimkan jawaban dengan blok kode yang telah dipecah menjadi batu bata Tetris.
Rebuilders mencoba membangun kembali blok-blok ini dalam pertanyaan terpisah yang didedikasikan untuk mereka: Jumblers vs Rebuilders: Pengkodean dengan Batu Bata Tetris - Area untuk Jawaban Rebuilder .
Jumblers
Hanya menggunakan ASCII yang dapat dicetak (kode hex 20 hingga 7E) tulis program persegi panjang W × H. Saat dijalankan, ia harus menampilkan satu - satunya kata Tetris
ke stdout (atau alternatif terdekat). Jangan memposting kode ini dalam jawaban Anda; jangan beri W atau H juga. Pecah menjadi beberapa susunan batu bata Tetris seperti contoh di atas dan posting ini dalam jawaban Anda. (Kode Anda mungkin berisi spasi tetapi karena sulit dibedakan, sebaiknya gunakan beberapa karakter lain sebagai ganti spasi dan beri tahu orang lain apa yang Anda gunakan.)
Semakin sulit untuk membangun kembali program Anda semakin baik. Mungkin ada banyak cara untuk mengatur ulang bata kode Anda menjadi persegi panjang, mungkin dengan dimensi yang berbeda. Apa yang dilakukan kode ketika dijalankan dalam pengaturan yang berbeda ini tidak masalah selama setidaknya satu pengaturan mencetak Tetris
ke stdout.
Satu-satunya batasan lainnya adalah bahwa W * H kurang dari 1025.
Jumblers harus menentukan bahasa pemrograman mereka (dan versi).
Pembangun ulang
Tujuan Anda adalah untuk mengambil bata-kode Jumbler dan memasukkannya kembali ke urutan semula, jadi Tetris
dicetak saat kode dijalankan. Jika pengaturan kerja yang Anda temukan bukan yang Jumbler pikirkan itu terlalu buruk bagi mereka.
Ingatlah bahwa hanya terjemahan dan rotasi yang diizinkan dalam pengaturan ulang, bukan mirroring.
Mencetak gol
Setiap kali kiriman dibangun kembali itu dianggap "retak" dan tidak lagi berjalan. Rebuilder pertama yang membangun kembali kiriman mendapat kredit untuk itu. Jika sebuah jawaban tidak diacak selama 72 jam, Jumbler akan mengungkapkan solusinya dan selanjutnya akan kebal dari retak. Seorang Jumbler harus melakukan ini untuk menang, karena jika tidak maka akan menjadi tidak jelas apakah ada solusi.
Jumbler yang menang adalah jawaban tidak terputus dengan area terkecil (W * H = 4 * num batu bata). Dalam hal ikatan, jawaban dengan suara terbanyak menang. Jawaban yang diterima untuk pertanyaan ini adalah Jumbler yang menang.
Rebuilder yang menang adalah pengguna yang memecahkan sebagian besar kiriman. Dalam hal ikatan itu berlaku untuk siapa saja yang retak area paling kumulatif.
Catatan
- Anda tidak boleh membangun kembali kiriman Anda sendiri. (Tetapi jika tidak, Anda dapat mengambil kedua peran.)
- Rebuilders mungkin tidak berusaha memecahkan jawaban yang sama lebih dari satu kali.
Papan angka
Diurutkan dari pengiriman terlama ke yang terbaru.
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
| Jumbler | Language | Area | Immune? | Rebuilt? | Rebuilder | Link | Solution Link |
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
| xnor | Python 3 | 212 | no | yes | foobar | https://codegolf.stackexchange.com/a/40142 | https://codegolf.stackexchange.com/a/40203 |
| xnor | Python 3 | 340 | no | yes | feersum | https://codegolf.stackexchange.com/a/40146 | https://codegolf.stackexchange.com/a/40189 |
| es1024 | C | 80 | no | yes | user23013 | https://codegolf.stackexchange.com/a/40155 | https://codegolf.stackexchange.com/a/40210 |
| Ethiraric | Brainfuck | 108 | yes | | | https://codegolf.stackexchange.com/a/40156 | |
| Qwertiy | JavaScript | 420 | yes | | | https://codegolf.stackexchange.com/a/40161 | |
| user23013 | Befunge | 360 | yes | | | https://codegolf.stackexchange.com/a/40163 | |
| user23013 | CJam | 80 | yes | | | https://codegolf.stackexchange.com/a/40171 | |
| Geobits | Java | 360 | yes | | | https://codegolf.stackexchange.com/a/40180 | |
| Dennis | CJam | 60 | yes | | | https://codegolf.stackexchange.com/a/40184 | |
| xnor | Python 3 | 160 | yes | | | https://codegolf.stackexchange.com/a/40192 | |
| COTO | C | 72 | yes | | | https://codegolf.stackexchange.com/a/40198 | |
| es1024 | C | 780 | yes | | | https://codegolf.stackexchange.com/a/40202 | |
| Gerli | Mathematica | 72 | no | yes | Martin Büttner | https://codegolf.stackexchange.com/a/40230 | https://codegolf.stackexchange.com/a/40242 |
| Hydrothermal | JavaScript | 80 | yes | | | https://codegolf.stackexchange.com/a/40235 | |
| Sam Yonnou | GolfScript | 48 (frontrunner) | yes | | | https://codegolf.stackexchange.com/a/40239 | |
| feersum | Matlab | 48 | | | | https://codegolf.stackexchange.com/a/40310 | |
| Beta Decay | Python 3 | 484 | | | | https://codegolf.stackexchange.com/a/40312 | |
| potato | Python 3 | 176 | | | | https://codegolf.stackexchange.com/a/40341 | |
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
(Terima kasih kepada http://www.sensefulsolutions.com/2010/10/format-text-as-table.html untuk pemformatan tabel.)
Pengguna COTO membuat alat yang sangat baik untuk bermain dengan bata kode. Saya telah mengubahnya menjadi cuplikan yang nyaman:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script>function parseSpec(s){function first(){var e,t;t=S.findIndex(function(t){return(e=t.findIndex(function(e){return/\S/.test(e)}))!=-1});return t==-1?null:[e,t]}function at(e){var t=e[0],n=e[1];return n>=0&&n<S.length&&t>=0&&t<S[n].length?S[n][t]:" "}function wipe(e){var t=e[0],n=e[1];if(n>=0&&n<S.length&&t>=0&&t<S[n].length)S[n][t]=" "}var P,S=s.split("\n").map(function(e){return e.split("")});var oPats=$(".proto-tet [pat]").get().map(function(e){return{sPat:eval("["+$(e).attr("pat")+"]"),e:e,block:function(e){return[at(e)].concat(this.sPat.map(function(t){return at([e[0]+t[0],e[1]+t[1]])}))},wipe:function(e){this.sPat.forEach(function(e){return wipe([P[0]+e[0],P[1]+e[1]])})},match:function(e){return!/\s/.test(this.block(e).join(""))}}});window.oPats=oPats;while(P=first()){var oPat=oPats.find(function(e){return e.match(P)});if(!oPat){orphan(at(P));wipe(P);continue}createPiece(oPat.e,oPat.block(P));wipe(P);oPat.wipe(P)}}function createPiece(e,t){function r(e){var t=$(this).position();G.isIgnoreClick=false;G.eDrag=this;G.iOffsets=[e.clientX-t.left,e.clientY-t.top]}function i(){if(G.isIgnoreClick)return;var e=$(this);s($(".proto-tet ."+e.attr("rr")),function(e,t){return n[t-1]},e.css("left"),e.css("top"));e.remove()}function s(e,t,n,s){e.clone().html(e.html().replace(/@(\d)(\d)/g,t)).appendTo("body").on("mousedown",r).click(i).css({left:n,top:s})}var n=[];s($(e),function(e,r,i){return n[r-1]=t[i-1]},18+G.iSpawn%8*18*4+"px",18+~~(G.iSpawn/8)*18*4+"px");G.iSpawn++}function init(){$(document).on("mouseup",function(){return G.eDrag=null}).on("mousemove",function(e){if(G.eDrag){var t=$(G.eDrag),n=Math.round((e.clientX-G.iOffsets[0])/18)*18,r=Math.round((e.clientY-G.iOffsets[1])/18)*18,i=t.position();if(n!=i.left||r!=i.top)G.isIgnoreClick=true;t.css({left:n+"px",top:r+"px"})}})}function orphan(e){error("Spec character not a part of any block: '"+e+"'")}function error(e){$(".error").css("display","block").append("<div>"+e+"</div>")}function go(){$(init);$(function(){parseSpec($("#spec").val())});$("#spec").remove();$("#info").remove();$("#go").remove()}var G={eDrag:null,isIgnoreClick:true,iSpawn:0};Array.prototype.findIndex=function(e){for(var t=0;t<this.length;t++){if(e(this[t]))return t}return-1};Array.prototype.find=function(e){var t=this.findIndex(e);if(t==-1)return;else return this[t]}</script><style>.proto-tet, .spec{display: none;}.tet-I{color: darkgreen;}.tet-J{color: orangered;}.tet-L{color: navy;}.tet-T{color: darkred;}.tet-O{color: darkcyan;}.tet-S{color: darkviolet;}.tet-Z{color: darkorange;}body > .tet{position: absolute;cursor: move;-webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;border-collapse: collapse;}.tet td{width: 18px;height: 18px;font: bold 14px "Courier New",monospace;text-align: center;vertical-align: middle;padding: 0;}.error{z-index: 1024;position: absolute;display: none;color: red;font-weight: bold;background-color: white;}textarea{font-family: "Courier New", Courier, monospace;}</style><div id='info'>Put code-bricks here and hit OK. Re-run the snippet to restart.<br>(You may need to replace spaces in code-bricks with some other character first.)</div><textarea id='spec' rows='16' cols='80'>ABCD a b Oo c oo d E h F efg hg GFE GH f H e I IJK J l L LK kji kl j i t OP p QR rs MN on ST q m W z XY zxw yx Y Z y w WXZ</textarea><br><button id='go' type='button' onclick='go()'>OK</button><div class="proto-tet"><table class="tet tet-I tet-I0" rr="tet-I1" pat="[1,0],[2,0],[3,0]"><tr><td>@11</td><td>@22</td><td>@33</td><td>@44</td></tr></table><table class="tet tet-I tet-I1" rr="tet-I2" pat="[0,1],[0,2],[0,3]"><tr><td>@11</td></tr><tr><td>@22</td></tr><tr><td>@33</td></tr><tr><td>@44</td></tr></table><table class="tet tet-I tet-I2" rr="tet-I3" ><tr><td>@40</td><td>@30</td><td>@20</td><td>@10</td></tr></table><table class="tet tet-I tet-I3" rr="tet-I0"><tr><td>@40</td></tr><tr><td>@30</td></tr><tr><td>@20</td></tr><tr><td>@10</td></tr></table><table class="tet tet-J tet-J0" rr="tet-J1" pat="[0,1],[-1,2],[0,2]"><tr><td></td><td>@11</td></tr><tr><td></td><td>@22</td></tr><tr><td>@33</td><td>@44</td></tr></table><table class="tet tet-J tet-J1" rr="tet-J2" pat="[0,1],[1,1],[2,1]"><tr><td>@31</td><td></td><td></td></tr><tr><td>@42</td><td>@23</td><td>@14</td></tr></table><table class="tet tet-J tet-J2" rr="tet-J3" pat="[1,0],[0,1],[0,2]"><tr><td>@41</td><td>@32</td></tr><tr><td>@23</td><td></td></tr><tr><td>@14</td><td></td></tr></table><table class="tet tet-J tet-J3" rr="tet-J0" pat="[1,0],[2,0],[2,1]"><tr><td>@11</td><td>@22</td><td>@43</td></tr><tr><td></td><td></td><td>@34</td></tr></table><table class="tet tet-O tet-O0" rr="tet-O1" pat="[1,0],[0,1],[1,1]"><tr><td>@11</td><td>@22</td></tr><tr><td>@33</td><td>@44</td></tr></table><table class="tet tet-O tet-O1" rr="tet-O2"><tr><td>@30</td><td>@10</td></tr><tr><td>@40</td><td>@20</td></tr></table><table class="tet tet-O tet-O2" rr="tet-O3"><tr><td>@40</td><td>@30</td></tr><tr><td>@20</td><td>@10</td></tr></table><table class="tet tet-O tet-O3" rr="tet-O0"><tr><td>@20</td><td>@40</td></tr><tr><td>@10</td><td>@30</td></tr></table><table class="tet tet-L tet-L0" rr="tet-L1" pat="[0,1],[0,2],[1,2]"><tr><td>@11</td><td></td></tr><tr><td>@22</td><td></td></tr><tr><td>@33</td><td>@44</td></tr></table><table class="tet tet-L tet-L1" rr="tet-L2" pat="[1,0],[2,0],[0,1]"><tr><td>@31</td><td>@22</td><td>@13</td></tr><tr><td>@44</td><td></td><td></td></tr></table><table class="tet tet-L tet-L2" rr="tet-L3" pat="[1,0],[1,1],[1,2]"><tr><td>@41</td><td>@32</td></tr><tr><td></td><td>@23</td></tr><tr><td></td><td>@14</td></tr></table><table class="tet tet-L tet-L3" rr="tet-L0" pat="[-2,1],[-1,1],[0,1]"><tr><td></td><td></td><td>@41</td></tr><tr><td>@12</td><td>@23</td><td>@34</td></tr></table><table class="tet tet-S tet-S0" rr="tet-S1" pat="[1,0],[-1,1],[0,1]"><tr><td></td><td>@21</td><td>@12</td></tr><tr><td>@43</td><td>@34</td><td></td></tr></table><table class="tet tet-S tet-S1" rr="tet-S2" pat="[0,1],[1,1],[1,2]"><tr><td>@41</td><td></td></tr><tr><td>@32</td><td>@23</td></tr><tr><td></td><td>@14</td></tr></table><table class="tet tet-S tet-S2" rr="tet-S3"><tr><td></td><td>@30</td><td>@40</td></tr><tr><td>@10</td><td>@20</td><td></td></tr></table><table class="tet tet-S tet-S3" rr="tet-S0"><tr><td>@10</td><td></td></tr><tr><td>@20</td><td>@30</td></tr><tr><td></td><td>@40</td></tr></table><table class="tet tet-Z tet-Z0" rr="tet-Z1" pat="[1,0],[1,1],[2,1]"><tr><td>@11</td><td>@22</td><td></td></tr><tr><td></td><td>@33</td><td>@44</td></tr></table><table class="tet tet-Z tet-Z1" rr="tet-Z2" pat="[-1,1],[0,1],[-1,2]"><tr><td></td><td>@11</td></tr><tr><td>@32</td><td>@23</td></tr><tr><td>@44</td><td></td></tr></table><table class="tet tet-Z tet-Z2" rr="tet-Z3"><tr><td>@40</td><td>@30</td><td></td></tr><tr><td></td><td>@20</td><td>@10</td></tr></table><table class="tet tet-Z tet-Z3" rr="tet-Z0"><tr><td></td><td>@40</td></tr><tr><td>@20</td><td>@30</td></tr><tr><td>@10</td><td></td></tr></table><table class="tet tet-T tet-T0" rr="tet-T1" pat="[1,0],[2,0],[1,1]"><tr><td>@11</td><td>@22</td><td>@33</td></tr><tr><td></td><td>@44</td><td></td></tr></table><table class="tet tet-T tet-T1" rr="tet-T2" pat="[-1,1],[0,1],[0,2]"><tr><td></td><td>@11</td></tr><tr><td>@42</td><td>@23</td></tr><tr><td></td><td>@34</td></tr></table><table class="tet tet-T tet-T2" rr="tet-T3" pat="[-1,1],[0,1],[1,1]"><tr><td></td><td>@41</td><td></td></tr><tr><td>@32</td><td>@23</td><td>@14</td></tr></table><table class="tet tet-T tet-T3" rr="tet-T0" pat="[0,1],[1,1],[0,2]"><tr><td>@31</td><td></td></tr><tr><td>@22</td><td>@43</td></tr><tr><td>@14</td><td></td></tr></table></div><div class="error"></div>
sumber
Jawaban:
GolfScript 48
I
potongan:O
potongan:T
potongan:J
potongan:Larutan
sumber
Java: 360 area
Terbuat dari campuran ketujuh jenis keping. Untuk mempermudah (?) Saya sudah memastikan bahwa semua potongan dengan tipe yang sama diputar ke orientasi yang sama. Karena Java memiliki bagian-bagian yang tidak dapat diubah banyak, saya telah meninggalkan bagian yang sangat jelas sebagai blok-I sederhana untuk memulainya.
Catatan: Karena Java memiliki beberapa ruang wajib, saya telah menggantinya dengan garis bawah (
_
) di bawah ini untuk keperluan tata letak. Ada 11 dari mereka total, dan mereka semua harus dikonversi ke spasi untuk menjalankan kode. Tidak ada spasi putih lain yang ada dalam kode, apa pun di bawah ini hanya untuk posisi.Ada:
Selamat bersenang-senang!
sumber
Brainfuck, 108 area
Kode ini terbuat dari potongan 27 I.
Saya tidak tahu apakah ada cara lain selain bruteforce untuk menemukan jawabannya. Jika ada, saya benar-benar ingin tahu caranya.
sumber
Python 3: 212 area [Dibangun Kembali]
Kode saya dipecah menjadi 53-
I
potongan berikut , yang saya tulis satu per baris menurut abjad.Selamat bersenang-senang!
sumber
print('Tetris'* (3580048039607960824098110131314133014381502228523172479258529553116373838184169435643604632480050165153525653945598563157585840631264256539704571638903974876749009825073297156762481649%38941394))
%3894
?print('Tetris'* (358UNKNOWN94))
dan karena saya cukup yakin bahwa Anda tidak merotasi ubin apa pun, yang saya lakukan adalah membangun semua permutasi yang mungkin dari ubin yang tersisa, bergabung bersama-sama dan dievaluasi apakah358UNKNOWN94
sama dengan1
, sementara saya digantiUNKNOWN
dengan permutasi . Jadi saya tidak menggunakan%3894
karena permutasi pencocokan yang berbeda ditemukan pertama kali;) Saya tidak tahu berapa lama tepatnya, tapi itu sekitar 20 menit menggunakan inti tunggal. Jadi saya benar-benar menggunakan sesuatu yang kurang sistematis, saya hanya bruteforced the solution;)JavaScript - Area 80
Sepertinya banyak dari jawaban ini hanya menggunakan banyak potongan I dan mungkin satu atau dua potong O, jadi saya melemparkan ini bersama-sama dengan beberapa bentuk yang lebih menarik.
Setiap bagian dipisahkan oleh dua ruang. Tanda-tanda dua hash sebenarnya spasi dalam kode.
Selamat bersenang-senang!
sumber
Javascript, area 420
Hanya blok-I.
Tidak ada obfuscator standar yang digunakan. Semua kode termasuk kebingungan dan membuat daftar blok yang diurutkan ini dibuat kurang dari 16 baris kode saya sendiri.
Saatnya menunjukkan bagaimana pembuatannya:
Jadi, itu hanya panggilan untuk
eval
dengan'console.log("Tetris")'
argumen yang dikaburkan , yang panjangnya 420 simbol. Ini dibagi menjadi 4 baris dari 105 simbol dan dibaca oleh kolom dan abjad diurutkan.Kebingungan untuk 10 digit hardcoded, untuk simbol lain digunakan 10 simbol pertama dari 4 kombinasi yang dilewati untuk
add
berfungsi. Jika tidak ada kebingungan untuk beberapa simbol itu dilewatkan begitu saja.sumber
C, 80 area
Terbuat dari 12
I
buah dan 8O
buah. Sintaks C selalu menyenangkan.I
potongan tanpa urutan tertentu:O
potongan:sumber
main(q){char c[]
={'/T','$"e','t'
,0162,'rIi>`:i',
'?#>s',q<q/**/};
return puts(c);}
CJam, 60 (15 O)
Larutan
sumber
Befunge, area 360
90
O
buah.Anda bisa mencobanya di sini .
sumber
Area Python 3: 340 [Dibangun Kembali]
Terbuat dari 85
I
buah, diberikan di sini abjad satu per baris.Sebagai daftar Python:
sumber
Python 3: 160 area
Setelah feersum retak , saya mencoba memperketat kode saya untuk membuatnya lebih sulit untuk menghindari kriptografi omong kosong. Itu terbuat dari 40
I
buah, terdaftar satu per baris:Sebagai daftar Python:
Diubah:
pow
digunakan1
'sSaya khawatir tentang banyak faktor daerah tersebut.
sumber
C - Area 72
Blok:
Karena hanya pengajuan C lainnya yang retak. ;)
72 karakter yang rapi. Kebingungan murni. Tidak ada masalah NP-hard untuk memecahkan atau bilangan bulat besar untuk faktor. Pinjam beberapa trik dari salah satu yang terbaik. Spasi direpresentasikan menggunakan
.
s. Tidak ada aktual.
yang muncul dalam solusi.Saya telah memeriksa ulang solusinya untuk memastikan validitasnya.
sumber
CJam, 80 area
20
O
buah.sumber
C - Area 780
Ada total 195 buah. Tidak ada komentar yang digunakan. Tidak ada yang rumit.
Catatan: semua garis miring terbalik (
\
) harus diganti dengan spasi.95 buah
I
:35 buah
O
:18 buah
L
:25 buah
J
:10 buah
T
:4 buah
Z
:8 buah
S
:Larutan
sumber
Wolfram, area 72
Di mana-mana Anda melihat tanda hubung (-), ganti dengan spasi
saya
j
l
Hai
s
z
t
sumber
T
blok ketiga harus sebaliknya. Saya berhasil membangunnya kembali .MATLAB, area 48
Sayangnya, sepertinya tidak berfungsi di Octave.
sumber
Python 3 176 Area
Saya tidak menggunakan garis bawah pada program ini, jadi saya memutuskan untuk mengganti semua spasi dengan garis bawah untuk menambah keterbacaan. Pastikan untuk menggantinya kembali ke spasi ketika gagal memasangnya kembali.
Saya Blok:
O Blok:
Blok L:
Blok J:
T Block:
Z Blocks:
S Blocks:
sumber
Python 3
Area - 484
Spasi digantikan oleh
%
. Ada beberapa komentar yang digunakan sebagai padding. Cukup banyak pengulangan kode. Mungkin cukup rumit.121 Os
sumber