Diamond
Priskribo de la ĉi-paĝa enhavo
Konvertado de Diamond al pluri program-lingvoj.
Diamond ofte estas la unua programo konvertita en la projektoj Basics off.
Ĉi-tiu programo estas konvertita en 45 program-lingvojn.
Originalo
Origin of diamond.bas:
Example included in Vintage BASIC 1.0.3.
http://vintage-basic.net/
10 LINES=17
20 FORI=1TOLINES/2+1
30 FORJ=1TO(LINES+1)/2-I+1:PRINT" ";:NEXT
40 FORJ=1TOI*2-1:PRINT"*";:NEXT
50 PRINT
60 NEXTI
70 FORI=1TOLIVES/2:REM note misspelled variable is the same
75 REM because variables are unique to only two characters
80 FORJ=1TOI+1:PRINT" ";:NEXT
90 FORJ=1TO((LINES+1)/2-I)*2-1:PRINT"*";:NEXT
100 PRINT
110 NEXTI
Eliraĵo
*
***
*****
*******
*********
***********
*************
***************
*****************
***************
*************
***********
*********
*******
*****
***
*
En 8th
\ Diamond
\ Original version in BASIC:
\ Example included in Vintage BASIC 1.0.3.
\ http://www.vintage-basic.net
\ This version in 8th:
\ Copyright (c) 2023, Marcos Cruz (programandala.net)
\ SPDX-License-Identifier: Fair
\ Written on 2023-03-09.
\ Last modified 20251204T2247+0100.
17 constant lines
: star \ --
"*" . ;
\ Print a star.
: diamond_top \ n --
>r ' space 1 lines 1 n:+ 2 / r@ n:- 1 + loop
' star 1 r> 2 * 1 n:- loop cr ;
\ Print the diamond top part, _n_ lines high.
: diamond_bottom \ n --
>r ' space 1 r@ 1 n:+ loop
' star 1 lines 1 + 2 / r> n:- 2 * 1 n:- loop cr ;
\ Print the diamond bottom part, _n_ lines high.
: app:main \ --
' diamond_top 1 lines 2 / 1 + loop
' diamond_bottom 1 lines 2 / loop ;
En Ada
-- Diamond
--
-- Original version in BASIC:
-- Example included in Vintage BASIC 1.0.3.
-- http://www.vintage-basic.net
--
-- This version in Ada:
-- Copyright (c) 2025, Marcos Cruz (programandala.net)
-- SPDX-License-Identifier: Fair
--
-- Written on 2025-03-19.
--
-- Last modified: 20251204T2258+0100.
with ada.text_io;
use ada.text_io;
procedure diamond is
lines : constant integer := 17;
begin
for i in 1 .. lines / 2 + 1 loop
for j in 1 .. (lines + 1) / 2 - i + 1 loop
put (" ");
end loop;
for j in 1 .. i * 2 - 1 loop
put ("*");
end loop;
new_line;
end loop;
for i in 1 .. lines / 2 loop
for j in 1 .. i + 1 loop
put (" ");
end loop;
for j in 1 .. ((lines + 1) / 2 - i) * 2 - 1 loop
put ("*");
end loop;
new_line;
end loop;
end diamond;
En Arturo
; Diamond
; Original version in BASIC:
; Example included in Vintage BASIC 1.0.3.
; http://www.vintage-basic.net
; This version in Arturo:
; Copyright (c) 2023, Marcos Cruz (programandala.net)
; SPDX-License-Identifier: Fair
;
; Written in 2023-10-16/17.
;
; Last modified: 20251205T0054+0100.
lines: 17
; Print a star.
printStar: function[][ print `*` ]
; Print the diamond top part, _i_ lines high.
diamondTop: function[i][
loop 1 .. (((lines + 1) / 2) - i) + 1 'j [ prints " " ]
loop 1 .. (i * 2) - 1 'j [ prints "*" ]
print ""
]
; Print the diamond bottom part, _i_ lines high.
diamondBottom: function[i][
loop 1 .. i + 1 'j [ prints " " ]
loop 1 .. ((((lines + 1) / 2) - i) * 2) - 1 'j [ prints "*" ]
print ""
]
loop 1 .. (lines / 2) + 1 'i [ diamondTop i ]
loop 1 .. lines / 2 'i [ diamondBottom i ]
En C#
// Diamond
// Original version in BASIC:
// Example included in Vintage BASIC 1.0.3.
// http://www.vintage-basic.net
// This version in C#:
// Copyright (c) 2024, Marcos Cruz (programandala.net)
// SPDX-License-Identifier: Fair
//
// Written on 2024-12-20.
//
// Last modified 20251205T1534+0100.
using System;
class Diamond
{
static void Main()
{
const int LINES = 17;
int i = 1;
int j = 0;
i = 1;
while (i <= LINES / 2 + 1)
{
j = 1;
while (j <= (LINES + 1) / 2 - i + 1)
{
Console.Write(" ");
j += 1;
}
j = 1;
while (j <= i * 2 - 1)
{
Console.Write("*");
j += 1;
}
Console.WriteLine();
i += 1;
}
i = 1;
while (i <= LINES / 2)
{
j = 1;
while (j <= i + 1)
{
Console.Write(" ");
j += 1;
}
j = 1;
while (j <= ((LINES + 1) / 2 - i) * 2 - 1)
{
Console.Write("*");
j += 1;
}
Console.WriteLine();
i += 1;
}
}
}
En C3
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in C3:
Copyright (c) 2025, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2025-03-05.
Last modified 20250305T0221+0100.
*/
import std::io;
const int LINES = 17;
fn void main() {
for (int i = 1; i < LINES / 2 + 2; i += 1) {
for (int j = 1; j < (LINES + 1) / 2 - i + 2; j += 1) {
io::print(" ");
}
for (int j = 1; j < i * 2; j += 1) {
io::print("*");
}
io::printn();
}
for (int i = 1; i < LINES / 2 + 1; i += 1) {
for (int j; j < i + 1; j += 1) {
io::print(" ");
}
for (int j = 1; j < ((LINES + 1) / 2 - i) * 2; j += 1) {
io::print("*");
}
io::printn();
}
}
En Chapel
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Chapel:
Copyright (c) 2025, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2025-01-19, 2025-04-04.
Last modified 20250405T2002+0200.
*/
import IO;
param lines = 17;
proc main() {
for i in 1 ..< lines / 2 + 2 {
for 1 ..< (lines + 1) / 2 - i + 2 {
write(" ");
}
for 1 ..< i * 2 {
write("*");
}
writeln();
}
for i in 1 ..< lines / 2 + 1 {
for 1 ..< i + 2 {
write(" ");
}
for 1 ..< ((lines + 1) / 2 - i) * 2 {
write("*");
}
writeln();
}
}
En Clojure
;; Diamond
;; Original version in BASIC:
;; Example included in Vintage BASIC 1.0.3.
;; http://www.vintage-basic.net
;; This version in Clojure:
;; Copyright (c) 2024, Marcos Cruz (programandala.net)
;; SPDX-License-Identifier: Fair
;;
;; Written on 2024-12-10.
;;
;; Last modified 20241210T2145+0100.
(def lines 17)
(dotimes [i (+ (/ lines 2) 1)]
(do
(dotimes [j (+ (- (/ (+ lines 1) 2) (+ i 1)) 1)]
(print " "))
(dotimes [j (- (* (+ i 1) 2) 1)]
(print "*"))
(println)))
(dotimes [i (/ lines 2)]
(do
(dotimes [j (+ i 2)]
(print " "))
(dotimes [j (- (* (- (/ (+ lines 1) 2) (+ i 1)) 2) 1)]
(print "*"))
(println)))
En Crystal
# Diamond
# Original version in BASIC:
# Example included in Vintage BASIC 1.0.3.
# http://www.vintage-basic.net
# This version in Crystal:
# Copyright (c) 2023, Marcos Cruz (programandala.net)
# SPDX-License-Identifier: Fair
#
# Written in 2023-09.
#
# Last modified: 20231104T0010+0100.
LINES = 17
(1..(LINES / 2 + 1)).each do |i|
(1..((LINES + 1) / 2 - i + 1)).each do
print ' '
end
(1..(i * 2 - 1)).each do
print '*'
end
puts
end
(1..(LINES / 2)).each do |i|
(1..(i + 1)).each do
print ' '
end
(1..(((LINES + 1) / 2 - i) * 2 - 1)).each do
print '*'
end
puts
end
En D
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in D:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-03-22/26.
Last modified 20251219T2131+0100.
*/
module diamond;
void main()
{
import std.stdio : write;
import std.stdio : writeln;
enum lines = 17;
foreach (i; 1 .. lines / 2 + 2)
{
foreach (j; 1 .. (lines + 1) / 2 - i + 2)
{
write(" ");
}
foreach (j; 1 .. i * 2)
{
write("*");
}
writeln();
}
foreach (i; 1 .. lines / 2 + 1)
{
foreach (j; 1 .. i + 2)
{
write(" ");
}
foreach (j; 1 .. ((lines + 1) / 2 - i) * 2)
{
write("*");
}
writeln();
}
}
En Elixir
# Diamond
# Original version in BASIC:
# Example included in Vintage BASIC 1.0.3.
# http://www.vintage-basic.net
# This version in Elixir:
# Copyright (c) 2026, Marcos Cruz (programandala.net)
# SPDX-License-Identifier: Fair
#
# Written on 2026-01-13
#
# Last modified: 20260113T2101+0100.
defmodule Diamond do
def lines do
17
end
defp print_char(number, max_number, char) do
if number == max_number do
:ok
else
IO.write(char)
print_char(number + 1, max_number, char)
end
end
def print_top_line(line, max_line) do
if line == max_line do
:ok
else
print_char(1, div((Diamond.lines + 1), 2) - line + 2, " ")
print_char(1, line * 2, "*")
IO.puts("")
print_top_line(line + 1, max_line)
end
end
def print_bottom_line(line, max_line) do
if line == max_line do
:ok
else
print_char(1, line + 2, " ")
print_char(1, (div((Diamond.lines + 1), 2) - line) * 2, "*")
IO.puts("")
print_bottom_line(line + 1, max_line)
end
end
end
Diamond.print_top_line(1, div(Diamond.lines, 2) + 2)
Diamond.print_bottom_line(1, div(Diamond.lines, 2) + 1)
En F#
// Diamond
// Original version in BASIC:
// Example included in Vintage BASIC 1.0.3.
// http://www.vintage-basic.net
// This version in F#:
// Copyright (c) 2024, Marcos Cruz (programandala.net)
// SPDX-License-Identifier: Fair
//
// Written on 2024-12-30.
//
// Last modified 20241230T1639+0100.
[<EntryPoint>]
let main argv =
let LINES = 17
let mutable i = 1
let mutable j = 1
while i <= LINES / 2 + 1 do
j <- 1
while j <= (LINES + 1) / 2 - i + 1 do
printf " "
j <- j + 1
j <- 1
while j <= i * 2 - 1 do
printf "*"
j <- j + 1
printfn ""
i <- i + 1
i <- 1
while i <= LINES / 2 do
j <- 1
while j <= i + 1 do
printf " "
j <- j + 1
j <- 1
while j <= ((LINES + 1) / 2 - i) * 2 - 1 do
printf "*"
j <- j + 1
printfn ""
i <- i + 1
0 // integer exit code
// vim: filetype=fsharp
En Factor
! Diamond
! Original version in BASIC:
! Example included in Vintage BASIC 1.0.3.
! http://www.vintage-basic.net
! This version in Factor:
! Copyright (c) 2024, Marcos Cruz (programandala.net)
! SPDX-License-Identifier: Fair
! Written on 2024-11-30, 2024-12-03.
! Last modified 20241203T0106+0100.
USING: io math ranges sequences ;
IN: diamond
CONSTANT: lines 17
: print-star ( -- )
"*" write ;
: print-space ( -- )
" " write ;
: end-line ( -- )
"" print ;
:: print-top ( height -- )
lines 1 + 2 / height - 1 + [ print-space ] times
height 2 * 1 - [ print-star ] times end-line ;
! Print the diamond top part, with the given _height_.
:: print-bottom ( height -- )
height 1 + [ print-space ] times
lines 1 + 2 / height - 2 * 1 - [ print-star ] times end-line ;
! Print the diamond bottom part, with the given _height_.
: run ( -- )
lines 2 / 1 + [1..b] [ print-top ] each
lines 2 / [1..b] [ print-bottom ] each ;
MAIN: run
En FreeBASIC
/'
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in FreeBASIC:
Copyright (c) 2024, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2024-11-20.
Last modified: 20241120T1840+0100.
'/
const lines as integer = 17
dim i as integer = 0
dim j as integer = 0
for i = 1 to lines / 2 + .5
for j = 1 to (lines + 1) / 2 - i + 1
print " ";
next
for j = 1 to i * 2 - 1
print "*";
next
print
next
for i = 1 to lines / 2
for j = 1 to i + 1
print " ";
next
for j = 1 to ((lines + 1) / 2 - i) * 2 - 1
print "*";
next
print
next
' vim: filetype=freebasic
En Gleam
// Diamond
// Original version in BASIC:
// Example included in Vintage BASIC 1.0.3.
// http://www.vintage-basic.net
// This version in Gleam:
// Copyright (c) 2026, Marcos Cruz (programandala.net)
// SPDX-License-Identifier: Fair
//
// Written in 2026-01-12/13.
//
// Last modified 20260207T0111+0100.
import gleam/io
const lines = 17
fn print_character(number: Int, max_number: Int, char: String) {
case number == max_number {
True -> Nil
False -> {
io.print(char)
print_character(number + 1, max_number, char)
}
}
}
fn print_top_line(line: Int, max_line: Int) {
case line == max_line {
True -> Nil
False -> {
print_character(1, {lines + 1} / 2 - line + 2, " ")
print_character(1, line * 2, "*")
io.println("")
print_top_line(line + 1, max_line)
}
}
}
fn print_bottom_line(line: Int, max_line: Int) {
case line == max_line {
True -> Nil
False -> {
print_character(1, line + 2, " ")
print_character(1, {{lines + 1} / 2 - line} * 2, "*")
io.println("")
print_bottom_line(line + 1, max_line)
}
}
}
pub fn main() {
print_top_line(1, lines / 2 + 2)
print_bottom_line(1, lines / 2 + 1)
}
En Go
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Go:
Copyright (c) 2024, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2024-12-28.
Last modified: 20241231T0218+0100.
*/
package main
import "fmt"
const lines int = 17
func main() {
for i := 1; i <= lines/2+1; i++ {
for j := 1; j <= (lines+1)/2-i+1; j++ {
fmt.Print(" ")
}
for j := 1; j <= i*2-1; j++ {
fmt.Print("*")
}
fmt.Println()
}
for i := 1; i <= lines/2; i++ {
for j := 1; j <= i+1; j++ {
fmt.Print(" ")
}
for j := 1; j <= ((lines+1)/2-i)*2-1; j++ {
fmt.Print("*")
}
fmt.Println()
}
}
En Hare
// Diamond
// Original version in BASIC:
// Example included in Vintage BASIC 1.0.3.
// http://www.vintage-basic.net
// This version in Hare (v0.24.2):
// Copyright (c) 2024, Marcos Cruz (programandala.net)
// SPDX-License-Identifier: Fair
// Written in 2024-12-14/15.
// Last modified: 20260213T1645+0100.
use fmt;
def LINES = 17;
export fn main() void = {
for (let i = 1; i <= LINES / 2 + 1; i += 1) {
for (let j = 1; j <= (LINES + 1) / 2 - i + 1; j += 1) {
fmt::print(" ")!;
};
for (let j = 1; j <= i * 2 - 1; j += 1) {
fmt::print("*")!;
};
fmt::println()!;
};
for (let i = 1; i <= LINES / 2; i += 1) {
for (let j = 1; j <= i + 1; j += 1) {
fmt::print(" ")!;
};
for (let j = 1; j <= ((LINES + 1) / 2 - i) * 2 - 1; j += 1) {
fmt::print("*")!;
};
fmt::println()!;
};
};
En Icon
# Diamond
#
# Original version in BASIC:
# Example included in Vintage BASIC 1.0.3.
# http://www.vintage-basic.net
#
# This version in Icon:
# Copyright (c) 2023, Marcos Cruz (programandala.net)
# SPDX-License-Identifier: Fair
#
# Written in 2023-03-03.
#
# Last modified 20231103T2342+0100.
$define lines 17
procedure main()
every i := 1 to lines / 2 + 1 do {
every j := 1 to (lines + 1) / 2 - i + 1 do writes(" ")
every j := 1 to i * 2 - 1 do writes("*")
write()
}
every i := 1 to lines / 2 do {
every j := 1 to i + 1 do writes(" ")
every j := 1 to ((lines + 1) / 2 - i) * 2 - 1 do writes("*")
write()
}
end
En Io
#!/usr/bin/env io
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Io:
Copyright (c) 2024, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2024-12-02.
Last modified: 20241202T0206+0100.
*/
LINES := 17
for(i, 1, LINES / 2 + 1,
for(j, 1, (LINES + 1) / 2 - i + 1,
" " print
)
for(j, 1, i * 2 - 1,
"*" print
)
"" println
)
for(i, 1, LINES / 2,
for(j, 1, i + 1,
" " print
)
for(j, 1, ((LINES + 1) / 2 - i) * 2 - 1,
"*" print
)
"" println
)
En Janet
# Diamond
# Original version in BASIC:
# Example included in Vintage BASIC 1.0.3.
# http://www.vintage-basic.net
# This version in Janet:
# Copyright (c) 2025, Marcos Cruz (programandala.net)
# SPDX-License-Identifier: Fair
#
# Written on 2025-12-22.
#
# Last modified 20251223T1903+0100.
(defn main [& args]
(def lines 17)
(for i 1 (+ (/ lines 2) 1)
(for j 1 (+ (- (/ (+ lines 1) 2) i) 2)
(prin " "))
(for j 1 (* i 2)
(prin "*"))
(print))
(for i 1 (/ lines 2)
(for j 1 (+ i 2)
(prin " "))
(for j 1 (* (- (/ (+ lines 1) 2) i) 2)
(prin "*"))
(print)))
En Julia
# Diamond
# Original version in BASIC:
# Example included in Vintage BASIC 1.0.3.
# http://www.vintage-basic.net
# This version in Julia:
# Copyright (c) 2023, Marcos Cruz (programandala.net)
# SPDX-License-Identifier: Fair
# Written on 2023-07-08.
# Last modified: 20241029T1615+0100.
lines = 17
for i = 1 : lines / 2 + 1
for j = 1 : (lines + 1) / 2 - i + 1
print(" ")
end
for j = 1 : i * 2 - 1
print("*")
end
println()
end
for i = 1 : lines / 2
for j = 1 : i + 1
print(" ")
end
for j = 1 : ((lines + 1) / 2 - i) * 2 - 1
print("*")
end
println()
end
En Kotlin
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Kotlin:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-08, 2023-10.
Last modified: 20231104T0030+0100.
*/
fun main() {
val lines = 17
var i = 1
var j: Int
while (i <= lines / 2 + 1) {
j = 1
while (j <= (lines + 1) / 2 - i + 1) {
print(" ")
j += 1
}
j = 1
while (j <= i * 2 - 1) {
print("*")
j += 1
}
println()
i += 1
}
i = 1
while (i <= lines / 2) {
j = 1
while (j <= i + 1) {
print(" ")
j += 1
}
j = 1
while (j <= ((lines + 1) / 2 - i) * 2 - 1) {
print("*")
j += 1
}
println()
i += 1
}
}
En Lobster
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Lobster:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2023-09-16.
Last modified 20250318T1528+0100.
*/
let LINES = 17
var i = 1
while i <= int(LINES / 2 + 1):
let indent = repeat_string(" ", int((LINES + 1) / 2) - i + 1)
let stars = repeat_string("*", i * 2 - 1)
print(concat_string([ indent, stars ], ""))
i += 1
i = 1
while i <= int(LINES / 2):
let indent = repeat_string(" ", i + 1)
let stars = repeat_string("*", (int((LINES + 1) / 2) - i) * 2 - 1)
print(concat_string([ indent, stars ], ""))
i += 1
En Nature
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Nature:
Copyright (c) 2025, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2025-12-21.
Last modified: 20251221T1724+0100.
*/
const LINES = 17
fn main() {
for int i = 1; i <= LINES / 2 + 1; i += 1 {
for int j = 1; j <= (LINES + 1) / 2 - i + 1; j += 1 {
print(" ")
}
for int j = 1; j <= i * 2 - 1; j += 1 {
print("*")
}
println()
}
for int i = 1; i <= LINES / 2; i += 1 {
for int j = 1; j <= i + 1; j += 1 {
print(" ")
}
for int j = 1; j <= ((LINES + 1) / 2 - i) * 2 - 1; j += 1 {
print("*")
}
println()
}
}
En Neat
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Neat:
Copyright (c) 2025, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2025-12-05.
Last modified 20251217T1224+0100.
*/
module diamond;
import std.stdio : print;
void main()
{
int lines = 17;
mut string row;
for (int i in 1 .. lines / 2 + 2)
{
for (int j in 1 .. (lines + 1) / 2 - i + 2)
{
row ~= " ";
}
for (int j in 1 .. i * 2)
{
row ~= "*";
}
print(row);
row = "";
}
for (int i in 1 .. lines / 2 + 1)
{
for (int j in 1 .. i + 2)
{
row ~= " ";
}
for (int j in 1 .. ((lines + 1) / 2 - i) * 2)
{
row ~= "*";
}
print(row);
row = "";
}
}
En Neko
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Neko:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2023-08-04.
Last modified 20231103T2253+0100.
*/
var lines = 17;
var i;
var j;
i = 1;
while i <= lines / 2 + 1 {
j = 1;
while j <= (lines + 1) / 2 - i + 1 {
$print(" ");
j += 1
}
j = 1;
while j <= i * 2 - 1 {
$print("*");
j += 1
}
$print("\n");
i += 1
}
i = 1;
while i <= lines / 2 {
j = 1;
while j <= i + 1 {
$print(" ");
j += 1
}
j = 1;
while j <= ((lines + 1) / 2 - i) * 2 - 1 {
$print("*");
j += 1
}
$print("\n");
i += 1
}
En Nim
#[
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Nim:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-07-18/19, 2023-08-27.
Last modified: 20250405T0302+0200.
]#
const Lines = 17
for i in 1 .. int(Lines / 2 + 1):
for j in 1 .. int((Lines + 1) / 2) - i + 1:
write(stdout, " ")
for j in 1 .. i * 2 - 1:
write(stdout, "*")
writeLine(stdout, "")
for i in 1 .. int(Lines / 2):
for j in 1 .. i + 1:
write(stdout, " ")
for j in 1 .. (int((Lines + 1) / 2) - i) * 2 - 1:
write(stdout, "*")
writeLine(stdout, "")
En Nit
# Diamond
# Original version in BASIC:
# Example included in Vintage BASIC 1.0.3.
# http://www.vintage-basic.net
# This version in Nit:
# Copyright (c) 2024, Marcos Cruz (programandala.net)
# SPDX-License-Identifier: Fair
# Written on 2024-11-25.
# Last modified: 20241126T1523+0100.
var lines = 17
for i in [1 .. lines / 2 + 1] do
for j in [1 .. (lines + 1) / 2 - i + 1] do
printn " "
end
for j in [1 .. i * 2 - 1] do
printn "*"
end
print ""
end
for i in [1 .. lines / 2] do
for j in [1 .. i + 1] do
printn " "
end
for j in [1 .. ((lines + 1) / 2 - i) * 2 - 1] do
printn "*"
end
print ""
end
En OCaml
(*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in OCaml:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-10-19/20.
Last modified 20231103T2323+0100.
*)
let lines = 17;;
let i = ref 0 in
while !i <= lines / 2 + 1 do
let j = ref 1 in
while !j <= (lines + 1) / 2 - !i + 1 do
print_string " ";
j := !j + 1
done;
let j = ref 1 in
while !j <= !i * 2 - 1 do
print_string "*";
j := !j + 1
done;
print_newline();
i := !i + 1
done;;
let i = ref 1 in
while !i <= lines / 2 do
let j = ref 1 in
while !j <= !i + 1 do
print_string " ";
j := !j + 1
done;
let j = ref 1 in
while !j <= ((lines + 1) / 2 - !i) * 2 - 1 do
print_string "*";
j := !j + 1
done;
print_newline();
i := !i + 1
done;;
En Odin
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Odin:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2023-03-01.
Last modified: 20241226T2046+0100.
*/
package diamond
import "core:fmt"
LINES :: 17
main :: proc() {
for i in 1 ..= LINES / 2 + 1 {
for _ in 1 ..= (LINES + 1) / 2 - i + 1 {
fmt.print(" ")
}
for _ in 1 ..= i * 2 - 1 {
fmt.print("*")
}
fmt.println()
}
for i in 1 ..= LINES / 2 {
for _ in 1 ..= i + 1 {
fmt.print(" ")
}
for _ in 1 ..= ((LINES + 1) / 2 - i) * 2 - 1 {
fmt.print("*")
}
fmt.println()
}
}
En Pike
#! /usr/bin/env pike
// Diamond
// Original version in BASIC:
// Example included in Vintage BASIC 1.0.3.
// http://www.vintage-basic.net
// This version in Pike:
// Copyright (c) 2024, Marcos Cruz (programandala.net)
// SPDX-License-Identifier: Fair
// Written on 2024-12-17.
// Last modified: 20250310T0308+0100
constant LINES = 17;
void main() {
for (int i = 1; i <= LINES / 2 + 1; i += 1) {
for (int j = 1; j <= (LINES + 1) / 2 - i + 1; j += 1)
write(" ");
for (int j = 1; j <= i * 2 - 1; j += 1)
write("*");
write("\n");
}
for (int i = 1; i <= LINES / 2; i += 1) {
for (int j = 1; j <= i + 1; j += 1)
write(" ");
for (int j = 1; j <= ((LINES + 1) / 2 - i) * 2 - 1; j += 1)
write("*");
write("\n");
}
}
En Pony
// Diamond
//
// Original version in BASIC:
// Example included in Vintage BASIC 1.0.3.
// http://www.vintage-basic.net
//
// This version in Pony:
// Copyright (c) 2026, Marcos Cruz (programandala.net)
// SPDX-License-Identifier: Fair
//
// Written on 2026-02-07.
//
// Last modified: 20260207T1336+0100.
use "collections" // Range
actor Main
new create(env: Env) =>
let lines: I64 = 17
for i in Range[I64](1, (lines / 2) + 2) do
for j in Range[I64](1, (((lines + 1) / 2) - i) + 2) do
env.out.write(" ")
end
for j in Range[I64](1, i * 2) do
env.out.write("*")
end
env.out.print("")
end
for i in Range[I64](1, (lines / 2) + 1) do
for j in Range[I64](1, i + 2) do
env.out.write(" ")
end
for j in Range[I64](1, ((((lines + 1) / 2) - i) * 2)) do
env.out.write("*")
end
env.out.print("")
end
En Python
# Diamond
# Original version in BASIC:
# Example included in Vintage BASIC 1.0.3.
# http://www.vintage-basic.net
# This version in Python:
# Copyright (c) 2024, Marcos Cruz (programandala.net)
# SPDX-License-Identifier: Fair
#
# Written on 2024-10-29.
#
# Last modified: 20241203T2230+0100.
import math
LINES = 17
for i in range(1, math.floor(LINES / 2 + 1) + 1):
for j in range(1, math.floor((LINES + 1) / 2 - i + 1) + 1):
print(" ", end = "")
for j in range(1, i * 2):
print("*", end = "")
print()
for i in range(1, math.floor(LINES / 2) + 1):
for j in range(1, i + 2):
print(" ", end = "")
for j in range(1, math.floor(((LINES + 1) / 2 - i) * 2 - 1) + 1):
print("*", end = "")
print()
En Racket
#! /usr/bin/env racket
#|
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Racket:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-08-22/23.
Last modified 20260106T0911+0100.
|#
#lang racket/base
(define lines 17)
(for ([i (in-range 1 (+ (/ lines 2) 1))])
(for ([j (in-range 0 (+ (- (/ (+ lines 1) 2) i) 1))])
(write-string " "))
(for ([j (in-range 0 (- (* i 2) 1))])
(write-string "*"))
(write-string "\n"))
(for ([i (in-range 1 (/ lines 2))])
(for ([j (in-range 0 (+ i 1))])
(write-string " "))
(for ([j (in-range 0 (- (* (- (/ (+ lines 1) 2) i) 2) 1))])
(write-string "*"))
(write-string "\n"))
En Raku
# Diamond
# Original version in BASIC:
# Example included in Vintage BASIC 1.0.3.
# http://www.vintage-basic.net
# This version in Raku:
# Copyright (c) 2024, Marcos Cruz (programandala.net)
# SPDX-License-Identifier: Fair
# Written on 2024-12-02.
# Last modified: 20241211T1235+0100.
constant $LINES = 17;
for 1..($LINES / 2 + 1) -> $i {
for 1 .. ($LINES + 1) / 2 - $i + 1 -> $j {
print ' ';
}
for 1 .. $i * 2 - 1 -> $j {
print '*';
}
put '';
}
for 1 .. $LINES / 2 -> $i {
for 1 .. $i + 1 -> $j {
print ' ';
}
for 1 .. (($LINES + 1) / 2 - $i) * 2 - 1 -> $j {
print '*';
}
put '';
}
En Retro
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Retro:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-08-01/02.
Last modified 20231103T2320+0100.
~~~
#17 'LINES const
~~~
Print a star:
~~~
:star (-)
$* c:put ;
~~~
Print line _n_ of the diamond top part:
~~~
:top (n-)
#1 + LINES #1 + #2 / over - #1 + [ sp ] times
#2 * #1 - [ star ] times nl ;
~~~
Print line _n_ of the diamond bottom part:
~~~
:bottom (n-)
#1 + dup #1 + [ sp ] times
LINES #1 + #2 / swap - #2 * #1 - [ star ] times nl ;
~~~
Main:
~~~
LINES #2 / dup #1 + [ I top ] indexed-times
[ I bottom ] indexed-times
~~~
En Rexx
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Rexx:
Copyright (c) 2025, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2025-07-29.
Last modified: 20250729T1741+0200.
*/
lines = 17
do i = 1 to lines / 2 + 1
do j = 1 to (lines + 1) / 2 - i + 1
call charout, " "
end
do j = 1 to i * 2 - 1
call charout, "*"
end
say
end
do i = 1 to lines / 2
do j = 1 to i + 1
call charout, " "
end
do j = 1 to ((lines + 1) / 2 - i) * 2 - 1
call charout, "*"
end
say
end
exit
En Ring
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Ring:
Copyright (c) 2024, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2024-03-15.
Last modified: 20240315T1537+0100.
*/
LINES = 17
func main
for i = 1 to LINES / 2 + 1
for j = 1 to (LINES + 1) / 2 - i + 1
put " "
next
for j = 1 to i * 2 - 1
put "*"
next
put nl
next
for i = 1 to LINES / 2
for j = 1 to i + 1
put " "
next
for j = 1 to ((LINES + 1) / 2 - i) * 2 - 1
put "*"
next
put nl
next
end
En Rust
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Rust:
Copyright (c) 2024, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2024-12-26.
Last modified: 20241226T2041+0100.
*/
const LINES:isize = 17;
fn main() {
for i in 1 ..= LINES / 2 + 1 {
for _ in 1 ..= (LINES + 1) / 2 - i + 1 {
print!(" ")
}
for _ in 1 ..= i * 2 - 1 {
print!("*")
}
println!()
}
for i in 1 ..= LINES / 2 {
for _ in 1 ..= i + 1 {
print!(" ")
}
for _ in 1 ..= ((LINES + 1) / 2 - i) * 2 - 1 {
print!("*")
}
println!()
}
}
En Scala
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Scala:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2023-08-25.
Last modified: 20231103T2352+0100.
*/
val lines = 17
@main def diamond() =
var i = 1
var j = 1
while i <= lines / 2 + 1 do
j = 1
while j <= (lines + 1) / 2 - i + 1 do
print(" ")
j += 1
j = 1
while j <= i * 2 - 1 do
print("*")
j += 1
println()
i += 1
i = 1
while i <= lines / 2 do
j = 1
while j <= i + 1 do
print(" ")
j += 1
j = 1
while j <= ((lines + 1) / 2 - i) * 2 - 1 do
print("*")
j += 1
println()
i += 1
En Scheme
; Diamond
; Original version in BASIC:
; Example included in Vintage BASIC 1.0.3.
; http://www.vintage-basic.net
; This version in Scheme (Bigloo):
; Copyright (c) 2024, 2025, Marcos Cruz (programandala.net)
; SPDX-License-Identifier: Fair
;
; Written on 2024-12-06, 2025-11-29/30.
;
; Last modified 20251205T0113+0100.
(module diamond)
(define lines 17)
(do ((i 1 (+ i 1)))
((> i (+ (/ lines 2) 1)))
(do ((j 1 (+ j 1)))
((> j (+ (- (/ (+ lines 1) 2) i) 1)))
(display " "))
(do ((j 1 (+ j 1)))
((> j (- (* i 2) 1)))
(display "*"))
(newline))
(do ((i 1 (+ i 1)))
((>= i (/ lines 2)))
(do ((j 1 (+ j 1)))
((> j (+ i 1)))
(display " "))
(do ((j 1 (+ j 1)))
((> j (- (* (- (/ (+ lines 1) 2) i) 2) 1)))
(display "*"))
(newline))
En Styx
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Styx:
Copyright (c) 2025, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2025-09-30, 2025-12-06/07.
Last modified 20251207T0043+0100.
*/
unit diamond;
function main() {
const u32 lines = 17;
foreach const u32 i in 1 .. lines / 2 + 2 do {
foreach const u32 j in 1 .. 2 + (lines + 1) / 2 - i do
printf(" ");
foreach const u32 j in 1 .. i * 2 do
printf("*");
printf("\n");
}
foreach const u32 i in 1 .. lines / 2 + 1 do {
foreach const u32 j in 1 .. i + 2 do
printf(" ");
foreach const u32 j in 1 .. ((lines + 1) / 2 - i) * 2 do
printf("*");
printf("\n");
}
}
En Swift
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Swift:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2023-11-02.
Last modified 20231103T0050+0100.
*/
let LINES = 17
for i in 1 ... LINES / 2 + 1 {
for _ in 1 ... (LINES + 1) / 2 - i + 1 {
print(" ", terminator: "")
}
for _ in 1 ... i * 2 - 1 {
print("*", terminator: "")
}
print()
}
for i in 1 ... LINES / 2 {
for _ in 1 ... i + 1 {
print(" ", terminator: "")
}
for _ in 1 ... ((LINES + 1) / 2 - i) * 2 - 1 {
print("*", terminator: "")
}
print()
}
En V
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in V:
Copyright (c) 2025, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written on 2025-01-03.
Last modified: 20250103T0147+0100.
*/
const lines = 17
fn main() {
for i in 1 .. lines / 2 + 2 {
for _ in 0 .. (lines + 1) / 2 - i + 1 {
print(' ')
}
for _ in 1 .. i * 2 {
print('*')
}
println('')
}
for i in 1 .. lines / 2 + 1 {
for _ in 0 .. i + 1 {
print(' ')
}
for _ in 1 .. ((lines + 1) / 2 - i) * 2 {
print('*')
}
println('')
}
}
En Vala
/*
Diamond
Original version in BASIC:
Example included in Vintage BASIC 1.0.3.
http://www.vintage-basic.net
This version in Vala:
Copyright (c) 2023, Marcos Cruz (programandala.net)
SPDX-License-Identifier: Fair
Written in 2023-08-30/31.
Last modified 20231103T2130+0100.
*/
void main() {
const int lines = 17;
int i = 1;
int j;
while (i <= lines / 2 + 1) {
j = 1;
while (j <= (lines + 1) / 2 - i + 1) {
print(" ");
j += 1;
}
j = 1;
while (j <= i * 2 - 1) {
print("*");
j += 1;
}
print("\n");
i += 1;
}
i = 1;
while (i <= lines / 2) {
j = 1;
while (j <= i + 1) {
print(" ");
j += 1;
}
j = 1;
while (j <= ((lines + 1) / 2 - i) * 2 - 1) {
print("*");
j += 1;
}
print("\n");
i += 1;
}
}
En Zig
// Diamond
//
// Original version in BASIC:
// Example included in Vintage BASIC 1.0.3.
// http://www.vintage-basic.net
//
// This version in Zig:
// Copyright (c) 2023, Marcos Cruz (programandala.net)
// SPDX-License-Identifier: Fair
//
// Written on 2023-03-23.
//
// Last modified 20231103T2118+0100.
const print = @import("std").debug.print;
const lines = 17;
pub fn main() !void {
var i: i8 = 1;
var j: i8 = 1;
while (i <= lines / 2 + 1) {
j = 1;
while (j <= (lines + 1) / 2 - i + 1) {
print(" ", .{});
j += 1;
}
j = 1;
while (j <= i * 2 - 1) {
print("*", .{});
j += 1;
}
print("\n", .{});
i += 1;
}
i = 1;
while (i <= lines / 2) {
j = 1;
while (j <= i + 1) {
print(" ", .{});
j += 1;
}
j = 1;
while (j <= ((lines + 1) / 2 - i) * 2 - 1) {
print("*", .{});
j += 1;
}
print("\n", .{});
i += 1;
}
}
