Bahasa Inggris dan sebagian besar bahasa pemrograman ditulis dan dibaca dari kiri ke kanan, dari atas ke bawah, tetapi tidak harus demikian .
Bahkan untuk blok teks
ABC
DEF
Saya dapat memikirkan delapan cara terkait yang bisa dibaca:
- Kiri-ke-kanan, atas-bawah (LTR-TTB):
ABCDEF
- Atas-ke-bawah, dari kiri ke kanan (TTB-LTR):
ADBECF
- Kiri-ke-kanan, bawah-ke-atas (LTR-BTT):
DEFABC
- Bawah-ke-atas, kiri-ke-kanan (BTT-LTR):
DAEBFC
- RTL-TTB kanan-ke-kiri, atas-ke-bawah:
CBAFED
- Atas-ke-bawah, kanan-ke-kiri (TTB-RTL):
CFBEAD
- RTL-BTT kanan-ke-kiri, bawah-ke-atas:
FEDCBA
- Bawah-ke-atas, kanan-ke-kiri (BTT-RTL):
FCEBDA
Tantangan
Tulis blok teks segi empat yang dapat dibaca di masing-masing dari delapan cara di atas sebagai delapan program baris tunggal dalam bahasa pilihan Anda. Masing-masing program harus menghasilkan bilangan bulat yang berbeda dari satu hingga delapan.
Tidak masalah arah bacaan mana yang menghasilkan angka, mereka tidak harus cocok dengan angka di atas. Misalnya, jika blok teks Anda masih
ABC
DEF
maka program ABCDEF
keluaran kekuatan 5
dan FEDCBA
keluaran kekuatan 2
, dan enam program lain akan output 1
, 3
, 4
, 6
, 7
, dan 8
dalam beberapa urutan.
Blok teks dapat berisi karakter apa pun kecuali terminator baris .
Output harus pergi ke stdout atau alternatif serupa jika bahasa Anda tidak memiliki stdout yang tepat. Tidak ada input. Anda dapat menganggap program dijalankan dalam lingkungan REPL.
Pietu1998 menulis JSFiddle yang memberikan 8 program baris tunggal yang berbeda ketika diberi satu blok teks. Saya telah membuatnya menjadi potongan stack:
<script>function f(n){n=n.split("\n");var e=n.map(function(n){return n.length}).sort()[n.length-1];n=n.map(function(n){return(n+Array(e+1).join(" ")).substring(0,e)});var t=n[0].split("").map(function(e,t){return n.map(function(n){return n[t]}).join("")});n=[n.join(""),n.reverse().join(""),t.join(""),t.reverse().join("")],n=n.concat(n.map(function(n){return n.split("").reverse().join("")})),document.getElementById("a").innerHTML=n.map(function(n,e){return document.getElementById("b").checked?n+" "+"LLTTRRBB"[e]+"T"+"RRBBLLTT"[e]+"-"+"TBLRBTRL"[e]+"T"+"BTRLTBLR"[e]:n}).join("\n")}</script><textarea onkeyup="f(this.value)" id="c" placeholder="Code"></textarea><br/><input type="checkbox" id="b" onchange="f(document.getElementById('c').value)" checked/> <label for="b">Show directions</label><br/><pre id="a"></pre>
Anda masih dapat menemukan versi CJam Martin di sini .
Mencetak gol
Skor Anda adalah area blok teks Anda (lebar dikalikan tinggi). Pengajuan dengan skor terendah akan menang. (Intinya kode terkecil menang, maka tag kode-golf .) Tiebreak pergi ke kiriman yang diposting sebelumnya.
Contohnya adalah 2 oleh 3 sehingga nilainya adalah 6. Skor kurang dari 4 (2 oleh 2) tidak mungkin karena beberapa dari 8 program akan sama dan tidak dapat menghasilkan dua nilai yang berbeda.
sumber
String.prototype.repeat()
masih agak baru. Juga dikonfirmasi untuk bekerja di IE sekarang. biola baruJawaban:
J, 3 * 3 = 9
Menjalankan semua arah:
Penjelasan:
[
(left
) mengambil sisi kiri dari dua operan sehingga pada dasarnya membatalkan seluruh sisi kanan dari ekspresi kita misalnya1+2[2+2+2
menjadi1+2[6
dan kemudian1+2
.n
ekspresi masing-masing- operasi satu dengan nomor1
dan satu dengan hanya2
s. Penambahan dengan1
menghasilkan angka ganjil dan yang lainnya menghasilkan yang genap.sumber
[
dengan;
dan itu harus bekerja di lingkungan REPL sebagian besar bahasa.Befunge-98 ,
5x5 = 255x3 = 15Saya menulis naskah kecil yang menemukan angka yang benar untuk saya. Butuh beberapa saat, tapi hei, saya baru saja mengalahkan GolfScript! : D
Skrip yang saya gunakan ada di sini dan di sini , tetapi saya tidak menyarankan untuk melihatnya karena gaya kode sangat karsinogenik.
Subprogram
Versi lama
Subprogram
Keluarkan angka masing-masing 1-8.
sumber
Brainfuck $ , 4x3 = 12
Brainfuck $ sangat mirip dengan Brainfuck , tetapi memiliki beberapa perintah lagi, termasuk perintah untuk menampilkan nilai sel saat ini sebagai keluaran numerik, yang sangat berguna untuk tantangan ini.
Perintah satu baris:
sumber
TECO, 3 * 5 = 15
=
mencetak nilai ekspresi numerik terakhir.\
digunakan untuk membaca atau menulis angka dari string, tetapi saya hanya menggunakannya sebagai discard di sini.+4 5+2=4 +1 \
7+ +2+4=1 4 5 \
6+ +2+1=4 4 \ 5
3+1 \+2=4 +4 5
2\ 1+ 4=2+5 4+
5\ 5 4 1=4+2+ +
15 \ 4 4=1+2+ +
45 4+ 4=2+\ 1+
8sumber
piet - 12x12 = 144
Karena program satu baris tidak pernah dapat berakhir, anggap ia berakhir setelah output pertama.
8 subprogram dalam satu gambar:
sumber
GolfScript, 4x4 = 16
Memanfaatkan "komentar super" yang baik: sebuah komentar yang tak tertandingi
}
mengabaikan sisa kode (pada kenyataannya, dalam hal ini komentar normal#
akan bekerja dengan baik, karena semua kode dijalankan sebagai satu baris). Jadi dari setiap sudut hanya ada satu nomor, atau (ke arah lain) angka itu bertambah 1, karena eksekusi berakhir dan isi tumpukan dicetak. 8 program tersebut adalahsumber
Haskell, 26x26 = 676
Menggunakan komentar (
--
) untuk menyembunyikan bit mundur dan ke samping. Ini membuatnya sangat lamasumber
Pendahuluan , 5x3 = 15
Ini mengasumsikan interpreter Python , yang mencetak nilai sebagai angka, bukan kode karakter.
Ini tidak mengalahkan Befunge $, tapi itu mengalahkan pengiriman GolfScript saya, dan saya suka kesederhanaannya. Perhatikan juga bahwa ia hanya menggunakan 9 karakter non-spasi,
yang kurang dari pengiriman lainnya sejauh ini(J menyerang lagi :)). Di Prelude, setiap digit didorong ke tumpukan secara individual, dan tergantung pada jalurnya, ada angka yang berbeda tepat sebelum!
, yang hanya mencetak elemen tumpukan teratas. 8 program tersebut adalah:Atau, ada juga
Yang mendorong bilangan ganjil di jalur vertikal, dan menambahnya dengan
1
di jalur horizontal:sumber
CJam - 7 × 7
Tidak mengesankan, tetapi tidak ada jawaban CJam dan saya suka tampilannya :)
Ini terutama menggunakan fakta yang
];
membersihkan tumpukan.Cobalah online
sumber
Ruby - 7x7
Juga tidak mengesankan, taktik yang sama dengan jawaban Haskell.
sumber
R, 9x9
Tidak ada ruang putih, tidak ada komentar.
Saya kira ini bisa diperluas ke ukuran apa pun yang Anda inginkan. Saya pikir operator modulo adalah yang paling fleksibel dari operator yang tersedia, karena mencegah nilai menjadi terlalu besar terlepas dari ukuran data, dan tidak ada efek dari memiliki angka yang sangat besar di antaranya.
sumber
Bahasa Pemrograman Ini , 5 * 9 = 45
Yang diterjemahkan menjadi ini:
Sejak
;
mengakhiri program, yang di atas diterjemahkan menjadi ini:Penjelasan: angka apa saja dari
0
untuk9
mendorong angka yang sesuai ke tumpukan.+
muncul dua nilai teratasx
dany
dari tumpukan dan mendorongx + y
ke tumpukan.i
menampilkan tumpukan sebagai bilangan bulat.sumber