Deborah Vernon Hackett

Deborah Vernon Hackett
Lady Hackett

A portrait of Lady Hackett, painted by Florence Fuller in 1908
Born
Deborah Vernon Drake-Brockman

18 June 1887

West Guildford, Western Australia
Died 16 April 1965(1965-04-16) (aged 77)

Kilsyth, Victoria
Nationality Australian
Other names Lady Hackett
Lady Moulden
Dr Buller Murphy
Occupation Philanthropist

Deborah Vernon Buller Murphy (née Drake-Brockman, previously Hackett and Moulden; 18 June 1887 – 16 April 1965), best known as Lady Hackett or Lady Moulden, was an Australian community worker, philanthropist, and mining investor.[1] Born in West Guildford, Western Australia, on 18 June 1887, she was the daughter of surveyor Frederick Slade Drake-Brockman and heroine Grace Vernon Bussell and younger sister of Edmund Drake-Brockman.[2][3]

On 3 August 1905, at the age of 18, she married (Sir) John Winthrop Hackett (1848-1916), who was forty years her senior. He was a newspaper proprietor, newspaper editor, and prominent Western Australian politician.[4] They had a son, also named John Winthrop Hackett (later General Sir John Hackett (1910-1997) commander-in-chief of the British Army on the Rhine before becoming principal of King’s College London upon retirement), and four daughters. Hackett senior died in 1916 leaving a large estate to his family, and a large endowment to the University of Western Australia.

On 10 April 1918 Lady Hackett, now aged 30, married (Sir) Frank Beaumont Moulden and moved to Adelaide; she was Lady Mayoress of Adelaide 1919-1921, and became Lady Moulden in 1922. Moulden died after a cerebral haemorrhage on 8 April 1932. “Having no children, he helped to raise his wife’s five and the three of his late brother”.[5]

In 1923 Lady Moulden became interested in tantalite, a rare mineral found in the Northern Territory and at Wodgina in Western Australia. Tantalite was scarce throughout the world, and the price of tantalum was enormous; she saw the wealth that it could bring to Australia, particularly if it was processed in Australia, but the government was not particularly interested in the idea. She founded Tantalite Ltd which was incorporated in 1932. In World War II her tantalum was used in developing radar; the need for it became so obvious to the previously reluctant Commonwealth government that it resumed Tantalite Ltd for the duration of the war.[1]

In 1932, the University of Western Australia conferred upon her an honorary Doctorate of Laws. The degree was awarded in absentia due to the recent death of Sir Frank Moulden.[1]

On 27 June 1936 she married Basil Buller Murphy, a barrister nine years her junior; she became known as Dr Buller Murphy. He died 10 March 1963. She died at her home, Lordello, (in Kilsyth, Victoria) on 16 April 1965 and was buried in Karrakatta cemetery, Perth.[1]

Notes

  1. ^ abcd Alexandra Hasluck (1983) ‘Hackett, Deborah Vernon (1887–1965)’, Australian Dictionary of Biography, Volume 9, Melbourne University Press, pp 149–150.
  2. ^ Family Tree, Australian Dictionary of Biography, National Centre of Biography at the Australian National University.
  3. ^ “Town of Guildford” (pdf). State Records Office of Western Australia. Perth, WA: Government of Western Australia, Department for Culture and the Arts. 10 August 1902. Retrieved 27 January 2016..mw-parser-output cite.citation{font-style:inherit}.mw-parser-output q{quotes:”””””””‘””‘”}.mw-parser-output code.cs1-code{color:inherit;background:inherit;border:inherit;padding:inherit}.mw-parser-output .cs1-lock-free a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/9px-Lock-green.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-limited a,.mw-parser-output .cs1-lock-registration a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Lock-gray-alt-2.svg/9px-Lock-gray-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-subscription a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Lock-red-alt-2.svg/9px-Lock-red-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration{color:#555}.mw-parser-output .cs1-subscription span,.mw-parser-output .cs1-registration span{border-bottom:1px dotted;cursor:help}.mw-parser-output .cs1-hidden-error{display:none;font-size:100%}.mw-parser-output .cs1-visible-error{font-size:100%}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration,.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left,.mw-parser-output .cs1-kern-wl-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right,.mw-parser-output .cs1-kern-wl-right{padding-right:0.2em}
  4. ^ Lyall Hunt (1983) ‘Hackett, Sir John Winthrop (1848–1916)’, Australian Dictionary of Biography, Volume 9, (MUP)
  5. ^ Elizabeth Kwan (1986) ‘Moulden, Sir Frank Beaumont (1876–1932)’, Australian Dictionary of Biography, Volume 10, (MUP)

Further reading

  • F. Alexander (1963) Campus at Crawley
  • B. Buller Murphy (1949) A Lady of Rare Metal
  • G. Drake-Brockman (1960) The Turning Wheel


How to better understand LVM and adding disks?

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP

4

I am playing around with understanding LVM and adding disks to a Linux box. I added a disk and then ran what I thought were commands to add this disk to the box, but I think I messed up.

Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

mount error..

mount -t xfs /dev/mapper/ol-lv_oradata  /mnt/drives/oradata
mount: wrong fs type, bad option, bad superblock on /dev/mapper/ol-lv_oradata,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

here are my outputs.

df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/ol-root   27G   22G  5.1G  81% /
devtmpfs             1.4G     0  1.4G   0% /dev
tmpfs                1.4G   32M  1.4G   3% /dev/shm
tmpfs                1.4G  9.6M  1.4G   1% /run
tmpfs                1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1            497M  282M  216M  57% /boot
tmpfs                276M   60K  276M   1% /run/user/54321


 ls -ls /dev/sd*
0 brw-rw----. 1 root disk 8,  0 Jan  2 16:34 /dev/sda
0 brw-rw----. 1 root disk 8,  1 Jan  2 16:34 /dev/sda1
0 brw-rw----. 1 root disk 8,  2 Jan  3 13:53 /dev/sda2
0 brw-rw----. 1 root disk 8, 16 Jan  3 13:50 /dev/sdb  <-- this is the disk I added
0 brw-rw----. 1 root disk 8, 17 Jan  3 13:53 /dev/sdb1 <-- this is the disk I added

fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0003e72b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    62914559    30944256   8e  Linux LVM

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9a45daa3

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   104857599    52427776   83  Linux

Disk /dev/mapper/ol-root: 28.4 GB, 28420603904 bytes, 55508992 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ol-swap: 3221 MB, 3221225472 bytes, 6291456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ol-lv_oradata: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 lvmdiskscan
  /dev/ram0          [      16.00 MiB] 
  /dev/ol/root       [     <26.47 GiB] 
  /dev/ram1          [      16.00 MiB] 
  /dev/sda1          [     500.00 MiB] 
  /dev/ol/swap       [       3.00 GiB] 
  /dev/ram2          [      16.00 MiB] 
  /dev/sda2          [      29.51 GiB] LVM physical volume
  /dev/ol/lv_oradata [      50.00 GiB] 
  /dev/ram3          [      16.00 MiB] 
  /dev/ram4          [      16.00 MiB] 
  /dev/ram5          [      16.00 MiB] 
  /dev/ram6          [      16.00 MiB] 
  /dev/ram7          [      16.00 MiB] 
  /dev/ram8          [      16.00 MiB] 
  /dev/ram9          [      16.00 MiB] 
  /dev/ram10         [      16.00 MiB] 
  /dev/ram11         [      16.00 MiB] 
  /dev/ram12         [      16.00 MiB] 
  /dev/ram13         [      16.00 MiB] 
  /dev/ram14         [      16.00 MiB] 
  /dev/ram15         [      16.00 MiB] 
  /dev/sdb1          [     <50.00 GiB] LVM physical volume

here is the output of my lsblk..

sda                                                                                       
    |-sda1            xfs                              e86122cd-12b8-418a-af88-213c5f7cf198   /boot
    `-sda2            LVM2_member                      aTcqdV-CreW-yf1R-Et4Z-FXDg-a30f-bTa8ua 
      |-ol-root       xfs                              d3f701f6-bee6-4838-ad23-e004d6477e2a   /
      |-ol-swap       swap                             551085fa-4f56-474a-9fe4-926a50254506   [SWAP]
      `-ol-lv_oradata xfs                              40b962d1-ec00-44a1-8257-42d706c4839f   
    sdb                                                                                       
    `-sdb1            LVM2_member                      Q6IQCo-bR9J-XowP-gYzN-Nvfc-HcTG-UZDlL4 
      `-ol-lv_oradata xfs                              40b962d1-ec00-44a1-8257-42d706c4839f 

Here is the output of pvs, vgs and lvs

pvs
PV         VG Fmt  Attr PSize   PFree 
/dev/sda2  ol lvm2 a--  <29.51g 36.00m
/dev/sdb1  ol lvm2 a--  <50.00g 0

vgs 
VG #PV #LV #SN Attr   VSize  VFree 
ol   2   3   0 wz--n- 79.50g 36.00m

lvs
LV         VG Attr       LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_oradata ol -wi-a----- 50.00g 
root       ol -wi-ao---- <26.47g 
swap       ol -wi-ao---- 3.00g

share|improve this question

  • 1

    After running lvcreate did you run mkfs or similar? If not then it’s just an unformatted volume without a filesystem on it.

    – Stephen Harris
    Jan 3 at 21:11

  • that might be it. i saw that it showed under lsblk but nothing returns for blkid

    – cptkirkh
    Jan 3 at 21:36

  • Tried to run mksf.xfs -f /dev/sdb1 and it fails with cannot open /dev/sdb1: device or resource busy

    – cptkirkh
    Jan 3 at 21:44

  • Was able to run it using the lv path and it worked but still won’t mount.

    – cptkirkh
    Jan 3 at 21:53

  • mksf.xfs -f /dev/sdb1 – NO !!! you’re trying to put a filesystem into the same place as your VG. The LVM layer owns the disks (well, these partitions). Leave them alone.

    – roaima
    Jan 3 at 22:01

4

I am playing around with understanding LVM and adding disks to a Linux box. I added a disk and then ran what I thought were commands to add this disk to the box, but I think I messed up.

Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

mount error..

mount -t xfs /dev/mapper/ol-lv_oradata  /mnt/drives/oradata
mount: wrong fs type, bad option, bad superblock on /dev/mapper/ol-lv_oradata,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

here are my outputs.

df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/ol-root   27G   22G  5.1G  81% /
devtmpfs             1.4G     0  1.4G   0% /dev
tmpfs                1.4G   32M  1.4G   3% /dev/shm
tmpfs                1.4G  9.6M  1.4G   1% /run
tmpfs                1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1            497M  282M  216M  57% /boot
tmpfs                276M   60K  276M   1% /run/user/54321


 ls -ls /dev/sd*
0 brw-rw----. 1 root disk 8,  0 Jan  2 16:34 /dev/sda
0 brw-rw----. 1 root disk 8,  1 Jan  2 16:34 /dev/sda1
0 brw-rw----. 1 root disk 8,  2 Jan  3 13:53 /dev/sda2
0 brw-rw----. 1 root disk 8, 16 Jan  3 13:50 /dev/sdb  <-- this is the disk I added
0 brw-rw----. 1 root disk 8, 17 Jan  3 13:53 /dev/sdb1 <-- this is the disk I added

fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0003e72b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    62914559    30944256   8e  Linux LVM

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9a45daa3

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   104857599    52427776   83  Linux

Disk /dev/mapper/ol-root: 28.4 GB, 28420603904 bytes, 55508992 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ol-swap: 3221 MB, 3221225472 bytes, 6291456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ol-lv_oradata: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 lvmdiskscan
  /dev/ram0          [      16.00 MiB] 
  /dev/ol/root       [     <26.47 GiB] 
  /dev/ram1          [      16.00 MiB] 
  /dev/sda1          [     500.00 MiB] 
  /dev/ol/swap       [       3.00 GiB] 
  /dev/ram2          [      16.00 MiB] 
  /dev/sda2          [      29.51 GiB] LVM physical volume
  /dev/ol/lv_oradata [      50.00 GiB] 
  /dev/ram3          [      16.00 MiB] 
  /dev/ram4          [      16.00 MiB] 
  /dev/ram5          [      16.00 MiB] 
  /dev/ram6          [      16.00 MiB] 
  /dev/ram7          [      16.00 MiB] 
  /dev/ram8          [      16.00 MiB] 
  /dev/ram9          [      16.00 MiB] 
  /dev/ram10         [      16.00 MiB] 
  /dev/ram11         [      16.00 MiB] 
  /dev/ram12         [      16.00 MiB] 
  /dev/ram13         [      16.00 MiB] 
  /dev/ram14         [      16.00 MiB] 
  /dev/ram15         [      16.00 MiB] 
  /dev/sdb1          [     <50.00 GiB] LVM physical volume

here is the output of my lsblk..

sda                                                                                       
    |-sda1            xfs                              e86122cd-12b8-418a-af88-213c5f7cf198   /boot
    `-sda2            LVM2_member                      aTcqdV-CreW-yf1R-Et4Z-FXDg-a30f-bTa8ua 
      |-ol-root       xfs                              d3f701f6-bee6-4838-ad23-e004d6477e2a   /
      |-ol-swap       swap                             551085fa-4f56-474a-9fe4-926a50254506   [SWAP]
      `-ol-lv_oradata xfs                              40b962d1-ec00-44a1-8257-42d706c4839f   
    sdb                                                                                       
    `-sdb1            LVM2_member                      Q6IQCo-bR9J-XowP-gYzN-Nvfc-HcTG-UZDlL4 
      `-ol-lv_oradata xfs                              40b962d1-ec00-44a1-8257-42d706c4839f 

Here is the output of pvs, vgs and lvs

pvs
PV         VG Fmt  Attr PSize   PFree 
/dev/sda2  ol lvm2 a--  <29.51g 36.00m
/dev/sdb1  ol lvm2 a--  <50.00g 0

vgs 
VG #PV #LV #SN Attr   VSize  VFree 
ol   2   3   0 wz--n- 79.50g 36.00m

lvs
LV         VG Attr       LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_oradata ol -wi-a----- 50.00g 
root       ol -wi-ao---- <26.47g 
swap       ol -wi-ao---- 3.00g

share|improve this question

  • 1

    After running lvcreate did you run mkfs or similar? If not then it’s just an unformatted volume without a filesystem on it.

    – Stephen Harris
    Jan 3 at 21:11

  • that might be it. i saw that it showed under lsblk but nothing returns for blkid

    – cptkirkh
    Jan 3 at 21:36

  • Tried to run mksf.xfs -f /dev/sdb1 and it fails with cannot open /dev/sdb1: device or resource busy

    – cptkirkh
    Jan 3 at 21:44

  • Was able to run it using the lv path and it worked but still won’t mount.

    – cptkirkh
    Jan 3 at 21:53

  • mksf.xfs -f /dev/sdb1 – NO !!! you’re trying to put a filesystem into the same place as your VG. The LVM layer owns the disks (well, these partitions). Leave them alone.

    – roaima
    Jan 3 at 22:01

4

4

4

I am playing around with understanding LVM and adding disks to a Linux box. I added a disk and then ran what I thought were commands to add this disk to the box, but I think I messed up.

Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

mount error..

mount -t xfs /dev/mapper/ol-lv_oradata  /mnt/drives/oradata
mount: wrong fs type, bad option, bad superblock on /dev/mapper/ol-lv_oradata,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

here are my outputs.

df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/ol-root   27G   22G  5.1G  81% /
devtmpfs             1.4G     0  1.4G   0% /dev
tmpfs                1.4G   32M  1.4G   3% /dev/shm
tmpfs                1.4G  9.6M  1.4G   1% /run
tmpfs                1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1            497M  282M  216M  57% /boot
tmpfs                276M   60K  276M   1% /run/user/54321


 ls -ls /dev/sd*
0 brw-rw----. 1 root disk 8,  0 Jan  2 16:34 /dev/sda
0 brw-rw----. 1 root disk 8,  1 Jan  2 16:34 /dev/sda1
0 brw-rw----. 1 root disk 8,  2 Jan  3 13:53 /dev/sda2
0 brw-rw----. 1 root disk 8, 16 Jan  3 13:50 /dev/sdb  <-- this is the disk I added
0 brw-rw----. 1 root disk 8, 17 Jan  3 13:53 /dev/sdb1 <-- this is the disk I added

fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0003e72b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    62914559    30944256   8e  Linux LVM

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9a45daa3

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   104857599    52427776   83  Linux

Disk /dev/mapper/ol-root: 28.4 GB, 28420603904 bytes, 55508992 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ol-swap: 3221 MB, 3221225472 bytes, 6291456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ol-lv_oradata: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 lvmdiskscan
  /dev/ram0          [      16.00 MiB] 
  /dev/ol/root       [     <26.47 GiB] 
  /dev/ram1          [      16.00 MiB] 
  /dev/sda1          [     500.00 MiB] 
  /dev/ol/swap       [       3.00 GiB] 
  /dev/ram2          [      16.00 MiB] 
  /dev/sda2          [      29.51 GiB] LVM physical volume
  /dev/ol/lv_oradata [      50.00 GiB] 
  /dev/ram3          [      16.00 MiB] 
  /dev/ram4          [      16.00 MiB] 
  /dev/ram5          [      16.00 MiB] 
  /dev/ram6          [      16.00 MiB] 
  /dev/ram7          [      16.00 MiB] 
  /dev/ram8          [      16.00 MiB] 
  /dev/ram9          [      16.00 MiB] 
  /dev/ram10         [      16.00 MiB] 
  /dev/ram11         [      16.00 MiB] 
  /dev/ram12         [      16.00 MiB] 
  /dev/ram13         [      16.00 MiB] 
  /dev/ram14         [      16.00 MiB] 
  /dev/ram15         [      16.00 MiB] 
  /dev/sdb1          [     <50.00 GiB] LVM physical volume

here is the output of my lsblk..

sda                                                                                       
    |-sda1            xfs                              e86122cd-12b8-418a-af88-213c5f7cf198   /boot
    `-sda2            LVM2_member                      aTcqdV-CreW-yf1R-Et4Z-FXDg-a30f-bTa8ua 
      |-ol-root       xfs                              d3f701f6-bee6-4838-ad23-e004d6477e2a   /
      |-ol-swap       swap                             551085fa-4f56-474a-9fe4-926a50254506   [SWAP]
      `-ol-lv_oradata xfs                              40b962d1-ec00-44a1-8257-42d706c4839f   
    sdb                                                                                       
    `-sdb1            LVM2_member                      Q6IQCo-bR9J-XowP-gYzN-Nvfc-HcTG-UZDlL4 
      `-ol-lv_oradata xfs                              40b962d1-ec00-44a1-8257-42d706c4839f 

Here is the output of pvs, vgs and lvs

pvs
PV         VG Fmt  Attr PSize   PFree 
/dev/sda2  ol lvm2 a--  <29.51g 36.00m
/dev/sdb1  ol lvm2 a--  <50.00g 0

vgs 
VG #PV #LV #SN Attr   VSize  VFree 
ol   2   3   0 wz--n- 79.50g 36.00m

lvs
LV         VG Attr       LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_oradata ol -wi-a----- 50.00g 
root       ol -wi-ao---- <26.47g 
swap       ol -wi-ao---- 3.00g

share|improve this question

I am playing around with understanding LVM and adding disks to a Linux box. I added a disk and then ran what I thought were commands to add this disk to the box, but I think I messed up.

Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

mount error..

mount -t xfs /dev/mapper/ol-lv_oradata  /mnt/drives/oradata
mount: wrong fs type, bad option, bad superblock on /dev/mapper/ol-lv_oradata,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

here are my outputs.

df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/ol-root   27G   22G  5.1G  81% /
devtmpfs             1.4G     0  1.4G   0% /dev
tmpfs                1.4G   32M  1.4G   3% /dev/shm
tmpfs                1.4G  9.6M  1.4G   1% /run
tmpfs                1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/sda1            497M  282M  216M  57% /boot
tmpfs                276M   60K  276M   1% /run/user/54321


 ls -ls /dev/sd*
0 brw-rw----. 1 root disk 8,  0 Jan  2 16:34 /dev/sda
0 brw-rw----. 1 root disk 8,  1 Jan  2 16:34 /dev/sda1
0 brw-rw----. 1 root disk 8,  2 Jan  3 13:53 /dev/sda2
0 brw-rw----. 1 root disk 8, 16 Jan  3 13:50 /dev/sdb  <-- this is the disk I added
0 brw-rw----. 1 root disk 8, 17 Jan  3 13:53 /dev/sdb1 <-- this is the disk I added

fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0003e72b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    62914559    30944256   8e  Linux LVM

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9a45daa3

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   104857599    52427776   83  Linux

Disk /dev/mapper/ol-root: 28.4 GB, 28420603904 bytes, 55508992 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ol-swap: 3221 MB, 3221225472 bytes, 6291456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ol-lv_oradata: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 lvmdiskscan
  /dev/ram0          [      16.00 MiB] 
  /dev/ol/root       [     <26.47 GiB] 
  /dev/ram1          [      16.00 MiB] 
  /dev/sda1          [     500.00 MiB] 
  /dev/ol/swap       [       3.00 GiB] 
  /dev/ram2          [      16.00 MiB] 
  /dev/sda2          [      29.51 GiB] LVM physical volume
  /dev/ol/lv_oradata [      50.00 GiB] 
  /dev/ram3          [      16.00 MiB] 
  /dev/ram4          [      16.00 MiB] 
  /dev/ram5          [      16.00 MiB] 
  /dev/ram6          [      16.00 MiB] 
  /dev/ram7          [      16.00 MiB] 
  /dev/ram8          [      16.00 MiB] 
  /dev/ram9          [      16.00 MiB] 
  /dev/ram10         [      16.00 MiB] 
  /dev/ram11         [      16.00 MiB] 
  /dev/ram12         [      16.00 MiB] 
  /dev/ram13         [      16.00 MiB] 
  /dev/ram14         [      16.00 MiB] 
  /dev/ram15         [      16.00 MiB] 
  /dev/sdb1          [     <50.00 GiB] LVM physical volume

here is the output of my lsblk..

sda                                                                                       
    |-sda1            xfs                              e86122cd-12b8-418a-af88-213c5f7cf198   /boot
    `-sda2            LVM2_member                      aTcqdV-CreW-yf1R-Et4Z-FXDg-a30f-bTa8ua 
      |-ol-root       xfs                              d3f701f6-bee6-4838-ad23-e004d6477e2a   /
      |-ol-swap       swap                             551085fa-4f56-474a-9fe4-926a50254506   [SWAP]
      `-ol-lv_oradata xfs                              40b962d1-ec00-44a1-8257-42d706c4839f   
    sdb                                                                                       
    `-sdb1            LVM2_member                      Q6IQCo-bR9J-XowP-gYzN-Nvfc-HcTG-UZDlL4 
      `-ol-lv_oradata xfs                              40b962d1-ec00-44a1-8257-42d706c4839f 

Here is the output of pvs, vgs and lvs

pvs
PV         VG Fmt  Attr PSize   PFree 
/dev/sda2  ol lvm2 a--  <29.51g 36.00m
/dev/sdb1  ol lvm2 a--  <50.00g 0

vgs 
VG #PV #LV #SN Attr   VSize  VFree 
ol   2   3   0 wz--n- 79.50g 36.00m

lvs
LV         VG Attr       LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_oradata ol -wi-a----- 50.00g 
root       ol -wi-ao---- <26.47g 
swap       ol -wi-ao---- 3.00g

linux lvm

share|improve this question

share|improve this question

share|improve this question

share|improve this question

edited Jan 4 at 20:02

roaima

43.3k553116

43.3k553116

asked Jan 3 at 20:57

cptkirkhcptkirkh

212

212

  • 1

    After running lvcreate did you run mkfs or similar? If not then it’s just an unformatted volume without a filesystem on it.

    – Stephen Harris
    Jan 3 at 21:11

  • that might be it. i saw that it showed under lsblk but nothing returns for blkid

    – cptkirkh
    Jan 3 at 21:36

  • Tried to run mksf.xfs -f /dev/sdb1 and it fails with cannot open /dev/sdb1: device or resource busy

    – cptkirkh
    Jan 3 at 21:44

  • Was able to run it using the lv path and it worked but still won’t mount.

    – cptkirkh
    Jan 3 at 21:53

  • mksf.xfs -f /dev/sdb1 – NO !!! you’re trying to put a filesystem into the same place as your VG. The LVM layer owns the disks (well, these partitions). Leave them alone.

    – roaima
    Jan 3 at 22:01

  • 1

    After running lvcreate did you run mkfs or similar? If not then it’s just an unformatted volume without a filesystem on it.

    – Stephen Harris
    Jan 3 at 21:11

  • that might be it. i saw that it showed under lsblk but nothing returns for blkid

    – cptkirkh
    Jan 3 at 21:36

  • Tried to run mksf.xfs -f /dev/sdb1 and it fails with cannot open /dev/sdb1: device or resource busy

    – cptkirkh
    Jan 3 at 21:44

  • Was able to run it using the lv path and it worked but still won’t mount.

    – cptkirkh
    Jan 3 at 21:53

  • mksf.xfs -f /dev/sdb1 – NO !!! you’re trying to put a filesystem into the same place as your VG. The LVM layer owns the disks (well, these partitions). Leave them alone.

    – roaima
    Jan 3 at 22:01

1

1

After running lvcreate did you run mkfs or similar? If not then it’s just an unformatted volume without a filesystem on it.

– Stephen Harris
Jan 3 at 21:11

After running lvcreate did you run mkfs or similar? If not then it’s just an unformatted volume without a filesystem on it.

– Stephen Harris
Jan 3 at 21:11

that might be it. i saw that it showed under lsblk but nothing returns for blkid

– cptkirkh
Jan 3 at 21:36

that might be it. i saw that it showed under lsblk but nothing returns for blkid

– cptkirkh
Jan 3 at 21:36

Tried to run mksf.xfs -f /dev/sdb1 and it fails with cannot open /dev/sdb1: device or resource busy

– cptkirkh
Jan 3 at 21:44

Tried to run mksf.xfs -f /dev/sdb1 and it fails with cannot open /dev/sdb1: device or resource busy

– cptkirkh
Jan 3 at 21:44

Was able to run it using the lv path and it worked but still won’t mount.

– cptkirkh
Jan 3 at 21:53

Was able to run it using the lv path and it worked but still won’t mount.

– cptkirkh
Jan 3 at 21:53

mksf.xfs -f /dev/sdb1 – NO !!! you’re trying to put a filesystem into the same place as your VG. The LVM layer owns the disks (well, these partitions). Leave them alone.

– roaima
Jan 3 at 22:01

mksf.xfs -f /dev/sdb1 – NO !!! you’re trying to put a filesystem into the same place as your VG. The LVM layer owns the disks (well, these partitions). Leave them alone.

– roaima
Jan 3 at 22:01

2 Answers
2

active

oldest

votes

2

Q : Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

A : If you want to extend you current LVM with new disk, first you need to create partition on new disk like @roaima already mention before then extend the current volume group of your LVM and then extend your LVM disk.

Reference :

A Linux user’s guide to Logical Volume Management

How to Extend/Reduce LVM’s (Logical Volume Management) in Linux

share|improve this answer

    0

    The output of pvs shows that you have two physical partitions assigned to your volume group ol. The output of lvs shows that you have three logical volumes in that volume group.

    Your first mount attempt was accurate, so I suspect you hadn’t formatted it.

    mkfs -t xfs /dev/mapper/ol-lv_oradata
    mount -t xfs /dev/mapper/ol-lv_oradata /mnt/drives/oradata
    

    As an aside since you’re learning about LVM, be aware that if you lose either of your disks you may well lose everything in the volume group that spans them. (Read up on the perils of “RAID 0” disk configurations for some detail. Your VG is configured in much the same way.)

    share|improve this answer

    • Thanks to @roaima I was able to understand that I needed to do a little more reading. I now understand physical and logical volumes along with volume groups. like i said this is just a test server to teach me on how it works.

      – cptkirkh
      Jan 4 at 20:25

    Your Answer

    StackExchange.ready(function() {
    var channelOptions = {
    tags: “”.split(” “),
    id: “106”
    };
    initTagRenderer(“”.split(” “), “”.split(” “), channelOptions);

    StackExchange.using(“externalEditor”, function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using(“snippets”, function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: ‘answer’,
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: “”,
    imageUploader: {
    brandingHtml: “Powered by u003ca class=”icon-imgur-white” href=”https://imgur.com/”u003eu003c/au003e”,
    contentPolicyHtml: “User contributions licensed under u003ca href=”https://creativecommons.org/licenses/by-sa/3.0/”u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href=”https://stackoverflow.com/legal/content-policy”u003e(content policy)u003c/au003e”,
    allowUrls: true
    },
    onDemand: true,
    discardSelector: “.discard-answer”
    ,immediatelyShowMarkdownHelp:true
    });

    }
    });

    draft saved
    draft discarded

    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin(‘.new-post-login’, ‘https%3a%2f%2funix.stackexchange.com%2fquestions%2f492334%2fhow-to-better-understand-lvm-and-adding-disks%23new-answer’, ‘question_page’);
    }
    );

    Post as a guest

    Required, but never shown

    2 Answers
    2

    active

    oldest

    votes

    2 Answers
    2

    active

    oldest

    votes

    active

    oldest

    votes

    active

    oldest

    votes

    2

    Q : Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

    A : If you want to extend you current LVM with new disk, first you need to create partition on new disk like @roaima already mention before then extend the current volume group of your LVM and then extend your LVM disk.

    Reference :

    A Linux user’s guide to Logical Volume Management

    How to Extend/Reduce LVM’s (Logical Volume Management) in Linux

    share|improve this answer

      2

      Q : Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

      A : If you want to extend you current LVM with new disk, first you need to create partition on new disk like @roaima already mention before then extend the current volume group of your LVM and then extend your LVM disk.

      Reference :

      A Linux user’s guide to Logical Volume Management

      How to Extend/Reduce LVM’s (Logical Volume Management) in Linux

      share|improve this answer

        2

        2

        2

        Q : Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

        A : If you want to extend you current LVM with new disk, first you need to create partition on new disk like @roaima already mention before then extend the current volume group of your LVM and then extend your LVM disk.

        Reference :

        A Linux user’s guide to Logical Volume Management

        How to Extend/Reduce LVM’s (Logical Volume Management) in Linux

        share|improve this answer

        Q : Did I just add this disk to the current LV and now I just need to resize it? I tried to get this to mount but it comes back with the following error.

        A : If you want to extend you current LVM with new disk, first you need to create partition on new disk like @roaima already mention before then extend the current volume group of your LVM and then extend your LVM disk.

        Reference :

        A Linux user’s guide to Logical Volume Management

        How to Extend/Reduce LVM’s (Logical Volume Management) in Linux

        share|improve this answer

        share|improve this answer

        share|improve this answer

        edited Jan 4 at 19:46

        Rui F Ribeiro

        39.5k1479132

        39.5k1479132

        answered Jan 4 at 6:13

        Iyus Dedi PutraIyus Dedi Putra

        486

        486

            0

            The output of pvs shows that you have two physical partitions assigned to your volume group ol. The output of lvs shows that you have three logical volumes in that volume group.

            Your first mount attempt was accurate, so I suspect you hadn’t formatted it.

            mkfs -t xfs /dev/mapper/ol-lv_oradata
            mount -t xfs /dev/mapper/ol-lv_oradata /mnt/drives/oradata
            

            As an aside since you’re learning about LVM, be aware that if you lose either of your disks you may well lose everything in the volume group that spans them. (Read up on the perils of “RAID 0” disk configurations for some detail. Your VG is configured in much the same way.)

            share|improve this answer

            • Thanks to @roaima I was able to understand that I needed to do a little more reading. I now understand physical and logical volumes along with volume groups. like i said this is just a test server to teach me on how it works.

              – cptkirkh
              Jan 4 at 20:25

            0

            The output of pvs shows that you have two physical partitions assigned to your volume group ol. The output of lvs shows that you have three logical volumes in that volume group.

            Your first mount attempt was accurate, so I suspect you hadn’t formatted it.

            mkfs -t xfs /dev/mapper/ol-lv_oradata
            mount -t xfs /dev/mapper/ol-lv_oradata /mnt/drives/oradata
            

            As an aside since you’re learning about LVM, be aware that if you lose either of your disks you may well lose everything in the volume group that spans them. (Read up on the perils of “RAID 0” disk configurations for some detail. Your VG is configured in much the same way.)

            share|improve this answer

            • Thanks to @roaima I was able to understand that I needed to do a little more reading. I now understand physical and logical volumes along with volume groups. like i said this is just a test server to teach me on how it works.

              – cptkirkh
              Jan 4 at 20:25

            0

            0

            0

            The output of pvs shows that you have two physical partitions assigned to your volume group ol. The output of lvs shows that you have three logical volumes in that volume group.

            Your first mount attempt was accurate, so I suspect you hadn’t formatted it.

            mkfs -t xfs /dev/mapper/ol-lv_oradata
            mount -t xfs /dev/mapper/ol-lv_oradata /mnt/drives/oradata
            

            As an aside since you’re learning about LVM, be aware that if you lose either of your disks you may well lose everything in the volume group that spans them. (Read up on the perils of “RAID 0” disk configurations for some detail. Your VG is configured in much the same way.)

            share|improve this answer

            The output of pvs shows that you have two physical partitions assigned to your volume group ol. The output of lvs shows that you have three logical volumes in that volume group.

            Your first mount attempt was accurate, so I suspect you hadn’t formatted it.

            mkfs -t xfs /dev/mapper/ol-lv_oradata
            mount -t xfs /dev/mapper/ol-lv_oradata /mnt/drives/oradata
            

            As an aside since you’re learning about LVM, be aware that if you lose either of your disks you may well lose everything in the volume group that spans them. (Read up on the perils of “RAID 0” disk configurations for some detail. Your VG is configured in much the same way.)

            share|improve this answer

            share|improve this answer

            share|improve this answer

            answered Jan 4 at 20:05

            roaimaroaima

            43.3k553116

            43.3k553116

            • Thanks to @roaima I was able to understand that I needed to do a little more reading. I now understand physical and logical volumes along with volume groups. like i said this is just a test server to teach me on how it works.

              – cptkirkh
              Jan 4 at 20:25

            • Thanks to @roaima I was able to understand that I needed to do a little more reading. I now understand physical and logical volumes along with volume groups. like i said this is just a test server to teach me on how it works.

              – cptkirkh
              Jan 4 at 20:25

            Thanks to @roaima I was able to understand that I needed to do a little more reading. I now understand physical and logical volumes along with volume groups. like i said this is just a test server to teach me on how it works.

            – cptkirkh
            Jan 4 at 20:25

            Thanks to @roaima I was able to understand that I needed to do a little more reading. I now understand physical and logical volumes along with volume groups. like i said this is just a test server to teach me on how it works.

            – cptkirkh
            Jan 4 at 20:25

            draft saved
            draft discarded

            Thanks for contributing an answer to Unix & Linux Stack Exchange!

            • Please be sure to answer the question. Provide details and share your research!

            But avoid

            • Asking for help, clarification, or responding to other answers.
            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.

            draft saved

            draft discarded

            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin(‘.new-post-login’, ‘https%3a%2f%2funix.stackexchange.com%2fquestions%2f492334%2fhow-to-better-understand-lvm-and-adding-disks%23new-answer’, ‘question_page’);
            }
            );

            Post as a guest

            Required, but never shown

            Required, but never shown

            Required, but never shown

            Required, but never shown

            Required, but never shown

            Required, but never shown

            Required, but never shown

            Required, but never shown

            Required, but never shown

            Edmund Drake-Brockman

            Edmund Drake-Brockman
            Edmund Alfred Drake-Brockman.jpg
            Chief Judge of the Commonwealth Court of Conciliation and Arbitration
            In office
            17 June 1947 – 1 June 1949
            Preceded by Harold Piper
            Succeeded by William Kelly
            Senator for Western Australia
            In office
            1 July 1920 – 30 June 1926
            Personal details
            Born (1884-02-21)21 February 1884
            Busselton, Western Australia
            Died 1 June 1949(1949-06-01) (aged 65)
            Tarnook, Victoria
            Political party Nationalist Party of Australia
            Occupation Soldier and judge
            Military service
            Allegiance Australia
            Service/branch Australian Army
            Years of service 1903–1942
            Rank Major General
            Commands 3rd Division (1937–42)
            4th Brigade (1918–19, 1921–26)
            12th Training Battalion (1917–18)
            4th Training Battalion (1917)
            16th Battalion (1916–17, 1918)
            Battles/wars First World War

            • Gallipoli Campaign
            • Western Front

              • Battle of Pozières
              • Battle of Mouquet Farm
              • Battle of Bullecourt
              • Battle of Hébuterne
              • Battle of Hamel

            Second World War

            Awards Companion of the Order of the Bath
            Companion of the Order of St Michael and St George
            Distinguished Service Order
            Colonial Auxiliary Forces Officers’ Decoration
            Mentioned in Despatches (6)
            Order of Prince Danilo I (Montenegro)

            Major General Edmund Alfred Drake-Brockman, CB, CMG, DSO, VD (21 February 1884 – 1 June 1949) was a distinguished Australian soldier, statesman, and judge who served in both the First and Second World Wars.

            Contents

            • 1 Early life
            • 2 First World War
            • 3 Later life
            • 4 References

            Early life

            Born in Busselton, Western Australia, Drake-Brockman was the son of surveyor Frederick Slade Drake-Brockman and heroine Grace Vernon Bussell and brother of Deborah Vernon Hackett. He was a 1902 graduate of the Guildford Grammar School. Interested in the military, he joined the Citizen Military Forces as a volunteer in 1903. He combined this with a career in law, becoming a barrister and solicitor in 1909, practicing in Perth.

            First World War

            Following the outbreak of the First World War, he volunteered for overseas service and served in the Gallipoli Campaign as a major while assigned to the 11th Battalion. He was made a Companion of the Order of St Michael and St George (CMG) for his services at Gallipoli.[1] Later in the war, he was promoted to lieutenant colonel and commanded another Western Australian infantry battalion, the 16th, serving on the Western Front. In 1918, he was promoted to brigadier general and commanded the 4th Brigade.[2]

            Later life

            After the war he was elected to the Australian Senate in 1919 as a Nationalist Party of Australia representative, Drake-Brockman served in the Senate until 1926. He then worked as federal judge.

            Still in the Citizen Military Forces, he was called up for duty during the Second World War, and commanded the 3rd Division, a militia formation, until 1942.[2] He died on 1 June 1949, and was survived the three children he had by his wife, Constance, whom he had married in April 1912.[3]

            References

            Citations
            1. ^ Gill 2004, p. 126.
            2. ^ ab Gill 2004, p. 127.
            3. ^ Gill 2004, pp. 126–127.
            Bibliography
            • Gill, Ian (2004). Fremantle to France: 11th Battalion A.I.F. 1914–1919 (2nd ed.). Myaree, Western Australia: Advance Press. ISBN 0-9750588-0-0..mw-parser-output cite.citation{font-style:inherit}.mw-parser-output q{quotes:”””””””‘””‘”}.mw-parser-output code.cs1-code{color:inherit;background:inherit;border:inherit;padding:inherit}.mw-parser-output .cs1-lock-free a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/9px-Lock-green.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-limited a,.mw-parser-output .cs1-lock-registration a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Lock-gray-alt-2.svg/9px-Lock-gray-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-subscription a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Lock-red-alt-2.svg/9px-Lock-red-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration{color:#555}.mw-parser-output .cs1-subscription span,.mw-parser-output .cs1-registration span{border-bottom:1px dotted;cursor:help}.mw-parser-output .cs1-hidden-error{display:none;font-size:100%}.mw-parser-output .cs1-visible-error{font-size:100%}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration,.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left,.mw-parser-output .cs1-kern-wl-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right,.mw-parser-output .cs1-kern-wl-right{padding-right:0.2em}
            • Mallett, Ross, Major General Edmund Drake-Brockman, General Officers of the First AIF, adfa.edu.au
            • Sharp, Ian G. (1981) ‘Drake-Brockman, Edmund Alfred (1884–1949)’, Australian Dictionary of Biography, Volume 8, (MUP)
            • Obituary, Obituaries Australia, National Centre of Biography, Australian National University
            Military offices
            Preceded by
            Major General Sir Thomas Blamey
            General Officer Commanding 3rd Division
            1937–1942
            Succeeded by
            Major General Stanley Savige


            Length of the Longest Descent

            The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP

            8

            $begingroup$

            Your task is to determine the length of the longest descent down a “mountain” represented as a grid of integer heights. A “descent” is any path from a starting cell to orthogonally adjacent cells with strictly decreasing heights (i.e. not diagonal and not to the same height). For instance, you can move from 5-4-3-1 but not 5-5-4-3-3-2-1. The length of this path is how many cell movements there are from the starting cell to the ending cell, thus 5-4-3-1 is length 3.

            You will receive a rectangular grid as input and you should output an integer indicating the longest descent.

            Examples

            1 2 3 2 2
            3 4 5 5 5
            3 4 6 7 4
            3 3 5 6 2
            1 1 2 3 1
            

            The length of the longest descent down this mountain is 5. The longest path starts at the 7, moves left, up, left, up, and then left (7-6-5-4-2-1). Since there are 5 movements in this path, the path length is 5.

            They might be all the same number.

            1 1 1 1 1
            1 1 1 1 1
            1 1 1 1 1
            1 1 1 1 1
            

            Since this height map is flat, the longest descent is 0. (not 19, since the path sequence must be strictly descending)

            Height maps can be made up of larger numbers than single-digit numbers.

            10 12 13 14 15 15
            17 14 15 15 15 16
            18 20 21 15 15 15
            21 14 10 11 11 15
            15 15 15 15 15 15
            

            The longest path here is of length 6. (21, 20, 18, 17, 14, 12, 10)

            …And even bigger numbers are fine too.

            949858 789874  57848  43758 387348
              5848 454115   4548 448545 216464
            188452 484126 484216 786654 145451
            189465 474566 156665 132645 456651
            985464  94849 151654 151648 484364
            

            The longest descent here is of length 7. (786654, 484216, 484126, 474566, 156665, 151654, 151648, 132645)

            Rules and Notes

            • Grids may be taken in any convenient format. Specify your format in your answer.
            • You may assume the height map is perfectly rectangular, is nonempty, and contains only positive integers in the signed 32-bit integer range.
            • The longest descent path can begin and end anywhere on the grid.
            • You do not need to describe the longest descent path in any way. Only its length is required.
            • Shortest code wins
            share|improve this question

            $endgroup$

            • $begingroup$
              How should the last example be interpreted?
              $endgroup$
              – Peter Taylor
              Jan 3 at 18:11

            • $begingroup$
              @PeterTaylor I’m not sure what you mean.
              $endgroup$
              – Beefster
              Jan 3 at 19:00

            • $begingroup$
              I think the last example is just a matrix of multi digit numbers
              $endgroup$
              – Embodiment of Ignorance
              Jan 3 at 19:08

            • $begingroup$
              @EmbodimentofIgnorance, ah, yes, I see. It would be a lot easier to spot the path with two-digit numbers rather than 4 to 6.
              $endgroup$
              – Peter Taylor
              Jan 3 at 21:08

            • 1

              $begingroup$
              @Οurous: just rectangular. Not jagged.
              $endgroup$
              – Beefster
              Jan 3 at 21:21

            8

            $begingroup$

            Your task is to determine the length of the longest descent down a “mountain” represented as a grid of integer heights. A “descent” is any path from a starting cell to orthogonally adjacent cells with strictly decreasing heights (i.e. not diagonal and not to the same height). For instance, you can move from 5-4-3-1 but not 5-5-4-3-3-2-1. The length of this path is how many cell movements there are from the starting cell to the ending cell, thus 5-4-3-1 is length 3.

            You will receive a rectangular grid as input and you should output an integer indicating the longest descent.

            Examples

            1 2 3 2 2
            3 4 5 5 5
            3 4 6 7 4
            3 3 5 6 2
            1 1 2 3 1
            

            The length of the longest descent down this mountain is 5. The longest path starts at the 7, moves left, up, left, up, and then left (7-6-5-4-2-1). Since there are 5 movements in this path, the path length is 5.

            They might be all the same number.

            1 1 1 1 1
            1 1 1 1 1
            1 1 1 1 1
            1 1 1 1 1
            

            Since this height map is flat, the longest descent is 0. (not 19, since the path sequence must be strictly descending)

            Height maps can be made up of larger numbers than single-digit numbers.

            10 12 13 14 15 15
            17 14 15 15 15 16
            18 20 21 15 15 15
            21 14 10 11 11 15
            15 15 15 15 15 15
            

            The longest path here is of length 6. (21, 20, 18, 17, 14, 12, 10)

            …And even bigger numbers are fine too.

            949858 789874  57848  43758 387348
              5848 454115   4548 448545 216464
            188452 484126 484216 786654 145451
            189465 474566 156665 132645 456651
            985464  94849 151654 151648 484364
            

            The longest descent here is of length 7. (786654, 484216, 484126, 474566, 156665, 151654, 151648, 132645)

            Rules and Notes

            • Grids may be taken in any convenient format. Specify your format in your answer.
            • You may assume the height map is perfectly rectangular, is nonempty, and contains only positive integers in the signed 32-bit integer range.
            • The longest descent path can begin and end anywhere on the grid.
            • You do not need to describe the longest descent path in any way. Only its length is required.
            • Shortest code wins
            share|improve this question

            $endgroup$

            • $begingroup$
              How should the last example be interpreted?
              $endgroup$
              – Peter Taylor
              Jan 3 at 18:11

            • $begingroup$
              @PeterTaylor I’m not sure what you mean.
              $endgroup$
              – Beefster
              Jan 3 at 19:00

            • $begingroup$
              I think the last example is just a matrix of multi digit numbers
              $endgroup$
              – Embodiment of Ignorance
              Jan 3 at 19:08

            • $begingroup$
              @EmbodimentofIgnorance, ah, yes, I see. It would be a lot easier to spot the path with two-digit numbers rather than 4 to 6.
              $endgroup$
              – Peter Taylor
              Jan 3 at 21:08

            • 1

              $begingroup$
              @Οurous: just rectangular. Not jagged.
              $endgroup$
              – Beefster
              Jan 3 at 21:21

            8

            8

            8

            $begingroup$

            Your task is to determine the length of the longest descent down a “mountain” represented as a grid of integer heights. A “descent” is any path from a starting cell to orthogonally adjacent cells with strictly decreasing heights (i.e. not diagonal and not to the same height). For instance, you can move from 5-4-3-1 but not 5-5-4-3-3-2-1. The length of this path is how many cell movements there are from the starting cell to the ending cell, thus 5-4-3-1 is length 3.

            You will receive a rectangular grid as input and you should output an integer indicating the longest descent.

            Examples

            1 2 3 2 2
            3 4 5 5 5
            3 4 6 7 4
            3 3 5 6 2
            1 1 2 3 1
            

            The length of the longest descent down this mountain is 5. The longest path starts at the 7, moves left, up, left, up, and then left (7-6-5-4-2-1). Since there are 5 movements in this path, the path length is 5.

            They might be all the same number.

            1 1 1 1 1
            1 1 1 1 1
            1 1 1 1 1
            1 1 1 1 1
            

            Since this height map is flat, the longest descent is 0. (not 19, since the path sequence must be strictly descending)

            Height maps can be made up of larger numbers than single-digit numbers.

            10 12 13 14 15 15
            17 14 15 15 15 16
            18 20 21 15 15 15
            21 14 10 11 11 15
            15 15 15 15 15 15
            

            The longest path here is of length 6. (21, 20, 18, 17, 14, 12, 10)

            …And even bigger numbers are fine too.

            949858 789874  57848  43758 387348
              5848 454115   4548 448545 216464
            188452 484126 484216 786654 145451
            189465 474566 156665 132645 456651
            985464  94849 151654 151648 484364
            

            The longest descent here is of length 7. (786654, 484216, 484126, 474566, 156665, 151654, 151648, 132645)

            Rules and Notes

            • Grids may be taken in any convenient format. Specify your format in your answer.
            • You may assume the height map is perfectly rectangular, is nonempty, and contains only positive integers in the signed 32-bit integer range.
            • The longest descent path can begin and end anywhere on the grid.
            • You do not need to describe the longest descent path in any way. Only its length is required.
            • Shortest code wins
            share|improve this question

            $endgroup$

            Your task is to determine the length of the longest descent down a “mountain” represented as a grid of integer heights. A “descent” is any path from a starting cell to orthogonally adjacent cells with strictly decreasing heights (i.e. not diagonal and not to the same height). For instance, you can move from 5-4-3-1 but not 5-5-4-3-3-2-1. The length of this path is how many cell movements there are from the starting cell to the ending cell, thus 5-4-3-1 is length 3.

            You will receive a rectangular grid as input and you should output an integer indicating the longest descent.

            Examples

            1 2 3 2 2
            3 4 5 5 5
            3 4 6 7 4
            3 3 5 6 2
            1 1 2 3 1
            

            The length of the longest descent down this mountain is 5. The longest path starts at the 7, moves left, up, left, up, and then left (7-6-5-4-2-1). Since there are 5 movements in this path, the path length is 5.

            They might be all the same number.

            1 1 1 1 1
            1 1 1 1 1
            1 1 1 1 1
            1 1 1 1 1
            

            Since this height map is flat, the longest descent is 0. (not 19, since the path sequence must be strictly descending)

            Height maps can be made up of larger numbers than single-digit numbers.

            10 12 13 14 15 15
            17 14 15 15 15 16
            18 20 21 15 15 15
            21 14 10 11 11 15
            15 15 15 15 15 15
            

            The longest path here is of length 6. (21, 20, 18, 17, 14, 12, 10)

            …And even bigger numbers are fine too.

            949858 789874  57848  43758 387348
              5848 454115   4548 448545 216464
            188452 484126 484216 786654 145451
            189465 474566 156665 132645 456651
            985464  94849 151654 151648 484364
            

            The longest descent here is of length 7. (786654, 484216, 484126, 474566, 156665, 151654, 151648, 132645)

            Rules and Notes

            • Grids may be taken in any convenient format. Specify your format in your answer.
            • You may assume the height map is perfectly rectangular, is nonempty, and contains only positive integers in the signed 32-bit integer range.
            • The longest descent path can begin and end anywhere on the grid.
            • You do not need to describe the longest descent path in any way. Only its length is required.
            • Shortest code wins

            code-golf grid

            share|improve this question

            share|improve this question

            share|improve this question

            share|improve this question

            edited Jan 3 at 21:27

            Beefster

            asked Jan 3 at 17:31

            BeefsterBeefster

            1,083722

            1,083722

            • $begingroup$
              How should the last example be interpreted?
              $endgroup$
              – Peter Taylor
              Jan 3 at 18:11

            • $begingroup$
              @PeterTaylor I’m not sure what you mean.
              $endgroup$
              – Beefster
              Jan 3 at 19:00

            • $begingroup$
              I think the last example is just a matrix of multi digit numbers
              $endgroup$
              – Embodiment of Ignorance
              Jan 3 at 19:08

            • $begingroup$
              @EmbodimentofIgnorance, ah, yes, I see. It would be a lot easier to spot the path with two-digit numbers rather than 4 to 6.
              $endgroup$
              – Peter Taylor
              Jan 3 at 21:08

            • 1

              $begingroup$
              @Οurous: just rectangular. Not jagged.
              $endgroup$
              – Beefster
              Jan 3 at 21:21

            • $begingroup$
              How should the last example be interpreted?
              $endgroup$
              – Peter Taylor
              Jan 3 at 18:11

            • $begingroup$
              @PeterTaylor I’m not sure what you mean.
              $endgroup$
              – Beefster
              Jan 3 at 19:00

            • $begingroup$
              I think the last example is just a matrix of multi digit numbers
              $endgroup$
              – Embodiment of Ignorance
              Jan 3 at 19:08

            • $begingroup$
              @EmbodimentofIgnorance, ah, yes, I see. It would be a lot easier to spot the path with two-digit numbers rather than 4 to 6.
              $endgroup$
              – Peter Taylor
              Jan 3 at 21:08

            • 1

              $begingroup$
              @Οurous: just rectangular. Not jagged.
              $endgroup$
              – Beefster
              Jan 3 at 21:21

            $begingroup$
            How should the last example be interpreted?
            $endgroup$
            – Peter Taylor
            Jan 3 at 18:11

            $begingroup$
            How should the last example be interpreted?
            $endgroup$
            – Peter Taylor
            Jan 3 at 18:11

            $begingroup$
            @PeterTaylor I’m not sure what you mean.
            $endgroup$
            – Beefster
            Jan 3 at 19:00

            $begingroup$
            @PeterTaylor I’m not sure what you mean.
            $endgroup$
            – Beefster
            Jan 3 at 19:00

            $begingroup$
            I think the last example is just a matrix of multi digit numbers
            $endgroup$
            – Embodiment of Ignorance
            Jan 3 at 19:08

            $begingroup$
            I think the last example is just a matrix of multi digit numbers
            $endgroup$
            – Embodiment of Ignorance
            Jan 3 at 19:08

            $begingroup$
            @EmbodimentofIgnorance, ah, yes, I see. It would be a lot easier to spot the path with two-digit numbers rather than 4 to 6.
            $endgroup$
            – Peter Taylor
            Jan 3 at 21:08

            $begingroup$
            @EmbodimentofIgnorance, ah, yes, I see. It would be a lot easier to spot the path with two-digit numbers rather than 4 to 6.
            $endgroup$
            – Peter Taylor
            Jan 3 at 21:08

            1

            1

            $begingroup$
            @Οurous: just rectangular. Not jagged.
            $endgroup$
            – Beefster
            Jan 3 at 21:21

            $begingroup$
            @Οurous: just rectangular. Not jagged.
            $endgroup$
            – Beefster
            Jan 3 at 21:21

            7 Answers
            7

            active

            oldest

            votes

            8

            $begingroup$

            JavaScript (ES7),  106 103 102  98 bytes

            f=(m,n=b=-1,x,y,p)=>m.map((r,Y)=>r.map((v,X)=>(x-X)**2+(y-Y)**2-1|v/p?b=n<b?b:n:f(m,n+1,X,Y,v)))|b
            

            Try it online!

            Commented

            f = (                        // f = recursive function taking:
              m,                         //   m  = input matrix
              n = b = -1,                //   n    = length of the current path; b = best length so far
              x, y,                      //   x, y = coordinates of the previous cell
              p                          //   p    = value of the previous cell
            ) =>                         //
              m.map((r, Y) =>            // for each row r at position Y in m:
                r.map((v, X) =>          //   for each value v at position X in r:
                  (x - X) ** 2 +         //     compute the squared Euclidean distance
                  (y - Y) ** 2           //     between (x, y) and (X, Y)
                  - 1                    //     if A) the above result is not equal to 1
                  | v / p ?              //     or B) v is greater than or equal to p:
                    b = n < b ? b : n    //       end of path: update b to n if n >= b
                  :                      //     else:
                    f(m, n + 1, X, Y, v) //       do a recursive call
                )                        //   end of inner map()
              ) | b                      // end of outer map(); return b
            

            How?

            During the first iteration, $x$, $y$ and $p$ are all undefined and both tests (A and B in the comments) evaluate to NaN, which triggers the recursive call. Therefore, all cells are considered as a possible starting point of the path.

            share|improve this answer

            $endgroup$

              6

              $begingroup$

              Jelly,  23 21  20 bytes

              -2 thanks to Erik the Outgolfer

              ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’
              

              Try it online! (way too inefficient for the examples – path here is 95 94 93 83 77 40 10 so 6 is yielded)

              How?

              ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’ - Link: list of lists of integers, M
              ŒỤ                   - multi-dimensional indices sorted by values
                ŒP                 - power-set
                        Ƈ          - filter, keep those for which:
                       Ʋ           -   last four links as a monad:
                   Ɲ               -     for each pair of neighbours:
                  ạ                -       absolute difference
                    §              -     sum each
                     Ị             -     insignificant?
                      Ạ            -     all?
                         œị        - multi-dimensional index into:
                           ⁸       -   chain's left argument, M
                              Ƈ    - filter, keep only those:
                             Ƒ     -   unaffected by?:
                            Q      -     de-duplicate
                               Ṫ   - tail
                                L  - length
                                 ’ - decrement
              

              share|improve this answer

              $endgroup$

                3

                $begingroup$

                Python 2, 150 147 140 136 134 132 125 123 120 bytes

                l=lambda g,i,j:max(0<g.get(t)<g[i,j]and-~l(g,*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                lambda g:max(l(g,*t)for t in g)
                

                Try it online!

                Takes input in the form of a dictionary (x, y): value.

                -7 bytes thanks to wizzwizz4, -2 bytes thanks to Jonathan Allen, -2 bytes thanks to BMO

                Alternative, 123 121 bytes

                l=lambda i,j:max(0<g.get(t)<g[i,j]and-~l(*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                g=input();print max(l(*t)for t in g)
                

                Try it online!

                Essentially the same solution, just with the final lambda replaced by an actual program. I personally like the first one better, but this one comes close in byte count by allowing g to be used as a global variable.

                share|improve this answer

                $endgroup$

                  2

                  $begingroup$

                  Clean, 211 207 bytes

                  import StdEnv,Data.List
                  z=zipWith
                  $l=maximum[length k-1\p<-permutations[(v,[x,y])\y<-[0..]&u<-l,x<-[0..]&v<-u],(k,[m:n])<-map unzip(subsequences p)|and[all((>)2o sum o map abs)(z(z(-))n[m:n]):z(>)k(tl k)]]
                  

                  Try it online!

                  A brute-force solution taking a list-of-lists-of-integers ([[Int]]).
                  The TIO driver takes the same format as the examples through STDIN.

                  It’s too slow to run any of the examples on TIO and probably locally too, but works in theory.

                  This one does the same thing faster, can do 3×3 or 2×4 on TIO and 4×4 and 3×5 locally.

                  Indented:

                  $ l
                      = maximum
                          [ length k-1
                          \p <- permutations
                              [ (v, [x, y])
                              \y <- [0..] & u <- l
                              , x <- [0..] & v <- u
                              ]
                          , (k, [m: n]) <- map unzip
                              (subsequences p)
                          | and
                              [ all
                                  ((>) 2 o sum o map abs)
                                  (zipWith (zipWith (-)) n [m:n])
                                  :
                                  zipWith (>) k (tl k)
                              ]
                          ]
                  

                  share|improve this answer

                  $endgroup$

                    2

                    $begingroup$

                    Python 3, 219 bytes

                    e,m=len,enumerate
                    b=lambda g,x,y:[b(g,i,j)for o in[-1,1]for i,j in[(x+o,y),(x,y+o)]if e(g)>i>=0<=j<e(g[x])and g[x][y]<g[i][j]]
                    l=lambda t:e(t)and 1+max(map(l,t))
                    d=lambda g:max(l(b(g,x,y))for x,r in m(g)for y,_ in m(r))
                    

                    Try it online!

                    Grid is represented as list of lists:

                    [
                        [1, 2, 3, 2, 2],
                        [3, 4, 5, 5, 5],
                        [3, 4, 6, 7, 4],
                        [3, 3, 5, 6, 2],
                        [1, 1, 2, 3, 1],
                    ]
                    

                    Original ungolfed code:

                    def potential_neighbours(x, y):
                        return [(x-1, y), (x+1, y), (x, y-1), (x, y+1)]
                    
                    def neighbours(grid, x, y):
                        result = 
                        for i, j in potential_neighbours(x, y):
                            if 0 <= i < len(grid) and 0 <= j < len(grid[x]) and grid[x][y] < grid[i][j]:
                                result += [(i, j)]
                        return result
                    
                    def build_tree(grid, x, y):
                        return [build_tree(grid, i, j) for i, j in neighbours(grid, x, y)]
                    
                    def longest_path_in_tree(tree):
                        if len(tree) == 0:
                            return 0
                        return 1 + max(map(longest_path_in_tree, tree))
                    
                    def longest_descent(grid):
                        trees = [build_tree(grid, x, y) for x, row in enumerate(grid) for y, _ in enumerate(row)]
                        return max(map(longest_path_in_tree, trees))
                    

                    share|improve this answer

                    $endgroup$

                      2

                      $begingroup$

                      Haskell, 188 186 bytes

                      Needs $texttt{-XNoMonomorphismRestriction}$:

                      f m|c<-[0..length(m!!0)-1],r<-[0..length m-1]=h[g[(x,y)]|x<-r,y<-c,let g((x,y):p)=h[1+g(k:p)|i<-[-1,1],k@(u,v)<-[(x+i,y),(x,y+i)],u#r,v#c,m!!u!!v<m!!x!!y,not$k#p]]
                      (#)=elem
                      h=foldl max 0
                      

                      Try it online!

                      Alternatively we could use notElem over (not.).(#) without the flag for $+4$ bytes:

                      Try it online!

                      Explanation & Ungolfed

                      Strategy: Recursively try all feasible paths, keeping track of visited entries and maximize their length.

                      Let’s first define some helpers.. Since we need elem and notElem, let’s use (#) for elem. Also, to maximize we’ll need a total function (maximize is not), returning $0$ when the list is empty:

                      safeMaximum = foldl max 0
                      

                      Now we’re ready to define our recursive function fun :: [[Integer]] -> Integer:

                      fun xs
                        | c <- [0..length(m!!0)-1]             -- all possible indices of xs' columns
                        , r <- [0..length m-1]                 -- all possible indices of xs' rows
                        = safeMaximum                          -- maximize ..
                            [ g [(x,y)]                        -- .. initially we haven't visited any others
                            | x <- c, y<-r                     -- .. all possible entries
                      -- For the purpose of golfing we define g in the list-comprehension, it takes all visited entries (p) where (x,y) is the most recent
                            , let g((x,y):p) = safeMaximum     -- maximize ..
                                [ 1 + g(k:p)                   -- .. recurse, adding (x,y) to the visited nodes & increment (the next path will be 1 longer)
                                | i <- [-1,1]                  -- offsets [left/up,right/down]
                                , k@(u,v) <-[(x+i,y),(x,y+i)]  -- next entry-candidate
                                , u#c, v#r                     -- make sure indices are in bound ..
                                , m!!u!!v < m!!x!!y            -- .. , the the path is decreasing
                                , not$(u,v)#p                  -- .. and we haven't already visited that element
                                ]
                            ]
                      

                      share|improve this answer

                      $endgroup$

                      • $begingroup$
                        How does this take grids? List of lists?
                        $endgroup$
                        – Beefster
                        Jan 4 at 17:42

                      • $begingroup$
                        @Beefster: Yes, it says [[Integer]] is list of lists. Though in the linked TIO you have a wrapper parse :: String -> [[Integer]], st. you can use strings split on spaces and new-lines.
                        $endgroup$
                        – BMO
                        Jan 4 at 17:46

                      1

                      $begingroup$

                      Python 3, 263 227 bytes

                      def f(m):
                       p={(x,y):[c for i in[-1,1]for c in[(x,y+i),(x+i,y)]]for x,y in m};d={c:0 for c in p if not p[c]}
                       while len(p)-len(d):
                        for c in p:
                         for b in p[c]:
                          if b in d:d[c]=max(d[b]+1,d.get(c,0))
                       return max(d.values())
                      

                      Try it online!

                      -2 bytes thanks to BMO

                      Takes grids in the format {(0, 0): 1, (1, 0): 2, ...}. This format can be generated from the example format using the following utility function:

                      lambda s,e=enumerate:{(x,y):int(n)for y,l in e(s.split('n'))for x,n in e(l.split())}
                      

                      share|improve this answer

                      $endgroup$

                        Your Answer

                        StackExchange.ifUsing(“editor”, function () {
                        return StackExchange.using(“mathjaxEditing”, function () {
                        StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
                        StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [[“\$”, “\$”]]);
                        });
                        });
                        }, “mathjax-editing”);

                        StackExchange.ifUsing(“editor”, function () {
                        StackExchange.using(“externalEditor”, function () {
                        StackExchange.using(“snippets”, function () {
                        StackExchange.snippets.init();
                        });
                        });
                        }, “code-snippets”);

                        StackExchange.ready(function() {
                        var channelOptions = {
                        tags: “”.split(” “),
                        id: “200”
                        };
                        initTagRenderer(“”.split(” “), “”.split(” “), channelOptions);

                        StackExchange.using(“externalEditor”, function() {
                        // Have to fire editor after snippets, if snippets enabled
                        if (StackExchange.settings.snippets.snippetsEnabled) {
                        StackExchange.using(“snippets”, function() {
                        createEditor();
                        });
                        }
                        else {
                        createEditor();
                        }
                        });

                        function createEditor() {
                        StackExchange.prepareEditor({
                        heartbeatType: ‘answer’,
                        autoActivateHeartbeat: false,
                        convertImagesToLinks: false,
                        noModals: true,
                        showLowRepImageUploadWarning: true,
                        reputationToPostImages: null,
                        bindNavPrevention: true,
                        postfix: “”,
                        imageUploader: {
                        brandingHtml: “Powered by u003ca class=”icon-imgur-white” href=”https://imgur.com/”u003eu003c/au003e”,
                        contentPolicyHtml: “User contributions licensed under u003ca href=”https://creativecommons.org/licenses/by-sa/3.0/”u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href=”https://stackoverflow.com/legal/content-policy”u003e(content policy)u003c/au003e”,
                        allowUrls: true
                        },
                        onDemand: true,
                        discardSelector: “.discard-answer”
                        ,immediatelyShowMarkdownHelp:true
                        });

                        }
                        });

                        draft saved
                        draft discarded

                        StackExchange.ready(
                        function () {
                        StackExchange.openid.initPostLogin(‘.new-post-login’, ‘https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f178326%2flength-of-the-longest-descent%23new-answer’, ‘question_page’);
                        }
                        );

                        Post as a guest

                        Required, but never shown

                        7 Answers
                        7

                        active

                        oldest

                        votes

                        7 Answers
                        7

                        active

                        oldest

                        votes

                        active

                        oldest

                        votes

                        active

                        oldest

                        votes

                        8

                        $begingroup$

                        JavaScript (ES7),  106 103 102  98 bytes

                        f=(m,n=b=-1,x,y,p)=>m.map((r,Y)=>r.map((v,X)=>(x-X)**2+(y-Y)**2-1|v/p?b=n<b?b:n:f(m,n+1,X,Y,v)))|b
                        

                        Try it online!

                        Commented

                        f = (                        // f = recursive function taking:
                          m,                         //   m  = input matrix
                          n = b = -1,                //   n    = length of the current path; b = best length so far
                          x, y,                      //   x, y = coordinates of the previous cell
                          p                          //   p    = value of the previous cell
                        ) =>                         //
                          m.map((r, Y) =>            // for each row r at position Y in m:
                            r.map((v, X) =>          //   for each value v at position X in r:
                              (x - X) ** 2 +         //     compute the squared Euclidean distance
                              (y - Y) ** 2           //     between (x, y) and (X, Y)
                              - 1                    //     if A) the above result is not equal to 1
                              | v / p ?              //     or B) v is greater than or equal to p:
                                b = n < b ? b : n    //       end of path: update b to n if n >= b
                              :                      //     else:
                                f(m, n + 1, X, Y, v) //       do a recursive call
                            )                        //   end of inner map()
                          ) | b                      // end of outer map(); return b
                        

                        How?

                        During the first iteration, $x$, $y$ and $p$ are all undefined and both tests (A and B in the comments) evaluate to NaN, which triggers the recursive call. Therefore, all cells are considered as a possible starting point of the path.

                        share|improve this answer

                        $endgroup$

                          8

                          $begingroup$

                          JavaScript (ES7),  106 103 102  98 bytes

                          f=(m,n=b=-1,x,y,p)=>m.map((r,Y)=>r.map((v,X)=>(x-X)**2+(y-Y)**2-1|v/p?b=n<b?b:n:f(m,n+1,X,Y,v)))|b
                          

                          Try it online!

                          Commented

                          f = (                        // f = recursive function taking:
                            m,                         //   m  = input matrix
                            n = b = -1,                //   n    = length of the current path; b = best length so far
                            x, y,                      //   x, y = coordinates of the previous cell
                            p                          //   p    = value of the previous cell
                          ) =>                         //
                            m.map((r, Y) =>            // for each row r at position Y in m:
                              r.map((v, X) =>          //   for each value v at position X in r:
                                (x - X) ** 2 +         //     compute the squared Euclidean distance
                                (y - Y) ** 2           //     between (x, y) and (X, Y)
                                - 1                    //     if A) the above result is not equal to 1
                                | v / p ?              //     or B) v is greater than or equal to p:
                                  b = n < b ? b : n    //       end of path: update b to n if n >= b
                                :                      //     else:
                                  f(m, n + 1, X, Y, v) //       do a recursive call
                              )                        //   end of inner map()
                            ) | b                      // end of outer map(); return b
                          

                          How?

                          During the first iteration, $x$, $y$ and $p$ are all undefined and both tests (A and B in the comments) evaluate to NaN, which triggers the recursive call. Therefore, all cells are considered as a possible starting point of the path.

                          share|improve this answer

                          $endgroup$

                            8

                            8

                            8

                            $begingroup$

                            JavaScript (ES7),  106 103 102  98 bytes

                            f=(m,n=b=-1,x,y,p)=>m.map((r,Y)=>r.map((v,X)=>(x-X)**2+(y-Y)**2-1|v/p?b=n<b?b:n:f(m,n+1,X,Y,v)))|b
                            

                            Try it online!

                            Commented

                            f = (                        // f = recursive function taking:
                              m,                         //   m  = input matrix
                              n = b = -1,                //   n    = length of the current path; b = best length so far
                              x, y,                      //   x, y = coordinates of the previous cell
                              p                          //   p    = value of the previous cell
                            ) =>                         //
                              m.map((r, Y) =>            // for each row r at position Y in m:
                                r.map((v, X) =>          //   for each value v at position X in r:
                                  (x - X) ** 2 +         //     compute the squared Euclidean distance
                                  (y - Y) ** 2           //     between (x, y) and (X, Y)
                                  - 1                    //     if A) the above result is not equal to 1
                                  | v / p ?              //     or B) v is greater than or equal to p:
                                    b = n < b ? b : n    //       end of path: update b to n if n >= b
                                  :                      //     else:
                                    f(m, n + 1, X, Y, v) //       do a recursive call
                                )                        //   end of inner map()
                              ) | b                      // end of outer map(); return b
                            

                            How?

                            During the first iteration, $x$, $y$ and $p$ are all undefined and both tests (A and B in the comments) evaluate to NaN, which triggers the recursive call. Therefore, all cells are considered as a possible starting point of the path.

                            share|improve this answer

                            $endgroup$

                            JavaScript (ES7),  106 103 102  98 bytes

                            f=(m,n=b=-1,x,y,p)=>m.map((r,Y)=>r.map((v,X)=>(x-X)**2+(y-Y)**2-1|v/p?b=n<b?b:n:f(m,n+1,X,Y,v)))|b
                            

                            Try it online!

                            Commented

                            f = (                        // f = recursive function taking:
                              m,                         //   m  = input matrix
                              n = b = -1,                //   n    = length of the current path; b = best length so far
                              x, y,                      //   x, y = coordinates of the previous cell
                              p                          //   p    = value of the previous cell
                            ) =>                         //
                              m.map((r, Y) =>            // for each row r at position Y in m:
                                r.map((v, X) =>          //   for each value v at position X in r:
                                  (x - X) ** 2 +         //     compute the squared Euclidean distance
                                  (y - Y) ** 2           //     between (x, y) and (X, Y)
                                  - 1                    //     if A) the above result is not equal to 1
                                  | v / p ?              //     or B) v is greater than or equal to p:
                                    b = n < b ? b : n    //       end of path: update b to n if n >= b
                                  :                      //     else:
                                    f(m, n + 1, X, Y, v) //       do a recursive call
                                )                        //   end of inner map()
                              ) | b                      // end of outer map(); return b
                            

                            How?

                            During the first iteration, $x$, $y$ and $p$ are all undefined and both tests (A and B in the comments) evaluate to NaN, which triggers the recursive call. Therefore, all cells are considered as a possible starting point of the path.

                            share|improve this answer

                            share|improve this answer

                            share|improve this answer

                            edited Jan 4 at 19:54

                            answered Jan 3 at 19:01

                            ArnauldArnauld

                            73.4k689308

                            73.4k689308

                                6

                                $begingroup$

                                Jelly,  23 21  20 bytes

                                -2 thanks to Erik the Outgolfer

                                ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’
                                

                                Try it online! (way too inefficient for the examples – path here is 95 94 93 83 77 40 10 so 6 is yielded)

                                How?

                                ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’ - Link: list of lists of integers, M
                                ŒỤ                   - multi-dimensional indices sorted by values
                                  ŒP                 - power-set
                                          Ƈ          - filter, keep those for which:
                                         Ʋ           -   last four links as a monad:
                                     Ɲ               -     for each pair of neighbours:
                                    ạ                -       absolute difference
                                      §              -     sum each
                                       Ị             -     insignificant?
                                        Ạ            -     all?
                                           œị        - multi-dimensional index into:
                                             ⁸       -   chain's left argument, M
                                                Ƈ    - filter, keep only those:
                                               Ƒ     -   unaffected by?:
                                              Q      -     de-duplicate
                                                 Ṫ   - tail
                                                  L  - length
                                                   ’ - decrement
                                

                                share|improve this answer

                                $endgroup$

                                  6

                                  $begingroup$

                                  Jelly,  23 21  20 bytes

                                  -2 thanks to Erik the Outgolfer

                                  ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’
                                  

                                  Try it online! (way too inefficient for the examples – path here is 95 94 93 83 77 40 10 so 6 is yielded)

                                  How?

                                  ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’ - Link: list of lists of integers, M
                                  ŒỤ                   - multi-dimensional indices sorted by values
                                    ŒP                 - power-set
                                            Ƈ          - filter, keep those for which:
                                           Ʋ           -   last four links as a monad:
                                       Ɲ               -     for each pair of neighbours:
                                      ạ                -       absolute difference
                                        §              -     sum each
                                         Ị             -     insignificant?
                                          Ạ            -     all?
                                             œị        - multi-dimensional index into:
                                               ⁸       -   chain's left argument, M
                                                  Ƈ    - filter, keep only those:
                                                 Ƒ     -   unaffected by?:
                                                Q      -     de-duplicate
                                                   Ṫ   - tail
                                                    L  - length
                                                     ’ - decrement
                                  

                                  share|improve this answer

                                  $endgroup$

                                    6

                                    6

                                    6

                                    $begingroup$

                                    Jelly,  23 21  20 bytes

                                    -2 thanks to Erik the Outgolfer

                                    ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’
                                    

                                    Try it online! (way too inefficient for the examples – path here is 95 94 93 83 77 40 10 so 6 is yielded)

                                    How?

                                    ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’ - Link: list of lists of integers, M
                                    ŒỤ                   - multi-dimensional indices sorted by values
                                      ŒP                 - power-set
                                              Ƈ          - filter, keep those for which:
                                             Ʋ           -   last four links as a monad:
                                         Ɲ               -     for each pair of neighbours:
                                        ạ                -       absolute difference
                                          §              -     sum each
                                           Ị             -     insignificant?
                                            Ạ            -     all?
                                               œị        - multi-dimensional index into:
                                                 ⁸       -   chain's left argument, M
                                                    Ƈ    - filter, keep only those:
                                                   Ƒ     -   unaffected by?:
                                                  Q      -     de-duplicate
                                                     Ṫ   - tail
                                                      L  - length
                                                       ’ - decrement
                                    

                                    share|improve this answer

                                    $endgroup$

                                    Jelly,  23 21  20 bytes

                                    -2 thanks to Erik the Outgolfer

                                    ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’
                                    

                                    Try it online! (way too inefficient for the examples – path here is 95 94 93 83 77 40 10 so 6 is yielded)

                                    How?

                                    ŒỤŒPạƝ§ỊẠƲƇœị⁸QƑƇṪL’ - Link: list of lists of integers, M
                                    ŒỤ                   - multi-dimensional indices sorted by values
                                      ŒP                 - power-set
                                              Ƈ          - filter, keep those for which:
                                             Ʋ           -   last four links as a monad:
                                         Ɲ               -     for each pair of neighbours:
                                        ạ                -       absolute difference
                                          §              -     sum each
                                           Ị             -     insignificant?
                                            Ạ            -     all?
                                               œị        - multi-dimensional index into:
                                                 ⁸       -   chain's left argument, M
                                                    Ƈ    - filter, keep only those:
                                                   Ƒ     -   unaffected by?:
                                                  Q      -     de-duplicate
                                                     Ṫ   - tail
                                                      L  - length
                                                       ’ - decrement
                                    

                                    share|improve this answer

                                    share|improve this answer

                                    share|improve this answer

                                    edited Jan 3 at 22:54

                                    answered Jan 3 at 20:28

                                    Jonathan AllanJonathan Allan

                                    51.1k534166

                                    51.1k534166

                                        3

                                        $begingroup$

                                        Python 2, 150 147 140 136 134 132 125 123 120 bytes

                                        l=lambda g,i,j:max(0<g.get(t)<g[i,j]and-~l(g,*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                                        lambda g:max(l(g,*t)for t in g)
                                        

                                        Try it online!

                                        Takes input in the form of a dictionary (x, y): value.

                                        -7 bytes thanks to wizzwizz4, -2 bytes thanks to Jonathan Allen, -2 bytes thanks to BMO

                                        Alternative, 123 121 bytes

                                        l=lambda i,j:max(0<g.get(t)<g[i,j]and-~l(*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                                        g=input();print max(l(*t)for t in g)
                                        

                                        Try it online!

                                        Essentially the same solution, just with the final lambda replaced by an actual program. I personally like the first one better, but this one comes close in byte count by allowing g to be used as a global variable.

                                        share|improve this answer

                                        $endgroup$

                                          3

                                          $begingroup$

                                          Python 2, 150 147 140 136 134 132 125 123 120 bytes

                                          l=lambda g,i,j:max(0<g.get(t)<g[i,j]and-~l(g,*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                                          lambda g:max(l(g,*t)for t in g)
                                          

                                          Try it online!

                                          Takes input in the form of a dictionary (x, y): value.

                                          -7 bytes thanks to wizzwizz4, -2 bytes thanks to Jonathan Allen, -2 bytes thanks to BMO

                                          Alternative, 123 121 bytes

                                          l=lambda i,j:max(0<g.get(t)<g[i,j]and-~l(*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                                          g=input();print max(l(*t)for t in g)
                                          

                                          Try it online!

                                          Essentially the same solution, just with the final lambda replaced by an actual program. I personally like the first one better, but this one comes close in byte count by allowing g to be used as a global variable.

                                          share|improve this answer

                                          $endgroup$

                                            3

                                            3

                                            3

                                            $begingroup$

                                            Python 2, 150 147 140 136 134 132 125 123 120 bytes

                                            l=lambda g,i,j:max(0<g.get(t)<g[i,j]and-~l(g,*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                                            lambda g:max(l(g,*t)for t in g)
                                            

                                            Try it online!

                                            Takes input in the form of a dictionary (x, y): value.

                                            -7 bytes thanks to wizzwizz4, -2 bytes thanks to Jonathan Allen, -2 bytes thanks to BMO

                                            Alternative, 123 121 bytes

                                            l=lambda i,j:max(0<g.get(t)<g[i,j]and-~l(*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                                            g=input();print max(l(*t)for t in g)
                                            

                                            Try it online!

                                            Essentially the same solution, just with the final lambda replaced by an actual program. I personally like the first one better, but this one comes close in byte count by allowing g to be used as a global variable.

                                            share|improve this answer

                                            $endgroup$

                                            Python 2, 150 147 140 136 134 132 125 123 120 bytes

                                            l=lambda g,i,j:max(0<g.get(t)<g[i,j]and-~l(g,*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                                            lambda g:max(l(g,*t)for t in g)
                                            

                                            Try it online!

                                            Takes input in the form of a dictionary (x, y): value.

                                            -7 bytes thanks to wizzwizz4, -2 bytes thanks to Jonathan Allen, -2 bytes thanks to BMO

                                            Alternative, 123 121 bytes

                                            l=lambda i,j:max(0<g.get(t)<g[i,j]and-~l(*t)for d in(-1,1)for t in((i+d,j),(i,j+d)))
                                            g=input();print max(l(*t)for t in g)
                                            

                                            Try it online!

                                            Essentially the same solution, just with the final lambda replaced by an actual program. I personally like the first one better, but this one comes close in byte count by allowing g to be used as a global variable.

                                            share|improve this answer

                                            share|improve this answer

                                            share|improve this answer

                                            edited Jan 3 at 23:05

                                            answered Jan 3 at 20:18

                                            ArBoArBo

                                            29115

                                            29115

                                                2

                                                $begingroup$

                                                Clean, 211 207 bytes

                                                import StdEnv,Data.List
                                                z=zipWith
                                                $l=maximum[length k-1\p<-permutations[(v,[x,y])\y<-[0..]&u<-l,x<-[0..]&v<-u],(k,[m:n])<-map unzip(subsequences p)|and[all((>)2o sum o map abs)(z(z(-))n[m:n]):z(>)k(tl k)]]
                                                

                                                Try it online!

                                                A brute-force solution taking a list-of-lists-of-integers ([[Int]]).
                                                The TIO driver takes the same format as the examples through STDIN.

                                                It’s too slow to run any of the examples on TIO and probably locally too, but works in theory.

                                                This one does the same thing faster, can do 3×3 or 2×4 on TIO and 4×4 and 3×5 locally.

                                                Indented:

                                                $ l
                                                    = maximum
                                                        [ length k-1
                                                        \p <- permutations
                                                            [ (v, [x, y])
                                                            \y <- [0..] & u <- l
                                                            , x <- [0..] & v <- u
                                                            ]
                                                        , (k, [m: n]) <- map unzip
                                                            (subsequences p)
                                                        | and
                                                            [ all
                                                                ((>) 2 o sum o map abs)
                                                                (zipWith (zipWith (-)) n [m:n])
                                                                :
                                                                zipWith (>) k (tl k)
                                                            ]
                                                        ]
                                                

                                                share|improve this answer

                                                $endgroup$

                                                  2

                                                  $begingroup$

                                                  Clean, 211 207 bytes

                                                  import StdEnv,Data.List
                                                  z=zipWith
                                                  $l=maximum[length k-1\p<-permutations[(v,[x,y])\y<-[0..]&u<-l,x<-[0..]&v<-u],(k,[m:n])<-map unzip(subsequences p)|and[all((>)2o sum o map abs)(z(z(-))n[m:n]):z(>)k(tl k)]]
                                                  

                                                  Try it online!

                                                  A brute-force solution taking a list-of-lists-of-integers ([[Int]]).
                                                  The TIO driver takes the same format as the examples through STDIN.

                                                  It’s too slow to run any of the examples on TIO and probably locally too, but works in theory.

                                                  This one does the same thing faster, can do 3×3 or 2×4 on TIO and 4×4 and 3×5 locally.

                                                  Indented:

                                                  $ l
                                                      = maximum
                                                          [ length k-1
                                                          \p <- permutations
                                                              [ (v, [x, y])
                                                              \y <- [0..] & u <- l
                                                              , x <- [0..] & v <- u
                                                              ]
                                                          , (k, [m: n]) <- map unzip
                                                              (subsequences p)
                                                          | and
                                                              [ all
                                                                  ((>) 2 o sum o map abs)
                                                                  (zipWith (zipWith (-)) n [m:n])
                                                                  :
                                                                  zipWith (>) k (tl k)
                                                              ]
                                                          ]
                                                  

                                                  share|improve this answer

                                                  $endgroup$

                                                    2

                                                    2

                                                    2

                                                    $begingroup$

                                                    Clean, 211 207 bytes

                                                    import StdEnv,Data.List
                                                    z=zipWith
                                                    $l=maximum[length k-1\p<-permutations[(v,[x,y])\y<-[0..]&u<-l,x<-[0..]&v<-u],(k,[m:n])<-map unzip(subsequences p)|and[all((>)2o sum o map abs)(z(z(-))n[m:n]):z(>)k(tl k)]]
                                                    

                                                    Try it online!

                                                    A brute-force solution taking a list-of-lists-of-integers ([[Int]]).
                                                    The TIO driver takes the same format as the examples through STDIN.

                                                    It’s too slow to run any of the examples on TIO and probably locally too, but works in theory.

                                                    This one does the same thing faster, can do 3×3 or 2×4 on TIO and 4×4 and 3×5 locally.

                                                    Indented:

                                                    $ l
                                                        = maximum
                                                            [ length k-1
                                                            \p <- permutations
                                                                [ (v, [x, y])
                                                                \y <- [0..] & u <- l
                                                                , x <- [0..] & v <- u
                                                                ]
                                                            , (k, [m: n]) <- map unzip
                                                                (subsequences p)
                                                            | and
                                                                [ all
                                                                    ((>) 2 o sum o map abs)
                                                                    (zipWith (zipWith (-)) n [m:n])
                                                                    :
                                                                    zipWith (>) k (tl k)
                                                                ]
                                                            ]
                                                    

                                                    share|improve this answer

                                                    $endgroup$

                                                    Clean, 211 207 bytes

                                                    import StdEnv,Data.List
                                                    z=zipWith
                                                    $l=maximum[length k-1\p<-permutations[(v,[x,y])\y<-[0..]&u<-l,x<-[0..]&v<-u],(k,[m:n])<-map unzip(subsequences p)|and[all((>)2o sum o map abs)(z(z(-))n[m:n]):z(>)k(tl k)]]
                                                    

                                                    Try it online!

                                                    A brute-force solution taking a list-of-lists-of-integers ([[Int]]).
                                                    The TIO driver takes the same format as the examples through STDIN.

                                                    It’s too slow to run any of the examples on TIO and probably locally too, but works in theory.

                                                    This one does the same thing faster, can do 3×3 or 2×4 on TIO and 4×4 and 3×5 locally.

                                                    Indented:

                                                    $ l
                                                        = maximum
                                                            [ length k-1
                                                            \p <- permutations
                                                                [ (v, [x, y])
                                                                \y <- [0..] & u <- l
                                                                , x <- [0..] & v <- u
                                                                ]
                                                            , (k, [m: n]) <- map unzip
                                                                (subsequences p)
                                                            | and
                                                                [ all
                                                                    ((>) 2 o sum o map abs)
                                                                    (zipWith (zipWith (-)) n [m:n])
                                                                    :
                                                                    zipWith (>) k (tl k)
                                                                ]
                                                            ]
                                                    

                                                    share|improve this answer

                                                    share|improve this answer

                                                    share|improve this answer

                                                    edited Jan 3 at 21:58

                                                    answered Jan 3 at 18:57

                                                    ΟurousΟurous

                                                    6,55211033

                                                    6,55211033

                                                        2

                                                        $begingroup$

                                                        Python 3, 219 bytes

                                                        e,m=len,enumerate
                                                        b=lambda g,x,y:[b(g,i,j)for o in[-1,1]for i,j in[(x+o,y),(x,y+o)]if e(g)>i>=0<=j<e(g[x])and g[x][y]<g[i][j]]
                                                        l=lambda t:e(t)and 1+max(map(l,t))
                                                        d=lambda g:max(l(b(g,x,y))for x,r in m(g)for y,_ in m(r))
                                                        

                                                        Try it online!

                                                        Grid is represented as list of lists:

                                                        [
                                                            [1, 2, 3, 2, 2],
                                                            [3, 4, 5, 5, 5],
                                                            [3, 4, 6, 7, 4],
                                                            [3, 3, 5, 6, 2],
                                                            [1, 1, 2, 3, 1],
                                                        ]
                                                        

                                                        Original ungolfed code:

                                                        def potential_neighbours(x, y):
                                                            return [(x-1, y), (x+1, y), (x, y-1), (x, y+1)]
                                                        
                                                        def neighbours(grid, x, y):
                                                            result = 
                                                            for i, j in potential_neighbours(x, y):
                                                                if 0 <= i < len(grid) and 0 <= j < len(grid[x]) and grid[x][y] < grid[i][j]:
                                                                    result += [(i, j)]
                                                            return result
                                                        
                                                        def build_tree(grid, x, y):
                                                            return [build_tree(grid, i, j) for i, j in neighbours(grid, x, y)]
                                                        
                                                        def longest_path_in_tree(tree):
                                                            if len(tree) == 0:
                                                                return 0
                                                            return 1 + max(map(longest_path_in_tree, tree))
                                                        
                                                        def longest_descent(grid):
                                                            trees = [build_tree(grid, x, y) for x, row in enumerate(grid) for y, _ in enumerate(row)]
                                                            return max(map(longest_path_in_tree, trees))
                                                        

                                                        share|improve this answer

                                                        $endgroup$

                                                          2

                                                          $begingroup$

                                                          Python 3, 219 bytes

                                                          e,m=len,enumerate
                                                          b=lambda g,x,y:[b(g,i,j)for o in[-1,1]for i,j in[(x+o,y),(x,y+o)]if e(g)>i>=0<=j<e(g[x])and g[x][y]<g[i][j]]
                                                          l=lambda t:e(t)and 1+max(map(l,t))
                                                          d=lambda g:max(l(b(g,x,y))for x,r in m(g)for y,_ in m(r))
                                                          

                                                          Try it online!

                                                          Grid is represented as list of lists:

                                                          [
                                                              [1, 2, 3, 2, 2],
                                                              [3, 4, 5, 5, 5],
                                                              [3, 4, 6, 7, 4],
                                                              [3, 3, 5, 6, 2],
                                                              [1, 1, 2, 3, 1],
                                                          ]
                                                          

                                                          Original ungolfed code:

                                                          def potential_neighbours(x, y):
                                                              return [(x-1, y), (x+1, y), (x, y-1), (x, y+1)]
                                                          
                                                          def neighbours(grid, x, y):
                                                              result = 
                                                              for i, j in potential_neighbours(x, y):
                                                                  if 0 <= i < len(grid) and 0 <= j < len(grid[x]) and grid[x][y] < grid[i][j]:
                                                                      result += [(i, j)]
                                                              return result
                                                          
                                                          def build_tree(grid, x, y):
                                                              return [build_tree(grid, i, j) for i, j in neighbours(grid, x, y)]
                                                          
                                                          def longest_path_in_tree(tree):
                                                              if len(tree) == 0:
                                                                  return 0
                                                              return 1 + max(map(longest_path_in_tree, tree))
                                                          
                                                          def longest_descent(grid):
                                                              trees = [build_tree(grid, x, y) for x, row in enumerate(grid) for y, _ in enumerate(row)]
                                                              return max(map(longest_path_in_tree, trees))
                                                          

                                                          share|improve this answer

                                                          $endgroup$

                                                            2

                                                            2

                                                            2

                                                            $begingroup$

                                                            Python 3, 219 bytes

                                                            e,m=len,enumerate
                                                            b=lambda g,x,y:[b(g,i,j)for o in[-1,1]for i,j in[(x+o,y),(x,y+o)]if e(g)>i>=0<=j<e(g[x])and g[x][y]<g[i][j]]
                                                            l=lambda t:e(t)and 1+max(map(l,t))
                                                            d=lambda g:max(l(b(g,x,y))for x,r in m(g)for y,_ in m(r))
                                                            

                                                            Try it online!

                                                            Grid is represented as list of lists:

                                                            [
                                                                [1, 2, 3, 2, 2],
                                                                [3, 4, 5, 5, 5],
                                                                [3, 4, 6, 7, 4],
                                                                [3, 3, 5, 6, 2],
                                                                [1, 1, 2, 3, 1],
                                                            ]
                                                            

                                                            Original ungolfed code:

                                                            def potential_neighbours(x, y):
                                                                return [(x-1, y), (x+1, y), (x, y-1), (x, y+1)]
                                                            
                                                            def neighbours(grid, x, y):
                                                                result = 
                                                                for i, j in potential_neighbours(x, y):
                                                                    if 0 <= i < len(grid) and 0 <= j < len(grid[x]) and grid[x][y] < grid[i][j]:
                                                                        result += [(i, j)]
                                                                return result
                                                            
                                                            def build_tree(grid, x, y):
                                                                return [build_tree(grid, i, j) for i, j in neighbours(grid, x, y)]
                                                            
                                                            def longest_path_in_tree(tree):
                                                                if len(tree) == 0:
                                                                    return 0
                                                                return 1 + max(map(longest_path_in_tree, tree))
                                                            
                                                            def longest_descent(grid):
                                                                trees = [build_tree(grid, x, y) for x, row in enumerate(grid) for y, _ in enumerate(row)]
                                                                return max(map(longest_path_in_tree, trees))
                                                            

                                                            share|improve this answer

                                                            $endgroup$

                                                            Python 3, 219 bytes

                                                            e,m=len,enumerate
                                                            b=lambda g,x,y:[b(g,i,j)for o in[-1,1]for i,j in[(x+o,y),(x,y+o)]if e(g)>i>=0<=j<e(g[x])and g[x][y]<g[i][j]]
                                                            l=lambda t:e(t)and 1+max(map(l,t))
                                                            d=lambda g:max(l(b(g,x,y))for x,r in m(g)for y,_ in m(r))
                                                            

                                                            Try it online!

                                                            Grid is represented as list of lists:

                                                            [
                                                                [1, 2, 3, 2, 2],
                                                                [3, 4, 5, 5, 5],
                                                                [3, 4, 6, 7, 4],
                                                                [3, 3, 5, 6, 2],
                                                                [1, 1, 2, 3, 1],
                                                            ]
                                                            

                                                            Original ungolfed code:

                                                            def potential_neighbours(x, y):
                                                                return [(x-1, y), (x+1, y), (x, y-1), (x, y+1)]
                                                            
                                                            def neighbours(grid, x, y):
                                                                result = 
                                                                for i, j in potential_neighbours(x, y):
                                                                    if 0 <= i < len(grid) and 0 <= j < len(grid[x]) and grid[x][y] < grid[i][j]:
                                                                        result += [(i, j)]
                                                                return result
                                                            
                                                            def build_tree(grid, x, y):
                                                                return [build_tree(grid, i, j) for i, j in neighbours(grid, x, y)]
                                                            
                                                            def longest_path_in_tree(tree):
                                                                if len(tree) == 0:
                                                                    return 0
                                                                return 1 + max(map(longest_path_in_tree, tree))
                                                            
                                                            def longest_descent(grid):
                                                                trees = [build_tree(grid, x, y) for x, row in enumerate(grid) for y, _ in enumerate(row)]
                                                                return max(map(longest_path_in_tree, trees))
                                                            

                                                            share|improve this answer

                                                            share|improve this answer

                                                            share|improve this answer

                                                            answered Jan 3 at 22:09

                                                            NishiokaNishioka

                                                            1213

                                                            1213

                                                                2

                                                                $begingroup$

                                                                Haskell, 188 186 bytes

                                                                Needs $texttt{-XNoMonomorphismRestriction}$:

                                                                f m|c<-[0..length(m!!0)-1],r<-[0..length m-1]=h[g[(x,y)]|x<-r,y<-c,let g((x,y):p)=h[1+g(k:p)|i<-[-1,1],k@(u,v)<-[(x+i,y),(x,y+i)],u#r,v#c,m!!u!!v<m!!x!!y,not$k#p]]
                                                                (#)=elem
                                                                h=foldl max 0
                                                                

                                                                Try it online!

                                                                Alternatively we could use notElem over (not.).(#) without the flag for $+4$ bytes:

                                                                Try it online!

                                                                Explanation & Ungolfed

                                                                Strategy: Recursively try all feasible paths, keeping track of visited entries and maximize their length.

                                                                Let’s first define some helpers.. Since we need elem and notElem, let’s use (#) for elem. Also, to maximize we’ll need a total function (maximize is not), returning $0$ when the list is empty:

                                                                safeMaximum = foldl max 0
                                                                

                                                                Now we’re ready to define our recursive function fun :: [[Integer]] -> Integer:

                                                                fun xs
                                                                  | c <- [0..length(m!!0)-1]             -- all possible indices of xs' columns
                                                                  , r <- [0..length m-1]                 -- all possible indices of xs' rows
                                                                  = safeMaximum                          -- maximize ..
                                                                      [ g [(x,y)]                        -- .. initially we haven't visited any others
                                                                      | x <- c, y<-r                     -- .. all possible entries
                                                                -- For the purpose of golfing we define g in the list-comprehension, it takes all visited entries (p) where (x,y) is the most recent
                                                                      , let g((x,y):p) = safeMaximum     -- maximize ..
                                                                          [ 1 + g(k:p)                   -- .. recurse, adding (x,y) to the visited nodes & increment (the next path will be 1 longer)
                                                                          | i <- [-1,1]                  -- offsets [left/up,right/down]
                                                                          , k@(u,v) <-[(x+i,y),(x,y+i)]  -- next entry-candidate
                                                                          , u#c, v#r                     -- make sure indices are in bound ..
                                                                          , m!!u!!v < m!!x!!y            -- .. , the the path is decreasing
                                                                          , not$(u,v)#p                  -- .. and we haven't already visited that element
                                                                          ]
                                                                      ]
                                                                

                                                                share|improve this answer

                                                                $endgroup$

                                                                • $begingroup$
                                                                  How does this take grids? List of lists?
                                                                  $endgroup$
                                                                  – Beefster
                                                                  Jan 4 at 17:42

                                                                • $begingroup$
                                                                  @Beefster: Yes, it says [[Integer]] is list of lists. Though in the linked TIO you have a wrapper parse :: String -> [[Integer]], st. you can use strings split on spaces and new-lines.
                                                                  $endgroup$
                                                                  – BMO
                                                                  Jan 4 at 17:46

                                                                2

                                                                $begingroup$

                                                                Haskell, 188 186 bytes

                                                                Needs $texttt{-XNoMonomorphismRestriction}$:

                                                                f m|c<-[0..length(m!!0)-1],r<-[0..length m-1]=h[g[(x,y)]|x<-r,y<-c,let g((x,y):p)=h[1+g(k:p)|i<-[-1,1],k@(u,v)<-[(x+i,y),(x,y+i)],u#r,v#c,m!!u!!v<m!!x!!y,not$k#p]]
                                                                (#)=elem
                                                                h=foldl max 0
                                                                

                                                                Try it online!

                                                                Alternatively we could use notElem over (not.).(#) without the flag for $+4$ bytes:

                                                                Try it online!

                                                                Explanation & Ungolfed

                                                                Strategy: Recursively try all feasible paths, keeping track of visited entries and maximize their length.

                                                                Let’s first define some helpers.. Since we need elem and notElem, let’s use (#) for elem. Also, to maximize we’ll need a total function (maximize is not), returning $0$ when the list is empty:

                                                                safeMaximum = foldl max 0
                                                                

                                                                Now we’re ready to define our recursive function fun :: [[Integer]] -> Integer:

                                                                fun xs
                                                                  | c <- [0..length(m!!0)-1]             -- all possible indices of xs' columns
                                                                  , r <- [0..length m-1]                 -- all possible indices of xs' rows
                                                                  = safeMaximum                          -- maximize ..
                                                                      [ g [(x,y)]                        -- .. initially we haven't visited any others
                                                                      | x <- c, y<-r                     -- .. all possible entries
                                                                -- For the purpose of golfing we define g in the list-comprehension, it takes all visited entries (p) where (x,y) is the most recent
                                                                      , let g((x,y):p) = safeMaximum     -- maximize ..
                                                                          [ 1 + g(k:p)                   -- .. recurse, adding (x,y) to the visited nodes & increment (the next path will be 1 longer)
                                                                          | i <- [-1,1]                  -- offsets [left/up,right/down]
                                                                          , k@(u,v) <-[(x+i,y),(x,y+i)]  -- next entry-candidate
                                                                          , u#c, v#r                     -- make sure indices are in bound ..
                                                                          , m!!u!!v < m!!x!!y            -- .. , the the path is decreasing
                                                                          , not$(u,v)#p                  -- .. and we haven't already visited that element
                                                                          ]
                                                                      ]
                                                                

                                                                share|improve this answer

                                                                $endgroup$

                                                                • $begingroup$
                                                                  How does this take grids? List of lists?
                                                                  $endgroup$
                                                                  – Beefster
                                                                  Jan 4 at 17:42

                                                                • $begingroup$
                                                                  @Beefster: Yes, it says [[Integer]] is list of lists. Though in the linked TIO you have a wrapper parse :: String -> [[Integer]], st. you can use strings split on spaces and new-lines.
                                                                  $endgroup$
                                                                  – BMO
                                                                  Jan 4 at 17:46

                                                                2

                                                                2

                                                                2

                                                                $begingroup$

                                                                Haskell, 188 186 bytes

                                                                Needs $texttt{-XNoMonomorphismRestriction}$:

                                                                f m|c<-[0..length(m!!0)-1],r<-[0..length m-1]=h[g[(x,y)]|x<-r,y<-c,let g((x,y):p)=h[1+g(k:p)|i<-[-1,1],k@(u,v)<-[(x+i,y),(x,y+i)],u#r,v#c,m!!u!!v<m!!x!!y,not$k#p]]
                                                                (#)=elem
                                                                h=foldl max 0
                                                                

                                                                Try it online!

                                                                Alternatively we could use notElem over (not.).(#) without the flag for $+4$ bytes:

                                                                Try it online!

                                                                Explanation & Ungolfed

                                                                Strategy: Recursively try all feasible paths, keeping track of visited entries and maximize their length.

                                                                Let’s first define some helpers.. Since we need elem and notElem, let’s use (#) for elem. Also, to maximize we’ll need a total function (maximize is not), returning $0$ when the list is empty:

                                                                safeMaximum = foldl max 0
                                                                

                                                                Now we’re ready to define our recursive function fun :: [[Integer]] -> Integer:

                                                                fun xs
                                                                  | c <- [0..length(m!!0)-1]             -- all possible indices of xs' columns
                                                                  , r <- [0..length m-1]                 -- all possible indices of xs' rows
                                                                  = safeMaximum                          -- maximize ..
                                                                      [ g [(x,y)]                        -- .. initially we haven't visited any others
                                                                      | x <- c, y<-r                     -- .. all possible entries
                                                                -- For the purpose of golfing we define g in the list-comprehension, it takes all visited entries (p) where (x,y) is the most recent
                                                                      , let g((x,y):p) = safeMaximum     -- maximize ..
                                                                          [ 1 + g(k:p)                   -- .. recurse, adding (x,y) to the visited nodes & increment (the next path will be 1 longer)
                                                                          | i <- [-1,1]                  -- offsets [left/up,right/down]
                                                                          , k@(u,v) <-[(x+i,y),(x,y+i)]  -- next entry-candidate
                                                                          , u#c, v#r                     -- make sure indices are in bound ..
                                                                          , m!!u!!v < m!!x!!y            -- .. , the the path is decreasing
                                                                          , not$(u,v)#p                  -- .. and we haven't already visited that element
                                                                          ]
                                                                      ]
                                                                

                                                                share|improve this answer

                                                                $endgroup$

                                                                Haskell, 188 186 bytes

                                                                Needs $texttt{-XNoMonomorphismRestriction}$:

                                                                f m|c<-[0..length(m!!0)-1],r<-[0..length m-1]=h[g[(x,y)]|x<-r,y<-c,let g((x,y):p)=h[1+g(k:p)|i<-[-1,1],k@(u,v)<-[(x+i,y),(x,y+i)],u#r,v#c,m!!u!!v<m!!x!!y,not$k#p]]
                                                                (#)=elem
                                                                h=foldl max 0
                                                                

                                                                Try it online!

                                                                Alternatively we could use notElem over (not.).(#) without the flag for $+4$ bytes:

                                                                Try it online!

                                                                Explanation & Ungolfed

                                                                Strategy: Recursively try all feasible paths, keeping track of visited entries and maximize their length.

                                                                Let’s first define some helpers.. Since we need elem and notElem, let’s use (#) for elem. Also, to maximize we’ll need a total function (maximize is not), returning $0$ when the list is empty:

                                                                safeMaximum = foldl max 0
                                                                

                                                                Now we’re ready to define our recursive function fun :: [[Integer]] -> Integer:

                                                                fun xs
                                                                  | c <- [0..length(m!!0)-1]             -- all possible indices of xs' columns
                                                                  , r <- [0..length m-1]                 -- all possible indices of xs' rows
                                                                  = safeMaximum                          -- maximize ..
                                                                      [ g [(x,y)]                        -- .. initially we haven't visited any others
                                                                      | x <- c, y<-r                     -- .. all possible entries
                                                                -- For the purpose of golfing we define g in the list-comprehension, it takes all visited entries (p) where (x,y) is the most recent
                                                                      , let g((x,y):p) = safeMaximum     -- maximize ..
                                                                          [ 1 + g(k:p)                   -- .. recurse, adding (x,y) to the visited nodes & increment (the next path will be 1 longer)
                                                                          | i <- [-1,1]                  -- offsets [left/up,right/down]
                                                                          , k@(u,v) <-[(x+i,y),(x,y+i)]  -- next entry-candidate
                                                                          , u#c, v#r                     -- make sure indices are in bound ..
                                                                          , m!!u!!v < m!!x!!y            -- .. , the the path is decreasing
                                                                          , not$(u,v)#p                  -- .. and we haven't already visited that element
                                                                          ]
                                                                      ]
                                                                

                                                                share|improve this answer

                                                                share|improve this answer

                                                                share|improve this answer

                                                                edited Jan 4 at 17:51

                                                                answered Jan 3 at 19:33

                                                                BMOBMO

                                                                11.8k22188

                                                                11.8k22188

                                                                • $begingroup$
                                                                  How does this take grids? List of lists?
                                                                  $endgroup$
                                                                  – Beefster
                                                                  Jan 4 at 17:42

                                                                • $begingroup$
                                                                  @Beefster: Yes, it says [[Integer]] is list of lists. Though in the linked TIO you have a wrapper parse :: String -> [[Integer]], st. you can use strings split on spaces and new-lines.
                                                                  $endgroup$
                                                                  – BMO
                                                                  Jan 4 at 17:46

                                                                • $begingroup$
                                                                  How does this take grids? List of lists?
                                                                  $endgroup$
                                                                  – Beefster
                                                                  Jan 4 at 17:42

                                                                • $begingroup$
                                                                  @Beefster: Yes, it says [[Integer]] is list of lists. Though in the linked TIO you have a wrapper parse :: String -> [[Integer]], st. you can use strings split on spaces and new-lines.
                                                                  $endgroup$
                                                                  – BMO
                                                                  Jan 4 at 17:46

                                                                $begingroup$
                                                                How does this take grids? List of lists?
                                                                $endgroup$
                                                                – Beefster
                                                                Jan 4 at 17:42

                                                                $begingroup$
                                                                How does this take grids? List of lists?
                                                                $endgroup$
                                                                – Beefster
                                                                Jan 4 at 17:42

                                                                $begingroup$
                                                                @Beefster: Yes, it says [[Integer]] is list of lists. Though in the linked TIO you have a wrapper parse :: String -> [[Integer]], st. you can use strings split on spaces and new-lines.
                                                                $endgroup$
                                                                – BMO
                                                                Jan 4 at 17:46

                                                                $begingroup$
                                                                @Beefster: Yes, it says [[Integer]] is list of lists. Though in the linked TIO you have a wrapper parse :: String -> [[Integer]], st. you can use strings split on spaces and new-lines.
                                                                $endgroup$
                                                                – BMO
                                                                Jan 4 at 17:46

                                                                1

                                                                $begingroup$

                                                                Python 3, 263 227 bytes

                                                                def f(m):
                                                                 p={(x,y):[c for i in[-1,1]for c in[(x,y+i),(x+i,y)]]for x,y in m};d={c:0 for c in p if not p[c]}
                                                                 while len(p)-len(d):
                                                                  for c in p:
                                                                   for b in p[c]:
                                                                    if b in d:d[c]=max(d[b]+1,d.get(c,0))
                                                                 return max(d.values())
                                                                

                                                                Try it online!

                                                                -2 bytes thanks to BMO

                                                                Takes grids in the format {(0, 0): 1, (1, 0): 2, ...}. This format can be generated from the example format using the following utility function:

                                                                lambda s,e=enumerate:{(x,y):int(n)for y,l in e(s.split('n'))for x,n in e(l.split())}
                                                                

                                                                share|improve this answer

                                                                $endgroup$

                                                                  1

                                                                  $begingroup$

                                                                  Python 3, 263 227 bytes

                                                                  def f(m):
                                                                   p={(x,y):[c for i in[-1,1]for c in[(x,y+i),(x+i,y)]]for x,y in m};d={c:0 for c in p if not p[c]}
                                                                   while len(p)-len(d):
                                                                    for c in p:
                                                                     for b in p[c]:
                                                                      if b in d:d[c]=max(d[b]+1,d.get(c,0))
                                                                   return max(d.values())
                                                                  

                                                                  Try it online!

                                                                  -2 bytes thanks to BMO

                                                                  Takes grids in the format {(0, 0): 1, (1, 0): 2, ...}. This format can be generated from the example format using the following utility function:

                                                                  lambda s,e=enumerate:{(x,y):int(n)for y,l in e(s.split('n'))for x,n in e(l.split())}
                                                                  

                                                                  share|improve this answer

                                                                  $endgroup$

                                                                    1

                                                                    1

                                                                    1

                                                                    $begingroup$

                                                                    Python 3, 263 227 bytes

                                                                    def f(m):
                                                                     p={(x,y):[c for i in[-1,1]for c in[(x,y+i),(x+i,y)]]for x,y in m};d={c:0 for c in p if not p[c]}
                                                                     while len(p)-len(d):
                                                                      for c in p:
                                                                       for b in p[c]:
                                                                        if b in d:d[c]=max(d[b]+1,d.get(c,0))
                                                                     return max(d.values())
                                                                    

                                                                    Try it online!

                                                                    -2 bytes thanks to BMO

                                                                    Takes grids in the format {(0, 0): 1, (1, 0): 2, ...}. This format can be generated from the example format using the following utility function:

                                                                    lambda s,e=enumerate:{(x,y):int(n)for y,l in e(s.split('n'))for x,n in e(l.split())}
                                                                    

                                                                    share|improve this answer

                                                                    $endgroup$

                                                                    Python 3, 263 227 bytes

                                                                    def f(m):
                                                                     p={(x,y):[c for i in[-1,1]for c in[(x,y+i),(x+i,y)]]for x,y in m};d={c:0 for c in p if not p[c]}
                                                                     while len(p)-len(d):
                                                                      for c in p:
                                                                       for b in p[c]:
                                                                        if b in d:d[c]=max(d[b]+1,d.get(c,0))
                                                                     return max(d.values())
                                                                    

                                                                    Try it online!

                                                                    -2 bytes thanks to BMO

                                                                    Takes grids in the format {(0, 0): 1, (1, 0): 2, ...}. This format can be generated from the example format using the following utility function:

                                                                    lambda s,e=enumerate:{(x,y):int(n)for y,l in e(s.split('n'))for x,n in e(l.split())}
                                                                    

                                                                    share|improve this answer

                                                                    share|improve this answer

                                                                    share|improve this answer

                                                                    edited Jan 3 at 20:54

                                                                    answered Jan 3 at 18:58

                                                                    wizzwizz4wizzwizz4

                                                                    1,2171035

                                                                    1,2171035

                                                                        draft saved
                                                                        draft discarded

                                                                        If this is an answer to a challenge…

                                                                        • …Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.

                                                                        • …Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
                                                                          Explanations of your answer make it more interesting to read and are very much encouraged.

                                                                        • …Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.

                                                                        More generally…

                                                                        • …Please make sure to answer the question and provide sufficient detail.

                                                                        • …Avoid asking for help, clarification or responding to other answers (use comments instead).

                                                                        draft saved

                                                                        draft discarded

                                                                        StackExchange.ready(
                                                                        function () {
                                                                        StackExchange.openid.initPostLogin(‘.new-post-login’, ‘https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f178326%2flength-of-the-longest-descent%23new-answer’, ‘question_page’);
                                                                        }
                                                                        );

                                                                        Post as a guest

                                                                        Required, but never shown

                                                                        Required, but never shown

                                                                        Required, but never shown

                                                                        Required, but never shown

                                                                        Required, but never shown

                                                                        Required, but never shown

                                                                        Required, but never shown

                                                                        Required, but never shown

                                                                        Required, but never shown

                                                                        Grace Bussell

                                                                        Grace Bussell
                                                                        Grace Bussell.jpg
                                                                        Born (1860-09-23)September 23, 1860

                                                                        near Margaret River, Western Australia, Australia
                                                                        Died October 7, 1935(1935-10-07) (aged 75)

                                                                        Guildford, Western Australia, Australia
                                                                        Resting place Guildford Cemetery
                                                                        Other names Grace Vernon Drake-Brockman
                                                                        Spouse(s) Frederick Slade Drake-Brockman (m.1880–1917; his death)
                                                                        Children 7, including Edmund and Deborah
                                                                        Parent(s) Ellen (née Heppingstone) and Alfred Pickmore Bussell
                                                                        Relatives John Bussell (uncle), John Winthrop Hackett (son-in-law)
                                                                        Awards Royal Humane Society Silver Medal

                                                                        Grace Vernon Drake-Brockman (née Bussell; 1860 – 7 October 1935), commonly referred to as Grace Bussell, was a woman from Western Australia. In 1876, as a 16-year-old, she was involved in the rescue of the SS Georgette, for which she was awarded the Royal Humane Society’s Silver Medal.

                                                                        Contents

                                                                        • 1 Biography
                                                                        • 2 Legacy
                                                                        • 3 Notes
                                                                        • 4 Further reading
                                                                        • 5 External links

                                                                        Biography

                                                                        Grace was born to the well-known and prosperous Bussell family. At age 7, she discovered Wallcliffe cave.

                                                                        Lauded by the press at the time of the rescue, she became known as ‘The Grace Darling of the West’, (after an Englishwoman who had rescued people in similar circumstances). She was awarded a silver medal by the Royal Humane Society,[1] and also a gold watch and chain from the British Government.[2]

                                                                        According to an account in the local Inquirer and Commercial News,

                                                                        The boat swamped, they were all in the water, and in the greatest danger, when, on the top of the steep cliff appeared a young lady on horseback. Those who were present have told me that they did not think that a horse could come down that cliff, but down that dangerous place this young lady rode at speed; there were lives to be saved, and, with the same fearless and chivalrous bravery that urged Grace Darling to peril her life for fellow creations, and gave her a name in all English history thereafter, Grace Bussell rode down that cliff, urged her horse into boiling surf, and out beyond the second line of roaring breakers, till she reached the boat where the women and children were in such peril. Her horse stumbled over the rope and she was nearly lost, but managed to get alongside the boat, and then with as many women and children clinging to her and the horse as possible, she made for the shore and landed them. A man was left on the boat, and he could not get to shore till Miss Bussell sent her black servant on horseback to aid him. So furious was the surf that it took four hours to land 50 people, and every boat engaged was capsised.[3]

                                                                        She married Frederick Slade Drake-Brockman (1857–1917) in 1880;[2] he served as Surveyor General of Western Australia from 1915 to 1917. They had three daughters and four sons, including Edmund (1884–1949), Geoffrey (1885–1977),[4] and Deborah (1887–1965).

                                                                        She died aged 75 in Guildford, Western Australia.[2]

                                                                        Legacy

                                                                        Bussell is commemorated by several places named in her honour. One of these is the coastal hamlet of Gracetown, Western Australia, north of Margaret River. Another is the Western Australian wheatbelt town of Lake Grace.[5] Both of these were named after her by her husband. Additionally, a street in the Canberra suburb of Cook is named after her.

                                                                        Notes

                                                                        1. ^ Geason, Susan. “Australian Heroines”. (synopsis). Retrieved 26 August 2008..mw-parser-output cite.citation{font-style:inherit}.mw-parser-output q{quotes:”””””””‘””‘”}.mw-parser-output code.cs1-code{color:inherit;background:inherit;border:inherit;padding:inherit}.mw-parser-output .cs1-lock-free a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/9px-Lock-green.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-limited a,.mw-parser-output .cs1-lock-registration a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Lock-gray-alt-2.svg/9px-Lock-gray-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-subscription a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Lock-red-alt-2.svg/9px-Lock-red-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration{color:#555}.mw-parser-output .cs1-subscription span,.mw-parser-output .cs1-registration span{border-bottom:1px dotted;cursor:help}.mw-parser-output .cs1-hidden-error{display:none;font-size:100%}.mw-parser-output .cs1-visible-error{font-size:100%}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration,.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left,.mw-parser-output .cs1-kern-wl-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right,.mw-parser-output .cs1-kern-wl-right{padding-right:0.2em}
                                                                        2. ^ abc Obituary, Obituaries Australia, National Centre of Biography, Australian National University
                                                                        3. ^ Inquirer and Commercial News 31 January 1876
                                                                        4. ^ Peter Cowan (1996) ‘Drake-Brockman, Geoffrey (1885–1977)’, Australian Dictionary of Biography, Volume 14, (MUP)
                                                                        5. ^ Landgate – History of Country Town Names

                                                                        Further reading

                                                                        • Stewart, Athol Frederick Ferguson (1946). Australia’s Grace Darling. Perth: Patersons.

                                                                        External links

                                                                        • Works by or about Grace Bussell at Internet Archive
                                                                        • Southwest Life History
                                                                        • Grace Bussell, www.margaretrivervista.com (Contains several errors)
                                                                        • Shipwrecks: SS Georgette, abc.net.au

                                                                        Would it be balanced to allow the darkvision spell to target multiple creatures when cast with higher-level spell slots?

                                                                        The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP

                                                                        8

                                                                        $begingroup$

                                                                        The Darkvision spell, by default, can target only one creature and gains no benefit from upcasting (= using a spell slot higher than the spell’s level).

                                                                        You touch a willing creature to grant it the ability to see in the dark. For the duration, that creature has darkvision out to a range of 60 feet.

                                                                        Since my level 7 moon druid has two party members without darkvision, I asked my DM if he could allow me to cast darkvision at higher levels to target additional creatures; more precisely, one additional target for each spell slot level above 2nd (similar to spells like Charm Person or Hold Person).
                                                                        For example, if cast at 3rd level, I can target two creatures, while casting it at 5th level would allow me to target 4 creatures, and so on.

                                                                        Anyways, he did choose to allow it, and I’ve used it a number of times so far. However, since allowing this spell to be upcast is so intuitive – I was really surprised when I found out it wasn’t possible by RAW – I can’t help but wondering if there are any balancing issues to allowing the upcasting of the spell.

                                                                        To be clear, I’m not asking why the designers didn’t allow upcasting the spell, though the answer to my question might easily overlap with the designers’ reasons.
                                                                        What I want to know is whether or not any balancing issues exist that should prevent me / my DM (I also DM occasionally) from houseruling that it is possible to upcast the spell.

                                                                        share|improve this question

                                                                        $endgroup$

                                                                        • 4

                                                                          $begingroup$
                                                                          I wish every single targer spell could be upcast that way.
                                                                          $endgroup$
                                                                          – András
                                                                          Jan 3 at 17:42

                                                                        • 1

                                                                          $begingroup$
                                                                          @Andras Yeah, it would be nice if 5e didn’t hate buffs as much as it does.
                                                                          $endgroup$
                                                                          – Miniman
                                                                          Jan 3 at 20:52

                                                                        8

                                                                        $begingroup$

                                                                        The Darkvision spell, by default, can target only one creature and gains no benefit from upcasting (= using a spell slot higher than the spell’s level).

                                                                        You touch a willing creature to grant it the ability to see in the dark. For the duration, that creature has darkvision out to a range of 60 feet.

                                                                        Since my level 7 moon druid has two party members without darkvision, I asked my DM if he could allow me to cast darkvision at higher levels to target additional creatures; more precisely, one additional target for each spell slot level above 2nd (similar to spells like Charm Person or Hold Person).
                                                                        For example, if cast at 3rd level, I can target two creatures, while casting it at 5th level would allow me to target 4 creatures, and so on.

                                                                        Anyways, he did choose to allow it, and I’ve used it a number of times so far. However, since allowing this spell to be upcast is so intuitive – I was really surprised when I found out it wasn’t possible by RAW – I can’t help but wondering if there are any balancing issues to allowing the upcasting of the spell.

                                                                        To be clear, I’m not asking why the designers didn’t allow upcasting the spell, though the answer to my question might easily overlap with the designers’ reasons.
                                                                        What I want to know is whether or not any balancing issues exist that should prevent me / my DM (I also DM occasionally) from houseruling that it is possible to upcast the spell.

                                                                        share|improve this question

                                                                        $endgroup$

                                                                        • 4

                                                                          $begingroup$
                                                                          I wish every single targer spell could be upcast that way.
                                                                          $endgroup$
                                                                          – András
                                                                          Jan 3 at 17:42

                                                                        • 1

                                                                          $begingroup$
                                                                          @Andras Yeah, it would be nice if 5e didn’t hate buffs as much as it does.
                                                                          $endgroup$
                                                                          – Miniman
                                                                          Jan 3 at 20:52

                                                                        8

                                                                        8

                                                                        8

                                                                        $begingroup$

                                                                        The Darkvision spell, by default, can target only one creature and gains no benefit from upcasting (= using a spell slot higher than the spell’s level).

                                                                        You touch a willing creature to grant it the ability to see in the dark. For the duration, that creature has darkvision out to a range of 60 feet.

                                                                        Since my level 7 moon druid has two party members without darkvision, I asked my DM if he could allow me to cast darkvision at higher levels to target additional creatures; more precisely, one additional target for each spell slot level above 2nd (similar to spells like Charm Person or Hold Person).
                                                                        For example, if cast at 3rd level, I can target two creatures, while casting it at 5th level would allow me to target 4 creatures, and so on.

                                                                        Anyways, he did choose to allow it, and I’ve used it a number of times so far. However, since allowing this spell to be upcast is so intuitive – I was really surprised when I found out it wasn’t possible by RAW – I can’t help but wondering if there are any balancing issues to allowing the upcasting of the spell.

                                                                        To be clear, I’m not asking why the designers didn’t allow upcasting the spell, though the answer to my question might easily overlap with the designers’ reasons.
                                                                        What I want to know is whether or not any balancing issues exist that should prevent me / my DM (I also DM occasionally) from houseruling that it is possible to upcast the spell.

                                                                        share|improve this question

                                                                        $endgroup$

                                                                        The Darkvision spell, by default, can target only one creature and gains no benefit from upcasting (= using a spell slot higher than the spell’s level).

                                                                        You touch a willing creature to grant it the ability to see in the dark. For the duration, that creature has darkvision out to a range of 60 feet.

                                                                        Since my level 7 moon druid has two party members without darkvision, I asked my DM if he could allow me to cast darkvision at higher levels to target additional creatures; more precisely, one additional target for each spell slot level above 2nd (similar to spells like Charm Person or Hold Person).
                                                                        For example, if cast at 3rd level, I can target two creatures, while casting it at 5th level would allow me to target 4 creatures, and so on.

                                                                        Anyways, he did choose to allow it, and I’ve used it a number of times so far. However, since allowing this spell to be upcast is so intuitive – I was really surprised when I found out it wasn’t possible by RAW – I can’t help but wondering if there are any balancing issues to allowing the upcasting of the spell.

                                                                        To be clear, I’m not asking why the designers didn’t allow upcasting the spell, though the answer to my question might easily overlap with the designers’ reasons.
                                                                        What I want to know is whether or not any balancing issues exist that should prevent me / my DM (I also DM occasionally) from houseruling that it is possible to upcast the spell.

                                                                        dnd-5e spells house-rules vision-and-light spell-slots

                                                                        share|improve this question

                                                                        share|improve this question

                                                                        share|improve this question

                                                                        share|improve this question

                                                                        asked Jan 3 at 17:13

                                                                        PixelMasterPixelMaster

                                                                        9,56113395

                                                                        9,56113395

                                                                        • 4

                                                                          $begingroup$
                                                                          I wish every single targer spell could be upcast that way.
                                                                          $endgroup$
                                                                          – András
                                                                          Jan 3 at 17:42

                                                                        • 1

                                                                          $begingroup$
                                                                          @Andras Yeah, it would be nice if 5e didn’t hate buffs as much as it does.
                                                                          $endgroup$
                                                                          – Miniman
                                                                          Jan 3 at 20:52

                                                                        • 4

                                                                          $begingroup$
                                                                          I wish every single targer spell could be upcast that way.
                                                                          $endgroup$
                                                                          – András
                                                                          Jan 3 at 17:42

                                                                        • 1

                                                                          $begingroup$
                                                                          @Andras Yeah, it would be nice if 5e didn’t hate buffs as much as it does.
                                                                          $endgroup$
                                                                          – Miniman
                                                                          Jan 3 at 20:52

                                                                        4

                                                                        4

                                                                        $begingroup$
                                                                        I wish every single targer spell could be upcast that way.
                                                                        $endgroup$
                                                                        – András
                                                                        Jan 3 at 17:42

                                                                        $begingroup$
                                                                        I wish every single targer spell could be upcast that way.
                                                                        $endgroup$
                                                                        – András
                                                                        Jan 3 at 17:42

                                                                        1

                                                                        1

                                                                        $begingroup$
                                                                        @Andras Yeah, it would be nice if 5e didn’t hate buffs as much as it does.
                                                                        $endgroup$
                                                                        – Miniman
                                                                        Jan 3 at 20:52

                                                                        $begingroup$
                                                                        @Andras Yeah, it would be nice if 5e didn’t hate buffs as much as it does.
                                                                        $endgroup$
                                                                        – Miniman
                                                                        Jan 3 at 20:52

                                                                        2 Answers
                                                                        2

                                                                        active

                                                                        oldest

                                                                        votes

                                                                        15

                                                                        $begingroup$

                                                                        Darkvision is a very situational ability, so the issues caused by having this ability will probably depend on how important darkness is.

                                                                        It’s exceptionally easy to end up with a party where every member has darkvision (both of my current groups are in this boat!), unless the DM places some restriction on darkvision-having races. Because it’s available to so many races by default, and because it requires a spell slot, this is perfectly balanced. If anything, it may be unbalanced against you, as it takes up spell slots.

                                                                        It could easily be very powerful in a campaign like Out of the Abyss, if most of the party didn’t have darkvision, but that’s a unique campaign with a literally very dark setting.

                                                                        Of the races available in the PHB, 6 of the 9 have darkvision as a sense. This is something that is easily available to the majority of players from level one, and therefore, is exceptionally unlikely to create an unbalanced situation.

                                                                        share|improve this answer

                                                                        $endgroup$

                                                                          0

                                                                          $begingroup$

                                                                          I find it best to think about balancing questions by putting the alternatives side-by-side and asking “Is one clearly superior to the other – that is, would I always choose this over that?” If the answer is “yes” then its unbalanced.

                                                                          The follow up question is more subtle – “Are there situations where I would always choose option A and situations where I would always choose option B and rarely or never situations where I would choose neither?” If the answer is “yes” then the solution may be unbalanced because it turns a sometimes useful ability into an always useful ability. It is not necessarily unbalanced because there may be limitations that prevent abuse. For example, spell slots fall into the category of always being useful but they are limited by number of uses.

                                                                          So, lets see how your options stack up:

                                                                          1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                          2. Use 1 3rd level spell slot (out of 3 total at 7th level).

                                                                          To me this is a no brainier – I would always use the 3rd level slot. Therefore, its unbalanced.

                                                                          However, if instead of 1 person per higher level slot you had 1 person for every 2 slots higher the calculation becomes:

                                                                          1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                          2. Use 1 4th level spell slot (out of 1 total at 7th level).

                                                                          No the decision is not so clear – 4th level slots are powerful and I’m giving up my only one but 2 2nd levels are more flexible. Hmmm. Now we’re starting to look balanced. Particularly when you consider that as you go up in levels you get more 3rd level slots (2 at 8th and 3 at 9th+). Having the relative advantages change as you level up is also a good indicator of balance.

                                                                          share|improve this answer

                                                                          $endgroup$

                                                                          • 2

                                                                            $begingroup$
                                                                            I don’t think using a 3rd level slot over two 2nd level is a no-brainer. Depending on your spells, 2nd-levels might be near-worthless, while 3rd-levels aren’t. Also, I don’t think the logic of “if a) is better than b), then a) is overpowered” is correct, at least not when it comes to upcasting spells. Check out the 1st-level Longstrider spell, which gives one creature +10 speed for 1 hour, no concentration. Still, you can upcast it to target +1 creature for every slot level above 1st – basically the same situation as with darkvision, except one spell level lower.
                                                                            $endgroup$
                                                                            – PixelMaster
                                                                            Jan 4 at 1:55

                                                                          Your Answer

                                                                          StackExchange.ifUsing(“editor”, function () {
                                                                          return StackExchange.using(“mathjaxEditing”, function () {
                                                                          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
                                                                          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [[“\$”, “\$”]]);
                                                                          });
                                                                          });
                                                                          }, “mathjax-editing”);

                                                                          StackExchange.ready(function() {
                                                                          var channelOptions = {
                                                                          tags: “”.split(” “),
                                                                          id: “122”
                                                                          };
                                                                          initTagRenderer(“”.split(” “), “”.split(” “), channelOptions);

                                                                          StackExchange.using(“externalEditor”, function() {
                                                                          // Have to fire editor after snippets, if snippets enabled
                                                                          if (StackExchange.settings.snippets.snippetsEnabled) {
                                                                          StackExchange.using(“snippets”, function() {
                                                                          createEditor();
                                                                          });
                                                                          }
                                                                          else {
                                                                          createEditor();
                                                                          }
                                                                          });

                                                                          function createEditor() {
                                                                          StackExchange.prepareEditor({
                                                                          heartbeatType: ‘answer’,
                                                                          autoActivateHeartbeat: false,
                                                                          convertImagesToLinks: false,
                                                                          noModals: true,
                                                                          showLowRepImageUploadWarning: true,
                                                                          reputationToPostImages: null,
                                                                          bindNavPrevention: true,
                                                                          postfix: “”,
                                                                          imageUploader: {
                                                                          brandingHtml: “Powered by u003ca class=”icon-imgur-white” href=”https://imgur.com/”u003eu003c/au003e”,
                                                                          contentPolicyHtml: “User contributions licensed under u003ca href=”https://creativecommons.org/licenses/by-sa/3.0/”u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href=”https://stackoverflow.com/legal/content-policy”u003e(content policy)u003c/au003e”,
                                                                          allowUrls: true
                                                                          },
                                                                          noCode: true, onDemand: true,
                                                                          discardSelector: “.discard-answer”
                                                                          ,immediatelyShowMarkdownHelp:true
                                                                          });

                                                                          }
                                                                          });

                                                                          draft saved
                                                                          draft discarded

                                                                          StackExchange.ready(
                                                                          function () {
                                                                          StackExchange.openid.initPostLogin(‘.new-post-login’, ‘https%3a%2f%2frpg.stackexchange.com%2fquestions%2f138374%2fwould-it-be-balanced-to-allow-the-darkvision-spell-to-target-multiple-creatures%23new-answer’, ‘question_page’);
                                                                          }
                                                                          );

                                                                          Post as a guest

                                                                          Required, but never shown

                                                                          2 Answers
                                                                          2

                                                                          active

                                                                          oldest

                                                                          votes

                                                                          2 Answers
                                                                          2

                                                                          active

                                                                          oldest

                                                                          votes

                                                                          active

                                                                          oldest

                                                                          votes

                                                                          active

                                                                          oldest

                                                                          votes

                                                                          15

                                                                          $begingroup$

                                                                          Darkvision is a very situational ability, so the issues caused by having this ability will probably depend on how important darkness is.

                                                                          It’s exceptionally easy to end up with a party where every member has darkvision (both of my current groups are in this boat!), unless the DM places some restriction on darkvision-having races. Because it’s available to so many races by default, and because it requires a spell slot, this is perfectly balanced. If anything, it may be unbalanced against you, as it takes up spell slots.

                                                                          It could easily be very powerful in a campaign like Out of the Abyss, if most of the party didn’t have darkvision, but that’s a unique campaign with a literally very dark setting.

                                                                          Of the races available in the PHB, 6 of the 9 have darkvision as a sense. This is something that is easily available to the majority of players from level one, and therefore, is exceptionally unlikely to create an unbalanced situation.

                                                                          share|improve this answer

                                                                          $endgroup$

                                                                            15

                                                                            $begingroup$

                                                                            Darkvision is a very situational ability, so the issues caused by having this ability will probably depend on how important darkness is.

                                                                            It’s exceptionally easy to end up with a party where every member has darkvision (both of my current groups are in this boat!), unless the DM places some restriction on darkvision-having races. Because it’s available to so many races by default, and because it requires a spell slot, this is perfectly balanced. If anything, it may be unbalanced against you, as it takes up spell slots.

                                                                            It could easily be very powerful in a campaign like Out of the Abyss, if most of the party didn’t have darkvision, but that’s a unique campaign with a literally very dark setting.

                                                                            Of the races available in the PHB, 6 of the 9 have darkvision as a sense. This is something that is easily available to the majority of players from level one, and therefore, is exceptionally unlikely to create an unbalanced situation.

                                                                            share|improve this answer

                                                                            $endgroup$

                                                                              15

                                                                              15

                                                                              15

                                                                              $begingroup$

                                                                              Darkvision is a very situational ability, so the issues caused by having this ability will probably depend on how important darkness is.

                                                                              It’s exceptionally easy to end up with a party where every member has darkvision (both of my current groups are in this boat!), unless the DM places some restriction on darkvision-having races. Because it’s available to so many races by default, and because it requires a spell slot, this is perfectly balanced. If anything, it may be unbalanced against you, as it takes up spell slots.

                                                                              It could easily be very powerful in a campaign like Out of the Abyss, if most of the party didn’t have darkvision, but that’s a unique campaign with a literally very dark setting.

                                                                              Of the races available in the PHB, 6 of the 9 have darkvision as a sense. This is something that is easily available to the majority of players from level one, and therefore, is exceptionally unlikely to create an unbalanced situation.

                                                                              share|improve this answer

                                                                              $endgroup$

                                                                              Darkvision is a very situational ability, so the issues caused by having this ability will probably depend on how important darkness is.

                                                                              It’s exceptionally easy to end up with a party where every member has darkvision (both of my current groups are in this boat!), unless the DM places some restriction on darkvision-having races. Because it’s available to so many races by default, and because it requires a spell slot, this is perfectly balanced. If anything, it may be unbalanced against you, as it takes up spell slots.

                                                                              It could easily be very powerful in a campaign like Out of the Abyss, if most of the party didn’t have darkvision, but that’s a unique campaign with a literally very dark setting.

                                                                              Of the races available in the PHB, 6 of the 9 have darkvision as a sense. This is something that is easily available to the majority of players from level one, and therefore, is exceptionally unlikely to create an unbalanced situation.

                                                                              share|improve this answer

                                                                              share|improve this answer

                                                                              share|improve this answer

                                                                              answered Jan 3 at 17:58

                                                                              L.S. CooperL.S. Cooper

                                                                              3,7881431

                                                                              3,7881431

                                                                                  0

                                                                                  $begingroup$

                                                                                  I find it best to think about balancing questions by putting the alternatives side-by-side and asking “Is one clearly superior to the other – that is, would I always choose this over that?” If the answer is “yes” then its unbalanced.

                                                                                  The follow up question is more subtle – “Are there situations where I would always choose option A and situations where I would always choose option B and rarely or never situations where I would choose neither?” If the answer is “yes” then the solution may be unbalanced because it turns a sometimes useful ability into an always useful ability. It is not necessarily unbalanced because there may be limitations that prevent abuse. For example, spell slots fall into the category of always being useful but they are limited by number of uses.

                                                                                  So, lets see how your options stack up:

                                                                                  1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                                  2. Use 1 3rd level spell slot (out of 3 total at 7th level).

                                                                                  To me this is a no brainier – I would always use the 3rd level slot. Therefore, its unbalanced.

                                                                                  However, if instead of 1 person per higher level slot you had 1 person for every 2 slots higher the calculation becomes:

                                                                                  1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                                  2. Use 1 4th level spell slot (out of 1 total at 7th level).

                                                                                  No the decision is not so clear – 4th level slots are powerful and I’m giving up my only one but 2 2nd levels are more flexible. Hmmm. Now we’re starting to look balanced. Particularly when you consider that as you go up in levels you get more 3rd level slots (2 at 8th and 3 at 9th+). Having the relative advantages change as you level up is also a good indicator of balance.

                                                                                  share|improve this answer

                                                                                  $endgroup$

                                                                                  • 2

                                                                                    $begingroup$
                                                                                    I don’t think using a 3rd level slot over two 2nd level is a no-brainer. Depending on your spells, 2nd-levels might be near-worthless, while 3rd-levels aren’t. Also, I don’t think the logic of “if a) is better than b), then a) is overpowered” is correct, at least not when it comes to upcasting spells. Check out the 1st-level Longstrider spell, which gives one creature +10 speed for 1 hour, no concentration. Still, you can upcast it to target +1 creature for every slot level above 1st – basically the same situation as with darkvision, except one spell level lower.
                                                                                    $endgroup$
                                                                                    – PixelMaster
                                                                                    Jan 4 at 1:55

                                                                                  0

                                                                                  $begingroup$

                                                                                  I find it best to think about balancing questions by putting the alternatives side-by-side and asking “Is one clearly superior to the other – that is, would I always choose this over that?” If the answer is “yes” then its unbalanced.

                                                                                  The follow up question is more subtle – “Are there situations where I would always choose option A and situations where I would always choose option B and rarely or never situations where I would choose neither?” If the answer is “yes” then the solution may be unbalanced because it turns a sometimes useful ability into an always useful ability. It is not necessarily unbalanced because there may be limitations that prevent abuse. For example, spell slots fall into the category of always being useful but they are limited by number of uses.

                                                                                  So, lets see how your options stack up:

                                                                                  1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                                  2. Use 1 3rd level spell slot (out of 3 total at 7th level).

                                                                                  To me this is a no brainier – I would always use the 3rd level slot. Therefore, its unbalanced.

                                                                                  However, if instead of 1 person per higher level slot you had 1 person for every 2 slots higher the calculation becomes:

                                                                                  1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                                  2. Use 1 4th level spell slot (out of 1 total at 7th level).

                                                                                  No the decision is not so clear – 4th level slots are powerful and I’m giving up my only one but 2 2nd levels are more flexible. Hmmm. Now we’re starting to look balanced. Particularly when you consider that as you go up in levels you get more 3rd level slots (2 at 8th and 3 at 9th+). Having the relative advantages change as you level up is also a good indicator of balance.

                                                                                  share|improve this answer

                                                                                  $endgroup$

                                                                                  • 2

                                                                                    $begingroup$
                                                                                    I don’t think using a 3rd level slot over two 2nd level is a no-brainer. Depending on your spells, 2nd-levels might be near-worthless, while 3rd-levels aren’t. Also, I don’t think the logic of “if a) is better than b), then a) is overpowered” is correct, at least not when it comes to upcasting spells. Check out the 1st-level Longstrider spell, which gives one creature +10 speed for 1 hour, no concentration. Still, you can upcast it to target +1 creature for every slot level above 1st – basically the same situation as with darkvision, except one spell level lower.
                                                                                    $endgroup$
                                                                                    – PixelMaster
                                                                                    Jan 4 at 1:55

                                                                                  0

                                                                                  0

                                                                                  0

                                                                                  $begingroup$

                                                                                  I find it best to think about balancing questions by putting the alternatives side-by-side and asking “Is one clearly superior to the other – that is, would I always choose this over that?” If the answer is “yes” then its unbalanced.

                                                                                  The follow up question is more subtle – “Are there situations where I would always choose option A and situations where I would always choose option B and rarely or never situations where I would choose neither?” If the answer is “yes” then the solution may be unbalanced because it turns a sometimes useful ability into an always useful ability. It is not necessarily unbalanced because there may be limitations that prevent abuse. For example, spell slots fall into the category of always being useful but they are limited by number of uses.

                                                                                  So, lets see how your options stack up:

                                                                                  1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                                  2. Use 1 3rd level spell slot (out of 3 total at 7th level).

                                                                                  To me this is a no brainier – I would always use the 3rd level slot. Therefore, its unbalanced.

                                                                                  However, if instead of 1 person per higher level slot you had 1 person for every 2 slots higher the calculation becomes:

                                                                                  1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                                  2. Use 1 4th level spell slot (out of 1 total at 7th level).

                                                                                  No the decision is not so clear – 4th level slots are powerful and I’m giving up my only one but 2 2nd levels are more flexible. Hmmm. Now we’re starting to look balanced. Particularly when you consider that as you go up in levels you get more 3rd level slots (2 at 8th and 3 at 9th+). Having the relative advantages change as you level up is also a good indicator of balance.

                                                                                  share|improve this answer

                                                                                  $endgroup$

                                                                                  I find it best to think about balancing questions by putting the alternatives side-by-side and asking “Is one clearly superior to the other – that is, would I always choose this over that?” If the answer is “yes” then its unbalanced.

                                                                                  The follow up question is more subtle – “Are there situations where I would always choose option A and situations where I would always choose option B and rarely or never situations where I would choose neither?” If the answer is “yes” then the solution may be unbalanced because it turns a sometimes useful ability into an always useful ability. It is not necessarily unbalanced because there may be limitations that prevent abuse. For example, spell slots fall into the category of always being useful but they are limited by number of uses.

                                                                                  So, lets see how your options stack up:

                                                                                  1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                                  2. Use 1 3rd level spell slot (out of 3 total at 7th level).

                                                                                  To me this is a no brainier – I would always use the 3rd level slot. Therefore, its unbalanced.

                                                                                  However, if instead of 1 person per higher level slot you had 1 person for every 2 slots higher the calculation becomes:

                                                                                  1. Use 2 2nd level spell slots (out of 3 total at 7th level), or
                                                                                  2. Use 1 4th level spell slot (out of 1 total at 7th level).

                                                                                  No the decision is not so clear – 4th level slots are powerful and I’m giving up my only one but 2 2nd levels are more flexible. Hmmm. Now we’re starting to look balanced. Particularly when you consider that as you go up in levels you get more 3rd level slots (2 at 8th and 3 at 9th+). Having the relative advantages change as you level up is also a good indicator of balance.

                                                                                  share|improve this answer

                                                                                  share|improve this answer

                                                                                  share|improve this answer

                                                                                  answered Jan 3 at 23:47

                                                                                  Dale MDale M

                                                                                  103k21267457

                                                                                  103k21267457

                                                                                  • 2

                                                                                    $begingroup$
                                                                                    I don’t think using a 3rd level slot over two 2nd level is a no-brainer. Depending on your spells, 2nd-levels might be near-worthless, while 3rd-levels aren’t. Also, I don’t think the logic of “if a) is better than b), then a) is overpowered” is correct, at least not when it comes to upcasting spells. Check out the 1st-level Longstrider spell, which gives one creature +10 speed for 1 hour, no concentration. Still, you can upcast it to target +1 creature for every slot level above 1st – basically the same situation as with darkvision, except one spell level lower.
                                                                                    $endgroup$
                                                                                    – PixelMaster
                                                                                    Jan 4 at 1:55

                                                                                  • 2

                                                                                    $begingroup$
                                                                                    I don’t think using a 3rd level slot over two 2nd level is a no-brainer. Depending on your spells, 2nd-levels might be near-worthless, while 3rd-levels aren’t. Also, I don’t think the logic of “if a) is better than b), then a) is overpowered” is correct, at least not when it comes to upcasting spells. Check out the 1st-level Longstrider spell, which gives one creature +10 speed for 1 hour, no concentration. Still, you can upcast it to target +1 creature for every slot level above 1st – basically the same situation as with darkvision, except one spell level lower.
                                                                                    $endgroup$
                                                                                    – PixelMaster
                                                                                    Jan 4 at 1:55

                                                                                  2

                                                                                  2

                                                                                  $begingroup$
                                                                                  I don’t think using a 3rd level slot over two 2nd level is a no-brainer. Depending on your spells, 2nd-levels might be near-worthless, while 3rd-levels aren’t. Also, I don’t think the logic of “if a) is better than b), then a) is overpowered” is correct, at least not when it comes to upcasting spells. Check out the 1st-level Longstrider spell, which gives one creature +10 speed for 1 hour, no concentration. Still, you can upcast it to target +1 creature for every slot level above 1st – basically the same situation as with darkvision, except one spell level lower.
                                                                                  $endgroup$
                                                                                  – PixelMaster
                                                                                  Jan 4 at 1:55

                                                                                  $begingroup$
                                                                                  I don’t think using a 3rd level slot over two 2nd level is a no-brainer. Depending on your spells, 2nd-levels might be near-worthless, while 3rd-levels aren’t. Also, I don’t think the logic of “if a) is better than b), then a) is overpowered” is correct, at least not when it comes to upcasting spells. Check out the 1st-level Longstrider spell, which gives one creature +10 speed for 1 hour, no concentration. Still, you can upcast it to target +1 creature for every slot level above 1st – basically the same situation as with darkvision, except one spell level lower.
                                                                                  $endgroup$
                                                                                  – PixelMaster
                                                                                  Jan 4 at 1:55

                                                                                  draft saved
                                                                                  draft discarded

                                                                                  Thanks for contributing an answer to Role-playing Games Stack Exchange!

                                                                                  • Please be sure to answer the question. Provide details and share your research!

                                                                                  But avoid

                                                                                  • Asking for help, clarification, or responding to other answers.
                                                                                  • Making statements based on opinion; back them up with references or personal experience.

                                                                                  Use MathJax to format equations. MathJax reference.

                                                                                  To learn more, see our tips on writing great answers.

                                                                                  draft saved

                                                                                  draft discarded

                                                                                  StackExchange.ready(
                                                                                  function () {
                                                                                  StackExchange.openid.initPostLogin(‘.new-post-login’, ‘https%3a%2f%2frpg.stackexchange.com%2fquestions%2f138374%2fwould-it-be-balanced-to-allow-the-darkvision-spell-to-target-multiple-creatures%23new-answer’, ‘question_page’);
                                                                                  }
                                                                                  );

                                                                                  Post as a guest

                                                                                  Required, but never shown

                                                                                  Required, but never shown

                                                                                  Required, but never shown

                                                                                  Required, but never shown

                                                                                  Required, but never shown

                                                                                  Required, but never shown

                                                                                  Required, but never shown

                                                                                  Required, but never shown

                                                                                  Required, but never shown

                                                                                  Frederick Slade Drake-Brockman

                                                                                  Frederick Slade Drake-Brockman, also known as Frederick Slade Brockman, (9 July 1857 – 11 September 1917) was a Surveyor General and explorer of Western Australia.[1]

                                                                                  Born at Seabrook near Northam in Western Australia, he was the son of Edmund Ralph Brockman, gentleman-farmer, and Elizabeth Deborah née Slade.

                                                                                  He was educated at Bishop Mathew Hale’s[2] school and articled in 1878 to surveyor J. S. Brooking.

                                                                                  On 20 February 1882 he married Grace Bussell, the heroine of the Georgette disaster of 1876. They had three daughters and four sons, including:

                                                                                  • Geoffrey (1885–1977), an engineer,[3]
                                                                                  • Karl (1891-1969), a Rhodes Scholar, soldier and judge
                                                                                  • Edmund (1884-1949), soldier, politician and judge[4]
                                                                                  • Deborah (1887–1965), a mining company director and welfare worker, subsequently Lady Hackett and later Lady Moulden.[5]

                                                                                  In 1901, Drake-Brockman with eleven companions, explored previously uncharted areas in the Kimberley region. Drake-Brockman was appointed Surveyor-General in June 1915.[1]

                                                                                  References

                                                                                  1. ^ ab Birman, Wendy (1981). “Drake-Brockman, Frederick Slade (1857–1917)”. Australian Dictionary of Biography. Canberra: Australian National University. Retrieved 27 June 2012..mw-parser-output cite.citation{font-style:inherit}.mw-parser-output q{quotes:”””””””‘””‘”}.mw-parser-output code.cs1-code{color:inherit;background:inherit;border:inherit;padding:inherit}.mw-parser-output .cs1-lock-free a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/9px-Lock-green.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-limited a,.mw-parser-output .cs1-lock-registration a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Lock-gray-alt-2.svg/9px-Lock-gray-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-subscription a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Lock-red-alt-2.svg/9px-Lock-red-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration{color:#555}.mw-parser-output .cs1-subscription span,.mw-parser-output .cs1-registration span{border-bottom:1px dotted;cursor:help}.mw-parser-output .cs1-hidden-error{display:none;font-size:100%}.mw-parser-output .cs1-visible-error{font-size:100%}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration,.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left,.mw-parser-output .cs1-kern-wl-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right,.mw-parser-output .cs1-kern-wl-right{padding-right:0.2em}
                                                                                  2. ^ A. de Q. Robin, ‘Hale, Mathew Blagden (1811 – 1895)’, Australian Dictionary of Biography, Volume 4, Melbourne University Press, 1972, pp 317-319.
                                                                                  3. ^ Peter Cowan, ‘Drake-Brockman, Geoffrey (1885 – 1977)’, Australian Dictionary of Biography, Volume 14, Melbourne University Press, 1996, pp 34-35.
                                                                                  4. ^ Ian G. Sharp, ‘Drake-Brockman, Edmund Alfred (1884 – 1949)’, Australian Dictionary of Biography, Volume 8, Melbourne University Press, 1981, pp 339-340.
                                                                                  5. ^ Alexandra Hasluck, ‘Hackett, Deborah Vernon (1887 – 1965)’, Australian Dictionary of Biography, Volume 9, Melbourne University Press, 1983, pp 149-150.

                                                                                  Further reading

                                                                                  • Birman, Wendy (1981) ‘Drake-Brockman, Frederick Slade (1857 – 1917)’, Australian Dictionary of Biography, Volume 8, Melbourne University Press, 1981, pp 340–341.
                                                                                  • D. H. Drake-Brockman,(1936) Record of the Brockman and Drake-Brockman Family (priv print, Sussex, 1936)
                                                                                  • G. Drake-Brockman,(1960) The Turning Wheel Perth

                                                                                  Should we use IANA groups 14 (MODP), 25, and 26 (ECP)?

                                                                                  The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP

                                                                                  7

                                                                                  $begingroup$

                                                                                  By looking at SonicWall Knowledge Base article Key exchange (DH) Groups Supported – Site to Site VPN:

                                                                                  It appears that our firewall supports DH group 25, and 26. Almost everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t have DH group 24).

                                                                                  Should we use these groups? I don’t understand how the ID of the DH group could be higher – using the same elliptical curve primitive – but use a 224-bit algorithm compared to our current 521-bit algorithm for DH group 21.

                                                                                  DH group 21 is also “only” a 512 bit algorithm compared to DH group 14, which is a 2048 bit algorithm. However I read that DH group 21 is still better than 14, because it uses elliptical curve.

                                                                                  EDIT: I’ve had a technical response vs a mathematical one below. It’s appreciated, but a technical one helps me understand more given that we’re configuring firewalls. The response is

                                                                                  “This group number is decided or is given by the IANA (Internet Assigned Numbers Authority).

                                                                                  The reason for these lower bit ECP groups to have the higher DH group number is that, the practical implementation (using a software code or a hardware chip) of the key creation and exchange mechanism was only available (or working) for 256, 384, 521 bit sizes. and that’s why they were implemented first (in-order group 19, 20 and 21).

                                                                                  with improvements in technology and the methods with which we write the software code or create hardware chips, it allowed us to have working models for 192 and 224 bit Random ECP DH group and hence these were assigned a DH group number later.

                                                                                  Security wise, the 521 bit Random ECP group (DH Group-21) would still be on a higher side compared to 192 or 224 bit ECP group.”

                                                                                  share|improve this question

                                                                                  $endgroup$

                                                                                  migrated from security.stackexchange.com Jan 3 at 19:03

                                                                                  This question came from our site for information security professionals.

                                                                                  • $begingroup$
                                                                                    My understanding is that the only thing that really matters is the size of the prime (n-bit group). I would normally cite NIST or NSA standards, but with the US government shutdown, none of their websites are available. My intuition is that 224-bits and up are considered secure today, so you might as well go with the 224-bit group as it will have slightly better performance than the larger groups.
                                                                                    $endgroup$
                                                                                    – Mike Ounsworth
                                                                                    Jan 3 at 15:27

                                                                                  • $begingroup$
                                                                                    Do you control the other end of the site-to-site VPN you’re trying to set up? If so, why don’t you use a very complex pre-shared key? e.g.: M@Sup1rS*cr#tFu33yW(llP$@@w0rd!! or better yet, use a cryptographically secure key generator that’s long…
                                                                                    $endgroup$
                                                                                    – thepip3r
                                                                                    Jan 3 at 16:16

                                                                                  • $begingroup$
                                                                                    Thanks @MikeOunsworth for that, though when you go to DH group 21, it’s 521 bit. DH group 25 is 192 bit, and DH group 26 is 224 bit. So a lower DH group might actually be better? DH group 21 is also “only” a 512 bit algortithm vs DH group 14, which is a 2048 bit algortithm, however I read that DH group 21 is still better than 14, because it uses elliptical curve. It just then seems odd that DH group 25, and 26 use a smaller algortithm, but still use the same methodology ie: ellitpical curve.
                                                                                    $endgroup$
                                                                                    – wahmedBW
                                                                                    Jan 3 at 16:39

                                                                                  • $begingroup$
                                                                                    @thepip3r We do have a complex PSK, and it is wholly owned by us, however a) we’d like to be as secure as we can b) We’d need to do this for our third parties anyway.
                                                                                    $endgroup$
                                                                                    – wahmedBW
                                                                                    Jan 3 at 16:40

                                                                                  • 1

                                                                                    $begingroup$
                                                                                    @MaartenBodewes: actually, they use the ephemeral DH plus other public information; however, in IKEv2, they do not stir in the preshared keys. In IKEv1, they did (when doing preshared key authentication), but that meant (among other things) they had to change how they computed keys depending on the authentication method
                                                                                    $endgroup$
                                                                                    – poncho
                                                                                    Jan 3 at 19:38

                                                                                  7

                                                                                  $begingroup$

                                                                                  By looking at SonicWall Knowledge Base article Key exchange (DH) Groups Supported – Site to Site VPN:

                                                                                  It appears that our firewall supports DH group 25, and 26. Almost everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t have DH group 24).

                                                                                  Should we use these groups? I don’t understand how the ID of the DH group could be higher – using the same elliptical curve primitive – but use a 224-bit algorithm compared to our current 521-bit algorithm for DH group 21.

                                                                                  DH group 21 is also “only” a 512 bit algorithm compared to DH group 14, which is a 2048 bit algorithm. However I read that DH group 21 is still better than 14, because it uses elliptical curve.

                                                                                  EDIT: I’ve had a technical response vs a mathematical one below. It’s appreciated, but a technical one helps me understand more given that we’re configuring firewalls. The response is

                                                                                  “This group number is decided or is given by the IANA (Internet Assigned Numbers Authority).

                                                                                  The reason for these lower bit ECP groups to have the higher DH group number is that, the practical implementation (using a software code or a hardware chip) of the key creation and exchange mechanism was only available (or working) for 256, 384, 521 bit sizes. and that’s why they were implemented first (in-order group 19, 20 and 21).

                                                                                  with improvements in technology and the methods with which we write the software code or create hardware chips, it allowed us to have working models for 192 and 224 bit Random ECP DH group and hence these were assigned a DH group number later.

                                                                                  Security wise, the 521 bit Random ECP group (DH Group-21) would still be on a higher side compared to 192 or 224 bit ECP group.”

                                                                                  share|improve this question

                                                                                  $endgroup$

                                                                                  migrated from security.stackexchange.com Jan 3 at 19:03

                                                                                  This question came from our site for information security professionals.

                                                                                  • $begingroup$
                                                                                    My understanding is that the only thing that really matters is the size of the prime (n-bit group). I would normally cite NIST or NSA standards, but with the US government shutdown, none of their websites are available. My intuition is that 224-bits and up are considered secure today, so you might as well go with the 224-bit group as it will have slightly better performance than the larger groups.
                                                                                    $endgroup$
                                                                                    – Mike Ounsworth
                                                                                    Jan 3 at 15:27

                                                                                  • $begingroup$
                                                                                    Do you control the other end of the site-to-site VPN you’re trying to set up? If so, why don’t you use a very complex pre-shared key? e.g.: M@Sup1rS*cr#tFu33yW(llP$@@w0rd!! or better yet, use a cryptographically secure key generator that’s long…
                                                                                    $endgroup$
                                                                                    – thepip3r
                                                                                    Jan 3 at 16:16

                                                                                  • $begingroup$
                                                                                    Thanks @MikeOunsworth for that, though when you go to DH group 21, it’s 521 bit. DH group 25 is 192 bit, and DH group 26 is 224 bit. So a lower DH group might actually be better? DH group 21 is also “only” a 512 bit algortithm vs DH group 14, which is a 2048 bit algortithm, however I read that DH group 21 is still better than 14, because it uses elliptical curve. It just then seems odd that DH group 25, and 26 use a smaller algortithm, but still use the same methodology ie: ellitpical curve.
                                                                                    $endgroup$
                                                                                    – wahmedBW
                                                                                    Jan 3 at 16:39

                                                                                  • $begingroup$
                                                                                    @thepip3r We do have a complex PSK, and it is wholly owned by us, however a) we’d like to be as secure as we can b) We’d need to do this for our third parties anyway.
                                                                                    $endgroup$
                                                                                    – wahmedBW
                                                                                    Jan 3 at 16:40

                                                                                  • 1

                                                                                    $begingroup$
                                                                                    @MaartenBodewes: actually, they use the ephemeral DH plus other public information; however, in IKEv2, they do not stir in the preshared keys. In IKEv1, they did (when doing preshared key authentication), but that meant (among other things) they had to change how they computed keys depending on the authentication method
                                                                                    $endgroup$
                                                                                    – poncho
                                                                                    Jan 3 at 19:38

                                                                                  7

                                                                                  7

                                                                                  7

                                                                                  0

                                                                                  $begingroup$

                                                                                  By looking at SonicWall Knowledge Base article Key exchange (DH) Groups Supported – Site to Site VPN:

                                                                                  It appears that our firewall supports DH group 25, and 26. Almost everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t have DH group 24).

                                                                                  Should we use these groups? I don’t understand how the ID of the DH group could be higher – using the same elliptical curve primitive – but use a 224-bit algorithm compared to our current 521-bit algorithm for DH group 21.

                                                                                  DH group 21 is also “only” a 512 bit algorithm compared to DH group 14, which is a 2048 bit algorithm. However I read that DH group 21 is still better than 14, because it uses elliptical curve.

                                                                                  EDIT: I’ve had a technical response vs a mathematical one below. It’s appreciated, but a technical one helps me understand more given that we’re configuring firewalls. The response is

                                                                                  “This group number is decided or is given by the IANA (Internet Assigned Numbers Authority).

                                                                                  The reason for these lower bit ECP groups to have the higher DH group number is that, the practical implementation (using a software code or a hardware chip) of the key creation and exchange mechanism was only available (or working) for 256, 384, 521 bit sizes. and that’s why they were implemented first (in-order group 19, 20 and 21).

                                                                                  with improvements in technology and the methods with which we write the software code or create hardware chips, it allowed us to have working models for 192 and 224 bit Random ECP DH group and hence these were assigned a DH group number later.

                                                                                  Security wise, the 521 bit Random ECP group (DH Group-21) would still be on a higher side compared to 192 or 224 bit ECP group.”

                                                                                  share|improve this question

                                                                                  $endgroup$

                                                                                  By looking at SonicWall Knowledge Base article Key exchange (DH) Groups Supported – Site to Site VPN:

                                                                                  It appears that our firewall supports DH group 25, and 26. Almost everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t have DH group 24).

                                                                                  Should we use these groups? I don’t understand how the ID of the DH group could be higher – using the same elliptical curve primitive – but use a 224-bit algorithm compared to our current 521-bit algorithm for DH group 21.

                                                                                  DH group 21 is also “only” a 512 bit algorithm compared to DH group 14, which is a 2048 bit algorithm. However I read that DH group 21 is still better than 14, because it uses elliptical curve.

                                                                                  EDIT: I’ve had a technical response vs a mathematical one below. It’s appreciated, but a technical one helps me understand more given that we’re configuring firewalls. The response is

                                                                                  “This group number is decided or is given by the IANA (Internet Assigned Numbers Authority).

                                                                                  The reason for these lower bit ECP groups to have the higher DH group number is that, the practical implementation (using a software code or a hardware chip) of the key creation and exchange mechanism was only available (or working) for 256, 384, 521 bit sizes. and that’s why they were implemented first (in-order group 19, 20 and 21).

                                                                                  with improvements in technology and the methods with which we write the software code or create hardware chips, it allowed us to have working models for 192 and 224 bit Random ECP DH group and hence these were assigned a DH group number later.

                                                                                  Security wise, the 521 bit Random ECP group (DH Group-21) would still be on a higher side compared to 192 or 224 bit ECP group.”

                                                                                  elliptic-curves diffie-hellman key-exchange finite-field

                                                                                  share|improve this question

                                                                                  share|improve this question

                                                                                  share|improve this question

                                                                                  share|improve this question

                                                                                  edited Jan 14 at 9:15

                                                                                  wahmedBW

                                                                                  asked Jan 3 at 14:10

                                                                                  wahmedBWwahmedBW

                                                                                  384

                                                                                  384

                                                                                  migrated from security.stackexchange.com Jan 3 at 19:03

                                                                                  This question came from our site for information security professionals.

                                                                                  migrated from security.stackexchange.com Jan 3 at 19:03

                                                                                  This question came from our site for information security professionals.

                                                                                  • $begingroup$
                                                                                    My understanding is that the only thing that really matters is the size of the prime (n-bit group). I would normally cite NIST or NSA standards, but with the US government shutdown, none of their websites are available. My intuition is that 224-bits and up are considered secure today, so you might as well go with the 224-bit group as it will have slightly better performance than the larger groups.
                                                                                    $endgroup$
                                                                                    – Mike Ounsworth
                                                                                    Jan 3 at 15:27

                                                                                  • $begingroup$
                                                                                    Do you control the other end of the site-to-site VPN you’re trying to set up? If so, why don’t you use a very complex pre-shared key? e.g.: M@Sup1rS*cr#tFu33yW(llP$@@w0rd!! or better yet, use a cryptographically secure key generator that’s long…
                                                                                    $endgroup$
                                                                                    – thepip3r
                                                                                    Jan 3 at 16:16

                                                                                  • $begingroup$
                                                                                    Thanks @MikeOunsworth for that, though when you go to DH group 21, it’s 521 bit. DH group 25 is 192 bit, and DH group 26 is 224 bit. So a lower DH group might actually be better? DH group 21 is also “only” a 512 bit algortithm vs DH group 14, which is a 2048 bit algortithm, however I read that DH group 21 is still better than 14, because it uses elliptical curve. It just then seems odd that DH group 25, and 26 use a smaller algortithm, but still use the same methodology ie: ellitpical curve.
                                                                                    $endgroup$
                                                                                    – wahmedBW
                                                                                    Jan 3 at 16:39

                                                                                  • $begingroup$
                                                                                    @thepip3r We do have a complex PSK, and it is wholly owned by us, however a) we’d like to be as secure as we can b) We’d need to do this for our third parties anyway.
                                                                                    $endgroup$
                                                                                    – wahmedBW
                                                                                    Jan 3 at 16:40

                                                                                  • 1

                                                                                    $begingroup$
                                                                                    @MaartenBodewes: actually, they use the ephemeral DH plus other public information; however, in IKEv2, they do not stir in the preshared keys. In IKEv1, they did (when doing preshared key authentication), but that meant (among other things) they had to change how they computed keys depending on the authentication method
                                                                                    $endgroup$
                                                                                    – poncho
                                                                                    Jan 3 at 19:38

                                                                                  • $begingroup$
                                                                                    My understanding is that the only thing that really matters is the size of the prime (n-bit group). I would normally cite NIST or NSA standards, but with the US government shutdown, none of their websites are available. My intuition is that 224-bits and up are considered secure today, so you might as well go with the 224-bit group as it will have slightly better performance than the larger groups.
                                                                                    $endgroup$
                                                                                    – Mike Ounsworth
                                                                                    Jan 3 at 15:27

                                                                                  • $begingroup$
                                                                                    Do you control the other end of the site-to-site VPN you’re trying to set up? If so, why don’t you use a very complex pre-shared key? e.g.: M@Sup1rS*cr#tFu33yW(llP$@@w0rd!! or better yet, use a cryptographically secure key generator that’s long…
                                                                                    $endgroup$
                                                                                    – thepip3r
                                                                                    Jan 3 at 16:16

                                                                                  • $begingroup$
                                                                                    Thanks @MikeOunsworth for that, though when you go to DH group 21, it’s 521 bit. DH group 25 is 192 bit, and DH group 26 is 224 bit. So a lower DH group might actually be better? DH group 21 is also “only” a 512 bit algortithm vs DH group 14, which is a 2048 bit algortithm, however I read that DH group 21 is still better than 14, because it uses elliptical curve. It just then seems odd that DH group 25, and 26 use a smaller algortithm, but still use the same methodology ie: ellitpical curve.
                                                                                    $endgroup$
                                                                                    – wahmedBW
                                                                                    Jan 3 at 16:39

                                                                                  • $begingroup$
                                                                                    @thepip3r We do have a complex PSK, and it is wholly owned by us, however a) we’d like to be as secure as we can b) We’d need to do this for our third parties anyway.
                                                                                    $endgroup$
                                                                                    – wahmedBW
                                                                                    Jan 3 at 16:40

                                                                                  • 1

                                                                                    $begingroup$
                                                                                    @MaartenBodewes: actually, they use the ephemeral DH plus other public information; however, in IKEv2, they do not stir in the preshared keys. In IKEv1, they did (when doing preshared key authentication), but that meant (among other things) they had to change how they computed keys depending on the authentication method
                                                                                    $endgroup$
                                                                                    – poncho
                                                                                    Jan 3 at 19:38

                                                                                  $begingroup$
                                                                                  My understanding is that the only thing that really matters is the size of the prime (n-bit group). I would normally cite NIST or NSA standards, but with the US government shutdown, none of their websites are available. My intuition is that 224-bits and up are considered secure today, so you might as well go with the 224-bit group as it will have slightly better performance than the larger groups.
                                                                                  $endgroup$
                                                                                  – Mike Ounsworth
                                                                                  Jan 3 at 15:27

                                                                                  $begingroup$
                                                                                  My understanding is that the only thing that really matters is the size of the prime (n-bit group). I would normally cite NIST or NSA standards, but with the US government shutdown, none of their websites are available. My intuition is that 224-bits and up are considered secure today, so you might as well go with the 224-bit group as it will have slightly better performance than the larger groups.
                                                                                  $endgroup$
                                                                                  – Mike Ounsworth
                                                                                  Jan 3 at 15:27

                                                                                  $begingroup$
                                                                                  Do you control the other end of the site-to-site VPN you’re trying to set up? If so, why don’t you use a very complex pre-shared key? e.g.: M@Sup1rS*cr#tFu33yW(llP$@@w0rd!! or better yet, use a cryptographically secure key generator that’s long…
                                                                                  $endgroup$
                                                                                  – thepip3r
                                                                                  Jan 3 at 16:16

                                                                                  $begingroup$
                                                                                  Do you control the other end of the site-to-site VPN you’re trying to set up? If so, why don’t you use a very complex pre-shared key? e.g.: M@Sup1rS*cr#tFu33yW(llP$@@w0rd!! or better yet, use a cryptographically secure key generator that’s long…
                                                                                  $endgroup$
                                                                                  – thepip3r
                                                                                  Jan 3 at 16:16

                                                                                  $begingroup$
                                                                                  Thanks @MikeOunsworth for that, though when you go to DH group 21, it’s 521 bit. DH group 25 is 192 bit, and DH group 26 is 224 bit. So a lower DH group might actually be better? DH group 21 is also “only” a 512 bit algortithm vs DH group 14, which is a 2048 bit algortithm, however I read that DH group 21 is still better than 14, because it uses elliptical curve. It just then seems odd that DH group 25, and 26 use a smaller algortithm, but still use the same methodology ie: ellitpical curve.
                                                                                  $endgroup$
                                                                                  – wahmedBW
                                                                                  Jan 3 at 16:39

                                                                                  $begingroup$
                                                                                  Thanks @MikeOunsworth for that, though when you go to DH group 21, it’s 521 bit. DH group 25 is 192 bit, and DH group 26 is 224 bit. So a lower DH group might actually be better? DH group 21 is also “only” a 512 bit algortithm vs DH group 14, which is a 2048 bit algortithm, however I read that DH group 21 is still better than 14, because it uses elliptical curve. It just then seems odd that DH group 25, and 26 use a smaller algortithm, but still use the same methodology ie: ellitpical curve.
                                                                                  $endgroup$
                                                                                  – wahmedBW
                                                                                  Jan 3 at 16:39

                                                                                  $begingroup$
                                                                                  @thepip3r We do have a complex PSK, and it is wholly owned by us, however a) we’d like to be as secure as we can b) We’d need to do this for our third parties anyway.
                                                                                  $endgroup$
                                                                                  – wahmedBW
                                                                                  Jan 3 at 16:40

                                                                                  $begingroup$
                                                                                  @thepip3r We do have a complex PSK, and it is wholly owned by us, however a) we’d like to be as secure as we can b) We’d need to do this for our third parties anyway.
                                                                                  $endgroup$
                                                                                  – wahmedBW
                                                                                  Jan 3 at 16:40

                                                                                  1

                                                                                  1

                                                                                  $begingroup$
                                                                                  @MaartenBodewes: actually, they use the ephemeral DH plus other public information; however, in IKEv2, they do not stir in the preshared keys. In IKEv1, they did (when doing preshared key authentication), but that meant (among other things) they had to change how they computed keys depending on the authentication method
                                                                                  $endgroup$
                                                                                  – poncho
                                                                                  Jan 3 at 19:38

                                                                                  $begingroup$
                                                                                  @MaartenBodewes: actually, they use the ephemeral DH plus other public information; however, in IKEv2, they do not stir in the preshared keys. In IKEv1, they did (when doing preshared key authentication), but that meant (among other things) they had to change how they computed keys depending on the authentication method
                                                                                  $endgroup$
                                                                                  – poncho
                                                                                  Jan 3 at 19:38

                                                                                  2 Answers
                                                                                  2

                                                                                  active

                                                                                  oldest

                                                                                  votes

                                                                                  8

                                                                                  $begingroup$

                                                                                  It appears that our firewall supports DH group 25, and 26. Almost
                                                                                  everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t
                                                                                  have DH group 24).

                                                                                  Should we use these groups?

                                                                                  NO, stick to groups 19-21 if possible!


                                                                                  According to the linked resource, DH group 25 is a prime-based 192-bit elliptic curve and group 26 is a prime-based 224-bit elliptic curve. These provide a security level of 96 and 112-bit respectively, that is the best known attack will require about $2^{96}$ or $2^{112}$ curve operations. I suppose these curves were standardized as enough people complained they can’t computationally or by bandwidth or storage afford to use group 19 and the probably did so after 19-21 were standardized.

                                                                                  Now compare this to the groups 19, 20 and 21 which use 256-, 384- and 512- bit elliptic curves which respectively offer 128, 192 and 256-bit security. This is much better at a minor cost of performance. If you really can’t afford to use these groups for performance reasons, then the 224-bit group should be fine, as its security is comparable to 2048-bit classic DH / RSA and the 192-bit group is risky as its security could be broken by a sufficiently determined attacker with sufficient funding, usually this is attributed to nation-state attackers.

                                                                                  DH group 21 is also “only” a 512 bit algorithm compared to DH group
                                                                                  14, which is a 2048 bit algorithm. However I read that DH group 21 is
                                                                                  still better than 14, because it uses elliptical curve.

                                                                                  Group 14 uses classic finite-field diffie-hellman, i.e. $g^xbmod p$ for a 2048-bit prime $p$. Because this operation exposes so much structure, there are attacks that are more efficient than the generic ones, which is all that works against elliptic curves. These attacks are so good, that a 2048-bit prime modulus for DH has roughly a 112-bit security level, which roughly corresponds to a 224-bit elliptic curve, e.g. group 26.

                                                                                  Also note that due to these more scalable attacks, group 1 is actually breakable, even by academics and group 2 which has a 80-bit security level due to its 1024-bit modulus has a decent chance of being breakable by a determined attack with sufficient funding. Also due to the nature of these attacks, it is sufficient if the attacker once does one big pre-computation for the parameter set and can then break individual DH instances very easily, think 1 week of pre-computation to solve each instance in 90 seconds afterwards.

                                                                                  share|improve this answer

                                                                                  $endgroup$

                                                                                  • 1

                                                                                    $begingroup$
                                                                                    I think this is a perfect technical explanation. I might add that the group is indicated by a group ID. The ID is just a unique number, it doesn’t signify any kind of order or priority. If it did signify a security level of some kinds then the groups 25 and 26 should certainly not have been added.
                                                                                    $endgroup$
                                                                                    – Maarten Bodewes
                                                                                    Jan 9 at 14:23

                                                                                  4

                                                                                  $begingroup$

                                                                                  Note: I am not familiar with each of the named DH groups (“group 21”, “group 25”, etc) but to my knowledge none of them are broken, so this answer assumes that all groups of the same bit-strength have equivalent security.

                                                                                  DH vs ECDH

                                                                                  Traditional Diffie-Hellman (DH) is based on reversing multiplications / exponents on very large numbers (formally called the Discrete Logarithm problem). This is where you see group sizes like 2048-bit.

                                                                                  Elliptic Curve Diffie-Hellman (ECDH) is based on the mathematical problem of point multiplication on elliptic curves. This is where you see group sizes like 224-bit. Because of the added complexity of doing multiplications on elliptic curves rather than straight integers, ECDH can get the same security using much smaller numbers.

                                                                                  Here is a comparison of security levels:

                                                                                  Table comparing security levels of DH and ECDH

                                                                                  From that table, 2048-bit DH is the same security level as 224-bit ECDH, and was estimated to be ~112 bits of security whenever NIST put together that table. So according to that, you could get away with a 2048/224 bit DH/ECDH group, but 3072/256 bit would be more conservative.

                                                                                  Pros / Cons

                                                                                  For the same security level (say DH 2048 vs ECDH 224) the ECDH will get you better performance (faster, less server load, etc) simply because the numbers to multiply are smaller. So if you have the choice, go for an ECDH group, and go for the smallest one that meets your security needs — if you are doing “normal” e-commerce type things, then a 256-bit ECDH group will be more than enough.

                                                                                  share|improve this answer

                                                                                  $endgroup$

                                                                                    Your Answer

                                                                                    StackExchange.ifUsing(“editor”, function () {
                                                                                    return StackExchange.using(“mathjaxEditing”, function () {
                                                                                    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
                                                                                    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [[“$”, “$”], [“\\(“,”\\)”]]);
                                                                                    });
                                                                                    });
                                                                                    }, “mathjax-editing”);

                                                                                    StackExchange.ready(function() {
                                                                                    var channelOptions = {
                                                                                    tags: “”.split(” “),
                                                                                    id: “281”
                                                                                    };
                                                                                    initTagRenderer(“”.split(” “), “”.split(” “), channelOptions);

                                                                                    StackExchange.using(“externalEditor”, function() {
                                                                                    // Have to fire editor after snippets, if snippets enabled
                                                                                    if (StackExchange.settings.snippets.snippetsEnabled) {
                                                                                    StackExchange.using(“snippets”, function() {
                                                                                    createEditor();
                                                                                    });
                                                                                    }
                                                                                    else {
                                                                                    createEditor();
                                                                                    }
                                                                                    });

                                                                                    function createEditor() {
                                                                                    StackExchange.prepareEditor({
                                                                                    heartbeatType: ‘answer’,
                                                                                    autoActivateHeartbeat: false,
                                                                                    convertImagesToLinks: false,
                                                                                    noModals: true,
                                                                                    showLowRepImageUploadWarning: true,
                                                                                    reputationToPostImages: null,
                                                                                    bindNavPrevention: true,
                                                                                    postfix: “”,
                                                                                    imageUploader: {
                                                                                    brandingHtml: “Powered by u003ca class=”icon-imgur-white” href=”https://imgur.com/”u003eu003c/au003e”,
                                                                                    contentPolicyHtml: “User contributions licensed under u003ca href=”https://creativecommons.org/licenses/by-sa/3.0/”u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href=”https://stackoverflow.com/legal/content-policy”u003e(content policy)u003c/au003e”,
                                                                                    allowUrls: true
                                                                                    },
                                                                                    noCode: true, onDemand: true,
                                                                                    discardSelector: “.discard-answer”
                                                                                    ,immediatelyShowMarkdownHelp:true
                                                                                    });

                                                                                    }
                                                                                    });

                                                                                    draft saved
                                                                                    draft discarded

                                                                                    StackExchange.ready(
                                                                                    function () {
                                                                                    StackExchange.openid.initPostLogin(‘.new-post-login’, ‘https%3a%2f%2fcrypto.stackexchange.com%2fquestions%2f66249%2fshould-we-use-iana-groups-14-modp-25-and-26-ecp%23new-answer’, ‘question_page’);
                                                                                    }
                                                                                    );

                                                                                    Post as a guest

                                                                                    Required, but never shown

                                                                                    2 Answers
                                                                                    2

                                                                                    active

                                                                                    oldest

                                                                                    votes

                                                                                    2 Answers
                                                                                    2

                                                                                    active

                                                                                    oldest

                                                                                    votes

                                                                                    active

                                                                                    oldest

                                                                                    votes

                                                                                    active

                                                                                    oldest

                                                                                    votes

                                                                                    8

                                                                                    $begingroup$

                                                                                    It appears that our firewall supports DH group 25, and 26. Almost
                                                                                    everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t
                                                                                    have DH group 24).

                                                                                    Should we use these groups?

                                                                                    NO, stick to groups 19-21 if possible!


                                                                                    According to the linked resource, DH group 25 is a prime-based 192-bit elliptic curve and group 26 is a prime-based 224-bit elliptic curve. These provide a security level of 96 and 112-bit respectively, that is the best known attack will require about $2^{96}$ or $2^{112}$ curve operations. I suppose these curves were standardized as enough people complained they can’t computationally or by bandwidth or storage afford to use group 19 and the probably did so after 19-21 were standardized.

                                                                                    Now compare this to the groups 19, 20 and 21 which use 256-, 384- and 512- bit elliptic curves which respectively offer 128, 192 and 256-bit security. This is much better at a minor cost of performance. If you really can’t afford to use these groups for performance reasons, then the 224-bit group should be fine, as its security is comparable to 2048-bit classic DH / RSA and the 192-bit group is risky as its security could be broken by a sufficiently determined attacker with sufficient funding, usually this is attributed to nation-state attackers.

                                                                                    DH group 21 is also “only” a 512 bit algorithm compared to DH group
                                                                                    14, which is a 2048 bit algorithm. However I read that DH group 21 is
                                                                                    still better than 14, because it uses elliptical curve.

                                                                                    Group 14 uses classic finite-field diffie-hellman, i.e. $g^xbmod p$ for a 2048-bit prime $p$. Because this operation exposes so much structure, there are attacks that are more efficient than the generic ones, which is all that works against elliptic curves. These attacks are so good, that a 2048-bit prime modulus for DH has roughly a 112-bit security level, which roughly corresponds to a 224-bit elliptic curve, e.g. group 26.

                                                                                    Also note that due to these more scalable attacks, group 1 is actually breakable, even by academics and group 2 which has a 80-bit security level due to its 1024-bit modulus has a decent chance of being breakable by a determined attack with sufficient funding. Also due to the nature of these attacks, it is sufficient if the attacker once does one big pre-computation for the parameter set and can then break individual DH instances very easily, think 1 week of pre-computation to solve each instance in 90 seconds afterwards.

                                                                                    share|improve this answer

                                                                                    $endgroup$

                                                                                    • 1

                                                                                      $begingroup$
                                                                                      I think this is a perfect technical explanation. I might add that the group is indicated by a group ID. The ID is just a unique number, it doesn’t signify any kind of order or priority. If it did signify a security level of some kinds then the groups 25 and 26 should certainly not have been added.
                                                                                      $endgroup$
                                                                                      – Maarten Bodewes
                                                                                      Jan 9 at 14:23

                                                                                    8

                                                                                    $begingroup$

                                                                                    It appears that our firewall supports DH group 25, and 26. Almost
                                                                                    everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t
                                                                                    have DH group 24).

                                                                                    Should we use these groups?

                                                                                    NO, stick to groups 19-21 if possible!


                                                                                    According to the linked resource, DH group 25 is a prime-based 192-bit elliptic curve and group 26 is a prime-based 224-bit elliptic curve. These provide a security level of 96 and 112-bit respectively, that is the best known attack will require about $2^{96}$ or $2^{112}$ curve operations. I suppose these curves were standardized as enough people complained they can’t computationally or by bandwidth or storage afford to use group 19 and the probably did so after 19-21 were standardized.

                                                                                    Now compare this to the groups 19, 20 and 21 which use 256-, 384- and 512- bit elliptic curves which respectively offer 128, 192 and 256-bit security. This is much better at a minor cost of performance. If you really can’t afford to use these groups for performance reasons, then the 224-bit group should be fine, as its security is comparable to 2048-bit classic DH / RSA and the 192-bit group is risky as its security could be broken by a sufficiently determined attacker with sufficient funding, usually this is attributed to nation-state attackers.

                                                                                    DH group 21 is also “only” a 512 bit algorithm compared to DH group
                                                                                    14, which is a 2048 bit algorithm. However I read that DH group 21 is
                                                                                    still better than 14, because it uses elliptical curve.

                                                                                    Group 14 uses classic finite-field diffie-hellman, i.e. $g^xbmod p$ for a 2048-bit prime $p$. Because this operation exposes so much structure, there are attacks that are more efficient than the generic ones, which is all that works against elliptic curves. These attacks are so good, that a 2048-bit prime modulus for DH has roughly a 112-bit security level, which roughly corresponds to a 224-bit elliptic curve, e.g. group 26.

                                                                                    Also note that due to these more scalable attacks, group 1 is actually breakable, even by academics and group 2 which has a 80-bit security level due to its 1024-bit modulus has a decent chance of being breakable by a determined attack with sufficient funding. Also due to the nature of these attacks, it is sufficient if the attacker once does one big pre-computation for the parameter set and can then break individual DH instances very easily, think 1 week of pre-computation to solve each instance in 90 seconds afterwards.

                                                                                    share|improve this answer

                                                                                    $endgroup$

                                                                                    • 1

                                                                                      $begingroup$
                                                                                      I think this is a perfect technical explanation. I might add that the group is indicated by a group ID. The ID is just a unique number, it doesn’t signify any kind of order or priority. If it did signify a security level of some kinds then the groups 25 and 26 should certainly not have been added.
                                                                                      $endgroup$
                                                                                      – Maarten Bodewes
                                                                                      Jan 9 at 14:23

                                                                                    8

                                                                                    8

                                                                                    8

                                                                                    $begingroup$

                                                                                    It appears that our firewall supports DH group 25, and 26. Almost
                                                                                    everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t
                                                                                    have DH group 24).

                                                                                    Should we use these groups?

                                                                                    NO, stick to groups 19-21 if possible!


                                                                                    According to the linked resource, DH group 25 is a prime-based 192-bit elliptic curve and group 26 is a prime-based 224-bit elliptic curve. These provide a security level of 96 and 112-bit respectively, that is the best known attack will require about $2^{96}$ or $2^{112}$ curve operations. I suppose these curves were standardized as enough people complained they can’t computationally or by bandwidth or storage afford to use group 19 and the probably did so after 19-21 were standardized.

                                                                                    Now compare this to the groups 19, 20 and 21 which use 256-, 384- and 512- bit elliptic curves which respectively offer 128, 192 and 256-bit security. This is much better at a minor cost of performance. If you really can’t afford to use these groups for performance reasons, then the 224-bit group should be fine, as its security is comparable to 2048-bit classic DH / RSA and the 192-bit group is risky as its security could be broken by a sufficiently determined attacker with sufficient funding, usually this is attributed to nation-state attackers.

                                                                                    DH group 21 is also “only” a 512 bit algorithm compared to DH group
                                                                                    14, which is a 2048 bit algorithm. However I read that DH group 21 is
                                                                                    still better than 14, because it uses elliptical curve.

                                                                                    Group 14 uses classic finite-field diffie-hellman, i.e. $g^xbmod p$ for a 2048-bit prime $p$. Because this operation exposes so much structure, there are attacks that are more efficient than the generic ones, which is all that works against elliptic curves. These attacks are so good, that a 2048-bit prime modulus for DH has roughly a 112-bit security level, which roughly corresponds to a 224-bit elliptic curve, e.g. group 26.

                                                                                    Also note that due to these more scalable attacks, group 1 is actually breakable, even by academics and group 2 which has a 80-bit security level due to its 1024-bit modulus has a decent chance of being breakable by a determined attack with sufficient funding. Also due to the nature of these attacks, it is sufficient if the attacker once does one big pre-computation for the parameter set and can then break individual DH instances very easily, think 1 week of pre-computation to solve each instance in 90 seconds afterwards.

                                                                                    share|improve this answer

                                                                                    $endgroup$

                                                                                    It appears that our firewall supports DH group 25, and 26. Almost
                                                                                    everywhere I’ve seen, they’ve recommended DH group 20-24 (we don’t
                                                                                    have DH group 24).

                                                                                    Should we use these groups?

                                                                                    NO, stick to groups 19-21 if possible!


                                                                                    According to the linked resource, DH group 25 is a prime-based 192-bit elliptic curve and group 26 is a prime-based 224-bit elliptic curve. These provide a security level of 96 and 112-bit respectively, that is the best known attack will require about $2^{96}$ or $2^{112}$ curve operations. I suppose these curves were standardized as enough people complained they can’t computationally or by bandwidth or storage afford to use group 19 and the probably did so after 19-21 were standardized.

                                                                                    Now compare this to the groups 19, 20 and 21 which use 256-, 384- and 512- bit elliptic curves which respectively offer 128, 192 and 256-bit security. This is much better at a minor cost of performance. If you really can’t afford to use these groups for performance reasons, then the 224-bit group should be fine, as its security is comparable to 2048-bit classic DH / RSA and the 192-bit group is risky as its security could be broken by a sufficiently determined attacker with sufficient funding, usually this is attributed to nation-state attackers.

                                                                                    DH group 21 is also “only” a 512 bit algorithm compared to DH group
                                                                                    14, which is a 2048 bit algorithm. However I read that DH group 21 is
                                                                                    still better than 14, because it uses elliptical curve.

                                                                                    Group 14 uses classic finite-field diffie-hellman, i.e. $g^xbmod p$ for a 2048-bit prime $p$. Because this operation exposes so much structure, there are attacks that are more efficient than the generic ones, which is all that works against elliptic curves. These attacks are so good, that a 2048-bit prime modulus for DH has roughly a 112-bit security level, which roughly corresponds to a 224-bit elliptic curve, e.g. group 26.

                                                                                    Also note that due to these more scalable attacks, group 1 is actually breakable, even by academics and group 2 which has a 80-bit security level due to its 1024-bit modulus has a decent chance of being breakable by a determined attack with sufficient funding. Also due to the nature of these attacks, it is sufficient if the attacker once does one big pre-computation for the parameter set and can then break individual DH instances very easily, think 1 week of pre-computation to solve each instance in 90 seconds afterwards.

                                                                                    share|improve this answer

                                                                                    share|improve this answer

                                                                                    share|improve this answer

                                                                                    edited Jan 9 at 11:53

                                                                                    Maarten Bodewes

                                                                                    53.5k677192

                                                                                    53.5k677192

                                                                                    answered Jan 3 at 19:33

                                                                                    SEJPMSEJPM

                                                                                    28.7k555134

                                                                                    28.7k555134

                                                                                    • 1

                                                                                      $begingroup$
                                                                                      I think this is a perfect technical explanation. I might add that the group is indicated by a group ID. The ID is just a unique number, it doesn’t signify any kind of order or priority. If it did signify a security level of some kinds then the groups 25 and 26 should certainly not have been added.
                                                                                      $endgroup$
                                                                                      – Maarten Bodewes
                                                                                      Jan 9 at 14:23

                                                                                    • 1

                                                                                      $begingroup$
                                                                                      I think this is a perfect technical explanation. I might add that the group is indicated by a group ID. The ID is just a unique number, it doesn’t signify any kind of order or priority. If it did signify a security level of some kinds then the groups 25 and 26 should certainly not have been added.
                                                                                      $endgroup$
                                                                                      – Maarten Bodewes
                                                                                      Jan 9 at 14:23

                                                                                    1

                                                                                    1

                                                                                    $begingroup$
                                                                                    I think this is a perfect technical explanation. I might add that the group is indicated by a group ID. The ID is just a unique number, it doesn’t signify any kind of order or priority. If it did signify a security level of some kinds then the groups 25 and 26 should certainly not have been added.
                                                                                    $endgroup$
                                                                                    – Maarten Bodewes
                                                                                    Jan 9 at 14:23

                                                                                    $begingroup$
                                                                                    I think this is a perfect technical explanation. I might add that the group is indicated by a group ID. The ID is just a unique number, it doesn’t signify any kind of order or priority. If it did signify a security level of some kinds then the groups 25 and 26 should certainly not have been added.
                                                                                    $endgroup$
                                                                                    – Maarten Bodewes
                                                                                    Jan 9 at 14:23

                                                                                    4

                                                                                    $begingroup$

                                                                                    Note: I am not familiar with each of the named DH groups (“group 21”, “group 25”, etc) but to my knowledge none of them are broken, so this answer assumes that all groups of the same bit-strength have equivalent security.

                                                                                    DH vs ECDH

                                                                                    Traditional Diffie-Hellman (DH) is based on reversing multiplications / exponents on very large numbers (formally called the Discrete Logarithm problem). This is where you see group sizes like 2048-bit.

                                                                                    Elliptic Curve Diffie-Hellman (ECDH) is based on the mathematical problem of point multiplication on elliptic curves. This is where you see group sizes like 224-bit. Because of the added complexity of doing multiplications on elliptic curves rather than straight integers, ECDH can get the same security using much smaller numbers.

                                                                                    Here is a comparison of security levels:

                                                                                    Table comparing security levels of DH and ECDH

                                                                                    From that table, 2048-bit DH is the same security level as 224-bit ECDH, and was estimated to be ~112 bits of security whenever NIST put together that table. So according to that, you could get away with a 2048/224 bit DH/ECDH group, but 3072/256 bit would be more conservative.

                                                                                    Pros / Cons

                                                                                    For the same security level (say DH 2048 vs ECDH 224) the ECDH will get you better performance (faster, less server load, etc) simply because the numbers to multiply are smaller. So if you have the choice, go for an ECDH group, and go for the smallest one that meets your security needs — if you are doing “normal” e-commerce type things, then a 256-bit ECDH group will be more than enough.

                                                                                    share|improve this answer

                                                                                    $endgroup$

                                                                                      4

                                                                                      $begingroup$

                                                                                      Note: I am not familiar with each of the named DH groups (“group 21”, “group 25”, etc) but to my knowledge none of them are broken, so this answer assumes that all groups of the same bit-strength have equivalent security.

                                                                                      DH vs ECDH

                                                                                      Traditional Diffie-Hellman (DH) is based on reversing multiplications / exponents on very large numbers (formally called the Discrete Logarithm problem). This is where you see group sizes like 2048-bit.

                                                                                      Elliptic Curve Diffie-Hellman (ECDH) is based on the mathematical problem of point multiplication on elliptic curves. This is where you see group sizes like 224-bit. Because of the added complexity of doing multiplications on elliptic curves rather than straight integers, ECDH can get the same security using much smaller numbers.

                                                                                      Here is a comparison of security levels:

                                                                                      Table comparing security levels of DH and ECDH

                                                                                      From that table, 2048-bit DH is the same security level as 224-bit ECDH, and was estimated to be ~112 bits of security whenever NIST put together that table. So according to that, you could get away with a 2048/224 bit DH/ECDH group, but 3072/256 bit would be more conservative.

                                                                                      Pros / Cons

                                                                                      For the same security level (say DH 2048 vs ECDH 224) the ECDH will get you better performance (faster, less server load, etc) simply because the numbers to multiply are smaller. So if you have the choice, go for an ECDH group, and go for the smallest one that meets your security needs — if you are doing “normal” e-commerce type things, then a 256-bit ECDH group will be more than enough.

                                                                                      share|improve this answer

                                                                                      $endgroup$

                                                                                        4

                                                                                        4

                                                                                        4

                                                                                        $begingroup$

                                                                                        Note: I am not familiar with each of the named DH groups (“group 21”, “group 25”, etc) but to my knowledge none of them are broken, so this answer assumes that all groups of the same bit-strength have equivalent security.

                                                                                        DH vs ECDH

                                                                                        Traditional Diffie-Hellman (DH) is based on reversing multiplications / exponents on very large numbers (formally called the Discrete Logarithm problem). This is where you see group sizes like 2048-bit.

                                                                                        Elliptic Curve Diffie-Hellman (ECDH) is based on the mathematical problem of point multiplication on elliptic curves. This is where you see group sizes like 224-bit. Because of the added complexity of doing multiplications on elliptic curves rather than straight integers, ECDH can get the same security using much smaller numbers.

                                                                                        Here is a comparison of security levels:

                                                                                        Table comparing security levels of DH and ECDH

                                                                                        From that table, 2048-bit DH is the same security level as 224-bit ECDH, and was estimated to be ~112 bits of security whenever NIST put together that table. So according to that, you could get away with a 2048/224 bit DH/ECDH group, but 3072/256 bit would be more conservative.

                                                                                        Pros / Cons

                                                                                        For the same security level (say DH 2048 vs ECDH 224) the ECDH will get you better performance (faster, less server load, etc) simply because the numbers to multiply are smaller. So if you have the choice, go for an ECDH group, and go for the smallest one that meets your security needs — if you are doing “normal” e-commerce type things, then a 256-bit ECDH group will be more than enough.

                                                                                        share|improve this answer

                                                                                        $endgroup$

                                                                                        Note: I am not familiar with each of the named DH groups (“group 21”, “group 25”, etc) but to my knowledge none of them are broken, so this answer assumes that all groups of the same bit-strength have equivalent security.

                                                                                        DH vs ECDH

                                                                                        Traditional Diffie-Hellman (DH) is based on reversing multiplications / exponents on very large numbers (formally called the Discrete Logarithm problem). This is where you see group sizes like 2048-bit.

                                                                                        Elliptic Curve Diffie-Hellman (ECDH) is based on the mathematical problem of point multiplication on elliptic curves. This is where you see group sizes like 224-bit. Because of the added complexity of doing multiplications on elliptic curves rather than straight integers, ECDH can get the same security using much smaller numbers.

                                                                                        Here is a comparison of security levels:

                                                                                        Table comparing security levels of DH and ECDH

                                                                                        From that table, 2048-bit DH is the same security level as 224-bit ECDH, and was estimated to be ~112 bits of security whenever NIST put together that table. So according to that, you could get away with a 2048/224 bit DH/ECDH group, but 3072/256 bit would be more conservative.

                                                                                        Pros / Cons

                                                                                        For the same security level (say DH 2048 vs ECDH 224) the ECDH will get you better performance (faster, less server load, etc) simply because the numbers to multiply are smaller. So if you have the choice, go for an ECDH group, and go for the smallest one that meets your security needs — if you are doing “normal” e-commerce type things, then a 256-bit ECDH group will be more than enough.

                                                                                        share|improve this answer

                                                                                        share|improve this answer

                                                                                        share|improve this answer

                                                                                        edited Jan 10 at 16:36

                                                                                        Maarten Bodewes

                                                                                        53.5k677192

                                                                                        53.5k677192

                                                                                        answered Jan 3 at 17:50

                                                                                        Mike OunsworthMike Ounsworth

                                                                                        2,1401923

                                                                                        2,1401923

                                                                                            draft saved
                                                                                            draft discarded

                                                                                            Thanks for contributing an answer to Cryptography Stack Exchange!

                                                                                            • Please be sure to answer the question. Provide details and share your research!

                                                                                            But avoid

                                                                                            • Asking for help, clarification, or responding to other answers.
                                                                                            • Making statements based on opinion; back them up with references or personal experience.

                                                                                            Use MathJax to format equations. MathJax reference.

                                                                                            To learn more, see our tips on writing great answers.

                                                                                            draft saved

                                                                                            draft discarded

                                                                                            StackExchange.ready(
                                                                                            function () {
                                                                                            StackExchange.openid.initPostLogin(‘.new-post-login’, ‘https%3a%2f%2fcrypto.stackexchange.com%2fquestions%2f66249%2fshould-we-use-iana-groups-14-modp-25-and-26-ecp%23new-answer’, ‘question_page’);
                                                                                            }
                                                                                            );

                                                                                            Post as a guest

                                                                                            Required, but never shown

                                                                                            Required, but never shown

                                                                                            Required, but never shown

                                                                                            Required, but never shown

                                                                                            Required, but never shown

                                                                                            Required, but never shown

                                                                                            Required, but never shown

                                                                                            Required, but never shown

                                                                                            Required, but never shown

                                                                                            Kimberley (Western Australia)

                                                                                            Region in Western Australia
                                                                                            Kimberley
                                                                                            Western Australia
                                                                                            Kimberley.png

                                                                                            Location in Australia
                                                                                            Population 50,113 (2011 census)[1]
                                                                                             • Density 0.1183258290.1183258/km2 (0.306462490.306462/sq mi)
                                                                                            Established 1881
                                                                                            Area 423,517 km2 (163,520.8 sq mi)
                                                                                            LGA(s)
                                                                                            • Shire of Broome
                                                                                            • Shire of Derby-West Kimberley
                                                                                            • Shire of Wyndham-East Kimberley
                                                                                            • Shire of Halls Creek
                                                                                            State electorate(s) Kimberley
                                                                                            Federal Division(s) Durack

                                                                                            The Kimberley is the northernmost of the nine regions of Western Australia. It is bordered on the west by the Indian Ocean, on the north by the Timor Sea, on the south by the Great Sandy and Tanami Deserts in the region of Pilbara, and on the east by the Northern Territory.

                                                                                            The region was named after John Wodehouse, 1st Earl of Kimberley who served as Secretary of State for the Colonies from 1870 to 1874 and 1880 to 1882.[2]

                                                                                            Contents

                                                                                            • 1 History
                                                                                            • 2 Demographics
                                                                                            • 3 Politics
                                                                                            • 4 Geography

                                                                                              • 4.1 Climate
                                                                                              • 4.2 Geology
                                                                                              • 4.3 Coastline
                                                                                            • 5 Ecology

                                                                                              • 5.1 Flora
                                                                                              • 5.2 Flora regions
                                                                                              • 5.3 Fauna
                                                                                              • 5.4 Threats and preservation
                                                                                              • 5.5 Save the Kimberley campaign
                                                                                            • 6 Economy
                                                                                            • 7 See also
                                                                                            • 8 References
                                                                                            • 9 External links

                                                                                            History

                                                                                            The Domes Walk, Purnululu National Park

                                                                                            A channel of the Fitzroy River, near Willare Bridge, dry season 2006

                                                                                            Yeeda Station homestead

                                                                                            Old Halls Creek Ruins

                                                                                            The Kimberley was one of the earliest settled parts of Australia, with the first arrivals landing about 41,000 years ago.[3]

                                                                                            In 1837, with support from the Royal Geographical Society, Lieutenants George Grey and Franklin Lushington, and 12 men sailed on the schooner Lynher from Cape Town reaching Hanover Bay on 2 December 1837. The party started inland on 19 January 1838.[4] Leaders and men were totally inexperienced, progress was delayed by flooded country, many stores were abandoned, and the party was constantly split up despite the presence of large numbers of hostile Aboriginals. On 11 February Grey was speared and became critically ill, but after two weeks continued the exploration. The party discovered and named the Gairdner River, the Glenelg River, the Stephen and Whately ranges and Mount Lyell before returning to Hanover Bay in April. There they were picked up by the Beagle and Lynher and taken to Mauritius to recuperate.[5]

                                                                                            In 1879 Alexander Forrest trekked across from the western coast to the Northern Territory. Forrest named the Kimberley district, and discovered the Margaret and Ord Rivers, the King Leopold Ranges, and the fertile area between the Fitzroy and Ord River.[6] He subsequently set himself up as a land agent specialising in the Kimberley and was thus instrumental in the leasing of over 21,000,000 hectares (51,000,000 acres) of land in the region during 1883.

                                                                                            In 1881, Philip Saunders and Adam Johns, in the face of great difficulties and dangers, found gold in various parts of the Kimberley. Early in 1881 the first five graziers, who called themselves the Murray Squatting Company, took up 49,000 hectares (120,000 acres) behind Beagle Bay and named it Yeeda Station.[6] They became the first men to shear sheep in the southern Kimberley in 1883. There was further European settlement in 1885, when cattle were driven across Australia from the eastern states in search of good pasture lands. Many other Europeans arrived soon after, when gold was discovered around Halls Creek.

                                                                                            In the 1890s the area was the site of an armed insurrection of indigenous people under the leadership of Jandamarra, a Bunuba warrior.[7]

                                                                                            The only Japanese force to land in Australia during World War II was a small reconnaissance party that landed in the Kimberley on 19 January 1944 to investigate reports that the Allies were building large bases in the region. The party consisted of four Japanese officers on board a small fishing boat. It investigated the York Sound region for a day and a night before returning to Kupang in Timor on 20 January. Upon returning to Japan in February, the junior officer who commanded the party suggested using 200 Japanese prison inmates to launch a guerrilla campaign in Australia. Nothing came of this and the officer was posted to other duties.[8]

                                                                                            Demographics

                                                                                            The 2011 estimated permanent population of the Kimberley was 34,794 but it rises dramatically during winter. On Census night in 2011 (9 August) it was 50,113. The population is fairly evenly distributed, with only three towns having populations in excess of 2,000: Broome (12,766), Derby (3,261) and Kununurra (4,573). Approximately 40% of the region’s population is of Aboriginal descent.[1][9]

                                                                                            Politics

                                                                                            At federal level, the Kimberley is represented by the member for Durack. At state level, the Kimberley electorate takes in all of the region and its towns.

                                                                                            The Kimberley region consists of the local government areas of Broome, Derby-West Kimberley, Halls Creek and Wyndham-East Kimberley.

                                                                                            Geography

                                                                                            Lennard River

                                                                                            Bungle Bungles – Echidna Chasm

                                                                                            The Kimberley is an area of 423,517 square kilometres (163,521 sq mi), which is about three times the size of England, twice the size of Victoria or just slightly smaller than California.

                                                                                            The Kimberley consists of the ancient, steep-sided mountain ranges of northwestern Australia cut through with sandstone and limestone gorges and steep ridges from which the extreme monsoonal climate has removed much of the soil. The southern end of the Kimberley beyond the Dampier Peninsula is flatter with dry tropical grassland and is used for cattle ranching. In parts of the Kimberley such as the valleys of the Ord and Fitzroy Rivers in the south the soils are relatively usable cracking clays, whilst elsewhere they are lateritic Orthents. Although none of the mountains reach even 1,000 metres (3,281 ft), there is so much steep land as to make much of the region very difficult to traverse, especially during the wet season when even sealed roads are often flooded. The coast is typically steep cliffs in the north but flatter in the south, all subject to high tides.

                                                                                            Climate

                                                                                            The Kimberley has a tropical monsoon climate. The region receives about 90% of its rainfall during the short wet season, from November to April, when cyclones are common (especially around Broome) and the rivers flood. The annual rainfall is highest in the northwest, where Kalumburu and the Mitchell Plateau average 1,270 millimetres (50 in) per year, and lowest in the southeast where it is around 520 millimetres (20 in). In the dry season, from May to October, south easterly breezes bring sunny days and cool nights. Climate change since 1967 has led to large increases of as much as 250 millimetres (10 in) per year in annual rainfall over the whole region. Recent studies suggest Asian pollution and not global warming as the cause of this increased rainfall.[10] In 1997 and 2000 the region received especially heavy rains, leading to record flooding of the Fitzroy and other rivers.

                                                                                            The Kimberley is one of the hottest parts of Australia, with the average annual mean temperature around 27 °C (81 °F), and with mean maximum temperatures almost always above 30 °C (86 °F), even in July. The hottest part of the year is November before the rains break, when temperatures frequently reach above 37 °C (99 °F) on the coast and well over 40 °C (104 °F) inland. Mean minimum temperatures in July range from around 12 °C (54 °F) in the south to 16 °C (61 °F) along the coast, whilst in November and December they are generally around 26 °C (79 °F).[11] Record high temperatures range from around 47 to 48 °C (117 to 118 °F), while record lows are around 2 to 3 °C (36 to 37 °F), although some parts of the central Kimberly plateau can drop below 0 °C (32 °F) during the dry season.

                                                                                            The Aboriginal people of the Kimberley recognise six traditional seasons based on meteorological events, as well as observations of flora and fauna.

                                                                                            Geology

                                                                                            Geikie Gorge National Park, Fitzroy River, 2007

                                                                                            China Wall – a natural rock formation near Halls Creek

                                                                                            During the Devonian period, a barrier reef system formed before a subsequent drop in sea levels over the Kimberley. This reef system was similar to the Great Barrier Reef and is still visible today in the form of the Napier Range and the Ningbing Range. Some of the features are Tunnel Creek, Windjana Gorge and Geikie Gorge.[12]

                                                                                            This area is also known as the Kimberley Block physiographic province, of which it is part of the larger West Australian Shield division. This province contains the King Leopold Range, Durack Range, Leveque Rise, Browse Depression, and Londonderry Rise physiographic sections.

                                                                                            Coastline

                                                                                            Cape Leveque

                                                                                            In BOM weather reports the North Kimberley Coast – is the WA Border to Kuri Bay section of the coast, while the West Kimberley Coast is from Kuri Bay to Wallal Downs. Significant sections of the coastline between Broome and Wyndham have no means of road access, and boat or helicopter are the only means. Due to the isolation a number of tourist operations on the coastline have been called wilderness locations.

                                                                                            Ecology

                                                                                            The rugged and varied sandstone landscape is home to a distinctive mixture of wildlife which has been thoroughly mapped and described by the Western Australian Department of Conservation and Land Management.[13][14][15][16][17][18][19][20][21][22][23] There are similar habitats to the Kimberley across the border in the Northern Territory including the valleys of the Victoria and Daly Rivers but these have been less carefully studied.[24][25]

                                                                                            Flora

                                                                                            Boab tree near Kununurra

                                                                                            Much of the Kimberley is chiefly covered in open savanna woodland dominated by low bloodwood and boab trees (Adansonia gregorii) with Darwin stringybark and Darwin woollybutt eucalyptus in the wetter areas. The red sandy soil of the Dampier Peninsula in the south is known for its characteristic pindan wooded grassland while in the more fertile areas like the Ord valley the trees are grasslands of Chrysopogon, Aristida, Dicanthium and Xerochloa (rice grass) in the wetter valleys. The banks of the Ord, Fitzroy and other rivers are home to a greater variety of vegetation while in sheltered gorges of the high rainfall north there are patches of tropical dry broadleaf forest, called monsoon forests, deciduous vine forest or vine thicket in Australia (often mistakenly called ‘dry rainforest’), which were unknown to science until 1965[26] and are one of the most floristically rich parts of Australia outside the Wet Tropics and southwestern WA. There are also areas of mangrove in river estuaries where the coast is flatter.

                                                                                            Flora regions

                                                                                            In 1979, Beard identified four phytogeographic districts within the Northern Botanical Province:[27]

                                                                                            • Gardner District (Ga) in the north (and further divided into the West Gardner (WGa), Central Gardner (CGa) and East Gardner (EGa))
                                                                                            • Fitzgerald District (Fi) in the centre
                                                                                            • Dampier (Da) and Hall (Ha) Districts in the south

                                                                                            Fauna

                                                                                            Bowerbird nest

                                                                                            Desert mouse

                                                                                            Animals found here include the huge saltwater crocodile and a rich variety of birds such as the channel-billed cuckoo, Pacific koel, purple-crowned fairywren and the bowerbird. The sandstone gorges of north Kimberley are an important refuge for a particularly rich collection of endemic species including some that have disappeared from the flatter areas including for example the purple-crowned fairywren, the endangered Gouldian finch and a large number of frogs: flat-headed frog, cave-dwelling frog, magnificent tree frog, Derby toadlet, small toadlet, fat toadlet, the unconfirmed marbled toadlet, Mjoberg’s toadlet, mole toadlet and stonemason’s toadlet. Mammals that have declined especially in the flatlands include the bilby, northern quoll, pale field rat, golden-backed tree-rat, and golden bandicoot.

                                                                                            A species of endemic gecko, Gehyra kimberleyi, is named after the Kimberley region.[28]

                                                                                            The gorges of central Kimberley are known for their fossils and for their large colonies of bats include Windjana, Tunnel Creek, and Geikie Gorges. Lake Argyle and other wetlands of the Ord and the Kimberley are important habitats while there are important populations of shorebirds in the Ord estuary, Eighty-mile Beach and Roebuck Bay, which has been described as “one of the most important stop-over areas for shorebirds in Australia and globally”.[29] Finally there are a number of rocky islands off the north coast that are home to birds and turtles.

                                                                                            Threats and preservation

                                                                                            Purnululu National Park

                                                                                            Little of the Kimberley has been subject to wholesale clearance other than particularly fertile parts of the Ord Valley (and areas of Kimberley-type habitat across in the Daly River basin in the Northern Territory) but the pastureland in the southern areas has been affected by 100 years of livestock grazing and other threats including introduced weeds (such as cocklebur, parkinsonia, bellyache bush and castor oil plant), feral cats and changes to traditional Aboriginal fire regimes (the way grassland is burnt and allowed to renew). However the remote sandstone areas to the north have valuable original habitat in good condition providing shelter for much wildlife.

                                                                                            Purnululu National Park – sandstone domes of the Bungle Bungle Range

                                                                                            The largest protected areas are the Prince Regent National Park and the Drysdale River National Park along with Gregory National Park and Keep River National Park across in the Northern Territory which preserve similar habitats, (and indeed Keep River’s nearest town is Kununurra in the Kimberley).

                                                                                            The Kimberley is a popular tourist destination, with areas such as the Bungle Bungle, the Gibb River Road, Lake Argyle, El Questro Station, Mornington Sanctuary, Horizontal Falls and Cape Leveque. The Gibb River Road and the road into the Bungle Bungles can at times be accessed in a two-wheel drive car, although one can access many additional areas in a four-wheel drive vehicle.

                                                                                            Other parks in the region include Geikie Gorge National Park, Mirima National Park, Mitchell River National Park, Point Coulomb National Park, Purnululu National Park, Tunnel Creek National Park, Windjana Gorge National Park and Wolfe Creek Meteorite Crater National Park. In 2012 the Western Australian government announced the creation of the 7,062 square kilometre Camden Sound Marine Park with a further three more to come.

                                                                                            Visitors to the area should be aware that the area can be subject to controlled burns at any time of year. In September 2011, a fire burned five people, two severely, who had been competing in the Kimberley Ultramarathon, an endurance cross country footrace.[30]

                                                                                            Save the Kimberley campaign

                                                                                            Pindan Country near James Price Point

                                                                                            The Wilderness Society has led a campaign to protest a proposal to industrialise the James Price Point area of Broome. The Woodside corporation, with the additional involvement of BHP Billiton and the Australian government, has sought to build a gas industrial complex and those in opposition believe that such a development threatens the region. The campaign has received support from public figures such as John Butler, Clare Bowditch, Missy Higgins and former leader of the Australian Greens, Dr Bob Brown.

                                                                                            On 5 October 2012, a concert was held at Federation Square in Melbourne, Australia, to raise awareness of the campaign; the protest event attracted approximately 6,000 people.

                                                                                            On 24 February 2013, an estimated 20,000 people gathered for a charity concert[31] in Fremantle, Western Australia to raise awareness and funds to help protect the Kimberley with performances from Ball Park Music, Missy Higgins, and John Butler.

                                                                                            Economy

                                                                                            Broome’s deep water wharf and jetty

                                                                                            Argyle diamond mine

                                                                                            Cattle road trains at Louisa Downs Station

                                                                                            The Kimberley region has a diverse regional economy. Mining, construction, tourism, retail, agriculture, and pearling are major contributors to the region’s economic output.[32]

                                                                                            The town of Broome has a flourishing pearling industry which operates around the Kimberley coast. Some of the major farmers are Paspaley Pearls, Clipper Pearls, Broome Pearls and the Willie Creek Pearl Farm.

                                                                                            One third of the world’s annual production of diamonds is mined at the Argyle and the Ellendale diamond mines. Oil is extracted from the Blina oil field and gas is expected to be taken from offshore sources soon. Zinc and lead were mined at the Pillara and Cadjebut mines near Fitzroy Crossing with nickel still being mined at Sallay Mallay near Halls Creek. Derby is the nearest export base for shipping these metals.

                                                                                            Traditionally, the economy depended on pastoral leases – with most of the region covered by the leases.

                                                                                            More recently agriculture has been focused on the Ord River Irrigation Area near Kununurra. Irrigation was also trialled in the West Kimberley by way of the now defunct Camballin Irrigation Scheme. There are also fruit growers in Broome and in other areas in the West Kimberley. Beef cattle are grown in the Kimberley and exported live. Wyndham features the last remaining meatworks in the Kimberley – there were formerly works at Broome and Derby but financial constraints have caused these to be closed.

                                                                                            Barramundi are bred in Lake Argyle; and Broome features a fully equipped Aquaculture Park near the port which is tenanted by amongst others Paspaley Pearls and Broome TAFE. The Kimberley also has a thriving fishing industry.

                                                                                            Some of Australia’s most prominent indigenous artists and art centres are in or adjacent to the Kimberley region. Artists such as Paddy Bedford and Freddie Timms have an international profile, and there are a number of Aboriginal-owned and controlled art centres and companies that assist artists, arrange exhibitions and sell works. The art centres in the region are also organised through the Association of Northern, Kimberley and Arnhem Aboriginal Artists. Issues have been raised regarding the exploitation of indigenous artists by businesses and individuals, including in the Kimberley, which were canvassed in an Australian Senate parliamentary committee report.

                                                                                            Tourism is expected to remain one of the Kimberley region’s major growth industries. Averaged across 2010, 2011, and 2012, there were 292,600 domestic and international visitors to the Kimberley annually.[32]

                                                                                            See also

                                                                                            • List of pastoral leases in Western Australia
                                                                                            • Kimberley-Perth Canal
                                                                                            • Kimberley Plan

                                                                                            References

                                                                                            1. ^ ab “High Census Night Ratios, Western Australia”. Perspectives on Regional Australia: Comparing Census Night and Usual Resident Populations in Local Government Areas, 2011. Australian Bureau of Statistics. 16 September 2013. Archived from the original on 15 August 2014. Retrieved 12 August 2014..mw-parser-output cite.citation{font-style:inherit}.mw-parser-output q{quotes:”””””””‘””‘”}.mw-parser-output code.cs1-code{color:inherit;background:inherit;border:inherit;padding:inherit}.mw-parser-output .cs1-lock-free a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/9px-Lock-green.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-limited a,.mw-parser-output .cs1-lock-registration a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Lock-gray-alt-2.svg/9px-Lock-gray-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-subscription a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Lock-red-alt-2.svg/9px-Lock-red-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration{color:#555}.mw-parser-output .cs1-subscription span,.mw-parser-output .cs1-registration span{border-bottom:1px dotted;cursor:help}.mw-parser-output .cs1-hidden-error{display:none;font-size:100%}.mw-parser-output .cs1-visible-error{font-size:100%}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration,.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left,.mw-parser-output .cs1-kern-wl-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right,.mw-parser-output .cs1-kern-wl-right{padding-right:0.2em}
                                                                                            2. ^ Room, Adrian (2006). Placenames of the world: origins and meanings of the names for 6,600 countries, cities, territories, natural features, and historic sites. McFarland. p. 196. ISBN 978-0-7864-2248-7.
                                                                                            3. ^ Balme, Jane (Dec 2000). “Excavations revealing 40,000 years of occupation at Mimbi Caves, south central Kimberley, Western Australia”. Australian Archaeology (51). Archived from the original on 27 June 2013. Retrieved 27 August 2012.
                                                                                            4. ^ “Arts and Sciences – Royal Geographical Society”. The literary gazette and journal of belles lettres, arts, sciences, etc (1139): 731–732. 1838-11-17.
                                                                                            5. ^ “Grey, Sir George (1812–1898)”. Australian Dictionary of Biography. National Centre of Biography, Australian National University. Archived from the original on 18 September 2011. Retrieved 25 August 2011.
                                                                                            6. ^ ab The Australian Encyclopaedia, Vol. V, The Grolier Society, Sydney
                                                                                            7. ^ Pedersen, Howard; Woorunmurra, Banjo (1995). Jandamarra and the Bunuba Resistance. Broome, Western Australia: Magabala Books. ISBN 1-875641-60-2.
                                                                                            8. ^ Frei (1991), pg 173–174.
                                                                                            9. ^ “Kimberley – All people – usual residents”. 2011 Census QuickStats. Australian Bureau of Statistics. 16 September 2013. Archived from the original on 24 September 2015. Retrieved 12 August 2014.
                                                                                            10. ^ Australian rainfall and Asian aerosols Archived 16 June 2012 at the Wayback Machine., Have Australian Rainfall and Cloudiness Increased Due to the Remote Effects of Asian Anthropogenic Aerosols? (in press, 23/10/2006) JOURNAL OF GEOPHYSICAL RESEARCH
                                                                                            11. ^ Bureau of Meteorology (Australia) http://www.bom.gov.au/jsp/ncc/climate_averages/temperature/index.jsp?maptype=1&period=an
                                                                                            12. ^ Western Australia’s Department of Environment and Conservation (2007). “The Devonian ‘Great Barrier Reef“. Archived from the original on 11 September 2007. Retrieved 12 March 2007.
                                                                                            13. ^ Miles, J. M., and A. A. Burbidge. editors. 1975. A biological survey of the Prince Regent River reserve, north-west Kimberley, Western Australia. Wildlife Research Bulletin no. 3. Department of Fisheries and Wildlife, Perth
                                                                                            14. ^ Kabay, E. D., and A. A. Burbidge. editors. 1977. A biological survey of the Drysdale River National Park, north Kimberley, Western Australia. Wildlife Research Bulletin no. 6. Department of Fisheries and Wildlife, Perth.
                                                                                            15. ^ Burbidge, A. A., and N. L. McKenzie. editors. 1978. The islands of the north-west Kimberley, Western Australia. Wildlife Research Bulletin no. 7. Department of Fisheries and Wildlife, Perth
                                                                                            16. ^ McKenzie, N.L. editor. 1981a. Wildlife of the Edgar Ranges area, south-west Kimberley, Western Australia. Wildlife Research Bulletin no. 10. Department of Fisheries and Wildlife, Perth
                                                                                            17. ^ McKenzie, N.L. editor. 1981b. Mammals of the Phanerozoic South-west Kimberley, Western Australia: biogeography and recent changes. Journal of Biogeography 8: 263-280.
                                                                                            18. ^ McKenzie, N.L. editor. 1983. Wildlife of the Dampier Peninsula, south-west Kimberley, Western Australia. Wildlife Research Bulletin no. 11. Department of Fisheries and Wildlife, Perth.
                                                                                            19. ^ Western Australian Museum. 1981. Biological survey of Mitchell Plateau and Admiralty Gulf, Kimberley, Western Australia. Western Australian Museum, Perth
                                                                                            20. ^ Burbidge, A. A., N. L. McKenzie, and K.F. Kenneally. 1991. Nature conservation reserves in the Kimberley, Western Australia. Department of Conservation and Land Management, Perth.
                                                                                            21. ^ McKenzie, N. L., R. B. Johnston, and P. G. Kendrick. editors. 1991. Kimberley rainforests of Australia. Surrey Beatty & Sons, Sydney.
                                                                                            22. ^ Wheeler, J.R. editor. 1992. Flora of the Kimberley region. Department of Conservation and Land Management, Perth.
                                                                                            23. ^ Kenneally, K. F., D. C. Edinger, and T. Willing 1996. Broome and beyond. Plants and people of the Dampier Peninsula, Kimberley, Western Australia. Department of Conservation and Land Management, Perth.
                                                                                            24. ^ Price, O., D. Milne, G. Connors, B. Harwood, J. Woinarski, and M. Butler. 2001. A conservation plan for the Daly Basin bioregion. Parks and Wildlife Commission of the Northern Territory, Darwin.
                                                                                            25. ^ “Kimberly tropical savanna”. Terrestrial Ecoregions. World Wildlife Fund.
                                                                                            26. ^ Beard, J. S. 1976. The monsoon forests of the Admiralty Gulf, Western Australia. Plant Ecology, 31(3): 177-192. doi:10.1007/BF00114864
                                                                                            27. ^ Wheeler, J. R. (Judith Roderick); Western Australian Herbarium (1992), Flora of the Kimberley region, Western Australia Herbarium. Department of Conservation and Land Management, ISBN 978-0-7309-5221-3
                                                                                            28. ^ Beolens, Bo; Watkins, Michael; Grayson, Michael (2011). The Eponym Dictionary of Reptiles. Baltimore: Johns Hopkins University Press. xiii + 296 pp.
                                                                                              ISBN 978-1-4214-0135-5. (“Kimberley”, p. 141).
                                                                                            29. ^ Lane, J., R. Jaensch, and R. Lynch. 1996. Western Australia. Pages 759-943 in A directory of important wetlands in Australia. Australian Nature Conservation Agency, Canberra, Australia.
                                                                                            30. ^ “Inquiry into the 2011 Kimberley Ultramarathon”. Economics and Industry Standing Committee, Western Australian Legislative Assembly. August 2012. Report No. 13. Archived from the original on 2 February 2017. Retrieved 22 January 2017.
                                                                                            31. ^ “Music Icons Unite Over JPP Fight – Save The Kimberley”. www.savethekimberley.com. Archived from the original on 23 March 2016. Retrieved 28 April 2018.
                                                                                            32. ^ ab “Economic Activity”. Kimberley Development Commission. Government of Western Australia. Archived from the original on 13 August 2014. Retrieved 12 August 2014.
                                                                                            General

                                                                                            .mw-parser-output .refbegin{font-size:90%;margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{list-style-type:none;margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li,.mw-parser-output .refbegin-hanging-indents>dl>dd{margin-left:0;padding-left:3.2em;text-indent:-3.2em;list-style:none}.mw-parser-output .refbegin-100{font-size:100%}

                                                                                            • Frei, Henry P. (1991). Japan’s Southward Advance and Australia. From the Sixteenth Century to World War II. Melbourne: Melbourne University Press. ISBN 0-522-84392-1.

                                                                                            External links

                                                                                            • Kimberley, Western Australia travel guide from Wikivoyage
                                                                                            • Kimberley Development Commission
                                                                                            • Kununurra Historical Society Inc. Archive, Library, Museum & Research for links to history images of the Kimberley

                                                                                            Coordinates: 16°S 126°E / 16°S 126°E / -16; 126


                                                                                            Ord River

                                                                                            Ord River
                                                                                            Ord River.jpg

                                                                                            Ord River from a boat
                                                                                            Location
                                                                                            Country Australia
                                                                                            Physical characteristics
                                                                                            Source  
                                                                                             – location Kimberley Plateau
                                                                                             – elevation 531 metres (1,742 ft)[1]
                                                                                            Mouth  
                                                                                             – location
                                                                                            Cambridge Gulf, Timor Sea
                                                                                             – elevation
                                                                                            sea level
                                                                                            Length 650 km (400 mi)
                                                                                            Basin size 46,100 square kilometres (17,799 sq mi)[3]
                                                                                            Discharge  
                                                                                             – average 3,870,000 ML/a (123 m3/s; 4,330 cu ft/s)[2]
                                                                                            Basin features
                                                                                            Tributaries  
                                                                                             – left Behn River, Negri River, Nicholson River
                                                                                             – right Dunham River, Bow River, Panton River

                                                                                            Ord River sandalwood plantation near Kununurra

                                                                                            The Ord River is a 320-kilometre (200 mi) long river in the Kimberley region of Western Australia. The river’s catchment covers 46,100 square kilometres (17,799 sq mi).

                                                                                            The lower Ord river and the conjunction with Cambridge Gulf create the most northern estuarine environment in Western Australia.[4][5][6]

                                                                                            The Ord River Irrigation Scheme was built in stages during the 20th century. Australia’s largest artificial lake by volume, Lake Argyle was completed in 1972. It has not been economically successful; $1.45 billion has been spent on the Ord Irrigation Scheme for a return of 17 cents on the dollar, and only 260 jobs created.

                                                                                            The lower reaches of the river support an important wetland area known as the Ord River Floodplain, a protected area which contains numerous mangrove forests, lagoons, creeks, flats and extensive floodplains.[7]

                                                                                            The traditional owners are the Miriwoong Gajerrong peoples who have inhabited the area for thousands of years and knew the Ord river as Goonoonoorrang.[8]

                                                                                            Contents

                                                                                            • 1 Naming
                                                                                            • 2 Ord River Irrigation Scheme

                                                                                              • 2.1 Ord River experimental station
                                                                                              • 2.2 Ord River dam surveys
                                                                                              • 2.3 Involving the Commonwealth
                                                                                              • 2.4 Establishment of the Kimberley Research Station
                                                                                              • 2.5 Justifying dam construction
                                                                                              • 2.6 Origin of the Ord River Irrigation Area
                                                                                              • 2.7 The first dam – Ord River Diversion Dam
                                                                                              • 2.8 The Ord River pilot farm
                                                                                              • 2.9 Commercial irrigation farming
                                                                                              • 2.10 The second dam – Ord River (Main) Dam
                                                                                              • 2.11 Disputed views about economic value of the irrigation scheme
                                                                                            • 3 The Ord River irrigation area today

                                                                                              • 3.1 Power generation
                                                                                              • 3.2 Environmental effects
                                                                                              • 3.3 Logistics
                                                                                            • 4 See also
                                                                                            • 5 References
                                                                                            • 6 External links

                                                                                            Naming

                                                                                            It was named in honour of Sir Harry St. George Ord GCMG, CB, RE, Governor of Western Australia from 1877 to 1880, by Alexander Forrest on 2 August 1879.[9] Forrest’s journal states.

                                                                                            We are still 300 miles from the telegraph line, and cannot of course tell what difficulties may not yet be in store for us, so I feel bound to push on, at the same time no one can regret more than I do that I am unable to follow this magnificent stream to its mouth which I have no doubt will be found in Cambridge Gulf–the whole of its waters in that case being in Western Australian territory. I have named this river the Ord, after His Excellency the Governor of Western Australia, who has taken so great an interest in this expedition. Marked a tree F 158.[9]

                                                                                            The headwaters of the Ord river are located below the 983 metre Mount Wells and initially flows east and around the edge of Purnululu National Park before heading north through Lake Argyle then passing west of Kununurra and discharging into the Cambridge Gulf, which is at the southern extremity of the Joseph Bonaparte Gulf, Timor Sea.
                                                                                            The river has 35 tributaries of which the five longest are Bow River, Nicholson River, Dunham River, Panton River and Negri Rivers.

                                                                                            Ord River Irrigation Scheme

                                                                                            crossing the Ord river at Kununarra c1960

                                                                                            Ord Diversion Dam under construction c1962

                                                                                            The idea of damming the Ord was first mentioned over 100 years ago, when the Western Australia Commissioner of Tropical Agriculture, Adrian Despeissis, suggested,

                                                                                            Substantial wooden dams constructed on a double row of jarrah piles driven into the bed of the river, with a core wall of puddle clay between, would appear to form suitable weirs.[10]

                                                                                            Between 1935 and 1942 drought affected the Kimberley Pastoral Industry providing the key motivation for the Ord Scheme. The focus in 1937 was that a dam on the Ord could supplement the pastoral industry.[10]

                                                                                            Ord River experimental station

                                                                                            Then Minister for Lands and Agriculture, F J S Wise, in 1937 wrote

                                                                                            ..we set a plan in motion during the past twelve months in connection with the establishment of experimental areas on Ivanhoe Station somewhere near Carlton Reach.[10]

                                                                                            Carlton Reach was the largest waterhole in the Kimberley, being naturally dammed and held back by the Bandicoot Bar, a quartzite rock bar that held back the waterhole for many miles forming a natural permanent lake.

                                                                                            In 1939, Michael Durack and Isaac Steinberg traveled to the region to investigate its suitability for resettling Jewish refugees. Any resettlement scheme would have involved irrigation works on the Ord.

                                                                                            By 1941 the Carlton Reach Research Station, also known as the Ord River Experimental Station, was set up by Kimberley Michael Durack for the Western Australia Department of Agriculture with funds, supposedly “siphoned off” from the Kalgoorlie pipeline and assistance from the Western Australia Public Works Department (PWD).[10]

                                                                                            Ord River dam surveys

                                                                                            During August 1941 the newly appointed Director of Works, R. J. Dumas, spent three weeks in the East Kimberley,

                                                                                            …accompanied by F. Forman (Government Geologist). T. Brennan (Acting Engineer for the North West), K. Durack, J. Walker (a half caste aboriginal) and a full blood aboriginal, Jacko[10]

                                                                                            This party travelled by horseback along the Ord River and through the Ord River gorges in the Carr Boyd Range, selecting several possible dam sites. Work continued at the Carlton Reach experimental station for Kim Durack with assistance from his brother William A. Durack, on various agricultural experiments, centred on supplementing the pastoral industry.[10]

                                                                                            Involving the Commonwealth

                                                                                            Early in 1944 Dumas wrote to the Commonwealth Government, advising of the soil, botanical, erosion and engineering surveys about to take place in the East Kimberley, explaining, the project must become largely a national one and any assistance from the Commonwealth would be welcome. By May 1944 there was a large body of agriculturalists, botanists and surveyors carrying out investigations in the vicinity of Carlton Reach.[10] The Aborigines who lived in the Ord River basin were decimated through killing and the spread of introduced diseases.[11][citation needed]

                                                                                            Establishment of the Kimberley Research Station

                                                                                            It would be another two years before the Commonwealth Government became involved, with the establishment of a joint CSIR and Western Australia Department of Agriculture facility. As the Carlton Reach, Ord River experimental station site was river alluvium (red soil) and most of the surveyed agricultural land was “Cununurra Clay” (blacksoil – Volcanic soil eroded from the Antrim Plateau Volcanics), it was moved to a new site further down river and the new Kimberley Research Station (KRS) was established in 1946.[12]

                                                                                            Justifying dam construction

                                                                                            In 1951, The KRS Supervisory Committee (KRSSC) indicated that sugar and rice were two cash crops that could justify dam construction.[12]

                                                                                            Over the 13 years between 1946 and 1959 various agricultural experiments were undertaken at KRS and in April 1959 the KRS Supervisory Committee recommended the establishment of a pilot farm. In August 1959, the Commonwealth Government made a grant of £5m to WA Government, most to be used for the Ord River Scheme.[12]

                                                                                            Origin of the Ord River Irrigation Area

                                                                                            Pumping station, river and irrigated fields

                                                                                            The Ord River Irrigation Area (ORIA), which was originally known as the Ord River Irrigation Scheme (ORIS) or Ord River Project, when it was approved by the Commonwealth Government, late in 1959 and began in 1960 with the establishment of the town of Kununurra, which was gazetted a town on 10 February 1961.[13]

                                                                                            The first dam – Ord River Diversion Dam

                                                                                            The construction of the Ord River Diversion Dam started in late 1960 and was officially opened in July 1963 by then Prime Minister, Robert Menzies. The Ord River Diversion Dam holds back Lake Kununurra, which gravity feeds the Ord River Irrigation Area with water via the Main Channel (M1C1). The main channel is visible in the photograph with Lake Kununurra, Ord River (formerly the Carlton Reach waterhole, Ord River) in the background.

                                                                                            The Ord River pilot farm

                                                                                            To test the commercial viability of the ORIA, the WA Government, passed an act of parliament, known as the Northern Development (Ord River) Act, and in October 1960, ratified an agreement with the company Northern Developments, Ord River Pty. Ltd. to set up and run the first “pilot farm.” This was backed by the WA Government but was to run as a commercial farming venture.[14]

                                                                                            By November 1960 the first 200 acres had been chain-dozed and cleared, a channel and pumps were in place, to irrigate the first commercial rice crop that had been planted on the new pilot farm. This was almost three years before the completion of the Ord River Diversion Dam and main channel, so the pilot farm irrigated by pumping water from the Carlton Reach waterhole.

                                                                                            Commercial irrigation farming

                                                                                            Allocation of commercial farm land during Stage 1 of the project was allocated in stages, with the first group of farmers arriving in 1962 and final allocations completed in 1966.[15] 30 farms produced mostly cotton, however pest problems soon became apparent. The early 1970s saw the application of large amounts of pesticides on crops. The primary pest was the caterpillar Helicoverpa armigera which developed resistance to the pesticides. The resulting low crop yields combined with a drop in world cotton prices led to suspension of the commercial cotton industry in the region.[15]

                                                                                            The second dam – Ord River (Main) Dam

                                                                                            Work started on the main Ord River Dam in 1969 and was completed before the official opening on 30 June 1972 by Prime Minister William McMahon, when he said..

                                                                                            This marks the beginning of Ord stage two[16]

                                                                                            The main Ord River Dam, known locally as “Top Dam” holds back the waters of the Ord River in Lake Argyle. The Ord scheme created Lake Argyle, which is Australia’s largest dam reservoir, covering an area of 741 km².[17]

                                                                                            Disputed views about economic value of the irrigation scheme

                                                                                            In 2013, the Wilderness Society estimated that $1.45 billion had been spent on the Ord Irrigation Scheme for a return of 17 cents for every dollar spent.[18] In 2016 the Auditor General for Western Australia reported that “The sustained social and economic benefits underpinning the decision to proceed with this $529 million investment have not been realised. Nor is there a plan to track and assess them.”[19] The Australia Institute reported that “Attempts to develop northern Australia by subsidising capital-intensive industries like irrigated agriculture have a long and unimpressive history. An example is the Ord River Scheme which currently supports just 260 jobs despite $2 billion spent and decades of effort.”[20]

                                                                                            The Ord River irrigation area today

                                                                                            The Ord River dams provide water for irrigation to over 117 km² of farmland and there are plans to extend the scheme to allow irrigation of 440 km² in the near future. The main Ord River dam also generates power for the local community of Kununurra. By 2009 more than 60 different crops were grown in the Ord catchment area.[21] One third of the area is used for sugar cane cultivation.[22]

                                                                                            In 2009, the Rudd Government and Colin Barnett announced a development plan for the area. The plan emphasised community and infrastructure development including upgrades of Kununurra Airport and the port at Wyndham.[23]

                                                                                            Power generation

                                                                                            The Ord River Dam Hydro Scheme is a privately funded, owned and operated power system in the East Kimberley region of Western Australia. It consists of a new 36 MW hydro electric power station at Lake Argyle interconnected, by lengthy 132 kV transmission lines, with existing diesel fuelled power systems at the Argyle diamond mine and the Kununurra township. The scheme can currently only produce 1% of the power the Snowy Mountains Scheme produces. The power station was constructed from 1995 to 1996.[22]

                                                                                            Environmental effects

                                                                                            CSIRO research conducted in 2008 found that the water quality in the lower reaches of the river was good and that planned activities were not an ecological threat.[24] Salinity and erosion are also becoming an issue in the area, due to the rising of the water table in the area. The use of groundwater drains has been suggested by hydrologist Dr Tony Smith, as a possible remedy to salinity problems.[24]

                                                                                            Some concerns have been raised that the large body of water created by the dam could attract Asian insects and birds which may transmit dangerous viruses such as avian influenza.[15]

                                                                                            Like so many other experiments in tropical agriculture the scheme initially failed because of difficulties growing crops and attack from pests. Today the irrigated areas successfully produce a variety of fruits and vegetables, with the most recent crop being sandalwood.

                                                                                            Associated wetland areas have been preserved within the Lakes Argyle and Kununurra Ramsar Site. Ord water quality and flow contributed to the disappearance of the Common Banana Prawn (Rachel Carbonell, “North Queensland irrigation plan could ‘destroy’ prawn fisheries in Gulf of Carpentaria, producers warn”, ABC News – 27 March 2014)[25]
                                                                                            The site forms part of the Ord Irrigation Area Important Bird Area (IBA), so identified by BirdLife International because of its importance for wild birds, especially estrildid finches.[26]

                                                                                            Logistics

                                                                                            Much of the produce is exported to South East Asia.[15] Sugar, which was produced from the late 1990s until the end of 2007 in the ORIA was trucked to Wyndham where it was exported to a Korean-owned food manufacturing plant in Surabaya, Indonesia. Fruit and vegetables are sold to domestic markets and are trucked to all capital cities. The ORIA is also home to the largest commercial Indian Sandalwood plantations in the world.

                                                                                            See also

                                                                                            • Irrigation in Australia
                                                                                            • List of rivers of Australia
                                                                                            • List of watercourses in Western Australia

                                                                                            References

                                                                                            1. ^ “Bonzle Digital Atlas Map of Ord River, WA”. 2008. Retrieved 27 November 2008..mw-parser-output cite.citation{font-style:inherit}.mw-parser-output q{quotes:”””””””‘””‘”}.mw-parser-output code.cs1-code{color:inherit;background:inherit;border:inherit;padding:inherit}.mw-parser-output .cs1-lock-free a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/9px-Lock-green.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-limited a,.mw-parser-output .cs1-lock-registration a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Lock-gray-alt-2.svg/9px-Lock-gray-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-lock-subscription a{background:url(“//upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Lock-red-alt-2.svg/9px-Lock-red-alt-2.svg.png”)no-repeat;background-position:right .1em center}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration{color:#555}.mw-parser-output .cs1-subscription span,.mw-parser-output .cs1-registration span{border-bottom:1px dotted;cursor:help}.mw-parser-output .cs1-hidden-error{display:none;font-size:100%}.mw-parser-output .cs1-visible-error{font-size:100%}.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration,.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left,.mw-parser-output .cs1-kern-wl-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right,.mw-parser-output .cs1-kern-wl-right{padding-right:0.2em}
                                                                                            2. ^ “Australian Natural Resources Atlas – Surface Water Management Area: Ord River (WA)”. 2007. Archived from the original on 28 July 2008. Retrieved 27 November 2008.
                                                                                            3. ^ “Technology in Australia – Ord River catchment regeneration project”. 2008. Retrieved 27 November 2008.
                                                                                            4. ^ https://www.researchgate.net/publication/228110703_The_Response_of_the_Lower_Ord_River_and_Estuary_to_Management_of_Catchment_Flows_and_Sediment_and_Nutrient_Loads_Final_Science_Report
                                                                                            5. ^ https://www.researchgate.net/publication/263543507_The_Ord_River_Estuary_A_Regulated_Wet-Dry_Tropical_River_System
                                                                                            6. ^ Case Study: The Ord River page 206 of Turner, Lynne; Cooperative Research Centre for Coastal Zone, Estuary and Waterway Management (Australia); CSIRO Publishing (2006), Where river meets sea : exploring Australia’s estuaries, CSIRO Publishing, ISBN 978-0-643-09258-7
                                                                                            7. ^ “Protecting Ramsar wetlands: Site Investment Guide: Ord River Floodplain Ramsar Wetland”. Commonwealth of Australia. Retrieved 24 May 2010.
                                                                                            8. ^ Vanessa Mills (10 February 2011). “How Kununurra got its name”. Australian Broadcasting Corporation. Retrieved 24 September 2018.
                                                                                            9. ^ ab “Exploration”. The West Australian. Perth: National Library of Australia. 27 February 1880. p. 3. Retrieved 8 January 2012.
                                                                                            10. ^ abcdefg “Looking Back – January 27th 2011”. Kununurra, Western Australia: Kununurra Historical Society Inc. 2011. Retrieved 7 January 2012.
                                                                                            11. ^ Land of Promises: Aborigines and Development in the East Kimberley by Herbert Cole Coombs, Centre for Resource and Environmental Studies, Australian National University, 1989.
                                                                                            12. ^ abc “Looking Back – February 10th 2011”. Kununurra, Western Australia: Kununurra Historical Society Inc. 2011. Retrieved 7 January 2012.
                                                                                            13. ^ “1961 Kununurra Townsite Proclamation”. Kununurra, Western Australia: Kununurra Historical Society Inc. 2011. Retrieved 7 January 2012.
                                                                                            14. ^ “Kimberley-Echo-10th-March-2011-KHS-History-Column” (PDF). Kununurra, Western Australia: Kununurra Historical Society Inc. 2011. Retrieved 7 January 2012.
                                                                                            15. ^ abcd Pigram, John J. (2007). Australia’s Water Resources: From use to management. Collingwood, Victoria: CSIRO Publishing. pp. 52–53. ISBN 978-0-643-09442-0.
                                                                                            16. ^ Film – Building the Ord River Dam – Water Authority of Western Australia
                                                                                            17. ^ Kittel, Nicholas. “The seven engineering wonders – the ord river irrigation scheme”. ABC Northern Territory. Australian Broadcasting Corporation. Retrieved 2008-08-20.
                                                                                            18. ^ Tristan Knowles, Economists at Large. The Wilderness Society. 2013. Rivers, rivers, everywhere. The Ord River Irrigation Area and the economics of developing riparian water resources. Prepared for the Wilderness Society, Economists at Large, Melbourne, Australia.
                                                                                            19. ^ Ord-East Kimberley Development. Report 20 of the Office of the Auditor General for Western Australia. 7 Sept 2016. https://audit.wa.gov.au/reports-and-publications/reports/ord-east-kimberley-development/auditor-generals-overview/
                                                                                            20. ^ Dam the expense. The Ord River irrigation scheme and the development of northern Australia. Matt Grudnoff, Rod Campbell. May 2017. The Australia Institute, Level 5, 131 City Walk, Canberra, ACT 2601 http://www.tai.org.au/sites/defualt/files/P309%20Dam%20the%20expense%20-%20Ord%20River%20report%20FINAL.3_0.pdf
                                                                                            21. ^ Tony Barrass (23 December 2009). “Ord River dream finally bears fruit”. The Australian. News Limited. Retrieved 18 May 2010.
                                                                                            22. ^ ab “Ord River Irrigation Scheme”. Kimberley Development Commission. Government of Western Australia. Retrieved 24 May 2010.
                                                                                            23. ^ Tony Barrass (23 December 2009). “Our northern nirvana”. The Australian. Retrieved 29 April 2012.
                                                                                            24. ^ ab Louise Pemble (27 May 2008). “Ord River’s ecology explained”. ScienceAlert. Retrieved 25 October 2010.
                                                                                            25. ^ “ABC News Gilbert River irrigation plan”. Retrieved 27 March 2014.
                                                                                            26. ^ “IBA: Ord Irrigation Area”. Birdata. Birds Australia. Archived from the original on 6 July 2011. Retrieved 11 September 2011.

                                                                                            Notes

                                                                                            .mw-parser-output .refbegin{font-size:90%;margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{list-style-type:none;margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li,.mw-parser-output .refbegin-hanging-indents>dl>dd{margin-left:0;padding-left:3.2em;text-indent:-3.2em;list-style:none}.mw-parser-output .refbegin-100{font-size:100%}

                                                                                            • Ord Development Council. Conference (1991 : Kununurra, W.A) 50 years of Ord irrigation : review & future perspectives : conference proceedings, Kununurra, Western Australia, 1–3 November 1991 / sponsored by Minister for North West Agriculture, Water Resources, Ord Development Council. Kununurra : Ord Development Council, 1991.

                                                                                            External links

                                                                                            • NT Country Hour – 29/8/2002: Katherine – a future rail transport hub? – ABC.
                                                                                            • Tropical Forestry Services which harvests Indian Sandalwood in the ORIS.
                                                                                            • Kununurra Historical Society Inc. Archive, Library, Museum & Research for history and images of the Ord River.

                                                                                            Coordinates: 15°30′S 128°21′E / 15.500°S 128.350°E / -15.500; 128.350