Abbreviations, automatic: Difference between revisions

no edit summary
(→‎{{header|JavaScript}}: Added a functionally composed variant)
No edit summary
Line 2,028:
4 djadomingu djaluna djamars djarason djaweps djabièrnè djasabra
2 Killachau Atichau Quoyllurchau Illapachau Chaskachau Kuychichau Intichau</pre>
 
=={{header|COBOL}}==
{{works with|GnuCOBOL|3.1.2.0}}
<lang cobol> IDENTIFICATION DIVISION.
PROGRAM-ID. AUTO-ABBREVIATIONS.
 
ENVIRONMENT DIVISION.
 
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT DOW ASSIGN TO "days-of-week.txt"
ORGANIZATION IS LINE SEQUENTIAL.
 
DATA DIVISION.
FILE SECTION.
FD DOW.
01 DOW-FILE PIC X(200).
 
WORKING-STORAGE SECTION. *> a.k.a. variables
01 DOW-LINE PIC X(200).
01 ENDO PIC 9(1).
01 ENDO2 PIC 9(1).
01 CURDAY PIC X(50).
01 ABPTR PIC 999.
01 LINE-NUM PIC 9(3) VALUE 1.
01 CHARAMT PIC 9(3) VALUE 1.
01 LARGESTCHARAMT PIC 9(3).
01 DAYNUM PIC 9(3) VALUE 1.
01 ABRESTART PIC 9(1).
01 CURABBR PIC X(50).
01 TMP1 PIC 9(3).
01 TMP2 PIC 9(3).
01 TINDEX PIC 9(3) VALUE 1.
01 ABBRLIST.
05 ABBRITEM PIC X(50) OCCURS 7 TIMES.
 
PROCEDURE DIVISION.
OPEN INPUT DOW.
PERFORM UNTIL ENDO = 1
READ DOW INTO DOW-LINE
AT END MOVE 1 TO ENDO
NOT AT END PERFORM
*> loop through each line
IF DOW-LINE = "" THEN
DISPLAY ""
ELSE
MOVE 0 TO ENDO2
MOVE 0 TO CHARAMT
 
PERFORM UNTIL ENDO2 > 0
MOVE 1 TO ABPTR
MOVE 1 TO DAYNUM
MOVE 0 TO ABRESTART
 
ADD 1 TO CHARAMT
 
*> reset the abbreviation table
MOVE 1 TO TINDEX
PERFORM 7 TIMES
MOVE SPACE TO ABBRITEM(TINDEX)
ADD 1 TO TINDEX
END-PERFORM
 
*> loop through each day
PERFORM 7 TIMES
UNSTRING DOW-LINE DELIMITED BY SPACE
INTO CURDAY
WITH POINTER ABPTR
END-UNSTRING
 
MOVE 0 TO TMP1
MOVE 0 TO TMP2
INSPECT CURDAY
TALLYING TMP1 FOR ALL CHARACTERS
INSPECT CURDAY
TALLYING TMP2 FOR ALL SPACE
SUBTRACT TMP2 FROM TMP1
IF TMP1 > LARGESTCHARAMT THEN
MOVE TMP1 TO LARGESTCHARAMT
END-IF
 
*> not enough days error
IF CURDAY = "" THEN
MOVE 3 TO ENDO2
END-IF
 
MOVE CURDAY(1:CHARAMT) TO CURABBR
 
*> check if the current abbreviation is already taken
MOVE 1 TO TINDEX
PERFORM 7 TIMES
IF ABBRITEM(TINDEX) = CURABBR THEN
MOVE 1 TO ABRESTART
END-IF
ADD 1 TO TINDEX
END-PERFORM
 
MOVE CURABBR TO ABBRITEM(DAYNUM)
 
ADD 1 TO DAYNUM
 
END-PERFORM
 
IF ABRESTART = 0 THEN
MOVE 1 TO ENDO2
END-IF
 
*> identical days error
IF CHARAMT > LARGESTCHARAMT THEN
MOVE 2 TO ENDO2
END-IF
 
END-PERFORM
 
DISPLAY "Line " LINE-NUM ": " WITH NO ADVANCING
 
IF ENDO2 = 3 THEN
DISPLAY "Error: not enough " WITH NO ADVANCING
DISPLAY "days"
ELSE IF ENDO2 = 2 THEN
DISPLAY "Error: identical " WITH NO ADVANCING
DISPLAY "days"
ELSE
DISPLAY CHARAMT ": " WITH NO ADVANCING
 
*> loop through each day and display its abbreviation
MOVE 1 TO TINDEX
PERFORM 7 TIMES
MOVE ABBRITEM(TINDEX) TO CURABBR
 
MOVE 0 TO TMP1
MOVE 0 TO TMP2
INSPECT CURABBR
TALLYING TMP1 FOR ALL CHARACTERS
INSPECT CURABBR
TALLYING TMP2 FOR TRAILING SPACES
SUBTRACT TMP2 FROM TMP1
 
DISPLAY CURABBR(1:TMP1) WITH NO ADVANCING
DISPLAY "." WITH NO ADVANCING
 
IF TINDEX < 7 THEN
DISPLAY SPACE WITH NO ADVANCING
ELSE
DISPLAY X"0a" WITH NO ADVANCING *> go to next line
END-IF
 
ADD 1 TO TINDEX
END-PERFORM
END-IF
 
END-IF
 
END-PERFORM
END-READ
 
ADD 1 TO LINE-NUM
END-PERFORM.
CLOSE DOW.
STOP RUN.
</lang>
{{out}}
<pre style="height:45ex">
auto-abbreviations.cbl:42: warning: alphanumeric literal has zero length; a SPACE will be assumed [-Wothers]
auto-abbreviations.cbl:43: warning: alphanumeric literal has zero length; a SPACE will be assumed [-Wothers]
auto-abbreviations.cbl:81: warning: alphanumeric literal has zero length; a SPACE will be assumed [-Wothers]
Line 001: 002: Su. Mo. Tu. We. Th. Fr. Sa.
Line 002: 002: So. Ma. Di. Wo. Do. Vr. Sa.
Line 003: 004: E_dj. E_h?. E_ma. E_m?. E_en. E_pr. E_sh.
Line 004: 002: Eh. Se. Ma. Er. Ha. Ar. Ke.
Line 005: 005: Al_Ah. Al_It. Al_Th. Al_Ar. Al_Ka. Al_Go. Al_Sa.
Line 006: 004: Guir. Yerg. Yere. Tcho. Hink. Ourp. Shap.
Line 007: 002: do. ll. ma. mi. xu. vi. s?.
Line 008: 002: Ba. Bi. Ç. Ü. D?. Be. Al.
Line 009: 006: Igande. Astele. Astear. Asteaz. Ostegu. Ostira. Larunb.
Line 010: 004: Robi. Shom. Mong. Budh. BRih. Shuk. Shon.
Line 011: 002: Ne. Po. Ut. Sr. Cx. Pe. Su.
Line 012: 005: Disul. Dilun. Dimeu. Dimer. Diria. Digwe. Disad.
Line 013: 002: ne. po. vt. sr. ch. pe. sa.
Line 014: 012: sing_kei_yah. sing_kei_yat. sing_kei_yee. sing_kei_saa. sing_kei_sie. sing_kei_ng. sing_kei_luk.
Line 015: 004: Dium. Dill. Dima. Dime. Dijo. Dive. Diss.
Line 016: 016: Dzeenkk-eh. Dzeehn_kk-ehreh. Dzeehn_kk-ehreh_. Tah_neesee_dzeeh. Deehn_ghee_dzee-. Tl-oowey_tts-el_. Dzeentt-ahzee.
Line 017: 006: dy_Sul. dy_Lun. dy_Meu. dy_Mer. dy_You. dy_Gwe. dy_Sad.
Line 018: 002: Di. Le. Ma. M?. Je. Va. Sa.
Line 019: 002: ne. po. ut. sr. cx. pe. su.
Line 020: 002: ne. po. ú. st. c^. p?. so.
Line 021: 002: So. Mo. Ti. Wa. TO. Fe. Sa.
Line 022: 002: s0. ma. ti. on. to. fr. l0.
Line 023: 002: zo. ma. di. wo. do. vr. za.
Line 024: 002: Di. Lu. Ma. Me. ^J. Ve. Sa.
Line 025: 001: p. e. t. k. n. r. l.
Line 027: 007: Diu_pri. Diu_seq. Diu_tri. Diu_qua. Diu_qui. Diu_sex. Diu_sab.
Line 028: 002: su. m?. t?. mi. h?. fr. le.
Line 029: 002: Ye. Do. Se. Ch. Pa. Jo. Sh.
Line 030: 002: su. ma. ti. ke. to. pe. la.
Line 031: 002: di. lu. ma. me. je. ve. sa.
Line 032: 004: Snei. Moan. Tiis. Woan. Tone. Free. Sneo.
Line 033: 002: Do. Se. Ma. M?. Jo. Ve. S?.
Line 034: 002: k'. or. sa. ot. kh. p'. sh.
Line 035: 002: So. Mo. Di. Mi. Do. Fr. Sa.
Line 036: 002: Ki. De. Tr. Te. Pe. Pa. Sa.
Line 037: 003: rav. som. man. bud. gur. shu. sha.
Line 038: 007: pópule. pó`aka. pó`alu. pó`ako. pó`ah?. pó`ali. pó`aon.
Line 039: 007: Yom_ris. Yom_she. Yom_shl. Yom_rev. Yom_cha. Yom_shi. Shabat.
Line 040: 003: rav. som. man. bud. bra. shu. sha.
Line 041: 003: vas. hé. ked. sze. cs?. pé. szo.
Line 042: 002: Su. M?. ?. Mi. Fi. F?. La.
Line 043: 002: su. lu. ma. me. jo. ve. sa.
Line 044: 003: Min. Sen. Sel. Rab. Kam. Jum. Sab.
Line 045: 002: Do. Lu. Ma. Me. Jo. Ve. Sa.
Line 046: 005: Dé_D. Dé_L. Dé_M. Dé_C. Dé_a. Dé_h. Dé_S.
Line 047: 002: do. lu. ma. me. gi. ve. sa.
Line 048: 002: Ni. Ge. Ka. Su. Mo. Ki. Do.
Line 049: 001: I. W. H. S. M. K. T.
Line 050: 007: Dies_Do. Dies_Lu. Dies_Ma. Dies_Me. Dies_Io. Dies_Ve. Dies_Sa.
Line 051: 003: sve. pir. otr. tre. cet. pie. ses.
Line 052: 002: Se. Pi. An. Tr. Ke. Pe. S^.
Line 053: 003: Wan. Kaz. Wal. Muk. Kiw. Nna. Wam.
Line 054: 012: xing-_qi-_r?. xing-_qi-_yi. xing-_qi-_è. xing-_qi-_sa. xing-_qi-_s?. xing-_qi-_wu. xing-_qi-_li.
Line 055: 003: Jed. Jel. Jem. Jec. Jar. Jeh. Jes.
Line 056: 003: Jab. Man. Juj. Won. Tai. Bal. Jar.
Line 057: 005: gemin. minò. márt. mièr. mishe. bèrn. mish?.
Line 058: 002: Ah. Is. Se. Ra. Kh. Ju. Sa.
Line 059: 002: s?. ma. ti. on. to. fr. l?.
Line 060: 007: lo_dime. lo_dilu. lo_dima. lo_dim?. lo_dij?. lo_dive. lo_diss.
Line 061: 004: djad. djal. djam. djar. djaw. djab. djas.
Line 062: 002: Ni. Po. Wt. S,. Cz. Pi. So.
Line 063: 003: Dom. seg. ter. qua. qui. sex. så.
Line 064: 001: D. L. m. M. J. V. S.
Line 065: 002: Du. Lu. Ma. Mi. Jo. Vi. S?.
Line 066: 002: vo. po. vt. sr. ch. py. su.
Line 067: 004: Sund. Di-l. Di-m. Di-c. Di-a. Di-h. Di-s.
Line 068: 002: ne. po. ut. sr. cx. pe. su.
Line 069: 005: Sonta. Mmant. Labob. Labor. Labon. Laboh. Moqeb.
Line 070: 002: Ir. Sa. An. Ba. Br. Si. Se.
Line 071: 002: ne. po. ut. st. s^. pi. so.
Line 072: 002: Ne. Po. To. Sr. Cx. Pe. So.
Line 073: 002: do. lu. ma. mi. ju. vi. s?.
Line 074: 002: so. mu. tu. dr. fo. fr. Sa.
Line 075: 007: Jumapil. Jumatat. Jumanne. Jumatan. Alhamis. Ijumaa. Jumamos.
Line 076: 002: s?. m?. ti. on. to. fr. lo.
Line 077: 002: Li. Lu. Ma. Mi. Hu. Bi. Sa.
Line 078: 007: Lé-pà. Pài-it. Pài-j?. Pài-sa. Pài-s?. Pài-g?. Pài-l?.
Line 079: 007: wan-ar-. wan-tja. wan-ang. wan-pho. wan-pha. wan-soo. wan-sao.
Line 080: 005: Tship. Mosup. Labob. Labor. Labon. Labot. Matlh.
Line 081: 006: Pazar. Pazart. Sali. Çar,s. Per,se. Cuma. Cumart.
Line 082: 002: ne. po. vi. se. ch. py. su.
Line 083: 009: Chu?_Nhâ. Thú*_Hai. Thú*_Ba. Thú*_Tu*. Thú*_Na'. Thú*_Sá. Thú*_Ba?.
Line 084: 006: dydd_S. dyds_L. dydd_M. dyds_M. dydd_I. dydd_G. dyds_S.
Line 085: 003: Dib. Alt. Tal. All. Al_. Alj. Gaa.
Line 086: 007: iCawa. uMvulo. uLwesib. uLwesit. uLuwesi. uLwesih. uMgqibe.
Line 087: 002: zu. mo. di. mi. do. fr. sh.
Line 088: 007: iSonto. uMsombu. uLwesib. uLwesit. uLwesin. uLwesih. uMgqibe.
Line 089: 007: Dies_Do. Dies_Lu. Dies_Ma. Dies_Me. Dies_Io. Dies_Ve. Dies_Sa.
Line 090: 015: Bazar_gÜnÜ. Bazar_ærtæsi. Çærs,ænbæ_a. Çærs,ænbæ_g. CÜmæ_axs,amò. CÜmæ_gÜnÜ. CÜmæ_Senbæ.
Line 091: 002: Su. Mo. Ma. Me. Jo. Ve. Sa.
Line 092: 002: zo. ma. di. wo. do. vr. za.
Line 093: 002: Ko. Gy. Be. Ku. YO. Fe. Me.
Line 094: 005: Sonnt. Monta. Diens. Mittw. Donne. Freit. Sonna.
Line 095: 001: D. L. T. C. X. V. S.
Line 096: 007: Dies_So. Dies_Lu. Dies_Ma. Dies_Me. Dies_Io. Dies_Ve. Dies_Sa.
Line 097: 012: xing-_qi-_ti. xing-_qi-_yi. xing-_qi-_è. xing-_qi-_sa. xing-_qi-_s?. xing-_qi-_wu. xing-_qi-_li.
Line 098: 004: djad. djal. djam. djar. djaw. djab. djas.
Line 099: 002: Ki. At. Qu. Il. Ch. Ku. In.
</pre>
 
=={{header|Common Lisp}}==
Anonymous user